GUI -- Created initial device view
Change-Id: Ie9b2a4e743d7a8070c3dfe736ad5a953547bd2f9
diff --git a/web/gui/src/main/webapp/app/fw/nav/nav.html b/web/gui/src/main/webapp/app/fw/nav/nav.html
index b938b1c..1f74ab1 100644
--- a/web/gui/src/main/webapp/app/fw/nav/nav.html
+++ b/web/gui/src/main/webapp/app/fw/nav/nav.html
@@ -5,4 +5,5 @@
<ul>
<li> <a ng-click="navCtrl.hideNav()" href="#/sample">Sample View</a></li>
<li> <a ng-click="navCtrl.hideNav()" href="#/topo">Topology View</a></li>
+ <li> <a ng-click="navCtrl.hideNav()" href="#/device">Device View</a></li>
</ul>
diff --git a/web/gui/src/main/webapp/app/index.html b/web/gui/src/main/webapp/app/index.html
index 5a61721..d261b3f 100644
--- a/web/gui/src/main/webapp/app/index.html
+++ b/web/gui/src/main/webapp/app/index.html
@@ -57,12 +57,14 @@
<!-- {INJECTED-JAVASCRIPT} -->
<script src="view/sample/sample.js"></script>
<script src="view/topo/topo.js"></script>
+ <script src="view/device/device.js"></script>
<!-- TODO: inject javascript refs server-side -->
<!-- This is where contributed stylesheets will get injected -->
<!-- {INJECTED-STYLESHEETS} -->
<link rel="stylesheet" href="view/sample/sample.css">
<link rel="stylesheet" href="view/topo/topo.css">
+ <link rel="stylesheet" href="view/device/device.css">
<!-- TODO: inject style-sheet refs server-side -->
</head>
<body class="light" ng-app="onosApp">
diff --git a/web/gui/src/main/webapp/app/onos.js b/web/gui/src/main/webapp/app/onos.js
index 2941f17..8f4a618 100644
--- a/web/gui/src/main/webapp/app/onos.js
+++ b/web/gui/src/main/webapp/app/onos.js
@@ -30,6 +30,7 @@
// NOTE: 'ov' == 'Onos View'...
'ovSample',
'ovTopo',
+ 'ovDevice',
// (end of view modules)
// core modules...
@@ -81,6 +82,11 @@
controllerAs: 'ctrl',
templateUrl: 'view/topo/topo.html'
})
+ .when('/device', {
+ controller: 'OvDeviceCtrl',
+ controllerAs: 'ctrl',
+ templateUrl: 'view/device/device.html'
+ })
.otherwise({
redirectTo: '/'
})
diff --git a/web/gui/src/main/webapp/app/view/device/device.css b/web/gui/src/main/webapp/app/view/device/device.css
new file mode 100644
index 0000000..6b6e2e9
--- /dev/null
+++ b/web/gui/src/main/webapp/app/view/device/device.css
@@ -0,0 +1,26 @@
+/*
+ * 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.
+ */
+
+/*
+ ONOS GUI -- Sample View -- CSS file
+
+ @author Simon Hunt
+ */
+
+#ov-device table {
+ border: 1px;
+ /*color: darkorange;*/
+}
\ No newline at end of file
diff --git a/web/gui/src/main/webapp/app/view/device/device.html b/web/gui/src/main/webapp/app/view/device/device.html
new file mode 100644
index 0000000..04fc00a
--- /dev/null
+++ b/web/gui/src/main/webapp/app/view/device/device.html
@@ -0,0 +1,15 @@
+<!-- Device partial HTML -->
+<div id="ov-device">
+ <h2>Device View</h2>
+
+ <table>
+ <tr ng-repeat="dev in ctrl.deviceData">
+ <!-- add more property fields for table from device data -->
+ <td>{{dev.id}}</td>
+ <td>{{dev.mfr}}</td>
+ <td>{{dev.hw}}</td>
+ <td>{{dev.sw}}</td>
+ </tr>
+ </table>
+
+</div>
diff --git a/web/gui/src/main/webapp/app/view/device/device.js b/web/gui/src/main/webapp/app/view/device/device.js
new file mode 100644
index 0000000..72c625e
--- /dev/null
+++ b/web/gui/src/main/webapp/app/view/device/device.js
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+
+/*
+ ONOS GUI -- Sample View Module
+
+ @author Simon Hunt
+ @author Bri Prebilic Cole
+ */
+
+(function () {
+ 'use strict';
+
+ var urlSuffix = '/onos/v1/devices';
+
+ // TODO : refactor into remote service
+ function buildUrl($loc) {
+ return $loc.protocol() + '://' + $loc.host() + ':' + $loc.port();
+ }
+
+ angular.module('ovDevice', [])
+ .controller('OvDeviceCtrl', ['$log', '$http', '$location',
+ function ($log, $http, $loc) {
+ var self = this;
+ self.deviceData = [];
+ var url = buildUrl($loc) + urlSuffix;
+ $log.log(url);
+
+ $http.get(url).then(
+ //success
+ function (response) {
+ self.deviceData = response.data.devices;
+ },
+ //failure
+ function (response) {
+ $log.warn('Failed to get device data ', response.status);
+ }
+ );
+
+ $log.log('OvDeviceCtrl has been created');
+ }]);
+}());
diff --git a/web/gui/src/main/webapp/tests/app/view/device/device-spec.js b/web/gui/src/main/webapp/tests/app/view/device/device-spec.js
new file mode 100644
index 0000000..05575cf
--- /dev/null
+++ b/web/gui/src/main/webapp/tests/app/view/device/device-spec.js
@@ -0,0 +1,78 @@
+/*
+ * 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.
+ */
+
+/*
+ ONOS GUI -- Device Controller - Unit Tests
+
+ @author Simon Hunt
+ */
+describe('Controller: OvDeviceCtrl', function () {
+ // instantiate the Device module
+ beforeEach(module('ovDevice'));
+
+ var $log, $controller, ctrl, $mockHttp;
+
+ var fakeData = {
+ "devices": [
+ {
+ "id": "of:0000000000000001",
+ "available": true,
+ "role": "MASTER",
+ "mfr": "Nicira, Inc.",
+ "hw": "Open vSwitch",
+ "sw": "2.0.1",
+ "serial": "None",
+ "annotations": {
+ "protocol": "OF_10"
+ }
+ },
+ {
+ "id": "of:0000000000000004",
+ "available": true,
+ "role": "MASTER",
+ "mfr": "Nicira, Inc.",
+ "hw": "Open vSwitch",
+ "sw": "2.0.1",
+ "serial": "None",
+ "annotations": {
+ "protocol": "OF_10"
+ }
+ }]
+ };
+
+ // we need an instance of the controller
+ beforeEach(inject(function(_$log_, _$controller_, $httpBackend) {
+ $log = _$log_;
+ $controller = _$controller_;
+ $mockHttp = $httpBackend;
+
+ $mockHttp.whenGET(/devices/).respond(fakeData);
+
+ }));
+
+ //afterEach($mockHttp.resetExpectations);
+
+ it('should be an empty array', function () {
+ ctrl = $controller('OvDeviceCtrl');
+ expect(ctrl.deviceData).toEqual([]);
+ });
+
+ it('should have data in it', function () {
+ ctrl = $controller('OvDeviceCtrl');
+ $mockHttp.flush();
+ expect(ctrl.deviceData).toEqual(fakeData.devices);
+ })
+});
diff --git a/web/gui/src/main/webapp/tests/app/view/device/fakeData.json b/web/gui/src/main/webapp/tests/app/view/device/fakeData.json
new file mode 100644
index 0000000..a6bd78f
--- /dev/null
+++ b/web/gui/src/main/webapp/tests/app/view/device/fakeData.json
@@ -0,0 +1,88 @@
+{
+ "devices": [
+ {
+ "id": "of:0000000000000001",
+ "available": true,
+ "role": "MASTER",
+ "mfr": "Nicira, Inc.",
+ "hw": "Open vSwitch",
+ "sw": "2.0.1",
+ "serial": "None",
+ "annotations": {
+ "protocol": "OF_10"
+ }
+ },
+ {
+ "id": "of:0000000000000004",
+ "available": true,
+ "role": "MASTER",
+ "mfr": "Nicira, Inc.",
+ "hw": "Open vSwitch",
+ "sw": "2.0.1",
+ "serial": "None",
+ "annotations": {
+ "protocol": "OF_10"
+ }
+ },
+ {
+ "id": "of:0000000000000005",
+ "available": true,
+ "role": "MASTER",
+ "mfr": "Nicira, Inc.",
+ "hw": "Open vSwitch",
+ "sw": "2.0.1",
+ "serial": "None",
+ "annotations": {
+ "protocol": "OF_10"
+ }
+ },
+ {
+ "id": "of:0000000000000002",
+ "available": true,
+ "role": "MASTER",
+ "mfr": "Nicira, Inc.",
+ "hw": "Open vSwitch",
+ "sw": "2.0.1",
+ "serial": "None",
+ "annotations": {
+ "protocol": "OF_10"
+ }
+ },
+ {
+ "id": "of:0000000000000003",
+ "available": true,
+ "role": "MASTER",
+ "mfr": "Nicira, Inc.",
+ "hw": "Open vSwitch",
+ "sw": "2.0.1",
+ "serial": "None",
+ "annotations": {
+ "protocol": "OF_10"
+ }
+ },
+ {
+ "id": "of:0000000000000006",
+ "available": true,
+ "role": "MASTER",
+ "mfr": "Nicira, Inc.",
+ "hw": "Open vSwitch",
+ "sw": "2.0.1",
+ "serial": "None",
+ "annotations": {
+ "protocol": "OF_10"
+ }
+ },
+ {
+ "id": "of:0000000000000007",
+ "available": true,
+ "role": "MASTER",
+ "mfr": "Nicira, Inc.",
+ "hw": "Open vSwitch",
+ "sw": "2.0.1",
+ "serial": "None",
+ "annotations": {
+ "protocol": "OF_10"
+ }
+ }
+ ]
+}
\ No newline at end of file