3

enumjackrabbit のプロパティ値に定数を使用したいと考えています。ただし、プリミティブ型とプロパティ値型としてNode.setProperty()のみ受け入れます。StringValue

インターフェイスを調べましたValueFactoryが、それも役に立たないようです。


言い換えれば、私はこれをしたい:

node.setProperty("name", Enum.Const);

これではありません:

node.setProperty("name", Enum.Const.toString());

前もって感謝します。

4

1 に答える 1

9

あなたが望むことをするための標準的な方法はありません。JCR API では、任意のオブジェクト値を保存することはできません。JCR 1.0 で有効なプロパティ タイプは次のとおりです。

  • STRING
  • BINARY
  • LONG
  • DOUBLE
  • DATE
  • BOOLEAN
  • NAME
  • PATH
  • REFERENCE

これらのプロパティ タイプはすべて JCR 2.0 で有効ですが、新しいタイプがいくつかあります。

  • WEAKREFERENCE
  • URI
  • DECIMAL

さらに、 には任意の からjavax.jcr.ValueFactoryを作成するメソッドがありません。Valuejava.lang.Object

次の 3 つのオプションがあります。

  1. STRING プロパティ タイプを使用し、'toString()' を使用して列挙値を文字列に変換します。また
  2. LONG プロパティ タイプを使用し、' ordinal() 'を使用して列挙値を整数値に変換し、long としてキャストします。また
  3. BINARY プロパティ タイプを使用し、列挙値を BINARY 値に変換します

IMO、オプション 1 が最も理にかなっています。状況によっては、オプション 2 の方が適している場合があります。たとえば、JCR-SQL および JCR-SQL2 のプロパティで比較演算子を使用できます。オプション 3 は機能しますが、あまり実用的ではありません。

オプション 1 と 2 では、ノード タイプの制約も利用できます。ご存知かもしれませんが、ノード タイプ定義には、そのノード タイプで許可されているプロパティ定義と子ノード定義が含まれており、いずれのプロパティ定義も、制約を使用して許可された値を指定できます。制約は、たとえば、ワイルドカード パターンまたはリテラル値 (STRING および PATH プロパティの場合)、値の範囲 (LONG、DOUBLE、および DATE プロパティの場合)、長さの範囲 (BINARY の場合)、ノード タイプの要件 ( REFERENCE および WEAKREFERENCE プロパティ)、リテラル (NAME プロパティ用)。制約によって許可さている限り、値は有効であると見なされることに注意してください。

したがって、オプション 1 または 2 では、列挙型を記述するプロパティ定義で制約を使用して、許容される値を制限できます。オプション 1 の場合、列挙型の STRING リテラル値によって、プロパティに設定できる値が制限されます。JCR 2.0 の CND 表記を使用した簡単な例を次に示します。

[ex:foo] mixin
- ex:bar (STRING) < 'VALUE1','VALUE2','VALUE3'

オプション 2 では、許容可能な LONG 値を持つ範囲 (または範囲のセット) が機能します。簡単な例を次に示します。

[ex:foo] mixin
- ex:bar (STRING) < [0,3)

于 2010-09-28T13:53:55.793 に答える