View Javadoc
1   package org.kuali.ole.describe.controller;
2   
3   import org.apache.commons.lang3.StringUtils;
4   import org.kuali.ole.describe.form.EditorForm;
5   import org.kuali.ole.describe.form.WorkBibMarcForm;
6   import org.kuali.ole.describe.form.WorkEInstanceOlemlForm;
7   import org.kuali.ole.describe.form.WorkInstanceOlemlForm;
8   import org.kuali.ole.docstore.common.client.DocstoreClient;
9   import org.kuali.ole.docstore.common.client.DocstoreClientLocator;
10  import org.kuali.ole.docstore.common.document.*;
11  import org.kuali.ole.docstore.common.document.content.enums.DocType;
12  import org.kuali.ole.docstore.common.document.content.instance.CallNumber;
13  import org.kuali.ole.docstore.common.document.content.instance.OleHoldings;
14  import org.kuali.ole.docstore.common.document.content.instance.xstream.HoldingOlemlRecordProcessor;
15  import org.kuali.ole.docstore.common.document.content.instance.xstream.ItemOlemlRecordProcessor;
16  import org.kuali.ole.docstore.common.exception.DocstoreException;
17  import org.kuali.ole.OLEConstants;
18  import org.kuali.ole.docstore.engine.client.DocstoreLocalClient;
19  import org.kuali.ole.sys.context.SpringContext;
20  import org.kuali.rice.krad.util.GlobalVariables;
21  import org.kuali.rice.krad.util.KRADConstants;
22  import org.slf4j.Logger;
23  import org.slf4j.LoggerFactory;
24  
25  import javax.print.Doc;
26  import javax.servlet.http.HttpServletRequest;
27  import java.util.List;
28  
29  public class AbstractEditor implements DocumentEditor {
30  
31      private static final Logger LOG = LoggerFactory.getLogger(AbstractEditor.class);
32      private DocstoreClientLocator docstoreClientLocator;
33      private HoldingOlemlRecordProcessor holdingOlemlRecordProcessor = new HoldingOlemlRecordProcessor();
34      private ItemOlemlRecordProcessor itemOlemlRecordProcessor = new ItemOlemlRecordProcessor();
35      private DocstoreClient docstoreClient = null;
36  
37      public DocstoreClient getDocstoreLocalClient() {
38          if (null == docstoreClient) {
39              return new DocstoreLocalClient();
40          }
41          return docstoreClient;
42      }
43  
44      public DocstoreClientLocator getDocstoreClientLocator() {
45          if (null == docstoreClientLocator) {
46              return  SpringContext.getBean(DocstoreClientLocator.class);
47          }
48          return docstoreClientLocator;
49      }
50  
51      public AbstractEditor() {
52      }
53  
54      /**
55       * This method deletes the record from docstore based on the doc type.
56       * @param editorForm
57       * @param docId
58       * @param operation
59       * @throws Exception
60       */
61      protected void getResponseFromDocStore(EditorForm editorForm, String docId, String operation) throws Exception {
62          try {
63              if(DocType.BIB.getCode().equalsIgnoreCase(editorForm.getDocType())){
64                  getDocstoreClientLocator().getDocstoreClient().deleteBib(docId);
65              }  else if(DocType.HOLDINGS.getCode().equalsIgnoreCase(editorForm.getDocType()) || DocType.EHOLDINGS.getCode().equalsIgnoreCase(editorForm.getDocType())){
66                  getDocstoreClientLocator().getDocstoreClient().deleteHoldings(docId);
67              } else if(DocType.ITEM.getCode().equalsIgnoreCase(editorForm.getDocType())){
68                  getDocstoreClientLocator().getDocstoreClient().deleteItem(docId);
69              }
70          } catch (Exception e) {
71              throw e;
72          }
73      }
74  
75      /**
76       * This method returns error message if it has exception else deletes record.
77       * @param editorForm
78       * @return
79       */
80      protected EditorForm deleteFromDocStore(EditorForm editorForm) {
81          String docId = editorForm.getDocId();
82          try {
83              getResponseFromDocStore(editorForm, docId, OLEConstants.DELETE);
84          } catch (Exception e) {
85              DocstoreException docstoreException = (DocstoreException) e;
86              String errorCode = docstoreException.getErrorCode();
87              if (StringUtils.isNotEmpty(errorCode)) {
88                  GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, errorCode);
89              } else {
90                  GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, e.getMessage());
91              }
92              setDocTypeOfViewPage(editorForm);
93              editorForm.getDocumentForm().setCanDeleteEHoldings(Boolean.FALSE);
94              return editorForm.getDocumentForm();
95          }
96          GlobalVariables.getMessageMap().putInfo(KRADConstants.GLOBAL_INFO, OLEConstants.RECORD_DELETE_MESSAGE);
97          removeDocumentFromTree(editorForm);
98          editorForm.setShowDeleteTree(false);
99          editorForm.setHasLink(false);
100         editorForm.getDocumentForm().setViewId(OLEConstants.DELETE_VIEW_PAGE);
101         return editorForm.getDocumentForm();
102     }
103 
104     /**
105      * This methods sets doc type to return to view page
106      * @param editorForm
107      */
108     private void setDocTypeOfViewPage(EditorForm editorForm) {
109         if (null != editorForm.getDocumentForm()) {
110             if (editorForm.getDocumentForm() instanceof WorkBibMarcForm) {
111                 editorForm.setDocType(DocType.BIB.getCode());
112             } else if (editorForm.getDocumentForm() instanceof WorkInstanceOlemlForm) {
113                 editorForm.setDocType(DocType.HOLDINGS.getCode());
114             }  else if (editorForm.getDocumentForm() instanceof WorkEInstanceOlemlForm) {
115                 editorForm.setDocType(DocType.EHOLDINGS.getCode());
116             }  else {
117                 editorForm.setDocType(DocType.ITEM.getCode());
118             }
119         }
120     }
121 
122     /**
123      * This method removes deleted record from documentForm bib tree to build left pane tree.
124      * @param editorForm
125      */
126     protected void removeDocumentFromTree(EditorForm editorForm) {
127         if (DocType.BIB.getCode().equalsIgnoreCase(editorForm.getDocType())) {
128             List<BibTree> bibTreeList = editorForm.getDocumentForm().getBibTreeList();
129             if (null != bibTreeList.get(0)) {
130                 BibTree bibTree = bibTreeList.get(0);
131                 if (null != bibTree.getBib() && null != bibTree.getBib().getId()) {
132                     if (editorForm.getDocId().equalsIgnoreCase(bibTree.getBib().getId())) {
133                         bibTreeList.remove(bibTree);
134                     }
135                 }
136             }
137         } else if (DocType.HOLDINGS.getCode().equalsIgnoreCase(editorForm.getDocType()) || DocType.EHOLDINGS.getCode().equalsIgnoreCase(editorForm.getDocType())) {
138             List<BibTree> bibTreeList = editorForm.getDocumentForm().getBibTreeList();
139             boolean deleteHoldingsTree = false;
140             int bibTreeIndex = 0;
141             int holdingsTreeIndex = 0;
142             for (bibTreeIndex = 0; bibTreeIndex < bibTreeList.size(); bibTreeIndex++) {
143                 if (!deleteHoldingsTree) {
144                     BibTree bibTree = bibTreeList.get(bibTreeIndex);
145                     if (bibTree != null) {
146                         for (holdingsTreeIndex = 0; holdingsTreeIndex < bibTree.getHoldingsTrees().size(); holdingsTreeIndex++) {
147                             HoldingsTree holdingsTree = bibTree.getHoldingsTrees().get(holdingsTreeIndex);
148                             if (holdingsTree != null) {
149                                 if (null != holdingsTree.getHoldings() && editorForm.getDocId().equalsIgnoreCase(holdingsTree.getHoldings().getId())) {
150                                     deleteHoldingsTree = true;
151                                     break;
152                                 }
153                             }
154                         }
155                     }
156                 } else {
157                     break;
158                 }
159             }
160             if (deleteHoldingsTree) {
161                 editorForm.getDocumentForm().getBibTreeList().get(--bibTreeIndex).getHoldingsTrees().remove(holdingsTreeIndex);
162             }
163         } else if (DocType.ITEM.getCode().equalsIgnoreCase(editorForm.getDocType())) {
164             List<BibTree> bibTreeList = editorForm.getDocumentForm().getBibTreeList();
165             boolean deleteItem = false;
166             int bibTreeIndex = 0;
167             int holdingsTreeIndex = 0;
168             int itemIndex = 0;
169             for (bibTreeIndex = 0; bibTreeIndex < bibTreeList.size(); bibTreeIndex++) {
170                 BibTree bibTree = bibTreeList.get(bibTreeIndex);
171                 if (bibTree != null) {
172                     for (holdingsTreeIndex = 0; holdingsTreeIndex < bibTree.getHoldingsTrees().size(); holdingsTreeIndex++) {
173                         if (!deleteItem) {
174                             HoldingsTree holdingsTree = bibTree.getHoldingsTrees().get(holdingsTreeIndex);
175                             if (holdingsTree != null) {
176                                 for (itemIndex = 0; itemIndex < holdingsTree.getItems().size(); itemIndex++) {
177                                     Item item = holdingsTree.getItems().get(itemIndex);
178                                     if (null != item) {
179                                         if (editorForm.getDocId().equalsIgnoreCase(item.getId())) {
180                                             deleteItem = true;
181                                             break;
182                                         }
183                                     }
184                                 }
185                             }
186                         } else {
187                             break;
188                         }
189                     }
190                 }
191             }
192             if (deleteItem) {
193                 editorForm.getDocumentForm().getBibTreeList().get(--bibTreeIndex).getHoldingsTrees().get(--holdingsTreeIndex).getItems().remove(itemIndex);
194             }
195         }
196     }
197 
198     @Override
199     public EditorForm loadDocument(EditorForm editorForm) {
200         return null;  //To change body of implemented methods use File | Settings | File Templates.
201     }
202 
203     @Override
204     public EditorForm saveDocument(EditorForm editorForm) {
205         return null;  //To change body of implemented methods use File | Settings | File Templates.
206     }
207 
208     @Override
209     public EditorForm deleteDocument(EditorForm editorForm) {
210         return null;  //To change body of implemented methods use File | Settings | File Templates.
211     }
212 
213     @Override
214     public EditorForm createNewRecord(EditorForm editorForm, BibTree bibTree) {
215         return null;  //To change body of implemented methods use File | Settings | File Templates.
216     }
217 
218     @Override
219     public EditorForm editNewRecord(EditorForm editorForm, BibTree bibTree) {
220         return null;  //To change body of implemented methods use File | Settings | File Templates.
221     }
222 
223     @Override
224     public String saveDocument(BibTree bibTree, EditorForm editorForm) {
225         return null;  //To change body of implemented methods use File | Settings | File Templates.
226     }
227 
228     @Override
229     public EditorForm addORDeleteFields(EditorForm editorForm, HttpServletRequest request) {
230         return null;  //To change body of implemented methods use File | Settings | File Templates.
231     }
232 
233     @Override
234     public EditorForm deleteVerify(EditorForm editorForm) throws Exception {
235         return null;  //To change body of implemented methods use File | Settings | File Templates.
236     }
237 
238     @Override
239     public EditorForm delete(EditorForm editorForm) throws Exception {
240         return null;  //To change body of implemented methods use File | Settings | File Templates.
241     }
242 
243     @Override
244     public EditorForm addORRemoveExtentOfOwnership(EditorForm editorForm, HttpServletRequest request) {
245         return null;  //To change body of implemented methods use File | Settings | File Templates.
246     }
247 
248     @Override
249     public EditorForm addORRemoveAccessInformationAndHoldingsNotes(EditorForm editorForm, HttpServletRequest request) {
250         return null;  //To change body of implemented methods use File | Settings | File Templates.
251     }
252 
253     @Override
254     public EditorForm addORRemoveItemNote(EditorForm editorForm, HttpServletRequest request) {
255         return null;  //To change body of implemented methods use File | Settings | File Templates.
256     }
257 
258     @Override
259     public EditorForm showBibs(EditorForm editorForm) {
260         return null;
261     }
262 
263     @Override
264     public EditorForm copy(EditorForm editorForm) {
265         return null;
266     }
267 
268     @Override
269     public Boolean isValidUpdate(EditorForm editorForm) {
270         return true;  //To change body of implemented methods use File | Settings | File Templates.
271     }
272 
273     protected HoldingsTree getHoldingsTree(String eResourceID) {
274         HoldingsTree holdingsTree = new HoldingsTree();
275         holdingsTree.setHoldings(getHoldingsRecord(eResourceID));
276        /* if (!((StringUtils.isNotBlank(linkToOrderOption) && linkToOrderOption.equals(OLEConstants.NB_ELECTRONIC)) || StringUtils.isNotEmpty(eResourceID))) {
277             holdingsTree.getItems().add(getItemRecord());
278         }*/
279         return holdingsTree;
280     }
281 
282     protected Item getItemRecord() {
283         Item item = new ItemOleml();
284         item.setType(DocType.ITEM.getCode());
285         item.setCategory("work");
286         item.setFormat("olml");
287         if(item.getDisplayLabel() == null) {
288             item.setDisplayLabel("Item");
289         }
290         org.kuali.ole.docstore.common.document.content.instance.Item oleItem = new org.kuali.ole.docstore.common.document.content.instance.Item();
291         CallNumber callNumber = new CallNumber();
292         oleItem.setCallNumber(callNumber);
293         item.setContent(itemOlemlRecordProcessor.toXML(oleItem));
294         return item;
295     }
296 
297     protected Holdings getHoldingsRecord(String eResourceID) {
298         Holdings holdings = null;
299         OleHoldings oleHoldings = null;
300         CallNumber callNumber;
301         if (StringUtils.isNotEmpty(eResourceID)) {
302             holdings = new EHoldings();
303             oleHoldings = new OleHoldings();
304             callNumber = new CallNumber();
305             oleHoldings.setCallNumber(callNumber);
306         } /*else {
307             holdings = new PHoldings();
308             oleHoldings = new OleHoldings();
309             callNumber = new CallNumber();
310             oleHoldings.setCallNumber(callNumber);
311         }*/
312         if (holdings != null && oleHoldings != null)  {
313             holdings.setContent(holdingOlemlRecordProcessor.toXML(oleHoldings));
314         }
315         return holdings;
316     }
317 
318     protected  Holdings retrieveHoldings(String holdingsId) throws Exception{
319         Holdings holdings = getDocstoreClientLocator().getDocstoreClient().retrieveHoldings(holdingsId);
320         return holdings;
321     }
322 
323     protected  org.kuali.ole.docstore.common.document.Item retrieveItem(String itemId) throws Exception{
324         org.kuali.ole.docstore.common.document.Item item = getDocstoreClientLocator().getDocstoreClient().retrieveItem(itemId);
325         return item;
326     }
327 
328     @Override
329     public EditorForm bulkUpdate(EditorForm editorForm, List<String> ids) {
330         return null;  //To change body of implemented methods use File | Settings | File Templates.
331     }
332 }