diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2014-07-04 17:22:52 +0200 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2014-07-04 17:22:52 +0200 |
| commit | 93837661a3f34e6b267f053e34dfc47b50199865 (patch) | |
| tree | 4d17ecfc1e17e177309beeeff0cccd9efa4f8fbc | |
| parent | 68d086bb6dba7eb2f6f6b638c3ed132269932877 (diff) | |
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
3 files changed, 45 insertions, 5 deletions
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 {
|
