/* *------------------------------------------------------------------------------ * Copyright (C) 2006-2016 University of Dundee & Open Microscopy Environment. * All rights reserved. * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *------------------------------------------------------------------------------ */ package training; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Set; import static omero.rtypes.rint; import static omero.rtypes.rstring; import omero.api.IContainerPrx; import omero.api.IQueryPrx; import omero.gateway.Gateway; import omero.gateway.LoginCredentials; import omero.gateway.SecurityContext; import omero.gateway.facility.DataManagerFacility; import omero.log.SimpleLogger; import omero.model.Dataset; import omero.model.IObject; import omero.model.Project; import omero.model.TagAnnotation; import omero.sys.Filter; import omero.sys.ParametersI; import omero.gateway.model.DatasetData; import omero.gateway.model.ExperimenterData; import omero.gateway.model.ImageData; import omero.gateway.model.ProjectData; import omero.gateway.model.TagAnnotationData; /** * More advanced code for how to load data from an OMERO server. * * @author Jean-Marie Burel      * <a href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a> * @since Beta4.3.2 */ public class ReadDataAdvanced { //The value used if the configuration file is not used. To edit*/ /** The server address.*/ private static String hostName = "serverName"; /** The username.*/ private static String userName = "userName"; /** The password.*/ private static String password = "password"; //end edit /** The name of a Dataset.*/ private String datasetName = "MyDataset"; /** The name of a Tag.*/ private String tagName = "MyTag"; private Gateway gateway; private SecurityContext ctx; /** * Creates 3 Datasets with the name defined by {@link #datasetName}. */ private void createDatasets() throws Exception { DataManagerFacility dm = gateway.getFacility(DataManagerFacility.class); for (int i = 0; i < 3; i ++) { DatasetData d = new DatasetData(); d.setName(datasetName); dm.saveAndReturnObject(ctx, d); } } /** * Creates 3 Tags with the namespace value defined by {@link #tagName}. */ private void createTags() throws Exception { DataManagerFacility dm = gateway.getFacility(DataManagerFacility.class); for (int i = 0; i < 3; i ++) { TagAnnotationData t = new TagAnnotationData(tagName); ((TagAnnotation)t.asIObject()).setNs(rstring(Setup.TRAINING_NS)); t.setDescription(String.format("%s %s", tagName, i)); dm.saveAndReturnObject(ctx, t); } } /** * Retrieve the Datasets that match the name value. */ private void loadDatasetsByName() throws Exception { final boolean caseSensitive = true; final Filter filter = new Filter(); // Return the first 10 hits or less. filter.limit = rint(10); filter.offset = rint(0); IQueryPrx proxy = gateway.getQueryService(ctx); List<IObject> datasets = (List<IObject>) proxy.findAllByString("Dataset", "name", datasetName, caseSensitive, filter); System.out.println("\nList Datasets:"); for (IObject obj : datasets) { Dataset d = (Dataset) obj; System.out.println("ID: " + d.getId().getValue() + " Name: " + d.getName().getValue()); } } /** * Retrieve the Tags that match the namespace value. */ private void loadTagsByNS() throws Exception { final boolean caseSensitive = true; final Filter filter = new Filter(); // Return the first 10 hits or less. filter.limit = rint(10); filter.offset = rint(0); IQueryPrx proxy = gateway.getQueryService(ctx); List<IObject> tags = (List<IObject>) proxy.findAllByString("TagAnnotation", "ns", Setup.TRAINING_NS, caseSensitive, filter); System.out.println("\nList Tags:"); for (IObject obj : tags) { TagAnnotation t = (TagAnnotation) obj; System.out.println("ID: " + t.getId().getValue() + " NS: " + t.getNs().getValue()); } } /** * Retrieve the projects and the orphaned datasets i.e. datasets not in * a project. * * If a project contains datasets, the datasets will automatically be loaded. */ private void loadProjectsAndOrphanedDatasets() throws Exception { IContainerPrx proxy = gateway.getPojosService(ctx); ParametersI param = new ParametersI(); long userId = gateway.getLoggedInUser().getId(); param.exp(omero.rtypes.rlong(userId)); //Load the orphaned datasets. param.orphan(); //Do not load the images. param.noLeaves(); //indicate to load the images //param.noLeaves(); //no images loaded, this is the default value. List<IObject> results = proxy.loadContainerHierarchy( Project.class.getName(), new ArrayList<Long>(), param); //You can directly interact with the IObject or the Pojos object. //Follow interaction with the Pojos. Iterator<IObject> i = results.iterator(); ProjectData project; DatasetData dataset; IObject o; long datasetId = -1; while (i.hasNext()) { o = i.next(); if (o instanceof Project) { project = new ProjectData((Project) o); System.err.println("Project:"+project.getId()+" "+ project.getName()); } else if (o instanceof Dataset) { dataset = new DatasetData((Dataset) o); System.err.println("Dataset:"+dataset.getId()+" "+ dataset.getName()); if (datasetId < 0) datasetId = dataset.getId(); //Image not loaded. } } //Now load the image for the first orphaned dataset if (datasetId < 0) return; param = new ParametersI(); param.exp(omero.rtypes.rlong(userId)); param.leaves(); results = proxy.loadContainerHierarchy( Dataset.class.getName(), Arrays.asList(datasetId), param); i = results.iterator(); Iterator j; while (i.hasNext()) { dataset = new DatasetData((Dataset) i.next()); Set images = dataset.getImages(); j = images.iterator(); System.err.println("Size:"+images.size()); while (j.hasNext()) { ImageData image = (ImageData) j.next(); System.err.println("Image:"+image.getId()+" "+image.getName()); } } } /** * Connects and invokes the various methods. * * @param args The login credentials. */ ReadDataAdvanced(String[] args) { LoginCredentials cred = new LoginCredentials(args); gateway = new Gateway(new SimpleLogger()); try { // First connect. ExperimenterData user = gateway.connect(cred); ctx = new SecurityContext(user.getGroupId()); createDatasets(); createTags(); loadDatasetsByName(); loadTagsByNS(); loadProjectsAndOrphanedDatasets(); } catch (Exception e) { e.printStackTrace(); } finally { try { gateway.disconnect(); // Be sure to disconnect } catch (Exception e) { e.printStackTrace(); } } } /** * Runs the script without configuration options. * * @param args The login credentials. */ public static void main(String[] args) { if (args == null || args.length == 0) args = new String[] { "--omero.host=" + hostName, "--omero.user=" + userName, "--omero.pass=" + password }; new ReadDataAdvanced(args); System.exit(0); } }