Propriedades Aninhadas

O valor de várias propriedades é uma referência a um outro recurso.

Se o valor de uma propriedade for uma referência a um recurso, o PropertyRequest poderá conter o objeto NestedPropertyName em vez do objeto PropertyName para a propriedade. O objeto NestedPropertyName tem um nome de propriedade raiz e um PropertyRequest aninhado. Ele solicita propriedades do recurso com referência pelo valor da propriedade nomeada como raiz.

Além de especificar o nome da propriedade, um NestedPropertyName também incluir seu próprio PropertyRequest. Esse PropertyRequest aninhado especifica as propriedades do recurso referenciado pela propriedade do recurso original cujos valores serão obtidos do recurso referenciado.

Por exemplo, o fragmento de código a seguir cria uma lista de nomes de propriedades que identifica as propriedades CREATOR_DISPLAY_NAME, CHECKED_IN e LAST_MODIFIED, assim como VERSION_NAME e CREATION_DATE do valor da propriedade CHECKED_IN. Neste exemplo, o método nest constrói e retorna um NestedPropertyName.
PropertyRequest my_prop_request = new PropertyRequest(ControllableResource.CREATOR_DISPLAY_NAME,
     ControllableResource.CHECKED_IN.nest(
            Version.VERSION_NAME,
            Version.CREATION_DATE).
     ControllableResource.LAST_MODIFIED);
Depois de especificar as propriedades aninhadas, você pode chamar o método doReadProperties e acessar as propriedades aninhadas. Por exemplo:
resource = 
   (ControllableResource) resource.doReadProperties(my_prop_request);
String versionName = resource.getCheckIn().getVersionName();
// trabalhar com as propriedades...  

Em um NestedPropertyName, o PropertyRequest que designa as propriedades a serem recuperadas do servidor pode ser aumentado com elementos de MetaPropertyName, que permitem que o cliente solicite metapropriedades específicas de uma propriedade (em vez de, ou além de, sua metapropriedade VALUE).

O valor de uma propriedade que faz referência a outro recurso é um proxy, e esse proxy contém as propriedades solicitadas no NestedPropertyName. Além disso, os elementos do NestedPropertyName podem ser incluídos em um PropertyRequest para solicitar uma propriedade de um recurso com referência por uma metapropriedade, ou uma metapropriedade de uma propriedade com referência por uma metapropriedade. Por exemplo:
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());

O próprio PropertyRequest aninhado em um NestedPropertyName pode conter objetos NestedPropertyName adicionais. Portanto, em uma interação com o servidor, é possível recuperar um número arbitrário de recursos relacionados e suas propriedades.


Feedback