001package org.kuali.ole.ncip.service.impl; 002 003import org.apache.log4j.Logger; 004import org.extensiblecatalog.ncip.v2.service.*; 005import org.kuali.ole.OLEConstants; 006import org.kuali.ole.deliver.processor.LoanProcessor; 007import org.kuali.ole.ncip.bo.OLECheckInItem; 008import org.kuali.ole.ncip.bo.OLENCIPConstants; 009import org.kuali.ole.ncip.converter.OLECheckInItemConverter; 010import org.kuali.ole.ncip.service.OLECheckInItemService; 011import org.kuali.ole.ncip.service.OLECirculationService; 012import org.kuali.ole.sys.context.SpringContext; 013import org.kuali.rice.core.api.config.property.ConfigContext; 014import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader; 015 016import java.util.ArrayList; 017import java.util.HashMap; 018import java.util.List; 019 020/** 021 * Created with IntelliJ IDEA. 022 * User: maheswarang 023 * Date: 7/31/13 024 * Time: 1:27 PM 025 * To change this template use File | Settings | File Templates. 026 */ 027public class OLECheckInItemServiceImpl implements OLECheckInItemService { 028 private static final Logger LOG = Logger.getLogger(OLECheckInItemServiceImpl.class); 029 private OLECirculationService oleCirculationService; 030 private OLECheckInItemConverter oleCheckInItemConverter; 031 private OLECirculationHelperServiceImpl oleCirculationHelperService; 032 private LoanProcessor loanProcessor; 033 034 public LoanProcessor getLoanProcessor() { 035 if (loanProcessor == null) { 036 loanProcessor = SpringContext.getBean(LoanProcessor.class); 037 } 038 return loanProcessor; 039 } 040 041 public OLECirculationService getOleCirculationService() { 042 if (null == oleCirculationService) { 043 oleCirculationService = GlobalResourceLoader.getService(OLENCIPConstants.CIRCULATION_SERVICE); 044 } 045 return oleCirculationService; 046 } 047 048 public void setOleCirculationService(OLECirculationService oleCirculationService) { 049 this.oleCirculationService = oleCirculationService; 050 } 051 052 public OLECheckInItemConverter getOleCheckInItemConverter() { 053 if (null == oleCheckInItemConverter) { 054 oleCheckInItemConverter = GlobalResourceLoader.getService(OLENCIPConstants.CHECKIN_ITEM_CONVERTER); 055 } 056 return oleCheckInItemConverter; 057 } 058 059 public void setOleCheckInItemConverter(OLECheckInItemConverter oleCheckInItemConverter) { 060 this.oleCheckInItemConverter = oleCheckInItemConverter; 061 } 062 063 public OLECirculationHelperServiceImpl getOleCirculationHelperService() { 064 if (null == oleCirculationHelperService) { 065 oleCirculationHelperService = GlobalResourceLoader.getService(OLENCIPConstants.CIRCULATION_HELPER_SERVICE); 066 } 067 return oleCirculationHelperService; 068 } 069 070 public void setOleCirculationHelperService(OLECirculationHelperServiceImpl oleCirculationHelperService) { 071 this.oleCirculationHelperService = oleCirculationHelperService; 072 } 073 074 @Override 075 public CheckInItemResponseData performService(CheckInItemInitiationData initData, ServiceContext serviceContext, RemoteServiceManager serviceManager) throws ServiceException { 076 CheckInItemResponseData responseData = new CheckInItemResponseData(); 077 oleCirculationService = getOleCirculationService(); 078 oleCirculationHelperService = getOleCirculationHelperService(); 079 oleCheckInItemConverter = getOleCheckInItemConverter(); 080 OLECheckInItem oleCheckInItem = null; 081 Problem problem = new Problem(); 082 ProblemType problemType = new ProblemType(""); 083 List<Problem> problems = new ArrayList<Problem>(); 084 String responseString = null; 085 String itemDeleteIndicator = null; 086 AgencyId agencyId = null; 087 String operatorId, itemType = ""; 088 if (initData.getInitiationHeader() != null && initData.getInitiationHeader().getFromAgencyId() != null && initData.getInitiationHeader().getFromAgencyId().getAgencyId() != null && initData.getInitiationHeader().getFromAgencyId().getAgencyId().getValue() != null && !initData.getInitiationHeader().getFromAgencyId().getAgencyId().getValue().trim().isEmpty()) 089 agencyId = new AgencyId(initData.getInitiationHeader().getFromAgencyId().getAgencyId().getValue()); 090 else if (initData.getInitiationHeader() != null && initData.getInitiationHeader().getApplicationProfileType() != null && initData.getInitiationHeader().getApplicationProfileType().getValue() != null && !initData.getInitiationHeader().getApplicationProfileType().getValue().trim().isEmpty()) 091 agencyId = new AgencyId(initData.getInitiationHeader().getApplicationProfileType().getValue()); 092 else 093 agencyId = new AgencyId(getLoanProcessor().getParameter(OLENCIPConstants.AGENCY_ID_PARAMETER)); 094 095 HashMap<String, String> agencyPropertyMap = oleCirculationHelperService.getAgencyPropertyMap(agencyId.getValue()); 096 try { 097 if (agencyPropertyMap.size() > 0) { 098 itemType = agencyPropertyMap.get(OLENCIPConstants.ITEM_TYPE); 099 operatorId = agencyPropertyMap.get(OLENCIPConstants.OPERATOR_ID); 100 itemDeleteIndicator=getLoanProcessor().getParameter(OLENCIPConstants.TEMP_ITEM_DELETE_INDICATOR); 101 LOG.info("Inside Check in Item Service . Operator Id : "+operatorId + " Item Id : " + initData.getItemId().getItemIdentifierValue()); 102 responseString = oleCirculationService.checkInItem(OLENCIPConstants.PATRON_ID, operatorId, initData.getItemId().getItemIdentifierValue(), itemDeleteIndicator,false); 103 oleCheckInItem = (OLECheckInItem) oleCheckInItemConverter.generateCheckInItemObject(responseString); 104 if (oleCheckInItem != null && oleCheckInItem.getMessage() != null && oleCheckInItem.getMessage().equals(ConfigContext.getCurrentContextConfig().getProperty(OLEConstants.SUCCESSFULLEY_CHECKED_IN))) { 105 ItemId itemId = new ItemId(); 106 itemId = setItemId(itemId, initData, oleCheckInItem); 107 responseData.setItemId(itemId); 108 UserId userId = new UserId(); 109 userId = setUserId(userId, initData, oleCheckInItem); 110 responseData.setUserId(userId); 111 ItemOptionalFields itemOptionalFields = new ItemOptionalFields(); 112 itemOptionalFields = setItemOptionalFields(itemOptionalFields, initData, oleCheckInItem); 113 responseData.setItemOptionalFields(itemOptionalFields); 114 } else { 115 if (oleCheckInItem != null) { 116 problem.setProblemDetail(oleCheckInItem.getMessage()); 117 } else { 118 problem.setProblemDetail(ConfigContext.getCurrentContextConfig().getProperty(OLENCIPConstants.CHECK_IN_FAIL)); 119 } 120 problem.setProblemElement(OLENCIPConstants.ITEM); 121 problem.setProblemType(problemType); 122 problem.setProblemValue("Item value:" + initData.getItemId().getItemIdentifierValue()); 123 problems.add(problem); 124 responseData.setProblems(problems); 125 } 126 } else { 127 problem.setProblemDetail(ConfigContext.getCurrentContextConfig().getProperty(OLENCIPConstants.INVALID_AGENCY_ID)); 128 problem.setProblemElement(OLENCIPConstants.AGENCY_ID); 129 problem.setProblemType(problemType); 130 problem.setProblemValue(agencyId.getValue()); 131 problems.add(problem); 132 responseData.setProblems(problems); 133 } 134 135 136 } catch (Exception e) { 137 throw new RuntimeException(e); 138 } 139 return responseData; 140 } 141 142 private ItemId setItemId(ItemId itemId, CheckInItemInitiationData initData, OLECheckInItem oleCheckInItem) throws Exception { 143 AgencyId agencyId = null; 144 if (initData.getInitiationHeader() != null && initData.getInitiationHeader().getFromAgencyId() != null && initData.getInitiationHeader().getFromAgencyId().getAgencyId() != null && initData.getInitiationHeader().getFromAgencyId().getAgencyId().getValue() != null && !initData.getInitiationHeader().getFromAgencyId().getAgencyId().getValue().trim().isEmpty()) 145 agencyId = new AgencyId(initData.getInitiationHeader().getFromAgencyId().getAgencyId().getValue()); 146 else if (initData.getInitiationHeader() != null && initData.getInitiationHeader().getApplicationProfileType() != null && initData.getInitiationHeader().getApplicationProfileType().getValue() != null && !initData.getInitiationHeader().getApplicationProfileType().getValue().trim().isEmpty()) 147 agencyId = new AgencyId(initData.getInitiationHeader().getApplicationProfileType().getValue()); 148 else 149 agencyId = new AgencyId(getLoanProcessor().getParameter(OLENCIPConstants.AGENCY_ID_PARAMETER)); 150 String identifierType = ""; 151 HashMap<String, String> agencyPropertyMap = oleCirculationHelperService.getAgencyPropertyMap(agencyId.getValue()); 152 identifierType = agencyPropertyMap.get(OLENCIPConstants.ITEM_TYPE); 153 itemId.setAgencyId(agencyId); 154 ItemIdentifierType itemIdentifierType = new ItemIdentifierType(OLENCIPConstants.SCHEME, identifierType); 155 itemId.setItemIdentifierType(itemIdentifierType); 156 itemId.setItemIdentifierValue(initData.getItemId().getItemIdentifierValue()); 157 return itemId; 158 } 159 160 private UserId setUserId(UserId userId, CheckInItemInitiationData initData, OLECheckInItem oleCheckInItem) throws Exception { 161 AgencyId agencyId = null; 162 if (initData.getInitiationHeader() != null && initData.getInitiationHeader().getFromAgencyId() != null && initData.getInitiationHeader().getFromAgencyId().getAgencyId() != null && initData.getInitiationHeader().getFromAgencyId().getAgencyId().getValue() != null && !initData.getInitiationHeader().getFromAgencyId().getAgencyId().getValue().trim().isEmpty()) 163 agencyId = new AgencyId(initData.getInitiationHeader().getFromAgencyId().getAgencyId().getValue()); 164 else if (initData.getInitiationHeader() != null && initData.getInitiationHeader().getApplicationProfileType() != null && initData.getInitiationHeader().getApplicationProfileType().getValue() != null && !initData.getInitiationHeader().getApplicationProfileType().getValue().trim().isEmpty()) 165 agencyId = new AgencyId(initData.getInitiationHeader().getApplicationProfileType().getValue()); 166 else 167 agencyId = new AgencyId(getLoanProcessor().getParameter(OLENCIPConstants.AGENCY_ID_PARAMETER)); 168 UserIdentifierType userIdentifierType = new UserIdentifierType(oleCheckInItem.getUserType(), oleCheckInItem.getUserType()); 169 userId.setUserIdentifierType(userIdentifierType); 170 if (oleCheckInItem.getUserId() != null) 171 userId.setUserIdentifierValue(oleCheckInItem.getUserId()); 172 else 173 userId.setUserIdentifierValue(" "); 174 return userId; 175 } 176 177 private ItemOptionalFields setItemOptionalFields(ItemOptionalFields itemOptionalFields, CheckInItemInitiationData initData, OLECheckInItem oleCheckInItem) throws Exception { 178 BibliographicDescription bibliographicDescription = new BibliographicDescription(); 179 bibliographicDescription.setAuthor(oleCheckInItem.getTitle()); 180 bibliographicDescription.setTitle(oleCheckInItem.getAuthor()); 181 itemOptionalFields.setBibliographicDescription(bibliographicDescription); 182 ItemDescription itemDescription = new ItemDescription(); 183 itemDescription.setCallNumber(oleCheckInItem.getCallNumber()); 184 itemOptionalFields.setItemDescription(itemDescription); 185 return itemOptionalFields; 186 } 187 188 189}