Не существует стандартного способа делать то, что вы хотите. JCR API просто не позволяет хранить произвольные значения объектов. Единственные допустимые типы свойств в JCR 1.0:
STRING
BINARY
LONG
DOUBLE
DATE
BOOLEAN
NAME
PATH
REFERENCE
Все эти типы свойств действительны в JCR 2.0, но есть несколько новых:
WEAKREFERENCE
URI
DECIMAL
Кроме того, javax.jcr.ValueFactory
не имеет методов, которые создают Value
из произвольного java.lang.Object
.
Есть три варианта:
- Используйте тип свойства STRING и преобразуйте значение enum в String с помощью 'toString ()'; или
- Используйте тип свойства LONG и преобразуйте свое значение перечисления в целое значение, используя ' ordinal () ' и приведение к типу long; или
- Используйте тип свойства BINARY и преобразуйте значение enum в значение BINARY
IMO, вариант 1 имеет смысл. Вариант 2 может быть лучше в некоторых ситуациях - например, он позволит использовать операторы сравнения для вашего свойства в JCR-SQL и JCR-SQL2. Вариант 3 будет работать, но он не очень практичен.
Опции 1 и 2 также могут использовать ограничения типа узла. Как вы, возможно, знаете, определения типов узлов включают определения свойств и определения дочерних узлов, разрешенные этим типом узла, и любое из определений свойств может указывать допустимые значения с использованием ограничений. Ограничения могут, например, ограничивать допустимые значения свойств с помощью шаблонов подстановочных знаков или литеральных значений (для свойств STRING и PATH), диапазонов значений (для свойств LONG, DOUBLE и DATE), диапазонов длины (для BINARY), требований к типу узла (для Свойства REFERENCE и WEAKREFERENCE), литералы (для свойств NAME). Обратите внимание, что значение считается действительным, если оно допускается любым ограничением.
Таким образом, для варианта 1 или 2 определение свойства, описывающее перечисление, может использовать ограничения для ограничения допустимых значений. В случае варианта 1 литеральные значения перечислений STRING ограничивают допустимые значения, установленные для свойства. Вот простой пример с использованием обозначения CND в JCR 2.0:
[ex: foo] mixin
- например: бар (STRING) <'VALUE1', 'VALUE2', 'VALUE3' </p>
При варианте 2 будет работать диапазон (или набор диапазонов) с приемлемыми значениями LONG. Вот простой пример:
[ex: foo] mixin
- например: бар (STRING) <[0,3) </p>