PropertyのisContainment()とisMany()
DataGraphとDataObjectを実際にプログラムの中で扱ってみると、直感的にわからないことが多いのに気付きます。TypeとPropertyのメソッドも、何が取得できるのかわかりにくい。
とりあえず、サンプルのUsingTypeAndPropertyWithDataObjects.javaを参考に、DataGraphに格納されている値をSequenceを使わずに全て取り出してみました。余談ですが、SDOのサンプルプログラムはこのように、クラスが何をしているのかわかるようなとても長い名前が付けられています。
先ずは、 getRootObject()メソッドで、DataGraphからルートDataObjectを取得。
次に、getType().getProperties()メソッドで、ルートDataObjectからプロパティを取得。
ここから先が、直感的ではなくなってきます。プロパティがどんな状態なのかを調べなければなりません。
- 単一の値を保持している
- 複数の値を保持している -> PropertyのisMany()メソッド
- 包含関係が定義されている -> PropertyのisContainment()メソッド
包含関係が定義されているプロパティが複数という場合もあるでしょう。
/* (isContainment() == true) && (isMany() == false) という場合もあると思うのですが、TuscanyのSDOで試している限りでは、今のところ包含している要素を1つにしても isMany() == true が返ってきます。 */
isMany() == true の場合は、DataObjectのgetListメソッドでListを取得します。DataObjectのgetメソッドの戻り値は、many-valuedならList型になります。
isContainment() == true の場合は、ObjectをDataObjectにキャストして再帰的に値を取得する、という流れです。