ONOS-1479 -- GUI - augmenting topology view for extensibility: WIP.

Change-Id: I11820a9ff8f446c0d10a0311cee5ce448c15f402
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/ButtonDescriptor.java b/core/api/src/main/java/org/onosproject/ui/topo/ButtonDescriptor.java
deleted file mode 100644
index e797130..0000000
--- a/core/api/src/main/java/org/onosproject/ui/topo/ButtonDescriptor.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.onosproject.ui.topo;
-
-/**
- * Designates a descriptor for a button on the topology view panels.
- */
-public class ButtonDescriptor {
-
-    private final String id;
-    private final String glyphId;
-    private final String tooltip;
-
-    /**
-     * Creates a button descriptor with the given identifier, glyph ID, and
-     * tooltip text. To reference a custom glyph defined in the overlay itself,
-     * prefix its ID with an asterisk, (e.g. {@code "*myGlyph"}). Alternatively,
-     * use one of the {@link TopoConstants.Glyphs predefined constant}.
-     *
-     * @param id identifier for the button
-     * @param glyphId identifier for the glyph
-     * @param tooltip tooltip text
-     */
-    public ButtonDescriptor(String id, String glyphId, String tooltip) {
-        this.id = id;
-        this.glyphId = glyphId;
-        this.tooltip = tooltip;
-    }
-
-    /**
-     * Returns the identifier for this button.
-     *
-     * @return identifier
-     */
-    public String id() {
-        return id;
-    }
-
-    /**
-     * Returns the glyph identifier for this button.
-     *
-     * @return glyph identifier
-     */
-    public String glyphId() {
-        return glyphId;
-    }
-
-    /**
-     * Returns the tooltip text for this button.
-     *
-     * @return tooltip text
-     */
-    public String tooltip() {
-        return tooltip;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
-        }
-
-        ButtonDescriptor that = (ButtonDescriptor) o;
-        return id.equals(that.id);
-
-    }
-
-    @Override
-    public int hashCode() {
-        return id.hashCode();
-    }
-}
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/ButtonId.java b/core/api/src/main/java/org/onosproject/ui/topo/ButtonId.java
new file mode 100644
index 0000000..ca2eccc
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/ui/topo/ButtonId.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.onosproject.ui.topo;
+
+import com.google.common.base.MoreObjects;
+
+/**
+ * Designates the identity of a button on the topology view panels.
+ */
+public class ButtonId {
+
+    private final String id;
+
+    /**
+     * Creates a button ID with the given identifier.
+     *
+     * @param id identifier for the button
+     */
+    public ButtonId(String id) {
+        this.id = id;
+    }
+
+    /**
+     * Returns the identifier for this button.
+     *
+     * @return identifier
+     */
+    public String id() {
+        return id;
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(getClass())
+                .add("id", id()).toString();
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        ButtonId that = (ButtonId) o;
+        return id.equals(that.id);
+    }
+
+    @Override
+    public int hashCode() {
+        return id.hashCode();
+    }
+}
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/PropertyPanel.java b/core/api/src/main/java/org/onosproject/ui/topo/PropertyPanel.java
index 43364ea..121e083 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/PropertyPanel.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/PropertyPanel.java
@@ -35,7 +35,7 @@
     private String typeId;
     private String id;
     private List<Prop> properties = new ArrayList<>();
-    private List<ButtonDescriptor> buttons = new ArrayList<>();
+    private List<ButtonId> buttons = new ArrayList<>();
 
     /**
      * Constructs a property panel model with the given title and
@@ -181,7 +181,7 @@
      * @return the button list
      */
     // TODO: consider protecting this?
-    public List<ButtonDescriptor> buttons() {
+    public List<ButtonId> buttons() {
         return buttons;
     }
 
@@ -243,7 +243,7 @@
      * @param button button descriptor
      * @return self, for chaining
      */
-    public PropertyPanel addButton(ButtonDescriptor button) {
+    public PropertyPanel addButton(ButtonId button) {
         buttons.add(button);
         return this;
     }
@@ -254,10 +254,10 @@
      * @param descriptors descriptors to remove
      * @return self, for chaining
      */
-    public PropertyPanel removeButtons(ButtonDescriptor... descriptors) {
-        Set<ButtonDescriptor> forRemoval = Sets.newHashSet(descriptors);
-        List<ButtonDescriptor> toKeep = new ArrayList<>();
-        for (ButtonDescriptor bd: buttons) {
+    public PropertyPanel removeButtons(ButtonId... descriptors) {
+        Set<ButtonId> forRemoval = Sets.newHashSet(descriptors);
+        List<ButtonId> toKeep = new ArrayList<>();
+        for (ButtonId bd: buttons) {
             if (!forRemoval.contains(bd)) {
                 toKeep.add(bd);
             }
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/TopoConstants.java b/core/api/src/main/java/org/onosproject/ui/topo/TopoConstants.java
index a48c253..38a8f03 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/TopoConstants.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/TopoConstants.java
@@ -108,30 +108,22 @@
         public static final String VLAN = "VLAN";
     }
 
-    private static final class CoreButton extends ButtonDescriptor {
-        private CoreButton(String tag, String glyphId, boolean extra) {
-            super("show" + tag + "View",
-                  glyphId,
-                  "Show " + tag + " View" + (extra ? " for this Device" : ""));
-        }
-    }
-
     /**
-     * Defines constants for core buttons that appear on the topology
+     * Defines identities of core buttons that appear on the topology
      * details panel.
      */
     public static final class CoreButtons {
-        public static final ButtonDescriptor SHOW_DEVICE_VIEW =
-                new CoreButton("Device", Glyphs.SWITCH, false);
+        public static final ButtonId SHOW_DEVICE_VIEW =
+                new ButtonId("showDeviceView");
 
-        public static final ButtonDescriptor SHOW_FLOW_VIEW =
-                new CoreButton("Flow", Glyphs.FLOW_TABLE, true);
+        public static final ButtonId SHOW_FLOW_VIEW =
+                new ButtonId("showFlowView");
 
-        public static final ButtonDescriptor SHOW_PORT_VIEW =
-                new CoreButton("Port", Glyphs.PORT_TABLE, true);
+        public static final ButtonId SHOW_PORT_VIEW =
+                new ButtonId("showPortView");
 
-        public static final ButtonDescriptor SHOW_GROUP_VIEW =
-                new CoreButton("Group", Glyphs.GROUP_TABLE, true);
+        public static final ButtonId SHOW_GROUP_VIEW =
+                new ButtonId("showGroupView");
     }
 
 }