[exo-jcr-commits] exo-jcr SVN: r5158 - in jcr/trunk/exo.jcr.component.core/src: test/java/org/exoplatform/services/jcr/usecases and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Fri Nov 4 04:37:27 EDT 2011


Author: zavizionov
Date: 2011-11-04 04:37:26 -0400 (Fri, 04 Nov 2011)
New Revision: 5158

Modified:
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
   jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/usecases/TestMixin.java
Log:
EXOJCR-1568 Can't remove mixin from node and add mixin again.

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java	2011-11-04 07:34:42 UTC (rev 5157)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java	2011-11-04 08:37:26 UTC (rev 5158)
@@ -1929,11 +1929,14 @@
 
       for (PropertyDefinitionData pd : ntmanager.getAllPropertyDefinitions(removedName))
       {
-         ItemData p = dataManager.getItemData(nodeData(), new QPathEntry(pd.getName(), 1), ItemType.PROPERTY, false);
-         if (p != null && !p.isNode())
-         {
-            // remove it
-            dataManager.delete(p, ancestorToSave);
+         // to skip remove propertyDefinition with existed another nodeType property definition  
+         if (ntmanager.getPropertyDefinitions(pd.getName(), nodeData().getPrimaryTypeName(), newMixin.toArray(new InternalQName[]{})) == null) {
+            ItemData p = dataManager.getItemData(nodeData(), new QPathEntry(pd.getName(), 1), ItemType.PROPERTY, false);
+            if (p != null && !p.isNode())
+            {
+               // remove it
+               dataManager.delete(p, ancestorToSave);
+            }
          }
       }
 

Modified: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/usecases/TestMixin.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/usecases/TestMixin.java	2011-11-04 07:34:42 UTC (rev 5157)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/usecases/TestMixin.java	2011-11-04 08:37:26 UTC (rev 5158)
@@ -16,9 +16,15 @@
  */
 package org.exoplatform.services.jcr.usecases;
 
+import java.io.ByteArrayInputStream;
+
 import javax.jcr.Node;
 import javax.jcr.Property;
+import javax.jcr.RepositoryException;
 
+import org.exoplatform.services.jcr.core.nodetype.ExtendedNodeTypeManager;
+import org.exoplatform.services.jcr.core.nodetype.NodeTypeDataManager;
+
 /**
  * Created by The eXo Platform SAS.
  * 
@@ -38,7 +44,7 @@
     */
    public void testMixin() throws Exception
    {
-      Node a = session.getRootNode().addNode("a");
+      Node a = root.addNode("a");
       a.addMixin("mix:referenceable");
 
       Property p = a.setProperty("prop", "string");
@@ -49,9 +55,43 @@
       session.save();
 
       //check result
-      Node a2 = session.getRootNode().getNode("a");
+      Node a2 = root.getNode("a");
       assertTrue(a2.isNodeType("mix:referenceable"));
       assertTrue(a2.isNodeType("mix:versionable"));
       assertTrue(a2.isNodeType("mix:lockable"));
    }
+
+   /**
+    * This usecase is checking correctness of remove mixin which is declared
+    * extend another node type (primary or mixin one).
+    * 
+    * @throws RepositoryException
+    */
+   public void testMixinExtendedNtBase() throws RepositoryException
+   {
+      ExtendedNodeTypeManager manager = (ExtendedNodeTypeManager)workspace.getNodeTypeManager();
+
+      String cnd = "<nodeTypes>" //
+         + "<nodeType name=\"test:my\" isMixin=\"true\" hasOrderableChildNodes=\"false\" primaryItemName=\"\">" //
+         + "   <supertypes>" //
+         + "     <supertype>nt:base</supertype>" // main configuration part for the test
+         + "   </supertypes>" //
+         + "   <propertyDefinitions>" //
+         + "   </propertyDefinitions>" //
+         + "</nodeType>" //
+         + "</nodeTypes>";
+
+      manager.registerNodeTypes(new ByteArrayInputStream(cnd.getBytes()), ExtendedNodeTypeManager.IGNORE_IF_EXISTS,
+         NodeTypeDataManager.TEXT_XML);
+
+      Node folder = root.addNode("testRemoveMixin", "nt:folder");
+      folder.addMixin("test:my");
+      session.save();
+      folder.removeMixin("test:my");
+      try {
+         session.save();
+      } catch (Exception e) {
+         fail("Shouldn't be removed a property definition, there is existed another node type (primary or mixin) which has the property definition. \n" + e.getMessage());
+      }
+   }
 }



More information about the exo-jcr-commits mailing list