Verschachtelte Eigenschaften

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.

Das folgende Codefragment erstellt beispielsweise eine Liste mit den Eigenschaftsnamen CREATOR_DISPLAY_NAME, CHECKED_IN und LAST_MODIFIED sowie den Angaben VERSION_NAME und CREATION_DATE für den Wert der Eigenschaft CHECKED_IN. In diesem Beispiel wird mit der Methode nest ein NestedPropertyName erstellt und zurückgegeben.
PropertyRequest my_prop_request = new PropertyRequest(ControllableResource.CREATOR_DISPLAY_NAME,
     ControllableResource.CHECKED_IN.nest(
            Version.VERSION_NAME,
            Version.CREATION_DATE).
     ControllableResource.LAST_MODIFIED);
Nachdem Sie die verschachtelten Eigenschaften angegeben haben, können Sie die Methode doReadProperties aufrufen, um auf diese Eigenschaften zuzugreifen. Beispiel:
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.

Der Wert einer Eigenschaft, die auf eine andere Ressource verweist, ist ein Proxy. Dieser Proxy enthält die im NestedPropertyName angeforderten Eigenschaften. Darüber hinaus können NestedPropertyName-Elemente in eine Anforderung (PropertyRequest) aufgenommen werden, um eine von einer Metaeigenschaft referenzierte Ressourceneigenschaft oder Metaeigenschaft zu einer Eigenschaft anzufordern. Beispiel:
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.


Feedback