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 2006/09/20 19:37:21 UTC
svn commit: r448311 [18/25] - in /incubator/graffito/trunk: ./ api/
api/src/java/org/apache/portals/graffito/context/
api/src/java/org/apache/portals/graffito/exception/
api/src/java/org/apache/portals/graffito/services/core/
api/src/java/org/apache/po...
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/NTCollectionConverterImpl.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/NTCollectionConverterImpl.java?view=diff&rev=448311&r1=448310&r2=448311
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/NTCollectionConverterImpl.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/NTCollectionConverterImpl.java Wed Sep 20 12:37:05 2006
@@ -1,272 +1,272 @@
-/*
- * Copyright 2000-2005 The Apache Software Foundation.
- *
- * Licensed 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.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.ValueFormatException;
-import javax.jcr.lock.LockException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.version.VersionException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-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.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/convertion based on node type.
- *
- * This collection mapping strategy maps a collection into several nodes based on specific node type.
- *
- *
- * If the collection element class contains an id (see the FieldDescriptor definition), this id value is used to build the collection element node.
- * Otherwise, the element node name is a simple constant (collection-element)
- *
- * Example - without an id attribute:
- * /test (Main object containing the collection field )
- * /collection-element (node used to store the first collection element)
- * /item-prop
- * ....
- * /collection-element (node used to store the second collection element)
- * ...
- *
- * Example - with an id attribute:
- * /test (Main object containing the collection field )
- * /aValue (id value assigned to the first element)
- * /item-prop
- * ....
- * /anotherValue (id value assigned to the first element)
- * ...
- *
- * @author <a href="mailto:christophe.lombart@gmail.com">Christophe Lombart</a>
- *
- */
-public class NTCollectionConverterImpl extends AbstractCollectionConverterImpl {
-
- private final static Log log = LogFactory.getLog(NTCollectionConverterImpl.class);
-
- private static final String COLLECTION_ELEMENT_NAME = "collection-element";
-
- /**
- * Constructor
- *
- * @param atomicTypeConverters
- * @param objectConverter
- * @param mapper
- */
- public NTCollectionConverterImpl(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) {
- if (collection == null) {
- return;
- }
-
- ClassDescriptor elementClassDescriptor = mapper.getClassDescriptorByClass( ReflectionUtils.forName(collectionDescriptor.getElementClassName()));
-
- Iterator collectionIterator = collection.getIterator();
- while (collectionIterator.hasNext()) {
- Object item = collectionIterator.next();
- String elementJcrName = null;
-
- // If the element object has a unique id => the element jcr node name = the id value
- if (elementClassDescriptor.hasIdField()) {
- String idFieldName = elementClassDescriptor.getIdFieldDescriptor().getFieldName();
- elementJcrName = ReflectionUtils.getNestedProperty(item, idFieldName).toString();
- }
- else {
- elementJcrName = COLLECTION_ELEMENT_NAME;
- }
-
- objectConverter.insert(session, parentNode, elementJcrName, item);
- }
- }
-
- /**
- *
- * @see org.apache.portals.graffito.jcr.persistence.collectionconverter.CollectionConverter#updateCollection(javax.jcr.Session, javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.model.CollectionDescriptor, org.apache.portals.graffito.jcr.persistence.collectionconverter.ManageableCollection)
- */
- protected void doUpdateCollection(Session session,
- Node parentNode,
- CollectionDescriptor collectionDescriptor,
- ManageableCollection collection) throws RepositoryException {
- Mapper mapper = collectionDescriptor.getClassDescriptor().getMappingDescriptor().getMapper();
- ClassDescriptor elementClassDescriptor = mapper.getClassDescriptorByClass(
- ReflectionUtils.forName(collectionDescriptor.getElementClassName()));
-
- if (collection == null || !elementClassDescriptor.hasIdField()) {
- this.deleteCollectionItems(session,
- parentNode,
- elementClassDescriptor.getJcrNodeType());
- }
-
- if (collection == null) {
- return;
- }
-
- Iterator collectionIterator = collection.getIterator();
- Map updatedItems = new HashMap();
- while (collectionIterator.hasNext()) {
- Object item = collectionIterator.next();
-
- String elementJcrName = null;
-
- if (elementClassDescriptor.hasIdField()) {
- String idFieldName = elementClassDescriptor.getIdFieldDescriptor().getFieldName();
- elementJcrName = ReflectionUtils.getNestedProperty(item, idFieldName).toString();
-
- // Update existing JCR Nodes
- if (parentNode.hasNode(elementJcrName)) {
- objectConverter.update(session, parentNode, elementJcrName, item);
- }
- else {
- // Add new collection elements
- objectConverter.insert(session, parentNode, elementJcrName, item);
- }
-
- updatedItems.put(elementJcrName, item);
- }
- else {
- elementJcrName = COLLECTION_ELEMENT_NAME;
- objectConverter.insert(session, parentNode, elementJcrName, item);
- }
- }
-
- // Delete JCR nodes that are not present in the collection
- if (elementClassDescriptor.hasIdField()) {
- Iterator nodeIterator = this.getCollectionNodes(session, parentNode,
- elementClassDescriptor.getJcrNodeType()).iterator();
-
- while (nodeIterator.hasNext()) {
- Node child = (Node) nodeIterator.next();
-
- if (!updatedItems.containsKey(child.getName())) {
- child.remove();
- }
- }
- }
- }
-
- /**
- * @see org.apache.portals.graffito.jcr.persistence.collectionconverter.CollectionConverter#getCollection(javax.jcr.Session, javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.model.CollectionDescriptor, java.lang.Class)
- */
- protected ManageableCollection doGetCollection(Session session,
- Node parentNode,
- CollectionDescriptor collectionDescriptor,
- Class collectionFieldClass) throws RepositoryException {
- ClassDescriptor elementClassDescriptor = mapper.getClassDescriptorByClass( ReflectionUtils.forName(collectionDescriptor.getElementClassName()));
- ManageableCollection collection = ManageableCollectionUtil.getManageableCollection(collectionFieldClass);
- Class elementClass = ReflectionUtils.forName(collectionDescriptor.getElementClassName());
- Iterator children = this.getCollectionNodes(session, parentNode,
- elementClassDescriptor.getJcrNodeType()).iterator();
-
- while (children.hasNext()) {
- Node itemNode = (Node) children.next();
- log.debug("Collection node found : " + itemNode.getPath());
- Object item = objectConverter.getObject(session, itemNode.getPath());
- collection.addObject(item);
- }
-
- return collection;
- }
-
- /**
- * @see AbstractCollectionConverterImpl#doIsNull(Session, Node, CollectionDescriptor, Class)
- */
- protected boolean doIsNull(Session session,
- Node parentNode,
- CollectionDescriptor collectionDescriptor,
- Class collectionFieldClass) throws RepositoryException {
-
- // This collection converter returns at least a empty collection (see in doGetCollection)
- return false;
- }
-
- private Collection getCollectionNodes(Session session, Node parentNode, String itemNodeType)
- throws PathNotFoundException, ValueFormatException, RepositoryException {
-
- List collectionNodes = new ArrayList();
-
- // TODO : review this workaround used to support version nodes
- // Searching on the version storage has some bugs => loop on all child noded and check the property jcr:frozenPrimaryType
- // I have to investigate in more detail what's happen exactly
- if (!parentNode.getPath().startsWith("/jcr:system/jcr:versionStorage")) {
- NodeIterator nodeIterator = parentNode.getNodes();
- while (nodeIterator.hasNext()) {
- Node child = nodeIterator.nextNode();
-
- if (child.isNodeType(itemNodeType)) {
- collectionNodes.add(child);
- }
- }
- }
- else {
- NodeIterator nodeIterator = parentNode.getNodes();
- while (nodeIterator.hasNext()) {
- Node child = nodeIterator.nextNode();
-
- if (child.getProperty("jcr:frozenPrimaryType").getString().equals(itemNodeType)) {
- collectionNodes.add(child);
- }
- }
-
- }
-
- return collectionNodes;
- }
-
- private void deleteCollectionItems(Session session, Node parentNode, String itemNodeType)
- throws VersionException,
- LockException,
- ConstraintViolationException,
- PathNotFoundException,
- ValueFormatException,
- RepositoryException
- {
- Iterator nodeIterator = this.getCollectionNodes(session, parentNode, itemNodeType).iterator();
- while (nodeIterator.hasNext()) {
- Node node = (Node) nodeIterator.next();
- node.remove();
- }
- }
-}
+/*
+ * Copyright 2000-2005 The Apache Software Foundation.
+ *
+ * Licensed 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.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.ValueFormatException;
+import javax.jcr.lock.LockException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.version.VersionException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+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.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/convertion based on node type.
+ *
+ * This collection mapping strategy maps a collection into several nodes based on specific node type.
+ *
+ *
+ * If the collection element class contains an id (see the FieldDescriptor definition), this id value is used to build the collection element node.
+ * Otherwise, the element node name is a simple constant (collection-element)
+ *
+ * Example - without an id attribute:
+ * /test (Main object containing the collection field )
+ * /collection-element (node used to store the first collection element)
+ * /item-prop
+ * ....
+ * /collection-element (node used to store the second collection element)
+ * ...
+ *
+ * Example - with an id attribute:
+ * /test (Main object containing the collection field )
+ * /aValue (id value assigned to the first element)
+ * /item-prop
+ * ....
+ * /anotherValue (id value assigned to the first element)
+ * ...
+ *
+ * @author <a href="mailto:christophe.lombart@gmail.com">Christophe Lombart</a>
+ *
+ */
+public class NTCollectionConverterImpl extends AbstractCollectionConverterImpl {
+
+ private final static Log log = LogFactory.getLog(NTCollectionConverterImpl.class);
+
+ private static final String COLLECTION_ELEMENT_NAME = "collection-element";
+
+ /**
+ * Constructor
+ *
+ * @param atomicTypeConverters
+ * @param objectConverter
+ * @param mapper
+ */
+ public NTCollectionConverterImpl(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) {
+ if (collection == null) {
+ return;
+ }
+
+ ClassDescriptor elementClassDescriptor = mapper.getClassDescriptorByClass( ReflectionUtils.forName(collectionDescriptor.getElementClassName()));
+
+ Iterator collectionIterator = collection.getIterator();
+ while (collectionIterator.hasNext()) {
+ Object item = collectionIterator.next();
+ String elementJcrName = null;
+
+ // If the element object has a unique id => the element jcr node name = the id value
+ if (elementClassDescriptor.hasIdField()) {
+ String idFieldName = elementClassDescriptor.getIdFieldDescriptor().getFieldName();
+ elementJcrName = ReflectionUtils.getNestedProperty(item, idFieldName).toString();
+ }
+ else {
+ elementJcrName = COLLECTION_ELEMENT_NAME;
+ }
+
+ objectConverter.insert(session, parentNode, elementJcrName, item);
+ }
+ }
+
+ /**
+ *
+ * @see org.apache.portals.graffito.jcr.persistence.collectionconverter.CollectionConverter#updateCollection(javax.jcr.Session, javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.model.CollectionDescriptor, org.apache.portals.graffito.jcr.persistence.collectionconverter.ManageableCollection)
+ */
+ protected void doUpdateCollection(Session session,
+ Node parentNode,
+ CollectionDescriptor collectionDescriptor,
+ ManageableCollection collection) throws RepositoryException {
+ Mapper mapper = collectionDescriptor.getClassDescriptor().getMappingDescriptor().getMapper();
+ ClassDescriptor elementClassDescriptor = mapper.getClassDescriptorByClass(
+ ReflectionUtils.forName(collectionDescriptor.getElementClassName()));
+
+ if (collection == null || !elementClassDescriptor.hasIdField()) {
+ this.deleteCollectionItems(session,
+ parentNode,
+ elementClassDescriptor.getJcrNodeType());
+ }
+
+ if (collection == null) {
+ return;
+ }
+
+ Iterator collectionIterator = collection.getIterator();
+ Map updatedItems = new HashMap();
+ while (collectionIterator.hasNext()) {
+ Object item = collectionIterator.next();
+
+ String elementJcrName = null;
+
+ if (elementClassDescriptor.hasIdField()) {
+ String idFieldName = elementClassDescriptor.getIdFieldDescriptor().getFieldName();
+ elementJcrName = ReflectionUtils.getNestedProperty(item, idFieldName).toString();
+
+ // Update existing JCR Nodes
+ if (parentNode.hasNode(elementJcrName)) {
+ objectConverter.update(session, parentNode, elementJcrName, item);
+ }
+ else {
+ // Add new collection elements
+ objectConverter.insert(session, parentNode, elementJcrName, item);
+ }
+
+ updatedItems.put(elementJcrName, item);
+ }
+ else {
+ elementJcrName = COLLECTION_ELEMENT_NAME;
+ objectConverter.insert(session, parentNode, elementJcrName, item);
+ }
+ }
+
+ // Delete JCR nodes that are not present in the collection
+ if (elementClassDescriptor.hasIdField()) {
+ Iterator nodeIterator = this.getCollectionNodes(session, parentNode,
+ elementClassDescriptor.getJcrNodeType()).iterator();
+
+ while (nodeIterator.hasNext()) {
+ Node child = (Node) nodeIterator.next();
+
+ if (!updatedItems.containsKey(child.getName())) {
+ child.remove();
+ }
+ }
+ }
+ }
+
+ /**
+ * @see org.apache.portals.graffito.jcr.persistence.collectionconverter.CollectionConverter#getCollection(javax.jcr.Session, javax.jcr.Node, org.apache.portals.graffito.jcr.mapper.model.CollectionDescriptor, java.lang.Class)
+ */
+ protected ManageableCollection doGetCollection(Session session,
+ Node parentNode,
+ CollectionDescriptor collectionDescriptor,
+ Class collectionFieldClass) throws RepositoryException {
+ ClassDescriptor elementClassDescriptor = mapper.getClassDescriptorByClass( ReflectionUtils.forName(collectionDescriptor.getElementClassName()));
+ ManageableCollection collection = ManageableCollectionUtil.getManageableCollection(collectionFieldClass);
+ Class elementClass = ReflectionUtils.forName(collectionDescriptor.getElementClassName());
+ Iterator children = this.getCollectionNodes(session, parentNode,
+ elementClassDescriptor.getJcrNodeType()).iterator();
+
+ while (children.hasNext()) {
+ Node itemNode = (Node) children.next();
+ log.debug("Collection node found : " + itemNode.getPath());
+ Object item = objectConverter.getObject(session, itemNode.getPath());
+ collection.addObject(item);
+ }
+
+ return collection;
+ }
+
+ /**
+ * @see AbstractCollectionConverterImpl#doIsNull(Session, Node, CollectionDescriptor, Class)
+ */
+ protected boolean doIsNull(Session session,
+ Node parentNode,
+ CollectionDescriptor collectionDescriptor,
+ Class collectionFieldClass) throws RepositoryException {
+
+ // This collection converter returns at least a empty collection (see in doGetCollection)
+ return false;
+ }
+
+ private Collection getCollectionNodes(Session session, Node parentNode, String itemNodeType)
+ throws PathNotFoundException, ValueFormatException, RepositoryException {
+
+ List collectionNodes = new ArrayList();
+
+ // TODO : review this workaround used to support version nodes
+ // Searching on the version storage has some bugs => loop on all child noded and check the property jcr:frozenPrimaryType
+ // I have to investigate in more detail what's happen exactly
+ if (!parentNode.getPath().startsWith("/jcr:system/jcr:versionStorage")) {
+ NodeIterator nodeIterator = parentNode.getNodes();
+ while (nodeIterator.hasNext()) {
+ Node child = nodeIterator.nextNode();
+
+ if (child.isNodeType(itemNodeType)) {
+ collectionNodes.add(child);
+ }
+ }
+ }
+ else {
+ NodeIterator nodeIterator = parentNode.getNodes();
+ while (nodeIterator.hasNext()) {
+ Node child = nodeIterator.nextNode();
+
+ if (child.getProperty("jcr:frozenPrimaryType").getString().equals(itemNodeType)) {
+ collectionNodes.add(child);
+ }
+ }
+
+ }
+
+ return collectionNodes;
+ }
+
+ private void deleteCollectionItems(Session session, Node parentNode, String itemNodeType)
+ throws VersionException,
+ LockException,
+ ConstraintViolationException,
+ PathNotFoundException,
+ ValueFormatException,
+ RepositoryException
+ {
+ Iterator nodeIterator = this.getCollectionNodes(session, parentNode, itemNodeType).iterator();
+ while (nodeIterator.hasNext()) {
+ Node node = (Node) nodeIterator.next();
+ node.remove();
+ }
+ }
+}
Propchange: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/impl/NTCollectionConverterImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/impl/CustomNodeTypeCreatorImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/impl/ObjectIterator.java
------------------------------------------------------------------------------
svn:eol-style = native