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}