DesignImporterPostProcessor.java 6.21 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.commons.jcr.JcrUtil
 *  com.day.cq.dam.api.Asset
 *  com.day.cq.dam.api.Rendition
 *  javax.jcr.Node
 *  javax.jcr.Property
 *  javax.jcr.Session
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.jackrabbit.commons.JcrUtils
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.request.RequestParameter
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ValueMap
 *  org.apache.sling.servlets.post.Modification
 *  org.apache.sling.servlets.post.SlingPostProcessor
 */
package com.day.cq.wcm.designimporter.impl;

import com.day.cq.commons.jcr.JcrUtil;
import com.day.cq.dam.api.Asset;
import com.day.cq.dam.api.Rendition;
import com.day.cq.wcm.designimporter.DesignImportException;
import com.day.cq.wcm.designimporter.DesignImportResult;
import com.day.cq.wcm.designimporter.DesignPackageImporter;
import com.day.cq.wcm.designimporter.MalformedArchiveException;
import com.day.cq.wcm.designimporter.MissingCanvasException;
import com.day.cq.wcm.designimporter.MissingHTMLException;
import com.day.cq.wcm.designimporter.UnsupportedTagContentException;
import com.day.cq.wcm.designimporter.util.ImporterUtil;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.Session;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.request.RequestParameter;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.servlets.post.Modification;
import org.apache.sling.servlets.post.SlingPostProcessor;

@Component
@Service
public class DesignImporterPostProcessor
implements SlingPostProcessor {
    private static final String PN_FILENAME = "fileName";
    @Reference
    protected DesignPackageImporter designPackageImporter;
    private static final String MIME_TYPE_ZIP = "application/zip";

    public void process(SlingHttpServletRequest request, List<Modification> changes) throws Exception {
        if (this.isImportRequest(request)) {
            this.handleImportRequest(request);
        }
    }

    private void handleImportRequest(SlingHttpServletRequest request) throws Exception {
        Resource importer = request.getResource();
        ResourceResolver resourceResolver = request.getResourceResolver();
        Node importerNode = (Node)importer.adaptTo(Node.class);
        if (importerNode.hasProperty("importError")) {
            importerNode.getProperty("importError").remove();
        }
        Map parameterMap = request.getParameterMap();
        ValueMap resourceMap = (ValueMap)request.getResource().adaptTo(ValueMap.class);
        String archiveName = null;
        if (parameterMap.containsKey("designpackage/file")) {
            archiveName = request.getRequestParameter("designpackage/file").getFileName();
        } else {
            String designPackageReference = (String)resourceMap.get((Object)"designPackageReference");
            if (designPackageReference != null) {
                Resource referenceResource = resourceResolver.resolve(designPackageReference);
                Asset damAsset = (Asset)referenceResource.adaptTo(Asset.class);
                InputStream assetStream = damAsset.getOriginal().getStream();
                Node dstNode = JcrUtil.createPath((String)(importer.getPath() + "/" + "designpackage"), (String)"nt:unstructured", (Session)((Session)resourceResolver.adaptTo(Session.class)));
                if (damAsset.getMimeType().equals("application/zip")) {
                    JcrUtils.putFile((Node)dstNode, (String)"file", (String)damAsset.getMimeType(), (InputStream)assetStream);
                    archiveName = damAsset.getName();
                }
            }
        }
        Resource designPcg = importer.getChild("designpackage");
        JcrUtil.setProperty((Node)((Node)designPcg.adaptTo(Node.class)), (String)"fileName", (Object)archiveName);
        ((Session)request.getResourceResolver().adaptTo(Session.class)).save();
        try {
            this.designPackageImporter.importDesignPackage(request);
        }
        catch (MissingHTMLException e) {
            importerNode.setProperty("importError", "01");
            throw e;
        }
        catch (MissingCanvasException e) {
            importerNode.setProperty("importError", "02");
            throw e;
        }
        catch (MalformedArchiveException e) {
            importerNode.setProperty("importError", "03");
            throw e;
        }
        catch (UnsupportedTagContentException e) {
            importerNode.setProperty("importError", e.getMessage());
            throw e;
        }
        catch (DesignImportException e) {
            importerNode.setProperty("importError", "05");
            throw e;
        }
        catch (Exception e) {
            importerNode.setProperty("importError", e.getMessage());
            throw e;
        }
        finally {
            importerNode.getSession().save();
        }
    }

    private boolean isImportRequest(SlingHttpServletRequest request) {
        if (ImporterUtil.isImporter(request.getResource())) {
            Map parameterMap = request.getParameterMap();
            if (parameterMap.containsKey("designpackage/file")) {
                return true;
            }
            if (parameterMap.containsKey("./designPackageReference")) {
                return true;
            }
        }
        return false;
    }

    protected void bindDesignPackageImporter(DesignPackageImporter designPackageImporter) {
        this.designPackageImporter = designPackageImporter;
    }

    protected void unbindDesignPackageImporter(DesignPackageImporter designPackageImporter) {
        if (this.designPackageImporter == designPackageImporter) {
            this.designPackageImporter = null;
        }
    }
}