Author: areshetnyak
Date: 2010-08-26 03:24:28 -0400 (Thu, 26 Aug 2010)
New Revision: 2990
Added:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/NodePropertiesInfo.java
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/DocumentViewImporter.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/SystemViewImporter.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/dataflow/ImportPropertyData.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/importing/TestImport.java
Log:
EXOJCR-880 : Determine property is multi or single value from nodetype definition in
import of version history was implemented.
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/DocumentViewImporter.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/DocumentViewImporter.java 2010-08-25
14:44:46 UTC (rev 2989)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/DocumentViewImporter.java 2010-08-26
07:24:28 UTC (rev 2990)
@@ -36,6 +36,7 @@
import org.exoplatform.services.jcr.datamodel.QPath;
import org.exoplatform.services.jcr.datamodel.ValueData;
import org.exoplatform.services.jcr.impl.Constants;
+import org.exoplatform.services.jcr.impl.core.JCRName;
import org.exoplatform.services.jcr.impl.core.LocationFactory;
import org.exoplatform.services.jcr.impl.core.RepositoryImpl;
import org.exoplatform.services.jcr.impl.core.value.BaseValue;
@@ -202,7 +203,8 @@
ImportNodeData nodeData = createNode(nodeTypes, propertiesMap, mixinNodeTypes,
jcrName);
- NodeData parentNodeData = getParent();
+ NodeData parentNodeData = getParent();
+
changesLog.add(new ItemState(nodeData, ItemState.ADDED, true,
getAncestorToSave()));
tree.push(nodeData);
@@ -344,19 +346,39 @@
// determinating is property multivalue;
if (values.size() == 1)
{
- // there is single-value defeniton
- if (defs.getDefinition(false) != null)
+
+ PropertyDefinitionDatas vhdefs = null;
+
+ if
(nodeData.getQPath().isDescendantOf(Constants.JCR_VERSION_STORAGE_PATH))
{
- if (defs.getDefinition(false).isResidualSet() &&
nodeData.getPrimaryTypeName().equals(Constants.NT_FROZENNODE)
- && propName.equals(Constants.JCR_PREDECESSORS))
+ if (nodeData.getPrimaryTypeName().equals(Constants.NT_FROZENNODE))
{
- /// TODO EXOJCR-865
- isMultivalue = true;
+ // 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());
+ }
+
+ vhdefs = nodeTypeDataManager.getPropertyDefinitions(propName,
fptName, fmtName);
+
+ if (vhdefs != null)
+ {
+ isMultivalue = (vhdefs.getDefinition(true) != null ? true :
false);
+ }
}
- else
- {
+ }
+
+ // there is single-value defeniton
+ if (vhdefs == null && defs.getDefinition(false) != null)
+ {
isMultivalue = false;
- }
}
}
else
@@ -397,6 +419,28 @@
}
}
+ private List<JCRName> getJCRNames(String string) throws RepositoryException
+ {
+ List<JCRName> mtNames = new ArrayList<JCRName>();
+
+ StringTokenizer spaceToken = new StringTokenizer(string);
+
+ List<String> denormalizedStrings = new ArrayList<String>();
+ while (spaceToken.hasMoreTokens())
+ {
+ String elem = spaceToken.nextToken();
+ String denormalizeString = StringConverter.denormalizeString(elem);
+ denormalizedStrings.add(denormalizeString);
+ }
+
+ for (String mixinName : denormalizedStrings)
+ {
+ mtNames.add(locationFactory.parseJCRName(mixinName));
+ }
+
+ return mtNames;
+ }
+
private ImportNodeData createNode(List<NodeTypeData> nodeTypes,
HashMap<InternalQName, String> propertiesMap,
List<InternalQName> mixinNodeTypes, InternalQName jcrName) throws
PathNotFoundException, IllegalPathException,
RepositoryException
Added:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/NodePropertiesInfo.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/NodePropertiesInfo.java
(rev 0)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/NodePropertiesInfo.java 2010-08-26
07:24:28 UTC (rev 2990)
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2003-2010 eXo Platform SAS.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not,
see<http://www.gnu.org/licenses/>.
+ */
+package org.exoplatform.services.jcr.impl.xml.importing;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.exoplatform.services.jcr.impl.xml.importing.dataflow.ImportNodeData;
+import org.exoplatform.services.jcr.impl.xml.importing.dataflow.ImportPropertyData;
+
+/**
+ * Created by The eXo Platform SAS.
+ *
+ * <br/>Date: 2010
+ *
+ * @author <a href="mailto:alex.reshetnyak@exoplatform.com.ua">Alex
Reshetnyak</a>
+ * @version $Id$
+ */
+public class NodePropertiesInfo
+{
+
+ private final ImportNodeData node;
+
+ private final List<ImportPropertyData> properties = new
ArrayList<ImportPropertyData>();
+
+ public NodePropertiesInfo(ImportNodeData newNodeData)
+ {
+ this.node = newNodeData;
+ }
+
+ public void addProperty(ImportPropertyData propertyData)
+ {
+ properties.add(propertyData);
+ }
+
+ public ImportNodeData getNode()
+ {
+ return node;
+ }
+
+ public List<ImportPropertyData> getProperties()
+ {
+ return properties;
+ }
+
+}
Property changes on:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/NodePropertiesInfo.java
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/SystemViewImporter.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/SystemViewImporter.java 2010-08-25
14:44:46 UTC (rev 2989)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/SystemViewImporter.java 2010-08-26
07:24:28 UTC (rev 2990)
@@ -24,6 +24,7 @@
import org.exoplatform.services.jcr.core.nodetype.PropertyDefinitionDatas;
import org.exoplatform.services.jcr.dataflow.ItemDataConsumer;
import org.exoplatform.services.jcr.dataflow.ItemState;
+import org.exoplatform.services.jcr.datamodel.IllegalNameException;
import org.exoplatform.services.jcr.datamodel.IllegalPathException;
import org.exoplatform.services.jcr.datamodel.InternalQName;
import org.exoplatform.services.jcr.datamodel.NodeData;
@@ -49,6 +50,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -74,7 +76,9 @@
private static Log log =
ExoLogger.getLogger("exo.jcr.component.core.SystemViewImporter");
protected PropertyInfo propertyInfo = new PropertyInfo();
-
+
+ protected Map<String, NodePropertiesInfo> mapNodePropertiesInfo = new
HashMap<String, NodePropertiesInfo>();
+
/**
* Root node name.
*/
@@ -150,7 +154,15 @@
ImportPropertyData propertyData = endProperty();
if (propertyData != null)
+ {
changesLog.add(new ItemState(propertyData, ItemState.ADDED, true,
getAncestorToSave()));
+
+ ImportNodeData currentNodeInfo = (ImportNodeData)getParent();
+
+ NodePropertiesInfo currentNodePropertiesInfo =
mapNodePropertiesInfo.get(currentNodeInfo.getQPath().getAsString());
+
+ currentNodePropertiesInfo.addProperty(propertyData);
+ }
}
else if (Constants.SV_VALUE_NAME.equals(elementName))
{
@@ -204,8 +216,10 @@
newNodeData.setACL(parentData.getACL());
newNodeData.setOrderNumber(getNextChildOrderNum(parentData));
newNodeData.setIdentifier(IdGenerator.generate());
-
+
changesLog.add(new ItemState(newNodeData, ItemState.ADDED, true,
getAncestorToSave()));
+
+ mapNodePropertiesInfo.put(newNodeData.getQPath().getAsString(), new
NodePropertiesInfo(newNodeData));
tree.push(newNodeData);
@@ -292,6 +306,15 @@
private void endNode() throws RepositoryException
{
ImportNodeData currentNodeInfo = (ImportNodeData)tree.pop();
+
+ NodePropertiesInfo currentNodePropertiesInfo =
mapNodePropertiesInfo.get(currentNodeInfo.getQPath().getAsString());
+
+ if (currentNodePropertiesInfo != null)
+ {
+ checkPropertis(currentNodePropertiesInfo);
+ }
+
+ mapNodePropertiesInfo.remove(currentNodeInfo.getQPath().getAsString());
currentNodeInfo.setMixinTypeNames(currentNodeInfo.getMixinTypeNames());
@@ -304,7 +327,93 @@
.isExoPrivilegeable(), currentNodeInfo.getExoOwner(),
currentNodeInfo.getExoPrivileges()));
}
+
/**
+ * Checking priopertis if nodetype is nt:frozennode
+ *
+ * @param currentNodePropertiesInfo
+ * @throws RepositoryException
+ * @throws IOException
+ * @throws IllegalNameException
+ * @throws IllegalStateException
+ */
+ private void checkPropertis(NodePropertiesInfo currentNodePropertiesInfo) throws
RepositoryException
+ {
+ currentNodePropertiesInfo.getNode();
+ currentNodePropertiesInfo.getNode().getQPath();
+
currentNodePropertiesInfo.getNode().getQPath().isDescendantOf(Constants.JCR_VERSION_STORAGE_PATH);
+
+ currentNodePropertiesInfo.getNode();
+ currentNodePropertiesInfo.getNode().getPrimaryTypeName();
+
currentNodePropertiesInfo.getNode().getPrimaryTypeName().equals(Constants.NT_FROZENNODE);
+
+
+
+ if
(currentNodePropertiesInfo.getNode().getQPath().isDescendantOf(Constants.JCR_VERSION_STORAGE_PATH)
+ &&
currentNodePropertiesInfo.getNode().getPrimaryTypeName().equals(Constants.NT_FROZENNODE))
+ {
+ // name of frozenPrimaryType property
+ InternalQName fptPropertyName =
locationFactory.parseJCRName("jcr:frozenPrimaryType").getInternalName();
+
+ // node of frozenMixinTypes property
+ InternalQName fmtPropertyName =
locationFactory.parseJCRName("jcr:frozenMixinTypes").getInternalName();
+
+ InternalQName fptName = null;
+ List<InternalQName> fmtNames = new ArrayList<InternalQName>();
+
+ // get frozenPrimaryType and frozenMixinTypes
+ try
+ {
+ for (ImportPropertyData propertyData :
currentNodePropertiesInfo.getProperties())
+ {
+ if (propertyData.getQName().equals(fptPropertyName))
+ {
+ fptName = InternalQName.parse(new
String(propertyData.getValues().get(0).getAsByteArray()));
+ }
+ else if (propertyData.getQName().equals(fmtPropertyName))
+ {
+ for (ValueData valueData : propertyData.getValues())
+ {
+ fmtNames.add(InternalQName.parse(new
String(valueData.getAsByteArray())));
+ }
+ }
+ }
+ }
+ catch (IllegalStateException e)
+ {
+ log.error(e,e);
+ System.exit(0);
+ throw new RepositoryException(e.getMessage(), e);
+ }
+ catch (IllegalNameException e)
+ {
+ log.error(e,e);
+ System.exit(0);
+ throw new RepositoryException(e.getMessage(), e);
+ }
+ catch (IOException e)
+ {
+ log.error(e,e);
+ System.exit(0);
+ throw new RepositoryException(e.getMessage(), e);
+ }
+
+ for (ImportPropertyData propertyData :
currentNodePropertiesInfo.getProperties())
+ {
+ PropertyDefinitionDatas vhdefs =
+ nodeTypeDataManager.getPropertyDefinitions(propertyData.getQName(),
fptName, fmtNames
+ .toArray(new InternalQName[fmtNames.size()]));
+
+ if (vhdefs != null)
+ {
+ boolean isMultivalue = (vhdefs.getDefinition(true) != null ? true :
false);
+ propertyData.setMultivalue(isMultivalue);
+ }
+ }
+ }
+ }
+
+ /**
* endPrimaryType.
*
* @return
@@ -341,7 +450,9 @@
new ImportPropertyData(QPath.makeChildPath(nodeData.getQPath(),
propertyInfo.getName()), propertyInfo
.getIndentifer(), 0, propertyInfo.getType(), nodeData.getIdentifier(),
false);
propertyData.setValues(parseValues());
+
tree.push(nodeData);
+
return propertyData;
}
@@ -414,16 +525,7 @@
// there is single-value defeniton
if (defs.getDefinition(false) != null)
{
- if (defs.getDefinition(false).isResidualSet() &&
currentNodeInfo.getPrimaryTypeName().equals(Constants.NT_FROZENNODE)
- &&
propertyInfo.getName().equals(Constants.JCR_PREDECESSORS))
- {
- /// TODO EXOJCR-865
- isMultivalue = true;
- }
- else
- {
- isMultivalue = false;
- }
+ isMultivalue = false;
}
}
else
@@ -443,6 +545,7 @@
propertyData.setValues(values);
}
+
return propertyData;
}
@@ -481,6 +584,9 @@
}
tree.push(currentNodeInfo);
+
+ mapNodePropertiesInfo.put(currentNodeInfo.getQPath().getAsString(), new
NodePropertiesInfo(currentNodeInfo));
+
return propertyData;
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/dataflow/ImportPropertyData.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/dataflow/ImportPropertyData.java 2010-08-25
14:44:46 UTC (rev 2989)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/dataflow/ImportPropertyData.java 2010-08-26
07:24:28 UTC (rev 2990)
@@ -80,6 +80,17 @@
{
this.parentIdentifier = identifer;
}
+
+ /**
+ * Set multiValued;
+ *
+ * @param multiValue
+ * - multi value
+ */
+ public void setMultivalue(boolean multiValue)
+ {
+ this.multiValued = multiValue;
+ }
/**
* Set path of item.
Modified:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/importing/TestImport.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/importing/TestImport.java 2010-08-25
14:44:46 UTC (rev 2989)
+++
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/importing/TestImport.java 2010-08-26
07:24:28 UTC (rev 2990)
@@ -558,7 +558,7 @@
byte[] versionableNode = serialize(fileNode, false, true);
// version history
byte[] versionHistory = serialize(fileNode.getVersionHistory(), false, true);
- System.out.println(new String(versionHistory));
+ //System.out.println(new String(versionHistory));
fileNode.remove();
session.save();
assertFalse(testRoot.hasNode("TestJCR1247"));
@@ -1129,7 +1129,7 @@
// node content
byte[] versionableNode = serialize(fileNode, true, true);
// version history
- byte[] versionHistory = serialize(fileNode.getVersionHistory(), false, true);
+ byte[] versionHistory = serialize(fileNode.getVersionHistory(), true, true);
//System.out.println(new String(versionHistory));
// restore node content
@@ -1800,4 +1800,195 @@
fileImport.checkout();
root.save();
}
+
+ /**
+ *
https://jira.jboss.org/browse/EXOJCR-865
+ *
+ * @throws Exception
+ */
+ public void testEXOJCR865_Doc_exo_links() throws Exception
+ {
+
+ Node testRoot = root.addNode("testRoot");
+ Node fileNode = testRoot.addNode("TestEXOJCR865_exo_links",
"nt:file");
+ Node contentNode = fileNode.addNode("jcr:content",
"nt:resource");
+ contentNode.setProperty("jcr:data", new
ByteArrayInputStream("".getBytes()));
+ contentNode.setProperty("jcr:mimeType", "image/jpg");
+ contentNode.setProperty("jcr:lastModified", Calendar.getInstance());
+ root.save();
+ Node contentNodeBeforeAddVersion = fileNode.getNode("jcr:content");
+
assertNotNull(contentNodeBeforeAddVersion.getProperty("jcr:lastModified"));
+ if (fileNode.canAddMixin("mix:versionable"))
+ {
+ fileNode.addMixin("mix:versionable");
+ }
+
+ fileNode.addMixin("exo:linkable");
+
+ fileNode.setProperty("exo:links", new String[] {"1"});
+
+ fileNode.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("TestEXOJCR865_exo_links"));
+
+ Node fileImport = restoreRoot.getNode("TestEXOJCR865_exo_links");
+ 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:links");
+ assertNotNull(property);
+ assertNotNull(property.getDefinition());
+
+ property = fileImport.getProperty("jcr:predecessors");
+ assertNotNull(property);
+ assertNotNull(property.getDefinition());
+
+ fileImport.restore("2", true);
+ root.save();
+
+ property = fileImport.getProperty("exo:links");
+ assertNotNull(property);
+ assertNotNull(property.getDefinition());
+
+ property = fileImport.getProperty("jcr:predecessors");
+ assertNotNull(property);
+ assertNotNull(property.getDefinition());
+
+ fileImport.checkin();
+ fileImport.checkout();
+ root.save();
+ }
+
+ /**
+ *
https://jira.jboss.org/browse/EXOJCR-865
+ *
+ * @throws Exception
+ */
+ public void testEXOJCR865_Sys_exo_links() throws Exception
+ {
+
+ Node testRoot = root.addNode("testRoot");
+ Node fileNode = testRoot.addNode("TestEXOJCR865_exo_links",
"nt:file");
+ Node contentNode = fileNode.addNode("jcr:content",
"nt:resource");
+ contentNode.setProperty("jcr:data", new
ByteArrayInputStream("".getBytes()));
+ contentNode.setProperty("jcr:mimeType", "image/jpg");
+ contentNode.setProperty("jcr:lastModified", Calendar.getInstance());
+ root.save();
+ Node contentNodeBeforeAddVersion = fileNode.getNode("jcr:content");
+
assertNotNull(contentNodeBeforeAddVersion.getProperty("jcr:lastModified"));
+ if (fileNode.canAddMixin("mix:versionable"))
+ {
+ fileNode.addMixin("mix:versionable");
+ }
+
+ fileNode.addMixin("exo:linkable");
+
+ fileNode.setProperty("exo:links", new String[] {"1"});
+
+ fileNode.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, true, true);
+ // version history
+ byte[] versionHistory = serialize(fileNode.getVersionHistory(), true, 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("TestEXOJCR865_exo_links"));
+
+ Node fileImport = restoreRoot.getNode("TestEXOJCR865_exo_links");
+ 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:links");
+ assertNotNull(property);
+ assertNotNull(property.getDefinition());
+
+ property = fileImport.getProperty("jcr:predecessors");
+ assertNotNull(property);
+ assertNotNull(property.getDefinition());
+
+ fileImport.restore("2", true);
+ root.save();
+
+ property = fileImport.getProperty("jcr:predecessors");
+ assertNotNull(property);
+ assertNotNull(property.getDefinition());
+
+ property = fileImport.getProperty("exo:links");
+ assertNotNull(property);
+ assertNotNull(property.getDefinition());
+
+ fileImport.checkin();
+ fileImport.checkout();
+ root.save();
+ }
+
}