FormDataModelServiceImpl.java 5.98 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.aem.dermis.api.IFormDataModelManager
 *  com.adobe.aem.dermis.exception.DermisException
 *  com.adobe.aem.dermis.model.IProperty
 *  com.adobe.aem.dermis.slingmodel.Attribute
 *  com.adobe.aem.dermis.slingmodel.Entity
 *  com.adobe.aem.dermis.slingmodel.FormDataModel
 *  com.adobe.aemds.guide.service.external.FormDataModelService
 *  com.adobe.granite.resourceresolverhelper.ResourceResolverHelper
 *  org.apache.commons.lang.StringUtils
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.ReferenceCardinality
 *  org.apache.felix.scr.annotations.ReferencePolicy
 *  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.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.aemds.guide.addon.service.impl;

import com.adobe.aem.dermis.api.IFormDataModelManager;
import com.adobe.aem.dermis.exception.DermisException;
import com.adobe.aem.dermis.model.IProperty;
import com.adobe.aem.dermis.slingmodel.Attribute;
import com.adobe.aem.dermis.slingmodel.Entity;
import com.adobe.aem.dermis.slingmodel.FormDataModel;
import com.adobe.aemds.guide.service.external.FormDataModelService;
import com.adobe.granite.resourceresolverhelper.ResourceResolverHelper;
import org.apache.commons.lang.StringUtils;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.ReferencePolicy;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component
@Service(value={FormDataModelService.class})
public class FormDataModelServiceImpl
implements FormDataModelService {
    private final Logger logger = LoggerFactory.getLogger(FormDataModelServiceImpl.class);
    @Reference
    ResourceResolverHelper resourceResolverHelper;
    @Reference(policy=ReferencePolicy.DYNAMIC, cardinality=ReferenceCardinality.OPTIONAL_UNARY)
    protected IFormDataModelManager formDataModelManager;

    public String getFDMEntityId(String guideContainerPath, String entityBindRef) {
        String entityId = null;
        if (StringUtils.isBlank((String)entityBindRef)) {
            this.logger.error("No entity bind ref present");
            return null;
        }
        if (StringUtils.isEmpty((String)guideContainerPath)) {
            this.logger.error("Adaptive form path required to fetch the entity list of FDM");
            return null;
        }
        String fdmPath = this.getFDMPath(guideContainerPath);
        if (StringUtils.isNotBlank((String)fdmPath)) {
            try {
                boolean isEntityAtRoot = false;
                if (entityBindRef.contains("/")) {
                    isEntityAtRoot = entityBindRef.lastIndexOf("/") == 0;
                    entityId = entityBindRef.substring(entityBindRef.lastIndexOf("/") + 1);
                    if (!isEntityAtRoot) {
                        FormDataModel formDataModel = this.formDataModelManager.getFormDataModel(fdmPath);
                        String[] ids = StringUtils.split((String)entityBindRef, (String)"/");
                        Entity rootEntity = null;
                        for (int i = 0; i < ids.length; ++i) {
                            Attribute attr;
                            if (i == 0) {
                                rootEntity = formDataModel.getEntityById(ids[i]);
                            } else if (rootEntity != null && (attr = (Attribute)rootEntity.getPropertyByIdentifier(ids[1])) != null) {
                                entityId = StringUtils.isNotBlank((String)attr.getTypeRef()) ? attr.getTypeRef() : attr.getSubTypeRef();
                                rootEntity = formDataModel.getEntityById(entityId);
                            }
                            entityId = rootEntity.getId();
                        }
                    }
                }
            }
            catch (DermisException ex) {
                this.logger.error("Unable to fetch entity id for " + entityBindRef, (Throwable)ex);
            }
        }
        return entityId;
    }

    private String getFDMPath(String guideContainerPath) {
        ResourceResolver resolver = this.resourceResolverHelper.getResourceResolver();
        Resource guideContainerResource = resolver.getResource(guideContainerPath);
        String fdmPath = null;
        if (guideContainerResource != null) {
            fdmPath = (String)guideContainerResource.getValueMap().get("schemaRef", (Object)"");
        }
        return fdmPath;
    }

    public String getFormDataModelJson(String schemaPath) {
        String fdmJSON = "";
        try {
            fdmJSON = this.formDataModelManager.getFormDataModelJson(schemaPath);
        }
        catch (DermisException e) {
            this.logger.error("Cannot fetch the JSON object from the FDM", (Throwable)e);
        }
        return fdmJSON;
    }

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

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

    protected void bindFormDataModelManager(IFormDataModelManager iFormDataModelManager) {
        this.formDataModelManager = iFormDataModelManager;
    }

    protected void unbindFormDataModelManager(IFormDataModelManager iFormDataModelManager) {
        if (this.formDataModelManager == iFormDataModelManager) {
            this.formDataModelManager = null;
        }
    }
}