package org.nightlabs.jfire.reporting.trade.ui.articlecontainer.order; import java.util.Collection; import javax.jdo.FetchPlan; import javax.jdo.JDOHelper; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.nightlabs.base.ui.job.Job; import org.nightlabs.jdo.NLJDOHelper; import org.nightlabs.jdo.query.QueryCollection; import org.nightlabs.jfire.jbpm.graph.def.State; import org.nightlabs.jfire.jbpm.graph.def.StateDefinition; import org.nightlabs.jfire.reporting.parameter.config.ValueProviderConfig; import org.nightlabs.jfire.reporting.parameter.id.ValueProviderID; import org.nightlabs.jfire.reporting.trade.ReportingTradeConstants; import org.nightlabs.jfire.reporting.ui.parameter.AbstractValueProviderGUI; import org.nightlabs.jfire.reporting.ui.parameter.IValueProviderGUI; import org.nightlabs.jfire.reporting.ui.parameter.IValueProviderGUIFactory; import org.nightlabs.jfire.trade.LegalEntity; import org.nightlabs.jfire.trade.Order; import org.nightlabs.jfire.trade.dao.OrderDAO; import org.nightlabs.jfire.trade.id.OrderID; import org.nightlabs.jfire.trade.query.OrderQuery; import org.nightlabs.jfire.trade.ui.overview.order.OrderListComposite; import org.nightlabs.jfire.trade.ui.resource.Messages; import org.nightlabs.jfire.transfer.id.AnchorID; import org.nightlabs.progress.ProgressMonitor; /** * @author Daniel Mazurek - daniel <at> nightlabs <dot> de * */ public class ValueProviderGUIOrderByCustomer extends AbstractValueProviderGUI<OrderID> { public static final String[] FETCH_GROUPS_ORDERS = new String[] { FetchPlan.DEFAULT, Order.FETCH_GROUP_THIS_ORDER, State.FETCH_GROUP_STATE_DEFINITION, StateDefinition.FETCH_GROUP_NAME, LegalEntity.FETCH_GROUP_PERSON }; public static class Factory implements IValueProviderGUIFactory { public IValueProviderGUI<OrderID> createValueProviderGUI(ValueProviderConfig valueProviderConfig, boolean isScheduledReportParameterConfig) { return new ValueProviderGUIOrderByCustomer(valueProviderConfig); } public ValueProviderID getValueProviderID() { return ReportingTradeConstants.VALUE_PROVIDER_ID_TRADE_DOCUMENTS_ORDER_BY_CUSTOMER; } public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException { } } private OrderListComposite orderListComposite = null; /** * @param valueProviderConfig */ public ValueProviderGUIOrderByCustomer(ValueProviderConfig valueProviderConfig) { super(valueProviderConfig); } public Control createGUI(Composite wrapper) { orderListComposite = new OrderListComposite(wrapper, SWT.NONE); orderListComposite.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent arg0) { notifyOutputChanged(); } }); return orderListComposite; } public OrderID getOutputValue() { if (orderListComposite.getSelectedElements().size() >= 1) return (OrderID) JDOHelper.getObjectId(orderListComposite.getSelectedElements().iterator().next()); return null; } public boolean isAcquisitionComplete() { return getOutputValue() != null || getValueProviderConfig().isAllowNullOutputValue(); } public void setInputParameterValue(String parameterID, final Object value) { Job loadJob = new Job(Messages.getString("org.nightlabs.jfire.trade.ui.overview.order.report.ValueProviderGUIOrderByCustomer.loadOrdersJob.name")) { //$NON-NLS-1$ @Override protected IStatus run(ProgressMonitor monitor) { OrderQuery query = new OrderQuery(); // ArticleContainerQuery query = new ArticleContainerQuery(Order.class); query.setCustomerID((AnchorID) value); QueryCollection<OrderQuery> qs = new QueryCollection<OrderQuery>(Order.class); qs.add(query); final Collection<Order> orders = OrderDAO.sharedInstance().getOrdersByQueries( qs, FETCH_GROUPS_ORDERS, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor); Display.getDefault().asyncExec(new Runnable() { public void run() { orderListComposite.setInput(orders); } }); return Status.OK_STATUS; } }; loadJob.schedule(); } }