package org.nightlabs.jfire.trade.ui.overview; import java.util.Set; import javax.security.auth.login.LoginException; import org.eclipse.swt.widgets.Composite; import org.nightlabs.base.ui.composite.XComposite; import org.nightlabs.base.ui.composite.XComposite.LayoutDataMode; import org.nightlabs.jdo.query.QueryProvider; import org.nightlabs.jfire.base.JFireEjb3Factory; import org.nightlabs.jfire.base.login.ui.Login; import org.nightlabs.jfire.base.ui.search.AbstractQueryFilterComposite; import org.nightlabs.jfire.jbpm.graph.def.Statable; import org.nightlabs.jfire.jbpm.graph.def.id.ProcessDefinitionID; import org.nightlabs.jfire.jbpm.query.StatableQuery; import org.nightlabs.jfire.jbpm.ui.query.AbstractStatableSearchComposite; import org.nightlabs.jfire.trade.TradeManagerRemote; import org.nightlabs.progress.ProgressMonitor; /** * * @author Marius Heinzmann - marius[at]nightlabs[dot]com */ public class StatableFilterSearchComposite //extends AbstractQueryFilterComposite<StatableQuery> extends AbstractStatableSearchComposite<StatableQuery> { /** * Creates a new {@link AbstractQueryFilterComposite}. * <p><b>Note</b>: The caller has to call {@link #createComposite()} to create the UI! <br /> * This is not done in this constructor to omit problems with fields that are not only declared, * but also initialised. If these fields are used inside {@link #createComposite()} * or new values are assigned to them, one of the following two things may happen: * <ul> * <li>The value assigned to that field is overridden by the initialisation value that is * assigned after this constructor is finished</li> * <li>The referenced value is not yet properly initialised, because the initialisation is * done after the constructor finishes, and hence results in an unexpected exception.</li> * </ul> * </p> * @param parent * The parent to instantiate this filter into. * @param style * The style to apply. * @param layoutMode * The layout mode to use. See {@link XComposite.LayoutMode}. * @param layoutDataMode * The layout data mode to use. See {@link XComposite.LayoutDataMode}. * @param queryProvider * The queryProvider to use. It may be <code>null</code>, but the caller has to * ensure, that it is set before {@link #getQuery()} is called! */ public StatableFilterSearchComposite(Composite parent, int style, LayoutMode layoutMode, LayoutDataMode layoutDataMode, QueryProvider<? super StatableQuery> queryProvider) { super(parent, style, layoutMode, layoutDataMode, queryProvider); } /** * Delegates to {@link StatableFilterComposite#StatableFilterComposite(AbstractQueryFilterComposite, int, XComposite.LayoutMode, LayoutDataMode)} */ public StatableFilterSearchComposite(Composite parent, int style, QueryProvider<? super StatableQuery> queryProvider) { super(parent, style, queryProvider); } @Override protected Set<ProcessDefinitionID> retrieveProcessDefinitionIDs(ProgressMonitor monitor, Class<? extends Statable> statableClass) { String statableClassName = statableClass.getName(); TradeManagerRemote tradeManager; try { tradeManager = JFireEjb3Factory.getRemoteBean(TradeManagerRemote.class, Login.getLogin().getInitialContextProperties()); Set<ProcessDefinitionID> processDefinitionIDs = tradeManager.getProcessDefinitionIDs(statableClassName); return processDefinitionIDs; } catch (LoginException e) { throw new RuntimeException(e); } } /* (non-Javadoc) * @see org.nightlabs.jfire.base.ui.search.AbstractQueryFilterComposite#getQueryClass() */ @Override public Class<StatableQuery> getQueryClass() { return StatableQuery.class; } }