package org.phms.sling.handlebars.helper.include;
import com.github.jknack.handlebars.Options;
import org.apache.commons.lang3.StringUtils;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.NonExistingResource;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.resource.SyntheticResource;
import org.phms.sling.handlebars.context.presenter.HandlebarsPresenterContextGenerator;
public class OptionsAdapter {
private Options options;
private Resource resource;
private String absolutePath;
public OptionsAdapter(Options options) {
this.options = options;
}
public String getAddSelectors() {
return (String) options.hash.get(IncludeHelper.ADD_SELECTORS);
}
public String getForceResourceType() {
return (String) options.hash.get(IncludeHelper.RESOURCE_TYPE);
}
public String getReplaceSelectors() {
return (String) options.hash.get(IncludeHelper.REPLACE_SELECTORS);
}
public String getReplaceSuffix() {
return (String) options.hash.get(IncludeHelper.REPLACE_SUFFIX);
}
public SlingHttpServletRequest getRequest() {
return options.get(HandlebarsPresenterContextGenerator.REQUEST_KEY);
}
public ResourceResolver getResolver() {
return options.get(HandlebarsPresenterContextGenerator.RESOLVER_KEY);
}
public String getResourceType() {
return getResource().getResourceType();
}
public SlingHttpServletResponse getResponse() {
return options.get(HandlebarsPresenterContextGenerator.RESPONSE_KEY);
}
public String getSelector() {
return (String) options.hash.get(IncludeHelper.SELECTOR);
}
public Resource getResource() {
if (resource == null) {
resource = getResolver().resolve(getAbsolutePath());
if (resource instanceof NonExistingResource) {
String resourceType = StringUtils.isNotBlank(getForceResourceType()) ? getForceResourceType()
: getRequest().getResource().getResourceType();
resource = new SyntheticResource(getResolver(), getAbsolutePath(), resourceType);
}
}
return resource;
}
public String getAbsolutePath() {
if (absolutePath == null) {
String path = (String) options.hash.get(IncludeHelper.PATH);
if ((path != null) && path.startsWith("/")) {
absolutePath = path;
} else {
absolutePath = getRequest().getResource().getPath();
if (StringUtils.isNotBlank(path)) {
absolutePath += "/" + path;
}
}
absolutePath = ResourceUtil.normalize(absolutePath);
}
return absolutePath;
}
}