[ONOS-7989] add sync button on roadm GUI view.
Change-Id: I0f27ac6c9c100f54180c490fc043da65ef1225e0
diff --git a/apps/roadm/src/main/java/org/onosproject/roadm/DistributedRoadmStore.java b/apps/roadm/src/main/java/org/onosproject/roadm/DistributedRoadmStore.java
index c137c13..e13b2c7 100644
--- a/apps/roadm/src/main/java/org/onosproject/roadm/DistributedRoadmStore.java
+++ b/apps/roadm/src/main/java/org/onosproject/roadm/DistributedRoadmStore.java
@@ -95,4 +95,11 @@
}
return null;
}
+
+ @Override
+ public void removeTargetPower(DeviceId deviceId, PortNumber portNumber) {
+ if (powerMap.get(deviceId) != null) {
+ powerMap.get(deviceId).remove(portNumber);
+ }
+ }
}
diff --git a/apps/roadm/src/main/java/org/onosproject/roadm/RoadmManager.java b/apps/roadm/src/main/java/org/onosproject/roadm/RoadmManager.java
index 323f32e..9f83df5 100644
--- a/apps/roadm/src/main/java/org/onosproject/roadm/RoadmManager.java
+++ b/apps/roadm/src/main/java/org/onosproject/roadm/RoadmManager.java
@@ -203,8 +203,29 @@
public Long getTargetPortPower(DeviceId deviceId, PortNumber portNumber) {
checkNotNull(deviceId);
checkNotNull(portNumber);
- // getTargetPortPower is not yet implemented in PowerConfig so we access store instead
- return roadmStore.getTargetPower(deviceId, portNumber);
+ // Request target port power when it doesn't exist. Inactive updating mode.
+ Long power = roadmStore.getTargetPower(deviceId, portNumber);
+ if (power == null) {
+ return syncTargetPortPower(deviceId, portNumber);
+ }
+ return power;
+ }
+
+ @Override
+ public Long syncTargetPortPower(DeviceId deviceId, PortNumber portNumber) {
+ checkNotNull(deviceId);
+ checkNotNull(portNumber);
+ PowerConfig<Object> powerConfig = getPowerConfig(deviceId);
+ if (powerConfig != null) {
+ Optional<Long> pl = powerConfig.getTargetPower(portNumber, Direction.ALL);
+ if (pl.isPresent()) {
+ roadmStore.setTargetPower(deviceId, portNumber, pl.get());
+ return pl.get();
+ } else {
+ roadmStore.removeTargetPower(deviceId, portNumber);
+ }
+ }
+ return null;
}
@Override
diff --git a/apps/roadm/src/main/java/org/onosproject/roadm/RoadmPortViewMessageHandler.java b/apps/roadm/src/main/java/org/onosproject/roadm/RoadmPortViewMessageHandler.java
index 192eb2e..dea83b0 100644
--- a/apps/roadm/src/main/java/org/onosproject/roadm/RoadmPortViewMessageHandler.java
+++ b/apps/roadm/src/main/java/org/onosproject/roadm/RoadmPortViewMessageHandler.java
@@ -64,6 +64,8 @@
private static final String ROADM_PORTS = "roadmPorts";
private static final String ROADM_SET_TARGET_POWER_REQ = "roadmSetTargetPowerRequest";
private static final String ROADM_SET_TARGET_POWER_RESP = "roadmSetTargetPowerResponse";
+ private static final String ROADM_SYNC_TARGET_POWER_REQ = "roadmSyncTargetPowerRequest";
+ private static final String ROADM_SYNC_TARGET_POWER_RESP = "roadmSyncTargetPowerResp";
private static final String ROADM_SHOW_ITEMS_REQ = "roadmShowPortItemsRequest";
private static final String ROADM_SHOW_ITEMS_RESP = "roadmShowPortItemsResponse";
private static final String ROADM_SET_OPS_MODE_REQ = "roadmSetOpsModeRequest";
@@ -105,7 +107,8 @@
return ImmutableSet.of(new PortTableDataRequestHandler(),
new SetTargetPowerRequestHandler(),
new CreateShowItemsRequestHandler(),
- new CreateOpsModeSetRequestHandler()
+ new CreateOpsModeSetRequestHandler(),
+ new SyncTargetPowerRequestHandler()
);
}
@@ -250,6 +253,28 @@
}
}
+ // Handler for sync-up port target power
+ private final class SyncTargetPowerRequestHandler extends RequestHandler {
+
+ private static final String SYNCED_TARGET_POWER = "Synced target power is %s.";
+ private SyncTargetPowerRequestHandler() {
+ super(ROADM_SYNC_TARGET_POWER_REQ);
+ }
+
+ @Override
+ public void process(ObjectNode payload) {
+ DeviceId deviceId = DeviceId.deviceId(string(payload, RoadmUtil.DEV_ID));
+ PortNumber portNumber = PortNumber.portNumber(payload.get(ID).asLong());
+ Long targetPower = roadmService.syncTargetPortPower(deviceId, portNumber);
+ String power = RoadmUtil.objectToString(targetPower, RoadmUtil.UNKNOWN);
+ ObjectNode rootNode = objectNode();
+ rootNode.put(ID, payload.get(ID).asText())
+ .put(RoadmUtil.VALID, true)
+ .put(RoadmUtil.MESSAGE, String.format(SYNCED_TARGET_POWER, power));
+ sendMessage(ROADM_SYNC_TARGET_POWER_RESP, rootNode);
+ }
+ }
+
// Protection switch operation type and path index
private static final String OPS_ARRAY_INDEX = "index";
private static final String OPS_ARRAY_OPERATION = "operation";
diff --git a/apps/roadm/src/main/java/org/onosproject/roadm/RoadmService.java b/apps/roadm/src/main/java/org/onosproject/roadm/RoadmService.java
index 4cd5fcf2..c9e65d8 100644
--- a/apps/roadm/src/main/java/org/onosproject/roadm/RoadmService.java
+++ b/apps/roadm/src/main/java/org/onosproject/roadm/RoadmService.java
@@ -93,7 +93,7 @@
void setTargetPortPower(DeviceId deviceId, PortNumber portNumber, long power);
/**
- * Returns the target power for a port if the port has configurable target power.
+ * Returns the target power stored in storage for a port if the port has configurable target power.
*
* @param deviceId DeviceId of the device to configure
* @param portNumber PortNumber of the port to configure
@@ -102,6 +102,14 @@
Long getTargetPortPower(DeviceId deviceId, PortNumber portNumber);
/**
+ * Sync-up the target power for a port if the operator want to check the configuration.
+ * @param deviceId DeviceId of the device to configure
+ * @param portNumber PortNumber of the port to configure
+ * @return the target power if the port has a target power, null otherwise
+ */
+ Long syncTargetPortPower(DeviceId deviceId, PortNumber portNumber);
+
+ /**
* Sets the attenuation of a connection. This does not check that attenuation
* is within the acceptable range.
*
diff --git a/apps/roadm/src/main/java/org/onosproject/roadm/RoadmStore.java b/apps/roadm/src/main/java/org/onosproject/roadm/RoadmStore.java
index 695c5b7..6c7abac 100644
--- a/apps/roadm/src/main/java/org/onosproject/roadm/RoadmStore.java
+++ b/apps/roadm/src/main/java/org/onosproject/roadm/RoadmStore.java
@@ -64,4 +64,12 @@
* @return target power if target power has already been set, null otherwise
*/
Long getTargetPower(DeviceId deviceId, PortNumber portNumber);
+
+ /**
+ * Remove the targetPower for a port on a device. The power value is removed,
+ * however, the device isn't.
+ * @param deviceId DeviceId of the device
+ * @param portNumber PortNumber of the port
+ */
+ void removeTargetPower(DeviceId deviceId, PortNumber portNumber);
}
diff --git a/apps/roadm/src/main/resources/app/view/roadmPort/roadmPort.html b/apps/roadm/src/main/resources/app/view/roadmPort/roadmPort.html
index 57cc441..24c8a20 100644
--- a/apps/roadm/src/main/resources/app/view/roadmPort/roadmPort.html
+++ b/apps/roadm/src/main/resources/app/view/roadmPort/roadmPort.html
@@ -67,7 +67,9 @@
<td>{{item.powerRange}}</td>
<td>{{item.currentPower}}</td>
<td ng-show="showServiceState">{{item.serviceState}}</td>
- <td ng-show="showTargetPower" class="editable" roadm-power="item" roadm-set-power="setPortPower(port, targetVal, cb)"></td>
+ <td ng-show="showTargetPower" class="editable" roadm-power="item"
+ roadm-set-power="setPortPower(port, targetVal, cb)"
+ roadm-sync-power="syncPortPower(port, cb)"></td>
</tr>
</table>
<div class="mode-select" ng-show="showServiceState">
diff --git a/apps/roadm/src/main/resources/app/view/roadmPort/roadmPort.js b/apps/roadm/src/main/resources/app/view/roadmPort/roadmPort.js
index 05f05dd..26951ca 100644
--- a/apps/roadm/src/main/resources/app/view/roadmPort/roadmPort.js
+++ b/apps/roadm/src/main/resources/app/view/roadmPort/roadmPort.js
@@ -4,6 +4,8 @@
var SET_TARGET_POWER_REQ = "roadmSetTargetPowerRequest";
var SET_TARGET_POWER_RESP = "roadmSetTargetPowerResponse";
+ var SYNC_TARGET_POWER_REQ = "roadmSyncTargetPowerRequest";
+ var SYNC_TARGET_POWER_RESP = "roadmSyncTargetPowerResponse";
var SHOW_ITEMS_REQ = "roadmShowPortItemsRequest";
var SHOW_ITEMS_RESP = "roadmShowPortItemsResponse";
var SET_OPS_MODE_REQ = "roadmSetOpsModeRequest";
@@ -25,6 +27,16 @@
});
}
+ function syncPortPower(port, cb) {
+ var id = port.id;
+ portCbTable[id] = cb;
+ wss.sendEvent(SYNC_TARGET_POWER_REQ,
+ {
+ devId: $scope.devId,
+ id: port.id
+ });
+ }
+
function portPowerCb(data) {
portCbTable[data.id](data.valid, data.message);
}
@@ -95,6 +107,7 @@
var handlers = {};
handlers[SET_TARGET_POWER_RESP] = portPowerCb;
+ handlers[SYNC_TARGET_POWER_RESP] = portPowerCb;
handlers[SHOW_ITEMS_RESP] = showItemsCb;
handlers[SET_OPS_MODE_RESP] = changeOpsModeCb;
wss.bindHandlers(handlers);
@@ -111,6 +124,7 @@
});
$scope.setPortPower = setPortPower;
+ $scope.syncPortPower = syncPortPower;
$scope.queryShowItems = queryShowItems;
$scope.changeOpsMode = changeOpsMode;
@@ -145,6 +159,7 @@
'<input type="number" name="formVal" ng-model="formVal">' +
'<button type="submit" ng-click="send()">Set</button>' +
'<button type="button" ng-click="cancel()">Cancel</button>' +
+ '<button type="submit" ng-click="sync()">Sync</button>' +
'<span class="input-error" ng-show="showError">{{errorMessage}}</span>' +
'</form>';
@@ -152,7 +167,8 @@
restrict: 'A',
scope: {
currItem: '=roadmPower',
- roadmSetPower: '&'
+ roadmSetPower: '&',
+ roadmSyncPower: '&'
},
template: retTemplate,
link: function ($scope, $element) {
@@ -183,6 +199,10 @@
if ($scope.currItem.id === $scope.targetItem.id) {
// update the ui to display the new attenuation value
$scope.currItem.targetPower = $scope.formVal;
+ if (message.startsWith("Synced")) {
+ var str = message.split(' ');
+ $scope.currItem.targetPower = str[str.length-1].slice(0, -1);
+ }
}
$scope.cancel();
} else {
@@ -192,7 +212,7 @@
$timeout(function () {
$scope.$apply()
});
- }
+ };
$scope.send = function() {
// check input is an integer
if (!isInteger($scope.formVal)) {
@@ -204,6 +224,9 @@
$scope.cancel = function() {
$scope.editMode = false;
$scope.showError = false;
+ };
+ $scope.sync = function() {
+ $scope.roadmSyncPower({port: $scope.targetItem, cb: $scope.sendCb});
}
}
};