package org.nightlabs.jfire.reporting.trade.ui.articlecontainer.deliverynote;
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.store.DeliveryNote;
import org.nightlabs.jfire.store.DeliveryNoteLocal;
import org.nightlabs.jfire.store.dao.DeliveryNoteDAO;
import org.nightlabs.jfire.store.id.DeliveryNoteID;
import org.nightlabs.jfire.trade.LegalEntity;
import org.nightlabs.jfire.trade.query.DeliveryNoteQuery;
import org.nightlabs.jfire.trade.ui.overview.deliverynote.DeliveryNoteListComposite;
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 ValueProviderGUIDeliveryNoteByCustomer
extends AbstractValueProviderGUI<DeliveryNoteID>
{
public static final String[] FETCH_GROUPS_DELIVERY_NOTES = new String[] {
FetchPlan.DEFAULT,
DeliveryNote.FETCH_GROUP_THIS_DELIVERY_NOTE,
State.FETCH_GROUP_STATE_DEFINITION,
StateDefinition.FETCH_GROUP_NAME,
LegalEntity.FETCH_GROUP_PERSON,
DeliveryNoteLocal.FETCH_GROUP_THIS_DELIVERY_NOTE_LOCAL
};
public static class Factory implements IValueProviderGUIFactory
{
public IValueProviderGUI<DeliveryNoteID> createValueProviderGUI(
ValueProviderConfig valueProviderConfig, boolean isScheduledReportParameterConfig)
{
return new ValueProviderGUIDeliveryNoteByCustomer(valueProviderConfig);
}
public ValueProviderID getValueProviderID() {
return ReportingTradeConstants.VALUE_PROVIDER_ID_TRADE_DOCUMENTS_DELIVERY_NOTE_BY_CUSTOMER;
}
public void setInitializationData(IConfigurationElement config,
String propertyName, Object data) throws CoreException {
}
}
private DeliveryNoteListComposite deliveryNoteListComposite = null;
public ValueProviderGUIDeliveryNoteByCustomer(ValueProviderConfig valueProviderConfig) {
super(valueProviderConfig);
}
public Control createGUI(Composite wrapper) {
deliveryNoteListComposite = new DeliveryNoteListComposite(wrapper, SWT.NONE);
deliveryNoteListComposite.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent arg0) {
notifyOutputChanged();
}
});
return deliveryNoteListComposite;
}
public DeliveryNoteID getOutputValue() {
if (deliveryNoteListComposite.getSelectedElements().size() >= 1)
return (DeliveryNoteID) JDOHelper.getObjectId(deliveryNoteListComposite.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.deliverynote.report.ValueProviderGUIDeliveryNoteByCustomer.loadDeliveryNotesJob.name")) { //$NON-NLS-1$
@Override
protected IStatus run(ProgressMonitor monitor) {
DeliveryNoteQuery query = new DeliveryNoteQuery();
query.setCustomerID((AnchorID) value);
QueryCollection<DeliveryNoteQuery> qs =
new QueryCollection<DeliveryNoteQuery>(DeliveryNote.class);
qs.add(query);
final Collection<DeliveryNote> deliveryNotes = DeliveryNoteDAO.sharedInstance()
.getDeliveryNotesByQueries(
qs, FETCH_GROUPS_DELIVERY_NOTES, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor);
Display.getDefault().asyncExec(new Runnable() {
public void run() {
deliveryNoteListComposite.setInput(deliveryNotes);
}
});
return Status.OK_STATUS;
}
};
loadJob.schedule();
}
}