package org.nightlabs.jfire.trade.admin.ui.editor.ownervendor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.forms.editor.IFormPage;
import org.nightlabs.base.ui.action.InheritanceAction;
import org.nightlabs.base.ui.composite.FadeableComposite;
import org.nightlabs.base.ui.composite.XComposite.LayoutMode;
import org.nightlabs.base.ui.editor.ToolBarSectionPart;
import org.nightlabs.base.ui.job.FadeableCompositeJob;
import org.nightlabs.base.ui.job.Job;
import org.nightlabs.jfire.store.ProductType;
import org.nightlabs.jfire.store.id.ProductTypeID;
import org.nightlabs.jfire.trade.LegalEntity;
import org.nightlabs.jfire.trade.admin.ui.editor.AbstractProductTypePageController;
import org.nightlabs.jfire.trade.admin.ui.editor.IProductTypeSectionPart;
import org.nightlabs.jfire.trade.admin.ui.resource.Messages;
import org.nightlabs.progress.ProgressMonitor;
/**
* @author Fitas [at] NightLabs [dot] de
*
*/
public class OwnerConfigSection
extends ToolBarSectionPart
implements IProductTypeSectionPart
{
private InheritAction inheritAction;
private LegalEntityEditComposite ownerEditComposite = null;
private ProductType productType = null;
private FadeableComposite fadeableComposite;
private LegalEntity originalEntity;
public OwnerConfigSection(IFormPage page, Composite parent, int style)
{
super(page, parent, style, Messages.getString("org.nightlabs.jfire.trade.admin.ui.editor.ownervendor.OwnerConfigSection.title")); //$NON-NLS-1$
this.fadeableComposite = new FadeableComposite(getContainer(), SWT.NONE, LayoutMode.TIGHT_WRAPPER);
this.ownerEditComposite = new LegalEntityEditComposite(fadeableComposite,
SWT.NONE);
this.ownerEditComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
ownerEditComposite.addLegalEntityValueChangedListener(
new ILegalEntityValueChangedListener()
{
public void legalEntityValueChanged()
{
// if value has changed
setInheritanceSelection(false);
markDirty();
}
}
);
inheritAction = new InheritAction();
registerAction(inheritAction);
inheritAction.setEnabled(false);
updateToolBarManager();
}
public LegalEntityEditComposite getOwnerEditComposite() {
return ownerEditComposite;
}
public ProductType getProductType() {
return productType;
}
private AbstractProductTypePageController<ProductType> productTypePageController;
public void setProductTypePageController(AbstractProductTypePageController<ProductType> pageController)
{
if (pageController == null || getSection() == null || getSection().isDisposed())
return;
productTypePageController = pageController;
this.productType = pageController.getProductType();
originalEntity = pageController.getProductType().getOwner();
getOwnerEditComposite().setLegalEntity(originalEntity);
setInheritanceSelection(productType.getFieldMetaData(ProductType.FieldName.owner).isValueInherited());
inheritAction.setEnabled(productType.getExtendedProductTypeID() != null);
}
public AbstractProductTypePageController<ProductType> getProductTypePageController()
{
return productTypePageController;
}
public ProductTypeID getExtendedProductTypeID() {
return productType.getExtendedProductTypeID();
}
@Override
public void commit(boolean save) {
productType.getFieldMetaData(ProductType.FieldName.owner).setValueInherited(inheritAction.isChecked());
if (ownerEditComposite != null && isDirty())
{
productType.setOwner(ownerEditComposite.getLegalEntity());
}
super.commit(save);
}
protected boolean getInheritanceSelection() {
return inheritAction.isChecked();
}
protected void setInheritanceSelection(boolean selection) {
inheritAction.setChecked(selection);
}
protected void inheritPressed() {
if( inheritAction.isChecked() )
{
//final ProductType extendedProductType = productTypePageController.getExtendedProductType(new NullProgressMonitor(), getExtendedProductTypeID()); // since this monitor is not yet started, we can directly pass it
FadeableCompositeJob job = new FadeableCompositeJob(Messages.getString("org.nightlabs.jfire.trade.admin.ui.editor.ownervendor.OwnerConfigSection.loadExtendedProductTypeJob.name"), fadeableComposite, null) { //$NON-NLS-1$
@Override
protected IStatus run(ProgressMonitor monitor, Object source)
throws Exception
{
final ProductType extendedProductType = productTypePageController.getExtendedProductType(monitor, getExtendedProductTypeID() ); // since this monitor is not yet started, we can directly pass it
Display.getDefault().syncExec(new Runnable()
{
public void run()
{
if (extendedProductType != null)
getOwnerEditComposite().setLegalEntity(extendedProductType.getOwner());
}
});
return Status.OK_STATUS;
}
};
job.setPriority(Job.SHORT);
job.schedule();
}
else
getOwnerEditComposite().setLegalEntity(originalEntity);
}
class InheritAction
extends InheritanceAction {
@Override
public void run() {
if (productType == null)
return;
inheritPressed();
updateToolBarManager();
markDirty();
}
public void updateState(ProductType productType) {
setChecked(productType.getProductTypeLocal().getFieldMetaData(ProductType.FieldName.owner).isValueInherited());
}
}
}