/*
* Copyright 2006 University of Dundee. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
package ome.services.query;
import static ome.parameters.Parameters.CLASS;
import static ome.parameters.Parameters.IDS;
import java.sql.SQLException;
import java.util.Collection;
import ome.conditions.ApiUsageException;
import ome.model.containers.Dataset;
import ome.model.containers.Project;
import ome.model.core.Image;
import ome.parameters.Parameters;
import ome.tools.hibernate.QueryBuilder;
import org.hibernate.HibernateException;
import org.hibernate.Session;
public class PojosGetImagesQueryDefinition extends AbstractClassIdsOptionsQuery {
public PojosGetImagesQueryDefinition(Parameters parameters) {
super(parameters);
}
@Override
protected void buildQuery(Session session) throws HibernateException,
SQLException {
Class klass = (Class) value(CLASS);
Collection ids = (Collection) value(IDS);
QueryBuilder qb = new QueryBuilder();
qb.select("img");
qb.from("Image", "img");
qb.join("img.details.creationEvent", "ce", true, true);
qb.join("img.details.updateEvent", "ue", true, true);
qb.join("img.pixels", "pix", true, true);
qb.join("pix.timeIncrement", "increment", true, true);
qb.join("pix.pixelsType", "pt", true, true);
qb.join("img.format", "format", true, true);
qb.join("img.annotationLinksCountPerOwner", "i_c_ann", true, true);
qb.join("img.datasetLinksCountPerOwner", "i_c_ds", true, true);
if (params.isAcquisitionData()) {
qb.join("img.stageLabel", "position", true, true);
qb.join("img.imagingEnvironment", "condition", true, true);
qb.join("img.objectiveSettings", "os", true, true);
qb.join("os.medium", "me", true, true);
qb.join("os.objective", "objective", true, true);
qb.join("objective.immersion", "im", true, true);
qb.join("objective.correction", "co", true, true);
}
// see http://trac.openmicroscopy.org.uk/ome/ticket/296
if (Image.class.isAssignableFrom(klass)) {
qb.where();
qb.and("img.id in (:ids)");
} else if (Dataset.class.isAssignableFrom(klass)) {
qb.join("img.datasetLinks", "dil", false, false);
qb.join("dil.parent", "ds", false, false);
// ds.annotationLinksCountPerOwner, ds_c
qb.where();
qb.and("ds.id in (:ids)");
} else if (Project.class.isAssignableFrom(klass)) {
qb.join("img.datasetLinks", "dil", false, false);
qb.join("dil.parent", "ds", false, false);
qb.join("ds.projectLinks", "pdl", false, false);
qb.join("pdl.parent", "prj", false, false);
// "prj.annotationLinksCountPerOwner as prj_c "
qb.where();
qb.and("prj.id in (:ids)");
} else {
throw new ApiUsageException("Query not implemented for " + klass);
}
// if PojoOptions sets START_TIME and/or END_TIME
if (params.getStartTime() != null) {
qb.and("img.details.creationEvent.time > :starttime");
qb.param("starttime", params.getStartTime());
}
if (params.getEndTime() != null) {
qb.and("img.details.creationEvent.time < :endtime");
qb.param("endtime", params.getEndTime());
}
qb.paramList("ids", ids);
org.hibernate.Query q = qb.query(session);
setQuery(q);
}
@Override
protected void enableFilters(Session session) {
ownerOrGroupFilters(session, new String[] { Image.OWNER_FILTER },
new String[] { Image.GROUP_FILTER });
}
}
// select i from Image i
// #bottomUpHierarchy()
// where
// #imagelist()
// #filters()
// #typeExperimenter()