Author: andrew.plotnikov
Date: 2011-12-21 09:09:54 -0500 (Wed, 21 Dec 2011)
New Revision: 5340
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/RepositoryImpl.java
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/WorkspaceContentImporter.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/WorkspaceRestoreContentImporter.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/dataflow/ImportNodeData.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/exporting/TestExportImport.java
Log:
EXOJCR-1690: Wrong persistedVersion of the item during importing
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/RepositoryImpl.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/RepositoryImpl.java 2011-12-19
12:16:11 UTC (rev 5339)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/RepositoryImpl.java 2011-12-21
14:09:54 UTC (rev 5340)
@@ -31,10 +31,13 @@
import org.exoplatform.services.jcr.core.nodetype.ExtendedNodeTypeManager;
import org.exoplatform.services.jcr.core.security.JCRRuntimePermissions;
import org.exoplatform.services.jcr.dataflow.PersistentDataManager;
+import org.exoplatform.services.jcr.dataflow.PlainChangesLogImpl;
import org.exoplatform.services.jcr.dataflow.persistent.ItemsPersistenceListener;
import org.exoplatform.services.jcr.datamodel.NodeData;
+import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.jcr.impl.RepositoryContainer;
import org.exoplatform.services.jcr.impl.WorkspaceContainer;
+import org.exoplatform.services.jcr.impl.dataflow.ItemDataRemoveVisitor;
import org.exoplatform.services.jcr.impl.dataflow.session.TransactionableDataManager;
import org.exoplatform.services.jcr.impl.xml.ExportImportFactory;
import org.exoplatform.services.jcr.impl.xml.importing.ContentImporter;
@@ -467,19 +470,19 @@
try
{
-
Map<String, Object> context = new HashMap<String, Object>();
context.put(ContentImporter.RESPECT_PROPERTY_DEFINITIONS_CONSTRAINTS, true);
NodeData rootData = ((NodeData)((NodeImpl)sysSession.getRootNode()).getData());
TransactionableDataManager dataManager =
sysSession.getTransientNodesManager().getTransactManager();
- ExportImportFactory eiFactory = new ExportImportFactory();
+
+ cleanWorkspace(dataManager);
StreamImporter importer =
- eiFactory.getWorkspaceImporter(rootData,
ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, dataManager,
- dataManager, sysSession.getWorkspace().getNodeTypesHolder(),
sysSession.getLocationFactory(),
- sysSession.getValueFactory(), getNamespaceRegistry(),
sysSession.getAccessManager(),
- sysSession.getUserState(), context, this, wsName);
+ new ExportImportFactory().getWorkspaceImporter(rootData,
ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW,
+ dataManager, dataManager, sysSession.getWorkspace().getNodeTypesHolder(),
+ sysSession.getLocationFactory(), sysSession.getValueFactory(),
getNamespaceRegistry(),
+ sysSession.getAccessManager(), sysSession.getUserState(), context, this,
wsName);
importer.importStream(xmlStream);
}
finally
@@ -488,6 +491,20 @@
}
}
+ private void cleanWorkspace(TransactionableDataManager dataManager)
+ throws RepositoryException
+ {
+ NodeData rootData = (NodeData)dataManager.getItemData(Constants.ROOT_UUID);
+
+ ItemDataRemoveVisitor removeVisitor = new ItemDataRemoveVisitor(dataManager,
null);
+ rootData.accept(removeVisitor);
+
+ PlainChangesLogImpl changesLog = new PlainChangesLogImpl();
+ changesLog.addAll(removeVisitor.getRemovedStates());
+
+ dataManager.save(changesLog);
+ }
+
/**
* Internal Remove Workspace.
*
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 2011-12-19
12:16:11 UTC (rev 5339)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/DocumentViewImporter.java 2011-12-21
14:09:54 UTC (rev 5340)
@@ -155,14 +155,14 @@
}
ImportPropertyData newProperty =
- new ImportPropertyData(QPath.makeChildPath(nodeData.getQPath(),
Constants.JCR_PRIMARYTYPE), IdGenerator
- .generate(), 0, PropertyType.NAME, nodeData.getIdentifier(), false);
+ new ImportPropertyData(QPath.makeChildPath(nodeData.getQPath(),
Constants.JCR_PRIMARYTYPE),
+ IdGenerator.generate(), -1, PropertyType.NAME, nodeData.getIdentifier(),
false);
newProperty.setValue(new TransientValueData(Constants.NT_UNSTRUCTURED));
changesLog.add(new ItemState(newProperty, ItemState.ADDED, true,
getAncestorToSave()));
newProperty =
- new ImportPropertyData(QPath.makeChildPath(nodeData.getQPath(),
Constants.JCR_XMLCHARACTERS), IdGenerator
- .generate(), 0, PropertyType.STRING, nodeData.getIdentifier(), false);
+ new ImportPropertyData(QPath.makeChildPath(nodeData.getQPath(),
Constants.JCR_XMLCHARACTERS),
+ IdGenerator.generate(), -1, PropertyType.STRING, nodeData.getIdentifier(),
false);
newProperty.setValue(new TransientValueData(text.toString()));
changesLog.add(new ItemState(newProperty, ItemState.ADDED, true,
getAncestorToSave()));
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 2011-12-19
12:16:11 UTC (rev 5339)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/SystemViewImporter.java 2011-12-21
14:09:54 UTC (rev 5340)
@@ -79,9 +79,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.
*/
@@ -159,11 +159,11 @@
if (propertyData != null)
{
changesLog.add(new ItemState(propertyData, ItemState.ADDED, true,
getAncestorToSave()));
-
+
ImportNodeData currentNodeInfo = (ImportNodeData)getParent();
-
+
NodePropertiesInfo currentNodePropertiesInfo =
mapNodePropertiesInfo.get(currentNodeInfo.getIdentifier());
-
+
currentNodePropertiesInfo.addProperty(propertyData);
}
}
@@ -224,9 +224,9 @@
newNodeData.setACL(parentData.getACL());
newNodeData.setOrderNumber(getNextChildOrderNum(parentData));
newNodeData.setIdentifier(IdGenerator.generate());
-
+
changesLog.add(new ItemState(newNodeData, ItemState.ADDED, true,
getAncestorToSave()));
-
+
mapNodePropertiesInfo.put(newNodeData.getIdentifier(), new
NodePropertiesInfo(newNodeData));
tree.push(newNodeData);
@@ -330,8 +330,9 @@
currentNodeInfo.setMixinTypeNames(mixinNames);
propertyData =
- new ImportPropertyData(QPath.makeChildPath(currentNodeInfo.getQPath(),
propertyInfo.getName()), propertyInfo
- .getIndentifer(), 0, propertyInfo.getType(), currentNodeInfo.getIdentifier(),
true);
+ new ImportPropertyData(QPath.makeChildPath(currentNodeInfo.getQPath(),
propertyInfo.getName()),
+ propertyInfo.getIndentifer(), -1, propertyInfo.getType(),
currentNodeInfo.getIdentifier(), true);
+
propertyData.setValues(parseValues());
return propertyData;
}
@@ -344,14 +345,14 @@
private void endNode() throws RepositoryException
{
ImportNodeData currentNodeInfo = (ImportNodeData)tree.pop();
-
+
NodePropertiesInfo currentNodePropertiesInfo =
mapNodePropertiesInfo.get(currentNodeInfo.getIdentifier());
-
+
if (currentNodePropertiesInfo != null)
{
checkProperties(currentNodePropertiesInfo);
}
-
+
mapNodePropertiesInfo.remove(currentNodeInfo.getIdentifier());
currentNodeInfo.setMixinTypeNames(currentNodeInfo.getMixinTypeNames());
@@ -365,7 +366,6 @@
currentNodeInfo.getExoPrivileges()));
}
-
/**
* Checking priopertis if nodetype is nt:frozennode
*
@@ -378,7 +378,7 @@
private void checkProperties(NodePropertiesInfo currentNodePropertiesInfo) throws
RepositoryException
{
if
(currentNodePropertiesInfo.getNode().getQPath().isDescendantOf(Constants.JCR_VERSION_STORAGE_PATH)
- &&
currentNodePropertiesInfo.getNode().getPrimaryTypeName().equals(Constants.NT_FROZENNODE))
+ &&
currentNodePropertiesInfo.getNode().getPrimaryTypeName().equals(Constants.NT_FROZENNODE))
{
InternalQName fptName = null;
List<InternalQName> fmtNames = new ArrayList<InternalQName>();
@@ -391,14 +391,15 @@
if (propertyData.getQName().equals(Constants.JCR_FROZENPRIMARYTYPE))
{
fptName =
- InternalQName.parse(new
String(propertyData.getValues().get(0).getAsByteArray(),
- Constants.DEFAULT_ENCODING));
+ InternalQName.parse(new
String(propertyData.getValues().get(0).getAsByteArray(),
+ Constants.DEFAULT_ENCODING));
}
else if (propertyData.getQName().equals(Constants.JCR_FROZENMIXINTYPES))
{
for (ValueData valueData : propertyData.getValues())
{
- fmtNames.add(InternalQName.parse(new
String(valueData.getAsByteArray(), Constants.DEFAULT_ENCODING)));
+ fmtNames
+ .add(InternalQName.parse(new String(valueData.getAsByteArray(),
Constants.DEFAULT_ENCODING)));
}
}
}
@@ -415,22 +416,22 @@
{
throw new RepositoryException(e.getMessage(), e);
}
-
+
InternalQName nodePrimaryTypeName =
currentNodePropertiesInfo.getNode().getPrimaryTypeName();
InternalQName[] nodeMixinTypeName =
currentNodePropertiesInfo.getNode().getMixinTypeNames();
for (ImportPropertyData propertyData :
currentNodePropertiesInfo.getProperties())
{
PropertyDefinitionDatas defs =
- nodeTypeDataManager.getPropertyDefinitions(propertyData.getQName(),
nodePrimaryTypeName,
- nodeMixinTypeName);
-
- if (defs == null || (defs != null &&
defs.getAnyDefinition().isResidualSet()))
+ nodeTypeDataManager.getPropertyDefinitions(propertyData.getQName(),
nodePrimaryTypeName,
+ nodeMixinTypeName);
+
+ if (defs == null || (defs != null &&
defs.getAnyDefinition().isResidualSet()))
{
PropertyDefinitionDatas vhdefs =
-
nodeTypeDataManager.getPropertyDefinitions(propertyData.getQName(), fptName, fmtNames
- .toArray(new InternalQName[fmtNames.size()]));
-
+ nodeTypeDataManager.getPropertyDefinitions(propertyData.getQName(),
fptName,
+ fmtNames.toArray(new InternalQName[fmtNames.size()]));
+
if (vhdefs != null)
{
boolean isMultivalue = (vhdefs.getDefinition(true) != null ? true :
false);
@@ -468,8 +469,8 @@
{
//do nothing
}
- else if (!nodeTypeDataManager.isChildNodePrimaryTypeAllowed(primaryTypeName,
parentNodeData
- .getPrimaryTypeName(), parentNodeData.getMixinTypeNames()))
+ else if (!nodeTypeDataManager.isChildNodePrimaryTypeAllowed(primaryTypeName,
+ parentNodeData.getPrimaryTypeName(), parentNodeData.getMixinTypeNames()))
{
throw new ConstraintViolationException("Can't add node " +
nodeData.getQName().getAsString() + " to "
+ parentNodeData.getQPath().getAsString() + " node type " +
sName
@@ -482,12 +483,13 @@
nodeData.setPrimaryTypeName(primaryTypeName);
propertyData =
- new ImportPropertyData(QPath.makeChildPath(nodeData.getQPath(),
propertyInfo.getName()), propertyInfo
- .getIndentifer(), 0, propertyInfo.getType(), nodeData.getIdentifier(),
false);
+ new ImportPropertyData(QPath.makeChildPath(nodeData.getQPath(),
propertyInfo.getName()),
+ propertyInfo.getIndentifer(), -1, propertyInfo.getType(),
nodeData.getIdentifier(), false);
+
propertyData.setValues(parseValues());
-
+
tree.push(nodeData);
-
+
return propertyData;
}
@@ -576,11 +578,11 @@
propertyData =
new ImportPropertyData(QPath.makeChildPath(currentNodeInfo.getQPath(),
propertyInfo.getName()),
- propertyInfo.getIndentifer(), 0, propertyInfo.getType(),
currentNodeInfo.getIdentifier(), isMultivalue);
+ propertyInfo.getIndentifer(), -1, propertyInfo.getType(),
currentNodeInfo.getIdentifier(), isMultivalue);
propertyData.setValues(values);
}
-
+
return propertyData;
}
@@ -595,20 +597,20 @@
ImportPropertyData propertyData;
ImportNodeData currentNodeInfo = (ImportNodeData)tree.pop();
-
currentNodeInfo.setMixReferenceable(nodeTypeDataManager.isNodeType(Constants.MIX_REFERENCEABLE,
currentNodeInfo
- .getPrimaryTypeName(), currentNodeInfo.getMixinTypeNames()));
+
currentNodeInfo.setMixReferenceable(nodeTypeDataManager.isNodeType(Constants.MIX_REFERENCEABLE,
+ currentNodeInfo.getPrimaryTypeName(), currentNodeInfo.getMixinTypeNames()));
if (currentNodeInfo.isMixReferenceable())
{
-
currentNodeInfo.setMixVersionable(nodeTypeDataManager.isNodeType(Constants.MIX_VERSIONABLE,
currentNodeInfo
- .getPrimaryTypeName(), currentNodeInfo.getMixinTypeNames()));
+
currentNodeInfo.setMixVersionable(nodeTypeDataManager.isNodeType(Constants.MIX_VERSIONABLE,
+ currentNodeInfo.getPrimaryTypeName(), currentNodeInfo.getMixinTypeNames()));
checkReferenceable(currentNodeInfo,
propertyInfo.getValues().get(0).toString());
}
propertyData =
- new ImportPropertyData(QPath.makeChildPath(currentNodeInfo.getQPath(),
propertyInfo.getName()), propertyInfo
- .getIndentifer(), 0, propertyInfo.getType(), currentNodeInfo.getIdentifier(),
false);
-
+ new ImportPropertyData(QPath.makeChildPath(currentNodeInfo.getQPath(),
propertyInfo.getName()),
+ propertyInfo.getIndentifer(), -1, propertyInfo.getType(),
currentNodeInfo.getIdentifier(), false);
+
if (currentNodeInfo.getQPath().isDescendantOf(Constants.JCR_VERSION_STORAGE_PATH))
{
propertyData.setValue(new
TransientValueData(propertyInfo.getValues().get(0).toString()));
@@ -619,9 +621,9 @@
}
tree.push(currentNodeInfo);
-
+
mapNodePropertiesInfo.put(currentNodeInfo.getIdentifier(), new
NodePropertiesInfo(currentNodeInfo));
-
+
return propertyData;
}
@@ -686,8 +688,8 @@
// TODO cleanup
// TransientValueData binaryValue = new TransientValueData(vStream);
TransientValueData binaryValue =
- new TransientValueData(k, null, vStream, null,
valueFactory.getFileCleaner(), valueFactory
- .getMaxBufferSize(), null, true);
+ new TransientValueData(k, null, vStream, null,
valueFactory.getFileCleaner(),
+ valueFactory.getMaxBufferSize(), null, true);
// Call to spool file into tmp
binaryValue.getAsStream().close();
vStream.close();
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/WorkspaceContentImporter.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/WorkspaceContentImporter.java 2011-12-19
12:16:11 UTC (rev 5339)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/WorkspaceContentImporter.java 2011-12-21
14:09:54 UTC (rev 5340)
@@ -18,11 +18,6 @@
*/
package org.exoplatform.services.jcr.impl.xml.importing;
-import java.util.Map;
-
-import javax.jcr.NamespaceRegistry;
-import javax.jcr.RepositoryException;
-
import org.exoplatform.services.jcr.access.AccessControlList;
import org.exoplatform.services.jcr.access.AccessManager;
import org.exoplatform.services.jcr.core.nodetype.NodeTypeDataManager;
@@ -40,6 +35,11 @@
import org.exoplatform.services.log.Log;
import org.exoplatform.services.security.ConversationState;
+import java.util.Map;
+
+import javax.jcr.NamespaceRegistry;
+import javax.jcr.RepositoryException;
+
/**
* Created by The eXo Platform SAS.
*
@@ -115,19 +115,22 @@
if (!isFirstElementChecked)
{
if (!ROOT_NODE_NAME.equals(svName))
+ {
throw new RepositoryException("The first element must be root. But
found '" + svName + "'");
+ }
+
isFirstElementChecked = true;
}
if (ROOT_NODE_NAME.equals(svName))
{
- currentNodeName = Constants.ROOT_PATH.getName();
+ // remove the wrong root from the stack
+ tree.pop();
- newNodeData = processRootNode(parentData.getQPath());
+ newNodeData = addChangesForRootNodeInitialization(parentData);
}
else
{
-
currentNodeName = locationFactory.parseJCRName(svName).getInternalName();
nodeIndex = getNodeIndex(parentData, currentNodeName, null);
newNodeData = new ImportNodeData(parentData, currentNodeName, nodeIndex);
@@ -154,19 +157,17 @@
}
}
- protected ImportNodeData processRootNode(QPath parentPath)
+ /**
+ * @param rootData
+ * the root node data of workspace
+ */
+ protected ImportNodeData addChangesForRootNodeInitialization(NodeData rootData) throws
RepositoryException
{
- // remove the wrong root from the stack
- tree.pop();
-
- ImportNodeData newNodeData =
+ ImportNodeData newRootData =
new ImportNodeData(Constants.ROOT_PATH, Constants.ROOT_UUID, -1,
Constants.NT_UNSTRUCTURED,
- new InternalQName[0], 0, null, new AccessControlList());
+ new InternalQName[0], -1, null, new AccessControlList());
+ changesLog.add(new ItemState(rootData, ItemState.ADDED, true, null));
- // Not persistent state. Root created during the creation workspace.
- changesLog.add(new ItemState(newNodeData, ItemState.ADDED, true, parentPath, false,
false));
-
- return newNodeData;
+ return newRootData;
}
-
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/WorkspaceRestoreContentImporter.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/WorkspaceRestoreContentImporter.java 2011-12-19
12:16:11 UTC (rev 5339)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/WorkspaceRestoreContentImporter.java 2011-12-21
14:09:54 UTC (rev 5340)
@@ -18,18 +18,13 @@
*/
package org.exoplatform.services.jcr.impl.xml.importing;
-import org.exoplatform.services.jcr.access.AccessControlList;
import org.exoplatform.services.jcr.access.AccessManager;
import org.exoplatform.services.jcr.core.nodetype.NodeTypeDataManager;
import org.exoplatform.services.jcr.dataflow.ItemDataConsumer;
-import org.exoplatform.services.jcr.dataflow.ItemState;
-import org.exoplatform.services.jcr.datamodel.InternalQName;
-import org.exoplatform.services.jcr.datamodel.QPath;
import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.jcr.impl.core.LocationFactory;
import org.exoplatform.services.jcr.impl.core.RepositoryImpl;
import org.exoplatform.services.jcr.impl.core.value.ValueFactoryImpl;
-import org.exoplatform.services.jcr.impl.xml.importing.dataflow.ImportNodeData;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.services.security.ConversationState;
@@ -76,23 +71,4 @@
currentWorkspaceName);
}
-
- @Override
- protected ImportNodeData processRootNode(QPath parentPath)
- {
- // remove the wrong root (null) from the stack
- tree.pop();
-
- ImportNodeData newNodeData =
- new ImportNodeData(Constants.ROOT_PATH, Constants.ROOT_UUID, -1,
Constants.NT_UNSTRUCTURED,
- new InternalQName[0], 0, null, new AccessControlList());
-
- // persisted.
- changesLog.add(new ItemState(newNodeData, ItemState.ADDED, true, parentPath, false,
true));
-
- // TODO check root nodetype(s) in backup !!!
-
- return newNodeData;
- }
-
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/dataflow/ImportNodeData.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/dataflow/ImportNodeData.java 2011-12-19
12:16:11 UTC (rev 5339)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/dataflow/ImportNodeData.java 2011-12-21
14:09:54 UTC (rev 5340)
@@ -99,6 +99,7 @@
this.qpath = QPath.makeChildPath(parent.getQPath(), name, index);
this.parentIdentifier = parent.getIdentifier();
this.nodeTypes = new ArrayList<NodeTypeData>();
+ this.persistedVersion = -1;
}
/**
Modified:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/exporting/TestExportImport.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/exporting/TestExportImport.java 2011-12-19
12:16:11 UTC (rev 5339)
+++
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/exporting/TestExportImport.java 2011-12-21
14:09:54 UTC (rev 5340)
@@ -18,6 +18,12 @@
*/
package org.exoplatform.services.jcr.api.exporting;
+import org.exoplatform.services.jcr.dataflow.ItemState;
+import org.exoplatform.services.jcr.impl.core.NodeImpl;
+import org.exoplatform.services.jcr.impl.core.PropertyImpl;
+import org.exoplatform.services.jcr.impl.dataflow.TransientNodeData;
+import org.exoplatform.services.jcr.impl.dataflow.TransientPropertyData;
+import org.exoplatform.services.jcr.util.IdGenerator;
import org.xml.sax.SAXException;
import java.io.File;
@@ -54,56 +60,6 @@
super();
}
- // TODO Fix. Move to non system workspace.
- public void _testWorkspaceExportImportValuesSysView() throws Exception
- {
- Node testNode = root.addNode("testExportImport");
- for (int i = 0; i < valList.size(); i++)
- {
- testNode.setProperty("prop" + i + "_string", valList.get(i),
PropertyType.STRING);
- testNode.setProperty("prop" + i + "_binary", valList.get(i),
PropertyType.BINARY);
- }
- session.save();
- File destFile =
File.createTempFile("testWorkspaceExportImportValuesSysView",
".xml");
- destFile.deleteOnExit();
- OutputStream outStream = new FileOutputStream(destFile);
- session.exportWorkspaceSystemView(outStream, false, false);
- outStream.close();
-
- testNode.remove();
- session.save();
-
- session.importXML(root.getPath(), new FileInputStream(destFile),
ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);
-
- session.save();
-
- Node newNode = root.getNode("testExportImport");
-
- for (int i = 0; i < valList.size(); i++)
- {
- if (valList.get(i).length > 1)
- {
- Value[] stringValues = newNode.getProperty("prop" + i +
"_string").getValues();
- for (int j = 0; j < stringValues.length; j++)
- {
- assertEquals(stringValues[j].getString(), valList.get(i)[j]);
- }
- Value[] binaryValues = newNode.getProperty("prop" + i +
"_binary").getValues();
- for (int j = 0; j < stringValues.length; j++)
- {
- assertEquals(binaryValues[j].getString(), valList.get(i)[j]);
- }
- }
- else
- {
- assertEquals(valList.get(i)[0], newNode.getProperty("prop" + i +
"_string").getValue().getString());
- assertEquals(valList.get(i)[0], newNode.getProperty("prop" + i +
"_binary").getValue().getString());
-
- }
- }
- destFile.delete();
- }
-
public void testExportImportCustomNodeType() throws Exception
{
Node folder = root.addNode("childNode", "nt:folder");
@@ -442,6 +398,89 @@
assertTrue(testNode.isNodeType("mix:referenceable"));
assertTrue(testNode.hasProperty("jcr:uuid"));
assertTrue(testNode.isCheckedOut());
+ }
+ public void testShouldThrowExceptionWhenExistingNodeAddedAfterImporting() throws
Exception
+ {
+ Node testNode = root.addNode("testNode");
+ testNode.addMixin("mix:referenceable");
+ TransientNodeData node =
(TransientNodeData)((NodeImpl)testNode.addNode("test2")).getData();
+ session.save();
+
+ File contentFile = new File("target/input-sysview.xml");
+ OutputStream outStream = new FileOutputStream(contentFile);
+ try
+ {
+ session.exportSystemView(testNode.getPath(), outStream, false, false);
+ }
+ finally
+ {
+ outStream.close();
+ }
+
+ testNode.remove();
+ session.save();
+
+ session.importXML(root.getPath(), new FileInputStream(contentFile),
ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW);
+ session.save();
+
+ TransientNodeData newNodeData =
+ new TransientNodeData(node.getQPath(), IdGenerator.generate(),
node.getPersistedVersion(),
+ node.getPrimaryTypeName(), node.getMixinTypeNames(), node.getOrderNumber(),
root.getNode("testNode")
+ .getUUID(), node.getACL());
+
+ ItemState state = ItemState.createAddedState(newNodeData);
+ session.getTransientNodesManager().updateItemState(state);
+
+ try
+ {
+ session.save();
+ fail();
+ }
+ catch (Exception e)
+ {
+ }
}
+
+ public void testShouldThrowExceptionWhenExistingPropertyAddedAfterImporting() throws
Exception
+ {
+ Node testNode = root.addNode("testNode");
+ testNode.addMixin("mix:referenceable");
+ TransientPropertyData prop =
+
(TransientPropertyData)((PropertyImpl)testNode.setProperty("testProperty",
"testValue")).getData();
+ session.save();
+
+ File contentFile = new File("target/input-sysview.xml");
+ OutputStream outStream = new FileOutputStream(contentFile);
+ try
+ {
+ session.exportSystemView(testNode.getPath(), outStream, false, false);
+ }
+ finally
+ {
+ outStream.close();
+ }
+
+ testNode.remove();
+ session.save();
+
+ session.importXML(root.getPath(), new FileInputStream(contentFile),
ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW);
+ session.save();
+
+ TransientPropertyData newPropertyData =
+ new TransientPropertyData(prop.getQPath(), IdGenerator.generate(),
prop.getPersistedVersion(), prop.getType(),
+ root.getNode("testNode").getUUID(), prop.isMultiValued(),
prop.getValues());
+
+ ItemState state = ItemState.createAddedState(newPropertyData);
+ session.getTransientNodesManager().updateItemState(state);
+
+ try
+ {
+ session.save();
+ fail();
+ }
+ catch (Exception e)
+ {
+ }
+ }
}