ネストされたプロパティ

プロパティの値の多くは、 別のリソースへの参照です。

プロパティの値がリソースへの参照である場合、PropertyRequest には、 プロパティの PropertyName オブジェクトの代わりに、NestedPropertyName オブジェクトが 設定されることがあります。NestedPropertyName オブジェクトには、ルート プロパティ名とネストされた PropertyRequest があります。 これは、root と名前を付けられたプロパティの値で参照されるリソースからプロパティを要求します。

プロパティの名前の指定に加えて、NestedPropertyName には、自身の PropertyRequest も組み込まれます。このネストされた PropertyRequest は、 オリジナル リソースのプロパティが参照しているリソースのプロパティを指定します。 このオリジナル リソースの値は、参照先リソースから取得します。

たとえば、次のコード フラグメントで作成されるプロパティ名リストは、CREATOR_DISPLAY_NAMECHECKED_INLAST_MODIFIED の 各プロパティと CHECKED_IN プロパティの 値である VERSION_NAMECREATION_DATE を 識別します。この例の nest メソッドは、NestedPropertyName を 構成して、返します。
PropertyRequest my_prop_request = new PropertyRequest(ControllableResource.CREATOR_DISPLAY_NAME,
     ControllableResource.CHECKED_IN.nest(
            Version.VERSION_NAME,
            Version.CREATION_DATE).
     ControllableResource.LAST_MODIFIED);
ネストされたプロパティを指定した後は、doReadProperties メソッドを 呼び出して、ネストされたプロパティにアクセスできます。例を次に示します。
resource = 
   (ControllableResource) resource.doReadProperties(my_prop_request);
String versionName = resource.getCheckIn().getVersionName();
// work with the properties ...  

NestedPropertyName の場合、サーバーから取得するプロパティを 指定する PropertyRequest は、MetaPropertyName エレメントを付けて 拡張できます。これにより、クライアントは、プロパティの特定のメタプロパティを (VALUE メタプロパティの代わりか、このプロパティに加えて) 要求できます。

別のリソースを参照するプロパティの値がプロキシで、そのプロキシには、NestedPropertyName で要求されたプロパティが含まれます。 さらに、NestedPropertyName エレメントを PropertyRequest に組み込み、メタプロパティが参照しているリソースのプロパティ、またはメタプロパティが参照しているプロパティのメタプロパティを要求できます。 例を次に示します。
CqRecord r = p.buildProxy(CqRecord.class, "...");
FieldName<CqRecord> OWNER = new FieldName<CqRecord>("Owner");
FieldName<String> NAME = new FieldName<String>("login_name");
PropertyRequest request =
   new PropertyRequest(OWNER.nest(StpProperty.TYPE,
                                  CqFieldValue.REQUIREDNESS,
                                  StpProperty.VALUE.nest(NAME)));
CqRecord rec = (CqRecord)r.doReadProperties(request);
CqFieldValue<CqRecord> v = rec.getFieldInfo(OWNER);
String name = v.getValue().getProperty(NAME);

PropertyRequest pnl =
   new PropertyRequest(
     CqRecord.FIELDS.nest(
         StpProperty.VALUE.nest(
               StpProperty.NAME,
               StpProperty.TYPE,
               StpProperty.VALUE)));
List<CqFieldValue<?>> fields = ((CqRecord)r.doReadProperties(pnl)).getFields();
for(CqFieldValue<?> field: fields)
    System.out.println("field " + field.getName()
                       ": " + field.getType()
                       " = " + field.getValue());

NestedPropertyName の中にネストされた PropertyRequest 自体に、 追加で NestedPropertyName オブジェクトを含めることができます。結果、サーバーとの 一度の対話で、任意の数の関連リソースとリソースのプロパティを 取得できます。


フィードバック