Author: nzamosenchuk
Date: 2009-11-25 12:03:04 -0500 (Wed, 25 Nov 2009)
New Revision: 871
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java
Log:
EXOJCR-243: Added functionality in transactions
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java 2009-11-25
16:58:20 UTC (rev 870)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java 2009-11-25
17:03:04 UTC (rev 871)
@@ -18,10 +18,13 @@
*/
package org.exoplatform.services.jcr.impl.dataflow.session;
+import org.exoplatform.services.jcr.dataflow.ChangesLogIterator;
import org.exoplatform.services.jcr.dataflow.DataManager;
import org.exoplatform.services.jcr.dataflow.ItemState;
import org.exoplatform.services.jcr.dataflow.ItemStateChangesLog;
+import org.exoplatform.services.jcr.dataflow.LockPlainChangesLogImpl;
import org.exoplatform.services.jcr.dataflow.PlainChangesLog;
+import org.exoplatform.services.jcr.dataflow.PlainChangesLogImpl;
import org.exoplatform.services.jcr.dataflow.TransactionChangesLog;
import org.exoplatform.services.jcr.datamodel.ItemData;
import org.exoplatform.services.jcr.datamodel.NodeData;
@@ -30,6 +33,7 @@
import org.exoplatform.services.jcr.impl.core.SessionImpl;
import org.exoplatform.services.jcr.impl.core.lock.LockData;
import
org.exoplatform.services.jcr.impl.dataflow.persistent.LocalWorkspaceDataManagerStub;
+import org.exoplatform.services.jcr.observation.ExtendedEvent;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.services.transaction.TransactionException;
@@ -268,7 +272,35 @@
*/
public LockData getLockData(String identifier) throws RepositoryException
{
- return storageDataManager.getLockData(identifier);
+ LockData lockData = null;
+ if (txStarted())
+ {
+ // This is a transaction. Check if the node was locked inside this transaction
+ ChangesLogIterator changesLogIterator = transactionLog.getLogIterator();
+ while (changesLogIterator.hasNextLog())
+ {
+ PlainChangesLog plainChangesLog = changesLogIterator.nextLog();
+ if (plainChangesLog.getEventType() == ExtendedEvent.LOCK)
+ {
+ if
(((LockPlainChangesLogImpl)plainChangesLog).getLockData().getNodeIdentifier().equals(identifier))
+ {
+ lockData = ((LockPlainChangesLogImpl)plainChangesLog).getLockData();
+ }
+ }
+ else if (plainChangesLog.getEventType() == ExtendedEvent.UNLOCK)
+ {
+ if (plainChangesLog.getSize() == 2)
+ {
+ ItemState itemState = plainChangesLog.getAllStates().get(0);
+ if (itemState.getData().getParentIdentifier().equals(identifier))
+ {
+ lockData = null;
+ }
+ }
+ }
+ }
+ }
+ return lockData == null ? storageDataManager.getLockData(identifier) : lockData;
}
/**
Show replies by date