1 |
|
package org.kuali.student.common.ui.client.widgets; |
2 |
|
|
3 |
|
import java.util.ArrayList; |
4 |
|
import java.util.List; |
5 |
|
|
6 |
|
import org.kuali.student.common.assembly.data.Data; |
7 |
|
import org.kuali.student.common.assembly.data.Data.DataValue; |
8 |
|
import org.kuali.student.common.assembly.data.Data.Value; |
9 |
|
import org.kuali.student.common.ui.client.mvc.Callback; |
10 |
|
import org.kuali.student.common.ui.client.mvc.HasDataValue; |
11 |
|
import org.kuali.student.common.ui.client.util.Elements; |
12 |
|
import org.kuali.student.common.ui.client.widgets.field.layout.element.AbbrButton; |
13 |
|
import org.kuali.student.common.ui.client.widgets.field.layout.element.AbbrButton.AbbrButtonType; |
14 |
|
|
15 |
|
import com.google.gwt.event.dom.client.ClickEvent; |
16 |
|
import com.google.gwt.event.dom.client.ClickHandler; |
17 |
|
import com.google.gwt.event.logical.shared.CloseEvent; |
18 |
|
import com.google.gwt.event.logical.shared.CloseHandler; |
19 |
|
import com.google.gwt.event.logical.shared.HasCloseHandlers; |
20 |
|
import com.google.gwt.event.shared.HandlerRegistration; |
21 |
|
import com.google.gwt.user.client.ui.Anchor; |
22 |
|
import com.google.gwt.user.client.ui.Composite; |
23 |
|
import com.google.gwt.user.client.ui.FlowPanel; |
24 |
|
import com.google.gwt.user.client.ui.HTMLPanel; |
25 |
|
import com.google.gwt.user.client.ui.Panel; |
26 |
|
|
|
|
| 0% |
Uncovered Elements: 126 (126) |
Complexity: 37 |
Complexity Density: 0.46 |
|
27 |
|
public class KSItemLabel extends Composite implements HasCloseHandlers<KSItemLabel>, HasDataValue { |
28 |
|
|
29 |
|
private final String id = HTMLPanel.createUniqueId(); |
30 |
|
private final String contentId = HTMLPanel.createUniqueId(); |
31 |
|
|
32 |
|
private final String removeLinkId = HTMLPanel.createUniqueId(); |
33 |
|
private final String backgroundId = HTMLPanel.createUniqueId(); |
34 |
|
private final String PANEL_CONTENT_OPEN = "<span id='" + contentId + "'></span>"; |
35 |
|
private final String PANEL_CONTENT_REMOVE_LINK = "<span class='ks-selected-list-value-remove' id='" + removeLinkId + "'></span>"; |
36 |
|
|
37 |
|
private final String PANEL_CONTENT_BACKGROUND = "<div id='" + backgroundId + "' class='ks-selected-list-value-container'></div>"; |
38 |
|
private Panel mainPanel; |
39 |
|
private HTMLPanel panel; |
40 |
|
private AbbrButton delete = new AbbrButton(AbbrButtonType.DELETE); |
41 |
|
private Anchor viewDetails = new Anchor("View"); |
42 |
|
private DataHelper dataHelper; |
43 |
|
private Data data; |
44 |
|
private List<Callback<Value>> valueChangeCallbacks = |
45 |
|
new ArrayList<Callback<Value>>(); |
46 |
|
private String deletedKey; |
47 |
|
|
48 |
|
private static int classInstanceId = -1; |
49 |
|
public int instanceId; |
50 |
|
|
|
|
| 0% |
Uncovered Elements: 1 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
51 |
0
|
public KSItemLabel(boolean canEdit, DataHelper dataParser) {... |
52 |
0
|
init(canEdit, false, dataParser); |
53 |
|
} |
54 |
|
|
|
|
| 0% |
Uncovered Elements: 1 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
55 |
0
|
public KSItemLabel(boolean canEdit, boolean hasDetails, DataHelper dataParser) {... |
56 |
0
|
init(canEdit, hasDetails, dataParser); |
57 |
|
} |
58 |
|
|
|
|
| 0% |
Uncovered Elements: 28 (28) |
Complexity: 3 |
Complexity Density: 0.12 |
|
59 |
0
|
private void init(boolean canEdit, boolean hasDetails, DataHelper dataParser) {... |
60 |
0
|
classInstanceId++; |
61 |
0
|
instanceId = classInstanceId; |
62 |
0
|
mainPanel = new FlowPanel(); |
63 |
0
|
mainPanel.setStyleName("ks-selected-list-value"); |
64 |
0
|
panel = new HTMLPanel(PANEL_CONTENT_OPEN + PANEL_CONTENT_BACKGROUND); |
65 |
0
|
panel.getElement().setId(id); |
66 |
0
|
this.dataHelper = dataParser; |
67 |
0
|
mainPanel.add(panel); |
68 |
0
|
if (hasDetails) { |
69 |
0
|
viewDetails.getElement().getStyle().setProperty("position", "absolute"); |
70 |
0
|
viewDetails.getElement().getStyle().setProperty("right", "25px"); |
71 |
0
|
viewDetails.getElement().getStyle().setProperty("top", "1px"); |
72 |
0
|
mainPanel.add(viewDetails); |
73 |
|
} |
74 |
0
|
if(canEdit) { |
75 |
0
|
delete.getElement().getStyle().setProperty("position", "absolute"); |
76 |
0
|
delete.getElement().getStyle().setProperty("right", "3px"); |
77 |
0
|
delete.getElement().getStyle().setProperty("top", "1px"); |
78 |
0
|
mainPanel.add(delete); |
79 |
0
|
initDeleteHandlers(); |
80 |
|
} |
81 |
0
|
String labelText = ""; |
82 |
0
|
panel.getElementById(contentId).setInnerText(labelText); |
83 |
0
|
panel.setVisible(false); |
84 |
0
|
mainPanel.setVisible(false); |
85 |
0
|
super.initWidget(mainPanel); |
86 |
|
} |
87 |
|
|
|
|
| 0% |
Uncovered Elements: 1 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
88 |
0
|
@Override... |
89 |
|
public HandlerRegistration addCloseHandler(CloseHandler<KSItemLabel> handler) { |
90 |
0
|
return addHandler(handler, CloseEvent.getType()); |
91 |
|
} |
92 |
|
|
|
|
| 0% |
Uncovered Elements: 1 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
93 |
0
|
@Override... |
94 |
|
public void addValueChangeCallback(Callback<Value> callback) { |
95 |
0
|
valueChangeCallbacks.add(callback); |
96 |
|
} |
97 |
|
|
|
|
| 0% |
Uncovered Elements: 5 (5) |
Complexity: 2 |
Complexity Density: 0.67 |
|
98 |
0
|
private void callHandlers() {... |
99 |
0
|
if (valueChangeCallbacks != null) { |
100 |
|
|
101 |
0
|
for (Callback<Data.Value> handler : valueChangeCallbacks) { |
102 |
0
|
handler.exec(getValue()); |
103 |
|
} |
104 |
|
} |
105 |
|
} |
106 |
|
|
|
|
| 0% |
Uncovered Elements: 2 (2) |
Complexity: 1 |
Complexity Density: 0.5 |
|
107 |
0
|
@Override... |
108 |
|
public Value getValue() { |
109 |
0
|
DataValue result = new DataValue(data); |
110 |
0
|
return result; |
111 |
|
} |
112 |
|
|
|
|
| 0% |
Uncovered Elements: 8 (8) |
Complexity: 2 |
Complexity Density: 0.33 |
|
113 |
0
|
@Override... |
114 |
|
public void setValue(Value value) { |
115 |
0
|
deletedKey = null; |
116 |
0
|
if (value == null) { |
117 |
0
|
this.data = null; |
118 |
|
} else { |
119 |
0
|
this.data = value.get(); |
120 |
|
} |
121 |
0
|
callHandlers(); |
122 |
0
|
redraw(); |
123 |
|
} |
124 |
|
|
|
|
| 0% |
Uncovered Elements: 1 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
125 |
0
|
public String getKey() {... |
126 |
0
|
return dataHelper.getKey(data); |
127 |
|
} |
128 |
|
|
|
|
| 0% |
Uncovered Elements: 5 (5) |
Complexity: 2 |
Complexity Density: 0.67 |
|
129 |
0
|
public String getDisplayText() {... |
130 |
0
|
if (data == null) { |
131 |
0
|
return null; |
132 |
|
} |
133 |
0
|
return dataHelper.parse(data); |
134 |
|
} |
135 |
|
|
|
|
| 0% |
Uncovered Elements: 3 (3) |
Complexity: 2 |
Complexity Density: 2 |
|
136 |
0
|
private String nvl(String inString) {... |
137 |
0
|
return (inString == null)? "" : inString; |
138 |
|
} |
139 |
|
|
|
|
| 0% |
Uncovered Elements: 5 (5) |
Complexity: 1 |
Complexity Density: 0.2 |
|
140 |
0
|
private void redraw() {... |
141 |
0
|
String labelText = null; |
142 |
0
|
labelText = dataHelper.parse(data); |
143 |
0
|
panel.getElementById(contentId).setInnerHTML(nvl(labelText)); |
144 |
0
|
panel.setVisible(true); |
145 |
0
|
mainPanel.setVisible(true); |
146 |
|
} |
147 |
|
|
|
|
| 0% |
Uncovered Elements: 1 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
148 |
0
|
private void initDeleteHandlers() {... |
149 |
|
|
150 |
0
|
delete.addClickHandler(new ClickHandler() { |
|
|
| 0% |
Uncovered Elements: 1 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
151 |
0
|
@Override... |
152 |
|
public void onClick(ClickEvent event) { |
153 |
0
|
doRemove(); |
154 |
|
} |
155 |
|
}); |
156 |
|
} |
157 |
|
|
|
|
| 0% |
Uncovered Elements: 1 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
158 |
0
|
public HandlerRegistration addShowDetailsHandler(ClickHandler clickHandler) {... |
159 |
0
|
return viewDetails.addClickHandler(clickHandler); |
160 |
|
} |
161 |
|
|
|
|
| 0% |
Uncovered Elements: 5 (5) |
Complexity: 1 |
Complexity Density: 0.2 |
|
162 |
0
|
private void doRemove() {... |
163 |
|
|
164 |
|
|
165 |
|
|
166 |
|
|
167 |
0
|
deletedKey = dataHelper.getKey(data); |
168 |
0
|
data = null; |
169 |
0
|
redraw(); |
170 |
0
|
callHandlers(); |
171 |
0
|
CloseEvent.fire(this, this); |
172 |
|
} |
173 |
|
|
|
|
| 0% |
Uncovered Elements: 1 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
174 |
0
|
public String getDeletedKey() {... |
175 |
0
|
return deletedKey; |
176 |
|
} |
177 |
|
|
|
|
| 0% |
Uncovered Elements: 5 (5) |
Complexity: 2 |
Complexity Density: 0.67 |
|
178 |
0
|
public void setHighlighted(boolean highlighted) {... |
179 |
0
|
if (highlighted) { |
180 |
0
|
Elements.fadeIn(panel.getElementById(backgroundId), 250, 100, new Elements.EmptyFadeCallback()); |
181 |
|
|
182 |
|
} else { |
183 |
0
|
Elements.fadeOut(panel.getElementById(backgroundId), 1000, 0, new Elements.EmptyFadeCallback()); |
184 |
|
|
185 |
|
} |
186 |
|
} |
187 |
|
|
|
|
| 0% |
Uncovered Elements: 1 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
188 |
0
|
public void removeHighlight(){... |
189 |
0
|
Elements.setOpacity(panel.getElementById(backgroundId), 0); |
190 |
|
} |
191 |
|
|
|
|
| 0% |
Uncovered Elements: 10 (10) |
Complexity: 5 |
Complexity Density: 0.62 |
|
192 |
0
|
@Override... |
193 |
|
public boolean equals(Object obj) { |
194 |
0
|
KSItemLabel item2 = null; |
195 |
0
|
boolean result = false; |
196 |
0
|
try { |
197 |
0
|
item2 = (KSItemLabel) obj; |
198 |
|
} catch (Exception e) { |
199 |
0
|
return false; |
200 |
|
} |
201 |
0
|
if (item2 != null && nullSafeEquals(getKey(), item2.getKey()) && |
202 |
|
nullSafeEquals(getDisplayText(), item2.getDisplayText())) { |
203 |
0
|
result = true; |
204 |
|
} |
205 |
0
|
return result; |
206 |
|
} |
207 |
|
|
208 |
|
|
209 |
|
|
|
|
| 0% |
Uncovered Elements: 9 (9) |
Complexity: 3 |
Complexity Density: 0.6 |
|
210 |
0
|
private boolean nullSafeEquals(String str1, String str2) {... |
211 |
0
|
boolean result = false; |
212 |
0
|
String tempStr1 = (str1 == null)? "" : str1; |
213 |
0
|
String tempStr2 = (str2 == null)? "" : str2; |
214 |
0
|
result = tempStr1.equals(tempStr2); |
215 |
0
|
return result; |
216 |
|
} |
217 |
|
|
|
|
| 0% |
Uncovered Elements: 9 (9) |
Complexity: 3 |
Complexity Density: 0.6 |
|
218 |
0
|
@Override... |
219 |
|
public int hashCode() { |
220 |
0
|
String key = getKey(); |
221 |
0
|
String displayText = getDisplayText(); |
222 |
0
|
key = (key == null)? "" : key; |
223 |
0
|
displayText = (displayText == null)? "" : displayText; |
224 |
0
|
return key.hashCode() + displayText.hashCode(); |
225 |
|
} |
226 |
|
|
227 |
|
} |