blob: f67303c36bfd9d8ef429fee1a2f0ef551aa53ee2 [file] [log] [blame]
/***************************************************************************
* Copyright (c) 2004 - 2008 Eike Stepper, Germany.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Simon McDuff - initial API and implementation
* Eike Stepper - maintenance
**************************************************************************/
package org.eclipse.emf.cdo.tests;
import org.eclipse.emf.cdo.CDOAudit;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.CDOSession;
import org.eclipse.emf.cdo.CDOState;
import org.eclipse.emf.cdo.CDOTransaction;
import org.eclipse.emf.cdo.CDOView;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.eresource.CDOResourceFolder;
import org.eclipse.emf.cdo.eresource.CDOResourceNode;
import org.eclipse.emf.cdo.internal.common.revision.CDORevisionResolverImpl;
import org.eclipse.emf.cdo.tests.model1.Order;
import org.eclipse.emf.cdo.tests.model1.Product1;
import org.eclipse.emf.cdo.tests.model1.VAT;
import org.eclipse.emf.cdo.util.CDOURIUtil;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.net4j.util.transaction.TransactionException;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert;
/**
* @author Eike Stepper
*/
public class ResourceTest extends AbstractCDOTest
{
public void testAttachDetachResourceDepth1_Delete() throws Exception
{
attachDetachResourceDepth1(1, true, 0);
}
public void testAttachDetachResourceDepth1_Remove() throws Exception
{
attachDetachResourceDepth1(1, false, 0);
}
public void testAttachDetachResourceDepth2_Delete() throws Exception
{
attachDetachResourceDepth1(2, true, 1);
}
public void testAttachDetachResourceDepth2_Remove() throws Exception
{
attachDetachResourceDepth1(2, false, 1);
}
public void testAttachDetachResourceDepth3_Delete() throws Exception
{
attachDetachResourceDepth1(3, true, 2);
}
public void testAttachDetachResourceDepth3_Remove() throws Exception
{
attachDetachResourceDepth1(3, false, 2);
}
public void testAttachDetachResourceDepth3_Remove_Tree() throws Exception
{
attachDetachResourceDepth1(3, false, 1);
}
/**
* Create resource with the following pattern /test1/test2/test3 for a depth 3. <br>
* After it will remove the resource with the following rule:<br>
* if calldelete is true <code>resource.delete(null)</code> <br>
* if calldelete is false it will use the depthtoRemove to call <code>object.remove(resource)</code><br>
* deptToRemove = /0/1/2/...<br>
* It will remove it from parent folder (depthtoRemove - 1);
*/
private void attachDetachResourceDepth1(int depth, boolean callDelete, int depthtoRemove) throws Exception
{
CDOSession session = openModel1Session();
ResourceSet resourceSet = new ResourceSetImpl();
CDOTransaction transaction = session.openTransaction(resourceSet);
CDOResource rootResource = transaction.getRootResource();
String path = "";
List<String> names = new ArrayList<String>();
for (int i = 0; i < depth; i++)
{
String name = "test" + String.valueOf(i + 1);
names.add(name);
path += "/" + name;
}
final URI uri = URI.createURI("cdo:" + path);
CDOResource resource = (CDOResource)resourceSet.createResource(uri);
assertEquals(names.get(names.size() - 1), resource.getName());
transaction.commit();
List<CDOResourceNode> nodesList = new ArrayList<CDOResourceNode>();
CDOResource resourceByLookup = null;
CDOResourceNode next = null;
for (int i = 0; i < depth; i++)
{
if (i == 0)
{
next = (CDOResourceNode)rootResource.getContents().get(0);
}
else
{
next = ((CDOResourceFolder)next).getNodes().get(0);
}
nodesList.add(next);
}
resourceByLookup = (CDOResource)next;
assertSame(resource, resourceByLookup);
assertClean(resourceByLookup, transaction);
assertEquals(true, resourceSet.getResources().contains(resourceByLookup));
CDOObject cdoParent = null;
CDOObject cdoRootResource = CDOUtil.getCDOObject(rootResource);
for (int i = 0; i < depth; i++)
{
CDOResourceNode resourceNode = nodesList.get(i);
CDOObject cdoResourceNode = CDOUtil.getCDOObject(resourceNode);
if (i == 0)
{
assertEquals(cdoRootResource.cdoID(), cdoResourceNode.cdoRevision().getData().getResourceID());
assertEquals(CDOID.NULL, cdoResourceNode.cdoRevision().getData().getContainerID());
}
else
{
assertEquals(CDOID.NULL, cdoResourceNode.cdoRevision().getData().getResourceID());
assertEquals(cdoParent.cdoID(), cdoResourceNode.cdoRevision().getData().getContainerID());
}
cdoParent = cdoResourceNode;
}
if (callDelete)
{
resource.delete(null);
depthtoRemove = depth;
}
else
{
CDOResourceNode node = nodesList.get(depthtoRemove);
if (depthtoRemove == 0)
{
rootResource.getContents().remove(node);
}
else
{
CDOResourceFolder parentFolder = (CDOResourceFolder)nodesList.get(depthtoRemove - 1);
assertEquals(parentFolder, node.getFolder());
parentFolder.getNodes().remove(node);
}
}
for (int i = depthtoRemove; i < depth; i++)
{
CDOResourceNode transientNode = nodesList.get(i);
assertTransient(transientNode);
if (transientNode instanceof CDOResource)
{
assertEquals(false, resourceSet.getResources().contains(transientNode));
}
assertEquals(null, transientNode.eResource());
if (i == depthtoRemove)
{
assertEquals(null, transientNode.eContainer());
}
else
{
assertEquals(cdoParent, transientNode.eContainer());
}
cdoParent = transientNode;
}
transaction.commit();
}
public void testCreateResource_FromResourceSet() throws Exception
{
CDOSession session = openModel1Session();
ResourceSet resourceSet = new ResourceSetImpl();
CDOTransaction transaction = session.openTransaction(resourceSet);
final URI uri = URI.createURI("cdo:/test1");
CDOResource resource = (CDOResource)resourceSet.createResource(uri);
assertActive(resource);
assertNew(resource, transaction);
assertEquals(transaction.getResourceSet(), resource.getResourceSet());
assertEquals(CDOURIUtil.createResourceURI(session, "test1"), resource.getURI());
assertEquals("test1", resource.getName());
assertEquals(null, resource.getFolder());
transaction.getRootResource().getContents().contains(resource);
transaction.commit();
CDOObject cdoResource = CDOUtil.getCDOObject(resource);
CDOObject cdoRootResource = CDOUtil.getCDOObject(transaction.getRootResource());
assertClean(cdoResource, transaction);
assertClean(cdoRootResource, transaction);
assertEquals(CDOID.NULL, cdoResource.cdoRevision().getData().getContainerID());
assertEquals(cdoRootResource.cdoID(), cdoResource.cdoRevision().getData().getResourceID());
assertEquals(CDOID.NULL, cdoRootResource.cdoRevision().getData().getResourceID());
assertEquals(true, transaction.getResourceSet().getResources().contains(resource));
assertEquals(true, transaction.getResourceSet().getResources().contains(transaction.getRootResource()));
transaction.getRootResource().getContents().remove(resource);
assertEquals(false, transaction.getResourceSet().getResources().contains(resource));
assertEquals(true, transaction.getResourceSet().getResources().contains(transaction.getRootResource()));
}
public void testCreateNestedResource_FromResourceSet() throws Exception
{
CDOSession session = openModel1Session();
ResourceSet resourceSet = new ResourceSetImpl();
CDOTransaction transaction = session.openTransaction(resourceSet);
final URI uri = URI.createURI("cdo:/folder/test1");
CDOResource resource = (CDOResource)resourceSet.createResource(uri);
assertActive(resource);
assertNew(resource, transaction);
assertEquals(transaction.getResourceSet(), resource.getResourceSet());
assertEquals(CDOURIUtil.createResourceURI(session, "folder/test1"), resource.getURI());
assertEquals("test1", resource.getName());
CDOResourceFolder folder = resource.getFolder();
assertNotNull(folder);
assertEquals("folder", folder.getName());
assertEquals(null, folder.getFolder());
}
public void testCreateResource_FromTransaction() throws Exception
{
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
// Test if Resource is well-formed after CDOResourceFactoryImpl.
// Adapter will be called right after and could be used!
transaction.getResourceSet().eAdapters().add(new TestAdapter());
CDOResource resource = transaction.createResource("/test1");
assertActive(resource);
CDOResource resourceCopy = transaction.getOrCreateResource("/test1");
assertEquals(resource, resourceCopy);
assertNew(resource, transaction);
assertEquals(CDOURIUtil.createResourceURI(session, "test1"), resource.getURI());
assertEquals(transaction.getResourceSet(), resource.getResourceSet());
}
public void testCreateResource_WithDeepPath() throws Exception
{
{
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
transaction.createResource("/org/eclipse/net4j/core");
transaction.commit();
session.close();
}
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource("/org/eclipse/net4j/core");
assertEquals(CDOURIUtil.createResourceURI(session, "/org/eclipse/net4j/core"), resource.getURI());
assertEquals(transaction.getResourceSet(), resource.getResourceSet());
session.close();
}
public void testRemoveResourceWithCloseView() throws Exception
{
{
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
ResourceSet rset = transaction.getResourceSet();
CDOResource resource = transaction.createResource("/test1");
assertActive(resource);
transaction.commit();
Assert.assertEquals(2, rset.getResources().size());
Assert.assertEquals(1, CDOUtil.getViewSet(rset).getViews().length);
transaction.close();
Assert.assertEquals(0, CDOUtil.getViewSet(rset).getViews().length);
Assert.assertEquals(0, rset.getResources().size());
session.close();
}
{
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = (CDOResource)transaction.getResourceSet().getResource(
CDOURIUtil.createResourceURI(transaction, "/test1"), true);
assertNotNull(resource);
assertEquals(transaction.getResourceSet(), resource.getResourceSet());
assertEquals(1, transaction.getResourceSet().getResources().size());
assertEquals(CDOState.PROXY, resource.cdoState());
assertEquals(transaction, resource.cdoView());
assertNull(resource.cdoRevision());
}
}
public void testAttachManyResources() throws Exception
{
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
CDOResource resource1 = transaction.createResource("/my/resource1");
CDOResource resource2 = transaction.createResource("/my/resource2");
CDOResource resource3 = transaction.createResource("/my/resource3");
List<Resource> tobeRemoved = new ArrayList<Resource>();
tobeRemoved.add(resource1);
tobeRemoved.add(resource3);
assertEquals(4, transaction.getResourceSet().getResources().size());
transaction.getResourceSet().getResources().removeAll(tobeRemoved);
assertEquals(2, transaction.getResourceSet().getResources().size());
assertEquals(null, transaction.getResourceSet().getResource(resource1.getURI(), false));
assertEquals(resource2, transaction.getResourceSet().getResource(resource2.getURI(), false));
assertEquals(null, transaction.getResourceSet().getResource(resource3.getURI(), false));
transaction.getResourceSet().getResources().addAll(tobeRemoved);
assertEquals(4, transaction.getResourceSet().getResources().size());
assertEquals(resource1, transaction.getResourceSet().getResource(resource1.getURI(), false));
assertEquals(resource2, transaction.getResourceSet().getResource(resource2.getURI(), false));
assertEquals(resource3, transaction.getResourceSet().getResource(resource3.getURI(), false));
transaction.commit();
session.close();
}
public void testDetachManyResources() throws Exception
{
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
CDOResource resource1 = transaction.createResource("/my/resource1");
CDOResource resource2 = transaction.createResource("/my/resource2");
CDOResource resource3 = transaction.createResource("/my/resource3");
List<Resource> tobeRemoved = new ArrayList<Resource>();
tobeRemoved.add(resource1);
tobeRemoved.add(resource3);
assertEquals(4, transaction.getResourceSet().getResources().size());
transaction.getResourceSet().getResources().removeAll(tobeRemoved);
assertEquals(2, transaction.getResourceSet().getResources().size());
assertEquals(null, transaction.getResourceSet().getResource(resource1.getURI(), false));
assertEquals(resource2, transaction.getResourceSet().getResource(resource2.getURI(), false));
assertEquals(null, transaction.getResourceSet().getResource(resource3.getURI(), false));
transaction.commit();
session.close();
}
public void testCommitMultipleResources()
{
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
transaction.createResource("/level1/level2-A/level3");
transaction.createResource("/level1/level2-B/level3");
transaction.commit();
session.close();
}
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource1 = transaction.getResource("/level1/level2-A/level3");
CDOResource resource2 = transaction.getResource("/level1/level2-B/level3");
assertEquals("/level1/level2-A/level3", resource1.getPath());
assertEquals("/level1/level2-B/level3", resource2.getPath());
session.close();
}
public void testLoadMultipleResources()
{
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
transaction.createResource("/level1/level2-A/level3");
transaction.createResource("/level1/level2-B/level3");
transaction.commit();
session.close();
}
((CDORevisionResolverImpl)getRepository().getRevisionManager()).clearCache();
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource1 = transaction.getResource("/level1/level2-A/level3");
CDOResource resource2 = transaction.getResource("/level1/level2-B/level3");
assertEquals("/level1/level2-A/level3", resource1.getPath());
assertEquals("/level1/level2-B/level3", resource2.getPath());
session.close();
}
public void testDuplicatePath() throws Exception
{
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
transaction.createResource("/my/resource");
transaction.commit();
transaction.createResource("/my/resource");
try
{
transaction.commit();
fail("TransactionException expected");
}
catch (TransactionException expected)
{
// Success
}
finally
{
session.close();
}
}
public void testDuplicatePathAfterDetach() throws Exception
{
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource("/my/resource");
transaction.commit();
resource.delete(null);
transaction.commit();
transaction.createResource("/my/resource");
transaction.commit();
session.close();
}
public void testChangePathFromDepth0ToDepth0() throws Exception
{
changePath(0, 0);
}
public void testChangePathFromDepth0ToDepth1() throws Exception
{
changePath(0, 1);
}
public void testChangePathFromDepth0ToDepth2() throws Exception
{
changePath(0, 2);
}
public void testChangePathFromDepth0ToDepth3() throws Exception
{
changePath(0, 3);
}
public void testChangePathFromDepth3ToDepth3() throws Exception
{
changePath(3, 3);
}
public void testChangePathFromDepth3ToDepth2() throws Exception
{
changePath(3, 2);
}
public void testChangePathFromDepth3ToDepth1() throws Exception
{
changePath(3, 1);
}
public void testChangePathFromDepth3ToDepth0() throws Exception
{
changePath(3, 0);
}
private void changePath(int depthFrom, int depthTo) throws Exception
{
String prefixA = "testA";
String prefixB = "testB";
String oldPath = createPath(prefixA, depthFrom, "test");
String newPath = createPath(prefixB, depthTo, "test2");
{
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(oldPath);
Order order = getModel1Factory().createOrder();
resource.getContents().add(order);
String path = CDOURIUtil.extractResourcePath(resource.getURI());
assertEquals(oldPath, path);
assertEquals(depthFrom, CDOURIUtil.analyzePath(resource.getURI()).size() - 1);
transaction.commit();
CDOID idBeforeChangePath = CDOUtil.getCDOObject(resource).cdoID();
CDOID idBeforeChangePathOrder = CDOUtil.getCDOObject(order).cdoID();
msg("New path");
resource.setPath(newPath);
path = CDOURIUtil.extractResourcePath(resource.getURI());
assertEquals(depthTo, CDOURIUtil.analyzePath(resource.getURI()).size() - 1);
assertEquals(newPath, path);
transaction.commit();
CDOID idAfterChangePath = CDOUtil.getCDOObject(resource).cdoID();
assertEquals(idBeforeChangePath, idAfterChangePath);
CDOID idAfterChangePathOrder = CDOUtil.getCDOObject(order).cdoID();
assertEquals(idBeforeChangePathOrder, idAfterChangePathOrder);
Resource resourceRenamed = transaction.getResourceSet().getResource(
CDOURIUtil.createResourceURI(session, newPath), false);
assertEquals(resource, resourceRenamed);
assertClean(resource, transaction);
assertClean(order, transaction);
session.close();
}
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
try
{
transaction.getResourceSet().getResource(CDOURIUtil.createResourceURI(session, oldPath), true);
fail("Doesn't exist");
}
catch (Exception ex)
{
}
Resource resource = transaction.getResourceSet().getResource(CDOURIUtil.createResourceURI(session, newPath), true);
assertNotNull(resource);
}
private String createPath(String namePrefix, int depth, String name)
{
String path = "";
for (int i = 0; i < depth; i++)
{
String localName = namePrefix + String.valueOf(i + 1);
path += "/" + localName;
}
path += "/" + name;
return path;
}
public void testChangePath() throws Exception
{
long commitTime1;
long commitTime2;
{
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource("/my/resource");
transaction.commit();
commitTime1 = transaction.getLastCommitTime();
resource.setPath("/renamed");
transaction.commit();
commitTime2 = transaction.getLastCommitTime();
session.close();
}
CDOSession session = openModel1Session();
CDOAudit audit1 = session.openAudit(commitTime1);
assertEquals(true, audit1.hasResource("/my/resource"));
assertEquals(false, audit1.hasResource("/renamed"));
CDOAudit audit2 = session.openAudit(commitTime2);
assertEquals(false, audit2.hasResource("/my/resource"));
assertEquals(true, audit2.hasResource("/renamed"));
session.close();
}
public void testChangeURI() throws Exception
{
long commitTime1;
long commitTime2;
{
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource("/my/resource");
transaction.commit();
commitTime1 = transaction.getLastCommitTime();
URI uri = URI.createURI("cdo://repo1/renamed");
assertEquals(CDOURIUtil.createResourceURI(session, "/renamed"), uri);
resource.setURI(uri);
transaction.commit();
commitTime2 = transaction.getLastCommitTime();
session.close();
}
CDOSession session = openModel1Session();
CDOAudit audit1 = session.openAudit(commitTime1);
assertEquals(true, audit1.hasResource("/my/resource"));
assertEquals(false, audit1.hasResource("/renamed"));
CDOAudit audit2 = session.openAudit(commitTime2);
assertEquals(false, audit2.hasResource("/my/resource"));
assertEquals(true, audit2.hasResource("/renamed"));
session.close();
}
public void testPathNotNull() throws Exception
{
{
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource("/res1");
assertEquals("/res1", resource.getPath());
assertEquals(CDOURIUtil.createResourceURI(session, "/res1"), resource.getURI());
transaction.commit();
assertEquals("/res1", resource.getPath());
assertEquals(CDOURIUtil.createResourceURI(session, "/res1"), resource.getURI());
session.close();
}
{
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource("/res1");
assertEquals("/res1", resource.getPath());
assertEquals(CDOURIUtil.createResourceURI(session, "/res1"), resource.getURI());
CDOResource resource2 = transaction.getOrCreateResource("/res2");
assertEquals("/res2", resource2.getPath());
assertEquals(CDOURIUtil.createResourceURI(session, "/res2"), resource2.getURI());
transaction.commit();
assertEquals("/res2", resource2.getPath());
assertEquals(CDOURIUtil.createResourceURI(session, "/res2"), resource2.getURI());
session.close();
}
{
CDOSession session = openModel1Session();
CDOView view = session.openView();
CDOResource resource2 = view.getResource("/res2");
assertEquals("/res2", resource2.getPath());
assertEquals(CDOURIUtil.createResourceURI(session, "/res2"), resource2.getURI());
session.close();
}
}
/**
* http://bugs.eclipse.org/208689
*/
public void testQueryResources() throws Exception
{
{
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
createResource(transaction, "/aresource");
createResource(transaction, "/aaresource");
createResource(transaction, "/abresource");
createResource(transaction, "/acresource");
createResource(transaction, "/adresource");
createResource(transaction, "/aeresource");
createResource(transaction, "/bresource");
createResource(transaction, "/baresource");
createResource(transaction, "/bbresource");
createResource(transaction, "/bcresource");
createResource(transaction, "/bdresource");
createResource(transaction, "/beresource");
createResource(transaction, "/bearesource");
createResource(transaction, "/bebresource");
createResource(transaction, "/cresource");
createResource(transaction, "/caresource");
createResource(transaction, "/caresource2");
createResource(transaction, "/caresource3");
createResource(transaction, "/cbresource");
createResource(transaction, "/ccresource");
createResource(transaction, "/cdresource");
createResource(transaction, "/ceresource");
transaction.commit();
session.close();
}
CDOSession session = openModel1Session();
CDOView view = session.openView();
queryResources(view, "a", 6);
queryResources(view, "b", 8);
queryResources(view, "c", 8);
queryResources(view, "be", 3);
queryResources(view, "ca", 3);
session.close();
}
/**
* http://bugs.eclipse.org/208689
*/
public void testQueryModifiedResources() throws Exception
{
{
CDOSession session = openModel1Session();
CDOTransaction transaction = session.openTransaction();
createResource(transaction, "/aresource");
createResource(transaction, "/aaresource");
createResource(transaction, "/abresource");
createResource(transaction, "/acresource");
createResource(transaction, "/adresource");
createResource(transaction, "/aeresource");
createResource(transaction, "/bresource");
createResource(transaction, "/baresource");
createResource(transaction, "/bbresource");
createResource(transaction, "/bcresource");
createResource(transaction, "/bdresource");
createResource(transaction, "/beresource");
createResource(transaction, "/bearesource");
createResource(transaction, "/bebresource");
createResource(transaction, "/cresource");
createResource(transaction, "/caresource");
createResource(transaction, "/caresource2");
createResource(transaction, "/caresource3");
createResource(transaction, "/cbresource");
createResource(transaction, "/ccresource");
createResource(transaction, "/cdresource");
createResource(transaction, "/ceresource");
transaction.commit();
modifyResource(transaction, "/aresource");
modifyResource(transaction, "/aaresource");
modifyResource(transaction, "/abresource");
modifyResource(transaction, "/acresource");
modifyResource(transaction, "/adresource");
modifyResource(transaction, "/aeresource");
modifyResource(transaction, "/bresource");
modifyResource(transaction, "/baresource");
modifyResource(transaction, "/bbresource");
modifyResource(transaction, "/bcresource");
modifyResource(transaction, "/bdresource");
modifyResource(transaction, "/beresource");
modifyResource(transaction, "/bearesource");
modifyResource(transaction, "/bebresource");
modifyResource(transaction, "/cresource");
modifyResource(transaction, "/caresource");
modifyResource(transaction, "/caresource2");
modifyResource(transaction, "/caresource3");
modifyResource(transaction, "/cbresource");
modifyResource(transaction, "/ccresource");
modifyResource(transaction, "/cdresource");
modifyResource(transaction, "/ceresource");
transaction.commit();
session.close();
}
CDOSession session = openModel1Session();
CDOView view = session.openView();
queryResources(view, "a", 6);
queryResources(view, "b", 8);
queryResources(view, "c", 8);
queryResources(view, "be", 3);
queryResources(view, "ca", 3);
session.close();
}
private CDOResource createResource(CDOTransaction transaction, String path)
{
Product1 p = getModel1Factory().createProduct1();
p.setName("test-" + path);
p.setVat(VAT.VAT0);
CDOResource resource = transaction.createResource(path);
resource.getContents().add(p);
return resource;
}
private CDOResource modifyResource(CDOTransaction transaction, String path)
{
Product1 p = getModel1Factory().createProduct1();
p.setName("test-" + path + "-modified");
p.setVat(VAT.VAT0);
CDOResource resource = transaction.getResource(path);
resource.getContents().add(p);
return resource;
}
private void queryResources(CDOView view, String pathPrefix, int expected)
{
msg("Path prefix: " + pathPrefix);
List<CDOResourceNode> nodes = view.queryResources(null, pathPrefix, false);
for (CDOResourceNode node : nodes)
{
msg("Result: " + node.getPath());
}
assertEquals(expected, nodes.size());
}
static class TestAdapter extends AdapterImpl
{
@Override
public void notifyChanged(Notification msg)
{
super.notifyChanged(msg);
if (msg.getNewValue() instanceof CDOResource)
{
((CDOResource)msg.getNewValue()).getPath();
}
}
@Override
public void setTarget(Notifier newTarget)
{
}
@Override
public boolean isAdapterForType(Object type)
{
return super.isAdapterForType(type);
}
};
}