From 93837661a3f34e6b267f053e34dfc47b50199865 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Fri, 4 Jul 2014 17:22:52 +0200 Subject: Automatically resolve last references to child activities, finding the numbered version that corresponds to it, or creating a new one that does. Conflicts: src/main/java/com/c2kernel/gui/lifecycle/desc/ElemActDefOutcomeHandler.java --- src/main/java/com/c2kernel/gui/MainFrame.java | 4 +- src/main/java/com/c2kernel/gui/MenuBuilder.java | 2 +- .../lifecycle/desc/ElemActDefOutcomeHandler.java | 44 +++++++++++++++++++++- 3 files changed, 45 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/main/java/com/c2kernel/gui/MainFrame.java b/src/main/java/com/c2kernel/gui/MainFrame.java index cfb0260..5050e5c 100644 --- a/src/main/java/com/c2kernel/gui/MainFrame.java +++ b/src/main/java/com/c2kernel/gui/MainFrame.java @@ -27,8 +27,8 @@ import com.c2kernel.gui.tabs.execution.Executor; import com.c2kernel.gui.tree.Node; import com.c2kernel.gui.tree.NodeContext; import com.c2kernel.lookup.DomainPath; +import com.c2kernel.process.AbstractMain; import com.c2kernel.process.Gateway; -import com.c2kernel.process.StandardClient; import com.c2kernel.utils.Language; import com.c2kernel.utils.Logger; /** @@ -241,7 +241,7 @@ public class MainFrame extends javax.swing.JFrame { "Could not write to preferences file. Preferences have not been updated."); } this.setVisible(false); - StandardClient.close(); + AbstractMain.shutdown(0); // allow waiting threads time to quit try { Thread.sleep(2000); diff --git a/src/main/java/com/c2kernel/gui/MenuBuilder.java b/src/main/java/com/c2kernel/gui/MenuBuilder.java index b597050..eba592f 100644 --- a/src/main/java/com/c2kernel/gui/MenuBuilder.java +++ b/src/main/java/com/c2kernel/gui/MenuBuilder.java @@ -96,7 +96,7 @@ public class MenuBuilder extends JMenuBar implements ActionListener, ItemListene * */ private void addServerConsoles() { - Iterator servers = Gateway.getLookup().search(new DomainPath("/servers"), new Property("Type", "Server")); + Iterator servers = Gateway.getLookup().search(new DomainPath("/servers"), new Property("Type", "Server", false)); while(servers.hasNext()) { Path thisServerPath = (Path)servers.next(); try { 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 { -- cgit v1.2.3