Propiedades anidadas

El valor de muchas propiedades es una referencia a otro recurso.

Si el valor de una propiedad es una referencia a un recurso, es posible que PropertyRequest contenga un objeto NestedPropertyName en lugar del objeto PropertyName de la propiedad. El objeto NestedPropertyName tiene un nombre de propiedad raíz y una PropertyRequest anidada. Solicita propiedades del recurso al que hace referencia el valor de la propiedad denominada raíz.

Además de especificar el nombre de la propiedad, un objeto NestedPropertyName también incluye su propia PropertyRequest. Esta PropertyRequest anidada especifica las propiedades del recurso a las que hace referencia la propiedad del recurso original cuyos valores deben obtenerse a partir del recurso al que se hace referencia.

Por ejemplo, en el fragmento de código siguiente, se crea una lista de nombres de propiedad que identifica las propiedades CREATOR_DISPLAY_NAME, CHECKED_IN y LAST_MODIFIED, así como VERSION_NAME y CREATION_DATE del valor de la propiedad CHECKED_IN. En este ejemplo, el método nest construye y devuelve 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);
Después de especificar las propiedades anidadas, puede llamar al método doReadProperties y acceder a las propiedades anidadas. Por ejemplo:
resource = 
   (ControllableResource) resource.doReadProperties(my_prop_request);
String versionName = resource.getCheckIn().getVersionName();
// work with the properties ...  

En un NestedPropertyName, la PropertyRequest que designa a las propiedades que deben recuperarse desde el servidor puede aumentarse con elementos MetaPropertyName, los cuales permiten al cliente solicitar metapropiedades específicas de una propiedad (en lugar o además de su metapropiedad VALUE).

El valor de una propiedad que hace referencia a otro recurso es un proxy y dicho proxy contiene las propiedades solicitadas en NestedPropertyName. Asimismo, los elementos NestedPropertyName pueden incluirse en una PropertyRequest para solicitar una propiedad de un recurso al que hace referencia una metapropiedad o una metapropiedad de una propiedad a la que hace referencia una metapropiedad. Por ejemplo:
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 anidada en un NestedPropertyName puede, en sí misma, contener objetos NestedPropertyName adicionales. Por lo tanto, en una interacción con el servidor, es posible recuperar un número arbitrario de recursos relacionados y sus propiedades.


Comentarios