blob: 7633c2a4b7f3d5e2f978ce303ef1a0adbd595e8f [file] [log] [blame]
chengfanc5a99dc2017-01-08 19:28:29 +08001/*
2 * Copyright 2017-present 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
17
18package org.onosproject.ui.impl;
19
20import com.fasterxml.jackson.databind.node.ObjectNode;
21import com.google.common.collect.ImmutableSet;
22import org.onosproject.store.primitives.PartitionAdminService;
23import org.onosproject.store.service.PartitionInfo;
24import org.onosproject.ui.RequestHandler;
25import org.onosproject.ui.UiMessageHandler;
26import org.onosproject.ui.table.CellFormatter;
27import org.onosproject.ui.table.TableModel;
28import org.onosproject.ui.table.TableRequestHandler;
29
30import java.util.Collection;
31import java.util.List;
32
33/**
34 * Message handler for partition view related messages.
35 */
36public class PartitionViewMessageHandler extends UiMessageHandler {
37 private static final String PARTITION_DATA_REQ = "partitionDataRequest";
38 private static final String PARTITION_DATA_RESP = "partitionDataResponse";
39 private static final String PARTITIONS = "partitions";
40
41 private static final String NAME = "name";
42 private static final String TERM = "term";
43 private static final String LEADER = "leader";
44 private static final String MEMBERS = "members";
45
46 private static final String[] COL_IDS = {NAME, TERM, LEADER, MEMBERS};
47
48 @Override
49 protected Collection<RequestHandler> createRequestHandlers() {
50 return ImmutableSet.of(new PartitionDataHandler());
51 }
52
53 private final class PartitionDataHandler extends TableRequestHandler {
54 private static final String NO_ROWS_MESSAGE = "No partitions found";
55
56 private PartitionDataHandler() {
57 super(PARTITION_DATA_REQ, PARTITION_DATA_RESP, PARTITIONS);
58 }
59
60 @Override
61 protected String[] getColumnIds() {
62 return COL_IDS;
63 }
64
65 @Override
66 protected String noRowsMessage(ObjectNode payload) {
67 return NO_ROWS_MESSAGE;
68 }
69
70 @Override
71 protected String defaultColumnId() {
72 return NAME;
73 }
74
75 @Override
76 protected TableModel createTableModel() {
77 TableModel tm = super.createTableModel();
78 tm.setFormatter(MEMBERS, new MembersFormatter());
79 return tm;
80 }
81
82 @Override
83 protected void populateTable(TableModel tm, ObjectNode payload) {
84 PartitionAdminService ps = get(PartitionAdminService.class);
85 for (PartitionInfo partition : ps.partitionInfo()) {
86 populateRow(tm.addRow(), partition);
87 }
88 }
89
90 private void populateRow(TableModel.Row row, PartitionInfo p) {
91 row.cell(NAME, p.name())
92 .cell(TERM, p.term())
93 .cell(LEADER, p.leader())
94 .cell(MEMBERS, p.members());
95 }
96
97 private final class MembersFormatter implements CellFormatter {
98 private static final String COMMA = ", ";
99
100 @Override
101 public String format(Object value) {
102 List<String> members = (List<String>) value;
103 if (members.isEmpty()) {
104 return "(No members for this partition)";
105 }
106 StringBuilder sb = new StringBuilder();
107 for (String m : members) {
108 sb.append(m).append(COMMA);
109 }
110 removeTrailingComma(sb);
111
112 return sb.toString();
113 }
114
115 private StringBuilder removeTrailingComma(StringBuilder sb) {
116 int pos = sb.lastIndexOf(COMMA);
117 sb.delete(pos, sb.length());
118 return sb;
119 }
120 }
121 }
122}