CMDataMergeServiceImpl.java 7.67 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.aemds.guide.service.GuideModuleImporter
 *  com.adobe.aemds.guide.service.external.GuideDataMergerSPI
 *  com.adobe.aemds.guide.utils.DocumentDataMerger
 *  com.adobe.aemds.guide.utils.KeyValueDataMerger
 *  com.adobe.aemds.guide.utils.XMLUtils
 *  com.adobe.dct.exception.DCTException
 *  com.adobe.dct.service.DataDictionaryUtilService
 *  com.adobe.dct.transfer.DataDictionaryInstance
 *  com.adobe.icc.ddg.api.HTML5ModuleResolverService
 *  com.adobe.icc.render.obj.ContextData
 *  com.adobe.icc.services.api.LetterService
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.commons.json.JSONException
 *  org.apache.sling.commons.json.JSONObject
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.fd.adaddon.service.impl;

import com.adobe.aemds.guide.service.GuideModuleImporter;
import com.adobe.aemds.guide.service.external.GuideDataMergerSPI;
import com.adobe.aemds.guide.utils.DocumentDataMerger;
import com.adobe.aemds.guide.utils.KeyValueDataMerger;
import com.adobe.aemds.guide.utils.XMLUtils;
import com.adobe.dct.exception.DCTException;
import com.adobe.dct.service.DataDictionaryUtilService;
import com.adobe.dct.transfer.DataDictionaryInstance;
import com.adobe.fd.adaddon.internal.utils.ADUtils;
import com.adobe.fd.adaddon.internal.utils.CMDocumentDataMerger;
import com.adobe.fd.adaddon.internal.utils.LetterDataMerger;
import com.adobe.fd.adaddon.service.impl.ADHelperServiceImpl;
import com.adobe.icc.ddg.api.HTML5ModuleResolverService;
import com.adobe.icc.render.obj.ContextData;
import com.adobe.icc.services.api.LetterService;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import javax.xml.xpath.XPathExpressionException;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

@Component(immediate=1, label="CM Data Merger Service", description="CM Data Merger Service")
@Service(value={GuideDataMergerSPI.class})
public class CMDataMergeServiceImpl
implements GuideDataMergerSPI {
    private static final String CM_APP_CONTEXT_PATH = "/content/apps/cm";
    private static final String DD_PATH_SEPARATOR = "/";
    private static Logger logger = LoggerFactory.getLogger(CMDataMergeServiceImpl.class);
    @Reference
    ADHelperServiceImpl adHelperService;
    @Reference
    DataDictionaryUtilService dataDictionaryUtilService;
    @Reference
    LetterService letterService;
    @Reference
    HTML5ModuleResolverService html5ModuleResolverService;
    @Reference
    GuideModuleImporter guideModuleImporter;

    public DocumentDataMerger createDataMerger(JSONObject jsonObject, Document data, Map<String, Object> params) throws Exception {
        DocumentDataMerger ddm = null;
        ddm = jsonObject.has("letterRef") ? (ADUtils.isLetterInstanceData(data) ? this.createMergerInstanceFromLetterInstance(jsonObject, data, params) : this.createMergerInstanceFromLetter(jsonObject, data, params)) : this.createMergerInstanceFromDD(jsonObject, data, params);
        return ddm;
    }

    private DocumentDataMerger createMergerInstanceFromLetter(JSONObject guideJson, Document data, Map<String, Object> params) throws JSONException, XPathExpressionException, DCTException {
        String letterRef = guideJson.getString("letterRef");
        ContextData contextData = new ContextData();
        Map<String, Object> fieldValueMap = this.adHelperService.updateContextDataForLetter(letterRef, data, contextData);
        this.updateParams(params, letterRef, null, contextData, fieldValueMap);
        return new LetterDataMerger(guideJson, data, params, this.html5ModuleResolverService);
    }

    private DocumentDataMerger createMergerInstanceFromDD(JSONObject guideJson, Document data, Map<String, Object> params) throws JSONException, XPathExpressionException {
        String ddRef = guideJson.getString("ddRef");
        ContextData contextData = new ContextData();
        DataDictionaryInstance ddi = this.adHelperService.updateContextDataForDD(ddRef, data, contextData);
        this.updateParams(params, null, ddi, contextData, null);
        return new CMDocumentDataMerger(guideJson, data, params);
    }

    private DocumentDataMerger createMergerInstanceFromLetterInstance(JSONObject jsonObject, Document data, Map<String, Object> params) throws XPathExpressionException, DCTException, UnsupportedEncodingException {
        ContextData contextData = new ContextData();
        Map<String, Object> fieldValueMap = this.adHelperService.updateContextDataForLetterInstance(data, contextData, params);
        this.updateParams(params, "", null, contextData, fieldValueMap);
        return new LetterDataMerger(jsonObject, data, params, this.html5ModuleResolverService);
    }

    private DataDictionaryInstance createDataDictionary(String dataDictionaryRef, Document data) {
        return ADUtils.createDataDictionary(this.dataDictionaryUtilService, dataDictionaryRef, XMLUtils.getXMLfromXsdDom((Element)data.getDocumentElement()));
    }

    private void updateParams(Map<String, Object> params, String letterRef, DataDictionaryInstance ddi, ContextData contextData, Map<String, Object> fieldsValueMap) {
        logger.debug("updateParams: params={} , letterRef={}, ddi={}, contextData={},fieldsValueMap={}", new Object[]{params, letterRef, ddi, contextData, fieldsValueMap});
        params.put("letterRef", letterRef);
        params.put("moduleDDI", (Object)ddi);
        params.put("FIELD_VALUE_MAP", fieldsValueMap);
        params.put("CONTEXT_DATA", (Object)contextData);
    }

    protected void bindAdHelperService(ADHelperServiceImpl aDHelperServiceImpl) {
        this.adHelperService = aDHelperServiceImpl;
    }

    protected void unbindAdHelperService(ADHelperServiceImpl aDHelperServiceImpl) {
        if (this.adHelperService == aDHelperServiceImpl) {
            this.adHelperService = null;
        }
    }

    protected void bindDataDictionaryUtilService(DataDictionaryUtilService dataDictionaryUtilService) {
        this.dataDictionaryUtilService = dataDictionaryUtilService;
    }

    protected void unbindDataDictionaryUtilService(DataDictionaryUtilService dataDictionaryUtilService) {
        if (this.dataDictionaryUtilService == dataDictionaryUtilService) {
            this.dataDictionaryUtilService = null;
        }
    }

    protected void bindLetterService(LetterService letterService) {
        this.letterService = letterService;
    }

    protected void unbindLetterService(LetterService letterService) {
        if (this.letterService == letterService) {
            this.letterService = null;
        }
    }

    protected void bindHtml5ModuleResolverService(HTML5ModuleResolverService hTML5ModuleResolverService) {
        this.html5ModuleResolverService = hTML5ModuleResolverService;
    }

    protected void unbindHtml5ModuleResolverService(HTML5ModuleResolverService hTML5ModuleResolverService) {
        if (this.html5ModuleResolverService == hTML5ModuleResolverService) {
            this.html5ModuleResolverService = null;
        }
    }

    protected void bindGuideModuleImporter(GuideModuleImporter guideModuleImporter) {
        this.guideModuleImporter = guideModuleImporter;
    }

    protected void unbindGuideModuleImporter(GuideModuleImporter guideModuleImporter) {
        if (this.guideModuleImporter == guideModuleImporter) {
            this.guideModuleImporter = null;
        }
    }
}