From f852557bf75ef3b13c12ae84ecff82a9c4a5a622 Mon Sep 17 00:00:00 2001
From: Jonathon Lynn Duerig <duerig@flux.utah.edu>
Date: Thu, 9 Jul 2009 22:37:58 +0000
Subject: [PATCH] Now there is a 'ComponentView' which manages the node
 selection/combobox for several Component Managers.

---
 protogeni/demo/src/ComponentView.as | 221 ++++++++++++++++++++++++++++
 1 file changed, 221 insertions(+)
 create mode 100755 protogeni/demo/src/ComponentView.as

diff --git a/protogeni/demo/src/ComponentView.as b/protogeni/demo/src/ComponentView.as
new file mode 100755
index 0000000000..ace3f6123c
--- /dev/null
+++ b/protogeni/demo/src/ComponentView.as
@@ -0,0 +1,221 @@
+/* GENIPUBLIC-COPYRIGHT
+ * Copyright (c) 2008, 2009 University of Utah and the Flux Group.
+ * All rights reserved.
+ *
+ * Permission to use, copy, modify and distribute this software is hereby
+ * granted provided that (1) source code retains these copyright, permission,
+ * and disclaimer notices, and (2) redistributions including binaries
+ * reproduce the notices in supporting documentation.
+ *
+ * THE UNIVERSITY OF UTAH ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ * CONDITION.  THE UNIVERSITY OF UTAH DISCLAIMS ANY LIABILITY OF ANY KIND
+ * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+ */
+
+package
+{
+  // This object populates and takes events from both 'select', a
+  // combo-box used to specify the component manager and 'list', a
+  // listbox with all of the nodes managed by the component manager.
+  import fl.controls.ComboBox;
+  import fl.controls.List;
+  import fl.events.ListEvent;
+  import flash.events.Event;
+
+  class ComponentView
+  {
+    public function ComponentView(newSelect : ComboBox,
+                                  newList : List,
+                                  newNodes : ActiveNodes) : void
+    {
+      select = newSelect;
+      list = newList;
+      list.allowMultipleSelection = true;
+      listStatus = new ListStatusClip();
+      list.addChild(listStatus);
+      listStatus.alpha = 0.3;
+      nodes = newNodes;
+
+      managers = new Array(
+        new ComponentManager("", "", "", "", updateList),
+/*
+        new ComponentManager("e2a9e480-aa9f-11dd-9fcd-001143e43770",
+                             "ProtoGENI",
+                             ".emulab.net",
+                             "https://myboss.myelab.testbed.emulab.net:443/protogeni/xmlrpc",
+                             updateList),
+*/
+        new ComponentManager("28a10955-aa00-11dd-ad1f-001143e453fe",
+                             "Emulab",
+                             ".emulab.net",
+                             "https://boss.emulab.net:443/protogeni/xmlrpc/",
+                             updateList)/*,
+        new ComponentManager("be300821-ecb7-11dd-a0f8-001143e43ff3",
+                             "gtwelab",
+                             ".emulab.net",
+                             "https://myboss.emulab.geni.emulab.net:443/protogeni/xmlrpc",
+                             updateList),
+        new ComponentManager("b83b47be-e7f0-11dd-848b-0013468d3dc8",
+                             "Kentucky",
+                             ".uky.emulab.net",
+                             "https://www.uky.emulab.net/protogeni/xmlrpc",
+                             updateList),
+        new ComponentManager("f38e8571-f7af-11dd-ab88-00304868a4be",
+                             "Wisconsin",
+                             ".schooner.wail.wisc.edu",
+                             "https://www.schooner.wail.wisc.edu/protogeni/xmlrpc",
+                             updateList),
+        new ComponentManager("", "CMU", ".cmcl.cs.cmu.edu",
+                             "https://boss.cmcl.cs.cmu.edu/protogeni/xmlrpc",
+                             updateList)*/);
+      select.removeAll();
+      select.selectedIndex = 0;
+      select.rowCount = 4;
+
+      var i : int = 0;
+      for (; i < managers.length; ++i)
+      {
+        select.addItem(new ListItem(managers[i].getName(), managers[i]));
+      }
+
+      managers[0].setState(ComponentManager.NORMAL);
+
+      list.addEventListener(ListEvent.ITEM_CLICK, clickItem);
+      list.addEventListener(Event.CHANGE, changeItem);
+      select.addEventListener(Event.CHANGE, changeComponent);
+
+      updateList();
+    }
+
+    public function cleanup() : void
+    {
+      list.removeEventListener(ListEvent.ITEM_CLICK, clickItem);
+      list.removeEventListener(Event.CHANGE, changeItem);
+      select.removeEventListener(Event.CHANGE, changeComponent);
+      listStatus.parent.removeChild(listStatus);
+    }
+
+    public function getManagers() : Array
+    {
+      return managers;
+    }
+
+/*
+    public function getTicket(index : int) : String
+    {
+      return tickets[index];
+    }
+
+    public function setTicket(index : int, value : String) : void
+    {
+      tickets[index] = value;
+    }
+
+    public function getUrl(index : int) : String
+    {
+      return cmUrls[index];
+    }
+*/
+/*
+    public function getCmCount() : int
+    {
+      return managers.length;
+    }
+*/
+/*
+    public function removeNode(cm : ComponentManager, nodeIndex : int) : void
+    {
+      cm.removeUsed(nodeIndex);
+      if (cm == select.selectedItem.data)
+      {
+        updateList();
+      }
+    }
+*/
+    function clickItem(event : ListEvent) : void
+    {
+      var cm : ComponentManager = managers[select.selectedIndex];
+      if (! cm.isUsed(event.index))
+      {
+        var component = cm.getComponent(event.index);
+        nodes.addNode(component, cm, event.index,
+                      select.stage.mouseX, select.stage.mouseY);
+        cm.addUsed(event.index);
+      }
+      list.selectedIndices = cm.getUsed();
+    }
+
+    function changeItem(event : Event) : void
+    {
+      list.selectedIndices = managers[select.selectedIndex].getUsed();
+    }
+
+    function changeComponent(event : Event) : void
+    {
+      updateList();
+    }
+
+    function updateList() : void
+    {
+      var cm = managers[select.selectedIndex];
+      list.removeAll();
+      list.clearSelection();
+      var i : int = 0;
+      for (; i < cm.getComponentCount(); ++i)
+      {
+        list.addItem(new ListItem(cm.getComponent(i).name, "NodeNone"));
+      }
+      list.selectedIndices = cm.getUsed();
+      if (cm.getState() == ComponentManager.NORMAL)
+      {
+        listStatus.visible = false;
+      }
+      else if (cm.getState() == ComponentManager.LOADING)
+      {
+        listStatus.visible = true;
+        listStatus.text.text = "Loading";
+        listStatus.text.backgroundColor = 0x00ff00;
+      }
+      else
+      {
+        listStatus.visible = true;
+        listStatus.text.text = "Failed";
+        listStatus.text.backgroundColor = 0xff0000;
+      }
+    }
+/*
+    public function succeedResources(cm : ComponentManager, str : String)
+    {
+      cm.populateNodes(str);
+      updateList();
+    }
+
+    public function failResources(cm : ComponentManager)
+    {
+      cm.setState(FAILED);
+      updateList();
+    }
+*/
+    var select : ComboBox;
+    var list : List;
+    var listStatus : ListStatusClip;
+    var nodes : ActiveNodes;
+    // The ComponentManagers
+    var managers : Array;
+/*
+    // An array of arrays. Outer == CM, inner == Component
+    var components : Array;
+
+    var used : Array;
+    var tickets : Array;
+    var states : Array;
+*/
+/*
+    public static var hostName : Array = new Array("",
+    public static var cmNames : Array = new Array("", ,
+    static var cmUrls : Array =
+    static var cmUuids : Array =
+    static var cmResults : Array =
+*/
+  }
+}
-- 
GitLab