GUI -- Topo View: define SVG layer; inject (sample) key bindings and install glyph definitions.

Change-Id: I1c063b0484a9cedcf8e57a35cc51c3c4b35c9329
diff --git a/web/gui/src/main/webapp/app/view/topo/topo.js b/web/gui/src/main/webapp/app/view/topo/topo.js
index 833d0cd..adf7d2a 100644
--- a/web/gui/src/main/webapp/app/view/topo/topo.js
+++ b/web/gui/src/main/webapp/app/view/topo/topo.js
@@ -22,13 +22,65 @@
 
 (function () {
     'use strict';
-    angular.module('ovTopo', ['onosUtil'])
-        .controller('OvTopoCtrl', ['$log', function (_$log_) {
-            var self = this,
-                $log = _$log_;
+
+    var moduleDependencies = [
+        'onosUtil',
+        'onosSvg'
+    ];
+
+    // references to injected services etc.
+    var $log, ks, gs;
+
+    // DOM elements
+    var defs;
+
+    // Internal state
+    // ...
+
+    // Note: "exported" state should be properties on 'self' variable
+
+    var keyBindings = {
+        W: [logWarning, 'log a warning'],
+        E: [logError, 'log an error']
+    };
+
+    // -----------------
+    // these functions are necessarily temporary examples....
+    function logWarning() {
+        $log.warn('You have been warned!');
+    }
+    function logError() {
+        $log.error('You are erroneous!');
+    }
+    // -----------------
+
+    function setUpKeys() {
+        ks.keyBindings(keyBindings);
+    }
+
+    function setUpDefs() {
+        defs = d3.select('#ov-topo svg').append('defs');
+        gs.loadDefs(defs);
+    }
+
+
+    angular.module('ovTopo', moduleDependencies)
+
+        .controller('OvTopoCtrl', [
+            '$log', 'KeyService', 'GlyphService',
+
+        function (_$log_, _ks_, _gs_) {
+            var self = this;
+
+            $log = _$log_;
+            ks = _ks_;
+            gs = _gs_;
 
             self.message = 'Topo View Rocks!';
 
-         $log.log('OvTopoCtrl has been created');
+            setUpKeys();
+            setUpDefs();
+
+            $log.log('OvTopoCtrl has been created');
         }]);
 }());