XFAModelTransformerImpl.java 9.45 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.aemds.guide.service.GuideException
 *  com.adobe.aemds.guide.service.XFAModelTransformer
 *  com.adobe.aemds.guide.utils.GuideUtils
 *  com.adobe.aemds.guide.xfa.XFAJSONTransformerUtil
 *  com.adobe.forms.option.LCFormsOptions
 *  com.adobe.forms.service.LCFormsOptionService
 *  com.adobe.forms.service.LCFormsService
 *  com.adobe.granite.resourceresolverhelper.ResourceResolverHelper
 *  org.apache.commons.lang3.StringUtils
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ValueMap
 *  org.apache.sling.commons.json.JSONObject
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.aemds.guide.addon.service.impl;

import com.adobe.aemds.guide.service.GuideException;
import com.adobe.aemds.guide.service.XFAModelTransformer;
import com.adobe.aemds.guide.utils.GuideUtils;
import com.adobe.aemds.guide.xfa.XFAJSONTransformerUtil;
import com.adobe.forms.option.LCFormsOptions;
import com.adobe.forms.service.LCFormsOptionService;
import com.adobe.forms.service.LCFormsService;
import com.adobe.granite.resourceresolverhelper.ResourceResolverHelper;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
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.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.commons.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(label="Guide XFA Json Transformer", description="Guide XFA Json Transformer Service", immediate=1)
@Service(value={XFAModelTransformer.class})
public class XFAModelTransformerImpl
implements XFAModelTransformer {
    private Logger logger = LoggerFactory.getLogger(XFAModelTransformerImpl.class);
    @Reference
    private LCFormsService lcFormsService;
    @Reference
    private LCFormsOptionService lcFormsOptionService;
    @Reference
    private ResourceResolverHelper resourceResolverHelper;

    public Map<String, String> exportXfaJson(Resource guideContainer, String data, String dataRef) {
        Map<String, Object> renderMap = this.getXfaRenderMap(guideContainer, data, dataRef);
        String formDom = (String)renderMap.get("formdom");
        String mergedFormDom = (String)renderMap.get("mergedformdom");
        String renderContextStr = (String)renderMap.get("rendercontext");
        HashMap<String, String> xfaState = new HashMap<String, String>();
        xfaState.put("formdom", formDom);
        xfaState.put("mergedformdom", mergedFormDom);
        xfaState.put("xfaRenderContext", renderContextStr);
        return xfaState;
    }

    public String exportXfaFormdomJson(Resource guideContainer) {
        Map<String, Object> renderMap = this.getXfaRenderMap(guideContainer, null, null);
        String formDom = (String)renderMap.get("formdom");
        return formDom;
    }

    public String exportXfaFormdomJson(String xdpRef) {
        Map<String, Object> renderMap = this.getXFARenderMapFromFormPath(xdpRef, null, null);
        return (String)renderMap.get("formdom");
    }

    public String getMergedFormDom(Map<String, String> formOptions) {
        LCFormsOptions lcFormsOptions = this.lcFormsOptionService.create(formOptions);
        lcFormsOptions.setUseXFA4J(null);
        Map map = this.lcFormsService.exportXFA(lcFormsOptions);
        String mergeFormDom = "";
        if (map.containsKey("mergedformdom")) {
            mergeFormDom = (String)map.get("mergedformdom");
        }
        return mergeFormDom;
    }

    private Map<String, Object> getXfaRenderMap(Resource guideContainer, String data, String dataRef) {
        ValueMap valueMap = (ValueMap)guideContainer.adaptTo(ValueMap.class);
        String formPath = (String)valueMap.get("xdpRef", null);
        return this.getXFARenderMapFromFormPath(formPath, data, dataRef);
    }

    private Map<String, Object> getXFARenderMapFromFormPath(String formPath, String data, String dataRef) {
        LCFormsOptions lcFormsOptions = new LCFormsOptions();
        String contentRootTemp = StringUtils.substringBeforeLast((String)formPath, (String)".xdp");
        String contentRoot = "crx://" + contentRootTemp.substring(0, contentRootTemp.lastIndexOf("/"));
        String template = formPath.substring(formPath.lastIndexOf("/") + 1);
        this.logger.debug("contentRoot:" + contentRoot + ", template" + template);
        lcFormsOptions.setContentRoot(contentRoot);
        lcFormsOptions.setTemplate(template);
        lcFormsOptions.setPacket("form");
        lcFormsOptions.setRenderType("html");
        if (data != null) {
            lcFormsOptions.setData(data);
        } else if (dataRef != null) {
            lcFormsOptions.setDataRef(dataRef);
        }
        lcFormsOptions.setUseXFA4J(null);
        return this.lcFormsService.render(lcFormsOptions);
    }

    public String getDataXMLFromXfaDom(String xdpRef, String xfaDom, String data) {
        String contentRootTemp = StringUtils.substringBeforeLast((String)xdpRef, (String)".xdp");
        String contentRoot = "crx://" + contentRootTemp.substring(0, contentRootTemp.lastIndexOf("/"));
        String template = xdpRef.substring(xdpRef.lastIndexOf("/") + 1);
        LCFormsOptions lcFormsOptions = new LCFormsOptions();
        lcFormsOptions.setContentRoot(contentRoot);
        lcFormsOptions.setTemplate(template);
        lcFormsOptions.setFormDom(xfaDom);
        lcFormsOptions.setRenderType("html");
        lcFormsOptions.setUseXFA4J(null);
        if (data != null) {
            lcFormsOptions.setData(data);
        }
        Map contentMap = this.lcFormsService.exportXFA(lcFormsOptions);
        String xfaResult = "";
        if (contentMap.containsKey("mergedformdom")) {
            xfaResult = (String)contentMap.get("mergedformdom");
        }
        return xfaResult;
    }

    public Map<String, Object> getPdfFromXfaDom(String xdpRef, String data) {
        if (xdpRef != null && xdpRef.length() > 0) {
            String contentRootTemp = StringUtils.substringBeforeLast((String)xdpRef, (String)".xdp");
            String contentRoot = "crx://" + contentRootTemp.substring(0, contentRootTemp.lastIndexOf("/"));
            String template = xdpRef.substring(xdpRef.lastIndexOf("/") + 1);
            LCFormsOptions lcFormsOptions = new LCFormsOptions();
            lcFormsOptions.setContentRoot(contentRoot);
            lcFormsOptions.setTemplate(template);
            lcFormsOptions.setRenderType("print.pdf");
            lcFormsOptions.setData(data);
            lcFormsOptions.setUseXFA4J(null);
            Map contentMap = this.lcFormsService.render(lcFormsOptions);
            return contentMap;
        }
        this.logger.error("No XDP present");
        return null;
    }

    public Map<String, String> getXDPFramgmentRootSubform(String xfaPath) throws GuideException {
        try {
            String formdom = (String)this.getXFARenderMapFromFormPath(xfaPath, null, null).get("formdom");
            JSONObject xfaJsonObject = new JSONObject(formdom);
            ResourceResolver resolver = GuideUtils.getResolverFromResourceResolverHelper((ResourceResolverHelper)this.resourceResolverHelper);
            XFAJSONTransformerUtil transformUtil = new XFAJSONTransformerUtil(resolver, xfaPath);
            JSONObject firstChildOfRootSubForm = (JSONObject)transformUtil.getOrElse(xfaJsonObject, "form.subform.subform", (Object)null, false);
            Hashtable hash = transformUtil.getCommonProperties(null, firstChildOfRootSubForm);
            hash = transformUtil.getPanelProperties(hash);
            if (hash.containsKey("bindRef")) {
                HashMap<String, String> mapOfNameAndFragmentModelRoot = new HashMap<String, String>();
                mapOfNameAndFragmentModelRoot.put("fragmentModelRoot", (String)hash.get("bindRef"));
                mapOfNameAndFragmentModelRoot.put("name", (String)hash.get("name"));
                return mapOfNameAndFragmentModelRoot;
            }
        }
        catch (Exception e) {
            this.logger.error("Cannot find fragment  root", (Throwable)e);
        }
        return null;
    }

    protected void bindLcFormsService(LCFormsService lCFormsService) {
        this.lcFormsService = lCFormsService;
    }

    protected void unbindLcFormsService(LCFormsService lCFormsService) {
        if (this.lcFormsService == lCFormsService) {
            this.lcFormsService = null;
        }
    }

    protected void bindLcFormsOptionService(LCFormsOptionService lCFormsOptionService) {
        this.lcFormsOptionService = lCFormsOptionService;
    }

    protected void unbindLcFormsOptionService(LCFormsOptionService lCFormsOptionService) {
        if (this.lcFormsOptionService == lCFormsOptionService) {
            this.lcFormsOptionService = null;
        }
    }

    protected void bindResourceResolverHelper(ResourceResolverHelper resourceResolverHelper) {
        this.resourceResolverHelper = resourceResolverHelper;
    }

    protected void unbindResourceResolverHelper(ResourceResolverHelper resourceResolverHelper) {
        if (this.resourceResolverHelper == resourceResolverHelper) {
            this.resourceResolverHelper = null;
        }
    }
}