package org.nightlabs.jfire.trade.admin.ui.gridpriceconfig; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import javax.jdo.FetchPlan; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.LabelProvider; 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.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.nightlabs.base.ui.composite.AbstractListComposite; import org.nightlabs.base.ui.composite.ListComposite; import org.nightlabs.base.ui.job.Job; import org.nightlabs.jdo.NLJDOHelper; import org.nightlabs.jfire.accounting.AccountingManagerRemote; import org.nightlabs.jfire.accounting.priceconfig.AffectedProductType; import org.nightlabs.jfire.accounting.priceconfig.id.PriceConfigID; 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.ProductTypeName; import org.nightlabs.jfire.store.dao.ProductTypeDAO; import org.nightlabs.jfire.store.id.ProductTypeID; import org.nightlabs.jfire.trade.admin.ui.resource.Messages; import org.nightlabs.progress.ProgressMonitor; import org.nightlabs.util.NLLocale; public class StorePriceConfigsConfirmationDialog extends Dialog { private ListComposite<ProductType> productTypeList; private Set<PriceConfigID> priceConfigIDs; private ProductTypeID productTypeID; private PriceConfigID innerPriceConfigID; public StorePriceConfigsConfirmationDialog(Shell parentShell, Set<PriceConfigID> priceConfigIDs, ProductTypeID productTypeID, PriceConfigID innerPriceConfigID) { super(parentShell); this.priceConfigIDs = priceConfigIDs; this.productTypeID = productTypeID; this.innerPriceConfigID = innerPriceConfigID; } private static class ProductTypeListLabelProvider extends LabelProvider { @Override public String getText(Object element) { ProductType pt = (ProductType) element; return pt.getName().getText(); } } private static final String[] FETCH_GROUPS_PRODUCT_TYPE = { FetchPlan.DEFAULT, ProductType.FETCH_GROUP_NAME }; @Override protected Control createDialogArea(Composite parent) { Composite area = (Composite) super.createDialogArea(parent); new Label(area, SWT.WRAP).setText(Messages.getString("org.nightlabs.jfire.trade.admin.ui.gridpriceconfig.StorePriceConfigsConfirmationDialog.description")); //$NON-NLS-1$ productTypeList = new ListComposite<ProductType>(area, SWT.MULTI | AbstractListComposite.getDefaultWidgetStyle(parent), (String) null, new ProductTypeListLabelProvider()); ProductType dummy = new ProductType("dummy.dummy.org", "dummy", null, ProductType.INHERITANCE_NATURE_LEAF, ProductType.PACKAGE_NATURE_OUTER) { //$NON-NLS-1$ //$NON-NLS-2$ private static final long serialVersionUID = 1L; // get rid of the warning private ProductTypeName name; @Override public ProductTypeName getName() { if (name == null) { name = new ProductTypeName(this); name.setText(NLLocale.getDefault().getLanguage(), Messages.getString("org.nightlabs.jfire.trade.admin.ui.gridpriceconfig.StorePriceConfigsConfirmationDialog.pseudoEntry_loading")); //$NON-NLS-1$ } return name; } @Override protected void calculatePrices() { throw new UnsupportedOperationException("Not implemented!"); //$NON-NLS-1$ } }; productTypeList.addElement(dummy); Job job = new Job(Messages.getString("org.nightlabs.jfire.trade.admin.ui.gridpriceconfig.StorePriceConfigsConfirmationDialog.loadAffectedProductTypesJob.name")) { //$NON-NLS-1$ @Override protected IStatus run(ProgressMonitor monitor) throws Exception { try { AccountingManagerRemote m = JFireEjb3Factory.getRemoteBean(AccountingManagerRemote.class, Login.getLogin().getInitialContextProperties()); Map<PriceConfigID, List<AffectedProductType>> affectedProductTypes = m.getAffectedProductTypes(priceConfigIDs, productTypeID, innerPriceConfigID); Set<ProductTypeID> productTypeIDs = new HashSet<ProductTypeID>(); for (List<AffectedProductType> aptList : affectedProductTypes.values()) { for (AffectedProductType apt : aptList) productTypeIDs.add(apt.getProductTypeID()); } final List<ProductType> productTypes = ProductTypeDAO.sharedInstance().getProductTypes( productTypeIDs, FETCH_GROUPS_PRODUCT_TYPE, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor); Display.getDefault().asyncExec(new Runnable() { public void run() { productTypeList.removeAll(); productTypeList.addElements(productTypes); getShell().pack(true); } }); } catch (Exception e) { throw new RuntimeException(e); } return Status.OK_STATUS; } }; job.setPriority(org.eclipse.core.runtime.jobs.Job.SHORT); job.schedule(); return area; } }