View Javadoc
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   * Created with IntelliJ IDEA.
19   * User: Sreekanth
20   * Date: 12/20/12
21   * Time: 10:57 AM
22   * To change this template use File | Settings | File Templates.
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                 //setTitle("<i><font color='red'>" + StringEscapeUtils.escapeHtml(titleBuilder.toString()) + "</font></i>");
102                 setTitle("<i><font color='red'>" + encodeString(titleBuilder.toString()) + "</font></i>");
103             } else {
104                 //setTitle(StringEscapeUtils.escapeHtml(titleBuilder.toString()));
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("&lt;");
126             } else if (character == '>') {
127                 result.append("&gt;");
128             } else if (character == '&') {
129                 result.append("&amp;");
130             } else if (character == '\"') {
131                 result.append("&quot;");
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                 //the char is not a special one
192                 //add it to the result as is
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             //no prefix
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                /* if (holdings.getLocationName() != null && holdings.getLocationName().length() > 0) {
284                     stringBuffer.append(holdings.getLocationName());
285                 }
286                *//* if (stringBuffer.length() > 0 && workEInstanceDocument.getWorkEHoldingsDocument().geteResourceName() != null && workEInstanceDocument.getWorkEHoldingsDocument().geteResourceName().length() > 0) {
287                     stringBuffer.append("-");
288                 }
289                 if (workEInstanceDocument.getWorkEHoldingsDocument().geteResourceName() != null) {
290                     stringBuffer.append(workEInstanceDocument.getWorkEHoldingsDocument().geteResourceName());
291                 }*//*
292 
293             if (stringBuffer.length() > 0) {
294                 setTitle(stringBuffer.toString());
295             } else {
296                 setTitle(eHoldingsTitle);
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 /*        getTitle();
318         getUuid();*/
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         //String itemLocation = null;
388         //StringBuilder treeBuilder = new StringBuilder();
389         //String locationName = this.getHoldingLocation();
390         //org.kuali.ole.docstore.common.document.content.instance.Item itemDoc = (org.kuali.ole.docstore.common.document.content.instance.Item) item.getContentObject();
391         /*if (itemDoc.getLocation() != null) {
392             itemLocation = item.getLocation();
393             if (!(itemLocation).equalsIgnoreCase(locationName)) {
394 
395                 treeBuilder.append(itemLocation);
396             }
397         }
398         StringBuffer removeFromCallNumber = new StringBuffer();
399         String callNumberPrefix = null;
400         // String itemLocation = null;
401         if (itemDoc.getLocation() != null) {
402             itemLocation = item.getLocation();
403             if (!(itemLocation).equalsIgnoreCase(locationName)) {
404 
405                 treeBuilder.append(itemLocation);
406             }
407         }
408         if(itemDoc.getCallNumber() !=null){
409             if (StringUtils.isNotEmpty(itemDoc.getCallNumber().getPrefix())) {
410                 callNumberPrefix = itemDoc.getCallNumber().getPrefix();
411             }
412             if (callNumberPrefix != null) {
413                 if (treeBuilder.length() > 0) {
414                     treeBuilder.append("-").append(callNumberPrefix);
415                 } else {
416                     treeBuilder.append(callNumberPrefix);
417                 }
418             }
419             if (StringUtils.isNotEmpty(itemDoc.getCallNumber().getNumber())) {
420                 if (treeBuilder.length() > 0) {
421                     treeBuilder.append("-");
422                 }
423                 treeBuilder.append(itemDoc.getCallNumber().getNumber());
424             }
425         }
426         if (StringUtils.isNotEmpty(itemDoc.getEnumeration())) {
427             if (treeBuilder.length() > 0) {
428                 treeBuilder.append("-");
429             }
430             treeBuilder.append(itemDoc.getEnumeration());
431             removeFromCallNumber.append(" " + itemDoc.getEnumeration());
432         }
433         if (StringUtils.isNotEmpty(itemDoc.getChronology())) {
434             if (treeBuilder.length() > 0) {
435                 treeBuilder.append("-");
436             }
437             treeBuilder.append(itemDoc.getChronology());
438             removeFromCallNumber.append(" " + itemDoc.getChronology());
439 
440         }
441         if (StringUtils.isNotEmpty(itemDoc.getCopyNumber())) {
442             if (treeBuilder.length() > 0) {
443                 treeBuilder.append("-");
444             }
445             treeBuilder.append(itemDoc.getCopyNumber());
446             removeFromCallNumber.append(" " + itemDoc.getCopyNumber());
447         }
448         if (itemDoc.getAccessInformation()!=null && StringUtils.isNotEmpty(itemDoc.getAccessInformation().getBarcode())) {
449             if (treeBuilder.length() > 0) {
450                 treeBuilder.append("-");
451             }
452             treeBuilder.append(itemDoc.getAccessInformation().getBarcode());
453         }
454         if (treeBuilder.length() == 0) {
455             if (StringUtils.isNotEmpty(itemDoc.getVolumeNumber())) {
456                 treeBuilder.append(itemDoc.getVolumeNumber());
457             } else {
458                 treeBuilder.append("Item");
459             }
460         }
461         itemLevelContent = treeBuilder.toString().replaceAll(removeFromCallNumber.toString(), "");*/
462 
463         //return itemLevelContent;
464 
465     }
466 
467     public String getHoldingLocation() {
468         return holdingLocation;
469     }
470 
471     public void setHoldingLocation(String holdingLocation) {
472         this.holdingLocation = holdingLocation;
473     }
474 }