Scene7Rendition.java 4.99 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.asset.api.Rendition
 *  javax.jcr.RepositoryException
 *  javax.jcr.Session
 *  org.apache.commons.lang.StringUtils
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ResourceUtil
 *  org.apache.sling.api.resource.ResourceWrapper
 *  org.apache.sling.api.resource.ValueMap
 *  org.apache.sling.jcr.api.SlingRepository
 *  org.apache.sling.jcr.resource.JcrResourceResolverFactory
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.dam.scene7.impl.rendition;

import com.adobe.granite.asset.api.Rendition;
import com.day.cq.dam.scene7.api.S7Config;
import com.day.cq.dam.scene7.api.S7ConfigResolver;
import com.day.cq.dam.scene7.api.Scene7APIClient;
import com.day.cq.dam.scene7.impl.rendition.Scene7RenditionProperty;
import java.io.InputStream;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.apache.commons.lang.StringUtils;
import org.apache.felix.scr.annotations.Reference;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.resource.ResourceWrapper;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.jcr.resource.JcrResourceResolverFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Scene7Rendition
extends ResourceWrapper
implements Rendition {
    private static final Logger LOGGER = LoggerFactory.getLogger(Scene7Rendition.class);
    private final ValueMap contentProperties;
    private Scene7APIClient scene7Client;
    private S7ConfigResolver s7ConfigResolver;
    @Reference
    private SlingRepository slingRepository;
    @Reference
    private JcrResourceResolverFactory resolverFactory;

    public Scene7Rendition(Resource resource, Scene7APIClient scene7Client, S7ConfigResolver s7ConfigResolver) {
        super(resource);
        this.scene7Client = scene7Client;
        this.s7ConfigResolver = s7ConfigResolver;
        Resource contentResource = resource.getResourceResolver().getResource(resource, "jcr:content");
        this.contentProperties = ResourceUtil.getValueMap((Resource)contentResource);
    }

    public String getMimeType() {
        return (String)this.contentProperties.get(Scene7RenditionProperty.MIME_TYPE.getPropertyName(), (Object)"");
    }

    public long getSize() {
        return ((Integer)this.contentProperties.get(Scene7RenditionProperty.SIZE.getPropertyName(), (Object)0)).intValue();
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    public InputStream getStream() {
        InputStream renditionInputStream;
        Resource resource = this.getResource();
        Session configSession = null;
        S7Config config = null;
        renditionInputStream = null;
        try {
            configSession = this.slingRepository.loginService("scene7configservice", null);
            config = this.resolveScene7Configuration(configSession);
            String assetHandle = (String)this.contentProperties.get(Scene7RenditionProperty.ASSET_HANDLE.getPropertyName(), (Object)"");
            if (StringUtils.isBlank((String)assetHandle)) {
                LOGGER.error("Invalid asset handle found on rendition resource {}", (Object)(resource != null ? resource.getPath() : "null"));
            }
            if (config != null && StringUtils.isNotBlank((String)assetHandle)) {
                renditionInputStream = this.scene7Client.getOriginalFile(assetHandle, config);
            }
        }
        catch (RepositoryException ee) {
            LOGGER.error("Could not access a S7Config for resource {}", (Object)(resource != null ? resource.getPath() : "null"));
        }
        finally {
            if (configSession != null) {
                configSession.logout();
                configSession = null;
            }
        }
        return renditionInputStream;
    }

    private S7Config resolveScene7Configuration(Session configSession) {
        ResourceResolver resolver;
        S7Config config;
        Resource resource = this.getResource();
        Resource configResource = null;
        if (resource != null) {
            ResourceResolver rr = resource.getResourceResolver();
            if (rr != null) {
                configResource = rr.getResource(resource, "../../metadata");
            } else {
                LOGGER.error("Invalid Resource resolver obtained from resource {}", (Object)resource.getPath());
            }
        }
        if ((config = this.s7ConfigResolver.getS7Config(resolver = this.resolverFactory.getResourceResolver(configSession), configResource.getPath())) == null) {
            LOGGER.error("Could not resolve a S7Config from resource {}", (Object)(resource != null ? resource.getPath() : "null"));
        }
        return config;
    }
}