com.day.cq.mcm.api.MCMPluginAdapter 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 2011 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.mcm.api;
import java.util.Collection;
import java.util.HashMap;
import org.apache.sling.api.resource.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.day.cq.mcm.util.NormalizedResource;
/**
* Helps when implementing {@link MCMPlugin}.
* Provides the root component functionality with a list of components manageable
* via {@link #addExperienceComponent(String, Factory)} and {@link #addTouchpointComponent(String, Factory)}.
* You can also add only one (Experience or touchpoint), or many.
*/
public abstract class MCMPluginAdapter implements MCMPlugin {
private final static Logger log = LoggerFactory.getLogger(MCMPluginAdapter.class);
public static interface Factory {
public T create(Resource r);
}
private HashMap> experienceFactoryMap = new HashMap>();
private HashMap> touchpointFactoryMap = new HashMap>();
public MCMPluginAdapter() {
super();
}
/**
* Returns the comptypes that were registered with {@link #addTouchpointComponent(String, Factory)}.
*/
public Collection getTouchpointRootComponents() {
return touchpointFactoryMap.keySet();
}
/**
* Returns the comptypes that were registered with {@link #addExperienceComponent(String, Factory)}.
*/
public Collection getExperienceRootComponents() {
return experienceFactoryMap.keySet();
}
/**
* Use this to add your types to the adapter.
* @param compType
* @param fac
*/
protected void addExperienceComponent(String compType, Factory fac) {
if (fac == null) {
throw new NullPointerException("Factory null");
}
experienceFactoryMap.put(compType, fac);
}
/**
* Use this to add your types to the adapter.
* @param compType
* @param fac
*/
protected void addTouchpointComponent(String compType, Factory fac) {
if (fac == null) {
throw new NullPointerException("Factory null");
}
touchpointFactoryMap.put(compType, fac);
}
public Experience makeExperience(Resource adaptable) {
Experience retval = null;
String compTypeToSearch = extractCompType(adaptable);
if (compTypeToSearch == null) {
throw new RuntimeException("Given resource doesn't have a resource type: "
+ adaptable.getPath());
}
if (experienceFactoryMap.containsKey(compTypeToSearch)) {
Factory fac = experienceFactoryMap.get(compTypeToSearch);
retval = fac.create(adaptable);
} else {
throw new RuntimeException("Unkown resourceType (misuse of the the class? We have: "
+ experienceFactoryMap.toString() + "): "
+ compTypeToSearch);
}
return retval;
}
public Touchpoint makeTouchpoint(Resource adaptable) {
if (adaptable == null) {
throw new NullPointerException("Null passed as Resource adaptable.");
}
Touchpoint retval = null;
String compTypeToSearch = extractCompType(adaptable);
if (compTypeToSearch == null) {
throw new RuntimeException("Given resource doesn't have a resource type: "
+ adaptable.getPath());
}
if (touchpointFactoryMap.containsKey(compTypeToSearch)) {
Factory fac = touchpointFactoryMap.get(compTypeToSearch);
retval = fac.create(adaptable);
} else {
throw new RuntimeException("Unkown resourceType (misuse of the the class? We have: "
+ touchpointFactoryMap.toString() + "): "
+ compTypeToSearch);
}
return retval;
}
private String extractCompType(Resource adaptable) {
NormalizedResource nr = new NormalizedResource();
nr.setResource(adaptable);
String retval = null;
if (nr.getContentVals() != null) {
retval = nr.getContentVals().get("sling:resourceType", String.class);
}
if (retval == null) {
log.warn("Cannot make an object because resource {} doesn't have content node or resourceType.", adaptable);
}
return retval;
}
@Override
public String toString() {
return super.toString() + "/id:" + getPluginId();
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy