[exo-jcr-commits] exo-jcr SVN: r3031 - in jcr/branches/1.12.x/exo.jcr.component.core/src: test/java/org/exoplatform/services/jcr/api/importing and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Aug 31 10:58:31 EDT 2010


Author: areshetnyak
Date: 2010-08-31 10:58:31 -0400 (Tue, 31 Aug 2010)
New Revision: 3031

Modified:
   jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/DocumentViewImporter.java
   jcr/branches/1.12.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/importing/TestImport.java
Log:
EXOJCR-933 : Determine property type from nodetype definition in DocumentViewImport for version history was implemented.

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/DocumentViewImporter.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/DocumentViewImporter.java	2010-08-31 14:21:30 UTC (rev 3030)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/DocumentViewImporter.java	2010-08-31 14:58:31 UTC (rev 3031)
@@ -285,7 +285,36 @@
 
                List<ValueData> values = new ArrayList<ValueData>();
                int pType = pDef.getRequiredType() > 0 ? pDef.getRequiredType() : PropertyType.STRING;
+               
+               if (defs.getAnyDefinition().isResidualSet()) 
+               {
+                  if (nodeData.getQPath().isDescendantOf(Constants.JCR_VERSION_STORAGE_PATH))
+                  {
+                     if (nodeData.getPrimaryTypeName().equals(Constants.NT_FROZENNODE))
+                     {
+                        // get primaryType
+                        InternalQName fptName = locationFactory.parseJCRName(atts.get("jcr:frozenPrimaryType")).getInternalName();
 
+                        // get mixin types
+                        List<JCRName> mtNames = getJCRNames(atts.get("jcr:frozenMixinTypes"));
+
+                        InternalQName fmtName[] = new InternalQName[mtNames.size()];
+
+                        for (int i = 0; i < mtNames.size(); i++)
+                        {
+                           fmtName[i] = new InternalQName(mtNames.get(i).getNamespace(), mtNames.get(i).getName());
+                        }
+
+                        PropertyDefinitionDatas ptVhdefs = nodeTypeDataManager.getPropertyDefinitions(propName, fptName, fmtName);
+
+                        if (ptVhdefs != null)
+                        {
+                           pType = (ptVhdefs.getAnyDefinition().getRequiredType() > 0 ? ptVhdefs.getAnyDefinition().getRequiredType() : PropertyType.STRING);
+                        }
+                     }
+                  }
+               }
+
                if ("".equals(propertiesMap.get(propName)))
                {
                   // Skip empty non string values
@@ -293,7 +322,7 @@
                   {
                      continue;
                   }
-
+                  
                   String denormalizeString = StringConverter.denormalizeString(propertiesMap.get(propName));
                   Value value = valueFactory.createValue(denormalizeString, pType);
                   values.add(((BaseValue)value).getInternalData());

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/importing/TestImport.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/importing/TestImport.java	2010-08-31 14:21:30 UTC (rev 3030)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/importing/TestImport.java	2010-08-31 14:58:31 UTC (rev 3031)
@@ -48,6 +48,7 @@
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
 import javax.jcr.Property;
+import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.Value;
@@ -1990,4 +1991,100 @@
       fileImport.checkout();
       root.save();
    }
+   
+   /**
+    * https://jira.jboss.org/browse/EXOJCR-933
+    * 
+    * @throws Exception
+    */
+   public void testEXOJCR933_Doc_exo_datetime() throws Exception
+   {
+
+      Node testRoot = root.addNode("testRoot");
+      Node fileNode = testRoot.addNode("TestEXOJCR933_exo_datetime");
+      fileNode.setProperty("exo:datetime", Calendar.getInstance());
+      
+      if (fileNode.canAddMixin("mix:versionable"))
+      {
+         fileNode.addMixin("mix:versionable");
+      }
+      
+      fileNode.addMixin("exo:datetime");
+      
+      fileNode.setProperty("exo:dateCreated", Calendar.getInstance());
+      fileNode.setProperty("exo:dateModified", Calendar.getInstance());
+      
+      root.save();
+      
+      fileNode.checkin();
+      fileNode.checkout();
+      root.save();
+      
+      fileNode.checkin();
+      fileNode.checkout();
+      root.save();
+      
+      fileNode.checkin();
+      fileNode.checkout();
+      root.save();
+
+      String nodeDump = dumpVersionable(fileNode);
+      // Export VersionHistory
+
+      assertTrue(fileNode.isNodeType("mix:versionable"));
+
+      VersionableNodeInfo nodeInfo = new VersionableNodeInfo(fileNode);
+
+      // node content
+      byte[] versionableNode = serialize(fileNode, false, true);
+      // version history
+      byte[] versionHistory = serialize(fileNode.getVersionHistory(), false, true);
+      //System.out.println(new String(versionHistory));
+      
+      // restore node content
+      Node restoreRoot = testRoot.addNode("restRoot");
+      testRoot.save();
+      
+      deserialize(restoreRoot, XmlSaveType.SESSION, true, ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING,
+         new ByteArrayInputStream(versionableNode));
+      root.save();
+
+      assertTrue(restoreRoot.hasNode("TestEXOJCR933_exo_datetime"));
+
+      Node fileImport = restoreRoot.getNode("TestEXOJCR933_exo_datetime");
+      assertTrue(fileImport.isNodeType("mix:versionable"));
+
+      VersionHistoryImporter versionHistoryImporter =
+         new VersionHistoryImporter((NodeImpl)fileImport, new ByteArrayInputStream(versionHistory), nodeInfo
+            .getBaseVersion(), nodeInfo.getPredecessorsHistory(), nodeInfo.getVersionHistory());
+      versionHistoryImporter.doImport();
+      root.save();
+      
+      Property property = fileImport.getProperty("exo:dateCreated");
+      assertNotNull(property);
+      assertNotNull(property.getDefinition());
+      assertEquals(PropertyType.DATE, property.getType());
+      
+      property = fileImport.getProperty("exo:dateModified");
+      assertNotNull(property);
+      assertNotNull(property.getDefinition());
+      assertEquals(PropertyType.DATE, property.getType());
+      
+      fileImport.restore("2", true);
+      root.save();
+      
+      property = fileImport.getProperty("exo:dateCreated");
+      assertNotNull(property);
+      assertNotNull(property.getDefinition());
+      assertEquals(PropertyType.DATE, property.getType());
+      
+      property = fileImport.getProperty("exo:dateModified");
+      assertNotNull(property);
+      assertNotNull(property.getDefinition());
+      assertEquals(PropertyType.DATE, property.getType());
+      
+      fileImport.checkin();
+      fileImport.checkout();
+      root.save();
+   }
 }



More information about the exo-jcr-commits mailing list