package org.nightlabs.jfire.trade.ui.detail;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.nightlabs.base.ui.composite.XComposite;
import org.nightlabs.jfire.base.jdo.JDOObjectID2PCClassMap;
import org.nightlabs.jfire.store.ProductType;
import org.nightlabs.jfire.store.id.ProductTypeID;
import org.nightlabs.jfire.trade.ui.resource.Messages;
/**
* @author Alexander Bieber <!-- alex [AT] nightlabs [DOT] de -->
* @author Marc Klinger - marc[at]nightlabs[dot]de
*/
public class ProductTypeDetailViewComposite extends XComposite {
private IMemento restoreMemento = null;
private Map<Class<? extends ProductType>, IProductTypeDetailView> detailViews = new HashMap<Class<? extends ProductType>, IProductTypeDetailView>();
private Map<IProductTypeDetailView, Composite> detailComposites = new HashMap<IProductTypeDetailView, Composite>();
public ProductTypeDetailViewComposite(Composite parent, int style) {
super(parent, style);
setLayout(new StackLayout());
FormToolkit toolkit = new FormToolkit(getDisplay());
Composite composite = toolkit.createComposite(this);
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
composite.setLayout(new GridLayout(1, false));
Label label = toolkit.createLabel(composite, Messages.getString("org.nightlabs.jfire.trade.ui.detail.ProductTypeDetailViewComposite.emptySelectionLabel")); //$NON-NLS-1$
label.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
getStackLayout().topControl = composite;
}
protected StackLayout getStackLayout() {
return (StackLayout) getLayout();
}
@SuppressWarnings("unchecked")
public void showProductTypeDetail(ProductTypeID productTypeID) {
Class<? extends ProductType> pTypeClass = (Class<? extends ProductType>) JDOObjectID2PCClassMap.sharedInstance().getPersistenceCapableClass(productTypeID);
IProductTypeDetailView detailView = detailViews.get(pTypeClass);
if (detailView == null) {
detailView = ProductTypeDetailViewRegistry.sharedInstance().createProductTypeDetailView(pTypeClass);
detailViews.put(pTypeClass, detailView);
if (restoreMemento != null) {
IMemento detailViewMemento = restoreMemento.getChild(getXMLClassName(pTypeClass));
if (detailViewMemento != null) {
detailView.init(detailViewMemento);
}
}
Composite composite = detailView.createComposite(this);
detailComposites.put(detailView, composite);
}
Composite composite = detailComposites.get(detailView);
getStackLayout().topControl = composite;
this.layout(true, true);
detailView.setProductTypeID(productTypeID);
}
public void saveState(IMemento memento) {
for (Entry<Class<? extends ProductType>, IProductTypeDetailView> entry : detailViews.entrySet()) {
IMemento detailViewMemento = memento.createChild(getXMLClassName(entry.getKey()));
entry.getValue().saveState(detailViewMemento);
}
}
private String getXMLClassName(Class<?> clazz) {
return clazz.getName().replaceAll("\\.", "_"); //$NON-NLS-1$ //$NON-NLS-2$
}
public void init(IMemento memento) {
this.restoreMemento = memento;
}
}