package org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.deliverydate; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import javax.jdo.JDOHelper; 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.Composite; import org.nightlabs.base.ui.composite.DateTimeControl; import org.nightlabs.base.ui.composite.XComposite; import org.nightlabs.jfire.trade.Article; import org.nightlabs.jfire.trade.deliverydate.ArticleDeliveryDateCarrier; import org.nightlabs.jfire.trade.deliverydate.DeliveryDateMode; import org.nightlabs.jfire.trade.id.ArticleID; import org.nightlabs.jfire.trade.ui.articlecontainer.detail.ArticleTableProviderConstants; import org.nightlabs.jfire.trade.ui.resource.Messages; import org.nightlabs.l10n.IDateFormatter; import org.nightlabs.progress.NullProgressMonitor; /** * @author Daniel Mazurek - daniel [at] nightlabs [dot] de * */ public class EditDeliveryDateComposite extends XComposite { private final ArticleDeliveryDateTable table; private Collection<ArticleDeliveryDateCarrier> articleDeliveryDateCarriers; private final DateTimeControl dateTimeControl; private final DeliveryDateMode mode; public EditDeliveryDateComposite(final Composite parent, final int style, final DeliveryDateMode mode) { super(parent, style); this.mode = mode; table = new ArticleDeliveryDateTable(this, SWT.NONE, Article.class.getName(), ArticleTableProviderConstants.SCOPE_PRODUCT_TYPE, mode); final Composite wrapper = new XComposite(this, SWT.NONE, LayoutMode.ORDINARY_WRAPPER, LayoutDataMode.GRID_DATA_HORIZONTAL); dateTimeControl = new DateTimeControl(wrapper, true, SWT.NONE, IDateFormatter.FLAGS_DATE_SHORT); dateTimeControl.setDate(null); dateTimeControl.setButtonText(Messages.getString("org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.deliverydate.EditDeliveryDateComposite.button.setDeliveryDate.text")); //$NON-NLS-1$ dateTimeControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); dateTimeControl.addSelectionListener(new SelectionAdapter(){ /* (non-Javadoc) * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ @Override public void widgetSelected(final SelectionEvent e) { final Date date = dateTimeControl.getDate(); for (final ArticleDeliveryDateCarrier carrier : articleDeliveryDateCarriers){ carrier.setDeliveryDate(date); } updateText(); table.refresh(true); } }); } public void setArticles(final Collection<Article> articles, final DeliveryDateMode mode) { final Collection<ArticleID> articleIDs = new ArrayList<ArticleID>(articles.size()); articleDeliveryDateCarriers = new ArrayList<ArticleDeliveryDateCarrier>(articles.size()); for (final Article article : articles) { final ArticleID articleID = (ArticleID) JDOHelper.getObjectId(article); articleIDs.add(articleID); final ArticleDeliveryDateCarrier articleDeliveryDateCarrier = new ArticleDeliveryDateCarrier( articleID, getDeliveryDate(article, mode), mode); articleDeliveryDateCarriers.add(articleDeliveryDateCarrier); } table.setArticleDeliveryDateCarriers(articleDeliveryDateCarriers); table.setElementIDs(articleIDs, ArticleTableProviderConstants.SCOPE_PRODUCT_TYPE, new NullProgressMonitor()); updateText(); } private Date getDeliveryDate(final Article article, final DeliveryDateMode mode) { if (mode == DeliveryDateMode.DELIVERY_NOTE){ return article.getDeliveryDateDeliveryNote(); } else return article.getDeliveryDateOffer(); } public Collection<ArticleDeliveryDateCarrier> getArticleDeliveryDateCarriers() { return articleDeliveryDateCarriers; } private void updateText() { if (articleDeliveryDateCarriers != null && !articleDeliveryDateCarriers.isEmpty()) { final Date date = articleDeliveryDateCarriers.iterator().next().getDeliveryDate(); dateTimeControl.setDate(date); } } }