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
56
57
58
59
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
77
78
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
106
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
124
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;
201 }
202
203 @Override
204 public EditorForm saveDocument(EditorForm editorForm) {
205 return null;
206 }
207
208 @Override
209 public EditorForm deleteDocument(EditorForm editorForm) {
210 return null;
211 }
212
213 @Override
214 public EditorForm createNewRecord(EditorForm editorForm, BibTree bibTree) {
215 return null;
216 }
217
218 @Override
219 public EditorForm editNewRecord(EditorForm editorForm, BibTree bibTree) {
220 return null;
221 }
222
223 @Override
224 public String saveDocument(BibTree bibTree, EditorForm editorForm) {
225 return null;
226 }
227
228 @Override
229 public EditorForm addORDeleteFields(EditorForm editorForm, HttpServletRequest request) {
230 return null;
231 }
232
233 @Override
234 public EditorForm deleteVerify(EditorForm editorForm) throws Exception {
235 return null;
236 }
237
238 @Override
239 public EditorForm delete(EditorForm editorForm) throws Exception {
240 return null;
241 }
242
243 @Override
244 public EditorForm addORRemoveExtentOfOwnership(EditorForm editorForm, HttpServletRequest request) {
245 return null;
246 }
247
248 @Override
249 public EditorForm addORRemoveAccessInformationAndHoldingsNotes(EditorForm editorForm, HttpServletRequest request) {
250 return null;
251 }
252
253 @Override
254 public EditorForm addORRemoveItemNote(EditorForm editorForm, HttpServletRequest request) {
255 return null;
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;
271 }
272
273 protected HoldingsTree getHoldingsTree(String eResourceID) {
274 HoldingsTree holdingsTree = new HoldingsTree();
275 holdingsTree.setHoldings(getHoldingsRecord(eResourceID));
276
277
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 }
307
308
309
310
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;
331 }
332 }