Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,5 @@ hs_err_pid*
.project
.classpath
.settings
*.idea
*.iml
27 changes: 0 additions & 27 deletions core/src/main/java/pl/enigmatic/aem/dialog/GetOptions.java

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package pl.enigmatic.aem.dialog.datasource;

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.google.common.collect.ImmutableMap;
import org.apache.sling.api.SlingHttpServletRequest;
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.wrappers.ValueMapDecorator;
import org.apache.sling.models.annotations.Model;
import org.apache.sling.models.annotations.Optional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
* Model used to set data source request attribute.
*/
@Model(adaptables = SlingHttpServletRequest.class)
public class DataSourceHandler {

private static final Logger LOGGER = LoggerFactory.getLogger(DataSourceHandler.class);

private final SlingHttpServletRequest request;

@Inject
private ResourceResolver resourceResolver;

@Inject
@Optional
private DataSourceOptionsProvider provider;

public DataSourceHandler(final SlingHttpServletRequest request) {
this.request = request;
}

@PostConstruct
protected void init() {
if (provider != null) {
setDataSource();
} else {
LOGGER.error("Failed to create data source without provider. Data source path: {}",
request.getResource().getPath());
}
}

private void setDataSource() {
Collection<Option> options = provider.getOptions();
List<Resource> resources = options.stream()
.map(this::toValueMap)
.map(this::toResource)
.collect(Collectors.toList());

DataSource dataSource = new SimpleDataSource(resources.iterator());
request.setAttribute(DataSource.class.getName(), dataSource);
}

private ValueMap toValueMap(Option dataSourceEntry) {
final Map<String, Object> dataSourceMap = ImmutableMap.<String, Object>builder()
.put("text", dataSourceEntry.getLabel())
.put("value", dataSourceEntry.getValue())
.build();
return new ValueMapDecorator(dataSourceMap);
}

private Resource toResource(ValueMap valueMap) {
return new ValueMapResource(resourceResolver, new ResourceMetadata(), "nt:unstructured", valueMap);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package pl.enigmatic.aem.dialog.datasource;

import java.util.Collection;

public interface DataSourceOptionsProvider {

Collection<Option> getOptions();
}
21 changes: 21 additions & 0 deletions core/src/main/java/pl/enigmatic/aem/dialog/datasource/Option.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package pl.enigmatic.aem.dialog.datasource;

public class Option {

private final String value;

private final String label;

public Option(final String value, final String label) {
this.value = value;
this.label = label;
}

public String getValue() {
return value;
}

public String getLabel() {
return label;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package pl.enigmatic.aem.dialog.datasource.providers;

import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.ResourceWrapper;

import org.apache.sling.models.annotations.Model;
import pl.enigmatic.aem.comps.global.GlobalLabelsDefinitions;
import pl.enigmatic.aem.comps.global.GlobalLabelsDefinitions.Label;
import pl.enigmatic.aem.dialog.datasource.Option;
import pl.enigmatic.aem.dialog.datasource.DataSourceOptionsProvider;

@Model(adaptables = SlingHttpServletRequest.class)
public class GlobalLabelsOptions extends ResourceWrapper implements DataSourceOptionsProvider {

public GlobalLabelsOptions(final SlingHttpServletRequest request) {
super(request.getRequestPathInfo().getSuffixResource());
}

@Override
public Collection<Option> getOptions() {
final GlobalLabelsDefinitions labels = GlobalLabelsDefinitions.create(this);
final List<Option> list = new LinkedList<>();
list.add(new Option(StringUtils.EMPTY, StringUtils.EMPTY));
for (final Map.Entry<String, Label> l : labels.entrySet()) {
final String key = l.getKey();
String label = l.getValue().getText();
list.add(new Option(key, label));
}
return list;
}
}
10 changes: 7 additions & 3 deletions core/src/main/java/pl/enigmatic/aem/tools/PageTools.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageManager;

import java.util.Optional;

/**
* Utility with common useful methods to process {@link Page}.
*
Expand All @@ -19,9 +21,11 @@ private PageTools() {
}

public static Page getContainingPage(final Resource resource) {
final ResourceResolver resourceResolver = resource.getResourceResolver();
final PageManager pageManager = resourceResolver.adaptTo(PageManager.class);
return pageManager.getContainingPage(resource);
return Optional.ofNullable(resource)
.map(r -> r.getResourceResolver())
.map(rr -> rr.adaptTo(PageManager.class))
.map(pageManager -> pageManager.getContainingPage(resource))
.orElse(null);
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<sly data-sly-use.dataSourceProvider="${properties['datasource/provider']}"/>
<sly data-sly-use="${'pl.enigmatic.aem.dialog.datasource.DataSourceHandler @ provider=dataSourceProvider}"/>

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,6 @@
name="./label">
<datasource jcr:primaryType="nt:unstructured"
sling:resourceType="enigmatic/dialog/datasource"
provider="pl.enigmatic.aem.dialog.GlobalLabelsOptions" />
provider="pl.enigmatic.aem.dialog.datasource.providers.GlobalLabelsOptions" />
</label>
</jcr:root>