package net.ms.designer.editors.workflow.editparts;
import java.beans.PropertyChangeEvent;
import java.util.List;
import net.ms.designer.core.MsContext;
import net.ms.designer.editors.packages.ui.PackageEditor;
import net.ms.designer.editors.workflow.commands.MoveNodeCommand;
import net.ms.designer.editors.workflow.figures.FigureFactory;
import net.ms.designer.editors.workflow.figures.NodeFigure;
import net.ms.designer.editors.workflow.figures.WorkflowActivityFigure;
import net.ms.designer.editors.workflow.models.SubFlowActivity;
import net.ms.designer.editors.workflow.models.WorkflowBaseActivity;
import net.ms.designer.editors.workflow.models.WorkflowSubPart;
import net.ms.designer.editors.workflow.policies.NodeDirectEditPolicy;
import net.ms.designer.editors.workflow.policies.NodeGraphicalNodeEditPolicy;
import org.eclipse.draw2d.ChopboxAnchor;
import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.AccessibleEditPart;
import org.eclipse.gef.ConnectionEditPart;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.tools.DirectEditManager;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.internal.UIPlugin;
public class WorkflowBaseActivityEditPart extends WorkflowEditPart {
protected DirectEditManager manager;
/**
* the construct function
*
*/
public WorkflowBaseActivityEditPart() {
super();
}
public void performRequest(Request req) {
// //System.out.println("((WorkflowBaseActivity) getModel()).ifEditAble():"+((WorkflowBaseActivity) getModel()).ifEditAble());
if (((WorkflowBaseActivity) getModel()).ifEditAble()) {
if (req.getType().equals(RequestConstants.REQ_DIRECT_EDIT)) {
if (manager == null) {
WorkflowActivityFigure figure = (WorkflowActivityFigure) getFigure();
manager = new NodeDirectEditManager(this, TextCellEditor.class, new NodeCellEditLocator(figure));
}
manager.show();
}
if(req.getType().equals(RequestConstants.REQ_OPEN) && getModel() instanceof SubFlowActivity)
{
MsContext context;
IWorkbenchPage page = UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow()
.getActivePage();
PackageEditor editor = (PackageEditor)page.getActiveEditor();;
if(editor.getContext() != null)
context = editor.getContext();
else
{
context = new MsContext();
editor.setContext(context);
}
context.change(this , "workflow");
}
}
}
/**
* create the figure of the node
*/
protected IFigure createFigure() {
return FigureFactory.createWFFigure(((WorkflowBaseActivity) getModel())
.getName(), ((WorkflowBaseActivity) getModel()).getIcon());
}
/**
* TODO create the edit policies
*/
public void createEditPolicies() {
// TODO Auto-generated method stub
if(((WorkflowSubPart)getModel()).ifEditAble())
{
installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new NodeDirectEditPolicy());
installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new NodeGraphicalNodeEditPolicy());
}
else
removeEditPolicy(EditPolicy.DIRECT_EDIT_ROLE);
super.createEditPolicies();
}
// /**
// * the property change listener
// */
// public void propertyChange(PropertyChangeEvent evt) {
// String prop = evt.getPropertyName();
// if (prop.equals(WorkflowBaseActivity.ACTIVITY_SIZE)
// || prop.equals(WorkflowBaseActivity.ACTIVITY_LOCATION)
// || prop.equals(WorkflowBaseActivity.PRO_NAME))
// refreshVisuals();
//
// super.propertyChange(evt);
// }
public void propertyChange(PropertyChangeEvent evt) {
// //System.out.println("com.example.parts.NodePart.propertyChange(PropertyChangeEvent evt)");
if (evt.getPropertyName().equals(WorkflowBaseActivity.ACTIVITY_LOCATION))
refreshVisuals();
else if (evt.getPropertyName().equals(WorkflowBaseActivity.PRO_NAME))
refreshVisuals();
else if (evt.getPropertyName().equals(WorkflowBaseActivity.INPUTS))
refreshTargetConnections();
else if (evt.getPropertyName().toLowerCase().equals(WorkflowBaseActivity.OUTPUTS))
{
refreshSourceConnections();
}
super.propertyChange(evt);
}
/**
* refresh the visual aspect of this
*/
protected void refreshVisuals() {
WorkflowBaseActivity node = (WorkflowBaseActivity) getModel();
Point loc = node.getLocation();
// Point loc = new Point(300,300);
Dimension size = node.getSize();
Rectangle rectangle = new Rectangle(loc, size);
((NodeFigure) this.getFigure()).setName(((WorkflowBaseActivity) this.getModel()).getName());
((GraphicalEditPart) getParent()).setLayoutConstraint(this, getFigure(), rectangle);
super.refreshVisuals();
}
protected AccessibleEditPart createAccessible() {
// TODO Auto-generated method stub
return null;
}
protected void IRefreshStatus() {
if(((WorkflowSubPart)getModel()).ifEditAble())
installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new NodeDirectEditPolicy());
else
removeEditPolicy(EditPolicy.DIRECT_EDIT_ROLE);
}
public ConnectionAnchor getTargetConnectionAnchor(Request request) {
// //System.out.println("com.example.parts.NodePart.getTargetConnectionAnchor(Request request)");
return new ChopboxAnchor(getFigure());
}
public ConnectionAnchor getSourceConnectionAnchor(Request request) {
// //System.out.println("com.example.parts.NodePart.getSourceConnectionAnchor(Request request)");
return new ChopboxAnchor(getFigure());
}
protected List getModelSourceConnections() {
// //System.out.println("com.example.parts.NodePart.getModelSourceConnection()");
return ((WorkflowBaseActivity) this.getModel()).getOutputs();
}
protected List getModelTargetConnections() {
// //System.out.println("com.example.parts.NodePart.getModelTargetConnections()");
return ((WorkflowBaseActivity) this.getModel()).getInputs();
}
}