Author: tolusha
Date: 2011-07-28 02:01:42 -0400 (Thu, 28 Jul 2011)
New Revision: 4684
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/dataflow/session/TransactionableDataManager.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestGetNodesLazily.java
Log:
EXOJCR-1452: Implementation
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-07-27
14:23:57 UTC (rev 4683)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java 2011-07-28
06:01:42 UTC (rev 4684)
@@ -976,14 +976,21 @@
NodeData childNode = childs.get(i);
descendants.put(childNode.getIdentifier(), childNode);
}
+
+ int minOrderNum = childs.size() != 0 ? childs.get(0).getOrderNumber() :-1;
+ int maxOrderNum = childs.size() != 0 ? childs.get(childs.size() -
1).getOrderNumber() : -1;
// merge data
for (ItemState state : transientDescendants)
{
NodeData data = (NodeData)state.getData();
- if (state.isDeleted())
+ if ((state.isAdded() || state.isRenamed()) && !hasNext)
{
+ descendants.put(data.getIdentifier(), data);
+ }
+ else if (state.isDeleted())
+ {
descendants.remove(data.getIdentifier());
}
else if (state.isMixinChanged())
@@ -994,9 +1001,14 @@
descendants.put(data.getIdentifier(), data);
}
}
- else if (!hasNext && (state.isAdded() || state.isRenamed() ||
state.isUpdated()))
+ else if (state.isUpdated())
{
- descendants.put(data.getIdentifier(), data);
+ NodeData removedData = descendants.remove(data.getIdentifier());
+ if (removedData != null && minOrderNum <=
data.getOrderNumber()
+ && data.getOrderNumber() <= maxOrderNum)
+ {
+ descendants.put(data.getIdentifier(), data);
+ }
}
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java 2011-07-27
14:23:57 UTC (rev 4683)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java 2011-07-28
06:01:42 UTC (rev 4684)
@@ -116,23 +116,37 @@
List<ItemState> txChanges =
transactionLog.getChildrenChanges(parent.getIdentifier(), true);
if (txChanges.size() > 0)
{
+
+ int minOrderNum = childs.size() != 0 ? childs.get(0).getOrderNumber() :-1;
+ int maxOrderNum = childs.size() != 0 ? childs.get(childs.size() -
1).getOrderNumber() : -1;
+
for (ItemState state : txChanges)
{
- if (state.isDeleted())
+ NodeData data = (NodeData)state.getData();
+
+ if ((state.isAdded() || state.isRenamed()) && !hasNext)
{
- childs.remove(state.getData());
+ childs.add(data);
}
- if (state.isMixinChanged())
+ else if (state.isDeleted())
{
+ childs.remove(data);
+ }
+ else if (state.isMixinChanged())
+ {
boolean isExists = childs.remove(state.getData());
if (isExists)
{
- childs.add((NodeData)state.getData());
+ childs.add(data);
}
}
- else if (!hasNext && (state.isAdded() || state.isRenamed() ||
state.isUpdated()))
+ else if (state.isUpdated())
{
- childs.add((NodeData)state.getData());
+ boolean isExists = childs.remove(state.getData());
+ if (isExists && minOrderNum <= data.getOrderNumber()
&& data.getOrderNumber() <= maxOrderNum)
+ {
+ childs.add(data);
+ }
}
}
}
Modified:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestGetNodesLazily.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestGetNodesLazily.java 2011-07-27
14:23:57 UTC (rev 4683)
+++
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestGetNodesLazily.java 2011-07-28
06:01:42 UTC (rev 4684)
@@ -20,6 +20,7 @@
import org.exoplatform.services.jcr.JcrImplBaseTest;
import org.exoplatform.services.jcr.core.ExtendedNode;
+import org.exoplatform.services.jcr.datamodel.NodeData;
import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.transaction.TransactionService;
@@ -158,6 +159,28 @@
}
/**
+ * New nodes moved into session log and not save
+ */
+ public void testGetNodesLazilySessionUpdatedNodes() throws Exception
+ {
+ testRoot.orderBefore("child110", "child0");
+ RangeIterator iterator = testRoot.getNodesLazily();
+
+ NodeImpl next = (NodeImpl)iterator.next();
+ assertEquals(next.getName(), "child110");
+ assertEquals(((NodeData)next.getData()).getOrderNumber(), 0);
+
+ next = (NodeImpl)iterator.next();
+ assertEquals(next.getName(), "child0");
+ assertEquals(((NodeData)next.getData()).getOrderNumber(), 1);
+
+ iterator.skip(108);
+ next = (NodeImpl)iterator.next();
+ assertEquals(next.getName(), "child109");
+ assertEquals(((NodeData)next.getData()).getOrderNumber(), 110);
+ }
+
+ /**
* Change mixin in node.
*/
public void testGetNodesLazilySessionMixinChanged() throws Exception
Show replies by date