package com.jorambarrez; import java.beans.PropertyChangeEvent; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.pantar.widget.graph.server.DefaultNode; import com.pantar.widget.graph.server.GraphComponent; import com.pantar.widget.graph.server.GraphModel; import com.pantar.widget.graph.server.elements.BeginNode; import com.pantar.widget.graph.server.elements.EndNode; import com.pantar.widget.graph.server.elements.ProcessCreationNode; import com.pantar.widget.graph.server.elements.SplitNode; import com.pantar.widget.graph.server.events.NodeEventType; import com.pantar.widget.graph.server.events.PropertyChangeCallback; import com.pantar.widget.graph.server.factories.GraphModelFactory; import com.vaadin.Application; import com.vaadin.terminal.gwt.server.HttpServletRequestListener; import com.vaadin.ui.Label; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; @SuppressWarnings("serial") public class ModelerApp extends Application implements HttpServletRequestListener { protected static ThreadLocal<ModelerApp> current = new ThreadLocal<ModelerApp>(); protected Window window; protected FlowEditor flowEditor; public void init() { window = new Window("Flow editor prototype"); window.setSizeFull(); setTheme("activiti"); setMainWindow(window); flowEditor = new FlowEditor(); window.setContent(flowEditor); // tryGraphWidget(window); } protected void tryGraphWidget(Window window) { // = Create the model. final GraphModel graphModel = GraphModelFactory.getGraphModelInstance(); // = Support for single click to select nodes. graphModel.setSingleSelectionSupport(Boolean.TRUE); // = Create some nodes. com.pantar.widget.graph.server.Node begin = new BeginNode(); begin.setPosition(100.0, 200.0); graphModel.addNode(begin); com.pantar.widget.graph.server.Node splitNode = new SplitNode(); splitNode.setPosition(100.0, 250.0); graphModel.addNode(splitNode); final com.pantar.widget.graph.server.Node nodeA = new DefaultNode(); nodeA.setLabel("NodeA"); nodeA.setPosition(200.0, 200.0); graphModel.addNode(nodeA); com.pantar.widget.graph.server.Node processCreation = new ProcessCreationNode(); processCreation.setLabel("Process"); processCreation.setPosition(200.0, 300.0); graphModel.addNode(processCreation); com.pantar.widget.graph.server.Node end = new EndNode(); end.setPosition(300.0, 200.0); graphModel.addNode(end); // // = Nodes meet nodes!. // final DefaultRelationStyle dashedBlue = new DefaultRelationStyle(); // // final DefaultRelationStyle straightRed = new DefaultRelationStyle(); // // final DefaultRelationStyle defaultNormalBlack = new DefaultRelationStyle(); // // // = Tie all the stuff. // graphModel.connect(begin, splitNode, straightRed); // graphModel.connect(splitNode, nodeA, dashedBlue); // graphModel.connect(splitNode, nodeB, defaultNormalBlack); // graphModel.connect(nodeA, end, RelationTypeEnum.BEZIER); // graphModel.connect(nodeB, processCreation, RelationTypeEnum.BEZIER, new DefaultRelationStyle().strokeColor(GraphConstants.DOM.CSS_GREEN_VALUE)); // graphModel.connect(processCreation, end, RelationTypeEnum.LINE); // = Create the component and pass the model on its constructor. final GraphComponent component = new GraphComponent(graphModel); component.setHeight(500, Label.UNITS_PIXELS); component.setWidth(500, Label.UNITS_PIXELS); // = Add the component to a container... final VerticalLayout layout = new VerticalLayout(); layout.setMargin(true); layout.setSpacing(true); layout.addComponent(component); graphModel.registerCallback(NodeEventType.SELECTED, new PropertyChangeCallback() { public void onPropertyChange(PropertyChangeEvent propertyChangeEvent) { System.out.println("Property=" + propertyChangeEvent.getPropertyName()); System.out.println("New Value:" + propertyChangeEvent.getNewValue()); System.out.println("Old Value:" + propertyChangeEvent.getOldValue()); } }); window.setContent(layout); } public Window getWindow() { return window; } public FlowEditor getFlowEditor() { return flowEditor; } public static ModelerApp get() { return current.get(); } public void onRequestStart(HttpServletRequest request, HttpServletResponse response) { current.set(this); } public void onRequestEnd(HttpServletRequest request, HttpServletResponse response) { current.remove(); } }