巢狀內容

許多內容的值是另一個資源的參照。

如果內容的值是資源的參照,PropertyRequest 可能會包含 NestedPropertyName 物件,而非該內容的 PropertyName 物件。NestedPropertyName 物件有一個根內容名稱和一個巢狀 PropertyRequest。根據指定為根的內容的值,這個物件會向此值所參照的資源要求內容。

除了指定內容的名稱之外,NestedPropertyName 也會包含其擁有的 PropertyRequest。這個巢狀 PropertyRequest 會指定原始資源的內容所參照的資源內容(其值會從參照的資源取得)。

例如,以下程式碼片段會建立一個內容名稱清單,其識別 CREATOR_DISPLAY_NAMECHECKED_INLAST_MODIFIED 內容,以及 CHECKED_IN 內容值的 VERSION_NAMECREATION_DATE。在本範例中,巢狀方法會建構並傳回 NestedPropertyName
PropertyRequest my_prop_request = new PropertyRequest(ControllableResource.CREATOR_DISPLAY_NAME,
     ControllableResource.CHECKED_IN.nest(
            Version.VERSION_NAME,
            Version.CREATION_DATE).
     ControllableResource.LAST_MODIFIED);
指定巢狀內容之後,您可以呼叫 doReadProperties 方法及存取巢狀內容。例如:
resource =
   (ControllableResource) resource.doReadProperties(my_prop_request);
String versionName = resource.getCheckIn().getVersionName();
// 使用內容 ...  

在 NestedPropertyName 中,指定從伺服器擷取內容的 PropertyRequest 可以擴增 MetaPropertyName 元素,以允許用戶端要求內容的特定 Meta 內容,(而非或不只其 VALUE Meta 內容)。

如果一個內容參照另一項資源,則此內容的值是一個虛擬物件,該虛擬物件包含 NestedPropertyName 中所要求的內容。此外,NestedPropertyName 元素可以併入 PropertyRequest 中,以要求由 Meta 內容所參照之資源的內容,或要求由 Meta 內容所參照之內容的 Meta 內容。例如:
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());

在 NestedPropertyName 內的巢狀 PropertyRequest 本身可以包含其他 NestedPropertyName 物件。因此,在與伺服器的某個互動中,可能會擷取任意數目的相關資源和其內容。


意見反應