summaryrefslogtreecommitdiff
path: root/src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@cern.ch>2012-06-26 12:41:11 +0200
committerAndrew Branson <andrew.branson@cern.ch>2012-06-26 12:41:11 +0200
commit99eed1e3c7e7292aea91131baeb36f81e23e3e82 (patch)
treeeb1afe9e57736bb1e9113ece476b9d8f0dcc7917 /src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java
Initial refactor from kernel
Diffstat (limited to 'src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java')
-rw-r--r--src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java208
1 files changed, 208 insertions, 0 deletions
diff --git a/src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java b/src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java
new file mode 100644
index 0000000..a853695
--- /dev/null
+++ b/src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java
@@ -0,0 +1,208 @@
+package com.c2kernel.gui.tabs;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridLayout;
+import java.awt.Insets;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.swing.Box;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import com.c2kernel.entity.agent.Job;
+import com.c2kernel.entity.proxy.EntityProxyObserver;
+import com.c2kernel.entity.proxy.ItemProxy;
+import com.c2kernel.entity.proxy.MemberSubscription;
+import com.c2kernel.gui.MainFrame;
+import com.c2kernel.gui.tabs.execution.ActivityItem;
+import com.c2kernel.gui.tabs.execution.ActivityViewer;
+import com.c2kernel.lifecycle.instance.Workflow;
+import com.c2kernel.persistency.ClusterStorage;
+import com.c2kernel.utils.Language;
+import com.c2kernel.utils.Logger;
+
+public class ExecutionPane extends EntityTabPane implements EntityProxyObserver<Workflow> {
+
+ ArrayList<Job> jobList = null;
+ Object jobLock = new Object();
+ ActivityItem emptyAct = new ActivityItem();
+ JLabel noActs = new JLabel(Language.translate("There are currently no activities that you can execute in this item."));
+ JPanel view = new JPanel(new GridLayout(1, 1));
+ ActivityViewer currentActView;
+ JComboBox activitySelector = new JComboBox();
+ Box activityBox = Box.createHorizontalBox();
+ String selAct = null;
+ ArrayList<ActivityItem> activities;
+ String autoRun = null;
+ boolean init = false;
+ boolean formIsActive = false;
+ public ExecutionPane() {
+ super("Execution", "Activity Execution");
+ super.initPanel();
+ // add view panel
+ c = new GridBagConstraints();
+ c.gridx = 0; c.gridy = 1; c.weightx = 1.0; c.weighty = 2.0;
+ c.insets = new Insets(5, 5, 5, 5);
+ c.anchor = GridBagConstraints.CENTER;
+ c.fill = GridBagConstraints.BOTH;
+ gridbag.setConstraints(view, c);
+
+ add(view);
+ // create activity selection box
+ activityBox.add(new JLabel(Language.translate("Select Activity") + ": "));
+ activityBox.add(Box.createHorizontalStrut(5));
+ activitySelector.setEditable(false);
+ activityBox.add(activitySelector);
+ activitySelector.addItemListener(new ItemListener() {
+ @Override
+ public void itemStateChanged(ItemEvent selection) {
+ if (selection.getStateChange() == ItemEvent.SELECTED) {
+ selectActivity(selection.getItem());
+ }
+ }
+ });
+ }
+ @Override
+ public void run() {
+ Thread.currentThread().setName("Execution Pane Builder");
+ sourceEntity.getEntity().subscribe(new MemberSubscription<Workflow>(this, ClusterStorage.LIFECYCLE, false));
+ loadJobList();
+ init = true;
+ if (autoRun != null) {
+ runCommand(autoRun);
+ autoRun = null;
+ }
+ }
+ private void loadJobList() {
+ synchronized (jobLock) {
+ activitySelector.removeAllItems();
+ view.removeAll();
+ activities = new ArrayList<ActivityItem>();
+ try {
+ jobList = ((ItemProxy)sourceEntity.getEntity()).getJobList(MainFrame.userAgent);
+ activitySelector.addItem(emptyAct);
+ for (Job thisJob : jobList) {
+ Logger.msg(7, "ExecutionPane - loadJobList " + thisJob.isOutcomeUsed() + "|" + thisJob.getSchemaType() + "|" + thisJob.getSchemaVersion() + "|");
+ ActivityItem newAct = new ActivityItem(thisJob);
+ if (activities.contains(newAct)) {
+ int actIndex = activities.indexOf(newAct);
+ activities.get(actIndex).addJob(thisJob);
+ } else {
+ Logger.msg(2, "ExecutionPane - Adding activity " + thisJob.getStepPath());
+ addActivity(newAct);
+ }
+ }
+ } catch (Exception e) {
+ Logger.debug("Error fetching joblist");
+ Logger.error(e);
+ }
+
+ switch (activities.size()) {
+ case 0 :
+ view.add(noActs);
+ break;
+ case 1 :
+ currentActView = new ActivityViewer(activities.get(0), (ItemProxy)sourceEntity.getEntity(), this);
+ c.fill = GridBagConstraints.BOTH;
+ gridbag.setConstraints(view, c);
+ view.add(currentActView);
+ currentActView.init();
+ break;
+ default :
+ c.fill = GridBagConstraints.HORIZONTAL;
+ gridbag.setConstraints(view, c);
+ view.add(activityBox);
+ }
+ }
+ revalidate();
+ updateUI();
+ }
+ @Override
+ public void reload() {
+ loadJobList();
+ }
+ private void addActivity(ActivityItem newAct) {
+ if (activities.contains(newAct)) {
+ Logger.msg(6, "ExecutionPane.addActivity(): Already in " + newAct.getStepPath());
+ int actIndex = activities.indexOf(newAct);
+ activitySelector.removeItemAt(actIndex);
+ activitySelector.insertItemAt(newAct, actIndex);
+ activities.set(actIndex, newAct);
+ } else {
+ Logger.msg(6, "ExecutionPane.addActivity(): New " + newAct.getStepPath());
+ activities.add(newAct);
+ activitySelector.addItem(newAct);
+ }
+ }
+ private void selectActivity(Object selObj) {
+ if (selObj.equals(emptyAct))
+ return;
+ view.removeAll();
+ c.fill = GridBagConstraints.BOTH;
+ gridbag.setConstraints(view, c);
+ currentActView = new ActivityViewer((ActivityItem)selObj, (ItemProxy)sourceEntity.getEntity(), this);
+ view.add(currentActView);
+ revalidate();
+ updateUI();
+ currentActView.init();
+ }
+ @Override
+ public void runCommand(String command) {
+ if (init) {
+ for (ActivityItem act : activities) {
+ if (act.name.equals(command)) {
+ selectActivity(act);
+ }
+ }
+ } else
+ autoRun = command;
+ }
+ /**
+ * when the workflow changes, reload this pane.
+ */
+ @Override
+ public void add(Workflow contents) {
+ if (!formIsActive)
+ reload();
+ else { // look to see if this form is now invalid
+ // get the new joblist
+ try {
+ jobList = ((ItemProxy)sourceEntity.getEntity()).getJobList(MainFrame.userAgent);
+ } catch (Exception ex) {
+ return;
+ }
+ // compare to currently editing jobs
+ ArrayList<?> currentActJobs = currentActView.getActivity().getJobs();
+ boolean allValid = true;
+ for (Iterator<?> iter = currentActJobs.iterator(); iter.hasNext() && allValid;) {
+ Job thisJob = (Job)iter.next();
+ boolean stillValid = false;
+ for (Job newJob : jobList) {
+ if (thisJob.equals(newJob)) {
+ stillValid = true;
+ break;
+ }
+ }
+ allValid &= stillValid;
+ }
+ if (!allValid) { // not all transitions are now valid
+ reload(); // refresh the execution pane
+ }
+ }
+ }
+ /**
+ * Not pertinent for this one
+ */
+ @Override
+ public void remove(String id) {
+ }
+ @Override
+ public void control(String control, String msg) {
+ // TODO Auto-generated method stub
+
+ }
+}