SetupProjectStep.java 4.14 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.xss.XSSAPI
 *  javax.jcr.ItemExistsException
 *  javax.jcr.Node
 *  javax.jcr.RepositoryException
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Properties
 *  org.apache.felix.scr.annotations.Property
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 */
package com.day.cq.wcm.siteimporter.internal.steps;

import com.adobe.granite.xss.XSSAPI;
import com.day.cq.wcm.siteimporter.ImporterContext;
import com.day.cq.wcm.siteimporter.ImporterStep;
import com.day.cq.wcm.siteimporter.internal.steps.AbstractImporterStep;
import com.day.cq.wcm.siteimporter.internal.util.Utils;
import javax.jcr.ItemExistsException;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
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.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;

@Component(metatype=0)
@Service(value={ImporterStep.class})
@Properties(value={@Property(name="importerstep.order", intValue={100})})
public class SetupProjectStep
extends AbstractImporterStep {
    @Reference
    private XSSAPI xssApi;

    @Override
    public boolean execute(ImporterContext ctx) {
        Node project;
        ctx.output("Creating project " + this.xssApi.encodeForHTML(ctx.getProjectName()), "heading");
        ctx.doIndent();
        Resource appsRes = ctx.getResolver().getResource("/apps");
        if (appsRes == null) {
            ctx.error("Could not locate apps folder.");
            ctx.undoIndent();
            return false;
        }
        Node appsNode = (Node)appsRes.adaptTo(Node.class);
        try {
            project = Utils.createNode(appsNode, ctx.getProjectName(), "nt:folder", ctx);
        }
        catch (ItemExistsException e) {
            if (ctx.isOverwrite()) {
                try {
                    project = appsNode.getNode(ctx.getProjectName());
                }
                catch (RepositoryException ex) {
                    ctx.error("Repository failure: " + this.xssApi.encodeForHTML(ex.getMessage()), (Exception)e);
                    ctx.undoIndent();
                    return false;
                }
            }
            ctx.error("Project folder already exists, remove or activate overwrite mode");
            ctx.undoIndent();
            return false;
        }
        catch (RepositoryException e) {
            ctx.error("Repository failure: " + this.xssApi.encodeForHTML(e.getMessage()), (Exception)e);
            ctx.undoIndent();
            return false;
        }
        try {
            ctx.addPath(project.getPath());
        }
        catch (RepositoryException e1) {
            ctx.error("Could not add project path to context");
        }
        try {
            Utils.createNode(project, "components", "nt:folder", ctx);
            Utils.createNode(project, "templates", "nt:folder", ctx);
            ctx.output("Created folder structure in " + this.xssApi.encodeForHTML(project.getPath()));
        }
        catch (ItemExistsException e) {
            if (!ctx.isOverwrite()) {
                ctx.error("Project folder already exists, remove or activate overwrite mode", (Exception)e);
                ctx.undoIndent();
                return false;
            }
        }
        catch (RepositoryException e) {
            ctx.error("Repository failure: " + this.xssApi.encodeForHTML(e.getMessage()), (Exception)e);
            ctx.undoIndent();
            return false;
        }
        ctx.output("Created folder structure in apps");
        ctx.undoIndent();
        return true;
    }

    protected void bindXssApi(XSSAPI xSSAPI) {
        this.xssApi = xSSAPI;
    }

    protected void unbindXssApi(XSSAPI xSSAPI) {
        if (this.xssApi == xSSAPI) {
            this.xssApi = null;
        }
    }
}