com.kcs.service.impl.GenerateXml2ServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.kcs.service.impl.GenerateXml2ServiceImpl.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.kcs.service.impl;

import com.kcs.core.utilities.CollectionUtil;
import com.kcs.core.utilities.StringUtil;
import com.kcs.core.utilities.Utility;
import com.kcs.dao.DatasetIpiDao;
import com.kcs.dao.DatasetPtxDao;
import com.kcs.dao.HeadGenXMLControlDao;
import com.kcs.service.GenerateXml2Service;
import com.kcs.genxml.beans.ptx.*;
import com.kcs.genxml.beans.ipi.*;
import com.kcs.model.Datasetipi;
import com.kcs.model.Datasetptx;
import com.kcs.model.HeadGenXMLControl;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 *
 * @author Sarawut
 */
@Service("generateXml2Service")
public class GenerateXml2ServiceImpl extends Utility implements GenerateXml2Service {

    private final Logger logger = Logger.getLogger(GenerateXml2ServiceImpl.class);

    private final com.kcs.genxml.beans.ptx.ObjectFactory ptxOf = new com.kcs.genxml.beans.ptx.ObjectFactory();
    private final com.kcs.genxml.beans.ipi.ObjectFactory ipiOf = new com.kcs.genxml.beans.ipi.ObjectFactory();

    @Autowired
    private HeadGenXMLControlDao headDao;
    @Autowired
    private DatasetPtxDao ptxDao;
    @Autowired
    private DatasetIpiDao ipiDao;

    // <editor-fold defaultstate="collapsed" desc="ptx">
    public byte[] generateXmlPtx(String datasetDate, String category) throws Exception {
        try {
            List<Datasetptx> mainList = ptxDao.findMainList(datasetDate, category);
            if (CollectionUtil.isEmpty(mainList)) {
                logger.error("not found slb main list");
                return new byte[0];
            }

            Datasetptx obj = mainList.get(0);
            DSPTX dsptx = ptxOf.createDSPTX();
            HeadGenXMLControl head = headDao.getHeadGenXMLControlByDatasetCode("DS_PTX");
            if (head != null) {
                dsptx.setName(head.getAttributesName());
                dsptx.setType(head.getAttributesType());
                dsptx.setSchemaVersion(head.getAttributesSchemaVersion());
            }
            com.kcs.genxml.beans.ptx.DataSetCommonHeader dataSetCommonHeader = ptxOf.createDataSetCommonHeader();
            dataSetCommonHeader.setDataSetDate(getXMLGregorianCalendarDate(obj.getDataSetDate()));
            dataSetCommonHeader.setOrganizationId(obj.getOrgId());

            DSPTX.DSPTXHeader dSPTXHeader = ptxOf.createDSPTXDSPTXHeader();
            dSPTXHeader.setDataSubmissionPeriod(obj.getDataSubPrd());

            DSPTX.DSPTXContent content = ptxOf.createDSPTXDSPTXContent();
            for (Datasetptx main : mainList) {
                nullToEmptyString(main);
                DSPTX.DSPTXContent.ContentRecordGroup contentRecordGroup = ptxOf
                        .createDSPTXDSPTXContentContentRecordGroup();
                contentRecordGroup.setReceivePaymentTransactionType(main.getTranType());
                contentRecordGroup.setReceivePaymentItemType(main.getItemType());
                contentRecordGroup.setReceivePaymentItemDescription(main.getItemDesc());
                contentRecordGroup
                        .setReceivePaymentTransactionDate(getXMLGregorianCalendarDate(main.getTranDate()));
                contentRecordGroup.setInvolvedPartyName(main.getIpName());
                contentRecordGroup.setCountryIdOfInvolvedParty(main.getCtryIp());
                contentRecordGroup.setPaymentMethod(main.getPymtMethd());
                contentRecordGroup.setCurrencyId(com.kcs.genxml.beans.ptx.MV0072.fromValue(main.getCurr()));
                contentRecordGroup.setTransactionAmountInForeignCurrency(getXmlString(main.getTranAmt()));
                contentRecordGroup.setReceivePaymentItemTypeInfo(getRecievePaymentItemTypeInfo(main));
                content.getContentRecordGroup().add(contentRecordGroup);
            }

            dsptx.setCommonHeader(dataSetCommonHeader);
            dsptx.setDSPTXHeader(dSPTXHeader);
            dsptx.setDSPTXContent(content);

            return generateToBytes(dsptx);
        } catch (Exception ex) {
            ex.printStackTrace();
            throw ex;
        }
    }

    private DSPTX.DSPTXContent.ContentRecordGroup.ReceivePaymentItemTypeInfo getRecievePaymentItemTypeInfo(
            Datasetptx main) throws Exception {
        DSPTX.DSPTXContent.ContentRecordGroup.ReceivePaymentItemTypeInfo info = ptxOf
                .createDSPTXDSPTXContentContentRecordGroupReceivePaymentItemTypeInfo();
        String itemType = main.getItemType();
        if ("268022".equals(itemType) || "268027".equals(itemType)) {
            DSPTX.DSPTXContent.ContentRecordGroup.ReceivePaymentItemTypeInfo.PortfolioInvestmentDetails details = ptxOf
                    .createDSPTXDSPTXContentContentRecordGroupReceivePaymentItemTypeInfoPortfolioInvestmentDetails();
            details.setDebtInstrumentType(main.getDebtInsmType());
            details.setIsinCode(main.getIsinCode());
            details.setDebtInstrumentName(main.getDebtInsmName());
            details.setIssuerOrInvestedOrganizationName(main.getIssuOrgName());
            details.setCountryIdOfIssuerOrInvestedOrganization(
                    com.kcs.genxml.beans.ptx.MV0025.fromValue(main.getCtryIssuOrg()));
            details.setIssueDate(getXMLGregorianCalendarDate(main.getIssuDate()));
            details.setMaturityDate(getXmlDateFormatString(main.getMatDate()));
            details.setOriginalTerm(getXmlString(main.getOrigTerm()));
            details.setOriginalTermUnit(main.getOrigTermUnit());
            details.setCouponRate(getXmlString(main.getCoupRate()));
            details.setIntentionCountryId(main.getIntenCtry());
            info.setPortfolioInvestmentDetails(details);
        } else if ("268016".equals(itemType) || "268023".equals(itemType) || "268028".equals(itemType)) {
            DSPTX.DSPTXContent.ContentRecordGroup.ReceivePaymentItemTypeInfo.TradeLoanDetails details = ptxOf
                    .createDSPTXDSPTXContentContentRecordGroupReceivePaymentItemTypeInfoTradeLoanDetails();
            details.setIssuerOrInvestedOrganizationName(main.getIssuOrgName());
            details.setCountryIdOfIssuerOrInvestedOrganization(
                    com.kcs.genxml.beans.ptx.MV0025.fromValue(main.getCtryIssuOrg()));
            info.setTradeLoanDetails(details);
        } else if ("268012".equals(itemType)) {
            DSPTX.DSPTXContent.ContentRecordGroup.ReceivePaymentItemTypeInfo.SellForeignCurrencySecurityDetails details = ptxOf
                    .createDSPTXDSPTXContentContentRecordGroupReceivePaymentItemTypeInfoSellForeignCurrencySecurityDetails();
            details.setInvolvedPartyId(main.getIpId());
            details.setDebtInstrumentType(main.getDebtInsmType());
            details.setIsinCode(main.getIsinCode());
            details.setDebtInstrumentName(main.getDebtInsmName());
            details.setIssuerOrInvestedOrganizationName(main.getIssuOrgName());
            details.setCountryIdOfIssuerOrInvestedOrganization(
                    com.kcs.genxml.beans.ptx.MV0025.fromValue(main.getCtryIssuOrg()));
            details.setIssueDate(getXMLGregorianCalendarDate(main.getIssuDate()));
            details.setMaturityDate(getXmlDateFormatString(main.getMatDate()));
            details.setOriginalTerm(getXmlString(main.getOrigTerm()));
            details.setOriginalTermUnit(main.getOrigTermUnit());
            details.setCouponRate(getXmlString(main.getCoupRate()));
            details.setIntentionCountryId(main.getIntenCtry());
            details.setUnitOfTransaction(getXmlString(main.getUnitTrans()));
            details.setSellForeignCurrencySecurityTransactionAmountInBahtEquivalent(
                    getXmlString(main.getTranAmt()));
            info.setSellForeignCurrencySecurityDetails(details);
        } else if ("268015".equals(itemType)) {
            DSPTX.DSPTXContent.ContentRecordGroup.ReceivePaymentItemTypeInfo.ExportBillAdjustmentDetails details = ptxOf
                    .createDSPTXDSPTXContentContentRecordGroupReceivePaymentItemTypeInfoExportBillAdjustmentDetails();
            details.setInvolvedPartyId(main.getIpId());
            details.setDefaultedBillPurchaseDate(getXMLGregorianCalendarDate(main.getPurchDate()));
            info.setExportBillAdjustmentDetails(details);
        }

        return info;
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="ipi">
    @Override
    public byte[] generateXmlIpi(String datasetDate, String category) throws Exception {
        try {
            List<Datasetipi> mainList = ipiDao.findMainList(datasetDate, category);
            if (CollectionUtil.isEmpty(mainList)) {
                logger.error("not found slb main list");
                return new byte[0];
            }
            Datasetipi obj = mainList.get(0);
            DSIPI dsipi = ipiOf.createDSIPI();
            HeadGenXMLControl head = headDao.getHeadGenXMLControlByDatasetCode("DS_IPI");
            if (head != null) {
                dsipi.setName(head.getAttributesName());
                dsipi.setType(head.getAttributesType());
                dsipi.setSchemaVersion(head.getAttributesSchemaVersion());
            }
            com.kcs.genxml.beans.ipi.DataSetCommonHeader dataSetCommonHeader = ipiOf.createDataSetCommonHeader();
            dataSetCommonHeader.setDataSetDate(getXMLGregorianCalendarDate(obj.getDataSetDate()));
            dataSetCommonHeader.setOrganizationId(obj.getOrgId());

            DSIPI.DSIPIHeader dSIPIHeader = ipiOf.createDSIPIDSIPIHeader();

            DSIPI.DSIPIContent content = ipiOf.createDSIPIDSIPIContent();

            List<Datasetipi> thaiNationalityIndividualDetailsList = ipiDao
                    .findChildThaiNationalityIndividualDetailsList(datasetDate);
            List<Datasetipi> nonThaiNationalityIndividualDetailsList = ipiDao
                    .findChildNonThaiNationalityIndividualDetailsList(datasetDate);
            List<Datasetipi> thaiOrganizationDetailsList = ipiDao.findChildThaiOrganizationDetailsList(datasetDate);
            List<Datasetipi> nonThaiOrganizationDetailsList = ipiDao
                    .findChildNonThaiOrganizationDetailsList(datasetDate);
            List<Datasetipi> otherIdentificationDetailsList = ipiDao
                    .findChildOtherIdentificationDetailsList(datasetDate);
            List<Datasetipi> relatedInvolvedPartyDetailsList = ipiDao
                    .findChildRelatedInvolvedPartyDetailsList(datasetDate);

            for (Datasetipi main : mainList) {
                nullToEmptyString(main);
                DSIPI.DSIPIContent.ContentRecordGroup contentRecordGroup = ipiOf
                        .createDSIPIDSIPIContentContentRecordGroup();
                contentRecordGroup.setInvolvedPartyType(main.getIpType());
                contentRecordGroup.setNationality(com.kcs.genxml.beans.ipi.MV0025.fromValue(main.getNat()));
                contentRecordGroup.setCountryOfResidence(com.kcs.genxml.beans.ipi.MV0025.fromValue(main.getCtry()));
                DSIPI.DSIPIContent.ContentRecordGroup.InvolvedPartyInfo involvedPartyInfo = ipiOf
                        .createDSIPIDSIPIContentContentRecordGroupInvolvedPartyInfo();
                List<Datasetipi> subList = filterChildIpi(main, thaiNationalityIndividualDetailsList);
                if (!subList.isEmpty()) {
                    Datasetipi child = subList.get(0);
                    nullToEmptyString(child);
                    DSIPI.DSIPIContent.ContentRecordGroup.InvolvedPartyInfo.ThaiNationalityIndividualDetails thaiNationalityIndividualDetails = ipiOf
                            .createDSIPIDSIPIContentContentRecordGroupInvolvedPartyInfoThaiNationalityIndividualDetails();
                    thaiNationalityIndividualDetails.setTitle(child.getTitl());
                    thaiNationalityIndividualDetails.setTitleThai(child.getTitlThai());
                    thaiNationalityIndividualDetails.setFirstName(child.getFirstName());
                    thaiNationalityIndividualDetails.setFirstNameThai(child.getFirstNameThai());
                    thaiNationalityIndividualDetails.setMiddleName(child.getMidName());
                    thaiNationalityIndividualDetails.setMiddleNameThai(child.getMidNameThai());
                    thaiNationalityIndividualDetails.setLastName(child.getLastName());
                    thaiNationalityIndividualDetails.setLastNameThai(child.getLastNameThai());
                    thaiNationalityIndividualDetails.setPersonalIdentificationNumber(child.getPersonalId());
                    thaiNationalityIndividualDetails.setTaxIdentificationNumber(child.getTaxId());
                    thaiNationalityIndividualDetails.setPassportNumber(child.getPassportNo());
                    thaiNationalityIndividualDetails.setBirthDate(getXmlDateFormatString(child.getBrthDate()));
                    involvedPartyInfo.setThaiNationalityIndividualDetails(thaiNationalityIndividualDetails);
                }
                subList = filterChildIpi(main, nonThaiNationalityIndividualDetailsList);
                if (!subList.isEmpty()) {
                    Datasetipi child = subList.get(0);
                    nullToEmptyString(child);
                    DSIPI.DSIPIContent.ContentRecordGroup.InvolvedPartyInfo.NonThaiNationalityIndividualDetails nonThaiNationalityIndividualDetails = ipiOf
                            .createDSIPIDSIPIContentContentRecordGroupInvolvedPartyInfoNonThaiNationalityIndividualDetails();
                    nonThaiNationalityIndividualDetails.setTitle(child.getTitl());
                    nonThaiNationalityIndividualDetails.setTitleThai(child.getTitlThai());
                    nonThaiNationalityIndividualDetails.setFirstName(child.getFirstName());
                    nonThaiNationalityIndividualDetails.setFirstNameThai(child.getFirstNameThai());
                    nonThaiNationalityIndividualDetails.setMiddleName(child.getMidName());
                    nonThaiNationalityIndividualDetails.setMiddleNameThai(child.getMidNameThai());
                    nonThaiNationalityIndividualDetails.setLastName(child.getLastName());
                    nonThaiNationalityIndividualDetails.setLastNameThai(child.getLastNameThai());
                    nonThaiNationalityIndividualDetails.setPassportNumber(child.getPassportNo());
                    nonThaiNationalityIndividualDetails.setBirthDate(getXmlDateFormatString(child.getBrthDate()));
                    involvedPartyInfo.setNonThaiNationalityIndividualDetails(nonThaiNationalityIndividualDetails);
                }
                subList = filterChildIpi(main, thaiOrganizationDetailsList);
                if (!subList.isEmpty()) {
                    Datasetipi child = subList.get(0);
                    nullToEmptyString(child);
                    DSIPI.DSIPIContent.ContentRecordGroup.InvolvedPartyInfo.ThaiOrganizationDetails thaiOrganizationDetails = ipiOf
                            .createDSIPIDSIPIContentContentRecordGroupInvolvedPartyInfoThaiOrganizationDetails();
                    thaiOrganizationDetails.setBoiFlag(child.getBoiFlag());
                    thaiOrganizationDetails.setPrimaryBusinessType(child.getBusType());
                    thaiOrganizationDetails.setJuristicIdentificationNumber(child.getJuristicId());
                    thaiOrganizationDetails
                            .setJuristicRegisteredDate(getXmlDateFormatString(child.getJuristicDate()));
                    thaiOrganizationDetails.setTaxIdentificationNumber(child.getTaxId());
                    thaiOrganizationDetails.setSwiftCode(child.getSwiftCode());
                    thaiOrganizationDetails.setTitle(child.getTitl());
                    thaiOrganizationDetails.setRegisteredBusinessName(child.getRegisBusName());
                    thaiOrganizationDetails.setTitleThai(child.getTitlThai());
                    thaiOrganizationDetails.setRegisteredBusinessNameThai(child.getRegisBusNameThai());
                    involvedPartyInfo.setThaiOrganizationDetails(thaiOrganizationDetails);
                }
                subList = filterChildIpi(main, nonThaiOrganizationDetailsList);
                if (!subList.isEmpty()) {
                    Datasetipi child = subList.get(0);
                    nullToEmptyString(child);
                    DSIPI.DSIPIContent.ContentRecordGroup.InvolvedPartyInfo.NonThaiOrganizationDetails nonThaiOrganizationDetails = ipiOf
                            .createDSIPIDSIPIContentContentRecordGroupInvolvedPartyInfoNonThaiOrganizationDetails();
                    nonThaiOrganizationDetails.setBoiFlag(child.getBoiFlag());
                    nonThaiOrganizationDetails.setPrimaryBusinessType(child.getBusType());
                    nonThaiOrganizationDetails.setSwiftCode(child.getSwiftCode());
                    nonThaiOrganizationDetails.setTitle(child.getTitl());
                    nonThaiOrganizationDetails.setRegisteredBusinessName(child.getRegisBusName());
                    nonThaiOrganizationDetails.setTitleThai(child.getTitlThai());
                    nonThaiOrganizationDetails.setRegisteredBusinessNameThai(child.getRegisBusNameThai());
                    involvedPartyInfo.setNonThaiOrganizationDetails(nonThaiOrganizationDetails);
                }
                contentRecordGroup.setInvolvedPartyInfo(involvedPartyInfo);

                subList = filterChildIpi(main, otherIdentificationDetailsList);
                DSIPI.DSIPIContent.ContentRecordGroup.OtherIdentificationInfo otherIdentificationInfo = ipiOf
                        .createDSIPIDSIPIContentContentRecordGroupOtherIdentificationInfo();
                for (Datasetipi child : subList) {
                    nullToEmptyString(child);
                    DSIPI.DSIPIContent.ContentRecordGroup.OtherIdentificationInfo.OtherIdentificationDetails otherIdentificationDetails = ipiOf
                            .createDSIPIDSIPIContentContentRecordGroupOtherIdentificationInfoOtherIdentificationDetails();
                    if (StringUtil.isNotEmpty(child.getOthId())) {
                        otherIdentificationDetails.setOtherIdentificationNumber(child.getOthId());
                        otherIdentificationDetails.setUniqueIdType(child.getIdType());
                        otherIdentificationInfo.getOtherIdentificationDetails().add(otherIdentificationDetails);
                    }
                }
                contentRecordGroup.setOtherIdentificationInfo(otherIdentificationInfo);

                subList = filterChildIpi(main, relatedInvolvedPartyDetailsList);
                DSIPI.DSIPIContent.ContentRecordGroup.RelatedInvolvedPartyInfo relatedInvolvedPartyInfo = ipiOf
                        .createDSIPIDSIPIContentContentRecordGroupRelatedInvolvedPartyInfo();
                for (Datasetipi child : subList) {
                    nullToEmptyString(child);
                    DSIPI.DSIPIContent.ContentRecordGroup.RelatedInvolvedPartyInfo.RelatedInvolvedPartyDetails relatedInvolvedPartyDetails = ipiOf
                            .createDSIPIDSIPIContentContentRecordGroupRelatedInvolvedPartyInfoRelatedInvolvedPartyDetails();
                    relatedInvolvedPartyDetails.setRelatedInvolvedPartyId(child.getRltdIp());
                    relatedInvolvedPartyDetails.setUniqueIdType(child.getRltdIpType());
                    relatedInvolvedPartyDetails.setIpIpRelationshipType(child.getIpIpRltnType());
                    relatedInvolvedPartyInfo.getRelatedInvolvedPartyDetails().add(relatedInvolvedPartyDetails);
                }
                contentRecordGroup.setRelatedInvolvedPartyInfo(relatedInvolvedPartyInfo);

                content.getContentRecordGroup().add(contentRecordGroup);
            }

            dsipi.setCommonHeader(dataSetCommonHeader);
            dsipi.setDSIPIHeader(dSIPIHeader);
            dsipi.setDSIPIContent(content);

            return generateToBytes(dsipi);
        } catch (Exception ex) {
            ex.printStackTrace();
            throw ex;
        }
    }

    private List<Datasetipi> filterChildIpi(final Datasetipi main, List<Datasetipi> childList) {
        List<Datasetipi> result = new ArrayList<Datasetipi>();
        final Predicate predicate = new Predicate() {
            @Override
            public boolean evaluate(Object o) {
                if (Utility.isNotNull(o)) {
                    Datasetipi child = (Datasetipi) o;
                    boolean result = (objEquals(main.getCustCode(), child.getCustCode()));
                    return result;
                }
                return false;
            }
        };
        result = (List<Datasetipi>) CollectionUtils.select(childList, predicate);
        return result;
    }
    // </editor-fold>
}