/* *****************************************************************************
* JFire - it's hot - Free ERP System - http://jfire.org *
* Copyright (C) 2004-2005 NightLabs - http://NightLabs.org *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 2.1 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin St, Fifth Floor, *
* Boston, MA 02110-1301 USA *
* *
* Or get it online : *
* http://opensource.org/licenses/lgpl-license.php *
* *
* *
******************************************************************************/
package org.nightlabs.jfire.trade.admin.ui.editor.ownervendor;
import javax.jdo.FetchPlan;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
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.nightlabs.base.ui.composite.FadeableComposite;
import org.nightlabs.base.ui.composite.InheritanceToggleButton;
import org.nightlabs.base.ui.composite.XComposite;
import org.nightlabs.base.ui.composite.XComposite.LayoutMode;
import org.nightlabs.base.ui.job.Job;
import org.nightlabs.base.ui.util.RCPUtil;
import org.nightlabs.base.ui.wizard.DynamicPathWizardPage;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.prop.PropertySet;
import org.nightlabs.jfire.security.GlobalSecurityReflector;
import org.nightlabs.jfire.store.ProductType;
import org.nightlabs.jfire.store.dao.ProductTypeDAO;
import org.nightlabs.jfire.store.id.ProductTypeID;
import org.nightlabs.jfire.trade.LegalEntity;
import org.nightlabs.jfire.trade.OrganisationLegalEntity;
import org.nightlabs.jfire.trade.admin.ui.resource.Messages;
import org.nightlabs.progress.ProgressMonitor;
/**
* @author Fitas - fitas at nightlabs dot de
*/
public class OwnerVendorPage
extends DynamicPathWizardPage
{
private ProductTypeID parentProductTypeID;
private ProductType parentProductType;
private LegalEntityEditComposite ownerEditComposite = null;
private LegalEntityEditComposite vendorEditComposite = null;
private InheritanceToggleButton inheritButtonOwner = null;
private InheritanceToggleButton inheritButtonVendor = null;
private boolean ownerInherited = false;
private boolean vendorInherited = false;
private LegalEntity originEntityOwner = null;
private LegalEntity originEntityVendor = null;
public static final String[] FETCH_GROUPS_PARENT_PRODUCT_TYPE = {
FetchPlan.DEFAULT,
ProductType.FETCH_GROUP_OWNER,
ProductType.FETCH_GROUP_VENDOR,
LegalEntity.FETCH_GROUP_PERSON,
PropertySet.FETCH_GROUP_FULL_DATA
};
/**
* @param pageName
*/
public OwnerVendorPage(ProductTypeID parentProductTypeID)
{
super(OwnerVendorPage.class.getName(), Messages.getString("org.nightlabs.jfire.trade.admin.ui.editor.ownervendor.OwnerVendorPage.page.title")); //$NON-NLS-1$
this.setDescription(Messages.getString("org.nightlabs.jfire.trade.admin.ui.editor.ownervendor.OwnerVendorPage.page.description")); //$NON-NLS-1$
this.parentProductTypeID = parentProductTypeID;
inilialize();
}
protected void inilialize() {
Job job = new Job(Messages.getString("org.nightlabs.jfire.trade.admin.ui.editor.ownervendor.OwnerVendorPage.loadingProduct")) { //$NON-NLS-1$
@Override
protected IStatus run(ProgressMonitor monitor)
throws Exception
{
if (parentProductTypeID != null)
parentProductType = ProductTypeDAO.sharedInstance().getProductType(parentProductTypeID, FETCH_GROUPS_PARENT_PRODUCT_TYPE, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor);
Display.getDefault().asyncExec(new Runnable()
{
public void run()
{
if (parentProductType != null)
{
originEntityOwner = parentProductType.getOwner();
originEntityVendor = parentProductType.getVendor();
ownerInherited = true;
vendorInherited = true;
}
}
});
return Status.OK_STATUS;
}
};
job.setPriority(org.eclipse.core.runtime.jobs.Job.SHORT);
job.schedule();
}
public LegalEntityEditComposite getOwnerEditComposite() {
return ownerEditComposite;
}
public LegalEntityEditComposite getVendorEditComposite() {
return vendorEditComposite;
}
@Override
public boolean isPageComplete() {
if(!vendorInherited)
if (originEntityVendor == null)
return false;
if(!ownerInherited)
if (originEntityOwner == null)
return false;
return true;
}
public void configureProductType(ProductType productType)
{
if (originEntityVendor != null)
productType.setVendor(originEntityVendor);
if (originEntityVendor != null)
productType.setOwner(originEntityOwner);
productType.getFieldMetaData(ProductType.FieldName.vendor).setValueInherited(vendorInherited);
productType.getFieldMetaData(ProductType.FieldName.owner).setValueInherited(ownerInherited);
}
/**
* @see org.nightlabs.base.ui.wizard.DynamicPathWizardPage#createPageContents(org.eclipse.swt.widgets.Composite)
*/
@Override
public Control createPageContents(Composite parent)
{
final FadeableComposite page = new FadeableComposite(parent, SWT.NONE, LayoutMode.TIGHT_WRAPPER);
XComposite comp0 = new XComposite(page, SWT.NONE, LayoutMode.ORDINARY_WRAPPER);
comp0.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
comp0.getGridLayout().numColumns = 3;
Label labelOwner = new Label(comp0, SWT.NONE);
labelOwner.setText(Messages.getString("org.nightlabs.jfire.trade.admin.ui.editor.ownervendor.OwnerVendorPage.labelOwner.text")); //$NON-NLS-1$
this.ownerEditComposite = new LegalEntityEditComposite(comp0, SWT.NONE);
this.ownerEditComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
ownerEditComposite.addLegalEntityValueChangedListener(
new ILegalEntityValueChangedListener()
{
public void legalEntityValueChanged()
{
inheritButtonOwner.setSelection(false);
ownerInherited = inheritButtonOwner.getSelection();
// if value has changed
originEntityOwner = getOwnerEntity();
}
});
inheritButtonOwner = new InheritanceToggleButton(comp0,null);
// inheritButtonOwner.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
inheritButtonOwner.setSelection(true);
inheritButtonOwner.addSelectionListener(new SelectionListener(){
public void widgetSelected(SelectionEvent e) {
if(inheritButtonOwner.getSelection())
getOwnerEditComposite().setLegalEntity(parentProductType.getOwner());
else
{
if(originEntityOwner != null)
getOwnerEditComposite().setLegalEntity(originEntityOwner);
}
ownerInherited = inheritButtonOwner.getSelection();
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
// new Label(page, SWT.NONE);
// XComposite comp1 = new XComposite(page, SWT.NONE, LayoutMode.TIGHT_WRAPPER);
// comp1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
// comp1.getGridLayout().numColumns = 3;
Label labelVendor = new Label(comp0, SWT.NONE);
labelVendor.setText(Messages.getString("org.nightlabs.jfire.trade.admin.ui.editor.ownervendor.OwnerVendorPage.labelVendor.text")); //$NON-NLS-1$
this.vendorEditComposite = new LegalEntityEditComposite(comp0, SWT.NONE);
this.vendorEditComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
vendorEditComposite.addLegalEntityValueChangedListener(
new ILegalEntityValueChangedListener()
{
public void legalEntityValueChanged()
{
String VendorOrgId = vendorEditComposite.getLegalEntity().getOrganisationID();
if (!VendorOrgId.equals(GlobalSecurityReflector.sharedInstance().getUserDescriptor().getOrganisationID()) && (vendorEditComposite.getLegalEntity() instanceof OrganisationLegalEntity))
{
MessageDialog.openError(RCPUtil.getActiveShell(),Messages.getString("org.nightlabs.jfire.trade.admin.ui.editor.ownervendor.OwnerVendorPage.errorDialog.title"), Messages.getString("org.nightlabs.jfire.trade.admin.ui.editor.ownervendor.OwnerVendorPage.errorDialog.message")); //$NON-NLS-1$ //$NON-NLS-2$
// revert to original value
vendorEditComposite.setLegalEntity(originEntityVendor);
}
else
{
inheritButtonVendor.setSelection(false);
vendorInherited = inheritButtonVendor.getSelection();
// if value has changed
originEntityVendor = getVendorEntity();
}
}
});
inheritButtonVendor = new InheritanceToggleButton(comp0, null);
inheritButtonVendor.setSelection(true);
inheritButtonVendor.addSelectionListener(new SelectionListener(){
public void widgetSelected(SelectionEvent e) {
if(inheritButtonVendor.getSelection())
getVendorEditComposite().setLegalEntity(parentProductType.getVendor());
else
{
if(originEntityVendor != null)
getVendorEditComposite().setLegalEntity(originEntityVendor);
}
vendorInherited = inheritButtonVendor.getSelection();
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
if (parentProductType != null)
{
getOwnerEditComposite().setLegalEntity(parentProductType.getOwner());
getVendorEditComposite().setLegalEntity(parentProductType.getVendor());
}
return page;
}
public LegalEntity getOwnerEntity()
{
return getOwnerEditComposite().getLegalEntity();
}
public LegalEntity getVendorEntity()
{
return getVendorEditComposite().getLegalEntity();
}
}