ome.services.query.PojosFindAnnotationsQueryDefinition.java Source code

Java tutorial

Introduction

Here is the source code for ome.services.query.PojosFindAnnotationsQueryDefinition.java

Source

/*
 *   $Id$
 *
 *   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.parameters.Parameters;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

public class PojosFindAnnotationsQueryDefinition extends Query {

    static Definitions defs = new Definitions(new IdsQueryParameterDef(), new ClassQueryParameterDef(),
            new QueryParameterDef("annotatorIds", Collection.class, true));

    public PojosFindAnnotationsQueryDefinition(Parameters parameters) {
        super(defs, parameters);
        // TODO set local fields here.
    }

    @Override
    protected void buildQuery(Session session) throws HibernateException, SQLException {

        Class k = (Class) value(CLASS);

        Criteria obj = session.createCriteria(k);
        // TODO refactor into CriteriaUtils
        // Not currently loading, since IContainer.findAnnotations, rearranges
        // them to return the annotations, which have no links to their
        // owning objects
        // obj.setFetchMode("details.owner", FetchMode.JOIN);
        // obj.setFetchMode("details.group", FetchMode.JOIN);
        // obj.setFetchMode("details.creationEvent", FetchMode.JOIN);
        // obj.setFetchMode("details.updateEvent", FetchMode.JOIN);
        Collection ids = (Collection) value(IDS);
        if (ids != null && ids.size() > 0)
            obj.add(Restrictions.in("id", ids));

        // Here we do want the left join, so the consumer will see
        // that there's an empty set
        Criteria links = obj.createCriteria("annotationLinks", "links", LEFT_JOIN);
        Criteria ann = links.createCriteria("child", LEFT_JOIN);
        Criteria ann_owner = ann.createAlias("details.owner", "ann_owner", LEFT_JOIN);
        Criteria ann_create = ann.createAlias("details.creationEvent", "ann_create", LEFT_JOIN);
        Criteria ann_file = ann.createAlias("file", "ann_file", LEFT_JOIN);

        obj.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

        if (check("annotatorIds")) {
            Collection annotatorIds = (Collection) value("annotatorIds");
            if (annotatorIds != null && annotatorIds.size() > 0) {
                ann.add(Restrictions.in("details.owner.id", annotatorIds));
            }
        }
        setCriteria(obj);
    }
}