com.adobe.acs.commons.synth.Synthesizer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of acs-aem-commons-bundle Show documentation
Show all versions of acs-aem-commons-bundle Show documentation
Main ACS AEM Commons OSGi Bundle. Includes commons utilities.
/*
* ACS AEM Commons
*
* Copyright (C) 2013 - 2023 Adobe
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.adobe.acs.commons.synth;
import com.adobe.acs.commons.synth.impl.SynthesizedSlingHttpServletRequest;
import com.adobe.acs.commons.synth.impl.SynthesizedResource;
import com.day.cq.commons.feed.StringResponseWrapper;
import com.day.cq.wcm.api.components.IncludeOptions;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.request.RequestDispatcherOptions;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import java.io.IOException;
import java.util.Map;
public final class Synthesizer {
private static final String SOME_PATH = "/var/acs-commons/synthesized/%s";
private Synthesizer() {
}
/**
* Builds a synthesized resource intended for "one-off usage".
*
* @param resourceResolver ResourceResolver
* @param resourceType Sling resource type, e.g. "myapp/components/my-fancy-show-off-stuff"
* @param properties Properties of the synthesized resource
* @return A resource with the given resourceType and properties
*/
public static Resource buildResource(ResourceResolver resourceResolver, String resourceType,
Map properties) {
SynthesizedResource synthesizedResource = new SynthesizedResource(resourceResolver, SOME_PATH, resourceType,
properties);
return synthesizedResource;
}
/**
* Renders a "one-off" resource with the given resourceType and properties.
*
* @param resourceType Sling resource type. This is the Sling script that will used for rendering.
* @param properties Properties of the "one-off" resource
* @param request Original request used for dispatching
* @param response Original response used for dispatching
* @return HTML result of rendering the script
* @throws ServletException
* @throws IOException
*/
public static String render(String resourceType, Map properties,
SlingHttpServletRequest request, SlingHttpServletResponse response)
throws ServletException, IOException {
Resource synthesizedResource = buildResource(request.getResourceResolver(), resourceType, properties);
return doRender(synthesizedResource, "html", request, response, new String[]{});
}
/**
* Renders "GET {resource}.html"
*
* @param resource Resource
* @param request Original request used for dispatching
* @param response Original response used for dispatching
* @return HTML result of rendering the resource
* @throws ServletException
* @throws IOException
*/
public static String render(Resource resource, SlingHttpServletRequest request, SlingHttpServletResponse response)
throws ServletException, IOException {
return doRender(resource,"html", request, response, new String[]{});
}
/**
* Renders "GET {resource}{selectors}.{extension}"
*
* @param resource Resource
* @param request Original request used for dispatching
* @param response Original response used for dispatching
* @param selectors Sling selectors (can be empty)
* @param extension html, json etc
* @return HTML result of rendering the resource
* @throws ServletException
* @throws IOException
*/
public static String render(Resource resource, SlingHttpServletRequest request, SlingHttpServletResponse response, String extension, String[] selectors)
throws ServletException, IOException {
return doRender(resource, extension, request, response, selectors);
}
private static String doRender(Resource resource, String requestExtension,
SlingHttpServletRequest request, SlingHttpServletResponse response, String[] selectors)
throws ServletException, IOException {
SynthesizedSlingHttpServletRequest synthesizedRequest = new SynthesizedSlingHttpServletRequest(request)
.setMethod(SynthesizedSlingHttpServletRequest.METHOD_GET)
.setSelectors(selectors)
.setExtension(requestExtension)
.setResource(resource);
RequestDispatcherOptions rdo = new RequestDispatcherOptions();
IncludeOptions.getOptions(synthesizedRequest, true).setDecorationTagName(""); // @ROCK SOLID MAGIC .. remove decoration by setting it to "" empty string
StringResponseWrapper responseWrapper = new StringResponseWrapper(response);
RequestDispatcher requestDispatcher = request.getRequestDispatcher(resource, rdo);
requestDispatcher.include(synthesizedRequest, responseWrapper);
return responseWrapper.getString();
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy