SecondaryCanvasBuilderImpl.java 5.26 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.commons.jcr.JcrUtil
 *  com.day.cq.dam.indd.PageBuilder
 *  com.day.cq.dam.indd.PageBuilderFactory
 *  com.day.cq.dam.indd.PageComponent
 *  com.day.cq.wcm.api.Page
 *  com.day.cq.wcm.api.Template
 *  com.day.cq.wcm.api.WCMException
 *  javax.jcr.Node
 *  javax.jcr.RepositoryException
 *  javax.jcr.Session
 *  org.apache.commons.lang.StringUtils
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.slf4j.Logger
 */
package com.day.cq.wcm.designimporter.impl;

import com.day.cq.commons.jcr.JcrUtil;
import com.day.cq.dam.indd.PageBuilder;
import com.day.cq.dam.indd.PageBuilderFactory;
import com.day.cq.dam.indd.PageComponent;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.Template;
import com.day.cq.wcm.api.WCMException;
import com.day.cq.wcm.designimporter.CanvasBuildOptions;
import com.day.cq.wcm.designimporter.DesignImportException;
import com.day.cq.wcm.designimporter.DesignImporterContext;
import com.day.cq.wcm.designimporter.impl.CanvasBuilderImpl;
import com.day.cq.wcm.designimporter.parser.ParseResult;
import com.day.cq.wcm.designimporter.util.ComponentUtil;
import com.day.cq.wcm.designimporter.util.ImporterUtil;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.apache.commons.lang.StringUtils;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.slf4j.Logger;

public class SecondaryCanvasBuilderImpl
extends CanvasBuilderImpl {
    public static final String INDEX_HTML_FILE_PATTERN = "(?i).*?\\.html?";

    @Override
    public void build(InputStream htmlStream, DesignImporterContext designImporterContext, CanvasBuildOptions buildOptions) throws RepositoryException, DesignImportException {
        Resource importer = designImporterContext.getImporter();
        if (ImporterUtil.isImporterPage(importer)) {
            super.build(htmlStream, designImporterContext, buildOptions);
        }
    }

    @Override
    protected ParseResult parse(InputStream htmlStream, DesignImporterContext designImporterContext) throws DesignImportException {
        this.updateCanvasResourceType(designImporterContext);
        return super.parse(htmlStream, designImporterContext);
    }

    @Override
    protected Resource buildComponentTree(DesignImporterContext designImporterContext, ParseResult parseResult) throws RepositoryException {
        ResourceResolver resourceResolver = designImporterContext.getImporter().getResourceResolver();
        PageBuilder pageBuilder = this.pageBuilderFactory.getPageBuilder(resourceResolver);
        Page resultPage = null;
        try {
            String pageRoot = this.getPageRoot(designImporterContext);
            String pageName = this.getPageName(designImporterContext);
            String pageTitle = this.getPageTitle(designImporterContext);
            String templatePath = this.getPageTemplatePath(designImporterContext);
            String designPath = null;
            List components = new LinkedList();
            designImporterContext.currentPage = resultPage = pageBuilder.recreatePage(pageRoot, pageName, pageTitle, templatePath, designPath, components);
            Resource importer = ImporterUtil.findImporter((Resource)resultPage.adaptTo(Resource.class));
            components = parseResult.getComponents();
            Node importerNode = (Node)importer.adaptTo(Node.class);
            JcrUtil.setProperty((Node)importerNode, (String)"cq:secondaryCanvas", (Object)true);
            Session session = importerNode.getSession();
            for (PageComponent component : components) {
                ComponentUtil.writeComponent(component, importerNode, session);
            }
            return ImporterUtil.getCanvas(importer);
        }
        catch (WCMException e) {
            this.logger.error("An error occured while creating the secondary page", (Throwable)e);
            return null;
        }
    }

    private void updateCanvasResourceType(DesignImporterContext designImporterContext) {
        String canvasResourceType = (String)designImporterContext.getAttribute("canvasResourceType");
        ArrayList<String> tokens = new ArrayList<String>(Arrays.asList(canvasResourceType.split("/")));
        tokens.add(tokens.size() - 2, this.getPageName(designImporterContext));
        canvasResourceType = StringUtils.join(tokens, (String)"/");
        designImporterContext.setAttribute("canvasResourceType", canvasResourceType);
    }

    protected String getPageRoot(DesignImporterContext designImporterContext) {
        return designImporterContext.page.getPath();
    }

    protected String getPageName(DesignImporterContext designImporterContext) {
        return designImporterContext.htmlName.replaceAll("(\\.index)?\\.html", "");
    }

    protected String getPageTitle(DesignImporterContext designImporterContext) {
        return designImporterContext.page.getTitle();
    }

    protected String getPageTemplatePath(DesignImporterContext designImporterContext) {
        return designImporterContext.page.getTemplate().getPath();
    }
}