ClearCanvasServlet.java 5.99 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.commons.Filter
 *  com.day.cq.commons.jcr.JcrUtil
 *  com.day.cq.wcm.api.Page
 *  com.day.cq.wcm.api.PageManager
 *  com.day.cq.wcm.api.WCMException
 *  javax.jcr.Node
 *  javax.jcr.Property
 *  javax.jcr.RepositoryException
 *  javax.jcr.Session
 *  javax.jcr.Value
 *  javax.servlet.ServletException
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Properties
 *  org.apache.felix.scr.annotations.Property
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.servlets.SlingAllMethodsServlet
 */
package com.day.cq.wcm.designimporter.impl;

import com.day.cq.commons.Filter;
import com.day.cq.commons.jcr.JcrUtil;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageManager;
import com.day.cq.wcm.api.WCMException;
import com.day.cq.wcm.designimporter.impl.common.PathSchemeHelper;
import com.day.cq.wcm.designimporter.util.ImporterUtil;
import java.io.IOException;
import java.util.Calendar;
import java.util.Iterator;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Value;
import javax.servlet.ServletException;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;

@Component
@Service
@Properties(value={@Property(name="sling.servlet.paths", value={"/bin/designimporter/commands/clear"}), @Property(name="sling.servlet.methods", value={"POST"}), @Property(name="sling.servlet.selectors", value={"delete"})})
public class ClearCanvasServlet
extends SlingAllMethodsServlet {
    protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        String importerPath = request.getParameter("path");
        Resource resource = request.getResourceResolver().resolve(importerPath);
        Resource canvas = ImporterUtil.getCanvas(resource);
        try {
            if (Boolean.parseBoolean(request.getParameter("retainAuthorNodes"))) {
                Node n = (Node)resource.adaptTo(Node.class);
                n.setProperty("reimport", true);
                n.getSession().save();
                this.deleteCanvasArtifacts(canvas);
                this.deleteSecondaryCanvasPages(canvas);
            } else {
                this.deleteCanvas(canvas);
            }
        }
        catch (RepositoryException e) {
            e.printStackTrace();
        }
        catch (WCMException e) {
            e.printStackTrace();
        }
    }

    private void deleteCanvas(Resource canvas) throws RepositoryException, WCMException {
        this.deleteCanvasArtifacts(canvas);
        this.deleteSecondaryCanvasPages(canvas);
        Node canvasNode = (Node)canvas.adaptTo(Node.class);
        canvasNode.remove();
        canvasNode.getSession().save();
    }

    private void deleteCanvasArtifacts(Resource canvas) throws RepositoryException {
        String absScriptPath = PathSchemeHelper.getCanvasComponentPath(canvas);
        Resource canvasComponent = canvas.getResourceResolver().resolve(absScriptPath);
        ImporterUtil.deleteCanvasArtifact(canvasComponent);
        Resource canvasDesign = ImporterUtil.getCanvasDesign(canvas);
        ImporterUtil.deleteCanvasArtifact(canvasDesign);
        ResourceResolver resourceResolver = canvas.getResourceResolver();
        PageManager pageManager = (PageManager)resourceResolver.adaptTo(PageManager.class);
        Page canvasPage = pageManager.getContainingPage(canvas);
        Node pageContentNode = (Node)canvasPage.getContentResource().adaptTo(Node.class);
        String prop = "cq:canvasArtifactsPendingDeactivate";
        Object[] values = new Object[2];
        if (pageContentNode.hasProperty(prop)) {
            Value[] vals = pageContentNode.getProperty(prop).getValues();
            values = new Object[vals.length + 2];
            for (int i = 0; i < vals.length; ++i) {
                values[i] = vals[i].getString();
            }
        }
        int len = values.length;
        values[len - 2] = canvasComponent.getPath();
        values[len - 1] = canvasDesign.getPath();
        JcrUtil.setProperty((Node)pageContentNode, (String)prop, (Object)values);
        pageContentNode.setProperty("cq:lastModified", Calendar.getInstance());
        pageContentNode.setProperty("cq:lastModifiedBy", pageContentNode.getSession().getUserID());
        pageContentNode.getSession().save();
    }

    private void deleteSecondaryCanvasPages(Resource canvas) throws WCMException {
        ResourceResolver resourceResolver = canvas.getResourceResolver();
        PageManager pageManager = (PageManager)resourceResolver.adaptTo(PageManager.class);
        Page canvasPage = pageManager.getContainingPage(canvas);
        if (!ImporterUtil.isImporterPage(canvasPage)) {
            return;
        }
        Iterator iter = canvasPage.listChildren((Filter)new Filter<Page>(){

            public boolean includes(Page page) {
                Resource importer = ImporterUtil.findImporter((Resource)page.adaptTo(Resource.class));
                if (importer != null) {
                    Resource canvas = ImporterUtil.getCanvas(importer);
                    return ImporterUtil.checkCanvasSecondary(canvas);
                }
                return false;
            }
        });
        while (iter.hasNext()) {
            Page secondaryCanvasPage = (Page)iter.next();
            pageManager.delete(secondaryCanvasPage, false);
        }
    }

}