blob: 0217911549f4657440e7679f53283cf148e7b435 [file] [log] [blame]
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -07001/*
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
17package org.onosproject.ui.impl;
18
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -070019import com.fasterxml.jackson.databind.node.ObjectNode;
Simon Huntabd16f62015-05-01 13:14:40 -070020import com.google.common.base.Strings;
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -070021import com.google.common.collect.ImmutableSet;
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -070022import org.onosproject.net.DeviceId;
23import org.onosproject.net.flow.FlowEntry;
24import org.onosproject.net.flow.FlowRuleService;
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -070025import org.onosproject.net.flow.criteria.Criterion;
26import org.onosproject.net.flow.instructions.Instruction;
Simon Huntd2747a02015-04-30 22:41:16 -070027import org.onosproject.ui.RequestHandler;
Simon Hunta0ddb022015-05-01 09:53:01 -070028import org.onosproject.ui.UiMessageHandler;
Bri Prebilic Cole9467a232015-05-06 16:59:05 -070029import org.onosproject.ui.table.CellFormatter;
Simon Hunt3d1b0652015-05-05 17:27:24 -070030import org.onosproject.ui.table.TableModel;
Simon Huntabd16f62015-05-01 13:14:40 -070031import org.onosproject.ui.table.TableRequestHandler;
Bri Prebilic Cole9467a232015-05-06 16:59:05 -070032import org.onosproject.ui.table.cell.EnumFormatter;
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -070033
Simon Huntd2747a02015-04-30 22:41:16 -070034import java.util.Collection;
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -070035import java.util.List;
36import java.util.Set;
37
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -070038/**
39 * Message handler for flow view related messages.
40 */
Simon Hunta0ddb022015-05-01 09:53:01 -070041public class FlowViewMessageHandler extends UiMessageHandler {
Simon Huntd2747a02015-04-30 22:41:16 -070042
43 private static final String FLOW_DATA_REQ = "flowDataRequest";
Simon Huntabd16f62015-05-01 13:14:40 -070044 private static final String FLOW_DATA_RESP = "flowDataResponse";
45 private static final String FLOWS = "flows";
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -070046
Simon Huntabd16f62015-05-01 13:14:40 -070047 private static final String ID = "id";
48 private static final String APP_ID = "appId";
49 private static final String GROUP_ID = "groupId";
50 private static final String TABLE_ID = "tableId";
51 private static final String PRIORITY = "priority";
52 private static final String SELECTOR = "selector";
53 private static final String TREATMENT = "treatment";
54 private static final String TIMEOUT = "timeout";
55 private static final String PERMANENT = "permanent";
56 private static final String STATE = "state";
Bri Prebilic Cole641b97b2015-05-05 14:47:40 -070057 private static final String PACKETS = "packets";
58 private static final String BYTES = "bytes";
Simon Huntabd16f62015-05-01 13:14:40 -070059
60 private static final String COMMA = ", ";
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -070061
Simon Hunt3d1b0652015-05-05 17:27:24 -070062 private static final String[] COL_IDS = {
63 ID, APP_ID, GROUP_ID, TABLE_ID, PRIORITY, SELECTOR,
64 TREATMENT, TIMEOUT, PERMANENT, STATE, PACKETS, BYTES
65 };
66
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -070067 @Override
Simon Huntda580882015-05-12 20:58:18 -070068 protected Collection<RequestHandler> createRequestHandlers() {
Simon Huntd2747a02015-04-30 22:41:16 -070069 return ImmutableSet.of(new FlowDataRequest());
70 }
71
Simon Huntabd16f62015-05-01 13:14:40 -070072 // handler for flow table requests
73 private final class FlowDataRequest extends TableRequestHandler {
Simon Huntd2747a02015-04-30 22:41:16 -070074
75 private FlowDataRequest() {
Simon Huntabd16f62015-05-01 13:14:40 -070076 super(FLOW_DATA_REQ, FLOW_DATA_RESP, FLOWS);
Simon Huntd2747a02015-04-30 22:41:16 -070077 }
78
79 @Override
Simon Hunt3d1b0652015-05-05 17:27:24 -070080 protected String[] getColumnIds() {
81 return COL_IDS;
Simon Hunt44aa2f82015-04-30 15:01:35 -070082 }
Simon Hunt44aa2f82015-04-30 15:01:35 -070083
Simon Hunt3d1b0652015-05-05 17:27:24 -070084 @Override
85 protected TableModel createTableModel() {
86 TableModel tm = super.createTableModel();
Bri Prebilic Cole9467a232015-05-06 16:59:05 -070087 tm.setFormatter(SELECTOR, new SelectorFormatter());
88 tm.setFormatter(TREATMENT, new TreatmentFormatter());
89 tm.setFormatter(STATE, EnumFormatter.INSTANCE);
Simon Hunt3d1b0652015-05-05 17:27:24 -070090 return tm;
91 }
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -070092
Simon Hunt3d1b0652015-05-05 17:27:24 -070093 @Override
94 protected void populateTable(TableModel tm, ObjectNode payload) {
95 String uri = string(payload, "devId");
96 if (!Strings.isNullOrEmpty(uri)) {
97 DeviceId deviceId = DeviceId.deviceId(uri);
98 FlowRuleService frs = get(FlowRuleService.class);
99 for (FlowEntry flow : frs.getFlowEntries(deviceId)) {
100 populateRow(tm.addRow(), flow);
101 }
102 }
103 }
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -0700104
Simon Hunt3d1b0652015-05-05 17:27:24 -0700105 private void populateRow(TableModel.Row row, FlowEntry flow) {
106 row.cell(ID, flow.id().value())
107 .cell(APP_ID, flow.appId())
108 .cell(GROUP_ID, flow.groupId().id())
109 .cell(TABLE_ID, flow.tableId())
110 .cell(PRIORITY, flow.priority())
Bri Prebilic Cole9467a232015-05-06 16:59:05 -0700111 .cell(SELECTOR, flow)
112 .cell(TREATMENT, flow)
Simon Hunt3d1b0652015-05-05 17:27:24 -0700113 .cell(TIMEOUT, flow.timeout())
114 .cell(PERMANENT, flow.isPermanent())
Bri Prebilic Cole9467a232015-05-06 16:59:05 -0700115 .cell(STATE, flow.state())
Simon Hunt3d1b0652015-05-05 17:27:24 -0700116 .cell(PACKETS, flow.packets())
117 .cell(BYTES, flow.bytes());
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -0700118 }
119
Bri Prebilic Cole9467a232015-05-06 16:59:05 -0700120 private final class SelectorFormatter implements CellFormatter {
121 @Override
122 public String format(Object value) {
123 FlowEntry flow = (FlowEntry) value;
124 Set<Criterion> criteria = flow.selector().criteria();
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -0700125
Bri Prebilic Cole9467a232015-05-06 16:59:05 -0700126 if (criteria.isEmpty()) {
127 return "(No traffic selector criteria for this flow)";
128 }
129 StringBuilder sb = new StringBuilder("Criteria: ");
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -0700130 for (Criterion c : criteria) {
Bri Prebilic Cole9467a232015-05-06 16:59:05 -0700131 sb.append(c).append(COMMA);
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -0700132 }
133 removeTrailingComma(sb);
Bri Prebilic Cole9467a232015-05-06 16:59:05 -0700134
135 return sb.toString();
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -0700136 }
137 }
138
Bri Prebilic Cole9467a232015-05-06 16:59:05 -0700139 private final class TreatmentFormatter implements CellFormatter {
140 @Override
141 public String format(Object value) {
142 FlowEntry flow = (FlowEntry) value;
143 List<Instruction> instructions = flow.treatment().allInstructions();
144
145 if (instructions.isEmpty()) {
146 return "(No traffic treatment instructions for this flow)";
147 }
148 StringBuilder sb = new StringBuilder("Treatment Instructions: ");
149 for (Instruction i : instructions) {
150 sb.append(i).append(COMMA);
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -0700151 }
152 removeTrailingComma(sb);
Bri Prebilic Cole9467a232015-05-06 16:59:05 -0700153
154 return sb.toString();
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -0700155 }
156 }
157
158 private StringBuilder removeTrailingComma(StringBuilder sb) {
159 int pos = sb.lastIndexOf(COMMA);
160 sb.delete(pos, sb.length());
161 return sb;
162 }
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -0700163 }
Bri Prebilic Colecdc188d2015-04-24 16:40:11 -0700164}