/*
* Copyright 2006 University of Dundee. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
package ome.server.itests.query;
import java.util.HashSet;
import java.util.Set;
import ome.conditions.InternalException;
import ome.model.IObject;
import ome.model.containers.Project;
import ome.model.core.Image;
import ome.parameters.Filter;
import ome.parameters.Parameters;
import ome.server.itests.AbstractManagedContextTest;
import ome.services.query.CollectionCountQueryDefinition;
import ome.services.query.IObjectClassQuery;
import ome.services.query.PojosFindHierarchiesQueryDefinition;
import ome.services.query.PojosGetImagesQueryDefinition;
import ome.services.query.PojosLoadHierarchyQueryDefinition;
import ome.services.query.Query;
import ome.services.query.QueryFactory;
import ome.services.query.StringQuery;
import org.testng.annotations.Test;
@Test(groups = { "query" })
public class UniqueResultTest extends AbstractManagedContextTest {
// ~ 72
// =========================================================================
private static final String TICKET_72 = "ticket:72";
private static final String TICKET_83 = "ticket:83";
@Test(groups = { TICKET_72 })
public void test_queryUnique() throws Exception {
Project p = getProject();
Query<IObject> q1 = query(false);
try {
IObject o1 = iQuery.execute(q1);
fail("Should have thrown an exception.");
} catch (ClassCastException cce) {
// ok.
}
// This should work
Query<IObject> q2 = query(true);
IObject o2 = iQuery.execute(q2);
// And this should work.
IObject o3 = iQuery.findByQuery(
"select p from Project p where p.id = :id", new Parameters()
.addId(p.getId()).setFilter(new Filter().unique()));
}
@Test(groups = { TICKET_72 })
public void test_queryList() throws Exception {
Project p = getProject();
try {
iQuery.findAllByQuery("select p from Project p where p.id = :id",
new Parameters().addId(p.getId()).setFilter(
new Filter().unique()));
fail("Should have thrown class cast exception.");
} catch (InternalException ie) {
assertTrue(ie.getMessage().contains("ClassCastException"));
// ok.
}
}
Parameters p;
// ~ 83
// =========================================================================
@Test(groups = { TICKET_83 })
public void test_ContainerFindHierarchies_unique() throws Exception {
p = new Parameters().addIds(getNewProjects(1, TICKET_83)).addClass(
Project.class);
p.unique();
Query q = new PojosFindHierarchiesQueryDefinition(p);
iQuery.execute(q);
}
@Test(groups = { TICKET_83 })
public void test_ContainerFindHierarchies_list() throws Exception {
p = new Parameters().addIds(getNewProjects(2, TICKET_83)).addClass(
Project.class);
assertFalse(p.isUnique());
Query q = new PojosFindHierarchiesQueryDefinition(p);
iQuery.execute(q);
}
@Test(groups = { TICKET_83 })
public void test_ContainerGetImages_unique() throws Exception {
p = new Parameters().addIds(getNewProjects(1, TICKET_83)).addClass(
Project.class);
p.unique();
Query q = new PojosGetImagesQueryDefinition(p);
iQuery.execute(q);
}
@Test(groups = { TICKET_83 })
public void test_ContainerGetImages_list() throws Exception {
p = new Parameters().addIds(getNewProjects(2, TICKET_83)).addClass(
Project.class);
assertFalse(p.isUnique());
Query q = new PojosGetImagesQueryDefinition(p);
iQuery.execute(q);
}
@Test(groups = { TICKET_83 })
public void test_ContainerLoadHierarchies_unique() throws Exception {
p = new Parameters().addIds(getNewProjects(1, TICKET_83)).addClass(
Project.class);
p.unique();
Query q = new PojosLoadHierarchyQueryDefinition(p);
iQuery.execute(q);
}
@Test(groups = { TICKET_83 })
public void test_ContainerLoadHierarchies_list() throws Exception {
p = new Parameters().addIds(getNewProjects(2, TICKET_83)).addClass(
Project.class);
assertFalse(p.isUnique());
Query q = new PojosLoadHierarchyQueryDefinition(p);
iQuery.execute(q);
}
@Test(groups = { TICKET_83 })
public void test_CollectionCount_unique() throws Exception {
p = new Parameters().addIds(getNewProjects(1, TICKET_83)).addString(
"field", Project.DATASETLINKS);
p.unique();
Query q = new CollectionCountQueryDefinition(p);
iQuery.execute(q);
}
@Test(groups = { TICKET_83 })
public void test_CollectionCount_list() throws Exception {
p = new Parameters().addIds(getNewProjects(2, TICKET_83)).addString(
"field", Project.DATASETLINKS);
assertFalse(p.isUnique());
Query q = new CollectionCountQueryDefinition(p);
iQuery.execute(q);
}
@Test(groups = { TICKET_83 })
public void test_IObjectClassQuery_unique() throws Exception {
p = new Parameters().addClass(Project.class).addLong("id",
getNewProjects(1, TICKET_83).iterator().next());
p.unique();
Query q = new IObjectClassQuery(p);
iQuery.execute(q);
}
@Test(groups = { TICKET_83 })
public void test_IObjectClassQuery_list() throws Exception {
p = new Parameters().addClass(Project.class);
assertFalse(p.isUnique());
Query q = new IObjectClassQuery(p);
iQuery.execute(q);
}
// Removed PojosFindAnnotationsQueryDefinition methods
@Test(groups = { TICKET_83 })
public void test_StringQuery_unique() throws Exception {
p = new Parameters().addString(StringQuery.STRING,
"select p from Project p where p.id = :" + Parameters.ID)
.addId(getNewImages(1, TICKET_83).iterator().next());
p.unique();
Query q = new StringQuery(p);
iQuery.execute(q);
}
@Test(groups = { TICKET_83 })
public void test_StringQuery_list() throws Exception {
p = new Parameters().addString(
StringQuery.STRING,
"select p from Project p where p.id in (:" + Parameters.IDS
+ ")").addIds(getNewImages(2, TICKET_83));
assertFalse(p.isUnique());
Query q = new StringQuery(p);
iQuery.execute(q);
}
// ~ Private helpers
// =========================================================================
private Project getProject() {
Project p = iQuery.findAll(Project.class, new Filter().page(0, 1)).get(
0);
return p;
}
private Set<Long> getNewProjects(int howMany, String name) {
Set<Long> results = new HashSet<Long>();
for (int i = 0; i < howMany; i++) {
Project prj = new Project();
prj.setName(name);
results.add(iUpdate.saveAndReturnObject(prj).getId());
}
return results;
}
private Set<Long> getNewImages(int howMany, String name) {
Set<Long> results = new HashSet<Long>();
for (int i = 0; i < howMany; i++) {
Image img = new Image();
img.setName(name);
results.add(iUpdate.saveAndReturnObject(img).getId());
}
return results;
}
private QueryFactory factory() {
return (QueryFactory) applicationContext.getBean("queryFactory");
}
private Query query(boolean unique) {
Filter f = new Filter();
if (unique) {
f.unique();
}
Query q = factory().lookup("select p from Project p where p.id = :id",
new Parameters().addId(getProject().getId()).setFilter(f));
return q;
}
}