package org.nightlabs.jfire.voucher.ui.articlecontainer.detail;
import java.util.Collection;
import javax.jdo.FetchPlan;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.nightlabs.base.ui.composite.MessageComposite;
import org.nightlabs.base.ui.message.MessageType;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.accounting.Currency;
import org.nightlabs.jfire.accounting.priceconfig.PriceConfig;
import org.nightlabs.jfire.base.JFireEjb3Factory;
import org.nightlabs.jfire.base.login.ui.Login;
import org.nightlabs.jfire.store.ProductType;
import org.nightlabs.jfire.store.id.ProductTypeID;
import org.nightlabs.jfire.trade.Article;
import org.nightlabs.jfire.trade.FetchGroupsTrade;
import org.nightlabs.jfire.trade.Offer;
import org.nightlabs.jfire.trade.Order;
import org.nightlabs.jfire.trade.id.OfferID;
import org.nightlabs.jfire.trade.id.SegmentID;
import org.nightlabs.jfire.trade.ui.articlecontainer.detail.AbstractArticleAdder;
import org.nightlabs.jfire.voucher.VoucherManagerRemote;
import org.nightlabs.jfire.voucher.dao.VoucherTypeDAO;
import org.nightlabs.jfire.voucher.store.VoucherType;
import org.nightlabs.jfire.voucher.ui.resource.Messages;
import org.nightlabs.progress.ProgressMonitor;
public class ArticleAdder
extends AbstractArticleAdder
{
private VoucherType voucherType;
@Override
protected Composite _createComposite(Composite parent)
{
return new ArticleAdderComposite(parent, this);
}
// public static final String[] FETCH_GROUPS_VOUCHER_TYPE = {
// FetchPlan.DEFAULT, ProductType.FETCH_GROUP_NAME
// };
@Override
public void setProductTypeID(ProductTypeID productTypeID, ProgressMonitor monitor)
{
// this.voucherType = VoucherTypeDAO.sharedInstance().getVoucherType(
// productTypeID, FETCH_GROUPS_VOUCHER_TYPE, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor);
this.voucherType = VoucherTypeDAO.sharedInstance().getVoucherType(
productTypeID, getFetchGroups(), NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor);
}
@Override
public ProductType getProductType()
{
return voucherType;
}
@SuppressWarnings("unchecked")
public Collection<Article> createArticles(SegmentID segmentID, OfferID offerID, ProductTypeID productTypeID, int qty)
throws Exception
{
VoucherManagerRemote vm = JFireEjb3Factory.getRemoteBean(VoucherManagerRemote.class, Login.getLogin().getInitialContextProperties());
return (Collection<Article>) vm.createArticles(
segmentID, offerID, productTypeID, qty,
getFetchGroups(), NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT);
}
protected String[] getFetchGroups() {
Class<?> articleContainerClass = getSegmentEdit().getArticleContainerClass();
String fetchGroupTrade_article;
if (Order.class.isAssignableFrom(articleContainerClass)) {
fetchGroupTrade_article = FetchGroupsTrade.FETCH_GROUP_ARTICLE_IN_ORDER_EDITOR;
}
else if (Offer.class.isAssignableFrom(articleContainerClass)) {
fetchGroupTrade_article = FetchGroupsTrade.FETCH_GROUP_ARTICLE_IN_OFFER_EDITOR;
}
else
throw new IllegalStateException("Why is this ArticleAdder in an unknown segment context? articleContainerClass=" + articleContainerClass); //$NON-NLS-1$
return new String[] {
fetchGroupTrade_article,
FetchPlan.DEFAULT,
ProductType.FETCH_GROUP_PACKAGE_PRICE_CONFIG,
PriceConfig.FETCH_GROUP_CURRENCIES
};
}
@Override
protected Composite createRequirementsNotFulfilledComposite(Composite parent) {
Composite result = super.createRequirementsNotFulfilledComposite(parent);
if (result != null)
return result;
Currency currency;
Class<?> articleContainerClass = getSegmentEdit().getArticleContainerClass();
if (Order.class.isAssignableFrom(articleContainerClass)) {
currency = ((Order)getSegmentEdit().getArticleContainer()).getCurrency();
}
else if (Offer.class.isAssignableFrom(articleContainerClass)) {
currency = ((Offer)getSegmentEdit().getArticleContainer()).getCurrency();
}
else
throw new IllegalStateException("Why is this ArticleAdder in an unknown segment context? articleContainerClass=" + articleContainerClass); //$NON-NLS-1$
if (!getProductType().getPackagePriceConfig().containsCurrency(currency))
return new MessageComposite(
parent, SWT.NONE,
String.format(Messages.getString("org.nightlabs.jfire.voucher.ui.articlecontainer.detail.ArticleAdder.priceConfigDoesNotContainCurrencyMessage"), getProductType().getName().getText(), currency.getCurrencySymbol(), currency.getCurrencyID()), //$NON-NLS-1$
MessageType.WARNING
);
return null;
}
}