diff --git a/apps/cpman/app/src/main/java/org/onosproject/cpman/gui/CpmanUI.java b/apps/cpman/app/src/main/java/org/onosproject/cpman/gui/CpmanUI.java new file mode 100644 index 0000000000..fd11ee7e24 --- /dev/null +++ b/apps/cpman/app/src/main/java/org/onosproject/cpman/gui/CpmanUI.java @@ -0,0 +1,79 @@ +/* + * Copyright 2016 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.cpman.gui; + +import com.google.common.collect.ImmutableList; +import org.apache.felix.scr.annotations.Activate; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Deactivate; +import org.apache.felix.scr.annotations.Reference; +import org.apache.felix.scr.annotations.ReferenceCardinality; +import org.apache.felix.scr.annotations.Service; +import org.onosproject.ui.UiExtension; +import org.onosproject.ui.UiExtensionService; +import org.onosproject.ui.UiMessageHandlerFactory; +import org.onosproject.ui.UiView; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +import static org.onosproject.ui.UiView.Category.NETWORK; + +/** + * Mechanism to stream data to the GUI. + */ +@Component(immediate = true, enabled = true) +@Service(value = CpmanUI.class) +public class CpmanUI { + private static final String CPMAN_ID = "cpman"; + private static final String CPMAN_TEXT = "Control Plane Manager"; + private static final String RES_PATH = "gui"; + private static final ClassLoader CL = CpmanUI.class.getClassLoader(); + + private final Logger log = LoggerFactory.getLogger(getClass()); + + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) + protected UiExtensionService uiExtensionService; + + // Factory for UI message handlers + private final UiMessageHandlerFactory messageHandlerFactory = + () -> ImmutableList.of(new CpmanViewMessageHandler()); + + // List of application views + private final List views = ImmutableList.of( + new UiView(NETWORK, CPMAN_ID, CPMAN_TEXT) + ); + + // Application UI extension + private final UiExtension uiExtension = + new UiExtension.Builder(CL, views) + .messageHandlerFactory(messageHandlerFactory) + .resourcePath(RES_PATH) + .build(); + + @Activate + protected void activate() { + uiExtensionService.register(uiExtension); + log.info("Started"); + } + + @Deactivate + protected void deactivate() { + uiExtensionService.unregister(uiExtension); + log.info("Stopped"); + } +} diff --git a/apps/cpman/app/src/main/java/org/onosproject/cpman/gui/CpmanViewMessageHandler.java b/apps/cpman/app/src/main/java/org/onosproject/cpman/gui/CpmanViewMessageHandler.java new file mode 100644 index 0000000000..7b7e4d92a3 --- /dev/null +++ b/apps/cpman/app/src/main/java/org/onosproject/cpman/gui/CpmanViewMessageHandler.java @@ -0,0 +1,59 @@ +/* + * Copyright 2016 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.cpman.gui; + +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.google.common.collect.ImmutableSet; +import org.onosproject.ui.RequestHandler; +import org.onosproject.ui.UiMessageHandler; + +import java.util.Collection; +import java.util.Random; + +/** + * CpmanViewMessageHandler class implementation. + */ +public class CpmanViewMessageHandler extends UiMessageHandler { + + private static final String CPMAN_DATA_REQ = "cpmanDataRequest"; + private static final String CPMAN_DATA_RESP = "cpmanDataResponse"; + + private static final String RANDOM = "random"; + + @Override + protected Collection createRequestHandlers() { + return ImmutableSet.of( + new CpmanDataRequestHandler() + ); + } + + // handler for sample data requests + private final class CpmanDataRequestHandler extends RequestHandler { + + private CpmanDataRequestHandler() { + super(CPMAN_DATA_REQ); + } + + @Override + public void process(long sid, ObjectNode payload) { + ObjectNode result = objectNode(); + Random random = new Random(); + result.put(RANDOM, random.nextInt(50) + 1); + + sendMessage(CPMAN_DATA_RESP, 0, result); + } + } +} diff --git a/apps/cpman/app/src/main/java/org/onosproject/cpman/gui/package-info.java b/apps/cpman/app/src/main/java/org/onosproject/cpman/gui/package-info.java new file mode 100644 index 0000000000..4bc742610f --- /dev/null +++ b/apps/cpman/app/src/main/java/org/onosproject/cpman/gui/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2016 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. + */ + +/** + * Web GUI for the control plane manager. + */ +package org.onosproject.cpman.gui; \ No newline at end of file diff --git a/apps/cpman/app/src/main/resources/app/view/cpman/cpman.css b/apps/cpman/app/src/main/resources/app/view/cpman/cpman.css new file mode 100644 index 0000000000..6ec4c9d881 --- /dev/null +++ b/apps/cpman/app/src/main/resources/app/view/cpman/cpman.css @@ -0,0 +1,61 @@ +/* + * Copyright 2016 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 -- Control Plane Manager -- CSS file + */ + +#ov-cpman { + padding: 20px; +} +.light #ov-cpman { + color: navy; +} +.dark #ov-cpman { + color: #88f; +} + +#ov-cpman .button-panel { + margin: 10px; + width: 200px; +} + +.light #ov-cpman .button-panel { + background-color: #ccf; +} +.dark #ov-cpman .button-panel { + background-color: #444; +} + +#ov-cpman .my-button { + cursor: pointer; + padding: 4px; + text-align: center; +} + +.light #ov-cpman .my-button { + color: white; + background-color: #99d; +} +.dark #ov-cpman .my-button { + color: black; + background-color: #aaa; +} + +#ov-cpman .number { + font-size: 140%; + text-align: right; +} \ No newline at end of file diff --git a/apps/cpman/app/src/main/resources/app/view/cpman/cpman.html b/apps/cpman/app/src/main/resources/app/view/cpman/cpman.html new file mode 100644 index 0000000000..d7cd832a2c --- /dev/null +++ b/apps/cpman/app/src/main/resources/app/view/cpman/cpman.html @@ -0,0 +1,17 @@ + +
+
+
+ Fetch Data +
+
+ +
+ + + + + +
Number {{data.random}}
+
+
diff --git a/apps/cpman/app/src/main/resources/app/view/cpman/cpman.js b/apps/cpman/app/src/main/resources/app/view/cpman/cpman.js new file mode 100644 index 0000000000..b2299a6399 --- /dev/null +++ b/apps/cpman/app/src/main/resources/app/view/cpman/cpman.js @@ -0,0 +1,87 @@ +/* + * Copyright 2016 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 -- Control Plane Manager View Module + */ +(function () { + 'use strict'; + + // injected refs + var $log, $scope, wss, ks; + + // constants + var dataReq = 'cpmanDataRequest', + dataResp = 'cpmanDataResponse'; + + function addKeyBindings() { + var map = { + space: [getData, 'Fetch data from server'], + + _helpFormat: [ + ['space'] + ] + }; + + ks.keyBindings(map); + } + + function getData() { + wss.sendEvent(dataReq); + } + + function respDataCb(data) { + $scope.data = data; + $scope.$apply(); + } + + + angular.module('ovCpman', []) + .controller('OvCpmanCtrl', + ['$log', '$scope', 'WebSocketService', 'KeyService', + + function (_$log_, _$scope_, _wss_, _ks_) { + $log = _$log_; + $scope = _$scope_; + wss = _wss_; + ks = _ks_; + + var handlers = {}; + $scope.data = {}; + + // data response handler + handlers[dataResp] = respDataCb; + wss.bindHandlers(handlers); + + addKeyBindings(); + + // custom click handler + $scope.getData = getData; + + // get data the first time... + getData(); + + // cleanup + $scope.$on('$destroy', function () { + wss.unbindHandlers(handlers); + ks.unbindKeys(); + $log.log('OvCpmanCtrl has been destroyed'); + }); + + $log.log('OvCpmanCtrl has been created'); + }]); + +}()); diff --git a/apps/cpman/app/src/main/resources/gui/css.html b/apps/cpman/app/src/main/resources/gui/css.html new file mode 100644 index 0000000000..abc11f53b9 --- /dev/null +++ b/apps/cpman/app/src/main/resources/gui/css.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/cpman/app/src/main/resources/gui/js.html b/apps/cpman/app/src/main/resources/gui/js.html new file mode 100644 index 0000000000..6a19a752e4 --- /dev/null +++ b/apps/cpman/app/src/main/resources/gui/js.html @@ -0,0 +1 @@ + \ No newline at end of file