Scene7ImportEventHandler.java 5.75 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.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Property
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.event.jobs.Job
 *  org.apache.sling.event.jobs.consumer.JobConsumer
 *  org.apache.sling.event.jobs.consumer.JobConsumer$JobResult
 *  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.importer;

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.constants.Scene7AssetType;
import com.day.cq.dam.scene7.api.importer.Scene7ImportHandler;
import com.day.cq.dam.scene7.api.importer.Scene7ImportHandlerLookupService;
import com.day.cq.dam.scene7.api.model.Scene7Asset;
import javax.jcr.LoginException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.event.jobs.Job;
import org.apache.sling.event.jobs.consumer.JobConsumer;
import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.jcr.resource.JcrResourceResolverFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(metatype=0, immediate=1)
@Service(value={JobConsumer.class})
@Property(name="job.topics", value={"com/dam/cq/scene7/importer/*"}, propertyPrivate=1)
public class Scene7ImportEventHandler
implements JobConsumer {
    private static final Logger LOG = LoggerFactory.getLogger(Scene7ImportEventHandler.class);
    public static final String TOPIC = "com/dam/cq/scene7/importer/*";
    @Reference
    private S7ConfigResolver s7ConfigResolver;
    @Reference
    private Scene7ImportHandlerLookupService handlerLookupService;
    @Reference
    private SlingRepository slingRepository;
    @Reference
    private JcrResourceResolverFactory resourceResolverFactory;

    public JobConsumer.JobResult process(Job job) {
        String s7ConfigPath = (String)job.getProperty("scene7Config");
        Scene7Asset scene7Asset = (Scene7Asset)job.getProperty("scene7Asset");
        ResourceResolver rr = null;
        Session session = null;
        S7Config s7Config = null;
        try {
            session = this.slingRepository.loginService("scene7configservice", null);
            rr = this.resourceResolverFactory.getResourceResolver(session);
            s7Config = this.s7ConfigResolver.getS7Config(rr, s7ConfigPath);
        }
        catch (LoginException e1) {
            LOG.error("Unable to retrieve scene7 config " + s7ConfigPath, (Throwable)e1);
            return JobConsumer.JobResult.FAILED;
        }
        catch (RepositoryException e) {
            LOG.error("Unable to retrieve scene7 config " + s7ConfigPath, (Throwable)e);
            return JobConsumer.JobResult.FAILED;
        }
        if (s7Config == null || scene7Asset == null) {
            LOG.error("Received null S7Config or Scene7Asset. Skipping job.");
            return JobConsumer.JobResult.FAILED;
        }
        Scene7ImportHandler importHandler = this.handlerLookupService.getImportHandler(scene7Asset);
        if (importHandler != null) {
            try {
                importHandler.createAssetImportFolder(scene7Asset, s7Config);
                importHandler.importAsset(scene7Asset, s7Config);
            }
            catch (Exception e) {
                LOG.error("Unable to import asset " + scene7Asset.getName(), (Throwable)e);
                return JobConsumer.JobResult.FAILED;
            }
        } else {
            LOG.error("Could not find handler for asset {} of type {}", (Object)scene7Asset.getName(), (Object)scene7Asset.getAssetType().getValue());
            return JobConsumer.JobResult.FAILED;
        }
        return JobConsumer.JobResult.OK;
    }

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

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

    protected void bindHandlerLookupService(Scene7ImportHandlerLookupService scene7ImportHandlerLookupService) {
        this.handlerLookupService = scene7ImportHandlerLookupService;
    }

    protected void unbindHandlerLookupService(Scene7ImportHandlerLookupService scene7ImportHandlerLookupService) {
        if (this.handlerLookupService == scene7ImportHandlerLookupService) {
            this.handlerLookupService = null;
        }
    }

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

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

    protected void bindResourceResolverFactory(JcrResourceResolverFactory jcrResourceResolverFactory) {
        this.resourceResolverFactory = jcrResourceResolverFactory;
    }

    protected void unbindResourceResolverFactory(JcrResourceResolverFactory jcrResourceResolverFactory) {
        if (this.resourceResolverFactory == jcrResourceResolverFactory) {
            this.resourceResolverFactory = null;
        }
    }
}