/*
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.services.jcr.impl.dataflow.persistent;
import org.exoplatform.services.jcr.JcrImplBaseTest;
import org.exoplatform.services.jcr.access.AccessControlList;
import org.exoplatform.services.jcr.dataflow.ItemState;
import org.exoplatform.services.jcr.dataflow.PlainChangesLog;
import org.exoplatform.services.jcr.dataflow.PlainChangesLogImpl;
import org.exoplatform.services.jcr.dataflow.persistent.PersistedNodeData;
import org.exoplatform.services.jcr.dataflow.persistent.PersistedPropertyData;
import org.exoplatform.services.jcr.dataflow.persistent.WorkspaceStorageCache;
import org.exoplatform.services.jcr.datamodel.InternalQName;
import org.exoplatform.services.jcr.datamodel.ItemType;
import org.exoplatform.services.jcr.datamodel.NodeData;
import org.exoplatform.services.jcr.datamodel.PropertyData;
import org.exoplatform.services.jcr.datamodel.QPath;
import org.exoplatform.services.jcr.datamodel.ValueData;
import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.jcr.impl.core.NodeImpl;
import org.exoplatform.services.jcr.util.IdGenerator;
import java.util.ArrayList;
import java.util.List;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
/**
* Created by The eXo Platform SAS.
*
* @author <a href="mailto:peter.nedonosko@exoplatform.com.ua">Peter Nedonosko</a>
* @version $Id: WorkspaceStorageCacheBaseCase.java 34801 2009-07-31 15:44:50Z dkatayev $
*/
public abstract class WorkspaceStorageCacheBaseCase extends JcrImplBaseTest
{
private QPath nodePath1 =
QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(Constants.NS_EXO_PREFIX, "node 1"));
private QPath nodePath2 =
QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(Constants.NS_EXO_PREFIX, "node 2"));
private QPath nodePath21 = QPath.makeChildPath(nodePath2, new InternalQName(Constants.NS_EXO_PREFIX, "node 2.1"));
private QPath nodePath22 = QPath.makeChildPath(nodePath2, new InternalQName(Constants.NS_EXO_PREFIX, "node 2.2"));
private QPath nodePath3 =
QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(Constants.NS_EXO_PREFIX, "node 3"));
private QPath nodePath31 = QPath.makeChildPath(nodePath3, new InternalQName(Constants.NS_EXO_PREFIX, "node 3.1"));
private QPath nodePath32 = QPath.makeChildPath(nodePath3, new InternalQName(Constants.NS_EXO_PREFIX, "node 3.2"));
private QPath propertyPath11 =
QPath.makeChildPath(nodePath1, new InternalQName(Constants.NS_EXO_PREFIX, "property 1.1"));
private QPath propertyPath12 =
QPath.makeChildPath(nodePath1, new InternalQName(Constants.NS_EXO_PREFIX, "property 1.2"));
private QPath propertyPath21 =
QPath.makeChildPath(nodePath2, new InternalQName(Constants.NS_EXO_PREFIX, "property 2.1"));
private QPath propertyPath22 =
QPath.makeChildPath(nodePath2, new InternalQName(Constants.NS_EXO_PREFIX, "property 2.2"));
private QPath propertyPath311 =
QPath.makeChildPath(nodePath31, new InternalQName(Constants.NS_EXO_PREFIX, "property 3.1.1"));
private QPath propertyPath312 =
QPath.makeChildPath(nodePath31, new InternalQName(Constants.NS_EXO_PREFIX, "property 3.1.2"));
private String rootUuid;
private String nodeUuid1;
private String nodeUuid2;
private String nodeUuid21;
private String nodeUuid22;
private String nodeUuid3;
private String nodeUuid31;
private String nodeUuid32;
private String propertyUuid11;
private String propertyUuid12;
private String propertyUuid21;
private String propertyUuid22;
private String propertyUuid311;
private String propertyUuid312;
private NodeData nodeData1;
private NodeData nodeData2;
private NodeData nodeData21;
private NodeData nodeData22;
private NodeData nodeData3;
private NodeData nodeData31;
private NodeData nodeData32;
private PropertyData propertyData11;
private PropertyData propertyData12;
private PropertyData propertyData21;
private PropertyData propertyData22;
private PropertyData propertyData311;
private PropertyData propertyData312;
private WorkspaceStorageCache cache;
@Override
public void setUp() throws Exception
{
super.setUp();
rootUuid = IdGenerator.generate();
nodeUuid1 = IdGenerator.generate();
nodeUuid2 = IdGenerator.generate();
nodeUuid21 = IdGenerator.generate();
nodeUuid22 = IdGenerator.generate();
nodeUuid3 = IdGenerator.generate();
nodeUuid31 = IdGenerator.generate();
nodeUuid32 = IdGenerator.generate();
propertyUuid11 = IdGenerator.generate();
propertyUuid12 = IdGenerator.generate();
propertyUuid21 = IdGenerator.generate();
propertyUuid22 = IdGenerator.generate();
propertyUuid311 = IdGenerator.generate();
propertyUuid312 = IdGenerator.generate();
WorkspaceStorageCache cacheProbe =
(WorkspaceStorageCache)session.getContainer().getComponentInstanceOfType(WorkspaceStorageCache.class);
assertNotNull("Cache is unaccessible (check access denied or configuration)", cacheProbe);
assertTrue("Cache is disabled", cacheProbe.isEnabled());
cache = getCacheImpl();
assertNotNull("Cache is disabled ", cache);
}
public abstract WorkspaceStorageCache getCacheImpl() throws Exception;
private void initNodesData() throws RepositoryException
{
AccessControlList acl = ((NodeImpl)root).getACL();
nodeData1 = new PersistedNodeData(nodeUuid1, nodePath1, rootUuid, 1, 0, Constants.NT_UNSTRUCTURED, null, acl);
nodeData2 = new PersistedNodeData(nodeUuid2, nodePath2, rootUuid, 1, 1, Constants.NT_UNSTRUCTURED, null, acl);
nodeData21 = new PersistedNodeData(nodeUuid21, nodePath21, nodeUuid2, 1, 0, Constants.NT_UNSTRUCTURED, null, acl);
nodeData22 = new PersistedNodeData(nodeUuid22, nodePath22, nodeUuid2, 1, 1, Constants.NT_UNSTRUCTURED, null, acl);
nodeData3 = new PersistedNodeData(nodeUuid3, nodePath3, rootUuid, 1, 2, Constants.NT_UNSTRUCTURED, null, acl);
nodeData31 = new PersistedNodeData(nodeUuid31, nodePath31, nodeUuid3, 1, 0, Constants.NT_UNSTRUCTURED, null, acl);
nodeData32 = new PersistedNodeData(nodeUuid32, nodePath32, nodeUuid3, 1, 1, Constants.NT_UNSTRUCTURED, null, acl);
}
private void initDataAsPersisted()
{
List<ValueData> stringData = new ArrayList<ValueData>();
stringData.add(new ByteArrayPersistedValueData(0, "property data 1".getBytes()));
stringData.add(new ByteArrayPersistedValueData(1, "property data 2".getBytes()));
stringData.add(new ByteArrayPersistedValueData(2, "property data 3".getBytes()));
propertyData11 =
new PersistedPropertyData(propertyUuid11, propertyPath11, nodeUuid1, 1, PropertyType.STRING, false,
stringData, new SimplePersistedSize(0));
List<ValueData> binData = new ArrayList<ValueData>();
binData.add(new ByteArrayPersistedValueData(0, "property data bin 1".getBytes()));
propertyData12 =
new PersistedPropertyData(propertyUuid12, propertyPath12, nodeUuid1, 1, PropertyType.BINARY, false, binData,
new SimplePersistedSize(0));
List<ValueData> stringData1 = new ArrayList<ValueData>();
stringData1.add(new ByteArrayPersistedValueData(0, "property data 1".getBytes()));
stringData1.add(new ByteArrayPersistedValueData(1, "property data 2".getBytes()));
stringData1.add(new ByteArrayPersistedValueData(2, "property data 3".getBytes()));
propertyData21 =
new PersistedPropertyData(propertyUuid21, propertyPath21, nodeUuid2, 1, PropertyType.STRING, true, stringData,
new SimplePersistedSize(0));
List<ValueData> booleanData = new ArrayList<ValueData>();
booleanData.add(new ByteArrayPersistedValueData(0, "true".getBytes()));
propertyData22 =
new PersistedPropertyData(propertyUuid22, propertyPath22, nodeUuid2, 1, PropertyType.BOOLEAN, false,
booleanData, new SimplePersistedSize(0));
List<ValueData> longData = new ArrayList<ValueData>();
longData.add(new ByteArrayPersistedValueData(0, new Long(123456).toString().getBytes()));
propertyData311 =
new PersistedPropertyData(propertyUuid311, propertyPath311, nodeUuid31, 1, PropertyType.LONG, false, longData,
new SimplePersistedSize(0));
List<ValueData> refData = new ArrayList<ValueData>();
refData.add(new ByteArrayPersistedValueData(0, nodeUuid1.getBytes()));
refData.add(new ByteArrayPersistedValueData(1, nodeUuid2.getBytes()));
refData.add(new ByteArrayPersistedValueData(2, nodeUuid3.getBytes()));
propertyData312 =
new PersistedPropertyData(propertyUuid312, propertyPath312, nodeUuid31, 1, PropertyType.REFERENCE, true,
refData, new SimplePersistedSize(0));
}
public void testGetItem_Persisted() throws Exception
{
initNodesData();
initDataAsPersisted();
try
{
cache.beginTransaction();
cache.put(nodeData1);
cache.put(nodeData2);
cache.put(propertyData12);
cache.commitTransaction();
}
catch (Exception e)
{
cache.rollbackTransaction();
throw e;
}
assertEquals("Cached node " + nodeData1.getQPath().getAsString() + " is not equals", cache.get(rootUuid,
nodePath1.getEntries()[nodePath1.getEntries().length - 1], ItemType.NODE), nodeData1);
assertEquals("Cached node " + nodeData2.getQPath().getAsString() + " is not equals", cache.get(rootUuid,
nodePath2.getEntries()[nodePath2.getEntries().length - 1], ItemType.NODE), nodeData2);
assertEquals("Cached node " + nodeData1.getIdentifier() + " is not equals", cache.get(nodeUuid1), nodeData1);
assertEquals("Cached node " + nodeData2.getIdentifier() + " is not equals", cache.get(nodeUuid2), nodeData2);
assertEquals("Cached property " + propertyPath12.getAsString() + " is not equals", cache.get(nodeUuid1,
propertyPath12.getEntries()[propertyPath12.getEntries().length - 1], ItemType.PROPERTY), propertyData12);
assertEquals("Cached property " + propertyData12.getIdentifier() + " is not equals", cache.get(propertyUuid12),
propertyData12);
}
public void testGetItems_Persisted() throws Exception
{
initNodesData();
initDataAsPersisted();
List<NodeData> nodes = new ArrayList<NodeData>();
nodes.add(nodeData31);
nodes.add(nodeData32);
try
{
cache.beginTransaction();
cache.addChildNodes(nodeData3, nodes);
cache.put(nodeData1);
cache.put(nodeData2);
cache.put(propertyData12);
List<PropertyData> properties2 = new ArrayList<PropertyData>();
properties2.add(propertyData21);
properties2.add(propertyData22);
cache.addChildProperties(nodeData2, properties2);
List<PropertyData> properties1 = new ArrayList<PropertyData>();
properties1.add(propertyData11);
properties1.add(propertyData12);
cache.addChildProperties(nodeData1, properties1);
cache.commitTransaction();
}
catch (Exception e)
{
cache.rollbackTransaction();
throw e;
}
// prev stuff
assertEquals("Cached " + nodeData1.getQPath().getAsString() + " is not equals", cache.get(rootUuid, nodePath1
.getEntries()[nodePath1.getEntries().length - 1], ItemType.NODE), nodeData1);
assertEquals("Cached " + nodeData2.getQPath().getAsString() + " is not equals", cache.get(rootUuid, nodePath2
.getEntries()[nodePath2.getEntries().length - 1], ItemType.NODE), nodeData2);
assertEquals("Cached " + propertyData12.getQPath().getAsString() + " is not equals", cache.get(nodeUuid1,
propertyPath12.getEntries()[propertyPath12.getEntries().length - 1], ItemType.PROPERTY), propertyData12);
// childs...
// nodes
assertEquals("Cached child node " + nodeData31.getQPath().getAsString() + " is not equals", cache.get(nodeUuid3,
nodePath31.getEntries()[nodePath31.getEntries().length - 1], ItemType.NODE), nodeData31);
assertEquals("Cached child node " + nodeData31.getIdentifier() + " is not equals", cache.get(nodeUuid31),
nodeData31);
assertEquals("Cached child node " + nodeData32.getQPath().getAsString() + " is not equals", cache.get(nodeUuid3,
nodePath32.getEntries()[nodePath32.getEntries().length - 1], ItemType.NODE), nodeData32);
assertEquals("Cached child node " + nodeData32.getIdentifier() + " is not equals", cache.get(nodeUuid32),
nodeData32);
assertTrue("Cached child node " + nodeData31.getQPath().getAsString() + " is not in the childs list", cache
.getChildNodes(nodeData3).contains(nodeData31));
assertTrue("Cached child node " + nodeData32.getQPath().getAsString() + " is not in the childs list", cache
.getChildNodes(nodeData3).contains(nodeData32));
assertEquals("Cached child nodes count is wrong", cache.getChildNodes(nodeData3).size(), 2);
// props
assertEquals("Cached child property " + propertyData11.getQPath().getAsString() + " is not equals", cache.get(
nodeUuid1, propertyPath11.getEntries()[propertyPath11.getEntries().length - 1], ItemType.PROPERTY),
propertyData11);
assertEquals("Cached child property " + propertyData11.getIdentifier() + " is not equals", cache
.get(propertyUuid11), propertyData11);
assertEquals("Cached child property " + propertyData12.getQPath().getAsString() + " is not equals", cache.get(
nodeUuid1, propertyPath12.getEntries()[propertyPath12.getEntries().length - 1], ItemType.PROPERTY),
propertyData12);
assertEquals("Cached child property " + propertyData12.getIdentifier() + " is not equals", cache
.get(propertyUuid12), propertyData12);
assertEquals("Cached child property " + propertyData21.getQPath().getAsString() + " is not equals", cache.get(
nodeUuid2, propertyPath21.getEntries()[propertyPath21.getEntries().length - 1], ItemType.PROPERTY),
propertyData21);
assertEquals("Cached child property " + propertyData21.getIdentifier() + " is not equals", cache
.get(propertyUuid21), propertyData21);
assertEquals("Cached child property " + propertyData22.getQPath().getAsString() + " is not equals", cache.get(
nodeUuid2, propertyPath22.getEntries()[propertyPath22.getEntries().length - 1], ItemType.PROPERTY),
propertyData22);
assertEquals("Cached child property " + propertyData22.getIdentifier() + " is not equals", cache
.get(propertyUuid22), propertyData22);
assertTrue("Cached child property " + propertyData11.getQPath().getAsString() + " is not in the childs list",
cache.getChildProperties(nodeData1).contains(propertyData11));
assertTrue("Cached child property " + propertyData12.getQPath().getAsString() + " is not in the childs list",
cache.getChildProperties(nodeData1).contains(propertyData12));
assertTrue("Cached child property " + propertyData21.getQPath().getAsString() + " is not in the childs list",
cache.getChildProperties(nodeData2).contains(propertyData21));
assertTrue("Cached child property " + propertyData22.getQPath().getAsString() + " is not in the childs list",
cache.getChildProperties(nodeData2).contains(propertyData22));
assertEquals("Cached child properties count is wrong", cache.getChildProperties(nodeData1).size(), 2);
assertEquals("Cached child properties count is wrong", cache.getChildProperties(nodeData2).size(), 2);
}
public void testGetProperty_Persisted() throws Exception
{
initNodesData();
initDataAsPersisted();
List<NodeData> nodes = new ArrayList<NodeData>();
nodes.add(nodeData31);
nodes.add(nodeData32);
try
{
cache.beginTransaction();
cache.addChildNodes(nodeData3, nodes);
cache.put(nodeData1);
cache.put(nodeData2);
cache.put(propertyData12);
List<PropertyData> properties2 = new ArrayList<PropertyData>();
properties2.add(propertyData21);
properties2.add(propertyData22);
cache.addChildProperties(nodeData2, properties2);
List<PropertyData> properties1 = new ArrayList<PropertyData>();
properties1.add(propertyData11);
properties1.add(propertyData12);
cache.addChildProperties(nodeData1, properties1);
cache.commitTransaction();
}
catch (Exception e)
{
cache.rollbackTransaction();
throw e;
}
// props, prev stuff
assertEquals("Cached child property " + propertyData11.getQPath().getAsString() + " is not equals", cache.get(
nodeUuid1, propertyPath11.getEntries()[propertyPath11.getEntries().length - 1], ItemType.PROPERTY),
propertyData11);
assertEquals("Cached child property " + propertyData11.getIdentifier() + " is not equals", cache
.get(propertyUuid11), propertyData11);
assertEquals("Cached child property " + propertyData12.getQPath().getAsString() + " is not equals", cache.get(
nodeUuid1, propertyPath12.getEntries()[propertyPath12.getEntries().length - 1], ItemType.PROPERTY),
propertyData12);
assertEquals("Cached child property " + propertyData12.getIdentifier() + " is not equals", cache
.get(propertyUuid12), propertyData12);
assertEquals("Cached child property " + propertyData21.getQPath().getAsString() + " is not equals", cache.get(
nodeUuid2, propertyPath21.getEntries()[propertyPath21.getEntries().length - 1], ItemType.PROPERTY),
propertyData21);
assertEquals("Cached child property " + propertyData21.getIdentifier() + " is not equals", cache
.get(propertyUuid21), propertyData21);
assertEquals("Cached child property " + propertyData22.getQPath().getAsString() + " is not equals", cache.get(
nodeUuid2, propertyPath22.getEntries()[propertyPath22.getEntries().length - 1], ItemType.PROPERTY),
propertyData22);
assertEquals("Cached child property " + propertyData22.getIdentifier() + " is not equals", cache
.get(propertyUuid22), propertyData22);
assertTrue("Cached child property " + propertyData11.getQPath().getAsString() + " is not in the childs list",
cache.getChildProperties(nodeData1).contains(propertyData11));
assertTrue("Cached child property " + propertyData12.getQPath().getAsString() + " is not in the childs list",
cache.getChildProperties(nodeData1).contains(propertyData12));
assertTrue("Cached child property " + propertyData21.getQPath().getAsString() + " is not in the childs list",
cache.getChildProperties(nodeData2).contains(propertyData21));
assertTrue("Cached child property " + propertyData22.getQPath().getAsString() + " is not in the childs list",
cache.getChildProperties(nodeData2).contains(propertyData22));
assertEquals("Cached child properties count is wrong", cache.getChildProperties(nodeData1).size(), 2);
assertEquals("Cached child properties count is wrong", cache.getChildProperties(nodeData2).size(), 2);
// remove
cache.beginTransaction();
cache.remove(propertyData12);
cache.commitTransaction();
// check
assertEquals("Cached child property " + propertyData11.getQPath().getAsString() + " is not equals", cache.get(
nodeUuid1, propertyPath11.getEntries()[propertyPath11.getEntries().length - 1], ItemType.PROPERTY),
propertyData11);
assertEquals("Cached child property " + propertyData11.getIdentifier() + " is not equals", cache
.get(propertyUuid11), propertyData11);
// here
assertNull("Child property " + propertyData12.getQPath().getAsString() + " is not in the cache", cache.get(
nodeUuid1, propertyPath12.getEntries()[propertyPath12.getEntries().length - 1], ItemType.PROPERTY));
assertNull("Child property " + propertyData12.getQPath().getAsString() + " is not in the cache", cache
.get(propertyUuid12));
assertEquals("Cached child property " + propertyData21.getQPath().getAsString() + " is not equals", cache.get(
nodeUuid2, propertyPath21.getEntries()[propertyPath21.getEntries().length - 1], ItemType.PROPERTY),
propertyData21);
assertEquals("Cached child property " + propertyData21.getIdentifier() + " is not equals", cache
.get(propertyUuid21), propertyData21);
assertEquals("Cached child property " + propertyData22.getQPath().getAsString() + " is not equals", cache.get(
nodeUuid2, propertyPath22.getEntries()[propertyPath22.getEntries().length - 1], ItemType.PROPERTY),
propertyData22);
assertEquals("Cached child property " + propertyData22.getIdentifier() + " is not equals", cache
.get(propertyUuid22), propertyData22);
assertTrue("Cached child property " + propertyData11.getQPath().getAsString() + " is not in the childs list",
cache.getChildProperties(nodeData1).contains(propertyData11));
// here
assertFalse("Cached child property " + propertyData12.getQPath().getAsString() + " is not in the childs list",
cache.getChildProperties(nodeData1).contains(propertyData12));
assertTrue("Cached child property " + propertyData21.getQPath().getAsString() + " is not in the childs list",
cache.getChildProperties(nodeData2).contains(propertyData21));
assertTrue("Cached child property " + propertyData22.getQPath().getAsString() + " is not in the childs list",
cache.getChildProperties(nodeData2).contains(propertyData22));
// and here
assertEquals("Cached child properties count is wrong", cache.getChildProperties(nodeData1).size(), 1);
assertEquals("Cached child properties count is wrong", cache.getChildProperties(nodeData2).size(), 2);
}
public void testRemoveChildNodes() throws Exception
{
initNodesData();
initDataAsPersisted();
try
{
cache.beginTransaction();
// the case here
cache.put(nodeData3);
List<NodeData> n3childNodes = new ArrayList<NodeData>();
n3childNodes.add(nodeData31);
n3childNodes.add(nodeData32);
cache.addChildNodes(nodeData3, n3childNodes);
// any stuff
cache.put(nodeData1);
cache.put(nodeData2);
cache.put(propertyData12);
List<PropertyData> properties2 = new ArrayList<PropertyData>();
properties2.add(propertyData21);
properties2.add(propertyData22);
cache.addChildProperties(nodeData2, properties2);
List<PropertyData> properties1 = new ArrayList<PropertyData>();
properties1.add(propertyData11);
properties1.add(propertyData12);
cache.addChildProperties(nodeData1, properties1);
// remove
cache.remove(nodeData3); // remove node3 and its childs (31, 32)
cache.commitTransaction();
}
catch (Exception e)
{
cache.rollbackTransaction();
throw e;
}
// check
assertNull("Node " + nodeData3.getQPath().getAsString() + " in the cache", cache.get(nodeUuid3));
assertNull("Node " + nodeData3.getQPath().getAsString() + " childs in the cache", cache.getChildNodes(nodeData3));
}
public void testRemoveChildProperties() throws Exception
{
initNodesData();
initDataAsPersisted();
// the case here
List<PropertyData> properties2 = new ArrayList<PropertyData>();
properties2.add(propertyData21);
properties2.add(propertyData22);
try
{
cache.beginTransaction();
cache.addChildProperties(nodeData2, properties2);
// any stuff
cache.put(nodeData3);
cache.put(nodeData31);
List<PropertyData> properties1 = new ArrayList<PropertyData>();
properties1.add(propertyData11);
properties1.add(propertyData12);
cache.addChildProperties(nodeData1, properties1);
// remove
cache.remove(nodeData2); // remove node2 and its childs (21, 22)
cache.commitTransaction();
}
catch (Exception e)
{
cache.rollbackTransaction();
throw e;
}
// check
assertNull("Node " + nodeData2.getQPath().getAsString() + " in the cache", cache.get(nodeUuid2));
assertNull("Node " + nodeData2.getQPath().getAsString() + " properties in the cache", cache
.getChildProperties(nodeData2));
}
public void testRemoveChilds() throws Exception
{
initNodesData();
initDataAsPersisted();
// the case here
List<PropertyData> properties2 = new ArrayList<PropertyData>();
properties2.add(propertyData21);
properties2.add(propertyData22);
try
{
cache.addChildProperties(nodeData2, properties2);
List<NodeData> nodes2 = new ArrayList<NodeData>();
nodes2.add(nodeData21);
nodes2.add(nodeData22);
cache.addChildNodes(nodeData2, nodes2);
// any stuff
cache.put(nodeData3);
cache.put(nodeData31);
cache.put(nodeData32);
List<PropertyData> properties1 = new ArrayList<PropertyData>();
properties1.add(propertyData11);
properties1.add(propertyData12);
cache.addChildProperties(nodeData1, properties1);
// remove
PlainChangesLog chlog = new PlainChangesLogImpl();
chlog.add(ItemState.createDeletedState(propertyData21));
chlog.add(ItemState.createDeletedState(propertyData22));
chlog.add(ItemState.createDeletedState(nodeData21));
chlog.add(ItemState.createDeletedState(nodeData22));
chlog.add(ItemState.createDeletedState(nodeData2));
// cache.remove(nodeData2); // remove node2 and its childs and properties (21, 22)
cache.onSaveItems(chlog);
}
catch (Exception e)
{
cache.rollbackTransaction();
throw e;
}
// check
assertNull("Node " + nodeData2.getQPath().getAsString() + " in the cache", cache.get(nodeUuid2));
// check if childs areremoved as they are cached in lists of childs too
assertNull("Node " + nodeData2.getQPath().getAsString() + " child nodes in the cache", cache
.getChildNodes(nodeData2));
assertNull("Node " + nodeData21.getQPath().getAsString() + " in the cache", cache.get(nodeUuid21));
assertNull("Node " + nodeData22.getQPath().getAsString() + " in the cache", cache.get(nodeUuid22));
assertNull("Node " + nodeData2.getQPath().getAsString() + " properties in the cache", cache
.getChildProperties(nodeData2));
assertNull("Property " + propertyData21.getQPath().getAsString() + " in the cache", cache.get(propertyUuid21));
assertNull("Property " + propertyData22.getQPath().getAsString() + " in the cache", cache.get(propertyUuid22));
}
}