[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