in src/main/java/org/apache/jackrabbit/ocm/manager/collectionconverter/impl/ResidualPropertiesCollectionConverterImpl.java [91:145]
protected ManageableObjects doGetCollection(Session session,
Node parentNode, CollectionDescriptor collectionDescriptor,
Class collectionFieldClass) throws RepositoryException {
try {
String jcrName = getCollectionJcrName(collectionDescriptor);
PropertyIterator pi = parentNode.getProperties(jcrName);
if (!pi.hasNext()) {
return null;
}
ManageableObjects objects = ManageableObjectsUtil.getManageableObjects(collectionFieldClass);
AtomicTypeConverter atomicTypeConverter = getAtomicTypeConverter(collectionDescriptor);
while (pi.hasNext()) {
Property prop = pi.nextProperty();
// ignore protected properties here
if (prop.getDefinition().isProtected()) {
continue;
}
// handle multvalues as a list
Object value;
if (prop.getDefinition().isMultiple()) {
List valueList = new ArrayList();
Value[] values = prop.getValues();
for (int i = 0; i < values.length; i++) {
valueList.add(atomicTypeConverter.getObject(values[i]));
}
value = valueList;
} else {
value = atomicTypeConverter.getObject(prop.getValue());
}
if (objects instanceof Map) {
String name = prop.getName();
((Map) objects).put(name, value);
} else {
if (objects instanceof ManageableCollection)
((ManageableCollection)objects).addObject(value);
else
{
String name = prop.getName();
((ManageableMap)objects).addObject(name, value);
}
}
}
return objects;
} catch (ValueFormatException vfe) {
throw new ObjectContentManagerException("Cannot get the collection field : "
+ collectionDescriptor.getFieldName() + "for class "
+ collectionDescriptor.getClassDescriptor().getClassName(), vfe);
}
}