[exo-jcr-commits] exo-jcr SVN: r4224 - in jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr: impl/core and 8 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Mon Apr 11 06:54:23 EDT 2011
Author: tolusha
Date: 2011-04-11 06:54:23 -0400 (Mon, 11 Apr 2011)
New Revision: 4224
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemDataTraversingVisitor.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemState.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionImpl.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/ItemDataMoveVisitor.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/LinkedWorkspaceStorageCacheImpl.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/ISPNCacheWorkspaceStorageCache.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/serialization/ItemStateReader.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/serialization/ItemStateWriter.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/LocalWorkspaceStorageDataManagerProxy.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/SessionChangesLog.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/BaseXmlImporter.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/storage/WorkspaceDataContainer.java
Log:
EXOJCR-1296: Allow to ignore events for descendents on rename by adding "trigger-events-for-descendents-on-rename" property with "false" value
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemDataTraversingVisitor.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemDataTraversingVisitor.java 2011-04-11 09:54:46 UTC (rev 4223)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemDataTraversingVisitor.java 2011-04-11 10:54:23 UTC (rev 4224)
@@ -37,6 +37,8 @@
*/
protected final int maxLevel;
+ public static final int INFINITE_DEPTH = -1;
+
/**
* Current level.
*/
@@ -62,7 +64,7 @@
*/
public ItemDataTraversingVisitor(ItemDataConsumer dataManager)
{
- this.maxLevel = -1;
+ this.maxLevel = INFINITE_DEPTH;
this.dataManager = dataManager;
}
@@ -83,7 +85,7 @@
try
{
entering(node, currentLevel);
- if (maxLevel == -1 || currentLevel < maxLevel)
+ if (maxLevel == INFINITE_DEPTH || currentLevel < maxLevel)
{
currentLevel++;
for (PropertyData data : dataManager.getChildPropertiesData(node))
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemState.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemState.java 2011-04-11 09:54:46 UTC (rev 4223)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemState.java 2011-04-11 10:54:23 UTC (rev 4224)
@@ -19,8 +19,10 @@
package org.exoplatform.services.jcr.dataflow;
import org.exoplatform.services.jcr.core.security.JCRRuntimePermissions;
+import org.exoplatform.services.jcr.datamodel.IllegalPathException;
import org.exoplatform.services.jcr.datamodel.ItemData;
import org.exoplatform.services.jcr.datamodel.QPath;
+import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
@@ -54,6 +56,8 @@
public static final int RENAMED = 32;
+ public static final int PATH_CHANGED = 64;
+
/**
* underlying item data
*/
@@ -78,6 +82,11 @@
*/
private transient QPath ancestorToSave;
+ /**
+ * Storing old node path during Session.move() operation
+ */
+ private QPath oldPath;
+
/**
* The constructor
*
@@ -110,7 +119,27 @@
this(data, state, eventFire, ancestorToSave, isInternalCreated, true);
}
+ /**
+ * @param data
+ * underlying data
+ * @param state
+ * @param eventFire
+ * - if the state cause some event firing
+ * @param ancestorToSave
+ * - path of item which should be called in save (usually for session.move())
+ * @param isInternalCreated
+ * - indicates that item is created internally by system
+ * @param oldPath
+ * - store to old node path during Session.move() operation
+ */
public ItemState(ItemData data, int state, boolean eventFire, QPath ancestorToSave, boolean isInternalCreated,
+ boolean isPersisted, QPath oldPath)
+ {
+ this(data, state, eventFire, ancestorToSave, isInternalCreated, isPersisted);
+ this.oldPath = oldPath;
+ }
+
+ public ItemState(ItemData data, int state, boolean eventFire, QPath ancestorToSave, boolean isInternalCreated,
boolean isPersisted)
{
if (isInternalCreated)
@@ -194,6 +223,11 @@
return (state == RENAMED);
}
+ public boolean isPathChanged()
+ {
+ return (state == PATH_CHANGED);
+ }
+
public boolean isEventFire()
{
return eventFire;
@@ -219,6 +253,11 @@
return ancestorToSave;
}
+ public QPath getOldPath()
+ {
+ return oldPath;
+ }
+
@Override
public boolean equals(Object obj)
{
@@ -360,6 +399,8 @@
return "MIXIN_CHANGED";
case RENAMED :
return "RENAMED";
+ case PATH_CHANGED :
+ return "PATH_CHANGED";
default :
return "UNDEFINED STATE";
}
@@ -380,6 +421,18 @@
out.writeInt(state);
out.writeBoolean(isPersisted);
out.writeBoolean(eventFire);
+
+ if (oldPath == null)
+ {
+ out.writeInt(-1);
+ }
+ else
+ {
+ byte[] buf = oldPath.getAsString().getBytes(Constants.DEFAULT_ENCODING);
+ out.writeInt(buf.length);
+ out.write(buf);
+ }
+
out.writeObject(data);
}
@@ -388,6 +441,27 @@
state = in.readInt();
isPersisted = in.readBoolean();
eventFire = in.readBoolean();
+
+ int len = in.readInt();
+ if (len == -1)
+ {
+ oldPath = null;
+ }
+ else
+ {
+ byte[] buf = new byte[len];
+ in.readFully(buf);
+
+ try
+ {
+ oldPath = QPath.parse(new String(buf, Constants.DEFAULT_ENCODING));
+ }
+ catch (IllegalPathException e)
+ {
+ throw new IOException("Data currupted.", e);
+ }
+ }
+
data = (ItemData)in.readObject();
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java 2011-04-11 09:54:46 UTC (rev 4223)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java 2011-04-11 10:54:23 UTC (rev 4224)
@@ -1851,7 +1851,7 @@
continue;
}
- if (rstate.getState() == ItemState.RENAMED)
+ if (rstate.isRenamed())
{
// find DELETED
rstate = changes.findItemState(rstate.getData().getIdentifier(), false, new int[]{ItemState.DELETED});
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionImpl.java 2011-04-11 09:54:46 UTC (rev 4223)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionImpl.java 2011-04-11 10:54:23 UTC (rev 4224)
@@ -50,6 +50,7 @@
import org.exoplatform.services.jcr.impl.xml.exporting.BaseXmlExporter;
import org.exoplatform.services.jcr.impl.xml.importing.ContentImporter;
import org.exoplatform.services.jcr.impl.xml.importing.StreamImporter;
+import org.exoplatform.services.jcr.storage.WorkspaceDataContainer;
import org.exoplatform.services.jcr.util.IdGenerator;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
@@ -159,6 +160,8 @@
private long lastAccessTime;
+ private boolean triggerEventsForDescendentsOnRename;
+
private final int lazyReadThreshold;
private final SessionRegistry sessionRegistry;
@@ -224,7 +227,9 @@
sessionRegistry.registerSession(this);
this.lastAccessTime = System.currentTimeMillis();
-
+ this.triggerEventsForDescendentsOnRename =
+ wsConfig.getContainer().getParameterBoolean(WorkspaceDataContainer.TRIGGER_EVENTS_FOR_DESCENDENTS_ON_RENAME,
+ WorkspaceDataContainer.TRIGGER_EVENTS_FOR_DESCENDENTS_ON_RENAME_DEFAULT);
}
/**
@@ -996,7 +1001,8 @@
ItemDataMoveVisitor initializer =
new ItemDataMoveVisitor((NodeData)destParentNode.getData(), destNodePath.getName().getInternalName(),
- nodeTypeManager, getTransientNodesManager(), true);
+ nodeTypeManager, getTransientNodesManager(), true, triggerEventsForDescendentsOnRename
+ || !srcNodePath.makeParentPath().equals(destNodePath.makeParentPath()));
getTransientNodesManager().rename((NodeData)srcNode.getData(), initializer);
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/ItemDataMoveVisitor.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/ItemDataMoveVisitor.java 2011-04-11 09:54:46 UTC (rev 4223)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/ItemDataMoveVisitor.java 2011-04-11 10:54:23 UTC (rev 4224)
@@ -82,6 +82,11 @@
protected QPath ancestorToSave = null;
+ /**
+ * Trigger events for descendents.
+ */
+ protected boolean triggerEventsForDescendents;
+
/**
* Creates an instance of this class.
*
@@ -95,20 +100,39 @@
* - Source data manager
* @param keepIdentifiers
* - Is it necessity to keep <code>Identifiers</code>
+ * @param triggerEventsForDescendents
+ * - Trigger events for descendents.
*/
-
public ItemDataMoveVisitor(NodeData parent, InternalQName dstNodeName, NodeTypeDataManager nodeTypeManager,
- SessionDataManager srcDataManager, boolean keepIdentifiers)
+ SessionDataManager srcDataManager, boolean keepIdentifiers, boolean triggerEventsForDescendents)
{
- super(srcDataManager);
+ super(srcDataManager, triggerEventsForDescendents ? INFINITE_DEPTH : 0);
this.keepIdentifiers = keepIdentifiers;
this.ntManager = nodeTypeManager;
this.destNodeName = dstNodeName;
this.parents = new Stack<NodeData>();
this.parents.add(parent);
+ this.triggerEventsForDescendents = triggerEventsForDescendents;
}
+ /**
+ * Creates an instance of this class.
+ *
+ * @param parent - The parent node
+ * @param dstNodeName Destination node name
+ * @param nodeTypeManager - The NodeTypeManager
+ * @param srcDataManager - Source data manager
+ * @param keepIdentifiers - Is it necessity to keep <code>Identifiers</code>
+ * @param skipEventsForDescendents - Don't generate events for the
+ * descendants.
+ */
+ public ItemDataMoveVisitor(NodeData parent, InternalQName dstNodeName, NodeTypeDataManager nodeTypeManager,
+ SessionDataManager srcDataManager, boolean keepIdentifiers)
+ {
+ this(parent, dstNodeName, nodeTypeManager, srcDataManager, keepIdentifiers, false);
+ }
+
@Override
protected void entering(NodeData node, int level) throws RepositoryException
{
@@ -230,6 +254,12 @@
// if level == 0 set internal createt as false for validating on save
addStates.add(new ItemState(newNode, ItemState.RENAMED, level == 0, ancestorToSave, false, level == 0));
deleteStates.add(new ItemState(node, ItemState.DELETED, level == 0, ancestorToSave, false, false));
+
+ if (!triggerEventsForDescendents)
+ {
+ addStates.add(new ItemState(newNode, ItemState.PATH_CHANGED, false, ancestorToSave, false, false, node
+ .getQPath()));
+ }
}
@Override
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/LinkedWorkspaceStorageCacheImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/LinkedWorkspaceStorageCacheImpl.java 2011-04-11 09:54:46 UTC (rev 4223)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/LinkedWorkspaceStorageCacheImpl.java 2011-04-11 10:54:23 UTC (rev 4224)
@@ -32,6 +32,8 @@
import org.exoplatform.services.jcr.datamodel.QPath;
import org.exoplatform.services.jcr.datamodel.QPathEntry;
import org.exoplatform.services.jcr.impl.Constants;
+import org.exoplatform.services.jcr.impl.dataflow.TransientNodeData;
+import org.exoplatform.services.jcr.impl.dataflow.TransientPropertyData;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
@@ -43,10 +45,10 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Timer;
import java.util.TimerTask;
import java.util.WeakHashMap;
-import java.util.Map.Entry;
import java.util.concurrent.Semaphore;
import java.util.concurrent.locks.ReentrantLock;
@@ -1886,6 +1888,68 @@
// RENAME goes before DELETE
put(item);
}
+ else if (state.isPathChanged())
+ {
+ writeLock.lock();
+ try
+ {
+ for (Entry<CacheKey, CacheValue> cacheEntry : cache.entrySet())
+ {
+ CacheKey cacheKey = cacheEntry.getKey();
+ CacheValue cacheValue = cacheEntry.getValue();
+
+ ItemData oldItemData = cacheValue.getItem();
+ if (oldItemData.getQPath().isDescendantOf(state.getOldPath()))
+ {
+ int relativeDegree = oldItemData.getQPath().getDepth() - state.getOldPath().getDepth();
+ QPath newQPath =
+ QPath.makeChildPath(state.getData().getQPath(),
+ oldItemData.getQPath().getRelPath(relativeDegree));
+
+ if (oldItemData.isNode())
+ {
+ NodeData nodeData = (NodeData)oldItemData;
+ TransientNodeData newItemData =
+ new TransientNodeData(newQPath, nodeData.getIdentifier(), nodeData.getPersistedVersion(),
+ nodeData.getPrimaryTypeName(), nodeData.getMixinTypeNames(),
+ nodeData.getOrderNumber(), nodeData.getParentIdentifier(), nodeData.getACL());
+ cache.put(cacheKey, new CacheValue(newItemData, cacheValue.getExpiredTime()));
+
+ // update in children nodes
+ List<NodeData> cachedChildNodes = nodesCache.get(nodeData.getParentIdentifier());
+ if (cachedChildNodes != null)
+ {
+ int index = cachedChildNodes.indexOf(oldItemData);
+ cachedChildNodes.set(index, newItemData);
+ }
+ }
+ else
+ {
+ PropertyData oldPropertyData = (PropertyData)oldItemData;
+ TransientPropertyData newPropertyData =
+ new TransientPropertyData(newQPath, oldPropertyData.getIdentifier(),
+ oldPropertyData.getPersistedVersion(), oldPropertyData.getType(),
+ oldPropertyData.getParentIdentifier(), oldPropertyData.isMultiValued(),
+ oldPropertyData.getValues());
+ cache.put(cacheKey, new CacheValue(newPropertyData, cacheValue.getExpiredTime()));
+
+ // update in children properties
+ List<PropertyData> cachedChildProps =
+ propertiesCache.get(oldPropertyData.getParentIdentifier());
+ if (cachedChildProps != null)
+ {
+ int index = cachedChildProps.indexOf(oldItemData);
+ cachedChildProps.set(index, newPropertyData);
+ }
+ }
+ }
+ }
+ }
+ finally
+ {
+ writeLock.unlock();
+ }
+ }
else if (state.isUpdated())
{
// UPDATE occurs on reordered (no subtree!) and merged nodes (for each
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java 2011-04-11 09:54:46 UTC (rev 4223)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java 2011-04-11 10:54:23 UTC (rev 4224)
@@ -355,7 +355,7 @@
ItemState itemState =
new ItemState(newData, prevState.getState(), prevState.isEventFire(), prevState.getAncestorToSave(),
- prevState.isInternallyCreated(), prevState.isPersisted());
+ prevState.isInternallyCreated(), prevState.isPersisted(), prevState.getOldPath());
newLog.add(itemState);
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/ISPNCacheWorkspaceStorageCache.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/ISPNCacheWorkspaceStorageCache.java 2011-04-11 09:54:46 UTC (rev 4223)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/infinispan/ISPNCacheWorkspaceStorageCache.java 2011-04-11 10:54:23 UTC (rev 4224)
@@ -329,6 +329,10 @@
{
putItem(state.getData());
}
+ else if (state.isPathChanged())
+ {
+ updateTreePath(state.getOldPath(), state.getData().getQPath(), null);
+ }
else if (state.isMixinChanged())
{
if (state.isPersisted())
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java 2011-04-11 09:54:46 UTC (rev 4223)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java 2011-04-11 10:54:23 UTC (rev 4224)
@@ -554,6 +554,10 @@
{
putItem(state.getData());
}
+ else if (state.isPathChanged())
+ {
+ updateTreePath(state.getOldPath(), state.getData().getQPath(), null);
+ }
else if (state.isMixinChanged())
{
if (state.isPersisted())
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/serialization/ItemStateReader.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/serialization/ItemStateReader.java 2011-04-11 09:54:46 UTC (rev 4223)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/serialization/ItemStateReader.java 2011-04-11 10:54:23 UTC (rev 4224)
@@ -22,6 +22,9 @@
import org.exoplatform.services.jcr.dataflow.serialization.ObjectReader;
import org.exoplatform.services.jcr.dataflow.serialization.SerializationConstants;
import org.exoplatform.services.jcr.dataflow.serialization.UnknownClassIdException;
+import org.exoplatform.services.jcr.datamodel.IllegalPathException;
+import org.exoplatform.services.jcr.datamodel.QPath;
+import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
import java.io.EOFException;
@@ -94,17 +97,26 @@
boolean isPersisted = in.readBoolean();
boolean eventFire = in.readBoolean();
+ QPath oldPath = null;
+ int len = in.readInt();
+ if (len != -1)
+ {
+ byte[] buf = new byte[len];
+ in.readFully(buf);
+ oldPath = QPath.parse(new String(buf, Constants.DEFAULT_ENCODING));
+ }
+
boolean isNodeData = in.readBoolean();
if (isNodeData)
{
PresistedNodeDataReader rdr = new PresistedNodeDataReader();
- is = new ItemState(rdr.read(in), state, eventFire, null, false, isPersisted);
+ is = new ItemState(rdr.read(in), state, eventFire, null, false, isPersisted, oldPath);
}
else
{
PersistedPropertyDataReader rdr = new PersistedPropertyDataReader(fileCleaner, maxBufferSize, holder);
- is = new ItemState(rdr.read(in), state, eventFire, null, false, isPersisted);
+ is = new ItemState(rdr.read(in), state, eventFire, null, false, isPersisted, oldPath);
}
return is;
}
@@ -112,5 +124,9 @@
{
throw new StreamCorruptedException("Unexpected EOF in middle of data block.");
}
+ catch (IllegalPathException e)
+ {
+ throw new IOException("Data corrupted", e);
+ }
}
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/serialization/ItemStateWriter.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/serialization/ItemStateWriter.java 2011-04-11 09:54:46 UTC (rev 4223)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/serialization/ItemStateWriter.java 2011-04-11 10:54:23 UTC (rev 4224)
@@ -24,6 +24,7 @@
import org.exoplatform.services.jcr.dataflow.serialization.ObjectWriter;
import org.exoplatform.services.jcr.dataflow.serialization.SerializationConstants;
import org.exoplatform.services.jcr.datamodel.ItemData;
+import org.exoplatform.services.jcr.impl.Constants;
import java.io.IOException;
@@ -58,6 +59,17 @@
out.writeBoolean(itemState.isPersisted());
out.writeBoolean(itemState.isEventFire());
+ if (itemState.getOldPath() == null)
+ {
+ out.writeInt(-1);
+ }
+ else
+ {
+ byte[] buf = itemState.getOldPath().getAsString().getBytes(Constants.DEFAULT_ENCODING);
+ out.writeInt(buf.length);
+ out.write(buf);
+ }
+
// write flag isNodeData and ItemData
ItemData data = itemState.getData();
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/LocalWorkspaceStorageDataManagerProxy.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/LocalWorkspaceStorageDataManagerProxy.java 2011-04-11 09:54:46 UTC (rev 4223)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/LocalWorkspaceStorageDataManagerProxy.java 2011-04-11 10:54:23 UTC (rev 4224)
@@ -91,7 +91,7 @@
for (ItemState change : changes.getAllStates())
{
states.add(new ItemState(copyItemData(change.getData()), change.getState(), change.isEventFire(), change
- .getAncestorToSave(), change.isInternallyCreated(), change.isPersisted()));
+ .getAncestorToSave(), change.isInternallyCreated(), change.isPersisted(), change.getOldPath()));
}
newLog.addLog(new PlainChangesLogImpl(states, changes.getSessionId(), changes.getEventType()));
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/SessionChangesLog.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/SessionChangesLog.java 2011-04-11 09:54:46 UTC (rev 4223)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/SessionChangesLog.java 2011-04-11 10:54:23 UTC (rev 4224)
@@ -487,6 +487,7 @@
* if renaming is not detected.
* @throws IllegalPathException
*/
+ @Deprecated
public ItemState[] findRenamed(QPath deletedPath) throws IllegalPathException
{
List<ItemState> allStates = getAllStates();
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/BaseXmlImporter.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/BaseXmlImporter.java 2011-04-11 09:54:46 UTC (rev 4223)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/BaseXmlImporter.java 2011-04-11 10:54:23 UTC (rev 4224)
@@ -175,7 +175,7 @@
for (ItemState itemState : changesLog.getAllStates())
{
newChangesLog.add(new ItemState(itemState.getData(), itemState.getState(), itemState.isEventFire(),
- ancestorToSave, itemState.isInternallyCreated(), itemState.isPersisted()));
+ ancestorToSave, itemState.isInternallyCreated(), itemState.isPersisted(), itemState.getOldPath()));
}
changesLog.clear();
changesLog.addAll(newChangesLog.getAllStates());
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/storage/WorkspaceDataContainer.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/storage/WorkspaceDataContainer.java 2011-04-11 09:54:46 UTC (rev 4223)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/storage/WorkspaceDataContainer.java 2011-04-11 10:54:23 UTC (rev 4224)
@@ -38,7 +38,10 @@
{
// configuration params
+ public static final String TRIGGER_EVENTS_FOR_DESCENDENTS_ON_RENAME = "trigger-events-for-descendents-on-rename";
+ public static final boolean TRIGGER_EVENTS_FOR_DESCENDENTS_ON_RENAME_DEFAULT = true;
+
public final static String CONTAINER_NAME = "containerName";
public final static String MAXBUFFERSIZE_PROP = "max-buffer-size";
More information about the exo-jcr-commits
mailing list