Scene7TreeHtmlServlet.java 6.21 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.xss.XSSAPI
 *  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.Reference
 *  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
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.dam.scene7.impl.servlets;

import com.adobe.granite.xss.XSSAPI;
import com.day.cq.dam.scene7.api.S7Config;
import com.day.cq.dam.scene7.api.S7ConfigResolver;
import com.day.cq.dam.scene7.api.Scene7Service;
import com.day.cq.dam.scene7.api.model.Scene7Folder;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
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.Reference;
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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(label="%cq.scene7.servlet.name", description="%cq.scene7.servlet.description")
@Service
@Properties(value={@Property(name="sling.servlet.resourceTypes", value={"dam/components/scene7/scene7page"}), @Property(name="sling.servlet.selectors", value={"foldertree"}), @Property(name="sling.servlet.extensions", value={"html"}), @Property(name="sling.servlet.methods", value={"GET"})})
public class Scene7TreeHtmlServlet
extends SlingAllMethodsServlet {
    private static final Logger LOG = LoggerFactory.getLogger(Scene7TreeHtmlServlet.class);
    @Reference
    protected Scene7Service scene7Service;
    @Reference
    protected S7ConfigResolver s7configResolver;
    @Reference
    private XSSAPI xssapi;
    private static final String PATH = "path";

    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");
        Resource resource = request.getResource();
        S7Config s7Config = null;
        String configPath = "";
        if (resource == null) {
            LOG.warn("Could not load a valid Scene7 configuration!");
            response.getWriter().write("");
            return;
        }
        configPath = resource.getPath();
        configPath = configPath.replaceAll("/jcr:content$", "");
        s7Config = this.s7configResolver.getS7Config(resource.getResourceResolver(), configPath);
        String path = request.getParameter("path");
        String rootPath = s7Config.getBasePath();
        if (path == null || path.equals("")) {
            path = rootPath;
        }
        Scene7Folder s7Folder = this.scene7Service.getFolderTree(path, 1, null, null, s7Config);
        StringBuffer sbFolderList = new StringBuffer();
        if (s7Folder != null) {
            sbFolderList.append("<nav class='coral-ColumnView-column'>\n");
            sbFolderList.append("  <div class=\"coral-ColumnView-column-content\">\n");
            List<Scene7Folder> subFolders = s7Folder.getSubFolders();
            for (Scene7Folder subFolder : subFolders) {
                String subFolderPath = subFolder.getPath();
                String name = subFolderPath.substring(0, subFolderPath.length() - 1);
                int idx = name.lastIndexOf("/");
                if (idx != -1) {
                    name = name.substring(name.lastIndexOf("/") + 1);
                }
                sbFolderList.append("<a class='coral-ColumnView-item");
                if (subFolder.hasSubFolders().booleanValue()) {
                    sbFolderList.append(" coral-ColumnView-item--hasChildren");
                }
                sbFolderList.append("'\n");
                sbFolderList.append("    title='" + this.xssapi.encodeForHTMLAttr(name) + "'\n");
                sbFolderList.append("    data-value='" + this.xssapi.encodeForHTMLAttr(subFolderPath) + "'\n");
                sbFolderList.append("    data-id='" + this.xssapi.encodeForHTMLAttr(name) + "'\n");
                sbFolderList.append("    data-href='" + this.xssapi.encodeForHTMLAttr(configPath) + "/jcr:content.foldertree.html?path=" + this.xssapi.encodeForHTMLAttr(subFolderPath) + "'>\n");
                sbFolderList.append("  <div class=\"coral-ColumnView-icon\">\n");
                sbFolderList.append("    <i class=\"coral-Icon coral-Icon--folder coral-Icon--sizeS\"></i>\n");
                sbFolderList.append("  </div>\n");
                sbFolderList.append("  <div class=\"coral-ColumnView-label\">" + this.xssapi.encodeForHTML(name) + "</div>\n");
                sbFolderList.append("</a>\n");
            }
            sbFolderList.append("  </div>\n");
            sbFolderList.append("</nav>\n");
        }
        response.getWriter().write(sbFolderList.toString());
    }

    protected void bindScene7Service(Scene7Service scene7Service) {
        this.scene7Service = scene7Service;
    }

    protected void unbindScene7Service(Scene7Service scene7Service) {
        if (this.scene7Service == scene7Service) {
            this.scene7Service = null;
        }
    }

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

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

    protected void bindXssapi(XSSAPI xSSAPI) {
        this.xssapi = xSSAPI;
    }

    protected void unbindXssapi(XSSAPI xSSAPI) {
        if (this.xssapi == xSSAPI) {
            this.xssapi = null;
        }
    }
}