package org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.deliverydate;
import java.util.Collection;
import java.util.Date;
import javax.jdo.JDOHelper;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.swt.widgets.Composite;
import org.nightlabs.base.ui.celleditor.DateTimeCellEditor;
import org.nightlabs.jfire.trade.Article;
import org.nightlabs.jfire.trade.deliverydate.ArticleDeliveryDateCarrier;
import org.nightlabs.jfire.trade.id.ArticleID;
import org.nightlabs.l10n.IDateFormatter;
/**
* @author Daniel Mazurek - daniel [at] nightlabs [dot] de
*
*/
public class ArticleDeliveryDateCarrierEditingSupport extends EditingSupport
{
private Collection<ArticleDeliveryDateCarrier> articleDeliveryDateCarriers;
/**
* @param viewer
*/
public ArticleDeliveryDateCarrierEditingSupport(final ColumnViewer viewer) {
super(viewer);
}
public void setArticleDeliveryDateCarriers(final Collection<ArticleDeliveryDateCarrier> articleDeliveryDateCarriers) {
this.articleDeliveryDateCarriers = articleDeliveryDateCarriers;
}
protected ArticleDeliveryDateCarrier getArticleDeliveryDateCarrier(final Article article) {
final ArticleID articleID = (ArticleID) JDOHelper.getObjectId(article);
if (articleDeliveryDateCarriers != null) {
for (final ArticleDeliveryDateCarrier articleDeliveryDateCarrier : articleDeliveryDateCarriers) {
if (articleDeliveryDateCarrier.getArticleID().equals(articleID)) {
return articleDeliveryDateCarrier;
}
}
}
return null;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.EditingSupport#canEdit(java.lang.Object)
*/
@Override
protected boolean canEdit(final Object element)
{
if (element instanceof Article) {
final Article article = (Article) element;
return getArticleDeliveryDateCarrier(article) != null;
}
return false;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.EditingSupport#getCellEditor(java.lang.Object)
*/
@Override
protected CellEditor getCellEditor(final Object element)
{
if (element instanceof Article){
return new DateTimeCellEditor((Composite)getViewer().getControl(), IDateFormatter.FLAGS_DATE_SHORT, true);
}
return null;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.EditingSupport#getValue(java.lang.Object)
*/
@Override
protected Object getValue(final Object element)
{
if (element instanceof Article) {
final Article article = (Article) element;
final ArticleDeliveryDateCarrier carrier = getArticleDeliveryDateCarrier(article);
if (carrier != null)
return carrier.getDeliveryDate();
}
return null;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.EditingSupport#setValue(java.lang.Object, java.lang.Object)
*/
@Override
protected void setValue(final Object element, final Object value)
{
if (element instanceof Article) {
final Article article = (Article) element;
final ArticleDeliveryDateCarrier carrier = getArticleDeliveryDateCarrier(article);
Date deliveryDate = null;
if (value instanceof Date) {
deliveryDate = (Date) value;
}
else if (value == null) {
deliveryDate = null;
}
else {
throw new IllegalArgumentException("Param value is neither a Date nor null!"); //$NON-NLS-1$
}
if (carrier != null)
carrier.setDeliveryDate(deliveryDate);
}
getViewer().refresh(true);
}
}