[exo-jcr-commits] exo-jcr SVN: r4046 - in jcr/branches/1.12.x/patch/1.12.8-GA: JCR-1594 and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Mar 2 09:58:15 EST 2011


Author: tolusha
Date: 2011-03-02 09:58:15 -0500 (Wed, 02 Mar 2011)
New Revision: 4046

Added:
   jcr/branches/1.12.x/patch/1.12.8-GA/JCR-1594/
   jcr/branches/1.12.x/patch/1.12.8-GA/JCR-1594/JCR-1594.patch
Log:
JCR-1594: patch proposed

Added: jcr/branches/1.12.x/patch/1.12.8-GA/JCR-1594/JCR-1594.patch
===================================================================
--- jcr/branches/1.12.x/patch/1.12.8-GA/JCR-1594/JCR-1594.patch	                        (rev 0)
+++ jcr/branches/1.12.x/patch/1.12.8-GA/JCR-1594/JCR-1594.patch	2011-03-02 14:58:15 UTC (rev 4046)
@@ -0,0 +1,305 @@
+Index: exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/usecases/query/TestUpdateProperty.java
+===================================================================
+--- exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/usecases/query/TestUpdateProperty.java	(revision 0)
++++ exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/usecases/query/TestUpdateProperty.java	(revision 0)
+@@ -0,0 +1,211 @@
++/*
++ * Copyright (C) 2003-2007 eXo Platform SAS.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Affero General Public License
++ * as published by the Free Software Foundation; either version 3
++ * of the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, see<http://www.gnu.org/licenses/>.
++ */
++package org.exoplatform.services.jcr.usecases.query;
++
++import org.exoplatform.services.jcr.usecases.BaseUsecasesTest;
++
++import javax.jcr.Node;
++import javax.jcr.query.Query;
++import javax.jcr.query.QueryManager;
++
++/**
++ * @author <a href="mailto:anatoliy.bazko at gmail.com">Anatoliy Bazko</a>
++ * @version $Id: TestUpdateProperty.java 34360 2009-07-22 23:58:59Z tolusha $
++ */
++public class TestUpdateProperty extends BaseUsecasesTest
++{
++
++   public void testAddUpdateRemoveProperty() throws Exception
++   {
++
++      Node node = root.addNode("testNode");
++      node.setProperty("prop1", "value1");
++      node.setProperty("prop2", "value2");
++      root.save();
++
++      QueryManager manager = session.getWorkspace().getQueryManager();
++      Query query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value1')", Query.SQL);
++      assertEquals(1, query.execute().getNodes().getSize());
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value2')", Query.SQL);
++      assertEquals(1, query.execute().getNodes().getSize());
++
++      // the main issue that the last state is property deleting
++      node.setProperty("prop1", "value1-2");
++      node.setProperty("prop3", "value3");
++      node.getProperty("prop2").remove();
++      root.save();
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value1-2')", Query.SQL);
++      assertEquals(1, query.execute().getNodes().getSize());
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value1')", Query.SQL);
++      assertEquals(0, query.execute().getNodes().getSize());
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value2')", Query.SQL);
++      assertEquals(0, query.execute().getNodes().getSize());
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value3')", Query.SQL);
++      assertEquals(1, query.execute().getNodes().getSize());
++
++      // remove node
++      node.remove();
++      root.save();
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value1-2')", Query.SQL);
++      assertEquals(0, query.execute().getNodes().getSize());
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value3')", Query.SQL);
++      assertEquals(0, query.execute().getNodes().getSize());
++   }
++
++   public void testMoveNode() throws Exception
++   {
++
++      Node node = root.addNode("testNode");
++      node.setProperty("prop1", "value1");
++      node.setProperty("prop2", "value2");
++
++      node = node.addNode("subNode");
++      node.setProperty("prop21", "value21");
++      node.setProperty("prop22", "value22");
++      root.save();
++
++      QueryManager manager = session.getWorkspace().getQueryManager();
++      Query query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value1')", Query.SQL);
++      assertEquals(1, query.execute().getNodes().getSize());
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value2')", Query.SQL);
++      assertEquals(1, query.execute().getNodes().getSize());
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value21')", Query.SQL);
++      assertEquals(1, query.execute().getNodes().getSize());
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value22')", Query.SQL);
++      assertEquals(1, query.execute().getNodes().getSize());
++
++      session.move("/testNode", "/testNode2");
++      root.save();
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value1')", Query.SQL);
++      assertEquals(1, query.execute().getNodes().getSize());
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value2')", Query.SQL);
++      assertEquals(1, query.execute().getNodes().getSize());
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value21')", Query.SQL);
++      assertEquals(1, query.execute().getNodes().getSize());
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value22')", Query.SQL);
++      assertEquals(1, query.execute().getNodes().getSize());
++   }
++
++   public void testSetRemovePropertyImmediatly() throws Exception
++   {
++
++      Node node = root.addNode("testNode");
++      node.setProperty("prop1", "value1");
++      node.getProperty("prop1").remove();
++      root.save();
++
++      QueryManager manager = session.getWorkspace().getQueryManager();
++      Query query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value1')", Query.SQL);
++      assertEquals(0, query.execute().getNodes().getSize());
++   }
++
++   public void testSetRemoveProperty() throws Exception
++   {
++
++      Node node = root.addNode("testNode");
++      node.setProperty("prop1", "value1");
++      root.save();
++
++      QueryManager manager = session.getWorkspace().getQueryManager();
++      Query query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value1')", Query.SQL);
++      assertEquals(1, query.execute().getNodes().getSize());
++
++      node.getProperty("prop1").remove();
++      root.save();
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value1')", Query.SQL);
++      assertEquals(0, query.execute().getNodes().getSize());
++   }
++
++   public void testRemoveNodeUpdateProperty() throws Exception
++   {
++
++      Node node = root.addNode("testNode");
++      node.setProperty("prop1", "value1");
++      root.save();
++
++      QueryManager manager = session.getWorkspace().getQueryManager();
++      Query query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value1')", Query.SQL);
++      assertEquals(1, query.execute().getNodes().getSize());
++
++      node.setProperty("prop1", "value2");
++      node.remove();
++      root.save();
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value1')", Query.SQL);
++      assertEquals(0, query.execute().getNodes().getSize());
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value2')", Query.SQL);
++      assertEquals(0, query.execute().getNodes().getSize());
++   }
++
++   public void testRemoveNodeSetProperty() throws Exception
++   {
++
++      Node node = root.addNode("testNode");
++      node.setProperty("prop1", "value1");
++      root.save();
++
++      QueryManager manager = session.getWorkspace().getQueryManager();
++      Query query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value1')", Query.SQL);
++      assertEquals(1, query.execute().getNodes().getSize());
++
++      node.setProperty("prop2", "valu2");
++      node.remove();
++      root.save();
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value1')", Query.SQL);
++      assertEquals(0, query.execute().getNodes().getSize());
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value2')", Query.SQL);
++      assertEquals(0, query.execute().getNodes().getSize());
++   }
++
++   public void testRemoveNodeRemoveProperty() throws Exception
++   {
++
++      Node node = root.addNode("testNode");
++      node.setProperty("prop1", "value1");
++      root.save();
++
++      QueryManager manager = session.getWorkspace().getQueryManager();
++      Query query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value1')", Query.SQL);
++      assertEquals(1, query.execute().getNodes().getSize());
++
++      node.getProperty("prop1").remove();
++      node.remove();
++      root.save();
++
++      query = manager.createQuery("SELECT * FROM nt:base " + " WHERE CONTAINS(., 'value1')", Query.SQL);
++      assertEquals(0, query.execute().getNodes().getSize());
++   }
++
++}
+Index: exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/IndexerChangesFilter.java
+===================================================================
+--- exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/IndexerChangesFilter.java	(revision 4025)
++++ exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/IndexerChangesFilter.java	(working copy)
+@@ -163,66 +163,36 @@
+    private void acceptChanges(final Set<String> removedNodes, final Set<String> addedNodes,
+       final Map<String, List<ItemState>> updatedNodes, ItemState itemState)
+    {
+-      {
+-         String uuid =
+-            itemState.isNode() ? itemState.getData().getIdentifier() : itemState.getData().getParentIdentifier();
++      String uuid =
++         itemState.isNode() ? itemState.getData().getIdentifier() : itemState.getData().getParentIdentifier();
+ 
++      if (itemState.isNode())
++      {
+          if (itemState.isAdded())
+          {
+-            if (itemState.isNode())
+-            {
+-               addedNodes.add(uuid);
+-            }
+-            else
+-            {
+-               if (!addedNodes.contains(uuid))
+-               {
+-                  createNewOrAdd(uuid, itemState, updatedNodes);
+-               }
+-            }
++            addedNodes.add(uuid);
+          }
+-         else if (itemState.isRenamed())
++         else if (itemState.isRenamed() || itemState.isUpdated() || itemState.isMixinChanged())
+          {
+-            if (itemState.isNode())
+-            {
+-               addedNodes.add(uuid);
+-            }
+-            else
+-            {
+-               createNewOrAdd(uuid, itemState, updatedNodes);
+-            }
+-         }
+-         else if (itemState.isUpdated())
+-         {
+             createNewOrAdd(uuid, itemState, updatedNodes);
+          }
+-         else if (itemState.isMixinChanged())
++         else if (itemState.isDeleted())
+          {
+-            createNewOrAdd(uuid, itemState, updatedNodes);
++            addedNodes.remove(uuid);
++            removedNodes.add(uuid);
++
++            // remove all changes after node remove
++            updatedNodes.remove(uuid);
+          }
+-         else if (itemState.isDeleted())
++      }
++      else
++      {
++         if (itemState.isAdded() || itemState.isUpdated() || itemState.isDeleted())
+          {
+-            if (itemState.isNode())
++            if (!addedNodes.contains(uuid) && !removedNodes.contains(uuid) && !updatedNodes.containsKey(uuid))
+             {
+-               if (addedNodes.contains(uuid))
+-               {
+-                  addedNodes.remove(uuid);
+-                  removedNodes.remove(uuid);
+-               }
+-               else
+-               {
+-                  removedNodes.add(uuid);
+-               }
+-               // remove all changes after node remove
+-               updatedNodes.remove(uuid);
++               createNewOrAdd(uuid, itemState, updatedNodes);
+             }
+-            else
+-            {
+-               if (!removedNodes.contains(uuid) && !addedNodes.contains(uuid))
+-               {
+-                  createNewOrAdd(uuid, itemState, updatedNodes);
+-               }
+-            }
+          }
+       }
+    }



More information about the exo-jcr-commits mailing list