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 mhm = new HashMap(); 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.getImageResource("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.getImageResource("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); } }