Committed by
Gerrit Code Review
GUI -- Added Settings view
Change-Id: Icdabb361bff3ccc3e4d12cb889dd77e62c1519e0
Showing
7 changed files
with
214 additions
and
1 deletions
| 1 | +/* | ||
| 2 | + * Copyright 2015 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.ui.impl; | ||
| 17 | + | ||
| 18 | +import com.fasterxml.jackson.databind.node.ObjectNode; | ||
| 19 | +import com.google.common.collect.ImmutableSet; | ||
| 20 | +import org.onosproject.cfg.ComponentConfigService; | ||
| 21 | +import org.onosproject.cfg.ConfigProperty; | ||
| 22 | +import org.onosproject.ui.RequestHandler; | ||
| 23 | +import org.onosproject.ui.UiMessageHandler; | ||
| 24 | +import org.onosproject.ui.table.TableModel; | ||
| 25 | +import org.onosproject.ui.table.TableRequestHandler; | ||
| 26 | + | ||
| 27 | +import java.util.Collection; | ||
| 28 | + | ||
| 29 | +/** | ||
| 30 | + * Message handler for component configuration view related messages. | ||
| 31 | + */ | ||
| 32 | +public class SettingsViewMessageHandler extends UiMessageHandler { | ||
| 33 | + | ||
| 34 | + private static final String DATA_REQUEST = "settingDataRequest"; | ||
| 35 | + private static final String DATA_RESPONSE = "settingDataResponse"; | ||
| 36 | + private static final String SETTINGS = "settings"; | ||
| 37 | + | ||
| 38 | + private static final String COMPONENT = "component"; | ||
| 39 | + private static final String ID = "id"; | ||
| 40 | + private static final String TYPE = "type"; | ||
| 41 | + private static final String VALUE = "value"; | ||
| 42 | + private static final String DEFAULT = "defValue"; | ||
| 43 | + private static final String DESC = "desc"; | ||
| 44 | + | ||
| 45 | + private static final String[] COL_IDS = { | ||
| 46 | + COMPONENT, ID, TYPE, VALUE, DEFAULT, DESC | ||
| 47 | + }; | ||
| 48 | + | ||
| 49 | + @Override | ||
| 50 | + protected Collection<RequestHandler> createRequestHandlers() { | ||
| 51 | + return ImmutableSet.of(new SettingsRequest()); | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + // handler for host table requests | ||
| 55 | + private final class SettingsRequest extends TableRequestHandler { | ||
| 56 | + private SettingsRequest() { | ||
| 57 | + super(DATA_REQUEST, DATA_RESPONSE, SETTINGS); | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + @Override | ||
| 61 | + protected String[] getColumnIds() { | ||
| 62 | + return COL_IDS; | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + @Override | ||
| 66 | + protected String defaultColumnId() { | ||
| 67 | + return COMPONENT; | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + @Override | ||
| 71 | + protected TableModel createTableModel() { | ||
| 72 | + TableModel tm = super.createTableModel(); | ||
| 73 | + return tm; | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + @Override | ||
| 77 | + protected void populateTable(TableModel tm, ObjectNode payload) { | ||
| 78 | + ComponentConfigService ccs = get(ComponentConfigService.class); | ||
| 79 | + for (String component : ccs.getComponentNames()) { | ||
| 80 | + for (ConfigProperty prop : ccs.getProperties(component)) { | ||
| 81 | + populateRow(tm.addRow(), component, prop); | ||
| 82 | + } | ||
| 83 | + } | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + private void populateRow(TableModel.Row row, String component, ConfigProperty prop) { | ||
| 87 | + row.cell(COMPONENT, component) | ||
| 88 | + .cell(ID, prop.name()) | ||
| 89 | + .cell(TYPE, prop.type().toString().toLowerCase()) | ||
| 90 | + .cell(VALUE, prop.value()) | ||
| 91 | + .cell(DEFAULT, prop.defaultValue()) | ||
| 92 | + .cell(DESC, prop.description()); | ||
| 93 | + } | ||
| 94 | + } | ||
| 95 | +} |
| ... | @@ -71,6 +71,7 @@ public class UiExtensionManager | ... | @@ -71,6 +71,7 @@ public class UiExtensionManager |
| 71 | private UiExtension createCoreExtension() { | 71 | private UiExtension createCoreExtension() { |
| 72 | List<UiView> coreViews = of( | 72 | List<UiView> coreViews = of( |
| 73 | new UiView(PLATFORM, "app", "Applications", "nav_apps"), | 73 | new UiView(PLATFORM, "app", "Applications", "nav_apps"), |
| 74 | + new UiView(PLATFORM, "settings", "Settings", "nav_settings"), | ||
| 74 | new UiView(PLATFORM, "cluster", "Cluster Nodes", "nav_cluster"), | 75 | new UiView(PLATFORM, "cluster", "Cluster Nodes", "nav_cluster"), |
| 75 | new UiView(NETWORK, "topo", "Topology", "nav_topo"), | 76 | new UiView(NETWORK, "topo", "Topology", "nav_topo"), |
| 76 | new UiView(NETWORK, "device", "Devices", "nav_devs"), | 77 | new UiView(NETWORK, "device", "Devices", "nav_devs"), |
| ... | @@ -94,6 +95,7 @@ public class UiExtensionManager | ... | @@ -94,6 +95,7 @@ public class UiExtensionManager |
| 94 | new GroupViewMessageHandler(), | 95 | new GroupViewMessageHandler(), |
| 95 | new IntentViewMessageHandler(), | 96 | new IntentViewMessageHandler(), |
| 96 | new ApplicationViewMessageHandler(), | 97 | new ApplicationViewMessageHandler(), |
| 98 | + new SettingsViewMessageHandler(), | ||
| 97 | new ClusterViewMessageHandler() | 99 | new ClusterViewMessageHandler() |
| 98 | ); | 100 | ); |
| 99 | 101 | ... | ... |
| ... | @@ -53,6 +53,7 @@ | ... | @@ -53,6 +53,7 @@ |
| 53 | hostIcon_bgpSpeaker: 'bgpSpeaker', | 53 | hostIcon_bgpSpeaker: 'bgpSpeaker', |
| 54 | 54 | ||
| 55 | nav_apps: 'bird', | 55 | nav_apps: 'bird', |
| 56 | + nav_settings: 'chain', | ||
| 56 | nav_cluster: 'node', | 57 | nav_cluster: 'node', |
| 57 | nav_topo: 'topo', | 58 | nav_topo: 'topo', |
| 58 | nav_devs: 'switch', | 59 | nav_devs: 'switch', | ... | ... |
| 1 | +/* | ||
| 2 | + * Copyright 2015 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 -- Settings View -- CSS file | ||
| 19 | + */ | ||
| 20 | + | ||
| 21 | +#ov-settings h2 { | ||
| 22 | + display: inline-block; | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +#ov-settings div.ctrl-btns { | ||
| 26 | + width: 45px; | ||
| 27 | +} |
| 1 | +<!-- settings partial HTML --> | ||
| 2 | +<div id="ov-settings"> | ||
| 3 | + <div class="tabular-header"> | ||
| 4 | + <h2>Component Settings ({{tableData.length}} total)</h2> | ||
| 5 | + <div class="ctrl-btns"> | ||
| 6 | + <div class="refresh active" | ||
| 7 | + icon icon-size="36" icon-id="refresh" | ||
| 8 | + ng-click="refresh()"></div> | ||
| 9 | + </div> | ||
| 10 | + </div> | ||
| 11 | + | ||
| 12 | + <div class="summary-list" onos-fixed-header> | ||
| 13 | + | ||
| 14 | + <div class="table-header" | ||
| 15 | + onos-sortable-header sort-callback="sortCallback(requestParams)"> | ||
| 16 | + <table> | ||
| 17 | + <tr> | ||
| 18 | + <td colId="component" sortable col-width="400px">Component </td> | ||
| 19 | + <td colId="id" sortable>Property </td> | ||
| 20 | + <td colId="type" sortable col-width="70px">Type </td> | ||
| 21 | + <td colId="value" sortable>Value </td> | ||
| 22 | + <td colId="defValue" sortable>Default </td> | ||
| 23 | + <td colId="desc" col-width="520px">Description </td> | ||
| 24 | + </tr> | ||
| 25 | + </table> | ||
| 26 | + </div> | ||
| 27 | + | ||
| 28 | + <div class="table-body"> | ||
| 29 | + <table> | ||
| 30 | + <tr ng-hide="tableData.length" class="no-data ignore-width"> | ||
| 31 | + <td colspan="6"> | ||
| 32 | + No Settings found | ||
| 33 | + </td> | ||
| 34 | + </tr> | ||
| 35 | + | ||
| 36 | + <tr ng-repeat="prop in tableData" | ||
| 37 | + ng-repeat-done> | ||
| 38 | + <td>{{prop.component}}</td> | ||
| 39 | + <td>{{prop.id}}</td> | ||
| 40 | + <td>{{prop.type}}</td> | ||
| 41 | + <td>{{prop.value}}</td> | ||
| 42 | + <td>{{prop.defValue}}</td> | ||
| 43 | + <td>{{prop.desc}}</td> | ||
| 44 | + </tr> | ||
| 45 | + </table> | ||
| 46 | + </div> | ||
| 47 | + | ||
| 48 | + </div> | ||
| 49 | + | ||
| 50 | +</div> |
| 1 | +/* | ||
| 2 | + * Copyright 2015 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 -- Component Settings View Module | ||
| 19 | + */ | ||
| 20 | + | ||
| 21 | +(function () { | ||
| 22 | + 'use strict'; | ||
| 23 | + | ||
| 24 | + angular.module('ovSettings', []) | ||
| 25 | + .controller('OvSettingsCtrl', | ||
| 26 | + ['$log', '$scope', 'TableBuilderService', | ||
| 27 | + | ||
| 28 | + function ($log, $scope, tbs) { | ||
| 29 | + tbs.buildTable({ | ||
| 30 | + scope: $scope, | ||
| 31 | + tag: 'setting' | ||
| 32 | + }); | ||
| 33 | + | ||
| 34 | + $log.log('OvSettingsCtrl has been created'); | ||
| 35 | + }]); | ||
| 36 | +}()); |
| ... | @@ -116,8 +116,9 @@ | ... | @@ -116,8 +116,9 @@ |
| 116 | <script src="app/view/link/link.js"></script> | 116 | <script src="app/view/link/link.js"></script> |
| 117 | <script src="app/view/host/host.js"></script> | 117 | <script src="app/view/host/host.js"></script> |
| 118 | <script src="app/view/intent/intent.js"></script> | 118 | <script src="app/view/intent/intent.js"></script> |
| 119 | - <script src="app/view/cluster/cluster.js"></script> | ||
| 120 | <script src="app/view/app/app.js"></script> | 119 | <script src="app/view/app/app.js"></script> |
| 120 | + <script src="app/view/settings/settings.js"></script> | ||
| 121 | + <script src="app/view/cluster/cluster.js"></script> | ||
| 121 | 122 | ||
| 122 | <!-- This is where contributed javascript will get injected --> | 123 | <!-- This is where contributed javascript will get injected --> |
| 123 | <!-- {INJECTED-JAVASCRIPT-START} --> | 124 | <!-- {INJECTED-JAVASCRIPT-START} --> |
| ... | @@ -133,6 +134,7 @@ | ... | @@ -133,6 +134,7 @@ |
| 133 | <link rel="stylesheet" href="app/view/host/host.css"> | 134 | <link rel="stylesheet" href="app/view/host/host.css"> |
| 134 | <link rel="stylesheet" href="app/view/intent/intent.css"> | 135 | <link rel="stylesheet" href="app/view/intent/intent.css"> |
| 135 | <link rel="stylesheet" href="app/view/app/app.css"> | 136 | <link rel="stylesheet" href="app/view/app/app.css"> |
| 137 | + <link rel="stylesheet" href="app/view/settings/settings.css"> | ||
| 136 | <link rel="stylesheet" href="app/view/cluster/cluster.css"> | 138 | <link rel="stylesheet" href="app/view/cluster/cluster.css"> |
| 137 | 139 | ||
| 138 | <!-- This is where contributed stylesheets will get injected --> | 140 | <!-- This is where contributed stylesheets will get injected --> | ... | ... |
-
Please register or login to post a comment