![JAR search and dependency download from the Maven repository](/logo.png)
com.day.cq.personalization.SegmentsDataSourceServlet Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of aem-sdk-api Show documentation
Show all versions of aem-sdk-api Show documentation
The Adobe Experience Manager SDK
/*************************************************************************
*
* ADOBE CONFIDENTIAL
* __________________
*
* Copyright 2012 Adobe Systems Incorporated
* All Rights Reserved.
*
* NOTICE: All information contained herein is, and remains
* the property of Adobe Systems Incorporated and its suppliers,
* if any. The intellectual and technical concepts contained
* herein are proprietary to Adobe Systems Incorporated and its
* suppliers and are protected by trade secret or copyright law.
* Dissemination of this information or reproduction of this material
* is strictly forbidden unless prior written permission is obtained
* from Adobe Systems Incorporated.
**************************************************************************/
package com.day.cq.personalization;
import com.adobe.granite.ui.components.ds.DataSource;
import com.adobe.granite.ui.components.ds.SimpleDataSource;
import com.adobe.granite.ui.components.ds.ValueMapResource;
import com.day.cq.personalization.impl.util.PersonalizationConstants;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.AbstractResourceVisitor;
import org.apache.sling.api.resource.Resource;
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.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Comparator;
@Component(
service = { Servlet.class },
property = {
"sling.servlet.methods=GET",
"sling.servlet.resourceTypes=cq/personalization/touch-ui/datasource/segmentsdatasource"
}
)
public class SegmentsDataSourceServlet extends SlingSafeMethodsServlet {
private static final String SEGMENT_RESOURCE_TYPE = "cq/personalization/components/segmentpage";
private final Logger log = LoggerFactory.getLogger(this.getClass());
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException,
IOException {
List resourceList = new ArrayList();
ResourceResolver resolver = request.getResourceResolver();
Resource root = resolver.getResource(PersonalizationConstants.SEGMENTATION_PATH);
// descent down the campaigns path:
SegmentsRetriever visitor = new SegmentsRetriever();
visitor.accept(root);
Listsegments = visitor.getSegments();
Collections.sort(segments, new SegmentsComparator());
try {
for (JSONObject segment: segments) {
Map segmentEntry = new HashMap();
segmentEntry.put("value", segment.get("path"));
segmentEntry.put("text", segment.get("title"));
ValueMapResource vmRes = new ValueMapResource(resolver, new org.apache.sling.api.resource
.ResourceMetadata(), "", new ValueMapDecorator(segmentEntry));
resourceList.add(vmRes);
}
} catch (JSONException e) {
log.error(e.getMessage(), e);
}
request.setAttribute(DataSource.class.getName(), new SimpleDataSource(resourceList.iterator()));
}
class SegmentsRetriever extends AbstractResourceVisitor {
private List segments = new ArrayList();
@Override
protected void visit(Resource resource) {
if (SEGMENT_RESOURCE_TYPE.equals(resource.getResourceType())) {
Resource parentPage = resource.getParent();
ValueMap vm = resource.adaptTo(ValueMap.class);
JSONObject object = new JSONObject();
String title = vm.get("jcr:title", "") + (hasTargetTrait(resource) ?
" (from Adobe Target)" :
"");
try {
object.put("title", title);
object.put("name", parentPage.getName());
object.put("path", parentPage.getPath());
} catch (JSONException e) {
e.printStackTrace();
}
segments.add(object);
}
}
private boolean hasTargetTrait(Resource res) {
if ("cq/personalization/components/traits/tandt".equals(res.getResourceType())) {
return true;
} else {
for (Iterator resourceIterator = res.listChildren(); resourceIterator.hasNext(); ) {
Resource currentResource = resourceIterator.next();
return hasTargetTrait(currentResource);
}
return false;
}
}
public List getSegments() {
return segments;
}
}
class SegmentsComparator implements Comparator {
public int compare(JSONObject o1, JSONObject o2) {
if (!(o1.has("title") && o2.has("title"))) {
return -1;
}
try {
String o1Title = (String) o1.get("title");
String o2Title = (String) o2.get("title");
return o1Title.compareTo(o2Title);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return -1;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy