RepositoryServiceImpl.java 6.61 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.forms.common.service.FormExternalResource
 *  com.adobe.forms.external.service.RepositoryService
 *  com.adobe.forms.external.service.ResourceVO
 *  com.adobe.granite.resourceresolverhelper.ResourceResolverHelper
 *  com.day.cq.dam.api.Asset
 *  com.day.cq.dam.api.Rendition
 *  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.ResourceMetadata
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.SyntheticResource
 */
package com.adobe.forms.aem.impl;

import com.adobe.fd.forms.internal.logging.FormsServiceLogger;
import com.adobe.forms.common.service.FormExternalResource;
import com.adobe.forms.external.service.RepositoryService;
import com.adobe.forms.external.service.ResourceVO;
import com.adobe.granite.resourceresolverhelper.ResourceResolverHelper;
import com.day.cq.dam.api.Asset;
import com.day.cq.dam.api.Rendition;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
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.ResourceMetadata;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.SyntheticResource;

@Component(label="RepositoryService", description="RepositoryService")
@Service(value={RepositoryServiceImpl.class})
public class RepositoryServiceImpl
implements RepositoryService {
    private static FormsServiceLogger logger = new FormsServiceLogger(RepositoryServiceImpl.class);
    @Reference
    ResourceResolverHelper resourceResolverHelper;

    public String getProtocol() {
        return "crx";
    }

    private InputStream getInputStreamFromDamAsset(Resource resource) {
        Asset asset = (Asset)resource.adaptTo(Asset.class);
        InputStream is = null;
        if (asset != null) {
            Rendition rendition = asset.getOriginal();
            if (rendition != null) {
                is = rendition.getStream();
            } else {
                logger.error("AEM_FRM_001_006", "rendition");
            }
        } else {
            logger.debug("AEM_FRM_001_006", "asset");
        }
        return is;
    }

    public InputStream getResourceContentAsStream(String path) throws IOException {
        ResourceVO rvo = this.getResource(path);
        return rvo != null ? rvo.getInputStream() : null;
    }

    private FormExternalResource getFormExternalResource(Resource resource) {
        FormExternalResource externalResource = (FormExternalResource)resource.adaptTo(FormExternalResource.class);
        if (externalResource != null) {
            return externalResource;
        }
        logger.debug("FormExternalResource is null");
        return null;
    }

    private Resource getResourceInternal(String path) {
        ResourceResolver resourceResolver = this.resourceResolverHelper.getResourceResolver();
        Resource resource = null;
        if (resourceResolver != null) {
            resource = resourceResolver.getResource(path);
            if (resource == null) {
                resource = new SyntheticResource(resourceResolver, path, "nt:file");
            }
        } else {
            logger.error("AEM_FRM_001_006", "resourceResolver");
        }
        return resource;
    }

    public Date getResourceUpdateTime(String path) throws IOException {
        Resource resource = this.getResourceInternal(path);
        if (resource != null) {
            FormExternalResource formExternalResource = (FormExternalResource)resource.adaptTo(FormExternalResource.class);
            if (formExternalResource != null) {
                return new Date(formExternalResource.getLastModifiedTime());
            }
            logger.debug("FormExternalResource is null");
            ResourceMetadata rm = this.getResourceMetadata(resource);
            if (rm != null) {
                return new Date(rm.getModificationTime());
            }
        } else {
            logger.info("AEM_FRM_001_007", path);
        }
        return new Date(0);
    }

    public ResourceVO getResource(String path) {
        ResourceResolver resourceResolver = this.resourceResolverHelper.getResourceResolver();
        InputStream is = null;
        boolean isTrusted = false;
        if (resourceResolver != null) {
            Resource resource = this.getResourceInternal(path);
            if (resource != null) {
                FormExternalResource formExternalResource = this.getFormExternalResource(resource);
                if (formExternalResource != null) {
                    is = formExternalResource.getInputStream();
                    isTrusted = formExternalResource.isTrusted();
                }
                if (is == null) {
                    is = this.getInputStreamFromDamAsset(resource);
                    isTrusted = false;
                }
                if (is == null) {
                    is = (InputStream)resource.adaptTo(InputStream.class);
                    isTrusted = false;
                }
            } else {
                logger.error("AEM_FRM_001_007", path);
            }
        } else {
            logger.error("AEM_FRM_001_006", "resourceResolver");
        }
        return this.createResourceVO(is, isTrusted);
    }

    private ResourceMetadata getResourceMetadata(Resource resource) {
        ResourceMetadata rm = null;
        Asset asset = (Asset)resource.adaptTo(Asset.class);
        if (asset != null) {
            Rendition rendition = asset.getOriginal();
            if (rendition != null) {
                rm = rendition.getResourceMetadata();
            }
        } else {
            rm = resource.getResourceMetadata();
        }
        return rm;
    }

    private ResourceVO createResourceVO(final InputStream is, final boolean trusted) {
        return new ResourceVO(){

            public InputStream getInputStream() {
                return is;
            }

            public boolean isTrusted() {
                return trusted;
            }
        };
    }

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

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

}