get component policy values in servlet
Component Dialog has "select" drop down that needs to read values set by author in "design dialog".
Following is the servlet that mapped to dialog select field using resourceType mapping. How to get get component policy values in servlet.
I tried below but content resource coming as null
Resource contentResource = resolver.getResource((String) request.getAttribute(Value.CONTENTPATH_ATTRIBUTE));
Thanks for any help. Below is the servlet code.
package com.company.aem.core.servlets;
import com.adobe.granite.ui.components.Value;
import com.adobe.granite.ui.components.ds.DataSource;
import com.adobe.granite.ui.components.ds.EmptyDataSource;
import com.adobe.granite.ui.components.ds.SimpleDataSource;
import com.adobe.granite.ui.components.ds.ValueMapResource;
import com.day.cq.wcm.api.policies.ContentPolicy;
import com.day.cq.wcm.api.policies.ContentPolicyManager;
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.ResourceMetadata;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.apache.sling.api.wrappers.ValueMapDecorator;
import org.osgi.service.component.annotations.Component;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
*
* Data source for links dropdown
*/
@Component(service = { Servlet.class }, property = {
"sling.servlet.resourceTypes=" + AllowedArticleInsightsLinksServlet.RESOURCE_TYPE, "sling.servlet.methods=GET",
"sling.servlet.extensions=html" })
public class AllowedArticleInsightsLinksServlet extends SlingSafeMethodsServlet
{
public final static String RESOURCE_TYPE = "pi-web/components/content/articleinsights/datasource/allowedlinks";
@Override
protected void doGet(
SlingHttpServletRequest request, SlingHttpServletResponse response)
throws ServletException, IOException
{
SimpleDataSource
allowedHeadingElementsDataSource =
new SimpleDataSource(getAllowedHeadingElements(request).iterator());
request.setAttribute(DataSource.class.getName(), allowedHeadingElementsDataSource);
}
private List
<
Resource
>
getAllowedHeadingElements(SlingHttpServletRequest request)
{
List
<
Resource
>
allowedHeadingElements = new ArrayList<>();
ResourceResolver resolver = request.getResourceResolver();
Resource contentResource = resolver.getResource((String) request.getAttribute(Value.CONTENTPATH_ATTRIBUTE));
ContentPolicyManager policyManager = resolver.adaptTo(ContentPolicyManager.class);
if (policyManager != null && contentResource != null)
{
ContentPolicy policy = policyManager.getPolicy(contentResource);
if (policy != null)
{
request.setAttribute(DataSource.class.getName(), EmptyDataSource.instance());
Resource allowedLinksResource = policy.adaptTo(Resource.class).getChild("links");
if (allowedLinksResource != null)
{
ValueMap vm = null;
for (Resource rs : allowedLinksResource.getChildren())
{
vm = new ValueMapDecorator(new HashMap<>());
// Specify the value and text values
String Value = rs.getValueMap().get("linkhref", String.class);
String Text = rs.getValueMap().get("linkname", String.class);
//populate the map
vm.put("value", Value);
vm.put("text", Text);
allowedHeadingElements.add(
new ValueMapResource(resolver, new ResourceMetadata(), "nt:unstructured", vm));
}
}
}
}
return allowedHeadingElements;
}
}