MyWorkspaceStorageConnection con = new MyWorkspaceStorageConnection();
WorkspaceDataContainer wdc = new MyWorkspaceDataContainer(con);
WorkspaceContainerFacade wsc = repository.getWorkspaceContainer("ws");
WorkspaceEntry wconf = (WorkspaceEntry)wsc.getComponent(WorkspaceEntry.class);
CacheableWorkspaceDataManager cwdmNode1 =
new CacheableWorkspaceDataManager(wconf, wdc, cache1 = getCacheImpl(), new SystemDataContainerHolder(wdc));
CacheableWorkspaceDataManager cwdmNode2 =
new CacheableWorkspaceDataManager(wconf, wdc, cache2 = getCacheImpl(), new SystemDataContainerHolder(wdc));
NodeData parentNode = new PersistedNodeData("parent-id", QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(null, "parent-node")), Constants.ROOT_UUID, 1, 0,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null);
// Test getChildNodesData
Action readAction = new Action(cwdmNode2)
{
public void execute(NodeData parentNode) throws Exception
{
cwdm.getChildNodesData(parentNode);
}
};
Action writeAction = new Action(cwdmNode1)
{
public void execute(NodeData parentNode) throws Exception
{
PlainChangesLog chlog = new PlainChangesLogImpl();
cwdm.getChildNodesData(parentNode);
chlog.add(ItemState.createAddedState(new PersistedNodeData("id-node" + parentNode.getIdentifier(), QPath.makeChildPath(parentNode.getQPath(), new InternalQName(null, "node")), parentNode.getIdentifier(), 1, 0,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null)));
cwdm.save(new TransactionChangesLog(chlog));
}
};
executeConcurrentReadNWrite(con, readAction, writeAction, Mode.READ_FIRST, parentNode);
assertNotNull(cwdmNode1.getChildNodesData(parentNode));
assertEquals(2, cwdmNode1.getChildNodesData(parentNode).size());
assertNotNull(cwdmNode2.getChildNodesData(parentNode));
assertEquals(2, cwdmNode2.getChildNodesData(parentNode).size());
parentNode = new PersistedNodeData("parent-id2", QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(null, "parent-node2")), Constants.ROOT_UUID, 1, 0,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null);
executeConcurrentReadNWrite(con, readAction, writeAction, Mode.WRITE_FIRST, parentNode);
assertNotNull(cwdmNode1.getChildNodesData(parentNode));
assertEquals(2, cwdmNode1.getChildNodesData(parentNode).size());
assertNotNull(cwdmNode2.getChildNodesData(parentNode));
assertEquals(2, cwdmNode2.getChildNodesData(parentNode).size());
// Test getChildPropertiesData
readAction = new Action(cwdmNode2)
{
public void execute(NodeData parentNode) throws Exception
{
cwdm.getChildPropertiesData(parentNode);
}
};
writeAction = new Action(cwdmNode1)
{
public void execute(NodeData parentNode) throws Exception
{
PlainChangesLog chlog = new PlainChangesLogImpl();
cwdm.getChildPropertiesData(parentNode);
chlog.add(ItemState.createAddedState(new PersistedPropertyData("id-property"
+ parentNode.getIdentifier(), QPath.makeChildPath(parentNode.getQPath(), new InternalQName(null,
"property")), parentNode.getIdentifier(), 0, PropertyType.STRING, false, Arrays
.asList((ValueData)new ByteArrayPersistedValueData(0, "some data".getBytes("UTF-8"))),
new SimplePersistedSize(0))));
cwdm.save(new TransactionChangesLog(chlog));
}
};
parentNode = new PersistedNodeData("parent-id3", QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(null, "parent-node3")), Constants.ROOT_UUID, 1, 0,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null);
executeConcurrentReadNWrite(con, readAction, writeAction, Mode.READ_FIRST, parentNode);
assertNotNull(cwdmNode1.getChildPropertiesData(parentNode));
assertEquals(2, cwdmNode1.getChildPropertiesData(parentNode).size());
assertNotNull(cwdmNode2.getChildPropertiesData(parentNode));
assertEquals(2, cwdmNode2.getChildPropertiesData(parentNode).size());
parentNode = new PersistedNodeData("parent-id4", QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(null, "parent-node4")), Constants.ROOT_UUID, 1, 0,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null);
executeConcurrentReadNWrite(con, readAction, writeAction, Mode.WRITE_FIRST, parentNode);
assertNotNull(cwdmNode1.getChildPropertiesData(parentNode));
assertEquals(2, cwdmNode1.getChildPropertiesData(parentNode).size());
assertNotNull(cwdmNode2.getChildPropertiesData(parentNode));
assertEquals(2, cwdmNode2.getChildPropertiesData(parentNode).size());
// Test getReferencesData
readAction = new Action(cwdmNode2)
{
public void execute(NodeData parentNode) throws Exception
{
cwdm.getReferencesData(parentNode.getIdentifier(), false);
}
};
writeAction = new Action(cwdmNode1)
{
public void execute(NodeData parentNode) throws Exception
{
PlainChangesLog chlog = new PlainChangesLogImpl();
cwdm.getReferencesData(parentNode.getIdentifier(), false);
chlog.add(ItemState.createAddedState(new PersistedPropertyData("id-reference"
+ parentNode.getIdentifier(), QPath.makeChildPath(parentNode.getQPath(), new InternalQName(null,
"reference")), parentNode.getIdentifier(), 0, PropertyType.REFERENCE, false, Arrays
.asList((ValueData)new ByteArrayPersistedValueData(0, parentNode.getIdentifier().getBytes("UTF-8"))),
new SimplePersistedSize(0))));
cwdm.save(new TransactionChangesLog(chlog));
}
};
parentNode =
new PersistedNodeData("parent-id5", QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(null,
"parent-node5")), Constants.ROOT_UUID, 1, 0, Constants.NT_UNSTRUCTURED, new InternalQName[0], null);
executeConcurrentReadNWrite(con, readAction, writeAction, Mode.READ_FIRST, parentNode);
assertNotNull(cwdmNode1.getReferencesData(parentNode.getIdentifier(), false));
assertEquals(2, cwdmNode1.getReferencesData(parentNode.getIdentifier(), false).size());
assertNotNull(cwdmNode2.getReferencesData(parentNode.getIdentifier(), false));
assertEquals(2, cwdmNode2.getReferencesData(parentNode.getIdentifier(), false).size());
parentNode = new PersistedNodeData("parent-id6", QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(null, "parent-node6")), Constants.ROOT_UUID, 1, 0,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null);
executeConcurrentReadNWrite(con, readAction, writeAction, Mode.WRITE_FIRST, parentNode);
assertNotNull(cwdmNode1.getReferencesData(parentNode.getIdentifier(), false));
assertEquals(2, cwdmNode1.getReferencesData(parentNode.getIdentifier(), false).size());
assertNotNull(cwdmNode2.getReferencesData(parentNode.getIdentifier(), false));
assertEquals(2, cwdmNode2.getReferencesData(parentNode.getIdentifier(), false).size());
// Test getItemData by Id
readAction = new Action(cwdmNode2)
{
public void execute(NodeData parentNode) throws Exception
{
cwdm.getItemData(parentNode.getIdentifier());
}
};
writeAction = new Action(cwdmNode1)
{
public void execute(NodeData parentNode) throws Exception
{
PlainChangesLog chlog = new PlainChangesLogImpl();
cwdm.getItemData(parentNode.getIdentifier());
chlog.add(ItemState.createUpdatedState(new PersistedNodeData(parentNode.getIdentifier(), parentNode.getQPath(), Constants.ROOT_UUID, 2, 1,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null)));
cwdm.save(new TransactionChangesLog(chlog));
}
};
parentNode = new PersistedNodeData("parent-id7", QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(null, "parent-node7")), Constants.ROOT_UUID, 1, 0,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null);
executeConcurrentReadNWrite(con, readAction, writeAction, Mode.READ_FIRST, parentNode);
assertNotNull(cwdmNode1.getItemData(parentNode.getIdentifier()));
assertEquals(2, cwdmNode1.getItemData(parentNode.getIdentifier()).getPersistedVersion());
assertNotNull(cwdmNode2.getItemData(parentNode.getIdentifier()));
assertEquals(2, cwdmNode2.getItemData(parentNode.getIdentifier()).getPersistedVersion());
parentNode = new PersistedNodeData("parent-id8", QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(null, "parent-node8")), Constants.ROOT_UUID, 1, 0,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null);
executeConcurrentReadNWrite(con, readAction, writeAction, Mode.WRITE_FIRST, parentNode);
assertNotNull(cwdmNode1.getItemData(parentNode.getIdentifier()));
assertEquals(2, cwdmNode1.getItemData(parentNode.getIdentifier()).getPersistedVersion());
assertNotNull(cwdmNode2.getItemData(parentNode.getIdentifier()));
assertEquals(2, cwdmNode2.getItemData(parentNode.getIdentifier()).getPersistedVersion());
// Test getItemData by Path
final QPathEntry qpe = new QPathEntry(null, "my-property", 1);
readAction = new Action(cwdmNode2)
{
public void execute(NodeData parentNode) throws Exception
{
cwdm.getItemData(parentNode, qpe, ItemType.PROPERTY);
}
};
writeAction = new Action(cwdmNode1)
{
public void execute(NodeData parentNode) throws Exception
{
PlainChangesLog chlog = new PlainChangesLogImpl();
cwdm.getItemData(parentNode, qpe, ItemType.PROPERTY);
chlog.add(ItemState.createUpdatedState(new PersistedPropertyData("property-by-path"
+ parentNode.getIdentifier(), QPath.makeChildPath(parentNode.getQPath(), qpe), parentNode
.getIdentifier(), 2, PropertyType.STRING, false, Arrays
.asList((ValueData)new ByteArrayPersistedValueData(0, "some new data".getBytes("UTF-8"))),
new SimplePersistedSize(0))));
cwdm.save(new TransactionChangesLog(chlog));
}
};
parentNode =
new PersistedNodeData("parent-id9", QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(null,
"parent-node9")), Constants.ROOT_UUID, 1, 0,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null);
executeConcurrentReadNWrite(con, readAction, writeAction, Mode.READ_FIRST, parentNode);
assertNotNull(cwdmNode1.getItemData(parentNode, qpe, ItemType.PROPERTY));
assertEquals(2, cwdmNode1.getItemData(parentNode, qpe, ItemType.PROPERTY).getPersistedVersion());
assertNotNull(cwdmNode2.getItemData(parentNode, qpe, ItemType.PROPERTY));
assertEquals(2, cwdmNode2.getItemData(parentNode, qpe, ItemType.PROPERTY).getPersistedVersion());
parentNode = new PersistedNodeData("parent-id10", QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(null, "parent-node10")), Constants.ROOT_UUID, 1, 0,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null);
executeConcurrentReadNWrite(con, readAction, writeAction, Mode.WRITE_FIRST, parentNode);
assertNotNull(cwdmNode1.getItemData(parentNode, qpe, ItemType.PROPERTY));
assertEquals(2, cwdmNode1.getItemData(parentNode, qpe, ItemType.PROPERTY).getPersistedVersion());
assertNotNull(cwdmNode2.getItemData(parentNode, qpe, ItemType.PROPERTY));
assertEquals(2, cwdmNode2.getItemData(parentNode, qpe, ItemType.PROPERTY).getPersistedVersion());
// Test getChildNodesData by patterns
final List<QPathEntryFilter> nodePatterns =
Collections.singletonList((QPathEntryFilter)new PatternQPathEntryFilter(new PatternQPathEntry("",
"my-node")));
readAction = new Action(cwdmNode2)
{
public void execute(NodeData parentNode) throws Exception
{
cwdm.getChildNodesData(parentNode, nodePatterns);
}
};
writeAction = new Action(cwdmNode1)
{
public void execute(NodeData parentNode) throws Exception
{
PlainChangesLog chlog = new PlainChangesLogImpl();
cwdm.getChildNodesData(parentNode, nodePatterns);
chlog.add(ItemState.createAddedState(new PersistedNodeData("my-node2" + parentNode.getIdentifier(),
QPath.makeChildPath(parentNode.getQPath(), new QName("", "my-node"), 2), parentNode.getIdentifier(), 1, 2,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null)));
cwdm.save(new TransactionChangesLog(chlog));
}
};
con.setCanModify(true);
parentNode = new PersistedNodeData("parent-id11", QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(null, "parent-node11")), Constants.ROOT_UUID, 1, 0,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null);
executeConcurrentReadNWrite(con, readAction, writeAction, Mode.READ_FIRST, parentNode);
assertNotNull(cwdmNode1.getChildNodesData(parentNode, nodePatterns));
assertEquals(2, cwdmNode1.getChildNodesData(parentNode, nodePatterns).size());
assertNotNull(cwdmNode2.getChildNodesData(parentNode, nodePatterns));
assertEquals(2, cwdmNode2.getChildNodesData(parentNode, nodePatterns).size());
parentNode = new PersistedNodeData("parent-id12", QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(null, "parent-node12")), Constants.ROOT_UUID, 1, 0,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null);
executeConcurrentReadNWrite(con, readAction, writeAction, Mode.WRITE_FIRST, parentNode);
assertNotNull(cwdmNode1.getChildNodesData(parentNode, nodePatterns));
assertEquals(2, cwdmNode1.getChildNodesData(parentNode, nodePatterns).size());
assertNotNull(cwdmNode2.getChildNodesData(parentNode, nodePatterns));
assertEquals(2, cwdmNode2.getChildNodesData(parentNode, nodePatterns).size());
// Test getChildPropertiesData by patterns
final List<QPathEntryFilter> propPatterns =
Collections.singletonList((QPathEntryFilter)new PatternQPathEntryFilter(new PatternQPathEntry("",
"my-property*")));
readAction = new Action(cwdmNode2)
{
public void execute(NodeData parentNode) throws Exception
{
cwdm.getChildPropertiesData(parentNode, propPatterns);
}
};
writeAction = new Action(cwdmNode1)
{
public void execute(NodeData parentNode) throws Exception
{
PlainChangesLog chlog = new PlainChangesLogImpl();
cwdm.getChildPropertiesData(parentNode, propPatterns);
chlog.add(ItemState.createAddedState(new PersistedPropertyData("id-property"
+ parentNode.getIdentifier(), QPath.makeChildPath(parentNode.getQPath(), new InternalQName(null,
"my-property1")), parentNode.getIdentifier(), 0, PropertyType.STRING, false, Arrays
.asList((ValueData)new ByteArrayPersistedValueData(0, "some data".getBytes("UTF-8"))),
new SimplePersistedSize(0))));
cwdm.save(new TransactionChangesLog(chlog));
}
};
parentNode = new PersistedNodeData("parent-id13", QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(null, "parent-node13")), Constants.ROOT_UUID, 1, 0,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null);
executeConcurrentReadNWrite(con, readAction, writeAction, Mode.READ_FIRST, parentNode);
assertNotNull(cwdmNode1.getChildPropertiesData(parentNode, propPatterns));
assertEquals(2, cwdmNode1.getChildPropertiesData(parentNode, propPatterns).size());
assertNotNull(cwdmNode2.getChildPropertiesData(parentNode, propPatterns));
assertEquals(2, cwdmNode2.getChildPropertiesData(parentNode, propPatterns).size());
parentNode = new PersistedNodeData("parent-id14", QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(null, "parent-node14")), Constants.ROOT_UUID, 1, 0,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null);
executeConcurrentReadNWrite(con, readAction, writeAction, Mode.WRITE_FIRST, parentNode);
assertNotNull(cwdmNode1.getChildPropertiesData(parentNode, propPatterns));
assertEquals(2, cwdmNode1.getChildPropertiesData(parentNode, propPatterns).size());
assertNotNull(cwdmNode2.getChildPropertiesData(parentNode, propPatterns));
assertEquals(2, cwdmNode2.getChildPropertiesData(parentNode, propPatterns).size());
// testConsistency
con = new MyWorkspaceStorageConnection(true);
wdc = new MyWorkspaceDataContainer(con);
wsc = repository.getWorkspaceContainer("ws");
wconf = (WorkspaceEntry)wsc.getComponent(WorkspaceEntry.class);
cwdmNode1 =
new CacheableWorkspaceDataManager(wconf, wdc, cache1, new SystemDataContainerHolder(wdc));
cwdmNode2 =
new CacheableWorkspaceDataManager(wconf, wdc, cache2, new SystemDataContainerHolder(wdc));
parentNode = new PersistedNodeData("parent2-id", QPath.makeChildPath(Constants.ROOT_PATH, new InternalQName(null, "parent2-node")), Constants.ROOT_UUID, 1, 0,
Constants.NT_UNSTRUCTURED, new InternalQName[0], null);
// Test getChildNodesData
con.setParentNode(parentNode);
cwdmNode2.getChildNodesData(parentNode);