summaryrefslogtreecommitdiff
path: root/src/main/java/com/c2kernel/gui/lifecycle/desc/ElemActDefOutcomeHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/c2kernel/gui/lifecycle/desc/ElemActDefOutcomeHandler.java')
-rw-r--r--src/main/java/com/c2kernel/gui/lifecycle/desc/ElemActDefOutcomeHandler.java44
1 files changed, 42 insertions, 2 deletions
diff --git a/src/main/java/com/c2kernel/gui/lifecycle/desc/ElemActDefOutcomeHandler.java b/src/main/java/com/c2kernel/gui/lifecycle/desc/ElemActDefOutcomeHandler.java
index 1e11f1f..4a43472 100644
--- a/src/main/java/com/c2kernel/gui/lifecycle/desc/ElemActDefOutcomeHandler.java
+++ b/src/main/java/com/c2kernel/gui/lifecycle/desc/ElemActDefOutcomeHandler.java
@@ -6,7 +6,11 @@ import java.io.File;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.entity.agent.Job;
+import com.c2kernel.entity.proxy.ItemProxy;
import com.c2kernel.graph.model.GraphableVertex;
+import com.c2kernel.gui.MainFrame;
import com.c2kernel.gui.graph.view.VertexPropertyPanel;
import com.c2kernel.gui.tabs.outcome.InvalidOutcomeException;
import com.c2kernel.gui.tabs.outcome.InvalidSchemaException;
@@ -16,6 +20,8 @@ import com.c2kernel.gui.tabs.outcome.OutcomeNotInitialisedException;
import com.c2kernel.lifecycle.ActivityDef;
import com.c2kernel.lifecycle.ActivitySlotDef;
import com.c2kernel.lifecycle.CompositeActivityDef;
+import com.c2kernel.persistency.ClusterStorage;
+import com.c2kernel.persistency.outcome.Viewpoint;
import com.c2kernel.process.Gateway;
import com.c2kernel.utils.FileStringUtility;
import com.c2kernel.utils.LocalObjectLoader;
@@ -133,8 +139,12 @@ public class ElemActDefOutcomeHandler extends VertexPropertyPanel implements Out
}
GraphableVertex[] childDefs = compActDef.getLayoutableChildren();
for (GraphableVertex childDef : childDefs) {
- if (childDef instanceof ActivitySlotDef)
- exportAct(dir, imports, ((ActivitySlotDef)childDef).getTheActivityDef());
+ if (childDef instanceof ActivitySlotDef) {
+ if ("last".equals(childDef.getProperties().get("Version"))) {
+ resolveRealVersion((ActivitySlotDef)childDef);
+ }
+ exportAct(dir, imports, ((ActivitySlotDef)childDef).getTheActivityDef());
+ }
}
// export marshalled compAct
FileStringUtility.string2File(new File(new File(dir, "CA"), compActDef.getActName()+".xml"), Gateway.getMarshaller().marshall(compActDef));
@@ -148,6 +158,36 @@ public class ElemActDefOutcomeHandler extends VertexPropertyPanel implements Out
}
}
+ private static void resolveRealVersion(ActivitySlotDef childDef) throws ObjectNotFoundException {
+ String defName = childDef.getActName();
+ ItemProxy actDefItem = LocalObjectLoader.loadLocalObjectDef("/desc/ActivityDesc/", defName);
+ String actType = actDefItem.getProperty("Complexity");
+ Viewpoint last = actDefItem.getViewpoint( actType + "ActivityDef", "last");
+ String[] viewpoints = actDefItem.getContents(ClusterStorage.VIEWPOINT+"/"+actType + "ActivityDef");
+ for (String viewName : viewpoints) {
+ try {
+ Integer.parseInt(viewName);
+ } catch (NumberFormatException e) {
+ continue; // only count integer viewnames
+ }
+ Viewpoint thisView = actDefItem.getViewpoint(actType + "ActivityDef", viewName);
+ if (thisView.getEventId() == last.getEventId()) {
+ JOptionPane.showMessageDialog(null, defName+" defined as 'last'. Will use view "+viewName+" instead");
+ childDef.getProperties().put("Version", viewName);
+ return;
+ }
+ }
+ JOptionPane.showMessageDialog(null, "Last view for "+defName+" has not been materialized. Executing CreateFromLast");
+ try {
+ Job createJob = actDefItem.getJobByName("AssignNewActivityVersionFromLast", MainFrame.userAgent);
+ MainFrame.userAgent.execute(createJob);
+ } catch (Exception e) {
+ Logger.error(e);
+ throw new ObjectNotFoundException("Could not create new version of "+defName+" from last", "");
+ }
+ resolveRealVersion(childDef);
+ }
+
public static void exportScript(String name, Object version, BufferedWriter imports, File dir) {
if (name == null || name.length()==0 || name.contains(":")) return;
try {