[exo-jcr-commits] exo-jcr SVN: r3723 - jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session.

do-not-reply at jboss.org do-not-reply at jboss.org
Fri Dec 24 02:24:21 EST 2010


Author: dkuleshov
Date: 2010-12-24 02:24:21 -0500 (Fri, 24 Dec 2010)
New Revision: 3723

Modified:
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/SessionChangesLog.java
Log:
EXOJCR-1120: changes log traversing optimized

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	2010-12-23 21:26:50 UTC (rev 3722)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/SessionChangesLog.java	2010-12-24 07:24:21 UTC (rev 3723)
@@ -204,16 +204,24 @@
 
    private void traverseChangesByIdentifier(String identifier, List<ItemState> changesList)
    {
-      for (int i = 0, length = items.size(); i < length; i++)
+      ItemState item = getItemState(identifier);
+      if (item != null)
       {
-         ItemState item = items.get(i);
-         if (item.getData().getIdentifier().equals(identifier))
+         changesList.add(item);
+         Map<String, ItemState> children = lastChildPropertyStates.get(identifier);
+         if (children != null)
          {
-            changesList.add(item);
+            // Add all the properties
+            changesList.addAll(children.values());
          }
-         else if (item.getData().getParentIdentifier().equals(identifier))
+         children = lastChildNodeStates.get(identifier);
+         if (children != null)
          {
-            traverseChangesByIdentifier(item.getData().getIdentifier(), changesList);
+            // Recursively call the method traverseChangesByIdentifier(String identifier, List<ItemState> changesList) for each sub node
+            for (ItemState child : children.values())
+            {
+               traverseChangesByIdentifier(child.getData().getIdentifier(), changesList);
+            }
          }
       }
    }
@@ -226,17 +234,27 @@
     */
    public void eraseEventFire(String identifier)
    {
-      for (int i = 0, length = items.size(); i < length; i++)
+      ItemState item = getItemState(identifier);
+      if (item != null)
       {
-         ItemState item = items.get(i);
-         if (item.getData().getIdentifier().equals(identifier))
+         item.eraseEventFire();
+         Map<String, ItemState> children = lastChildPropertyStates.get(identifier);
+         if (children != null)
          {
-            // erase flag
-            item.eraseEventFire();
+            // Call the method ItemState.eraseEventFire() on each properties
+            for (ItemState child : children.values())
+            {
+               child.eraseEventFire();
+            }
          }
-         else if (item.getData().getParentIdentifier().equals(identifier))
+         children = lastChildNodeStates.get(identifier);
+         if (children != null)
          {
-            eraseEventFire(item.getData().getIdentifier());
+            // Recursively call the method eraseEventFire(String identifier) for each sub node
+            for (ItemState child : children.values())
+            {
+               eraseEventFire(child.getData().getIdentifier());
+            }
          }
       }
    }



More information about the exo-jcr-commits mailing list