Propriétés imbriquées

La valeur de nombreuses propriétés constitue une référence pour une autre ressource.

Si la valeur d'une propriété est une référence pour une ressource, la PropertyRequest peut contenir un objet NestedPropertyName au lieu d'un objet PropertyName pour la propriété. L'objet NestedPropertyName possède un nom de propriété racine et une PropertyRequest imbriquée. Il demande des propriétés à la ressource référencée par la valeur de la propriété nommée en tant que racine.

Parallèlement à la spécification du nom de la propriété, un NestedPropertyName comprend également sa propre PropertyRequest. Cette PropertyRequest imbriquée spécifie les propriétés de la ressource référencée par la propriété de la ressource d'origine dont les valeurs doivent être obtenues auprès de la ressource référencée.

Par exemple, le fragment de code suivant crée une liste de noms de propriété qui identifie les propriétés CREATOR_DISPLAY_NAME, CHECKED_IN, et LAST_MODIFIED, ainsi que le VERSION_NAME et la CREATION_DATE de la valeur de la propriété CHECKED_IN. Dans cet exemple, la méthode nest crée et renvoie un NestedPropertyName.
PropertyRequest my_prop_request = new PropertyRequest(ControllableResource.CREATOR_DISPLAY_NAME,
     ControllableResource.CHECKED_IN.nest(
            Version.VERSION_NAME,
            Version.CREATION_DATE).
     ControllableResource.LAST_MODIFIED);
Après avoir spécifié les propriétés imbriquées, vous pouvez appeler la méthode doReadProperties et accéder aux propriétés imbriquées. Par exemple :
resource = 
   (ControllableResource) resource.doReadProperties(my_prop_request);
String versionName = resource.getCheckIn().getVersionName();
// travailler avec les propriétés ...  

Dans un NestedPropertyName, la PropertyRequest qui désigne les propriétés à récupérer sur le serveur peut être augmentée avec des éléments MetaPropertyName, qui permettent au client de demander des méta-propriétés spécifiques d'une propriété (au lieu de, ou en plus de sa méta-propriété VALUE).

La valeur d'une propriété qui fait référence à une autre ressource est un proxy, et ce proxy contient les propriétés demandées dans le NestedPropertyName. De plus, des éléments NestedPropertyName peuvent être inclus dans une PropertyRequest afin de demander une propriété d'une ressource référencée par une méta-propriété, ou une méta-propriété d'une propriété référencée par une méta-propriété. Par exemple :
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());

La PropertyRequest imbriquée dans un NestedPropertyName peut elle-même contenir des objets NestedPropertyName supplémentaires. Ainsi, dans une interaction avec le serveur, il est possible de récupérer un nombre arbitraire de ressources apparentées ainsi que leurs propriétés.


Retour d'informations