protected ManageableObjects doGetCollection()

in src/main/java/org/apache/jackrabbit/ocm/manager/collectionconverter/impl/BeanReferenceMapConverterImpl.java [123:169]


    protected ManageableObjects doGetCollection(Session session,
                                                Node parentNode,
                                                CollectionDescriptor collectionDescriptor,
                                                Class collectionFieldClass) throws RepositoryException {


        try {
            String jcrName = getCollectionJcrName(collectionDescriptor);

            if (!parentNode.hasProperty(jcrName)) {
                return null;
            }

            Property property = parentNode.getProperty(jcrName);
            Value[] values = property.getValues();

            ManageableObjects objects = ManageableObjectsUtil.getManageableObjects(collectionFieldClass);

            // For maps of bean references, only Maps are supported
            if (!(objects instanceof ManageableMap)) {

                throw new JcrMappingException("Impossible to retrieve the attribute "
                        + collectionDescriptor.getFieldName() + " in the class "
                        + collectionDescriptor.getClassDescriptor().getClassName()
                        + " because it is not a map");
            }

            for (int i = 0; i < values.length; i++) {

                String encoded = values[i].getString();
                String key = MapReferenceValueEncoder.decodeKey(encoded);
                String uuid = MapReferenceValueEncoder.decodeReference(encoded);


                String path = session.getNodeByIdentifier(uuid).getPath();
                Object object = objectConverter.getObject(session, path);
                ((ManageableMap) objects).addObject(key, object);
            }

            return objects;
        }
        catch (Exception e) {
            throw new ObjectContentManagerException("Cannot get the collection field : "
                    + collectionDescriptor.getFieldName()
                    + "for class " + collectionDescriptor.getClassDescriptor().getClassName(), e);
        }
    }