diff options
author | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:15:21 -0700 |
---|---|---|
committer | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:15:21 -0700 |
commit | 13d05bc8458758ee39cb829098241e89616717ee (patch) | |
tree | 22a4d1ce65f15952f07a3df5af4b462b4697cb3a /framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/LinkViewMessageHandler.java | |
parent | 6139282e1e93c2322076de4b91b1c85d0bc4a8b3 (diff) |
ONOS checkin based on commit tag e796610b1f721d02f9b0e213cf6f7790c10ecd60
Change-Id: Ife8810491034fe7becdba75dda20de4267bd15cd
Diffstat (limited to 'framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/LinkViewMessageHandler.java')
-rw-r--r-- | framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/LinkViewMessageHandler.java | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/LinkViewMessageHandler.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/LinkViewMessageHandler.java new file mode 100644 index 00000000..7de6d624 --- /dev/null +++ b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/LinkViewMessageHandler.java @@ -0,0 +1,127 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.ui.impl; + +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.google.common.collect.ImmutableSet; +import org.onosproject.net.Link; +import org.onosproject.net.link.LinkService; +import org.onosproject.ui.RequestHandler; +import org.onosproject.ui.UiMessageHandler; +import org.onosproject.ui.topo.BaseLink; +import org.onosproject.ui.topo.BaseLinkMap; +import org.onosproject.ui.table.TableModel; +import org.onosproject.ui.table.TableRequestHandler; +import org.onosproject.ui.table.cell.ConnectPointFormatter; +import org.onosproject.ui.table.cell.EnumFormatter; + +import java.util.Collection; + +/** + * Message handler for link view related messages. + */ +public class LinkViewMessageHandler extends UiMessageHandler { + + private static final String A_BOTH_B = "A ↔ B"; + private static final String A_SINGLE_B = "A → B"; + private static final String SLASH = " / "; + + private static final String LINK_DATA_REQ = "linkDataRequest"; + private static final String LINK_DATA_RESP = "linkDataResponse"; + private static final String LINKS = "links"; + + private static final String ONE = "one"; + private static final String TWO = "two"; + private static final String TYPE = "type"; + private static final String STATE = "_iconid_state"; + private static final String DIRECTION = "direction"; + private static final String DURABLE = "durable"; + + private static final String[] COL_IDS = { + ONE, TWO, TYPE, STATE, DIRECTION, DURABLE + }; + + private static final String ICON_ID_ONLINE = "active"; + private static final String ICON_ID_OFFLINE = "inactive"; + + @Override + protected Collection<RequestHandler> createRequestHandlers() { + return ImmutableSet.of(new LinkDataRequest()); + } + + // handler for link table requests + private final class LinkDataRequest extends TableRequestHandler { + private LinkDataRequest() { + super(LINK_DATA_REQ, LINK_DATA_RESP, LINKS); + } + + @Override + protected String[] getColumnIds() { + return COL_IDS; + } + + @Override + protected String defaultColumnId() { + return ONE; + } + + @Override + protected TableModel createTableModel() { + TableModel tm = super.createTableModel(); + tm.setFormatter(ONE, ConnectPointFormatter.INSTANCE); + tm.setFormatter(TWO, ConnectPointFormatter.INSTANCE); + tm.setFormatter(TYPE, EnumFormatter.INSTANCE); + return tm; + } + + @Override + protected void populateTable(TableModel tm, ObjectNode payload) { + LinkService ls = get(LinkService.class); + BaseLinkMap linkMap = new BaseLinkMap(); + ls.getLinks().forEach(linkMap::add); + linkMap.biLinks().forEach(blink -> populateRow(tm.addRow(), blink)); + } + + private void populateRow(TableModel.Row row, BaseLink blink) { + row.cell(ONE, blink.one().src()) + .cell(TWO, blink.one().dst()) + .cell(TYPE, linkType(blink)) + .cell(STATE, linkState(blink)) + .cell(DIRECTION, linkDir(blink)) + .cell(DURABLE, blink.one().isDurable()); + } + + private String linkType(BaseLink link) { + StringBuilder sb = new StringBuilder(); + sb.append(link.one().type()); + if (link.two() != null && link.two().type() != link.one().type()) { + sb.append(SLASH).append(link.two().type()); + } + return sb.toString(); + } + + private String linkState(BaseLink link) { + return (link.one().state() == Link.State.ACTIVE || + link.two().state() == Link.State.ACTIVE) ? + ICON_ID_ONLINE : ICON_ID_OFFLINE; + } + + private String linkDir(BaseLink link) { + return link.two() != null ? A_BOTH_B : A_SINGLE_B; + } + } +} |