source: josm/trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellRenderer.java@ 6316

Last change on this file since 6316 was 6316, checked in by Don-vip, 11 years ago

Sonar/FindBugs - Loose coupling

  • Property svn:eol-style set to native
File size: 6.3 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.conflict.pair.relation;
3
4import java.awt.Color;
5import java.awt.Component;
6import java.util.ArrayList;
7import java.util.Collections;
8import java.util.List;
9
10import javax.swing.BorderFactory;
11import javax.swing.JLabel;
12import javax.swing.JTable;
13import javax.swing.border.Border;
14import javax.swing.table.TableCellRenderer;
15
16import org.openstreetmap.josm.data.osm.Node;
17import org.openstreetmap.josm.data.osm.OsmPrimitive;
18import org.openstreetmap.josm.data.osm.RelationMember;
19import org.openstreetmap.josm.gui.DefaultNameFormatter;
20import org.openstreetmap.josm.gui.conflict.ConflictColors;
21import org.openstreetmap.josm.gui.conflict.pair.ListMergeModel;
22import org.openstreetmap.josm.tools.ImageProvider;
23
24/**
25 * This is the {@link TableCellRenderer} used in the tables of {@link RelationMemberMerger}.
26 *
27 */
28public class RelationMemberTableCellRenderer extends JLabel implements TableCellRenderer {
29 private Border rowNumberBorder = null;
30
31 /**
32 * constructor
33 */
34 public RelationMemberTableCellRenderer() {
35 setIcon(null);
36 setOpaque(true);
37 rowNumberBorder = BorderFactory.createEmptyBorder(0,4,0,0);
38 }
39
40 public String buildToolTipText(OsmPrimitive primitive) {
41 StringBuilder sb = new StringBuilder();
42 sb.append("<html>");
43 sb.append("<strong>id</strong>=")
44 .append(primitive.getId())
45 .append("<br>");
46 List<String> keyList = new ArrayList<String>(primitive.keySet());
47 Collections.sort(keyList);
48 for (int i = 0; i < keyList.size(); i++) {
49 if (i > 0) {
50 sb.append("<br>");
51 }
52 String key = keyList.get(i);
53 sb.append("<strong>")
54 .append(key)
55 .append("</strong>")
56 .append("=");
57 String value = primitive.get(key);
58 while(value.length() != 0) {
59 sb.append(value.substring(0,Math.min(50, value.length())));
60 if (value.length() > 50) {
61 sb.append("<br>");
62 value = value.substring(50);
63 } else {
64 value = "";
65 }
66 }
67 }
68 sb.append("</html>");
69 return sb.toString();
70 }
71
72 /**
73 * reset the renderer
74 */
75 protected void reset() {
76 setBackground(ConflictColors.BGCOLOR.get());
77 setForeground(ConflictColors.FGCOLOR.get());
78 setBorder(null);
79 setIcon(null);
80 setToolTipText(null);
81 }
82
83 protected void renderBackground(ListMergeModel<Node>.EntriesTableModel model, RelationMember member, int row, int col, boolean isSelected) {
84 Color bgc = ConflictColors.BGCOLOR.get();
85 if (col == 0) {
86 if (model.getListMergeModel().isFrozen()) {
87 bgc = ConflictColors.BGCOLOR_FROZEN.get();
88 } else if (model.isParticipatingInCurrentComparePair()) {
89 bgc = ConflictColors.BGCOLOR_PARTICIPAING_IN_COMPARISON.get();
90 } else if (isSelected) {
91 bgc = ConflictColors.BGCOLOR_SELECTED.get();
92 }
93 } else {
94 if (model.getListMergeModel().isFrozen()) {
95 bgc = ConflictColors.BGCOLOR_FROZEN.get();
96 } else if (member == null) {
97 bgc = ConflictColors.BGCOLOR_EMPTY_ROW.get();
98 } else if (isSelected) {
99 bgc = ConflictColors.BGCOLOR_SELECTED.get();
100 } else {
101 if (model.isParticipatingInCurrentComparePair()) {
102 if (model.isSamePositionInOppositeList(row)) {
103 bgc = ConflictColors.BGCOLOR_SAME_POSITION_IN_OPPOSITE.get();
104 } else if (model.isIncludedInOppositeList(row)) {
105 bgc = ConflictColors.BGCOLOR_IN_OPPOSITE.get();
106 } else {
107 bgc = ConflictColors.BGCOLOR_NOT_IN_OPPOSITE.get();
108 }
109 }
110 }
111 }
112 setBackground(bgc);
113 }
114
115 protected void renderForeground(ListMergeModel<Node>.EntriesTableModel model, RelationMember member, int row, int col, boolean isSelected) {
116 Color fgc = ConflictColors.FGCOLOR.get();
117 if (col == 0 && model.isParticipatingInCurrentComparePair() && ! model.getListMergeModel().isFrozen()) {
118 fgc = ConflictColors.FGCOLOR_PARTICIPAING_IN_COMPARISON.get();
119 }
120 setForeground(fgc);
121 }
122
123 protected void renderRole(RelationMember member) {
124 setText(member.getRole());
125 setToolTipText(member.getRole());
126 }
127
128 protected void renderPrimitive(RelationMember member) {
129 String displayName = member.getMember().getDisplayName(DefaultNameFormatter.getInstance());
130 setText(displayName);
131 setToolTipText(buildToolTipText(member.getMember()));
132 setIcon(ImageProvider.get(member.getDisplayType()));
133 }
134
135 /**
136 * render the row id
137 * @param row the row index
138 */
139 protected void renderRowId(int row) {
140 setBorder(rowNumberBorder);
141 setText(Integer.toString(row+1));
142 }
143
144 protected void renderEmptyRow() {
145 setIcon(null);
146 setBackground(ConflictColors.BGCOLOR_EMPTY_ROW.get());
147 setText("");
148 }
149
150 @Override
151 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
152 int row, int column) {
153
154 RelationMember member = (RelationMember)value;
155 reset();
156 if (member == null) {
157 renderEmptyRow();
158 } else {
159 renderBackground(getModel(table), member, row, column, isSelected);
160 renderForeground(getModel(table), member, row, column, isSelected);
161 switch(column) {
162 case 0:
163 renderRowId(row);
164 break;
165 case 1:
166 renderRole(member);
167 break;
168 case 2:
169 renderPrimitive(member);
170 break;
171 default:
172 // should not happen
173 }
174 }
175 return this;
176 }
177
178 /**
179 * replies the model
180 * @param table the table
181 * @return the table model
182 */
183 @SuppressWarnings("unchecked")
184 protected ListMergeModel<Node>.EntriesTableModel getModel(JTable table) {
185 return (ListMergeModel.EntriesTableModel)table.getModel();
186 }
187}
Note: See TracBrowser for help on using the repository browser.