package org.nightlabs.jfire.reporting.admin.parameter.ui.editpolicy; import org.apache.log4j.Logger; import org.eclipse.draw2d.ConnectionAnchor; import org.eclipse.draw2d.IFigure; import org.eclipse.gef.EditPart; import org.eclipse.gef.LayerConstants; import org.eclipse.gef.commands.Command; import org.eclipse.gef.editpolicies.GraphicalNodeEditPolicy; import org.eclipse.gef.requests.CreateConnectionRequest; import org.eclipse.gef.requests.ReconnectRequest; import org.nightlabs.jfire.idgenerator.IDGenerator; import org.nightlabs.jfire.reporting.admin.parameter.ui.command.ConnectionCommand; import org.nightlabs.jfire.reporting.admin.parameter.ui.editpart.AbstractNodeReportEditPart; import org.nightlabs.jfire.reporting.admin.parameter.ui.editpart.ValueAcquisitionSetupEditPart; import org.nightlabs.jfire.reporting.admin.parameter.ui.editpart.ValueProviderConfigEditPart; import org.nightlabs.jfire.reporting.admin.parameter.ui.request.ConnectionCreateRequest; import org.nightlabs.jfire.reporting.parameter.config.ValueAcquisitionSetup; import org.nightlabs.jfire.reporting.parameter.config.ValueConsumer; import org.nightlabs.jfire.reporting.parameter.config.ValueConsumerBinding; import org.nightlabs.jfire.reporting.parameter.config.ValueProviderConfig; /** * @author Daniel.Mazurek [at] NightLabs [dot] de * */ public class ReportNodeEditPolicy extends GraphicalNodeEditPolicy { private static final Logger logger = Logger.getLogger(ReportNodeEditPolicy.class); public ReportNodeEditPolicy() { } @Override protected Command getConnectionCompleteCommand(CreateConnectionRequest request) { ConnectionCommand command = (ConnectionCommand)request.getStartCommand(); command.setTarget(getValueConsumer()); ConnectionAnchor anchor = getNodeEditPart().getTargetConnectionAnchor(request); if (anchor == null) { logger.warn("anchor == null for request "+request); //$NON-NLS-1$ return null; } command.setTargetParameterID(getNodeEditPart().mapConnectionAnchorToParameterID(anchor)); command.setTargetParameterType(getNodeEditPart().mapConnectionAnchorToParameterType(anchor)); return command; } @Override protected Command getConnectionCreateCommand(CreateConnectionRequest request) { ConnectionCommand command = new ConnectionCommand(); ValueAcquisitionSetup setup = null; if (request instanceof ConnectionCreateRequest) { ConnectionCreateRequest connectionCreateRequest = (ConnectionCreateRequest) request; setup = connectionCreateRequest.getValueAcquisitionSetup(); } else { setup = getValueAcquisitionSetup(request); } if (setup == null) logger.warn("ValueAcquisitionSetup == null!"); //$NON-NLS-1$ // only allow source anchors for ValueProviderConfigs if (getValueProviderConfig() == null) return null; command.setValueAcquisitionSetup(setup); command.setBinding(new ValueConsumerBinding( setup.getOrganisationID(), IDGenerator.nextID(ValueConsumerBinding.class), setup)); command.setSource(getValueProviderConfig()); ConnectionAnchor anchor = getNodeEditPart().getSourceConnectionAnchor(request); command.setSourceParameterID(getNodeEditPart().mapConnectionAnchorToParameterID(anchor)); command.setSourceParameterType(getNodeEditPart().mapConnectionAnchorToParameterType(anchor)); request.setStartCommand(command); return command; } @Override protected Command getReconnectSourceCommand(ReconnectRequest request) { ConnectionCommand cmd = new ConnectionCommand(); cmd.setBinding((ValueConsumerBinding)request.getConnectionEditPart().getModel()); ConnectionAnchor anchor = getNodeEditPart().getSourceConnectionAnchor(request); cmd.setSource(getValueProviderConfig()); cmd.setSourceParameterID(getNodeEditPart().mapConnectionAnchorToParameterID(anchor)); cmd.setSourceParameterType(getNodeEditPart().mapConnectionAnchorToParameterType(anchor)); return cmd; } @Override protected Command getReconnectTargetCommand(ReconnectRequest request) { // if (getValueConsumer() instanceof AcquisitionParameterConfig) // return null; ConnectionCommand cmd = new ConnectionCommand(); cmd.setBinding((ValueConsumerBinding)request.getConnectionEditPart().getModel()); ConnectionAnchor anchor = getNodeEditPart().getTargetConnectionAnchor(request); cmd.setTarget(getValueConsumer()); cmd.setTargetParameterID(getNodeEditPart().mapConnectionAnchorToParameterID(anchor)); cmd.setTargetParameterType(getNodeEditPart().mapConnectionAnchorToParameterType(anchor)); return cmd; } public ValueProviderConfig getValueProviderConfig() { if (getHost().getModel() instanceof ValueProviderConfig) return (ValueProviderConfig) getHost().getModel(); return null; } public ValueProviderConfigEditPart getValueProviderConfigEditPart() { if (getHost() instanceof ValueProviderConfigEditPart) return (ValueProviderConfigEditPart) getHost(); return null; } public ValueConsumer getValueConsumer() { return (ValueConsumer) getHost().getModel(); } public AbstractNodeReportEditPart getNodeEditPart() { return (AbstractNodeReportEditPart) getHost(); } @Override protected IFigure getFeedbackLayer() { /* * Fix for Bug# 66590 * Feedback needs to be added to the scaled feedback layer */ return getLayer(LayerConstants.SCALED_FEEDBACK_LAYER); } protected ValueAcquisitionSetup getValueAcquisitionSetup(CreateConnectionRequest request) { EditPart targetEP = request.getTargetEditPart(); if (targetEP != null) { EditPart parentEP = targetEP.getParent(); ValueAcquisitionSetupEditPart vasep = (ValueAcquisitionSetupEditPart) parentEP; return vasep.getValueAcquisitionSetup(); } return null; } }