diff options
Diffstat (limited to 'framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java')
-rw-r--r-- | framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java | 77 |
1 files changed, 65 insertions, 12 deletions
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java index fb83cdd7..53b16a65 100644 --- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java +++ b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java @@ -25,12 +25,16 @@ import org.onosproject.net.Device; import org.onosproject.net.DeviceId; import org.onosproject.net.Link; import org.onosproject.net.Port; +import org.onosproject.net.config.NetworkConfigService; +import org.onosproject.net.config.basics.BasicDeviceConfig; import org.onosproject.net.device.DeviceService; import org.onosproject.net.link.LinkService; import org.onosproject.ui.RequestHandler; import org.onosproject.ui.UiMessageHandler; import org.onosproject.ui.table.TableModel; import org.onosproject.ui.table.TableRequestHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Collection; @@ -38,7 +42,10 @@ import java.util.Collections; import java.util.List; import java.util.Set; +import static com.google.common.base.Strings.emptyToNull; +import static com.google.common.base.Strings.isNullOrEmpty; import static org.apache.commons.lang.WordUtils.capitalizeFully; +import static org.onosproject.net.DeviceId.deviceId; /** * Message handler for device view related messages. @@ -53,6 +60,11 @@ public class DeviceViewMessageHandler extends UiMessageHandler { private static final String DEV_DETAILS_RESP = "deviceDetailsResponse"; private static final String DETAILS = "details"; + private static final String DEV_NAME_CHANGE_REQ = "deviceNameChangeRequest"; + private static final String DEV_NAME_CHANGE_RESP = "deviceNameChangeResponse"; + + private static final String ZERO_URI = "of:0000000000000000"; + private static final String ID = "id"; private static final String TYPE = "type"; private static final String AVAILABLE = "available"; @@ -72,25 +84,41 @@ public class DeviceViewMessageHandler extends UiMessageHandler { private static final String ENABLED = "enabled"; private static final String SPEED = "speed"; private static final String NAME = "name"; + private static final String WARN = "warn"; private static final String[] COL_IDS = { - AVAILABLE, AVAILABLE_IID, TYPE_IID, ID, - NUM_PORTS, MASTER_ID, MFR, HW, SW, + AVAILABLE, AVAILABLE_IID, TYPE_IID, + NAME, ID, MASTER_ID, NUM_PORTS, MFR, HW, SW, PROTOCOL, CHASSIS_ID, SERIAL }; private static final String ICON_ID_ONLINE = "active"; private static final String ICON_ID_OFFLINE = "inactive"; + private final Logger log = LoggerFactory.getLogger(getClass()); + + @Override protected Collection<RequestHandler> createRequestHandlers() { return ImmutableSet.of( new DataRequestHandler(), + new NameChangeHandler(), new DetailRequestHandler() ); } + // Get friendly name of the device from the annotations + private static String deviceName(Device device) { + String name = device.annotations().value(AnnotationKeys.NAME); + return isNullOrEmpty(name) ? device.id().toString() : name; + } + + private static String deviceProtocol(Device device) { + String protocol = device.annotations().value(PROTOCOL); + return protocol != null ? protocol : ""; + } + private static String getTypeIconId(Device d) { return DEV_ICON_PREFIX + d.type().toString(); } @@ -121,16 +149,15 @@ public class DeviceViewMessageHandler extends UiMessageHandler { boolean available = ds.isAvailable(id); String iconId = available ? ICON_ID_ONLINE : ICON_ID_OFFLINE; - String protocol = dev.annotations().value(PROTOCOL); - row.cell(ID, id) + .cell(NAME, deviceName(dev)) .cell(AVAILABLE, available) .cell(AVAILABLE_IID, iconId) .cell(TYPE_IID, getTypeIconId(dev)) .cell(MFR, dev.manufacturer()) .cell(HW, dev.hwVersion()) .cell(SW, dev.swVersion()) - .cell(PROTOCOL, protocol != null ? protocol : "") + .cell(PROTOCOL, deviceProtocol(dev)) .cell(NUM_PORTS, ds.getPorts(id).size()) .cell(MASTER_ID, ms.getMasterFor(id)); } @@ -144,15 +171,16 @@ public class DeviceViewMessageHandler extends UiMessageHandler { @Override public void process(long sid, ObjectNode payload) { - String id = string(payload, "id", "of:0000000000000000"); + String id = string(payload, ID, ZERO_URI); - DeviceId deviceId = DeviceId.deviceId(id); + DeviceId deviceId = deviceId(id); DeviceService service = get(DeviceService.class); MastershipService ms = get(MastershipService.class); Device device = service.getDevice(deviceId); - ObjectNode data = MAPPER.createObjectNode(); + ObjectNode data = objectNode(); data.put(ID, deviceId.toString()); + data.put(NAME, deviceName(device)); data.put(TYPE, capitalizeFully(device.type().toString())); data.put(TYPE_IID, getTypeIconId(device)); data.put(MFR, device.manufacturer()); @@ -161,9 +189,9 @@ public class DeviceViewMessageHandler extends UiMessageHandler { data.put(SERIAL, device.serialNumber()); data.put(CHASSIS_ID, device.chassisId().toString()); data.put(MASTER_ID, ms.getMasterFor(deviceId).toString()); - data.put(PROTOCOL, device.annotations().value(PROTOCOL)); + data.put(PROTOCOL, deviceProtocol(device)); - ArrayNode ports = MAPPER.createArrayNode(); + ArrayNode ports = arrayNode(); List<Port> portList = new ArrayList<>(service.getPorts(deviceId)); Collections.sort(portList, (p1, p2) -> { @@ -176,13 +204,13 @@ public class DeviceViewMessageHandler extends UiMessageHandler { } data.set(PORTS, ports); - ObjectNode rootNode = MAPPER.createObjectNode(); + ObjectNode rootNode = objectNode(); rootNode.set(DETAILS, data); sendMessage(DEV_DETAILS_RESP, 0, rootNode); } private ObjectNode portData(Port p, DeviceId id) { - ObjectNode port = MAPPER.createObjectNode(); + ObjectNode port = objectNode(); LinkService ls = get(LinkService.class); String name = p.annotations().value(AnnotationKeys.PORT_NAME); @@ -206,4 +234,29 @@ public class DeviceViewMessageHandler extends UiMessageHandler { return port; } } + + + // handler for changing device friendly name + private final class NameChangeHandler extends RequestHandler { + private NameChangeHandler() { + super(DEV_NAME_CHANGE_REQ); + } + + @Override + public void process(long sid, ObjectNode payload) { + DeviceId deviceId = deviceId(string(payload, ID, ZERO_URI)); + String name = emptyToNull(string(payload, NAME, null)); + log.debug("Name change request: {} -- '{}'", deviceId, name); + + NetworkConfigService service = get(NetworkConfigService.class); + BasicDeviceConfig cfg = + service.addConfig(deviceId, BasicDeviceConfig.class); + + // Name attribute missing from the payload (or empty string) + // means that the friendly name should be unset. + cfg.name(name); + cfg.apply(); + sendMessage(DEV_NAME_CHANGE_RESP, 0, payload); + } + } } |