2014-11-02 2 views
0

С CMIS Я могу добавить объект к объекту. Свойство может иметь одно значение или может быть многозначным свойством. Когда у вас есть многозначное свойство для нескольких объектов, как вы можете искать все объекты, у которых есть это свойство, а свойство содержит определенное значение или несколько конкретных значений?CMIS - Поиск свойств списка

Например. (Пример взят из here)

CmisObject cmisobject = .... 

Map<String, Object> updateProperties = new HashMap<String, Object>(); 

List<String> shoppingList = new ArrayList<String>(); 
shoppingList.add("milk"); 
shoppingList.add("bread"); 
shoppingList.add("cheese"); 
updateProperties.put("my:shopping.list", shoppingList); // multi-value property 

cmisobject.updateProperties(updateProperties); 

Теперь, если я хочу, чтобы выполнить запрос для всех объектов, имеет свойство мой: shopping.list и где свойство содержит значение хлеба или значения молоко И сыр, как бы я это сделал?

+0

Что произойдет, если вы делаете КМИС запрос типа 'мой: shopping.list = "хлеб" ИЛИ (мой: shopping.list = "сыр" и мой: shopping.list = «молоко») '- разве это не работает? – Gagravarr

ответ

0

Попробуйте это:

boolean isPropertyPresent(Map<String, Object> updateProperties) {//should use List<String> instead of Object 
    List<String> shoppingList = (List<String>) updateProperties.get("my:shopping.list"); 
    if (shoppingList != null) { 
     return shoppingList.contains("bread") || (shoppingList.contains("milk") && shoppingList.contains("cheese")); 
    } 
    return false; 
} 
+0

Это решение означает сначала получение всех объектов репозиториев, а затем их повторение для идентификации конкретных объектов, которые меня интересуют. Если у меня есть хранилище с десятками тысяч объектов, мне нужно сначала восстановить ВСЕ их, сделав это очень непрактичное решение. – jimka

+0

Если у вас нет дубликата, используйте HashSet вместо списка, и это будет означать, что вы можете сказать, что содержит с O (1) – SMA

Смежные вопросы