Scene7DAMServiceImpl.java 13.3 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.dam.api.Asset
 *  javax.jcr.LoginException
 *  javax.jcr.RepositoryException
 *  javax.jcr.Session
 *  org.apache.commons.io.FilenameUtils
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.resource.PersistableValueMap
 *  org.apache.sling.api.resource.PersistenceException
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ResourceUtil
 *  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;

import com.day.cq.dam.api.Asset;
import com.day.cq.dam.scene7.api.S7Config;
import com.day.cq.dam.scene7.api.S7ConfigResolver;
import com.day.cq.dam.scene7.api.Scene7DAMService;
import com.day.cq.dam.scene7.api.constants.Scene7AssetType;
import com.day.cq.dam.scene7.impl.utils.RequestUtils;
import java.net.URISyntaxException;
import javax.jcr.LoginException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.apache.commons.io.FilenameUtils;
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.PersistableValueMap;
import org.apache.sling.api.resource.PersistenceException;
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.ValueMap;
import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.jcr.resource.JcrResourceResolverFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component
@Service
public class Scene7DAMServiceImpl
implements Scene7DAMService {
    private static final Logger LOG = LoggerFactory.getLogger(Scene7DAMServiceImpl.class);
    @Reference
    private S7ConfigResolver s7ConfigResolver;
    @Reference
    private SlingRepository slingRepository;
    @Reference
    private JcrResourceResolverFactory rrf;

    @Override
    public String getS7FileReference(Asset asset) {
        return this.getS7FileReference(asset, null);
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    @Override
    public String getS7FileReference(Asset asset, String configPath) {
        String fileReference = null;
        if (asset != null) {
            Resource assetResource = (Resource)asset.adaptTo(Resource.class);
            Resource metadataResource = assetResource.getChild("jcr:content/metadata");
            ValueMap metadata = (ValueMap)metadataResource.adaptTo(ValueMap.class);
            S7Config s7Config = null;
            Session configSession = null;
            ResourceResolver resolver = null;
            if (configPath != null) {
                s7Config = this.s7ConfigResolver.getS7Config(assetResource.getResourceResolver(), configPath);
                fileReference = this.getFileReference(asset, fileReference, metadata, s7Config);
            } else {
                String scene7ConfigPath = this.s7ConfigResolver.getS7ConfigPathForResource(assetResource.getResourceResolver(), assetResource);
                try {
                    configSession = this.slingRepository.loginService("scene7configservice", null);
                    resolver = this.rrf.getResourceResolver(configSession);
                    s7Config = this.s7ConfigResolver.getS7Config(resolver, scene7ConfigPath);
                    fileReference = this.getFileReference(asset, fileReference, metadata, s7Config);
                }
                catch (RepositoryException ee) {
                    LOG.error("Could not access a S7Config for resource {}", (Object)(assetResource != null ? assetResource.getPath() : "null"));
                }
                finally {
                    if (configSession != null) {
                        configSession.logout();
                        configSession = null;
                    }
                }
            }
        }
        return fileReference;
    }

    private String getFileReference(Asset asset, String fileReference, ValueMap metadata, S7Config s7Config) {
        String assetType = (String)metadata.get("dam:scene7Type", String.class);
        String publishServer = (String)metadata.get("dam:scene7Domain", String.class);
        if (s7Config != null && assetType != null) {
            String originalPath = (String)metadata.get("dam:scene7OriginalPath", String.class);
            String originalFile = (String)metadata.get("dam:scene7OriginalFile", String.class);
            String name = ResourceUtil.getName((String)asset.getPath());
            try {
                StringBuilder frSB = new StringBuilder();
                if (Scene7AssetType.VIDEO.getValue().equals(assetType) || Scene7AssetType.MASTER_VIDEO.getValue().equals(assetType)) {
                    String scene7File = (String)metadata.get("dam:scene7File", (Object)"");
                    String extension = FilenameUtils.getExtension((String)originalFile);
                    scene7File = scene7File + "." + extension;
                    frSB.append(publishServer).append("e2/");
                    fileReference = RequestUtils.buildURL(frSB.toString(), scene7File, null);
                } else if (Scene7AssetType.FLASH.getValue().equals(assetType)) {
                    frSB.append(s7Config.getFlashTemplatesServer());
                    fileReference = RequestUtils.buildURL(frSB.toString(), originalPath + originalFile, null);
                } else {
                    frSB.append(publishServer).append("is/image/").append(s7Config.getBasePath());
                    fileReference = RequestUtils.buildURL(frSB.toString(), FilenameUtils.removeExtension((String)name), null);
                }
            }
            catch (URISyntaxException e) {
                LOG.error("Unable to obtain Scene7 file reference for " + asset.getPath(), (Throwable)e);
            }
        }
        return fileReference;
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    @Override
    public String getS7FileReference(Asset asset, String configPath, boolean isPreview) {
        String fileReference;
        block16 : {
            fileReference = null;
            if (asset != null) {
                Resource assetResource = (Resource)asset.adaptTo(Resource.class);
                Resource metadataResource = assetResource.getChild("jcr:content/metadata");
                ValueMap metadata = (ValueMap)metadataResource.adaptTo(ValueMap.class);
                S7Config s7Config = null;
                Session configSession = null;
                if (configPath != null) {
                    s7Config = this.s7ConfigResolver.getS7Config(assetResource.getResourceResolver(), configPath);
                } else {
                    String scene7ConfigPath = this.s7ConfigResolver.getS7ConfigPathForResource(assetResource.getResourceResolver(), assetResource);
                    try {
                        configSession = this.slingRepository.loginService("scene7configservice", null);
                        ResourceResolver resolver = this.rrf.getResourceResolver(configSession);
                        s7Config = this.s7ConfigResolver.getS7Config(resolver, scene7ConfigPath);
                        String assetType = (String)metadata.get("dam:scene7Type", String.class);
                        String scene7Server = "";
                        scene7Server = isPreview && "on".equalsIgnoreCase(s7Config.isPublishEnabled()) && s7Config.getPreviewServer() != null ? s7Config.getPreviewServer() : s7Config.getPublishServer();
                        if (!scene7Server.endsWith("/")) {
                            scene7Server = scene7Server + "/";
                        }
                        String publishServer = scene7Server;
                        if (s7Config == null || assetType == null) break block16;
                        String originalPath = (String)metadata.get("dam:scene7OriginalPath", String.class);
                        String originalFile = (String)metadata.get("dam:scene7OriginalFile", String.class);
                        String name = ResourceUtil.getName((String)asset.getPath());
                        try {
                            StringBuilder frSB = new StringBuilder();
                            if (Scene7AssetType.VIDEO.getValue().equals(assetType) || Scene7AssetType.MASTER_VIDEO.getValue().equals(assetType)) {
                                String scene7File = (String)metadata.get("dam:scene7File", (Object)"");
                                String extension = FilenameUtils.getExtension((String)originalFile);
                                scene7File = scene7File + "." + extension;
                                frSB.append(publishServer).append("e2/");
                                fileReference = RequestUtils.buildURL(frSB.toString(), scene7File, null);
                            } else if (Scene7AssetType.FLASH.getValue().equals(assetType)) {
                                frSB.append(publishServer);
                                fileReference = RequestUtils.buildURL(frSB.toString(), originalPath + originalFile, null);
                            } else {
                                frSB.append(publishServer).append("is/image/").append(s7Config.getBasePath());
                                fileReference = RequestUtils.buildURL(frSB.toString(), FilenameUtils.removeExtension((String)name), null);
                            }
                        }
                        catch (URISyntaxException e) {
                            LOG.error("Unable to obtain Scene7 file reference for " + asset.getPath(), (Throwable)e);
                        }
                    }
                    catch (RepositoryException ee) {
                        LOG.error("Could not access a S7Config for resource {}", (Object)(assetResource != null ? assetResource.getPath() : "null"));
                    }
                    finally {
                        if (configSession != null) {
                            configSession.logout();
                            configSession = null;
                        }
                    }
                }
            }
        }
        return fileReference;
    }

    @Override
    public boolean setS7FileReference(Resource resource, String fileReference) {
        return this.setFileReference(resource, fileReference, false);
    }

    @Override
    public boolean setS7DMFileReference(Resource resource, String fileReference) {
        return this.setFileReference(resource, fileReference, true);
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    private boolean setFileReference(Resource resource, String fileReference, boolean dynamicMedia) {
        if (resource == null || fileReference == null) {
            return false;
        }
        ResourceResolver rr = null;
        Session assetSession = null;
        try {
            assetSession = this.slingRepository.loginService("scene7assetservice", null);
            rr = this.rrf.getResourceResolver(assetSession);
            Resource s7Resource = rr.getResource(resource.getPath());
            PersistableValueMap props = (PersistableValueMap)s7Resource.adaptTo(PersistableValueMap.class);
            props.put((Object)"fileReference", (Object)fileReference);
            if (dynamicMedia) {
                props.put((Object)"imageserverurl", (Object)fileReference);
            }
            props.save();
            boolean bl = true;
            return bl;
        }
        catch (PersistenceException e) {
            LOG.error("Unable to update fileReference for Scene7 resource " + resource.getPath());
        }
        catch (LoginException e) {
            LOG.error("Unable to access Scene7 resource " + resource.getPath());
        }
        catch (RepositoryException e) {
            LOG.error("RepositoryException while accessing Scene7 resource " + resource.getPath());
        }
        finally {
            if (rr != null && rr.isLive()) {
                rr.close();
            }
            if (assetSession != null && assetSession.isLive()) {
                assetSession.logout();
            }
        }
        return false;
    }

    protected void bindS7ConfigResolver(S7ConfigResolver s7ConfigResolver) {
        this.s7ConfigResolver = s7ConfigResolver;
    }

    protected void unbindS7ConfigResolver(S7ConfigResolver s7ConfigResolver) {
        if (this.s7ConfigResolver == s7ConfigResolver) {
            this.s7ConfigResolver = null;
        }
    }

    protected void bindSlingRepository(SlingRepository slingRepository) {
        this.slingRepository = slingRepository;
    }

    protected void unbindSlingRepository(SlingRepository slingRepository) {
        if (this.slingRepository == slingRepository) {
            this.slingRepository = null;
        }
    }

    protected void bindRrf(JcrResourceResolverFactory jcrResourceResolverFactory) {
        this.rrf = jcrResourceResolverFactory;
    }

    protected void unbindRrf(JcrResourceResolverFactory jcrResourceResolverFactory) {
        if (this.rrf == jcrResourceResolverFactory) {
            this.rrf = null;
        }
    }
}