/* * $Id$ * * Copyright 2006 University of Dundee. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package integration; import static omero.rtypes.rbool; import static omero.rtypes.rstring; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.UUID; import omero.RLong; import omero.ServerError; import omero.api.IAdminPrx; import omero.api.IQueryPrx; import omero.api.IUpdatePrx; import omero.api.ServiceFactoryPrx; import omero.model.CommentAnnotation; import omero.model.CommentAnnotationI; import omero.model.Dataset; import omero.model.DatasetAnnotationLink; import omero.model.DatasetAnnotationLinkI; import omero.model.DatasetI; import omero.model.DatasetImageLink; import omero.model.DatasetImageLinkI; import omero.model.Experimenter; import omero.model.ExperimenterGroup; import omero.model.ExperimenterGroupI; import omero.model.ExperimenterI; import omero.model.IObject; import omero.model.Image; import omero.model.ImageAnnotationLink; import omero.model.ImageAnnotationLinkI; import omero.model.ImageI; import omero.model.Project; import omero.model.ProjectDatasetLink; import omero.model.ProjectDatasetLinkI; import omero.model.ProjectI; import omero.sys.EventContext; import Glacier2.CannotCreateSessionException; import Glacier2.PermissionDeniedException; /** * setUp and tearDown must be called properly to make these work. Copied from * testing/src/ome/testing/CreatePojosFixture for ticket1106 */ public class CreatePojosFixture2 { private static final String TESTER_PASS = "ome"; private static final String USER_GROUP = "user"; /** * creates a new fixture logged in as a newly created user. requires an * admin service factory in order to create user and should NOT be used from * the server side. * * @throws ServerError * @throws PermissionDeniedException * @throws CannotCreateSessionException */ public static CreatePojosFixture2 withNewUser(omero.client root) throws ServerError, CannotCreateSessionException, PermissionDeniedException { return withNewUser(root, (String) null); } public static CreatePojosFixture2 withNewUser(omero.client root, String groupName) throws ServerError, CannotCreateSessionException, PermissionDeniedException { CreatePojosFixture2 fixture = new CreatePojosFixture2(); ServiceFactoryPrx sf = root.getSession(); IAdminPrx rootAdmin = sf.getAdminService(); String G_NAME; if (groupName == null) { G_NAME = UUID.randomUUID().toString(); fixture.g = new ExperimenterGroupI(); fixture.g.setName(rstring(G_NAME)); fixture.g.setLdap(rbool(false)); fixture.g = new ExperimenterGroupI( rootAdmin.createGroup(fixture.g), false); } else { G_NAME = groupName; fixture.g = rootAdmin.lookupGroup(groupName); } fixture.TESTER = "TESTER-" + UUID.randomUUID().toString(); fixture.e = new ExperimenterI(); fixture.e.setOmeName(rstring(fixture.TESTER)); fixture.e.setFirstName(rstring("Mr.")); fixture.e.setLastName(rstring("Allen")); fixture.e.setLdap(rbool(false)); ExperimenterGroup userGroup = rootAdmin.lookupGroup(USER_GROUP); List<ExperimenterGroup> groups = new ArrayList<ExperimenterGroup>(); groups.add(fixture.g); fixture.e = new ExperimenterI( rootAdmin.createExperimenterWithPassword(fixture.e, omero.rtypes.rstring(TESTER_PASS), userGroup, groups), false); java.util.Map<String, String> m = new HashMap<String, String>(); m.put("omero.user", fixture.TESTER); m.put("omero.pass", TESTER_PASS); m.put("omero.group", G_NAME); m.put("Ice.Default.Router", root.getProperty("Ice.Default.Router")); omero.client client = new omero.client(m); ServiceFactoryPrx factory = client.createSession(); fixture.setServices(factory); fixture.init = true; return fixture; } private CreatePojosFixture2() { } /** * requires an admin service factory in order to create user. * * @throws ServerError */ public CreatePojosFixture2(ServiceFactoryPrx factory) throws ServerError { setServices(factory); EventContext ec = iAdmin.getEventContext(); e = new ExperimenterI(ec.userId, false); g = new ExperimenterGroupI(ec.groupId, false); TESTER = ec.userName; init = true; } private void setServices(ServiceFactoryPrx factory) throws ServerError { iAdmin = factory.getAdminService(); iQuery = factory.getQueryService(); iUpdate = factory.getUpdateService(); } public IAdminPrx iAdmin; public IQueryPrx iQuery; public IUpdatePrx iUpdate; protected boolean init = false; protected List<IObject> toAdd = new ArrayList<IObject>(), needId = new ArrayList<IObject>(); public void createAllPojos() throws Exception { init(); projects(); datasets(); pdlinks(); images(); dilinks(); annotations(); } public void init() { if (!init) { // moved to ctor } } public void pdi() throws Exception { projects(); datasets(); images(); pdlinks(); dilinks(); } public void projects() throws Exception { init(); pr9090 = project(null, "root project without links"); pr9091 = project(null, "root project with own annotations"); pr9092 = project(null, "root project with foreign annotations"); pu9990 = project(e, "user project without links"); pu9991 = project(e, "user project with own annotations"); pu9992 = project(e, "user project with foreign annotations"); saveAndClear(); } public void datasets() throws Exception { init(); dr7070 = dataset(null, "root dataset without links"); dr7071 = dataset(null, "root dataset with own annotations"); dr7072 = dataset(null, "root dataset with foreign annotations"); du7770 = dataset(e, "user dataset without links"); du7771 = dataset(e, "user dataset with own annotations"); du7772 = dataset(e, "user dataset with foreign annotations"); saveAndClear(); } // TODO we aren't passing in Experimenter here public void pdlinks() throws Exception { init(); pdlink(pr9091, dr7071); pdlink(pr9092, dr7071); pdlink(pr9091, dr7072); pdlink(pr9092, dr7072); pdlink(pu9991, du7771); pdlink(pu9992, du7771); pdlink(pu9991, du7772); pdlink(pu9992, du7772); saveAndClear(); } public void images() throws Exception { init(); ir5050 = image(null, ""); ir5051 = image(null, ""); ir5052 = image(null, ""); iu5550 = image(e, ""); iu5551 = image(e, ""); iu5552 = image(e, ""); // cgcpaths iu5580 = image(e, ""); iu5581 = image(e, ""); iu5582 = image(e, ""); iu5583 = image(e, ""); iu5584 = image(e, ""); iu5585 = image(e, ""); iu5586 = image(e, ""); iu5587 = image(e, ""); iu5588 = image(e, ""); saveAndClear(); } public void dilinks() throws Exception { init(); dilink(null, dr7071, ir5051); dilink(null, dr7071, ir5052); dilink(e, dr7072, ir5051); dilink(e, dr7072, ir5052); dilink(null, du7771, iu5551); dilink(null, du7771, iu5552); dilink(e, du7772, iu5551); dilink(e, du7772, iu5552); saveAndClear(); } public void annotations() throws Exception { init(); datasetann(null, dr7071, "roots annotation"); datasetann(e, dr7072, "users annotation"); datasetann(null, du7771, "roots annotation"); datasetann(e, du7772, "users annotation"); imageann(null, ir5051, "roots annotation"); imageann(e, ir5052, "users annotation"); imageann(null, iu5551, "roots annotation"); imageann(e, iu5552, "users annotation"); saveAndClear(); } // ~ Helpers // ========================================================================= protected <T extends IObject> T push(T obj) throws Exception { toAdd.add(obj); T copy = (T) obj.getClass().newInstance(); copy.unload(); needId.add(copy); return copy; } protected void saveAndClear() throws ServerError { List<IObject> retVal = iUpdate.saveAndReturnArray(toAdd); IObject[] unloaded = needId.toArray(new IObject[needId.size()]); for (int i = 0; i < retVal.size(); i++) { unloaded[i].setId(retVal.get(i).getId()); } toAdd.clear(); needId.clear(); } protected Project project(Experimenter owner, String name) throws Exception { Project p = new ProjectI(); p.getDetails().setOwner(owner); p.setName(rstring(name)); p = push(p); return p; } protected Dataset dataset(Experimenter owner, String name) throws Exception { Dataset d = new DatasetI(); d.getDetails().setOwner(owner); d.setName(rstring(name)); d = push(d); return d; } protected ProjectDatasetLink pdlink(Project prj, Dataset ds) throws Exception { ProjectDatasetLink link = new ProjectDatasetLinkI(); link.link(prj, ds); link = push(link); return link; } protected Image image(Experimenter e, String name) throws Exception { Image i = new ImageI(); i.getDetails().setOwner(e); i.setName(rstring(name)); i = push(i); return i; } protected DatasetImageLink dilink(Experimenter user, Dataset ds, Image i) throws Exception { DatasetImageLink link = new DatasetImageLinkI(); link.link(ds, i); link.getDetails().setOwner(user); link = push(link); return link; } protected DatasetAnnotationLink datasetann(Experimenter user, Dataset d, String name) throws Exception { CommentAnnotation dann = new CommentAnnotationI(); dann.setNs(rstring(name)); dann.getDetails().setOwner(user); DatasetAnnotationLink link = new DatasetAnnotationLinkI(); link.link((Dataset) d.proxy(), dann); link = push(link); return link; } protected ImageAnnotationLink imageann(Experimenter user, Image i, String name) throws Exception { CommentAnnotation iann = new CommentAnnotationI(); iann.setNs(rstring(name)); iann.getDetails().setOwner(user); ImageAnnotationLink link = new ImageAnnotationLinkI(); link.link((Image) i.proxy(), iann); link = push(link); return link; } // static class Data { public String TESTER; public Experimenter e; public ExperimenterGroup g; public Project pr9090, pr9091, pr9092, pu9990, pu9991, pu9992; public Dataset dr7070, dr7071, dr7072, du7770, du7771, du7772; public Image ir5050, ir5051, ir5052, iu5550, iu5551, iu5552, iu5580, iu5581, iu5582, iu5583, iu5584, iu5585, iu5586, iu5587, iu5588; // } public List<RLong> asIdList(IObject... iobjs) { List<RLong> list = new ArrayList<RLong>(); for (IObject i : iobjs) { list.add(i.getId()); } return list; } /** * Returns the collections of project's identifiers. * * @return See above. */ public List<Long> getProjectIds() { List<Long> ids = new ArrayList<Long>(); if (pr9090 != null) ids.add(pr9090.getId().getValue()); if (pr9091 != null) ids.add(pr9091.getId().getValue()); if (pr9092 != null) ids.add(pr9092.getId().getValue()); if (pu9990 != null) ids.add(pu9990.getId().getValue()); if (pu9991 != null) ids.add(pu9991.getId().getValue()); if (pu9992 != null) ids.add(pu9992.getId().getValue()); return ids; } /** * Returns the collections of project's identifiers. * * @return See above. */ public List<Long> getImageIds() { List<Long> ids = new ArrayList<Long>(); if (ir5050 != null) ids.add(ir5050.getId().getValue()); if (ir5051 != null) ids.add(ir5051.getId().getValue()); if (ir5052 != null) ids.add(ir5052.getId().getValue()); if (iu5550 != null) ids.add(iu5550.getId().getValue()); if (iu5551 != null) ids.add(iu5551.getId().getValue()); if (iu5552 != null) ids.add(iu5552.getId().getValue()); if (iu5580 != null) ids.add(iu5580.getId().getValue()); if (iu5581 != null) ids.add(iu5581.getId().getValue()); if (iu5582 != null) ids.add(iu5582.getId().getValue()); if (iu5583 != null) ids.add(iu5583.getId().getValue()); if (iu5584 != null) ids.add(iu5584.getId().getValue()); if (iu5585 != null) ids.add(iu5585.getId().getValue()); if (iu5586 != null) ids.add(iu5586.getId().getValue()); if (iu5587 != null) ids.add(iu5587.getId().getValue()); if (iu5588 != null) ids.add(iu5588.getId().getValue()); return ids; } /** * Returns the collections of project's identifiers. * * @return See above. */ public List<Long> getDatasetIds() { List<Long> ids = new ArrayList<Long>(); if (dr7070 != null) ids.add(dr7070.getId().getValue()); if (dr7071 != null) ids.add(dr7071.getId().getValue()); if (dr7072 != null) ids.add(dr7072.getId().getValue()); if (du7770 != null) ids.add(du7770.getId().getValue()); if (du7771 != null) ids.add(du7771.getId().getValue()); if (du7772 != null) ids.add(du7772.getId().getValue()); return ids; } }