/*
* ome.services.query.IObjectClassQuery
*
* Copyright 2006 University of Dundee. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
/*------------------------------------------------------------------------------
*
* Written by: Josh Moore <josh.moore@gmx.de>
*
*------------------------------------------------------------------------------
*/
package ome.services.query;
import java.sql.SQLException;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import ome.parameters.Parameters;
import ome.parameters.QueryParameter;
/**
* simple query subclass which uses the {@link ome.parameters.Parameters#CLASS}
* parameter value to create a {@link org.hibernate.Criteria} and then adds
* {@link org.hibernate.criterion.Expression} instances based on all other
* parameter names.
* <p>
* For example:
* </p>
* <code>
* Parameters p = new Parameters().addClass( Image.class )
* .addString( "name", "LT-3059");
* </code>
* <p>
* produces a query of the form "select i from Image i where name = 'LT-3059'"
* </p>
*
* @author Josh Moore, <a href="mailto:josh.moore@gmx.de">josh.moore@gmx.de</a>
* @since OMERO 3.0
*/
public class IObjectClassQuery extends Query {
static String CLASS = Parameters.CLASS;
static Definitions defs = new Definitions(new QueryParameterDef(CLASS,
Class.class, false));
public IObjectClassQuery(Parameters parameters) {
super(defs, parameters);
}
@Override
protected void buildQuery(Session session) throws HibernateException,
SQLException {
Criteria c = session.createCriteria((Class) value(CLASS));
for (QueryParameter qp : params.queryParameters()) {
if (!qp.name.equals(CLASS)) {
c.add(Restrictions.eq(qp.name, qp.value)); // TODO checks for
// type.
}
}
setCriteria(c);
}
}