package org.eclipse.bpmn2.modeler.core.features;
import org.eclipse.bpmn2.BaseElement;
import org.eclipse.bpmn2.FlowNode;
import org.eclipse.bpmn2.di.BPMNEdge;
import org.eclipse.dd.di.DiagramElement;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.context.IReconnectionContext;
import org.eclipse.graphiti.features.context.impl.ReconnectionContext;
import org.eclipse.graphiti.features.impl.DefaultReconnectionFeature;
public class BaseElementReconnectionFeature extends DefaultReconnectionFeature {
public BaseElementReconnectionFeature(IFeatureProvider fp) {
super(fp);
}
@Override
public boolean canReconnect(IReconnectionContext context) {
// TODO Auto-generated method stub
return super.canReconnect(context);
}
@Override
public void preReconnect(IReconnectionContext context) {
// TODO Auto-generated method stub
super.preReconnect(context);
}
@Override
public void postReconnect(IReconnectionContext context) {
super.postReconnect(context);
BPMNEdge edge = BusinessObjectUtil.getFirstElementOfType(context.getConnection(), BPMNEdge.class);
DiagramElement de = BusinessObjectUtil.getFirstElementOfType(context.getTargetPictogramElement(), DiagramElement.class);
if (context.getReconnectType().equals(ReconnectionContext.RECONNECT_TARGET)) {
edge.setTargetElement(de);
}
else {
edge.setSourceElement(de);
}
BaseElement flow = BusinessObjectUtil.getFirstElementOfType(context.getConnection(), BaseElement.class);
BaseElement be = BusinessObjectUtil.getFirstElementOfType(context.getTargetPictogramElement(), BaseElement.class);
if (context.getReconnectType().equals(ReconnectionContext.RECONNECT_TARGET)) {
EStructuralFeature feature = flow.eClass().getEStructuralFeature("targetRef");
if (feature!=null)
flow.eSet(feature, be);
}
else {
EStructuralFeature feature = flow.eClass().getEStructuralFeature("sourceRef");
if (feature!=null)
flow.eSet(feature, be);
}
}
}