[ONOS-3851] Add skeletal code of Web GUI for Control Plane Manager
Change-Id: I0df9c55daec0b6d9a630aa954808e6c310ba861c
Showing
8 changed files
with
325 additions
and
0 deletions
1 | +/* | ||
2 | + * Copyright 2016 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.cpman.gui; | ||
17 | + | ||
18 | +import com.google.common.collect.ImmutableList; | ||
19 | +import org.apache.felix.scr.annotations.Activate; | ||
20 | +import org.apache.felix.scr.annotations.Component; | ||
21 | +import org.apache.felix.scr.annotations.Deactivate; | ||
22 | +import org.apache.felix.scr.annotations.Reference; | ||
23 | +import org.apache.felix.scr.annotations.ReferenceCardinality; | ||
24 | +import org.apache.felix.scr.annotations.Service; | ||
25 | +import org.onosproject.ui.UiExtension; | ||
26 | +import org.onosproject.ui.UiExtensionService; | ||
27 | +import org.onosproject.ui.UiMessageHandlerFactory; | ||
28 | +import org.onosproject.ui.UiView; | ||
29 | +import org.slf4j.Logger; | ||
30 | +import org.slf4j.LoggerFactory; | ||
31 | + | ||
32 | +import java.util.List; | ||
33 | + | ||
34 | +import static org.onosproject.ui.UiView.Category.NETWORK; | ||
35 | + | ||
36 | +/** | ||
37 | + * Mechanism to stream data to the GUI. | ||
38 | + */ | ||
39 | +@Component(immediate = true, enabled = true) | ||
40 | +@Service(value = CpmanUI.class) | ||
41 | +public class CpmanUI { | ||
42 | + private static final String CPMAN_ID = "cpman"; | ||
43 | + private static final String CPMAN_TEXT = "Control Plane Manager"; | ||
44 | + private static final String RES_PATH = "gui"; | ||
45 | + private static final ClassLoader CL = CpmanUI.class.getClassLoader(); | ||
46 | + | ||
47 | + private final Logger log = LoggerFactory.getLogger(getClass()); | ||
48 | + | ||
49 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
50 | + protected UiExtensionService uiExtensionService; | ||
51 | + | ||
52 | + // Factory for UI message handlers | ||
53 | + private final UiMessageHandlerFactory messageHandlerFactory = | ||
54 | + () -> ImmutableList.of(new CpmanViewMessageHandler()); | ||
55 | + | ||
56 | + // List of application views | ||
57 | + private final List<UiView> views = ImmutableList.of( | ||
58 | + new UiView(NETWORK, CPMAN_ID, CPMAN_TEXT) | ||
59 | + ); | ||
60 | + | ||
61 | + // Application UI extension | ||
62 | + private final UiExtension uiExtension = | ||
63 | + new UiExtension.Builder(CL, views) | ||
64 | + .messageHandlerFactory(messageHandlerFactory) | ||
65 | + .resourcePath(RES_PATH) | ||
66 | + .build(); | ||
67 | + | ||
68 | + @Activate | ||
69 | + protected void activate() { | ||
70 | + uiExtensionService.register(uiExtension); | ||
71 | + log.info("Started"); | ||
72 | + } | ||
73 | + | ||
74 | + @Deactivate | ||
75 | + protected void deactivate() { | ||
76 | + uiExtensionService.unregister(uiExtension); | ||
77 | + log.info("Stopped"); | ||
78 | + } | ||
79 | +} |
1 | +/* | ||
2 | + * Copyright 2016 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.cpman.gui; | ||
17 | + | ||
18 | +import com.fasterxml.jackson.databind.node.ObjectNode; | ||
19 | +import com.google.common.collect.ImmutableSet; | ||
20 | +import org.onosproject.ui.RequestHandler; | ||
21 | +import org.onosproject.ui.UiMessageHandler; | ||
22 | + | ||
23 | +import java.util.Collection; | ||
24 | +import java.util.Random; | ||
25 | + | ||
26 | +/** | ||
27 | + * CpmanViewMessageHandler class implementation. | ||
28 | + */ | ||
29 | +public class CpmanViewMessageHandler extends UiMessageHandler { | ||
30 | + | ||
31 | + private static final String CPMAN_DATA_REQ = "cpmanDataRequest"; | ||
32 | + private static final String CPMAN_DATA_RESP = "cpmanDataResponse"; | ||
33 | + | ||
34 | + private static final String RANDOM = "random"; | ||
35 | + | ||
36 | + @Override | ||
37 | + protected Collection<RequestHandler> createRequestHandlers() { | ||
38 | + return ImmutableSet.of( | ||
39 | + new CpmanDataRequestHandler() | ||
40 | + ); | ||
41 | + } | ||
42 | + | ||
43 | + // handler for sample data requests | ||
44 | + private final class CpmanDataRequestHandler extends RequestHandler { | ||
45 | + | ||
46 | + private CpmanDataRequestHandler() { | ||
47 | + super(CPMAN_DATA_REQ); | ||
48 | + } | ||
49 | + | ||
50 | + @Override | ||
51 | + public void process(long sid, ObjectNode payload) { | ||
52 | + ObjectNode result = objectNode(); | ||
53 | + Random random = new Random(); | ||
54 | + result.put(RANDOM, random.nextInt(50) + 1); | ||
55 | + | ||
56 | + sendMessage(CPMAN_DATA_RESP, 0, result); | ||
57 | + } | ||
58 | + } | ||
59 | +} |
1 | +/* | ||
2 | + * Copyright 2016 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | + | ||
17 | +/** | ||
18 | + * Web GUI for the control plane manager. | ||
19 | + */ | ||
20 | +package org.onosproject.cpman.gui; | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
2 | + * Copyright 2016 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | + | ||
17 | +/* | ||
18 | + ONOS GUI -- Control Plane Manager -- CSS file | ||
19 | + */ | ||
20 | + | ||
21 | +#ov-cpman { | ||
22 | + padding: 20px; | ||
23 | +} | ||
24 | +.light #ov-cpman { | ||
25 | + color: navy; | ||
26 | +} | ||
27 | +.dark #ov-cpman { | ||
28 | + color: #88f; | ||
29 | +} | ||
30 | + | ||
31 | +#ov-cpman .button-panel { | ||
32 | + margin: 10px; | ||
33 | + width: 200px; | ||
34 | +} | ||
35 | + | ||
36 | +.light #ov-cpman .button-panel { | ||
37 | + background-color: #ccf; | ||
38 | +} | ||
39 | +.dark #ov-cpman .button-panel { | ||
40 | + background-color: #444; | ||
41 | +} | ||
42 | + | ||
43 | +#ov-cpman .my-button { | ||
44 | + cursor: pointer; | ||
45 | + padding: 4px; | ||
46 | + text-align: center; | ||
47 | +} | ||
48 | + | ||
49 | +.light #ov-cpman .my-button { | ||
50 | + color: white; | ||
51 | + background-color: #99d; | ||
52 | +} | ||
53 | +.dark #ov-cpman .my-button { | ||
54 | + color: black; | ||
55 | + background-color: #aaa; | ||
56 | +} | ||
57 | + | ||
58 | +#ov-cpman .number { | ||
59 | + font-size: 140%; | ||
60 | + text-align: right; | ||
61 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +<!-- partial HTML --> | ||
2 | +<div id="ov-cpman"> | ||
3 | + <div class="button-panel"> | ||
4 | + <div class="my-button" ng-click="getData()"> | ||
5 | + Fetch Data | ||
6 | + </div> | ||
7 | + </div> | ||
8 | + | ||
9 | + <div class="data-panel"> | ||
10 | + <table> | ||
11 | + <tr> | ||
12 | + <td> Number </td> | ||
13 | + <td class="number"> {{data.random}} </td> | ||
14 | + </tr> | ||
15 | + </table> | ||
16 | + </div> | ||
17 | +</div> |
1 | +/* | ||
2 | + * Copyright 2016 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | + | ||
17 | +/* | ||
18 | + ONOS GUI -- Control Plane Manager View Module | ||
19 | + */ | ||
20 | +(function () { | ||
21 | + 'use strict'; | ||
22 | + | ||
23 | + // injected refs | ||
24 | + var $log, $scope, wss, ks; | ||
25 | + | ||
26 | + // constants | ||
27 | + var dataReq = 'cpmanDataRequest', | ||
28 | + dataResp = 'cpmanDataResponse'; | ||
29 | + | ||
30 | + function addKeyBindings() { | ||
31 | + var map = { | ||
32 | + space: [getData, 'Fetch data from server'], | ||
33 | + | ||
34 | + _helpFormat: [ | ||
35 | + ['space'] | ||
36 | + ] | ||
37 | + }; | ||
38 | + | ||
39 | + ks.keyBindings(map); | ||
40 | + } | ||
41 | + | ||
42 | + function getData() { | ||
43 | + wss.sendEvent(dataReq); | ||
44 | + } | ||
45 | + | ||
46 | + function respDataCb(data) { | ||
47 | + $scope.data = data; | ||
48 | + $scope.$apply(); | ||
49 | + } | ||
50 | + | ||
51 | + | ||
52 | + angular.module('ovCpman', []) | ||
53 | + .controller('OvCpmanCtrl', | ||
54 | + ['$log', '$scope', 'WebSocketService', 'KeyService', | ||
55 | + | ||
56 | + function (_$log_, _$scope_, _wss_, _ks_) { | ||
57 | + $log = _$log_; | ||
58 | + $scope = _$scope_; | ||
59 | + wss = _wss_; | ||
60 | + ks = _ks_; | ||
61 | + | ||
62 | + var handlers = {}; | ||
63 | + $scope.data = {}; | ||
64 | + | ||
65 | + // data response handler | ||
66 | + handlers[dataResp] = respDataCb; | ||
67 | + wss.bindHandlers(handlers); | ||
68 | + | ||
69 | + addKeyBindings(); | ||
70 | + | ||
71 | + // custom click handler | ||
72 | + $scope.getData = getData; | ||
73 | + | ||
74 | + // get data the first time... | ||
75 | + getData(); | ||
76 | + | ||
77 | + // cleanup | ||
78 | + $scope.$on('$destroy', function () { | ||
79 | + wss.unbindHandlers(handlers); | ||
80 | + ks.unbindKeys(); | ||
81 | + $log.log('OvCpmanCtrl has been destroyed'); | ||
82 | + }); | ||
83 | + | ||
84 | + $log.log('OvCpmanCtrl has been created'); | ||
85 | + }]); | ||
86 | + | ||
87 | +}()); |
1 | +<link rel="stylesheet" href="app/view/cpman/cpman.css"> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +<script src="app/view/cpman/cpman.js"></script> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment