package org.nightlabs.jfire.reporting.admin.parameter.ui.editpart; import java.beans.PropertyChangeEvent; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.birt.report.model.api.ModuleHandle; import org.eclipse.birt.report.model.api.ScalarParameterHandle; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.FreeformLayer; import org.eclipse.draw2d.FreeformLayout; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.MarginBorder; import org.eclipse.draw2d.XYLayout; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.editpolicies.RootComponentEditPolicy; import org.eclipse.gef.editpolicies.SnapFeedbackPolicy; import org.eclipse.ui.views.properties.IPropertySource; import org.nightlabs.jdo.ObjectID; import org.nightlabs.jfire.reporting.admin.parameter.ui.editpolicy.ReportXYLayoutEditPolicy; import org.nightlabs.jfire.reporting.admin.parameter.ui.property.ValueAcquistionSetupPropertySource; import org.nightlabs.jfire.reporting.parameter.config.AcquisitionParameterConfig; import org.nightlabs.jfire.reporting.parameter.config.ValueAcquisitionSetup; import org.nightlabs.jfire.reporting.parameter.config.ValueConsumerBinding; import org.nightlabs.jfire.reporting.parameter.config.id.ValueAcquisitionSetupID; /** * @author Daniel.Mazurek [at] NightLabs [dot] de * */ public class ValueAcquisitionSetupEditPart extends AbstractReportParameterEditPart { public ValueAcquisitionSetupEditPart(ValueAcquisitionSetup setup, ModuleHandle reportHandle) { super(); setModel(setup); this.reportHandle = reportHandle; } private ModuleHandle reportHandle; public ValueAcquisitionSetup getValueAcquisitionSetup() { return (ValueAcquisitionSetup) getModel(); } /** * Returns a Figure to represent this. * * @return Figure. */ @Override protected IFigure createFigure() { Figure f = new FreeformLayer(); f.setLayoutManager(new FreeformLayout()); f.setBorder(new MarginBorder(5)); return f; } /** * Installs EditPolicies specific to this. */ @Override protected void createEditPolicies(){ super.createEditPolicies(); installEditPolicy(EditPolicy.NODE_ROLE, null); installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, null); installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, null); installEditPolicy(EditPolicy.COMPONENT_ROLE, new RootComponentEditPolicy()); installEditPolicy(EditPolicy.LAYOUT_ROLE, new ReportXYLayoutEditPolicy( (XYLayout)getContentPane().getLayoutManager())); installEditPolicy("Snap Feedback", new SnapFeedbackPolicy()); //$NON-NLS-1$ } @Override protected ObjectID getObjectID() { return ValueAcquisitionSetupID.create(getValueAcquisitionSetup()); } @SuppressWarnings("unchecked") @Override protected List getModelChildren() { List children = new ArrayList(); validateValueAcquisitionSetupParameterConfigs(); children.addAll(getValueAcquisitionSetup().getParameterConfigs()); children.addAll(getValueAcquisitionSetup().getValueProviderConfigs()); // children.addAll(getValueAcquisitionSetup().getValueConsumerBindings()); return children; } @Override public void propertyChange(PropertyChangeEvent evt) { super.propertyChange(evt); clearAndRefresh(); } public void clearAndRefresh() { getValueAcquisitionSetup().clearBindingIndexes(); refreshChildren(); } @Override protected IPropertySource createPropertySource() { return new ValueAcquistionSetupPropertySource(getValueAcquisitionSetup()); } @SuppressWarnings("unchecked") protected void validateValueAcquisitionSetupParameterConfigs() { List params = reportHandle.getAllParameters(); List<ScalarParameterHandle> reportParams = new ArrayList<ScalarParameterHandle>(params.size()); for (Object param : params) { if (param instanceof ScalarParameterHandle) reportParams.add((ScalarParameterHandle) param); } Map<String, AcquisitionParameterConfig> setupConfigs = new HashMap<String, AcquisitionParameterConfig>(); Set<AcquisitionParameterConfig> unlinkedParamConfigs = new HashSet<AcquisitionParameterConfig>(); for (AcquisitionParameterConfig config : getValueAcquisitionSetup().getParameterConfigs()) { setupConfigs.put(config.getParameterID(), config); unlinkedParamConfigs.add(config); } for (ScalarParameterHandle reportParam : reportParams) { if (!setupConfigs.containsKey(reportParam.getName())) { AcquisitionParameterConfig newConfig = new AcquisitionParameterConfig( getValueAcquisitionSetup(), reportParam.getName(), reportParam.getDataType() ); getValueAcquisitionSetup().getParameterConfigs().add(newConfig); } else { unlinkedParamConfigs.remove(setupConfigs.get(reportParam.getName())); } } for (AcquisitionParameterConfig config : unlinkedParamConfigs) { getValueAcquisitionSetup().getParameterConfigs().remove(config); Map<String, ValueConsumerBinding> bindings = getValueAcquisitionSetup().getValueConsumerBindings(config); if (bindings != null) { for (ValueConsumerBinding binding : bindings.values()) { getValueAcquisitionSetup().getValueConsumerBindings().remove(binding); } } } } @Override public IPropertySource getPropertySource() { return null; } }