You are viewing a plain text version of this content. The canonical link for it is here.
Posted to graffito-commits@incubator.apache.org by cl...@apache.org on 2007/03/12 21:06:14 UTC
svn commit: r517394 - in /incubator/graffito/trunk/jcr/jcr-mapping/src: dtd/
java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/
test-config/ test/org/apache/portals/graffito/jcr/persistence/uuid/
test/org/apache/portals/graffito...
Author: clombart
Date: Mon Mar 12 14:06:13 2007
New Revision: 517394
URL: http://svn.apache.org/viewvc?view=rev&rev=517394
Log:
continue to work GRFT-40 :
* add new collection converters to manage collection of uuid/references
Added:
incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/BeanReferenceCollectionConverterImpl.java
incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/ReferenceCollectionConverterImpl.java
Modified:
incubator/graffito/trunk/jcr/jcr-mapping/src/dtd/graffito-jcr-mapping.dtd
incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/AbstractCollectionConverterImpl.java
incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-uuid.xml
incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/uuid/PersistenceManagerUuidTest.java
incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/testmodel/uuid/B.java
incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/testmodel/uuid/B2.java
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/dtd/graffito-jcr-mapping.dtd
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/dtd/graffito-jcr-mapping.dtd?view=diff&rev=517394&r1=517393&r2=517394
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/dtd/graffito-jcr-mapping.dtd (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/dtd/graffito-jcr-mapping.dtd Mon Mar 12 14:06:13 2007
@@ -151,7 +151,7 @@
autoRetrieve (true|false) "true"
autoUpdate (true|false) "true"
autoInsert (true|false) "true"
- elementClassName CDATA #REQUIRED
+ elementClassName CDATA #IMPLIED
collectionClassName CDATA #IMPLIED
collectionConverter CDATA #IMPLIED
jcrNodeType CDATA #IMPLIED
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/AbstractCollectionConverterImpl.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/AbstractCollectionConverterImpl.java?view=diff&rev=517394&r1=517393&r2=517394
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/AbstractCollectionConverterImpl.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/AbstractCollectionConverterImpl.java Mon Mar 12 14:06:13 2007
@@ -34,7 +34,6 @@
import org.apache.portals.graffito.jcr.persistence.collectionconverter.CollectionConverter;
import org.apache.portals.graffito.jcr.persistence.collectionconverter.ManageableCollection;
import org.apache.portals.graffito.jcr.persistence.objectconverter.ObjectConverter;
-import org.apache.portals.graffito.jcr.reflection.ReflectionUtils;
/**
* Abstract class used for all CollectionConverter
@@ -45,7 +44,6 @@
public abstract class AbstractCollectionConverterImpl implements CollectionConverter {
protected Map atomicTypeConverters;
protected ObjectConverter objectConverter;
- // NOT USED
protected Mapper mapper;
/**
Added: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/BeanReferenceCollectionConverterImpl.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/BeanReferenceCollectionConverterImpl.java?view=auto&rev=517394
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/BeanReferenceCollectionConverterImpl.java (added)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/BeanReferenceCollectionConverterImpl.java Mon Mar 12 14:06:13 2007
@@ -0,0 +1,187 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.portals.graffito.jcr.persistence.collectionconverter.impl;
+
+
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.jcr.Node;
+import javax.jcr.Property;
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.Value;
+import javax.jcr.ValueFactory;
+import javax.jcr.ValueFormatException;
+import javax.jcr.lock.LockException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.version.VersionException;
+
+import org.apache.portals.graffito.jcr.exception.JcrMappingException;
+import org.apache.portals.graffito.jcr.exception.PersistenceException;
+import org.apache.portals.graffito.jcr.mapper.Mapper;
+import org.apache.portals.graffito.jcr.mapper.model.ClassDescriptor;
+import org.apache.portals.graffito.jcr.mapper.model.CollectionDescriptor;
+import org.apache.portals.graffito.jcr.mapper.model.FieldDescriptor;
+import org.apache.portals.graffito.jcr.persistence.atomictypeconverter.AtomicTypeConverter;
+import org.apache.portals.graffito.jcr.persistence.collectionconverter.ManageableCollection;
+import org.apache.portals.graffito.jcr.persistence.collectionconverter.ManageableCollectionUtil;
+import org.apache.portals.graffito.jcr.persistence.objectconverter.ObjectConverter;
+import org.apache.portals.graffito.jcr.reflection.ReflectionUtils;
+
+/**
+ * Collection Mapping used to map a reference/uuid property list into a java bean collection (readonly).
+ * Only the uuid can be modified, not the associated object
+ *
+ * @author <a href="mailto:christophe.lombart@gmail.com">Christophe Lombart</a>
+ *
+ */
+public class BeanReferenceCollectionConverterImpl extends AbstractCollectionConverterImpl {
+
+ /**
+ * Constructor
+ *
+ * @param atomicTypeConverters
+ * @param objectConverter
+ * @param mapper
+ */
+ public BeanReferenceCollectionConverterImpl(Map atomicTypeConverters,
+ ObjectConverter objectConverter,
+ Mapper mapper) {
+ super(atomicTypeConverters, objectConverter, mapper);
+ }
+
+ /**
+ *
+ * @see AbstractCollectionConverterImpl#doInsertCollection(Session, Node, CollectionDescriptor, ManageableCollection)
+ */
+ protected void doInsertCollection(Session session,
+ Node parentNode,
+ CollectionDescriptor collectionDescriptor,
+ ManageableCollection collection) throws RepositoryException {
+ addUuidProperties(session, parentNode, collectionDescriptor, collection);
+ }
+
+
+ /**
+ *
+ * @see AbstractCollectionConverterImpl#doUpdateCollection(Session, Node, CollectionDescriptor, ManageableCollection)
+ */
+ protected void doUpdateCollection(Session session,
+ Node parentNode,
+ CollectionDescriptor collectionDescriptor,
+ ManageableCollection collection) throws RepositoryException
+ {
+ String jcrName = getCollectionJcrName(collectionDescriptor);
+
+ // Delete existing values
+ if (parentNode.hasProperty(jcrName)) {
+ parentNode.setProperty(jcrName, (Value[]) null);
+ }
+
+ if (collection == null) {
+ return;
+ }
+
+ addUuidProperties(session, parentNode, collectionDescriptor, collection);
+
+ }
+
+ /**
+ * @see AbstractCollectionConverterImpl#doGetCollection(Session, Node, CollectionDescriptor, Class)
+ */
+ protected ManageableCollection 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();
+
+ ManageableCollection collection = ManageableCollectionUtil.getManageableCollection(collectionFieldClass);
+
+ for (int i = 0; i < values.length; i++) {
+ String uuid = values[i].getString();
+ String path = session.getNodeByUUID(uuid).getPath();
+ Object object = objectConverter.getObject(session, path);
+ collection.addObject(object);
+ }
+
+ return collection;
+ }
+ catch(Exception e) {
+ throw new PersistenceException("Cannot get the collection field : "
+ + collectionDescriptor.getFieldName()
+ + "for class " + collectionDescriptor.getClassDescriptor().getClassName(), e);
+ }
+ }
+
+ /**
+ * @see AbstractCollectionConverterImpl#doIsNull(Session, Node, CollectionDescriptor, Class)
+ */
+ protected boolean doIsNull(Session session, Node parentNode, CollectionDescriptor collectionDescriptor, Class collectionFieldClass) throws RepositoryException
+ {
+ String jcrName = getCollectionJcrName(collectionDescriptor);
+ return ! parentNode.hasProperty(jcrName);
+ }
+
+ private void addUuidProperties(Session session, Node parentNode, CollectionDescriptor collectionDescriptor, ManageableCollection collection) throws UnsupportedRepositoryOperationException, RepositoryException, VersionException, LockException, ConstraintViolationException {
+ try {
+ if (collection == null) {
+ return;
+ }
+
+ String jcrName = getCollectionJcrName(collectionDescriptor);
+ Value[] values = new Value[collection.getSize()];
+ ValueFactory valueFactory = session.getValueFactory();
+ Iterator collectionIterator = collection.getIterator();
+ for (int i = 0; i < collection.getSize(); i++) {
+ Object object = collectionIterator.next();
+ if (object != null)
+ {
+ ClassDescriptor classDescriptor = mapper.getClassDescriptorByClass(object.getClass());
+
+ FieldDescriptor fieldDescriptor = classDescriptor.getUuidFieldDescriptor();
+ if (fieldDescriptor == null)
+ {
+ throw new JcrMappingException("The bean doesn't have an uuid - classdescriptor : "
+ + classDescriptor.getClassName());
+ }
+
+ String uuid = (String) ReflectionUtils.getNestedProperty(object, fieldDescriptor.getFieldName());
+ values[i] = valueFactory.createValue(uuid, PropertyType.REFERENCE);
+ }
+ }
+
+ parentNode.setProperty(jcrName, values);
+ }
+ catch(Exception e) {
+ throw new PersistenceException("Cannot insert collection field : "
+ + collectionDescriptor.getFieldName()
+ + " of class "
+ + collectionDescriptor.getClassDescriptor().getClassName(), e);
+ }
+ }
+
+}
\ No newline at end of file
Added: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/ReferenceCollectionConverterImpl.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/ReferenceCollectionConverterImpl.java?view=auto&rev=517394
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/ReferenceCollectionConverterImpl.java (added)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/ReferenceCollectionConverterImpl.java Mon Mar 12 14:06:13 2007
@@ -0,0 +1,170 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.portals.graffito.jcr.persistence.collectionconverter.impl;
+
+
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.jcr.Node;
+import javax.jcr.Property;
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.Value;
+import javax.jcr.ValueFactory;
+import javax.jcr.ValueFormatException;
+import javax.jcr.lock.LockException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.version.VersionException;
+
+import org.apache.portals.graffito.jcr.exception.PersistenceException;
+import org.apache.portals.graffito.jcr.mapper.Mapper;
+import org.apache.portals.graffito.jcr.mapper.model.CollectionDescriptor;
+import org.apache.portals.graffito.jcr.persistence.collectionconverter.ManageableCollection;
+import org.apache.portals.graffito.jcr.persistence.collectionconverter.ManageableCollectionUtil;
+import org.apache.portals.graffito.jcr.persistence.objectconverter.ObjectConverter;
+
+/**
+ *
+ * This collection mapping strategy maps a collection of String into a JCR multi value property based on the reference type
+ *
+ * @author <a href="mailto:christophe.lombart@gmail.com">Christophe Lombart</a>
+ */
+public class ReferenceCollectionConverterImpl extends AbstractCollectionConverterImpl {
+
+ /**
+ * Constructor
+ *
+ * @param atomicTypeConverters
+ * @param objectConverter
+ * @param mapper
+ */
+ public ReferenceCollectionConverterImpl(Map atomicTypeConverters,
+ ObjectConverter objectConverter,
+ Mapper mapper) {
+ super(atomicTypeConverters, objectConverter, mapper);
+ }
+
+ /**
+ *
+ * @see AbstractCollectionConverterImpl#doInsertCollection(Session, Node, CollectionDescriptor, ManageableCollection)
+ */
+ protected void doInsertCollection(Session session,
+ Node parentNode,
+ CollectionDescriptor collectionDescriptor,
+ ManageableCollection collection) throws RepositoryException {
+ addUuidProperties(session, parentNode, collectionDescriptor, collection);
+ }
+
+ /**
+ *
+ * @see AbstractCollectionConverterImpl#doUpdateCollection(Session, Node, CollectionDescriptor, ManageableCollection)
+ */
+ protected void doUpdateCollection(Session session,
+ Node parentNode,
+ CollectionDescriptor collectionDescriptor,
+ ManageableCollection collection) throws RepositoryException {
+ String jcrName = getCollectionJcrName(collectionDescriptor);
+
+ // Delete existing values
+ if (parentNode.hasProperty(jcrName)) {
+ parentNode.setProperty(jcrName, (Value[]) null);
+ }
+
+ if (collection == null) {
+ return;
+ }
+
+
+ addUuidProperties(session, parentNode, collectionDescriptor, collection); }
+
+ /**
+ * @see AbstractCollectionConverterImpl#doGetCollection(Session, Node, CollectionDescriptor, Class)
+ */
+ protected ManageableCollection 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();
+
+ ManageableCollection collection = ManageableCollectionUtil.getManageableCollection(collectionFieldClass);
+ for (int i = 0; i < values.length; i++) {
+
+ collection.addObject(values[i].getString());
+ }
+
+ return collection;
+ }
+ catch(ValueFormatException vfe) {
+ throw new PersistenceException("Cannot get the collection field : "
+ + collectionDescriptor.getFieldName()
+ + "for class " + collectionDescriptor.getClassDescriptor().getClassName(),
+ vfe);
+ }
+ }
+
+ /**
+ * @see AbstractCollectionConverterImpl#doIsNull(Session, Node, CollectionDescriptor, Class)
+ */
+ protected boolean doIsNull(Session session,
+ Node parentNode,
+ CollectionDescriptor collectionDescriptor,
+ Class collectionFieldClass) throws RepositoryException {
+ String jcrName = getCollectionJcrName(collectionDescriptor);
+
+ if (!parentNode.hasProperty(jcrName)) {
+ return true;
+ }
+ return false;
+ }
+
+ private void addUuidProperties(Session session, Node parentNode, CollectionDescriptor collectionDescriptor, ManageableCollection collection) throws UnsupportedRepositoryOperationException, RepositoryException, VersionException, LockException, ConstraintViolationException {
+ try {
+ if (collection == null) {
+ return;
+ }
+
+ String jcrName = getCollectionJcrName(collectionDescriptor);
+ Value[] values = new Value[collection.getSize()];
+ ValueFactory valueFactory = session.getValueFactory();
+ Iterator collectionIterator = collection.getIterator();
+ for (int i = 0; i < collection.getSize(); i++) {
+ String uuid = (String) collectionIterator.next();
+ values[i] = valueFactory.createValue(uuid, PropertyType.REFERENCE);
+
+ }
+
+ parentNode.setProperty(jcrName, values);
+ }
+ catch(ValueFormatException vfe) {
+ throw new PersistenceException("Cannot insert collection field : "
+ + collectionDescriptor.getFieldName()
+ + " of class "
+ + collectionDescriptor.getClassDescriptor().getClassName(), vfe);
+ }
+ }
+
+}
\ No newline at end of file
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-uuid.xml
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-uuid.xml?view=diff&rev=517394&r1=517393&r2=517394
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-uuid.xml (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/test-config/jcrmapping-uuid.xml Mon Mar 12 14:06:13 2007
@@ -13,12 +13,18 @@
className="org.apache.portals.graffito.jcr.testmodel.uuid.B" jcrNodeType="nt:unstructured" >
<field-descriptor fieldName="path" path="true" />
<field-descriptor fieldName="reference2A" jcrName="reference2A" converter="org.apache.portals.graffito.jcr.persistence.atomictypeconverter.impl.ReferenceTypeConverterImpl" />
+ <collection-descriptor fieldName="multiReferences" jcrName="multiReferences" proxy="false"
+ collectionConverter="org.apache.portals.graffito.jcr.persistence.collectionconverter.impl.ReferenceCollectionConverterImpl" />
+
</class-descriptor>
<class-descriptor
className="org.apache.portals.graffito.jcr.testmodel.uuid.B2" jcrNodeType="nt:unstructured" >
<field-descriptor fieldName="path" path="true" />
<bean-descriptor fieldName="a" jcrName="a" converter="org.apache.portals.graffito.jcr.persistence.beanconverter.impl.ReferenceBeanConverterImpl" />
+ <collection-descriptor fieldName="multiReferences" jcrName="multiReferences" proxy="false"
+ collectionConverter="org.apache.portals.graffito.jcr.persistence.collectionconverter.impl.BeanReferenceCollectionConverterImpl" />
+
</class-descriptor>
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/uuid/PersistenceManagerUuidTest.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/uuid/PersistenceManagerUuidTest.java?view=diff&rev=517394&r1=517393&r2=517394
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/uuid/PersistenceManagerUuidTest.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/uuid/PersistenceManagerUuidTest.java Mon Mar 12 14:06:13 2007
@@ -16,6 +16,9 @@
*/
package org.apache.portals.graffito.jcr.persistence.uuid;
+import java.util.ArrayList;
+import java.util.Collection;
+
import junit.framework.Test;
import junit.framework.TestSuite;
@@ -88,6 +91,11 @@
super.tearDown();
}
+ /**
+ *
+ * Map the jcr uuid into a String attribute
+ *
+ */
public void testUuid()
{
try
@@ -158,7 +166,12 @@
}
}
-
+ /**
+ *
+ * Map a Reference into a String attribute.
+ * Object B has an attribute containing the object A uuid.
+ *
+ */
public void testFieldReference()
{
try
@@ -225,6 +238,13 @@
}
+ /**
+ *
+ * Map a Reference into a bean attribute.
+ * Object B has an attribute containing the object A.
+ * The jcr node matching to the object B contains a reference (the jcr node matching to the object B).
+ *
+ */
public void testBeanReference()
{
try
@@ -280,6 +300,177 @@
b = (B2) persistenceManager.getObject("/testB2");
a = b.getA();
assertNull("a is not null", a);
+
+
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ fail("Exception occurs during the unit test : " + e);
+ }
+
+ }
+
+ /**
+ * Map a list of uuid into a collection of String
+ * The list is defined in a jcr property (Referece type / multi values)
+ *
+ */
+ public void testCollectionOfUuid()
+ {
+ try
+ {
+ PersistenceManager persistenceManager = getPersistenceManager();
+
+ // --------------------------------------------------------------------------------
+ // Create and store an object A in the repository
+ // --------------------------------------------------------------------------------
+ A a1 = new A();
+ a1.setPath("/a1");
+ a1.setStringData("testdata1");
+ persistenceManager.insert(a1);
+
+ A a2 = new A();
+ a2.setPath("/a2");
+ a2.setStringData("testdata2");
+ persistenceManager.insert(a2);
+ persistenceManager.save();
+
+ // --------------------------------------------------------------------------------
+ // Get the objects
+ // --------------------------------------------------------------------------------
+ a1 = (A) persistenceManager.getObject( "/a1");
+ assertNotNull("a1 is null", a1);
+ a2 = (A) persistenceManager.getObject( "/a2");
+ assertNotNull("a2 is null", a2);
+ ArrayList references = new ArrayList();
+ references.add(a1.getUuid());
+ references.add(a2.getUuid());
+
+ // --------------------------------------------------------------------------------
+ // Create and store an object B in the repository which has a collection of A
+ // --------------------------------------------------------------------------------
+ B b = new B();
+ b.setPath("/testB");
+ b.setMultiReferences(references);
+ persistenceManager.insert(b);
+ persistenceManager.save();
+
+ // --------------------------------------------------------------------------------
+ // Retrieve object B
+ // --------------------------------------------------------------------------------
+ b = (B) persistenceManager.getObject("/testB");
+ Collection allref = b.getMultiReferences();
+ assertNotNull("collection is null", allref);
+ assertTrue("Invalid number of items in the collection", allref.size() == 2);
+
+ // --------------------------------------------------------------------------------
+ // Update object B with invalid uuid
+ // --------------------------------------------------------------------------------
+ allref.add("12345");
+ b.setMultiReferences(allref);
+ try
+ {
+ persistenceManager.update(b);
+ fail("Exception not throw");
+ }
+ catch(Exception e)
+ {
+ //Throws an exception due to an invalid uuid
+ System.out.println("Invalid uuid value in the collection : " + e);
+
+ }
+
+ // --------------------------------------------------------------------------------
+ // Update object B with an null value
+ // --------------------------------------------------------------------------------
+ b.setMultiReferences(null);
+ persistenceManager.update(b);
+ persistenceManager.save();
+
+ // --------------------------------------------------------------------------------
+ // Retrieve object B
+ // --------------------------------------------------------------------------------
+ b = (B) persistenceManager.getObject("/testB");
+ assertNull("a is not null", b.getMultiReferences());
+
+
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ fail("Exception occurs during the unit test : " + e);
+ }
+
+ }
+
+ /**
+ * Map a list of uuid into a collection
+ * The list is defined in a jcr property (multi values)
+ *
+ */
+ public void testCollectionOfBeanWithUuid()
+ {
+ try
+ {
+ PersistenceManager persistenceManager = getPersistenceManager();
+
+ // --------------------------------------------------------------------------------
+ // Create and store an object A in the repository
+ // --------------------------------------------------------------------------------
+ A a1 = new A();
+ a1.setPath("/a1");
+ a1.setStringData("testdata1");
+ persistenceManager.insert(a1);
+
+ A a2 = new A();
+ a2.setPath("/a2");
+ a2.setStringData("testdata2");
+ persistenceManager.insert(a2);
+ persistenceManager.save();
+
+ // --------------------------------------------------------------------------------
+ // Get the objects
+ // --------------------------------------------------------------------------------
+ a1 = (A) persistenceManager.getObject( "/a1");
+ assertNotNull("a1 is null", a1);
+ a2 = (A) persistenceManager.getObject( "/a2");
+ assertNotNull("a2 is null", a2);
+ ArrayList references = new ArrayList();
+ references.add(a1);
+ references.add(a2);
+
+ // --------------------------------------------------------------------------------
+ // Create and store an object B in the repository which has a collection of A
+ // --------------------------------------------------------------------------------
+ B2 b = new B2();
+ b.setPath("/testB2");
+ b.setMultiReferences(references);
+ persistenceManager.insert(b);
+ persistenceManager.save();
+
+ // --------------------------------------------------------------------------------
+ // Retrieve object B
+ // --------------------------------------------------------------------------------
+ b = (B2) persistenceManager.getObject("/testB2");
+ Collection allref = b.getMultiReferences();
+ assertNotNull("collection is null", allref);
+ assertTrue("Invalid number of items in the collection", allref.size() == 2);
+ this.contains(allref, "/a1" , A.class);
+ this.contains(allref, "/a2" , A.class);
+
+ // --------------------------------------------------------------------------------
+ // Update object B with an null value
+ // --------------------------------------------------------------------------------
+ b.setMultiReferences(null);
+ persistenceManager.update(b);
+ persistenceManager.save();
+
+ // --------------------------------------------------------------------------------
+ // Retrieve object B
+ // --------------------------------------------------------------------------------
+ b = (B2) persistenceManager.getObject("/testB2");
+ assertNull("a is not null", b.getMultiReferences());
}
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/testmodel/uuid/B.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/testmodel/uuid/B.java?view=diff&rev=517394&r1=517393&r2=517394
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/testmodel/uuid/B.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/testmodel/uuid/B.java Mon Mar 12 14:06:13 2007
@@ -16,6 +16,8 @@
*/
package org.apache.portals.graffito.jcr.testmodel.uuid;
+import java.util.Collection;
+
/**
*
@@ -25,8 +27,8 @@
public class B
{
private String path;
- private String reference2A; // This String attribute is mapped to a reference jcr property
-
+ private String reference2A; // This String attribute is mapped to a reference/uuid jcr property
+ private Collection multiReferences; // a collection of references (uuid)
public String getPath()
{
@@ -47,6 +49,15 @@
{
this.reference2A = reference2A;
}
-
+
+ public Collection getMultiReferences() {
+ return multiReferences;
+ }
+
+ public void setMultiReferences(Collection multiReferences) {
+ this.multiReferences = multiReferences;
+ }
+
+
}
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/testmodel/uuid/B2.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/testmodel/uuid/B2.java?view=diff&rev=517394&r1=517393&r2=517394
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/testmodel/uuid/B2.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/testmodel/uuid/B2.java Mon Mar 12 14:06:13 2007
@@ -16,6 +16,8 @@
*/
package org.apache.portals.graffito.jcr.testmodel.uuid;
+import java.util.Collection;
+
/**
*
@@ -26,7 +28,7 @@
{
private String path;
private A a; // This attribute is mapped to a reference jcr property
-
+ private Collection multiReferences; // a collection of bean (with an uuid) mapped into a list of jcr properties (reference type)
public String getPath()
{
@@ -45,7 +47,12 @@
public void setA(A a) {
this.a = a;
}
+ public Collection getMultiReferences() {
+ return multiReferences;
+ }
-
+ public void setMultiReferences(Collection multiReferences) {
+ this.multiReferences = multiReferences;
+ }
}