GUI -- Huge Refactoring of server-side message handlers (Part Two).
--- Well, it compiles, and seems to work, with the cursory testing I've done...
Change-Id: I0e59657c134e109850e4770766083370dfd9fdc2
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/FlowViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/FlowViewMessageHandler.java
index 81965da..0ad1d70 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/FlowViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/FlowViewMessageHandler.java
@@ -26,7 +26,8 @@
import org.onosproject.net.flow.TrafficTreatment;
import org.onosproject.net.flow.criteria.Criterion;
import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.ui.UiMessageHandler;
+import org.onosproject.ui.RequestHandler;
+import org.onosproject.ui.UiMessageHandlerTwo;
import org.onosproject.ui.table.AbstractTableRow;
import org.onosproject.ui.table.RowComparator;
import org.onosproject.ui.table.TableRow;
@@ -34,6 +35,7 @@
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
import java.util.Set;
@@ -41,54 +43,57 @@
/**
* Message handler for flow view related messages.
*/
-public class FlowViewMessageHandler extends UiMessageHandler {
+public class FlowViewMessageHandler extends UiMessageHandlerTwo {
+
+ private static final String FLOW_DATA_REQ = "flowDataRequest";
private static final String NO_DEV = "none";
- /**
- * Creates a new message handler for the flow messages.
- */
- protected FlowViewMessageHandler() {
- super(ImmutableSet.of("flowDataRequest"));
- }
-
@Override
- public void process(ObjectNode message) {
- String type = eventType(message);
- if (type.equals("flowDataRequest")) {
- sendFlowList(message);
+ protected Collection<RequestHandler> getHandlers() {
+ return ImmutableSet.of(new FlowDataRequest());
+ }
+
+ // ======================================================================
+
+ private final class FlowDataRequest extends RequestHandler {
+
+ private FlowDataRequest() {
+ super(FLOW_DATA_REQ);
+ }
+
+ @Override
+ public void process(long sid, ObjectNode payload) {
+ RowComparator rc = TableUtils.createRowComparator(payload);
+ String uri = string(payload, "devId", NO_DEV);
+
+ ObjectNode rootNode;
+ if (uri.equals(NO_DEV)) {
+ rootNode = MAPPER.createObjectNode();
+ rootNode.set("flows", MAPPER.createArrayNode());
+ } else {
+ DeviceId deviceId = DeviceId.deviceId(uri);
+ FlowRuleService service = get(FlowRuleService.class);
+ TableRow[] rows = generateTableRows(service, deviceId);
+ Arrays.sort(rows, rc);
+ rootNode = MAPPER.createObjectNode();
+ rootNode.set("flows", TableUtils.generateArrayNode(rows));
+ }
+
+ sendMessage("flowDataResponse", 0, rootNode);
+ }
+
+ private TableRow[] generateTableRows(FlowRuleService service,
+ DeviceId deviceId) {
+ List<TableRow> list = new ArrayList<>();
+ for (FlowEntry flow : service.getFlowEntries(deviceId)) {
+ list.add(new FlowTableRow(flow));
+ }
+ return list.toArray(new TableRow[list.size()]);
}
}
- private void sendFlowList(ObjectNode message) {
- ObjectNode payload = payload(message);
- RowComparator rc = TableUtils.createRowComparator(payload);
- String uri = string(payload, "devId", NO_DEV);
-
- ObjectNode rootNode;
- if (uri.equals(NO_DEV)) {
- rootNode = mapper.createObjectNode();
- rootNode.set("flows", mapper.createArrayNode());
- } else {
- DeviceId deviceId = DeviceId.deviceId(uri);
- FlowRuleService service = get(FlowRuleService.class);
- TableRow[] rows = generateTableRows(service, deviceId);
- Arrays.sort(rows, rc);
- rootNode = mapper.createObjectNode();
- rootNode.set("flows", TableUtils.generateArrayNode(rows));
- }
-
- connection().sendMessage("flowDataResponse", 0, rootNode);
- }
-
- private TableRow[] generateTableRows(FlowRuleService service,
- DeviceId deviceId) {
- List<TableRow> list = new ArrayList<>();
- for (FlowEntry flow : service.getFlowEntries(deviceId)) {
- list.add(new FlowTableRow(flow));
- }
- return list.toArray(new TableRow[list.size()]);
- }
+ // ======================================================================
/**
* TableRow implementation for {@link org.onosproject.net.flow.FlowRule flows}.