001 package org.kuali.ole.describe.controller;
002
003 import org.apache.log4j.Logger;
004 import org.apache.solr.client.solrj.SolrServerException;
005 import org.kuali.ole.PropertyUtil;
006 import org.kuali.ole.converter.MarcXMLConverter;
007 import org.kuali.ole.describe.bo.ExternalDataSourceConfig;
008 import org.kuali.ole.describe.bo.ImportBibUserPreferences;
009 import org.kuali.ole.describe.bo.WorkBibDocumentSearchResult;
010 import org.kuali.ole.describe.form.ImportBibForm;
011 import org.kuali.ole.describe.service.ImportBibService;
012 import org.kuali.ole.docstore.discovery.model.SearchCondition;
013 import org.kuali.ole.docstore.discovery.model.SearchParams;
014 import org.kuali.ole.docstore.discovery.service.QueryService;
015 import org.kuali.ole.docstore.discovery.service.QueryServiceImpl;
016 import org.kuali.ole.docstore.model.bo.WorkBibDocument;
017 import org.kuali.ole.docstore.model.converter.WorkBibDocConverter;
018 import org.kuali.ole.docstore.model.xmlpojo.ingest.Request;
019 import org.kuali.ole.docstore.model.xmlpojo.ingest.Response;
020 import org.kuali.ole.docstore.model.xmlpojo.ingest.ResponseDocument;
021 import org.kuali.ole.docstore.model.xmlpojo.work.bib.marc.ControlField;
022 import org.kuali.ole.docstore.model.xmlpojo.work.bib.marc.WorkBibMarcRecord;
023 import org.kuali.ole.docstore.model.xmlpojo.work.bib.marc.WorkBibMarcRecords;
024 import org.kuali.ole.docstore.model.xstream.ingest.ResponseHandler;
025 import org.kuali.ole.docstore.model.xstream.work.bib.marc.MRKToMARCXMLConverter;
026 import org.kuali.ole.docstore.model.xstream.work.bib.marc.WorkBibMarcRecordProcessor;
027 import org.kuali.ole.editor.service.DocstoreHelperService;
028 import org.kuali.ole.externalds.DataSourceConfig;
029 import org.kuali.ole.externalds.ExternalDataSource;
030 import org.kuali.ole.externalds.ExternalDataSourceFactory;
031 import org.kuali.rice.krad.service.BusinessObjectService;
032 import org.kuali.rice.krad.service.KRADServiceLocator;
033 import org.kuali.rice.krad.uif.UifParameters;
034 import org.kuali.rice.krad.web.controller.UifControllerBase;
035 import org.kuali.rice.krad.web.form.UifFormBase;
036 import org.springframework.stereotype.Controller;
037 import org.springframework.validation.BindingResult;
038 import org.springframework.web.bind.annotation.ModelAttribute;
039 import org.springframework.web.bind.annotation.RequestMapping;
040 import org.springframework.web.multipart.MultipartFile;
041 import org.springframework.web.servlet.ModelAndView;
042
043 import javax.servlet.ServletException;
044 import javax.servlet.http.HttpServletRequest;
045 import javax.servlet.http.HttpServletResponse;
046 import java.io.IOException;
047 import java.util.*;
048
049 /**
050 * Created with IntelliJ IDEA.
051 * User: pj7789
052 * Date: 26/11/12
053 * Time: 11:46 AM
054 * To change this template use File | Settings | File Templates.
055 */
056
057 @Controller
058 @RequestMapping(value = "/importBibController")
059 public class ImportBibController
060 extends UifControllerBase {
061
062 private static final Logger LOG = Logger.getLogger(ImportBibController.class);
063
064 /**
065 * @see org.kuali.rice.krad.web.controller.UifControllerBase#createInitialForm(javax.servlet.http.HttpServletRequest)
066 */
067
068
069 /**
070 * This method creates a instance of ListBoxForm
071 *
072 * @param request
073 * @return ListBoxForm
074 */
075 @Override
076 protected ImportBibForm createInitialForm(HttpServletRequest request) {
077 return new ImportBibForm();
078 }
079
080 /**
081 * This method takes the initial request when click on DublinEditor Screen.
082 *
083 * @param form
084 * @param result
085 * @param request
086 * @param response
087 * @return ModelAndView
088 */
089 @Override
090 @RequestMapping(params = "methodToCall=start")
091 public ModelAndView start(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
092 HttpServletRequest request, HttpServletResponse response) {
093 ImportBibForm importBibForm = (ImportBibForm) form;
094 return super.start(importBibForm, result, request, response);
095 }
096
097 /**
098 * Used for Test-case
099 *
100 * @param result
101 * @param request
102 * @param response
103 * @param importBibForm
104 * @return ModelAndView
105 */
106 protected ModelAndView callSuper(BindingResult result, HttpServletRequest request, HttpServletResponse response,
107 ImportBibForm importBibForm) {
108 return super.navigate(importBibForm, result, request, response);
109 }
110
111 @RequestMapping(params = "methodToCall=overLay")
112 public ModelAndView overLay(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
113 HttpServletRequest request, HttpServletResponse response) throws Exception {
114 String uuid = request.getParameter("docId");
115 ImportBibForm importBibForm = (ImportBibForm) form;
116 importBibForm.setUuid(uuid);
117 DocstoreHelperService helperService = new DocstoreHelperService();
118 String bibXml = helperService.getDocstoreData(uuid);
119 if (bibXml != null && bibXml.length() > 0) {
120 WorkBibMarcRecordProcessor workBibMarcRecordProcessor = new WorkBibMarcRecordProcessor();
121 WorkBibMarcRecords marcRecords = workBibMarcRecordProcessor.fromXML(bibXml);
122 if (marcRecords != null && marcRecords.getRecords() != null && marcRecords.getRecords().size() > 0) {
123 importBibForm.setExistingWorkBibMarcRecord(marcRecords.getRecords().get(0));
124
125 }
126 }
127 return getUIFModelAndView(importBibForm, "SearchBibViewPage");
128 }
129
130
131 @RequestMapping(params = "methodToCall=load")
132 public ModelAndView load(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
133 HttpServletRequest request, HttpServletResponse response) throws Exception {
134 LOG.info("Inside Search Method");
135 ImportBibForm importBibForm = (ImportBibForm) form;
136 MultipartFile multipartFile = importBibForm.getImportBibSearch().getLocationFile();
137 importBibForm.getImportBibSearch().setReturnCheck(false);
138
139 String marcXmlContent = getMarcXml(multipartFile);
140 request.getSession().setAttribute("showDetailForLocalSearchRecord",marcXmlContent);
141 if (marcXmlContent != null && marcXmlContent.length() > 0) {
142 //convert xml to pojo
143 WorkBibMarcRecordProcessor workBibMarcRecordProcessor = new WorkBibMarcRecordProcessor();
144 WorkBibMarcRecords marcRecords = workBibMarcRecordProcessor.fromXML(marcXmlContent);
145 if (marcRecords != null) {
146 importBibForm.setWorkBibMarcRecordList(marcRecords.getRecords());
147 }
148 importBibForm.getImportBibSearch().setSelectedFileName(multipartFile.getOriginalFilename());
149 importBibForm.getImportBibSearch().setRecordsInFile(marcRecords.getRecords().size());
150 // convert pojo to workBibDoc
151 WorkBibDocConverter workBibDocConverter = new WorkBibDocConverter();
152 List<WorkBibDocument> workBibDocumentList = workBibDocConverter.convert(marcRecords);
153 List<WorkBibDocumentSearchResult> importBibResultsList = mapMarcFieldValues(workBibDocumentList);
154 // Sorting the import bib result list and mapping it to corresponding marc record
155 SortedMap<WorkBibDocumentSearchResult , WorkBibMarcRecord> marcDocRecMapSorted = new TreeMap<WorkBibDocumentSearchResult, WorkBibMarcRecord>(new ImportBibService());
156 for(int i=0; i<importBibResultsList.size() ; i++){
157 marcDocRecMapSorted.put(importBibResultsList.get(i) ,importBibForm.getWorkBibMarcRecordList().get(i)) ;
158 }
159 importBibForm.setMarcDocRecMap(marcDocRecMapSorted);
160 List<WorkBibDocumentSearchResult> searchList = new ArrayList<WorkBibDocumentSearchResult>();
161 searchList.addAll(importBibForm.getMarcDocRecMap().keySet());
162 // adding the sorted key values to search results list to display in seacrch table
163 importBibForm.getImportBibSearch().setLocalBibDocumentSearchResults(searchList);
164 }
165 return getUIFModelAndView(importBibForm);
166 }
167
168
169 @RequestMapping(params = "methodToCall=search")
170 public ModelAndView search(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
171 HttpServletRequest request, HttpServletResponse response) throws Exception {
172 LOG.info("Inside Search Method");
173 ImportBibForm importBibForm = (ImportBibForm) form;
174 SearchParams searchParams = importBibForm.getSearchParams();
175 List<SearchCondition> searchFieldsList = searchParams.getSearchFieldsList();
176 for (SearchCondition searchCondition : searchParams.getSearchFieldsList()) {
177 LOG.debug("getSearchText..." + searchCondition.getSearchText());
178 LOG.debug("getSearchScope..." + searchCondition.getSearchScope());
179 LOG.debug("getDocField..." + searchCondition.getDocField());
180 LOG.debug("getOperator..." + searchCondition.getOperator());
181 }
182 String source = importBibForm.getImportBibSearch().getSource();
183 if (source != null && source.length() > 0) {
184 DataSourceConfig dataSourceConfig = new DataSourceConfig();
185 BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService();
186 Map parentCriteria = new HashMap();
187 parentCriteria.put("id", source);
188 ExternalDataSourceConfig externalDataSourceConfig = new ExternalDataSourceConfig();
189 externalDataSourceConfig = businessObjectService
190 .findByPrimaryKey(ExternalDataSourceConfig.class, parentCriteria);
191 dataSourceConfig.setDomainName(externalDataSourceConfig.getDomainName());
192 dataSourceConfig.setPortNum(externalDataSourceConfig.getPortNum());
193 ExternalDataSource externalDataSource = ExternalDataSourceFactory.getInstance().getExternalDataSource(dataSourceConfig);
194 List<String> results = null;
195 // NOTE: Uncomment this line to enable Searching external Z39.50 data sources.
196 //List<String> results = externalDataSource.searchForBibs(searchParams,dataSourceConfig);
197 request.getSession().setAttribute("showDetailForExternalSearchRecord", results);
198 WorkBibMarcRecords marcRecords = prepareWorkBibMarcRecords(results);
199 // WorkBibMarcRecords marcRecords = externalDataSource.searchForBibs(searchParams,dataSourceConfig);
200 if (marcRecords != null) {
201 importBibForm.setWorkBibMarcRecordList(marcRecords.getRecords());
202 }
203 WorkBibDocConverter workBibDocConverter = new WorkBibDocConverter();
204 List<WorkBibDocument> workBibDocumentList = workBibDocConverter.convert(marcRecords);
205 List<WorkBibDocumentSearchResult> importBibResultsList = mapMarcFieldValues(workBibDocumentList);
206 SortedMap<WorkBibDocumentSearchResult, WorkBibMarcRecord> marcDocRecMapSorted = new TreeMap<WorkBibDocumentSearchResult, WorkBibMarcRecord>(new ImportBibService());
207 for (int i = 0; i < importBibResultsList.size(); i++) {
208 marcDocRecMapSorted.put(importBibResultsList.get(i), importBibForm.getWorkBibMarcRecordList().get(i));
209 }
210
211 importBibForm.setMarcDocRecMap(marcDocRecMapSorted);
212 List<WorkBibDocumentSearchResult> searchList = new ArrayList<WorkBibDocumentSearchResult>();
213 searchList.addAll(importBibForm.getMarcDocRecMap().keySet());
214 // adding the sorted key values to search results list to display in seacrch table
215 importBibForm.getImportBibSearch().setExternalBibDocumentSearchResults(searchList);
216 importBibForm.getImportBibSearch().setReturnCheck(true);
217 } else {
218 LOG.debug("ImportBibController :search : No source selected...");
219 }
220
221 return getUIFModelAndView(importBibForm);
222 }
223 public WorkBibMarcRecords prepareWorkBibMarcRecords(List<String> results) {
224 //OCLCResponseHandler oclcResponseHandler = new OCLCResponseHandler();
225 MRKToMARCXMLConverter mrkToMARCXMLConverter = new MRKToMARCXMLConverter();
226 StringBuffer sb = new StringBuffer(
227 "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\">");
228 for (String marcString : results) {
229 String marcXML = mrkToMARCXMLConverter.convert(marcString);
230 sb.append(marcXML.substring(marcXML.indexOf("<record>"), marcXML.indexOf("</collection>")));
231 }
232 sb.append("</collection>");
233 String marcXmlContent = sb.toString();
234 WorkBibMarcRecordProcessor workBibMarcRecordProcessor = new WorkBibMarcRecordProcessor();
235 WorkBibMarcRecords marcRecords = workBibMarcRecordProcessor.fromXML(marcXmlContent);
236 return marcRecords;
237 }
238 /**
239 * @param form
240 * @param result
241 * @param request
242 * @param response
243 * @return
244 */
245 @RequestMapping(params = "methodToCall=clearSearch")
246 public ModelAndView clearSearch(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
247 HttpServletRequest request, HttpServletResponse response) {
248 LOG.info("Inside clearSearch Method");
249 ImportBibForm importBibForm = (ImportBibForm) form;
250 importBibForm.getImportBibSearch().setReturnCheck(true);
251 importBibForm.getImportBibSearch().setExternalBibDocumentSearchResults(null);
252 importBibForm.getImportBibSearch().setSource("");
253 List<SearchCondition> searchConditions = new ArrayList<SearchCondition>();
254 searchConditions.add(new SearchCondition());
255 searchConditions.add(new SearchCondition());
256 importBibForm.getSearchParams().setSearchFieldsList(searchConditions);
257 return getUIFModelAndView(importBibForm);
258 }
259
260 /**
261 * @param form
262 * @param result
263 * @param request
264 * @param response
265 * @return
266 */
267 @RequestMapping(params = "methodToCall=clearFile")
268 public ModelAndView clearFile(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
269 HttpServletRequest request, HttpServletResponse response) {
270 LOG.info("Inside clearSearch Method");
271
272 ImportBibForm importBibForm = (ImportBibForm) form;
273 importBibForm.getImportBibSearch().setReturnCheck(false);
274 importBibForm.getImportBibSearch().setLocalBibDocumentSearchResults(null);
275 importBibForm.getImportBibSearch().setSelectedFileName("");
276 importBibForm.getImportBibSearch().setRecordsInFile(0);
277 importBibForm.getImportBibSearch().setRecordsImported(0);
278 return getUIFModelAndView(importBibForm);
279 }
280
281 @RequestMapping(params = "methodToCall=actionLink")
282 public ModelAndView actionLink(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
283 HttpServletRequest request, HttpServletResponse response) {
284 ImportBibForm importBibForm = (ImportBibForm) form;
285 int index = Integer.parseInt(form.getActionParamaterValue(UifParameters.SELECTED_LINE_INDEX));
286 List<WorkBibMarcRecord> marcRecList = importBibForm.getWorkBibMarcRecordList();
287 WorkBibMarcRecord marcRec = marcRecList.get(index);
288 LOG.info("Marc Rec is..." + marcRec);
289 return getUIFModelAndView(importBibForm);
290 }
291
292 @RequestMapping(params = "methodToCall=localNext")
293 public ModelAndView next(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
294 HttpServletRequest request, HttpServletResponse response) {
295 ImportBibForm importBibForm = (ImportBibForm) form;
296 if (importBibForm != null && importBibForm.getImportBibSearch() != null
297 && importBibForm.getImportBibSearch().getLocalBibDocumentSearchResults() != null) {
298 List<WorkBibDocumentSearchResult> workBibDocumentSearchResultList = importBibForm.getImportBibSearch()
299 .getLocalBibDocumentSearchResults();
300 boolean isSelected = true;
301 int i = 0;
302 for (WorkBibDocumentSearchResult workBibDocumentResult : workBibDocumentSearchResultList) {
303 i++;
304 if (workBibDocumentResult.isSelectedMarc() && isSelected) {
305 isSelected = false;
306 importBibForm.getImportBibSearch().setSelectedMarc(
307 importBibForm.getImportBibSearch().getLocalBibDocumentSearchResults().get(i - 1));
308 importBibForm.setNewWorkBibMarcRecord(importBibForm.getMarcDocRecMap().get(workBibDocumentResult));
309 importBibForm.getImportBibSearch().setSelectedRecordIndex(i - 1);
310 }
311 }
312 if (isSelected) {
313 importBibForm.setMessage("Please select a bib record to continue the process");
314 return getUIFModelAndView(importBibForm, "SearchBibViewPage");
315 }
316 }
317 importBibForm.setMessage(null);
318 return getUIFModelAndView(importBibForm, "UserPreferenceViewPage");
319 }
320
321 @RequestMapping(params = "methodToCall=externalNext")
322 public ModelAndView externalNext(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
323 HttpServletRequest request, HttpServletResponse response) {
324 ImportBibForm importBibForm = (ImportBibForm) form;
325 if (importBibForm != null && importBibForm.getImportBibSearch() != null
326 && importBibForm.getImportBibSearch().getExternalBibDocumentSearchResults() != null) {
327 List<WorkBibDocumentSearchResult> workBibDocumentSearchResultList = importBibForm.getImportBibSearch()
328 .getExternalBibDocumentSearchResults();
329 boolean isSelected = true;
330 int i = 0;
331 for (WorkBibDocumentSearchResult workBibDocumentResult : workBibDocumentSearchResultList) {
332 i++;
333 if (workBibDocumentResult.isSelectedExternalMarc() && isSelected) {
334 isSelected = false;
335 importBibForm.getImportBibSearch().setSelectedMarc(
336 importBibForm.getImportBibSearch().getExternalBibDocumentSearchResults().get(i - 1));
337 importBibForm.setNewWorkBibMarcRecord(importBibForm.getMarcDocRecMap().get(workBibDocumentResult));
338 importBibForm.getImportBibSearch().setSelectedRecordIndex(i - 1);
339 }
340 }
341 if (isSelected) {
342 importBibForm.setMessage("Please select a bib record to continue the process");
343 return getUIFModelAndView(importBibForm, "SearchBibViewPage");
344 }
345 }
346 importBibForm.setMessage(null);
347 return getUIFModelAndView(importBibForm, "UserPreferenceViewPage");
348 }
349 @RequestMapping(params = "methodToCall=loadUserPref")
350 public ModelAndView loadUserPref(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
351 HttpServletRequest request, HttpServletResponse response) throws Exception {
352 ImportBibForm importBibForm = (ImportBibForm) form;
353 ImportBibUserPreferences importBibUserPreferences = importBibForm.getImportBibUserPreferences();
354 if (importBibUserPreferences.getPrefId1().length() > 0) {
355 importBibUserPreferences.setPrefId(Integer.valueOf(importBibUserPreferences.getPrefId1()));
356 if (importBibUserPreferences.getPrefId() != null && importBibUserPreferences.getPrefId() > 0) {
357 BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService();
358 Map parentCriteria = new HashMap();
359 parentCriteria.put("prefId", importBibUserPreferences.getPrefId());
360 importBibUserPreferences = businessObjectService
361 .findByPrimaryKey(ImportBibUserPreferences.class, parentCriteria);
362 importBibForm.setImportBibUserPreferences(importBibUserPreferences);
363 parentCriteria.put("prefId", 1);
364 ImportBibUserPreferences importBibAdminPreferences = businessObjectService
365 .findByPrimaryKey(ImportBibUserPreferences.class, parentCriteria);
366 importBibForm.getImportBibUserPreferences()
367 .setAdminProtectedTags(importBibAdminPreferences.getProtectedTags());
368 importBibForm.getImportBibUserPreferences().setAdminRemovalTags(importBibAdminPreferences.getRemovalTags());
369 }
370 importBibUserPreferences.setPrefId1(String.valueOf(importBibUserPreferences.getPrefId()));
371 }
372
373 if (importBibForm.getExistingWorkBibMarcRecord() != null) {
374 //converting marc record to WorkBibDocument
375 WorkBibMarcRecords marcRecords = new WorkBibMarcRecords();
376 List<WorkBibMarcRecord> workBibMarcRecordList = new ArrayList<WorkBibMarcRecord>();
377 workBibMarcRecordList.add(importBibForm.getExistingWorkBibMarcRecord());
378 marcRecords.setRecords(workBibMarcRecordList);
379 WorkBibDocConverter workBibDocConverter = new WorkBibDocConverter();
380 List<WorkBibDocument> workBibDocumentList = workBibDocConverter.convert(marcRecords);
381 //setting uuid (control field 001) to WorkBibMarc Document
382 for (ControlField cf : importBibForm.getExistingWorkBibMarcRecord().getControlFields()) {
383 if (cf.getTag().equalsIgnoreCase("001")) {
384 workBibDocumentList.get(0).setId(cf.getValue());
385 break;
386 }
387 }
388 // getting workbibdocument with Instance data.
389 DocstoreHelperService helperService = new DocstoreHelperService();
390 List<WorkBibDocument> workBibDocuments = helperService.getInfoForBibTree(workBibDocumentList);
391 List<WorkBibDocumentSearchResult> importBibResultsList = mapMarcFieldValues(workBibDocuments);
392 // setting workbibDocument to OverLayMarcRecord
393 if (importBibForm.getImportBibConfirmReplace() != null && importBibResultsList != null
394 && importBibResultsList.size() > 0) {
395 importBibForm.getImportBibConfirmReplace().setOverLayMarcRecord(importBibResultsList.get(0));
396 }
397 }
398 if (importBibForm.getExistingWorkBibMarcRecord() != null) {
399 importBibUserPreferences.setImportType("overLay");
400 } else if (importBibUserPreferences != null && "overLay".equalsIgnoreCase(importBibUserPreferences.getImportType())) {
401 importBibUserPreferences.setImportType("newImport");
402 }
403
404 return getUIFModelAndView(importBibForm, "UserPreferenceViewPage");
405 }
406
407
408 @RequestMapping(params = "methodToCall=userPrefNext")
409 public ModelAndView userPrefNext(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
410 HttpServletRequest request, HttpServletResponse response) throws Exception {
411 ImportBibForm importBibForm = (ImportBibForm) form;
412 ImportBibUserPreferences importBibUserPreferences = importBibForm.getImportBibUserPreferences();
413 ImportBibService importBibService = new ImportBibService();
414 if (importBibService.callNumValidation(importBibUserPreferences)) {
415 importBibForm.setMessage("Please enter a valid data field value in call number. Ex:050");
416 return getUIFModelAndView(importBibForm, "UserPreferenceViewPage");
417 }
418 if (importBibService.proNRemTagValidation(importBibUserPreferences)) {
419 importBibForm
420 .setMessage("Please enter valid data field values in Protected / Removal Tags. Ex: 035,040,651");
421 return getUIFModelAndView(importBibForm, "UserPreferenceViewPage");
422 }
423 importBibForm.setMessage(null);
424 importBibService.applyUserPref(importBibForm);
425 request.getSession().setAttribute("importBibForm", importBibForm);
426 Request req = importBibService
427 .buildRequest(importBibForm.getNewWorkBibMarcRecord(), importBibForm.getNewInstanceCollection(), importBibUserPreferences.getImportStatus());
428 request.getSession().setAttribute("requestObject", req);
429 if (!importBibUserPreferences.getImportType().equalsIgnoreCase("newImport")) {
430 return getUIFModelAndView(importBibForm, "ConfirmReplace");
431 }
432 try {
433 String url = PropertyUtil.getPropertyUtil().getProperty("ole.rice2.url.base");
434 response.sendRedirect(url + "/portal.do?channelTitle=Import Bib&channelUrl=" + url +
435 "/kr-krad/editorcontroller?viewId=EditorView&methodToCall=load&docCategory=work&docType=bibliographic&docFormat=marc&loadFromSession=true&editable=true");
436 }
437 catch (Exception e) {
438 LOG.error("Exception while forwarding to editor." + e);
439 }
440 return getUIFModelAndView(importBibForm, "ConfirmImport");
441 }
442
443
444 @RequestMapping(params = "methodToCall=loadImportBibSearch")
445 public ModelAndView loadImportBibSearch(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
446 HttpServletRequest request, HttpServletResponse response)
447 throws IOException, ServletException {
448 LOG.info("Inside confirmReplaceNext Method");
449 ImportBibForm importBibForm = (ImportBibForm) form;
450 if (importBibForm != null && importBibForm.getImportBibSearch() != null) {
451 if (importBibForm.getMarcDocRecMap() != null && importBibForm.getImportBibSearch() != null &&
452 importBibForm.getImportBibSearch().getSelectedMarc() != null &&
453 importBibForm.getMarcDocRecMap().get(importBibForm.getImportBibSearch().getSelectedMarc()) != null) {
454
455 importBibForm.getMarcDocRecMap().remove(importBibForm.getImportBibSearch().getSelectedMarc());
456 List<WorkBibDocumentSearchResult> localRecList = new ArrayList<WorkBibDocumentSearchResult>();
457 List<WorkBibMarcRecord> marcRecList = new ArrayList<WorkBibMarcRecord>();
458 for (Map.Entry<WorkBibDocumentSearchResult, WorkBibMarcRecord> record : importBibForm.getMarcDocRecMap().entrySet()) {
459 localRecList.add(record.getKey());
460 marcRecList.add(record.getValue());
461 }
462 importBibForm.getImportBibSearch().setLocalBibDocumentSearchResults(localRecList);
463 importBibForm.setWorkBibMarcRecordList(marcRecList);
464 }
465 importBibForm.getMarcDocRecMap().remove(importBibForm.getImportBibSearch().getSelectedMarc());
466 importBibForm.getImportBibSearch()
467 .setRecordsImported(importBibForm.getImportBibSearch().getRecordsImported() + 1);
468 importBibForm.getImportBibSearch()
469 .setRecordsInFile(importBibForm.getImportBibSearch().getRecordsInFile() - 1);
470 }
471
472 return getUIFModelAndView(importBibForm, "SearchBibViewPage");
473 }
474
475 @RequestMapping(params = "methodToCall=viewRecordNext")
476 public ModelAndView viewRecordNext(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
477 HttpServletRequest request, HttpServletResponse response)
478 throws IOException, SolrServerException {
479 LOG.info("Inside Search Method");
480 ImportBibForm importBibForm = (ImportBibForm) form;
481 String resp = null;
482 if (request != null && request.getSession() != null) {
483 resp = (String) request.getSession().getAttribute("responseString");
484 if (request.getSession().getAttribute("importBibForm") != null) {
485 ImportBibForm importBibForminSession = (ImportBibForm) request.getSession()
486 .getAttribute("importBibForm");
487 importBibForm.setImportBibSearch(importBibForminSession.getImportBibSearch());
488 importBibForm.setWorkBibMarcRecordList(importBibForminSession.getWorkBibMarcRecordList());
489 importBibForm.setBibUuidsList(importBibForminSession.getBibUuidsList());
490 importBibForm.setMarcDocRecMap(importBibForminSession.getMarcDocRecMap());
491 request.getSession().removeAttribute("importBibForm");
492 }
493 request.getSession().removeAttribute("requestObject");
494 request.getSession().removeAttribute("responseString");
495 }
496
497 List<WorkBibDocument> bibDocumentList = new ArrayList<WorkBibDocument>();
498
499 if (resp != null) {
500 ResponseHandler respConverter = new ResponseHandler();
501 resp = resp.trim();
502 Response responseObj = respConverter.toObject(resp);
503 QueryService queryService = QueryServiceImpl.getInstance();
504 for (ResponseDocument respDoc : responseObj.getDocuments()) {
505 WorkBibDocument workBibDocument = new WorkBibDocument();
506 workBibDocument.setId(respDoc.getUuid());
507 workBibDocument = queryService.buildBibDocumentInfo(workBibDocument);
508 bibDocumentList.add(workBibDocument);
509 importBibForm.setUuid(respDoc.getUuid());
510 }
511 }
512
513 List<WorkBibDocumentSearchResult> uuidList = importBibForm.getBibUuidsList();
514 WorkBibDocumentSearchResult workBibDocumentSearchResult = new WorkBibDocumentSearchResult();
515
516 for (WorkBibDocument workBibDocument : bibDocumentList) {
517 workBibDocumentSearchResult = new WorkBibDocumentSearchResult();
518 if (workBibDocument.getTitle() != null) {
519 workBibDocumentSearchResult.setDisplayField(workBibDocument.getTitle());
520 workBibDocumentSearchResult.setUuid(workBibDocument.getId());
521 }
522 uuidList.add(workBibDocumentSearchResult);
523 }
524
525 importBibForm.setBibUuidsList(uuidList);
526
527
528 return getUIFModelAndView(importBibForm, "ConfirmImport");
529 }
530
531
532 @RequestMapping(params = "methodToCall=confirmReplaceNext")
533 public ModelAndView confirmReplaceNext(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
534 HttpServletRequest request, HttpServletResponse response)
535 throws IOException, ServletException {
536 LOG.info("Inside loadImportBibSearch Method");
537 ImportBibForm importBibForm = (ImportBibForm) form;
538
539 try {
540 String url = PropertyUtil.getPropertyUtil().getProperty("ole.rice2.url.base");
541 response.sendRedirect(url + "/portal.do?channelTitle=Import Bib&channelUrl=" + url
542 + "/kr-krad/editorcontroller?viewId=EditorView&methodToCall=load&docCategory=work&docType=bibliographic&docFormat=marc&loadFromSession=true&editable=true&docId="
543 + importBibForm.getUuid());
544 }
545 catch (Exception e) {
546 LOG.error("Exception while forwarding to editor." + e);
547
548 }
549
550 // return getUIFModelAndView(importBibForm, "ConfirmImport");
551 return getUIFModelAndView(importBibForm, "ConfirmImport");
552 }
553
554 private String getMarcXml(MultipartFile file) throws IOException {
555 String marcXMLContent = null;
556 String modifiedXMLContent = null;
557 MultipartFile multipartFile = file;
558 String locationFileName = multipartFile.getOriginalFilename();
559 if (locationFileName.endsWith(".mrc")) {
560 String fileContent = new String(multipartFile.getBytes());
561
562 MarcXMLConverter marcXMLConverter = new MarcXMLConverter();
563 marcXMLContent = marcXMLConverter.convert(fileContent);
564 modifiedXMLContent = marcXMLContent.replace(
565 "collection xmlns=\"http://www.loc.gov/MARC21/slim\" xmlns=\"http://www.loc.gov/MARC21/slim",
566 "collection xmlns=\"http://www.loc.gov/MARC21/slim");
567 }
568 return modifiedXMLContent;
569
570 }
571
572 private List<WorkBibDocumentSearchResult> mapMarcFieldValues(List<WorkBibDocument> workBibDocumentList) {
573 List<WorkBibDocumentSearchResult> importBibResultsList = new ArrayList<WorkBibDocumentSearchResult>();
574 WorkBibDocumentSearchResult workBibDocument = new WorkBibDocumentSearchResult();
575 for (WorkBibDocument bibDoc : workBibDocumentList) {
576 workBibDocument.setId(bibDoc.getId());
577 workBibDocument.setAuthor(bibDoc.getAuthor());
578 workBibDocument.setTitle(bibDoc.getTitle());
579 workBibDocument.setPublicationDate(bibDoc.getPublicationDate());
580 workBibDocument.setEdition(bibDoc.getEdition());
581 workBibDocument.setWorkInstanceDocumentList(bibDoc.getWorkInstanceDocumentList());
582 importBibResultsList.add(workBibDocument);
583 workBibDocument = new WorkBibDocumentSearchResult();
584 }
585 return importBibResultsList;
586 }
587
588 @RequestMapping(params = "methodToCall=showDetailForLocalSearchRecord")
589 public ModelAndView showDetailForLocalSearchRecord(@ModelAttribute("KualiForm") UifFormBase form,
590 BindingResult result, HttpServletRequest request,
591 HttpServletResponse response) throws Exception {
592 MRKToMARCXMLConverter mrkToMARCXMLConverter = new MRKToMARCXMLConverter();
593 String bibId = request.getParameter("bibId");
594 LOG.info("showDetailForLocalSearchRecord bibId " + bibId);
595 ImportBibForm importBibForm = (ImportBibForm) form;
596 String marcXmlContent = (String) request.getSession().getAttribute("showDetailForLocalSearchRecord");
597 SortedMap<WorkBibDocumentSearchResult, WorkBibMarcRecord> marcDocRecMapSorted = sort(marcXmlContent);
598 List<WorkBibDocumentSearchResult> searchList = new ArrayList<WorkBibDocumentSearchResult>();
599 searchList.addAll(marcDocRecMapSorted.keySet());
600 if (marcXmlContent != null && marcXmlContent.length() > 0) {
601 WorkBibMarcRecordProcessor workBibMarcRecordProcessor = new WorkBibMarcRecordProcessor();
602 WorkBibMarcRecord workBibMarcRecord = marcDocRecMapSorted.get(searchList.get(Integer.parseInt(bibId)));
603 List<WorkBibMarcRecord> workBibMarcRecordList = new ArrayList<WorkBibMarcRecord>();
604 workBibMarcRecordList.add(workBibMarcRecord);
605 WorkBibMarcRecords marcRecordsNew = new WorkBibMarcRecords();
606 marcRecordsNew.setRecords(workBibMarcRecordList);
607 String detailXML = workBibMarcRecordProcessor.toXml(marcRecordsNew);
608 LOG.info("detailXML " + detailXML);
609 String marc = mrkToMARCXMLConverter.ConvertMarcXMLToMRK(detailXML);
610 importBibForm.setMessage("<pre>" + marc + "</pre>");
611 LOG.info("marc " + marc);
612 }
613 return getUIFModelAndView(form);
614 }
615
616 @RequestMapping(params = "methodToCall=showDetailForExternalSearchRecord")
617 public ModelAndView showDetailForExternalSearchRecord(@ModelAttribute("KualiForm") UifFormBase form,
618 BindingResult result, HttpServletRequest request,
619 HttpServletResponse response) {
620 String bibId = request.getParameter("bibId");
621 ImportBibForm importBibForm = (ImportBibForm) form;
622 List<String> results = (List<String>) request.getSession().getAttribute("showDetailForExternalSearchRecord");
623 String resultvalue = results.get(Integer.parseInt(bibId));
624 importBibForm.setMessage("<pre>" + resultvalue + "</pre>");
625 return getUIFModelAndView(form);
626 }
627
628 public SortedMap<WorkBibDocumentSearchResult, WorkBibMarcRecord> sort(String marcXmlContent) {
629 if (marcXmlContent != null && marcXmlContent.length() > 0) {
630 //convert xml to pojo
631 WorkBibMarcRecordProcessor workBibMarcRecordProcessor = new WorkBibMarcRecordProcessor();
632 WorkBibMarcRecords marcRecords = workBibMarcRecordProcessor.fromXML(marcXmlContent);
633 List<WorkBibMarcRecord> workBibMarcRecordList = marcRecords.getRecords();
634 // convert pojo to workBibDoc
635 WorkBibDocConverter workBibDocConverter = new WorkBibDocConverter();
636 List<WorkBibDocument> workBibDocumentList = workBibDocConverter.convert(marcRecords);
637 List<WorkBibDocumentSearchResult> importBibResultsList = mapMarcFieldValues(workBibDocumentList);
638 // Sorting the import bib result list and mapping it to corresponding marc record
639 SortedMap<WorkBibDocumentSearchResult, WorkBibMarcRecord> marcDocRecMapSorted
640 = new TreeMap<WorkBibDocumentSearchResult, WorkBibMarcRecord>(new ImportBibService());
641 for (int i = 0; i < importBibResultsList.size(); i++) {
642 marcDocRecMapSorted.put(importBibResultsList.get(i), workBibMarcRecordList.get(i));
643 }
644 return marcDocRecMapSorted;
645 } else {
646 SortedMap<WorkBibDocumentSearchResult, WorkBibMarcRecord> marcDocRecMapSortedZero
647 = new TreeMap<WorkBibDocumentSearchResult, WorkBibMarcRecord>(new ImportBibService());
648 return marcDocRecMapSortedZero;
649 }
650 }
651
652 }