/* *****************************************************************************
* JFire - it's hot - Free ERP System - http://jfire.org *
* Copyright (C) 2004-2005 NightLabs - http://NightLabs.org *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 2.1 of the License, or (at your option) any later version. *
* *
* This library 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin St, Fifth Floor, *
* Boston, MA 02110-1301 USA *
* *
* Or get it online : *
* http://opensource.org/licenses/lgpl-license.php *
* *
* *
******************************************************************************/
package org.nightlabs.jfire.trade.ui.transfer.wizard;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.jdo.FetchPlan;
import javax.jdo.JDOHelper;
import javax.naming.NamingException;
import javax.security.auth.login.LoginException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.nightlabs.base.ui.composite.DateTimeControl;
import org.nightlabs.base.ui.composite.XComposite;
import org.nightlabs.base.ui.composite.XComposite.LayoutMode;
import org.nightlabs.base.ui.job.Job;
import org.nightlabs.base.ui.resource.SharedImages;
import org.nightlabs.base.ui.resource.SharedImages.ImageDimension;
import org.nightlabs.base.ui.wizard.IWizardHopPage;
import org.nightlabs.base.ui.wizard.WizardHopPage;
import org.nightlabs.config.Config;
import org.nightlabs.eclipse.extension.EPProcessorException;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.base.JFireEjb3Factory;
import org.nightlabs.jfire.base.login.ui.Login;
import org.nightlabs.jfire.base.ui.config.ConfigUtil;
import org.nightlabs.jfire.store.ProductType;
import org.nightlabs.jfire.store.StoreManagerRemote;
import org.nightlabs.jfire.store.deliver.CheckRequirementsEnvironment;
import org.nightlabs.jfire.store.deliver.Delivery;
import org.nightlabs.jfire.store.deliver.DeliveryConfiguration;
import org.nightlabs.jfire.store.deliver.DeliveryData;
import org.nightlabs.jfire.store.deliver.ModeOfDeliveryFlavour;
import org.nightlabs.jfire.store.deliver.ModeOfDeliveryFlavourName;
import org.nightlabs.jfire.store.deliver.ServerDeliveryProcessor;
import org.nightlabs.jfire.store.deliver.ModeOfDeliveryFlavour.ModeOfDeliveryFlavourProductTypeGroup;
import org.nightlabs.jfire.store.deliver.ModeOfDeliveryFlavour.ModeOfDeliveryFlavourProductTypeGroupCarrier;
import org.nightlabs.jfire.store.deliver.id.DeliveryConfigurationID;
import org.nightlabs.jfire.store.deliver.id.ModeOfDeliveryFlavourID;
import org.nightlabs.jfire.store.deliver.id.ServerDeliveryProcessorID;
import org.nightlabs.jfire.store.id.ProductTypeID;
import org.nightlabs.jfire.trade.Article;
import org.nightlabs.jfire.trade.config.TradePrintingConfigModule;
import org.nightlabs.jfire.trade.ui.TradePlugin;
import org.nightlabs.jfire.trade.ui.modeofdelivery.ModeOfDeliveryFlavourTable;
import org.nightlabs.jfire.trade.ui.resource.Messages;
import org.nightlabs.jfire.trade.ui.transfer.deliver.ClientDeliveryProcessor;
import org.nightlabs.jfire.trade.ui.transfer.deliver.ClientDeliveryProcessorFactory;
import org.nightlabs.jfire.trade.ui.transfer.deliver.ClientDeliveryProcessorFactoryRegistry;
import org.nightlabs.jfire.trade.ui.transfer.print.ArticleContainerPrinterRegistry;
import org.nightlabs.jfire.trade.ui.transfer.print.AutomaticPrintingOptionsGroup;
import org.nightlabs.jfire.transfer.RequirementCheckResult;
import org.nightlabs.l10n.IDateFormatter;
import org.nightlabs.progress.NullProgressMonitor;
import org.nightlabs.progress.ProgressMonitor;
import org.nightlabs.util.NLLocale;
import org.nightlabs.util.Util;
/**
* There's one of these pages for each group of
* {@link org.nightlabs.jfire.store.ProductType}s with the same
* {@link org.nightlabs.jfire.store.deliver.ModeOfDelivery}s/{@link org.nightlabs.jfire.store.deliver.ModeOfDeliveryFlavour}s
* configured. The dynamic pages generated by the
* {@link org.nightlabs.jfire.trade.ui.transfer.deliver.ClientDeliveryProcessor}s are appended
* after all the entry pages.
*
* @author Marco Schulze - marco at nightlabs dot de
*/
public class DeliveryEntryPage
extends WizardHopPage
implements IDeliveryEntryPage
{
private final List<? extends ProductType> productTypes;
private org.eclipse.swt.widgets.List productTypeGUIList;
// private List articles;
private List<ModeOfDeliveryFlavour> modeOfDeliveryFlavours;
private ModeOfDeliveryFlavourTable modeOfDeliveryFlavourTable;
private Label clientDeliveryProcessorFactoryLabel;
/**
* Contains items of type {@link ClientDeliveryProcessorFactory}.
*/
private List<ClientDeliveryProcessorFactory> clientDeliveryProcessorFactoryList = null;
private Combo clientDeliveryProcessorFactoryCombo;
private Label serverDeliveryProcessorLabel;
/**
* Contains items of type {@link ServerDeliveryProcessor}.
*/
private final List<ServerDeliveryProcessor> serverDeliveryProcessorList = new ArrayList<ServerDeliveryProcessor>();
private Combo serverDeliveryProcessorCombo;
private ModeOfDeliveryFlavour selectedModeOfDeliveryFlavour = null;
private ClientDeliveryProcessorFactory selectedClientDeliveryProcessorFactory = null;
private ClientDeliveryProcessor clientDeliveryProcessor = null;
private ServerDeliveryProcessor selectedServerDeliveryProcessor = null;
private TradePrintingConfigModule tradePrintingCfMod = null;
private AutomaticPrintingOptionsGroup automaticPrintingGroup = null;
private final DeliveryConfigurationID deliveryConfigurationID;
private DateTimeControl deliveryDateControl;
protected DeliveryWizardHop getDeliveryWizardHop()
{
return (DeliveryWizardHop) getWizardHop();
}
public DeliveryEntryPage(
final DeliveryConfigurationID deliveryConfigurationID,
final Delivery delivery,
final List<? extends ProductType> productTypes,
final List<Article> articles)
{
super(DeliveryEntryPage.class.getName() + '/' + delivery.getDeliveryID(), Messages.getString("org.nightlabs.jfire.trade.ui.transfer.wizard.DeliveryEntryPage.title"), //$NON-NLS-1$
SharedImages.getSharedImageDescriptor(TradePlugin.getDefault(), DeliveryEntryPage.class, null, ImageDimension._75x70));
setMessage(null);
setDescription(
Messages.getString("org.nightlabs.jfire.trade.ui.transfer.wizard.DeliveryEntryPage.description")); //$NON-NLS-1$
new DeliveryWizardHop(this, delivery); // self-registering
this.deliveryConfigurationID = deliveryConfigurationID;
this.productTypes = productTypes;
}
@Override
public Control createPageContents(final Composite parent)
{
final XComposite page = new XComposite(parent, SWT.NONE, LayoutMode.TIGHT_WRAPPER);
new Label(page, SWT.NONE).setText(Messages.getString("org.nightlabs.jfire.trade.ui.transfer.wizard.DeliveryEntryPage.productTypesLabel.text")); //$NON-NLS-1$
productTypeGUIList = new org.eclipse.swt.widgets.List(page, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
productTypeGUIList.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
for (final Iterator<? extends ProductType> it = productTypes.iterator(); it.hasNext(); ) {
final ProductType productType = it.next();
productTypeGUIList.add(productType.getName().getText(NLLocale.getDefault().getLanguage()));
}
XComposite spacer = new XComposite(page, SWT.NONE, LayoutMode.TIGHT_WRAPPER);
spacer.getGridData().grabExcessVerticalSpace = false;
spacer.getGridData().heightHint = 4;
new Label(page, SWT.NONE).setText(Messages.getString("org.nightlabs.jfire.trade.ui.transfer.wizard.DeliveryEntryPage.modeOfDeliveryFlavourLabel.text")); //$NON-NLS-1$
modeOfDeliveryFlavourTable = new ModeOfDeliveryFlavourTable(page);
modeOfDeliveryFlavourTable.setInput(modeOfDeliveryFlavours);
modeOfDeliveryFlavourTable.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(final SelectionChangedEvent arg0)
{
try {
setMessage(null);
modeOfDeliveryFlavourGUIListSelectionChanged();
} catch (final Exception x) {
throw new RuntimeException(x);
}
}
});
spacer = new XComposite(page, SWT.NONE, LayoutMode.TIGHT_WRAPPER);
spacer.getGridData().grabExcessVerticalSpace = false;
spacer.getGridData().heightHint = 4;
clientDeliveryProcessorFactoryLabel = new Label(page, SWT.NONE);
clientDeliveryProcessorFactoryLabel.setText(Messages.getString("org.nightlabs.jfire.trade.ui.transfer.wizard.DeliveryEntryPage.clientDeliveryProcessorFactoryLabel.text")); //$NON-NLS-1$
clientDeliveryProcessorFactoryCombo = new Combo(page, SWT.BORDER | SWT.READ_ONLY);
clientDeliveryProcessorFactoryCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
clientDeliveryProcessorFactoryCombo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e)
{
try {
setMessage(null);
clientDeliveryProcessorFactoryComboSelectionChanged();
} catch (final Exception x) {
throw new RuntimeException(x);
}
}
});
spacer = new XComposite(page, SWT.NONE, LayoutMode.TIGHT_WRAPPER);
spacer.getGridData().grabExcessVerticalSpace = false;
spacer.getGridData().heightHint = 4;
serverDeliveryProcessorLabel = new Label(page, SWT.NONE);
serverDeliveryProcessorLabel.setText(Messages.getString("org.nightlabs.jfire.trade.ui.transfer.wizard.DeliveryEntryPage.serverDeliveryProcessorLabel.text")); //$NON-NLS-1$
serverDeliveryProcessorCombo = new Combo(page, SWT.BORDER | SWT.READ_ONLY);
serverDeliveryProcessorCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
serverDeliveryProcessorCombo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e)
{
try {
setMessage(null);
serverDeliveryProcessorComboSelectionChanged();
} catch (final Exception x) {
throw new RuntimeException(x);
}
}
});
spacer = new XComposite(page, SWT.NONE, LayoutMode.TIGHT_WRAPPER);
spacer.getGridData().grabExcessVerticalSpace = false;
spacer.getGridData().heightHint = 4;
final XComposite dateComposite = new XComposite(page, SWT.NONE, LayoutMode.TIGHT_WRAPPER);
dateComposite.getGridLayout().numColumns = 2;
dateComposite.getGridData().grabExcessVerticalSpace = false;
new Label(dateComposite, SWT.NONE).setText("Delivery Date:");
deliveryDateControl = new DateTimeControl(dateComposite, SWT.NONE, IDateFormatter.FLAGS_DATE_SHORT_TIME_HM);
deliveryDateControl.setDateEditable(false);
deliveryDateControl.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
if(deliveryDateControl.getDate() != null)
{
setPaymentDate(deliveryDateControl.getDate());
}
}
});
if (!ArticleContainerPrinterRegistry.sharedInstance().getFactories().isEmpty()) {
automaticPrintingGroup = new AutomaticPrintingOptionsGroup(page, Messages.getString("org.nightlabs.jfire.trade.ui.transfer.wizard.DeliveryEntryPage.group.deliveryNotePrintingOptions"), Messages.getString("org.nightlabs.jfire.trade.ui.transfer.wizard.DeliveryEntryPage.deliveryNote"), null); //$NON-NLS-1$ //$NON-NLS-2$
}
loadModeOfDeliveries();
return page;
}
protected static String sessionLastSelectedMOPFPK = null;
private StoreManagerRemote storeManager = null;
protected StoreManagerRemote getStoreManager()
throws RemoteException, LoginException, NamingException
{
if (storeManager == null)
storeManager = JFireEjb3Factory.getRemoteBean(StoreManagerRemote.class, Login.getLogin().getInitialContextProperties());
return storeManager;
}
protected DeliveryEntryPageCfMod getDeliveryEntryPageCfMod()
{
return Config.sharedInstance().createConfigModule(DeliveryEntryPageCfMod.class);
}
protected void modeOfDeliveryFlavourGUIListSelectionChanged()
{
setErrorMessage(null);
// remove all ClientDeliveryProcessorFactory s as they will be fetched again
clientDeliveryProcessorFactoryCombo.removeAll();
clientDeliveryProcessorFactoryList = null; // will be replaced
// remove all ServerDeliveryProcessor s as they will be fetched again
serverDeliveryProcessorCombo.removeAll();
serverDeliveryProcessorList.clear();
selectedModeOfDeliveryFlavour = null;
sessionLastSelectedMOPFPK = null;
clientDeliveryProcessor = null;
// set selectedModeOfDeliveryFlavour
selectedModeOfDeliveryFlavour = modeOfDeliveryFlavourTable.getSelectedModeOfDeliveryFlavour();
if (selectedModeOfDeliveryFlavour != null) {
// selectedModeOfDeliveryFlavour = (ModeOfDeliveryFlavour) modeOfDeliveryFlavours.get(idx);
getDeliveryEntryPageCfMod().setModeOfDeliveryFlavourPK(getDeliveryConfigurationPK(), selectedModeOfDeliveryFlavour.getPrimaryKey());
try {
clientDeliveryProcessorFactoryList =
ClientDeliveryProcessorFactoryRegistry.sharedInstance().
getClientDeliveryProcessorFactories(selectedModeOfDeliveryFlavour);
} catch (final EPProcessorException e) {
throw new RuntimeException(e);
}
Collections.sort(clientDeliveryProcessorFactoryList, new Comparator<ClientDeliveryProcessorFactory>(){
public int compare(final ClientDeliveryProcessorFactory cppf0, final ClientDeliveryProcessorFactory cppf1)
{
final String name0 = cppf0.getName();
final String name1 = cppf1.getName();
return name0.compareTo(name1);
}
});
for (final Iterator<ClientDeliveryProcessorFactory> it = clientDeliveryProcessorFactoryList.iterator(); it.hasNext(); ) {
final ClientDeliveryProcessorFactory cppf = it.next();
clientDeliveryProcessorFactoryCombo.add(cppf.getName());
}
if (clientDeliveryProcessorFactoryCombo.getItemCount() > 0)
clientDeliveryProcessorFactoryCombo.select(0);
else
setMessage(String.format(
Messages.getString("org.nightlabs.jfire.trade.ui.transfer.wizard.DeliveryEntryPage.errorNoClientDeliveryProcessorFactoryRegisteredForSelectedModeOfDeliveryFlavour"), //$NON-NLS-1$
selectedModeOfDeliveryFlavour.getPrimaryKey(),
selectedModeOfDeliveryFlavour.getName().getText()), IMessageProvider.ERROR);
} // if (selectedModeOfDeliveryFlavour != null) {
clientDeliveryProcessorFactoryComboSelectionChanged();
getContainer().updateButtons();
}
public void setPaymentDate(final Date newDate)
{
getDeliveryWizardHop().getDelivery().setDeliveryDT(newDate);
updateDateGUI();
}
protected void updateDateGUI()
{
if (deliveryDateControl != null) {
final Date currentDeliveryDate = getDeliveryWizardHop().getDelivery().getDeliveryDT();
if (currentDeliveryDate != deliveryDateControl.getDate())
deliveryDateControl.setDate(currentDeliveryDate);
}
}
@SuppressWarnings("unchecked")
protected void clientDeliveryProcessorFactoryComboSelectionChanged()
{
final DeliveryWizard wizard = ((DeliveryWizard)getWizard());
removeDeliveryPages();
selectedClientDeliveryProcessorFactory = null;
clientDeliveryProcessor = null;
serverDeliveryProcessorCombo.removeAll();
serverDeliveryProcessorList.clear();
final int idx = clientDeliveryProcessorFactoryCombo.getSelectionIndex();
if (idx >= 0) {
selectedClientDeliveryProcessorFactory = clientDeliveryProcessorFactoryList.get(idx);
clientDeliveryProcessor = selectedClientDeliveryProcessorFactory.createClientDeliveryProcessor();
if (clientDeliveryProcessor == null)
throw new IllegalStateException("ClientDeliveryProcessorFactory.createClientDeliveryProcessor() returned null! class: " + selectedClientDeliveryProcessorFactory.getClass()); //$NON-NLS-1$
clientDeliveryProcessor.setClientDeliveryProcessorFactory(selectedClientDeliveryProcessorFactory);
clientDeliveryProcessor.setDeliveryEntryPage(this);
clientDeliveryProcessor.setCustomerID(wizard.getPartnerID());
clientDeliveryProcessor.setDelivery(getDeliveryWizardHop().getDelivery());
clientDeliveryProcessor.init();
final RequirementCheckResult checkResult = clientDeliveryProcessor.getRequirementCheckResult();
if (checkResult != null) {
this.setErrorMessage(checkResult.getMessage());
return;
}
this.setErrorMessage(null);
DeliveryData deliveryData = clientDeliveryProcessor.getDeliveryData();
if (deliveryData == null)
deliveryData = new DeliveryData(getDeliveryWizardHop().getDelivery());
deliveryData.getDelivery().setModeOfDeliveryFlavour(selectedModeOfDeliveryFlavour);
deliveryData.getDelivery().setClientDeliveryProcessorFactoryID(
selectedClientDeliveryProcessorFactory.getID());
getDeliveryWizardHop().setDeliveryData(deliveryData);
final Set<ServerDeliveryProcessorID> includedSPPs = clientDeliveryProcessor.getIncludedServerDeliveryProcessorIDs();
Set<ServerDeliveryProcessorID> excludedSPPs = null;
if (includedSPPs == null)
excludedSPPs = clientDeliveryProcessor.getExcludedServerDeliveryProcessorIDs();
final IWizardHopPage paymentPage = clientDeliveryProcessor.createDeliveryWizardPage();
if (paymentPage != null)
addDeliveryPage(paymentPage);
final CheckRequirementsEnvironment checkRequirementsEnvironment = new CheckRequirementsEnvironment(
getDeliveryWizardHop().getDelivery().getDeliveryDirection(),
getDeliveryWizardHop().getDelivery().getArticleIDs());
// load ServerDeliveryProcessor s
final ModeOfDeliveryFlavourID modeOfDeliveryFlavourID = (ModeOfDeliveryFlavourID) JDOHelper.getObjectId(selectedModeOfDeliveryFlavour);
Collection<ServerDeliveryProcessor> c;
try {
c = getStoreManager().getServerDeliveryProcessorsForOneModeOfDeliveryFlavour(
modeOfDeliveryFlavourID,
checkRequirementsEnvironment,
new String[] {
FetchPlan.DEFAULT,
ServerDeliveryProcessor.FETCH_GROUP_NAME
}, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT);
} catch (final Exception e) {
throw new RuntimeException(e);
}
final String clientDeliveryProcessorFactoryID = selectedClientDeliveryProcessorFactory.getID();
for (final Iterator<ServerDeliveryProcessor> it = c.iterator(); it.hasNext(); ) {
final ServerDeliveryProcessor spp = it.next();
final ServerDeliveryProcessorID sppID = (ServerDeliveryProcessorID) JDOHelper.getObjectId(spp);
if (includedSPPs != null && !includedSPPs.contains(sppID))
continue;
if (excludedSPPs != null && excludedSPPs.contains(sppID))
continue;
final Set<String> includedCPPFs = spp.getIncludedClientDeliveryProcessorFactoryIDs();
Set<String> excludedCPPFs = null;
if (includedCPPFs == null)
excludedCPPFs = spp.getExcludedClientDeliveryProcessorFactoryIDs();
if (includedCPPFs != null && !includedCPPFs.contains(clientDeliveryProcessorFactoryID))
continue;
if (excludedCPPFs != null && excludedCPPFs.contains(clientDeliveryProcessorFactoryID))
continue;
serverDeliveryProcessorList.add(spp);
}
Collections.sort(serverDeliveryProcessorList, new Comparator<ServerDeliveryProcessor>(){
public int compare(final ServerDeliveryProcessor spp0, final ServerDeliveryProcessor spp1)
{
final String name0 = spp0.getName().getText(NLLocale.getDefault().getLanguage());
final String name1 = spp1.getName().getText(NLLocale.getDefault().getLanguage());
return name0.compareTo(name1);
}
});
for (final Iterator<ServerDeliveryProcessor> it = serverDeliveryProcessorList.iterator(); it.hasNext(); ) {
final ServerDeliveryProcessor serverDeliveryProcessor = it.next();
serverDeliveryProcessorCombo.add(serverDeliveryProcessor.getName().getText(NLLocale.getDefault().getLanguage()));
}
if (serverDeliveryProcessorCombo.getItemCount() > 0)
serverDeliveryProcessorCombo.select(0);
else
setMessage(String.format(
Messages.getString("org.nightlabs.jfire.trade.ui.transfer.wizard.DeliveryEntryPage.errorNoServerDeliveryProcessorRegisteredForSelectedModeOfDeliveryFlavour"), //$NON-NLS-1$
selectedModeOfDeliveryFlavour.getPrimaryKey(),
selectedModeOfDeliveryFlavour.getName().getText()), IMessageProvider.ERROR);
}
serverDeliveryProcessorComboSelectionChanged();
}
protected void removeDeliveryPages()
{
getWizardHop().removeAllHopPages();
}
protected void addDeliveryPage(final IWizardHopPage deliveryPage)
{
getWizardHop().addHopPage(deliveryPage);
}
protected void serverDeliveryProcessorComboSelectionChanged()
{
final DeliveryWizard wizard = ((DeliveryWizard)getWizard());
selectedServerDeliveryProcessor = null;
final int idx = serverDeliveryProcessorCombo.getSelectionIndex();
if (idx >= 0) {
selectedServerDeliveryProcessor = serverDeliveryProcessorList.get(idx);
getDeliveryWizardHop().getDelivery().setServerDeliveryProcessorID(
(ServerDeliveryProcessorID) JDOHelper.getObjectId(selectedServerDeliveryProcessor));
final RequirementCheckResult result = selectedServerDeliveryProcessor.getRequirementCheckResult();
if (result != null) {
this.setErrorMessage(result.getMessage());
// wizard.updateDialog(); // this is already done be setErrorMessage(...)
return;
}
this.setErrorMessage(null);
}
else
getDeliveryWizardHop().getDelivery().setServerDeliveryProcessorID(null);
wizard.updateDialog();
}
/**
* @return Returns the selectedModeOfDeliveryFlavour.
*/
public ModeOfDeliveryFlavour getSelectedModeOfDeliveryFlavour()
{
return selectedModeOfDeliveryFlavour;
}
/**
* @return Returns the clientDeliveryProcessor.
*/
public ClientDeliveryProcessor getClientDeliveryProcessor()
{
return clientDeliveryProcessor;
}
/**
* @return Returns the selectedClientDeliveryProcessorFactory.
*/
public ClientDeliveryProcessorFactory getSelectedClientDeliveryProcessorFactory()
{
return selectedClientDeliveryProcessorFactory;
}
/**
* @return Returns the selectedServerDeliveryProcessor.
*/
public ServerDeliveryProcessor getSelectedServerDeliveryProcessor()
{
return selectedServerDeliveryProcessor;
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.wizard.WizardPage#isPageComplete()
*/
@Override
public boolean isPageComplete()
{
return
clientDeliveryProcessor != null &&
clientDeliveryProcessor.getRequirementCheckResult() == null &&
selectedClientDeliveryProcessorFactory != null &&
selectedServerDeliveryProcessor != null &&
selectedServerDeliveryProcessor.getRequirementCheckResult() == null;
}
private String getDeliveryConfigurationPK() {
return DeliveryConfiguration.getPrimaryKey(deliveryConfigurationID.organisationID, deliveryConfigurationID.deliveryConfigurationID);
}
private Job loadModeOfDeliveriesJob = null;
public void loadModeOfDeliveries() {
final Job loadJob = new Job(Messages.getString("org.nightlabs.jfire.trade.ui.transfer.wizard.DeliveryEntryPage.job.loadingDeliveryModes")) { //$NON-NLS-1$
@Override
protected IStatus run(final ProgressMonitor monitor) throws Exception {
final DeliveryWizard deliveryWizard = (DeliveryWizard) getWizard();
final List<ModeOfDeliveryFlavour> modeOfDeliveryFlavours = new ArrayList<ModeOfDeliveryFlavour>();
final Set<ProductTypeID> ptids = NLJDOHelper.getObjectIDSet(productTypes);
final ModeOfDeliveryFlavourProductTypeGroupCarrier carrier = getStoreManager().getModeOfDeliveryFlavourProductTypeGroupCarrier(
// deliveryWizard.getProductTypeIDs(), // this is wrong, since it loads the ModeOfDeliveryFlavours for all productTypes of the whole wizard!
ptids, // only the productTypeIDs for this one page! not for all!
deliveryWizard.getCustomerGroupIDs(),
ModeOfDeliveryFlavour.MERGE_MODE_SUBTRACTIVE,
true,
new String[]{
FetchPlan.DEFAULT,
ModeOfDeliveryFlavour.FETCH_GROUP_MODE_OF_DELIVERY,
ModeOfDeliveryFlavour.FETCH_GROUP_NAME,
ModeOfDeliveryFlavour.FETCH_GROUP_ICON_16X16_DATA,
ModeOfDeliveryFlavourName.FETCH_GROUP_NAMES
}, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT);
final Map<ProductTypeID, ProductType> productTypeByIDMap = deliveryWizard.getProductTypeByIDMap();
for (final Iterator<ModeOfDeliveryFlavourProductTypeGroup> itG = carrier.getModeOfDeliveryFlavourProductTypeGroups().iterator(); itG.hasNext(); ) {
final ModeOfDeliveryFlavourProductTypeGroup group = itG.next();
final List<ProductType> productTypes = new ArrayList<ProductType>();
for (final Iterator<ProductTypeID> itPT = group.getProductTypeIDs().iterator(); itPT.hasNext();) {
final ProductTypeID productTypeID = itPT.next();
final ProductType productType = productTypeByIDMap.get(productTypeID);
if (productType == null)
throw new IllegalStateException("ProductType with ID \"" + productTypeID + "\" missing in map!"); //$NON-NLS-1$ //$NON-NLS-2$
productTypes.add(productType);
}
for (final Iterator<ModeOfDeliveryFlavourID> itMDOFID = group.getModeOfDeliveryFlavourIDs().iterator(); itMDOFID.hasNext(); ) {
final ModeOfDeliveryFlavourID modfID = itMDOFID.next();
final ModeOfDeliveryFlavour modf = carrier.getModeOfDeliveryFlavour(modfID);
modeOfDeliveryFlavours.add(modf);
}
}
Collections.sort(modeOfDeliveryFlavours, new Comparator<ModeOfDeliveryFlavour>() {
public int compare(final ModeOfDeliveryFlavour mopf0, final ModeOfDeliveryFlavour mopf1)
{
final String name0 = mopf0.getName().getText(NLLocale.getDefault().getLanguage());
final String name1 = mopf1.getName().getText(NLLocale.getDefault().getLanguage());
return name0.compareTo(name1);
}
});
final DeliveryEntryPageCfMod deliveryEntryPageCfMod = getDeliveryEntryPageCfMod();
ModeOfDeliveryFlavour selectedModeOfDeliveryFlavour = null;
final String lastSelectedModeOfDeliveryFlavourPK = deliveryEntryPageCfMod.getDeliveryConfigurationPK2modeOfDeliveryFlavourPK().get(getDeliveryConfigurationPK());
if (lastSelectedModeOfDeliveryFlavourPK != null) {
for (final ModeOfDeliveryFlavour modeOfDeliveryFlavour : modeOfDeliveryFlavours) {
if (lastSelectedModeOfDeliveryFlavourPK.equals(modeOfDeliveryFlavour.getPrimaryKey())) {
selectedModeOfDeliveryFlavour = modeOfDeliveryFlavour;
break;
}
}
}
if (selectedModeOfDeliveryFlavour == null) {
for (final ModeOfDeliveryFlavour modeOfDeliveryFlavour : modeOfDeliveryFlavours) {
if (Util.equals(deliveryEntryPageCfMod.getModeOfDeliveryFlavourPK(), modeOfDeliveryFlavour.getPrimaryKey())) {
selectedModeOfDeliveryFlavour = modeOfDeliveryFlavour;
break;
}
}
}
final List<ModeOfDeliveryFlavour> selList = new ArrayList<ModeOfDeliveryFlavour>(1);
if (selectedModeOfDeliveryFlavour != null)
selList.add(selectedModeOfDeliveryFlavour);
tradePrintingCfMod = ConfigUtil.getWorkstationCfMod(TradePrintingConfigModule.class,
new String[] { FetchPlan.DEFAULT }, 1, new NullProgressMonitor());
final Job thisJob = this;
Display.getDefault().asyncExec(new Runnable() {
public void run() {
if (loadModeOfDeliveriesJob != thisJob)
return;
DeliveryEntryPage.this.modeOfDeliveryFlavours = modeOfDeliveryFlavours;
setMessage(null);
if (modeOfDeliveryFlavourTable != null) {
modeOfDeliveryFlavourTable.setInput(modeOfDeliveryFlavours);
modeOfDeliveryFlavourTable.setSelectedElements(selList); // JFace changed its behaviour?!!?!?! It now fires an event when programmatically setting a selection.
setMessage(null);
modeOfDeliveryFlavourGUIListSelectionChanged();
}
if (automaticPrintingGroup != null) {
automaticPrintingGroup.setEnteredPrintCount(tradePrintingCfMod.getDeliveryNoteCopyCount());
automaticPrintingGroup.setDoPrint(tradePrintingCfMod.isPrintDeliveryNoteByDefault());
}
}
});
return Status.OK_STATUS;
}
};
loadModeOfDeliveriesJob = loadJob;
loadJob.schedule();
}
public int getDeliveryNotesToPrintCount()
{
if (automaticPrintingGroup != null)
return automaticPrintingGroup.getActualPrintCount();
else
return 0;
}
}