1 package org.kuali.ole.describe.bo;
2
3 import org.apache.commons.lang.StringEscapeUtils;
4 import org.apache.commons.lang.StringUtils;
5 import org.kuali.ole.OLEConstants;
6 import org.kuali.ole.docstore.common.document.*;
7 import org.kuali.ole.docstore.common.document.HoldingsTree;
8 import org.kuali.ole.docstore.common.document.Item;
9 import org.kuali.ole.docstore.common.document.content.instance.*;
10 import org.kuali.ole.docstore.model.bo.*;
11 import org.kuali.ole.docstore.model.enums.DocType;
12
13 import java.text.CharacterIterator;
14 import java.text.StringCharacterIterator;
15 import java.util.Map;
16
17
18
19
20
21
22
23
24 public class DocumentTreeNode {
25
26 private String title;
27 private String uuid;
28 private boolean select;
29 private boolean returnCheck;
30
31 private OleDocument oleDocument;
32 private Bib bib;
33 private Holdings holdings;
34 private Item item;
35 private BibTree bibTree;
36
37 private String selectedInstance;
38 private Map<String, String> selectionMap;
39 private String holdingLocation;
40
41 public DocumentTreeNode() {
42
43 }
44
45 public BibTree getBibTree() {
46 return bibTree;
47 }
48
49 public void setBibTree(BibTree bibTree) {
50 this.bibTree = bibTree;
51 }
52
53 public Holdings getHoldings() {
54 return holdings;
55 }
56
57 public Item getItem() {
58 return item;
59 }
60
61 public void setItem(Item item) {
62 this.item = item;
63 if (item != null) {
64 setTitle(buildTreeDataForItem(item, item.getHolding()));
65 setUuid(item.getId());
66 } else {
67 setTitle("");
68 }
69 }
70
71 public String getTitle() {
72 return title;
73 }
74
75 public void setTitle(String title) {
76 this.title = title;
77 }
78
79 public String getUuid() {
80 return uuid;
81 }
82
83 public void setUuid(String uuid) {
84 this.uuid = uuid;
85 }
86
87 public void setBib(Bib bib) {
88 this.bib = bib;
89 StringBuilder titleBuilder = new StringBuilder();
90 if (bib != null) {
91 if (bib.getTitle() != null) {
92 titleBuilder.append(bib.getTitle());
93 }
94 if (titleBuilder.length() > 0) {
95 titleBuilder.append(" / ");
96 }
97 if (bib.getAuthor() != null) {
98 titleBuilder.append(bib.getAuthor());
99 }
100 if (bib.isStaffOnly()) {
101
102 setTitle("<i><font color='red'>" + encodeString(titleBuilder.toString()) + "</font></i>");
103 } else {
104
105 setTitle(encodeString(titleBuilder.toString()));
106 }
107 } else {
108 if (bib.isStaffOnly()) {
109 setTitle("<i><font color='red'>" + "Bibliographic Title" + "</font></i>");
110 } else {
111 setTitle("Bibliographic Title");
112 }
113 }
114
115 setUuid(bib.getId());
116
117 }
118
119 protected String encodeString(String label) {
120 StringBuilder result = new StringBuilder();
121 StringCharacterIterator iterator = new StringCharacterIterator(label);
122 char character = iterator.current();
123 while (character != CharacterIterator.DONE) {
124 if (character == '<') {
125 result.append("<");
126 } else if (character == '>') {
127 result.append(">");
128 } else if (character == '&') {
129 result.append("&");
130 } else if (character == '\"') {
131 result.append(""");
132 } else if (character == '\t') {
133 addCharEntity(9, result);
134 } else if (character == '!') {
135 addCharEntity(33, result);
136 } else if (character == '#') {
137 addCharEntity(35, result);
138 } else if (character == '$') {
139 addCharEntity(36, result);
140 } else if (character == '%') {
141 addCharEntity(37, result);
142 } else if (character == '\'') {
143 addCharEntity(39, result);
144 } else if (character == '(') {
145 addCharEntity(40, result);
146 } else if (character == ')') {
147 addCharEntity(41, result);
148 } else if (character == '*') {
149 addCharEntity(42, result);
150 } else if (character == '+') {
151 addCharEntity(43, result);
152 } else if (character == ',') {
153 addCharEntity(44, result);
154 } else if (character == '-') {
155 addCharEntity(45, result);
156 } else if (character == '.') {
157 addCharEntity(46, result);
158 } else if (character == '/') {
159 addCharEntity(47, result);
160 } else if (character == ':') {
161 addCharEntity(58, result);
162 } else if (character == ';') {
163 addCharEntity(59, result);
164 } else if (character == '=') {
165 addCharEntity(61, result);
166 } else if (character == '?') {
167 addCharEntity(63, result);
168 } else if (character == '@') {
169 addCharEntity(64, result);
170 } else if (character == '[') {
171 addCharEntity(91, result);
172 } else if (character == '\\') {
173 addCharEntity(92, result);
174 } else if (character == ']') {
175 addCharEntity(93, result);
176 } else if (character == '^') {
177 addCharEntity(94, result);
178 } else if (character == '_') {
179 addCharEntity(95, result);
180 } else if (character == '`') {
181 addCharEntity(96, result);
182 } else if (character == '{') {
183 addCharEntity(123, result);
184 } else if (character == '|') {
185 addCharEntity(124, result);
186 } else if (character == '}') {
187 addCharEntity(125, result);
188 } else if (character == '~') {
189 addCharEntity(126, result);
190 } else {
191
192
193 result.append(character);
194 }
195 character = iterator.next();
196 }
197 return result.toString();
198 }
199
200 private void addCharEntity(Integer escapeId, StringBuilder labelBuilder) {
201 String padding = "";
202 if (escapeId <= 9) {
203 padding = "00";
204 } else if (escapeId <= 99) {
205 padding = "0";
206 } else {
207
208 }
209 String number = padding + escapeId.toString();
210 labelBuilder.append("&#" + number + ";");
211 }
212
213
214 public void setHoldings(HoldingsTree holdingsTree) {
215 this.holdings = holdingsTree.getHoldings();
216
217 if (holdingsTree != null && holdingsTree.getHoldings() != null) {
218 if (holdingsTree.getHoldings().getHoldingsType().equalsIgnoreCase("electronic")) {
219 setEholdings(holdingsTree);
220 } else {
221 setTitle(buildTreeDataForHoldings(holdingsTree));
222 setUuid(holdingsTree.getHoldings().getId());
223 }
224
225 } else {
226 setTitle("");
227 }
228
229 }
230
231 public void setWorkBibDocument(WorkBibDocument workBibDocument) {
232 this.oleDocument = workBibDocument;
233 StringBuilder titleBuilder = new StringBuilder();
234 if (workBibDocument != null) {
235 if (workBibDocument.getTitle() != null) {
236 titleBuilder.append(workBibDocument.getTitle());
237 }
238 if (titleBuilder.length() > 0) {
239 titleBuilder.append(" / ");
240 }
241 if (workBibDocument.getAuthor() != null) {
242 titleBuilder.append(workBibDocument.getAuthor());
243 }
244
245 setTitle(StringEscapeUtils.escapeHtml(titleBuilder.toString()));
246 } else {
247 setTitle("Bibliographic Title");
248 }
249
250 setUuid(workBibDocument.getId());
251
252 }
253
254 public void setWorkItemDocument(Item item) {
255 this.item = item;
256 if (item != null) {
257 setTitle(buildTreeDataForItem(item));
258 } else {
259 setTitle("Item");
260 }
261
262 setUuid(item.getId());
263 }
264
265 public void setWorkHoldingsDocument(Item item, Holdings holdings) {
266 this.item = item;
267 if (item != null) {
268 setTitle(buildTreeDataForItem(item, holdings));
269 } else {
270 setTitle("Item");
271 }
272
273 setUuid(item.getId());
274 }
275
276 public void setEholdings(HoldingsTree holdingsTree) {
277 this.holdings = holdingsTree.getHoldings();
278 setTitle(buildTreeDataForHoldings(holdingsTree));
279 String eHoldingsTitle = OLEConstants.E_HOLDINGS_DOC_TYPE;
280 StringBuffer stringBuffer = new StringBuffer();
281 if (holdingsTree != null && holdingsTree.getHoldings() != null) {
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299 if ( holdingsTree.getHoldings().isStaffOnly()) {
300 String label = getTitle();
301 label = "<i><font color='red'>" + label + "</font></i>";
302 setTitle(label);
303 }
304 }
305
306
307 setUuid( holdingsTree.getHoldings().getId() + " " + DocType.EHOLDINGS.getCode());
308 }
309
310 public OleDocument getWorkBibDocument() {
311 getTitle();
312 getUuid();
313 return oleDocument = new WorkBibDocument();
314 }
315
316 public OleDocument getWorkInstanceDocument() {
317
318
319 return oleDocument = new WorkInstanceDocument();
320 }
321
322 public OleDocument getWorkItemDocument() {
323 getTitle();
324 getUuid();
325 return oleDocument = new WorkItemDocument();
326 }
327
328
329 public OleDocument getWorkEInstanceDocument() {
330 getTitle();
331 getUuid();
332 return oleDocument = new WorkEInstanceDocument();
333 }
334
335
336 public String getSelectedInstance() {
337 return selectedInstance;
338 }
339
340 public void setSelectedInstance(String selectedInstance) {
341 this.selectedInstance = selectedInstance;
342 }
343
344
345 public boolean isSelect() {
346 return select;
347 }
348
349 public void setSelect(boolean select) {
350 this.select = select;
351 }
352
353 public Map<String, String> getSelectionMap() {
354 return selectionMap;
355 }
356
357 public void setSelectionMap(Map<String, String> selectionMap) {
358 this.selectionMap = selectionMap;
359 }
360
361 public boolean isReturnCheck() {
362 return returnCheck;
363 }
364
365 public void setReturnCheck(boolean returnCheck) {
366 this.returnCheck = returnCheck;
367 }
368
369
370 public String buildTreeDataForHoldings(HoldingsTree holdingsTree) {
371
372 return new EditorFormDataHandler().getHoldingsLabel(holdingsTree);
373 }
374
375 public String buildTreeDataForItem(Item item, Holdings holdings) {
376
377 return new EditorFormDataHandler().getItemLabel(holdings, item);
378
379 }
380
381 public String buildTreeDataForItem(Item item) {
382 String itemTitle = item.getDisplayLabel();
383 if (StringUtils.isNotBlank(itemTitle)) {
384 return itemTitle;
385 }
386 return "Item";
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465 }
466
467 public String getHoldingLocation() {
468 return holdingLocation;
469 }
470
471 public void setHoldingLocation(String holdingLocation) {
472 this.holdingLocation = holdingLocation;
473 }
474 }