/** * Copyright 2007-2010 非也 * 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。 * * 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, see http://www.gnu.org/licenses. * */ package org.fireflow.client.impl; import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.fireflow.client.WorkflowQuery; import org.fireflow.client.query.AbsCriterion; import org.fireflow.client.query.Criterion; import org.fireflow.client.query.Order; import org.fireflow.client.query.Restrictions; import org.fireflow.client.query.WorkflowQueryDelegate; import org.fireflow.engine.entity.WorkflowEntity; import org.fireflow.engine.entity.runtime.ActivityInstance; import org.fireflow.engine.entity.runtime.ActivityInstanceProperty; import org.fireflow.server.support.ClassXmlAdapter; import org.fireflow.server.support.CriterionListXmlAdapter; /** * * * @author 非也 * @version 2.0 */ @XmlRootElement(name="workflowQuery") @XmlType(name="workflowQueryType",propOrder={"interfaceClass","criterions","orders","firstResult","maxResults","queryFromHistory"}) @XmlAccessorType(XmlAccessType.FIELD) public class WorkflowQueryImpl<T extends WorkflowEntity> implements WorkflowQuery<T> { @XmlElement(name="interfaceClass") @XmlJavaTypeAdapter(value = ClassXmlAdapter.class) Class<T> interfaceClass = null; @XmlElement(name="criterionList") @XmlJavaTypeAdapter(CriterionListXmlAdapter.class) List<AbsCriterion> criterions = new ArrayList<AbsCriterion>(); @XmlElement(name="orderBy") List<Order> orders = new ArrayList<Order>(); @XmlElement(name="pageNumber") int pageNumber = -1;//表示查询所有 @XmlElement(name="pageSize") int pageSize = -1;//表示查询所有 @XmlElement(name="queryFromHistory") boolean queryFromHistory = false; // WorkflowSession session = null; @XmlTransient WorkflowQueryDelegate queryDelegate = null; public WorkflowQueryImpl(){ } public WorkflowQueryImpl(Class<T> interfaceClass){ // this.session = session; this.interfaceClass = interfaceClass; } public void setQueryDelegate(WorkflowQueryDelegate delegate){ queryDelegate = delegate; } /* (non-Javadoc) * @see org.fireflow.engine.WorkflowQuery#add(org.fireflow.engine.Criterion) */ public WorkflowQuery<T> add(Criterion criterion) { criterions.add((AbsCriterion)criterion); return this; } /* (non-Javadoc) * @see org.fireflow.engine.WorkflowQuery#addOrder(org.fireflow.engine.Order) */ public WorkflowQuery<T> addOrder(Order order) { orders.add(order); return this; } /* (non-Javadoc) * @see org.fireflow.engine.WorkflowQuery#count() */ public int count() { return this.queryDelegate.executeQueryCount(this); } /* (non-Javadoc) * @see org.fireflow.engine.WorkflowQuery#get(java.lang.String) */ public T get(String entityId) { return (T)this.queryDelegate.getEntity(entityId, this.interfaceClass); } /* (non-Javadoc) * @see org.fireflow.engine.WorkflowQuery#getFirstResult() */ public int getPageNumber() { return this.pageNumber; } /* (non-Javadoc) * @see org.fireflow.engine.WorkflowQuery#getMaxResults() */ public int getPageSize() { return this.pageSize; } /* (non-Javadoc) * @see org.fireflow.engine.WorkflowQuery#isQueryFromHistory() */ public boolean isQueryFromHistory() { return this.queryFromHistory; } /* (non-Javadoc) * @see org.fireflow.engine.WorkflowQuery#list() */ public List<T> list() { return this.queryDelegate.executeQueryList(this); } /* (non-Javadoc) * @see org.fireflow.engine.WorkflowQuery#reset() */ public WorkflowQuery<T> reset() { this.criterions.clear(); this.orders.clear(); this.pageNumber=0; this.pageSize=-1; this.queryFromHistory = false; return this; } /* (non-Javadoc) * @see org.fireflow.engine.WorkflowQuery#setFirstResult(int) */ public WorkflowQuery<T> setPageNumber(int rowNum) { this.pageNumber = rowNum; return this; } /* (non-Javadoc) * @see org.fireflow.engine.WorkflowQuery#setMaxResults(int) */ public WorkflowQuery<T> setPageSize(int size) { this.pageSize = size; return this; } /* (non-Javadoc) * @see org.fireflow.engine.WorkflowQuery#setQueryFromHistory(boolean) */ public WorkflowQuery<T> setQueryFromHistory(boolean b) { this.queryFromHistory = b; return this; } /* (non-Javadoc) * @see org.fireflow.engine.WorkflowQuery#unique() */ public T unique() { int oldMaxResult = this.pageSize; this.pageSize = 1; List<T> entities = this.queryDelegate.executeQueryList(this); if (entities!=null && entities.size()>0){ this.pageSize = oldMaxResult; return entities.get(0); } this.pageSize = oldMaxResult; return null; } public Class<T> getEntityClass(){ return this.interfaceClass; } public List<? extends Criterion> getAllCriterions(){ return this.criterions; } public List<Order> getAllOrders(){ return this.orders; } public static void main(String[] args){ WorkflowQueryImpl<ActivityInstance> impl = new WorkflowQueryImpl<ActivityInstance>(ActivityInstance.class); impl.add(Restrictions.eq(ActivityInstanceProperty.ID, "213")); impl.add(Restrictions.isNotNull(ActivityInstanceProperty.BIZ_TYPE)); List<? extends Criterion> critierionList = impl.getAllCriterions(); for (Criterion c : critierionList){ System.out.println(c); } } }