プロパティの値がリソースへの参照である場合、PropertyRequest には、 プロパティの PropertyName オブジェクトの代わりに、NestedPropertyName オブジェクトが 設定されることがあります。NestedPropertyName オブジェクトには、ルート プロパティ名とネストされた PropertyRequest があります。 これは、root と名前を付けられたプロパティの値で参照されるリソースからプロパティを要求します。
プロパティの名前の指定に加えて、NestedPropertyName には、自身の PropertyRequest も組み込まれます。このネストされた PropertyRequest は、 オリジナル リソースのプロパティが参照しているリソースのプロパティを指定します。 このオリジナル リソースの値は、参照先リソースから取得します。
PropertyRequest my_prop_request = new PropertyRequest(ControllableResource.CREATOR_DISPLAY_NAME, ControllableResource.CHECKED_IN.nest( Version.VERSION_NAME, Version.CREATION_DATE). ControllableResource.LAST_MODIFIED);
resource = (ControllableResource) resource.doReadProperties(my_prop_request); String versionName = resource.getCheckIn().getVersionName(); // work with the properties ...
NestedPropertyName の場合、サーバーから取得するプロパティを 指定する PropertyRequest は、MetaPropertyName エレメントを付けて 拡張できます。これにより、クライアントは、プロパティの特定のメタプロパティを (VALUE メタプロパティの代わりか、このプロパティに加えて) 要求できます。
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 オブジェクトを含めることができます。結果、サーバーとの 一度の対話で、任意の数の関連リソースとリソースのプロパティを 取得できます。