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();
+ }
}