Der Wert vieler Eigenschaften ist ein Verweis auf eine andere Ressource.
Wenn der Wert einer Eigenschaft ein Verweis auf eine Ressource ist, kann die Anforderung (PropertyRequest) an Stelle des PropertyName-Objekts für die Eigenschaft ein NestedPropertyName-Objekt enthalten. Das NestedPropertyName-Objekt enthält den Namen einer Stammeigenschaft und eine verschachtelte Anforderung (PropertyRequest). Es fordert Eigenschaften von der Ressource an, auf die der Wert der benannten Stammeigenschaft verweist.
Ein NestedPropertyName-Objekt gibt nicht nur den Namen der Eigenschaft an, sondern enthält auch eine eigene Anforderung (PropertyRequest). Dieses verschachtelte PropertyRequest-Objekt gibt die Eigenschaften der Ressource an, auf die die Eigenschaft der ursprünglichen Ressource verweist und deren Werte von der referenzierten Ressource abgerufen werden sollen.
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(); // Arbeiten mit den Eigenschaften ...
In einem NestedPropertyName kann die Anforderung (PropertyRequest), die die vom Server abzurufenden Eigenschaften bezeichnet, mit MetaPropertyName-Elementen erweitert werden, so dass der Client (an Stelle der oder zusätzlich zur Metaeigenschaft VALUE) bestimmte Metaeigenschaften für eine Eigenschaft anfordern kann.
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());
Die in einem NestedPropertyName verschachtelte Anforderung (PropertyRequest) kann wiederum weitere NestedPropertyName-Objekte enthalten. So kann innerhalb einer Interaktion mit dem Server eine beliebige Anzahl zugehöriger Ressourcen mit ihren Eigenschaften abgerufen werden.