001package org.kuali.ole.response;
002
003import org.apache.commons.lang3.StringUtils;
004import org.apache.log4j.Logger;
005import org.kuali.ole.bo.OLECheckOutItem;
006import org.kuali.ole.bo.OLERenewItem;
007import org.kuali.ole.common.MessageUtil;
008import org.kuali.ole.common.OLESIP2Util;
009import org.kuali.ole.constants.OLESIP2Constants;
010import org.kuali.ole.request.OLESIP2CheckOutRequestParser;
011
012/**
013 * Created by gayathria on 27/8/14.
014 */
015public class OLESIP2CheckOutResponse extends OLESIP2Response {
016
017
018    public OLESIP2CheckOutResponse() {
019        this.code = OLESIP2Constants.CHECKOUT_RESPONSE;
020    }
021
022    private final static Logger LOG = Logger.getLogger(OLESIP2CheckOutResponse.class.getName());
023    public String getSIP2CheckOutResponse(OLECheckOutItem oleCheckOutItem, OLESIP2CheckOutRequestParser sip2CheckOutRequestParser) {
024
025        StringBuilder checkOutResponseBuilder = new StringBuilder();
026        checkOutResponseBuilder.append(code);
027        if (oleCheckOutItem.code.equalsIgnoreCase("030") || oleCheckOutItem.getMessage().equalsIgnoreCase(OLESIP2Constants.CHECK_OUT_SUCCESS)) {
028            checkOutResponseBuilder.append(OLESIP2Util.bool2Int(true));
029            checkOutResponseBuilder.append(OLESIP2Util.bool2Char(false));
030            checkOutResponseBuilder.append("U");
031            checkOutResponseBuilder.append(OLESIP2Util.bool2Char(true));
032        } else {
033            checkOutResponseBuilder.append(OLESIP2Util.bool2Int(false));
034            checkOutResponseBuilder.append(OLESIP2Util.bool2Char(false));
035            checkOutResponseBuilder.append("U");
036            checkOutResponseBuilder.append(OLESIP2Util.bool2Char(false));
037        }
038        checkOutResponseBuilder.append(MessageUtil.getSipDateTime());
039        checkOutResponseBuilder.append(OLESIP2Constants.INSTITUTION_ID_CODE);
040        checkOutResponseBuilder.append(StringUtils.isNotBlank(sip2CheckOutRequestParser.getInstitutionId()) ? sip2CheckOutRequestParser.getInstitutionId() : "");
041        checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
042                OLESIP2Constants.PATRON_IDENTIFIER_CODE);
043        checkOutResponseBuilder.append(oleCheckOutItem.getPatronBarcode() != null ? oleCheckOutItem.getPatronBarcode() : sip2CheckOutRequestParser.getPatronIdentifier());
044        checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
045                OLESIP2Constants.ITEM_IDENTIFIER_CODE);
046        checkOutResponseBuilder.append(oleCheckOutItem.getBarcode() != null ? oleCheckOutItem.getBarcode() : sip2CheckOutRequestParser.getItemIdentifier());
047        checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
048                OLESIP2Constants.TITLE_IDENTIFIER_CODE);
049        checkOutResponseBuilder.append(oleCheckOutItem.getTitleIdentifier() != null ? oleCheckOutItem.getTitleIdentifier().replaceAll(OLESIP2Constants.NON_ROMAN_REGEX, "") : "");
050        checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
051                OLESIP2Constants.DUE_DATE_CODE);
052        checkOutResponseBuilder.append(oleCheckOutItem.getDueDate() != null ? oleCheckOutItem.getDueDate() : "");
053        if (OLESIP2Util.getDefaultCurrency() != null) {
054            checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
055                    OLESIP2Constants.CURRENCY_TYPE_CODE);
056            checkOutResponseBuilder.append(OLESIP2Util.getDefaultCurrency().getCurrencyCode());
057        }
058        checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
059                OLESIP2Constants.ITEM_PROPERTIES_CODE);
060        checkOutResponseBuilder.append(StringUtils.isNotBlank(oleCheckOutItem.getItemProperties()) ? oleCheckOutItem.getItemProperties().replaceAll(OLESIP2Constants.NON_ROMAN_REGEX, "") : " ");
061        /*checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
062                OLESIP2Constants.MEDIA_TYPE_CODE);
063        checkOutResponseBuilder.append(StringUtils.isNotBlank(oleCheckOutItem.getItemType()) ? oleCheckOutItem.getItemType() : "");*/
064        if (oleCheckOutItem.code.equalsIgnoreCase("030") || oleCheckOutItem.getMessage().equalsIgnoreCase(OLESIP2Constants.CHECK_OUT_SUCCESS)) {
065            checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
066                    OLESIP2Constants.SCREEN_MSG_CODE+OLESIP2Constants.CHECK_OUT_SUCCESSFULLY);
067            checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
068                    OLESIP2Constants.PRINT_LINE_CODE + oleCheckOutItem.getMessage().replaceAll("<br/>", ""));
069        } else {
070            checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
071                    OLESIP2Constants.SCREEN_MSG_CODE+OLESIP2Constants.CHECK_OUT_FAILED);
072            checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
073                    OLESIP2Constants.PRINT_LINE_CODE + oleCheckOutItem.getMessage().replaceAll("<br/>", ""));
074        }
075        if (StringUtils.isNotBlank(sip2CheckOutRequestParser.getSequenceNum())) {
076            checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
077                    OLESIP2Constants.SEQUENCE_NUM_CODE);
078            checkOutResponseBuilder.append(sip2CheckOutRequestParser.getSequenceNum());
079            checkOutResponseBuilder.append(MessageUtil.computeChecksum(checkOutResponseBuilder.toString()));
080        }
081
082        LOG.info("OLESIP2CheckOutResponse.getSIP2CheckOutResponse -- checkout  "+checkOutResponseBuilder.toString());
083
084        return checkOutResponseBuilder.toString() + '\r';
085    }
086
087    public String getSIP2CheckOutResponse( OLERenewItem oleRenewItem, OLESIP2CheckOutRequestParser sip2CheckOutRequestParser) {
088
089        StringBuilder checkOutResponseBuilder = new StringBuilder();
090        checkOutResponseBuilder.append(code);
091        if (oleRenewItem.getCode().equalsIgnoreCase("030") || oleRenewItem.getMessage().equalsIgnoreCase(OLESIP2Constants.RENEW_SUCCESS)) {
092            checkOutResponseBuilder.append(OLESIP2Util.bool2Int(true));
093            checkOutResponseBuilder.append(OLESIP2Util.bool2Char(false));
094            checkOutResponseBuilder.append("U");
095            checkOutResponseBuilder.append(OLESIP2Util.bool2Char(true));
096        } else {
097            checkOutResponseBuilder.append(OLESIP2Util.bool2Int(false));
098            checkOutResponseBuilder.append(OLESIP2Util.bool2Char(false));
099            checkOutResponseBuilder.append("U");
100            checkOutResponseBuilder.append(OLESIP2Util.bool2Char(false));
101        }
102        checkOutResponseBuilder.append(MessageUtil.getSipDateTime());
103        checkOutResponseBuilder.append(OLESIP2Constants.INSTITUTION_ID_CODE);
104        checkOutResponseBuilder.append(StringUtils.isNotBlank(sip2CheckOutRequestParser.getInstitutionId()) ? sip2CheckOutRequestParser.getInstitutionId() : "");
105        checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
106                OLESIP2Constants.PATRON_IDENTIFIER_CODE);
107        checkOutResponseBuilder.append(oleRenewItem.getPatronBarcode() != null ? oleRenewItem.getPatronBarcode() : sip2CheckOutRequestParser.getPatronIdentifier());
108        checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
109                OLESIP2Constants.ITEM_IDENTIFIER_CODE);
110        checkOutResponseBuilder.append(oleRenewItem.getItemBarcode() != null ? oleRenewItem.getItemBarcode() : sip2CheckOutRequestParser.getItemIdentifier());
111        checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
112                OLESIP2Constants.TITLE_IDENTIFIER_CODE);
113        checkOutResponseBuilder.append(oleRenewItem.getTitleIdentifier() != null ? oleRenewItem.getTitleIdentifier().replaceAll(OLESIP2Constants.NON_ROMAN_REGEX, "") : "");
114        checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
115                OLESIP2Constants.DUE_DATE_CODE);
116        checkOutResponseBuilder.append(oleRenewItem.getNewDueDate() != null ? oleRenewItem.getNewDueDate() : "");
117        if (OLESIP2Util.getDefaultCurrency() != null) {
118            checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
119                    OLESIP2Constants.CURRENCY_TYPE_CODE);
120            checkOutResponseBuilder.append(OLESIP2Util.getDefaultCurrency().getCurrencyCode());
121        }
122        checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
123                OLESIP2Constants.ITEM_PROPERTIES_CODE);
124        checkOutResponseBuilder.append(StringUtils.isNotBlank(oleRenewItem.getItemProperties()) ? oleRenewItem.getItemProperties().replaceAll(OLESIP2Constants.NON_ROMAN_REGEX, "") : " ");
125       /* checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
126                OLESIP2Constants.MEDIA_TYPE_CODE);
127        checkOutResponseBuilder.append(StringUtils.isNotBlank(oleRenewItem.getItemType()) ? oleRenewItem.getItemType() : "");*/
128        if (oleRenewItem.getCode().equalsIgnoreCase("030") || oleRenewItem.getMessage().equalsIgnoreCase(OLESIP2Constants.RENEW_SUCCESS)) {
129            checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
130                    OLESIP2Constants.SCREEN_MSG_CODE+OLESIP2Constants.CHECK_OUT_SUCCESSFULLY);
131            checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
132                    OLESIP2Constants.PRINT_LINE_CODE + oleRenewItem.getMessage().replaceAll("<br/>", ""));
133        } else {
134            checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
135                    OLESIP2Constants.SCREEN_MSG_CODE+OLESIP2Constants.CHECK_OUT_FAILED);
136            checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
137                    OLESIP2Constants.PRINT_LINE_CODE + oleRenewItem.getMessage().replaceAll("<br/>", ""));
138        }
139        if (StringUtils.isNotBlank(sip2CheckOutRequestParser.getSequenceNum())) {
140            checkOutResponseBuilder.append(OLESIP2Constants.SPLIT+
141                    OLESIP2Constants.SEQUENCE_NUM_CODE);
142            checkOutResponseBuilder.append(sip2CheckOutRequestParser.getSequenceNum());
143            checkOutResponseBuilder.append(MessageUtil.computeChecksum(checkOutResponseBuilder.toString()));
144        }
145
146        LOG.info("OLESIP2CheckOutResponse.getSIP2CheckOutResponse -- renew  "+checkOutResponseBuilder.toString());
147        return checkOutResponseBuilder.toString() + '\r';
148    }
149
150
151}