/* * ome.server.itests.PojosServiceTest * * Copyright 2006 University of Dundee. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.server.itests; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import javax.sql.DataSource; import ome.api.IContainer; import ome.conditions.ApiUsageException; import ome.model.ILink; import ome.model.IObject; import ome.model.annotations.CommentAnnotation; import ome.model.containers.Dataset; import ome.model.containers.Project; import ome.model.core.Image; import ome.model.core.Pixels; import ome.model.screen.Plate; import ome.model.screen.Screen; import ome.parameters.Parameters; import ome.testing.OMEData; import ome.testing.ObjectFactory; import ome.util.CBlock; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; /** * * @author Josh Moore, josh at glencoesoftware.com */ public class PojosServiceTest extends AbstractManagedContextTest { protected IContainer iContainer; protected OMEData data; @BeforeClass protected void setup() throws Exception { DataSource dataSource = (DataSource) applicationContext .getBean("dataSource"); data = new OMEData(); data.setDataSource(dataSource); iContainer = factory.getContainerService(); } @Test public void test_unannotated_Event_version() throws Exception { ILink link = createLinkedCommentAnnotation(); iUpdate.deleteObject(link); } @Test(groups = "ticket:318") public void testLoadHiearchiesHandlesNullRootNodeIds() throws Exception { Parameters po; try { iContainer.loadContainerHierarchy(Project.class, null, null); fail("Should throw ApiUsage."); } catch (ApiUsageException aue) { // ok } po = new Parameters().exp(0L); iContainer.loadContainerHierarchy(Project.class, null, po); po = new Parameters().grp(0L); iContainer.loadContainerHierarchy(Project.class, null, po); } @Test(groups = "ticket:657") public void testAnnotationsStillCounted() throws Exception { Dataset d = new Dataset(); d.setName("ticket:657"); CommentAnnotation da = new CommentAnnotation(); da.setTextValue("ticket:657"); da.setNs(""); d.linkAnnotation(da); Image i = new_Image(); i.setName("ticket:657"); i.linkDataset(d); CommentAnnotation ia = new CommentAnnotation(); ia.setTextValue("ticket:657"); ia.setNs(""); i.linkAnnotation(ia); d = iUpdate.saveAndReturnObject(d); Set<Image> list = iContainer.getImages(Dataset.class, Collections .singleton(d.getId()), null); i = list.iterator().next(); // d = i.linkedDatasetList().get(0); // No longer joined long self = this.iAdmin.getEventContext().getCurrentUserId(); // Aren't returned now by getImages // assertTrue(d.getAnnotationLinksCountPerOwner() != null); // assertTrue(d.getAnnotationLinksCountPerOwner().get(self).equals(1L)); assertTrue(i.getAnnotationLinksCountPerOwner() != null); assertTrue(i.getAnnotationLinksCountPerOwner().get(self).equals(1L)); } @Test(groups = "ticket:651") public void testIntervalInParameters() { // Previously this was throwing an OOM Long userID = loginNewUser().getId(); // create Dataset ds = new Dataset(); ds.setName("ticket:651"); Image im = new_Image(); im.setName("ticket:651"); Pixels pi = ObjectFactory.createPixelGraph(null); im.addPixels(pi); ds.linkImage(im); ds = iUpdate.saveAndReturnObject(ds); // test Timestamp startTime = getDate("before"); Timestamp endTime = getDate("after"); Parameters options = new Parameters(); options.exp(userID); options.startTime(startTime); options.endTime(endTime); iContainer.getImagesByOptions(options); iContainer.getImages(Dataset.class, Collections.singleton(ds.getId()), options); } @Test(groups = "ticket:1018") public void testIntervalPojoMethodsReturnsCounts() { // Previously this was throwing an OOM Long userID = loginNewUser().getId(); // create Dataset ds = new Dataset(); ds.setName("ticket:1018"); Image im = new_Image(); im.setName("ticket:1018"); Pixels pi = ObjectFactory.createPixelGraph(null); im.addPixels(pi); ds.linkImage(im); ds = iUpdate.saveAndReturnObject(ds); // test Timestamp startTime = getDate("before"); Timestamp endTime = getDate("after"); Parameters options = new Parameters(); options.exp(userID); options.startTime(startTime); options.endTime(endTime); Set<Image> images = iContainer.getImagesByOptions(options); Image i = images.iterator().next(); assertTrue(i.getAnnotationLinksCountPerOwner() != null); } @Test public void testSPLoadHierarchy() throws Exception { loginNewUser(); Screen s = new Screen(); s.setName("screen 1"); Plate p1 = new Plate(); p1.setName("plate 1"); s.linkPlate(p1); Plate p2 = new Plate(); p2.setName("plate 2"); s = iUpdate.saveAndReturnObject(s); p2 = iUpdate.saveAndReturnObject(p2); Parameters options = new Parameters(); //no orphan Set screens = iContainer.loadContainerHierarchy(Screen.class, new HashSet(), options); assertEquals(1, screens.size()); Iterator i = screens.iterator(); Screen screen; List<Plate> plates; Iterator j; Plate plate; while (i.hasNext()) { screen = (Screen) i.next(); assertEquals(screen.getId(), s.getId()); plates = screen.linkedPlateList(); assertTrue(plates.size() == 1); j = plates.iterator(); while (j.hasNext()) { plate = (Plate) j.next(); assertEquals(plate.getId(), p1.getId()); } } //orphan options.orphan(); screens = iContainer.loadContainerHierarchy(Screen.class, new HashSet(), options); assertTrue(screens.size() == 2); i = screens.iterator(); IObject object; while (i.hasNext()) { object = (IObject) i.next(); if (object instanceof Screen) { assertTrue(object.getId() == s.getId()); } else if (object instanceof Plate) { assertTrue(object.getId() == p2.getId()); } } } // ~ Helpers // ========================================================================= private Timestamp getDate(String arg) { Calendar cal = Calendar.getInstance(); cal.setLenient(true); cal.setTime(new Date()); if (arg.equals("after")) { cal.add(Calendar.DATE, +1); } if (arg.equals("before")) { cal.add(Calendar.DATE, -1); } Date yesterday = cal.getTime(); SimpleDateFormat currentDate = new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss"); Timestamp time = Timestamp.valueOf(currentDate.format(yesterday)); return (time); } private ILink createLinkedCommentAnnotation() { CommentAnnotation da = new CommentAnnotation(); Dataset ds = new Dataset(); Project p = new Project(); p.setName("uEv"); p.linkDataset(ds); ds.setName("uEv"); da.setNs(""); da.setTextValue("uEv"); ds.linkAnnotation(da); ds = iContainer.createDataObject(ds, null); return ds.collectAnnotationLinks((CBlock<ILink>) null).iterator() .next(); } private Image new_Image() { Image i = new Image(); return i; } }