summaryrefslogtreecommitdiff
path: root/src/main/java/com/c2kernel/lifecycle/instance/gui/model
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/c2kernel/lifecycle/instance/gui/model')
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/gui/model/WfEdgeFactory.java35
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/gui/model/WfGraphPanel.java59
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/gui/model/WfVertexFactory.java92
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/gui/model/WfVertexOutlineCreator.java52
4 files changed, 238 insertions, 0 deletions
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/gui/model/WfEdgeFactory.java b/src/main/java/com/c2kernel/lifecycle/instance/gui/model/WfEdgeFactory.java
new file mode 100644
index 0000000..e96ef37
--- /dev/null
+++ b/src/main/java/com/c2kernel/lifecycle/instance/gui/model/WfEdgeFactory.java
@@ -0,0 +1,35 @@
+package com.c2kernel.lifecycle.instance.gui.model;
+
+import com.c2kernel.graph.model.DirectedEdge;
+import com.c2kernel.graph.model.EdgeFactory;
+import com.c2kernel.graph.model.GraphModelManager;
+import com.c2kernel.graph.model.TypeNameAndConstructionInfo;
+import com.c2kernel.graph.model.Vertex;
+import com.c2kernel.lifecycle.instance.WfVertex;
+
+public class WfEdgeFactory implements EdgeFactory
+{
+ @Override
+ public void create
+ (
+ GraphModelManager graphModelManager,
+ Vertex origin,
+ Vertex terminus,
+ TypeNameAndConstructionInfo typeNameAndConstructionInfo
+ )
+ {
+ if ( validCreation( graphModelManager, origin, terminus ) )
+ ((WfVertex)origin).addNext((WfVertex)terminus);
+
+ }
+
+ private static boolean validCreation( GraphModelManager graphModelManager, Vertex origin, Vertex terminus )
+ {
+ DirectedEdge[] connectingEdgesAToB = graphModelManager.getModel().getConnectingEdges( origin.getID() , terminus.getID() );
+ DirectedEdge[] connectingEdgesBToA = graphModelManager.getModel().getConnectingEdges( terminus.getID(), origin.getID() );
+
+
+ return ( origin != terminus ) && ( connectingEdgesAToB.length == 0 ) && ( connectingEdgesBToA.length == 0 );
+ }
+}
+
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/gui/model/WfGraphPanel.java b/src/main/java/com/c2kernel/lifecycle/instance/gui/model/WfGraphPanel.java
new file mode 100644
index 0000000..16c8e16
--- /dev/null
+++ b/src/main/java/com/c2kernel/lifecycle/instance/gui/model/WfGraphPanel.java
@@ -0,0 +1,59 @@
+/*Created on 21 nov. 2003 */
+package com.c2kernel.lifecycle.instance.gui.model;
+
+import java.awt.Graphics2D;
+
+import com.c2kernel.graph.model.DirectedEdge;
+import com.c2kernel.graph.model.GraphPoint;
+import com.c2kernel.graph.view.DirectedEdgeRenderer;
+import com.c2kernel.graph.view.GraphPanel;
+import com.c2kernel.graph.view.VertexRenderer;
+import com.c2kernel.lifecycle.instance.Next;
+
+/** @author XSeb74*/
+public class WfGraphPanel extends GraphPanel
+{
+ public WfGraphPanel(DirectedEdgeRenderer d,VertexRenderer v)
+ {
+ super(d,v);
+ }
+ // Draws the highlight of the specified edge
+ @Override
+ protected void drawEdgeHighlight(Graphics2D g2d, DirectedEdge edge)
+ {
+ GraphPoint originPoint = edge.getOriginPoint();
+ GraphPoint terminusPoint = edge.getTerminusPoint();
+ GraphPoint midPoint = new GraphPoint();
+
+ if ("Straight".equals(((Next)edge).getProperties().get("Type")) || ((Next)edge).getProperties().get("Type") == null)
+ {
+ midPoint.x = originPoint.x + (terminusPoint.x - originPoint.x) / 2;
+ midPoint.y = originPoint.y + (terminusPoint.y - originPoint.y) / 2;
+ }
+ else if (("Broken +".equals(((Next)edge).getProperties().get("Type"))))
+ {
+ midPoint.x = (originPoint.x + terminusPoint.x) / 2;
+ midPoint.y = (originPoint.y + terminusPoint.y) / 2;
+ }
+ else if (("Broken -".equals(((Next)edge).getProperties().get("Type"))))
+ {
+ boolean arrowOnY = !(originPoint.y - terminusPoint.y < 60 && originPoint.y - terminusPoint.y > -60);
+ midPoint.x = arrowOnY ? terminusPoint.x : (originPoint.x + terminusPoint.x) / 2;
+ midPoint.y = arrowOnY ? (originPoint.y + terminusPoint.y) / 2 : originPoint.y;
+ }
+ else if (("Broken |".equals(((Next)edge).getProperties().get("Type"))))
+ {
+ boolean arrowOnY = !(originPoint.y - terminusPoint.y < 60 && originPoint.y - terminusPoint.y > -60);
+ midPoint.x = arrowOnY ? originPoint.x : (originPoint.x + terminusPoint.x) / 2;
+ midPoint.y = arrowOnY ? (originPoint.y + terminusPoint.y) / 2 : terminusPoint.y;
+ }
+ int minX = midPoint.x - 10;
+ int minY = midPoint.y - 10;
+ int maxX = midPoint.x + 10;
+ int maxY = midPoint.y + 10;
+ g2d.drawLine(minX, minY, maxX, minY);
+ g2d.drawLine(maxX, minY, maxX, maxY);
+ g2d.drawLine(maxX, maxY, minX, maxY);
+ g2d.drawLine(minX, maxY, minX, minY);
+ }
+}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/gui/model/WfVertexFactory.java b/src/main/java/com/c2kernel/lifecycle/instance/gui/model/WfVertexFactory.java
new file mode 100644
index 0000000..39e7ee9
--- /dev/null
+++ b/src/main/java/com/c2kernel/lifecycle/instance/gui/model/WfVertexFactory.java
@@ -0,0 +1,92 @@
+package com.c2kernel.lifecycle.instance.gui.model;
+import java.awt.Point;
+import java.io.Serializable;
+import java.util.HashMap;
+
+import javax.swing.JOptionPane;
+
+import com.c2kernel.graph.model.GraphModelManager;
+import com.c2kernel.graph.model.TypeNameAndConstructionInfo;
+import com.c2kernel.graph.model.VertexFactory;
+import com.c2kernel.lifecycle.ActivityDef;
+import com.c2kernel.lifecycle.chooser.ActivityChooser;
+import com.c2kernel.lifecycle.chooser.WorkflowDialogue;
+import com.c2kernel.lifecycle.instance.Activity;
+import com.c2kernel.lifecycle.instance.CompositeActivity;
+import com.c2kernel.utils.Language;
+import com.c2kernel.utils.LocalObjectLoader;
+import com.c2kernel.utils.Resource;
+public class WfVertexFactory implements VertexFactory, WorkflowDialogue
+{
+ protected CompositeActivity mRootAct = null;
+ @Override
+ public void create(GraphModelManager graphModelManager, Point location, TypeNameAndConstructionInfo typeNameAndConstructionInfo)
+ {
+ String vertexTypeId = null;
+ if (mRootAct != null && typeNameAndConstructionInfo.mInfo instanceof String)
+ {
+ vertexTypeId = (String) typeNameAndConstructionInfo.mInfo;
+ if (vertexTypeId.equals("Atomic") || vertexTypeId.equals("Composite"))
+ {
+ HashMap<String, Serializable> mhm = new HashMap<String, Serializable>();
+ mhm.put("P1", vertexTypeId);
+ mhm.put("P2", location);
+ //************************************************
+ ActivityChooser a =
+ new ActivityChooser(
+ Language.translate("Please enter a Type for the new activity"),
+ Language.translate("New " + vertexTypeId + " Activity"),
+ Resource.findImage("graph/newvertex_large.png").getImage(),
+ this,
+ mhm);
+ a.setVisible(true);
+ }
+ else
+ mRootAct.newChild(vertexTypeId, location);
+ }
+ }
+ @Override
+ public void setCreationContext(Object newContext)
+ {
+ if (newContext != null && newContext instanceof CompositeActivity)
+ mRootAct = (CompositeActivity) newContext;
+ }
+ @Override
+ public void loadThisWorkflow(String newName, HashMap<?, ?> hashMap)
+ {
+ String vertexTypeId = (String) hashMap.get("P1");
+ Point location = (Point) hashMap.get("P2");
+ if (newName == null)
+ return;
+
+
+ String unicName = newName;
+ while (mRootAct.search(mRootAct.getPath() + "/" + unicName) != null)
+ {
+ unicName =
+ (String) JOptionPane.showInputDialog(
+ null,
+ Language.translate("Activity name not unique. Please give another."),
+ Language.translate("New " + vertexTypeId + " Activity"),
+ JOptionPane.QUESTION_MESSAGE,
+ Resource.findImage("graph/newvertex_large.png"),
+ null,
+ null);
+ if (newName.equals(""))
+ return;
+ }
+ Activity act = null;
+ try
+ {
+ ActivityDef actD = LocalObjectLoader.getActDef(newName, "last");
+ act = (Activity)actD.instantiate(unicName);
+ }
+ catch (Exception e)
+ {
+ }
+ if (act == null)
+ mRootAct.newChild(unicName, vertexTypeId, location);
+ else
+ mRootAct.newExistingChild(act, unicName, location);
+ }
+}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/gui/model/WfVertexOutlineCreator.java b/src/main/java/com/c2kernel/lifecycle/instance/gui/model/WfVertexOutlineCreator.java
new file mode 100644
index 0000000..e8cb303
--- /dev/null
+++ b/src/main/java/com/c2kernel/lifecycle/instance/gui/model/WfVertexOutlineCreator.java
@@ -0,0 +1,52 @@
+package com.c2kernel.lifecycle.instance.gui.model;
+
+import java.io.Serializable;
+
+import com.c2kernel.graph.model.GraphPoint;
+import com.c2kernel.graph.model.Vertex;
+import com.c2kernel.graph.model.VertexOutlineCreator;
+import com.c2kernel.lifecycle.instance.Activity;
+
+public class WfVertexOutlineCreator implements VertexOutlineCreator,Serializable
+{
+ private final int mActivityWidth = 130;
+ private final int mActivityHeight = 60;
+ private final int mSplitJoinWidth = 60;
+ private final int mSplitJoinHeight = 25;
+
+ @Override
+ public void setOutline(Vertex vertex)
+ {
+ GraphPoint centrePoint = vertex.getCentrePoint();
+ GraphPoint[] outlinePoints = new GraphPoint[ 4 ];
+ int vertexWidth = 0;
+ int vertexHeight = 0;
+
+ if(vertex instanceof Activity)
+ {
+ vertexWidth = mActivityWidth;
+ vertexHeight = mActivityHeight;
+ }
+ else
+ {
+ vertexWidth = mSplitJoinWidth;
+ vertexHeight = mSplitJoinHeight;
+ }
+
+ outlinePoints[ 0 ] = new GraphPoint();
+ outlinePoints[ 0 ].x = centrePoint.x - vertexWidth / 2;
+ outlinePoints[ 0 ].y = centrePoint.y - vertexHeight / 2;
+ outlinePoints[ 1 ] = new GraphPoint();
+ outlinePoints[ 1 ].x = centrePoint.x + vertexWidth / 2;
+ outlinePoints[ 1 ].y = centrePoint.y - vertexHeight / 2;
+ outlinePoints[ 2 ] = new GraphPoint();
+ outlinePoints[ 2 ].x = centrePoint.x + vertexWidth / 2;
+ outlinePoints[ 2 ].y = centrePoint.y + vertexHeight / 2;
+ outlinePoints[ 3 ] = new GraphPoint();
+ outlinePoints[ 3 ].x = centrePoint.x - vertexWidth / 2;
+ outlinePoints[ 3 ].y = centrePoint.y + vertexHeight / 2;
+
+ vertex.setOutlinePoints( outlinePoints );
+ }
+}
+