Split document aggregator in its own module and rename things
diff --git a/remote-content-api/document-aggregator/README.md b/remote-content-api/document-aggregator/README.md
new file mode 100644
index 0000000..201e994
--- /dev/null
+++ b/remote-content-api/document-aggregator/README.md
@@ -0,0 +1,8 @@
+Apache Sling Document Aggregator
+----
+
+TODO: add badges
+
+TODO flesh this out
+
+For now, see the sibling sample-graphql-api module which uses this.
\ No newline at end of file
diff --git a/remote-content-api/document-aggregator/bnd.bnd b/remote-content-api/document-aggregator/bnd.bnd
new file mode 100644
index 0000000..d9d9b6a
--- /dev/null
+++ b/remote-content-api/document-aggregator/bnd.bnd
@@ -0,0 +1 @@
+# nothing needed here so far
\ No newline at end of file
diff --git a/remote-content-api/document-aggregator/pom.xml b/remote-content-api/document-aggregator/pom.xml
new file mode 100644
index 0000000..cad67f9
--- /dev/null
+++ b/remote-content-api/document-aggregator/pom.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>sling-bundle-parent</artifactId>
+ <version>38</version>
+ <relativePath />
+ </parent>
+
+ <artifactId>org.apache.sling.document.aggregator</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+
+ <name>Apache Sling Document Aggregator</name>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <http.port>8080</http.port>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>biz.aQute.bnd</groupId>
+ <artifactId>bnd-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>biz.aQute.bnd</groupId>
+ <artifactId>bnd-baseline-maven-plugin</artifactId>
+ <configuration>
+ <!-- TODO remove this once we have a release of this module -->
+ <failOnMissing>false</failOnMissing>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.component.annotations</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.api</artifactId>
+ <version>2.18.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.commons.johnzon</artifactId>
+ <version>1.2.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jetbrains</groupId>
+ <artifactId>annotations</artifactId>
+ <version>16.0.3</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/api/Annotations.java b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/api/Annotations.java
similarity index 98%
rename from remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/api/Annotations.java
rename to remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/api/Annotations.java
index 4f00c4f..564b641 100644
--- a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/api/Annotations.java
+++ b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/api/Annotations.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.sling.remotecontent.documentmapper.api;
+package org.apache.sling.documentaggregator.api;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/api/AnnotationsRegistry.java b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/api/AnnotationsRegistry.java
similarity index 93%
rename from remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/api/AnnotationsRegistry.java
rename to remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/api/AnnotationsRegistry.java
index 543411f..7c24196 100644
--- a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/api/AnnotationsRegistry.java
+++ b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/api/AnnotationsRegistry.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.sling.remotecontent.documentmapper.api;
+package org.apache.sling.documentaggregator.api;
import org.osgi.annotation.versioning.ProviderType;
diff --git a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/api/DocumentMapper.java b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/api/DocumentAggregator.java
similarity index 80%
rename from remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/api/DocumentMapper.java
rename to remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/api/DocumentAggregator.java
index 31435d0..e2441c2 100644
--- a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/api/DocumentMapper.java
+++ b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/api/DocumentAggregator.java
@@ -17,20 +17,18 @@
* under the License.
*/
-package org.apache.sling.remotecontent.documentmapper.api;
+package org.apache.sling.documentaggregator.api;
import org.apache.sling.api.resource.Resource;
import org.jetbrains.annotations.NotNull;
import org.osgi.annotation.versioning.ProviderType;
/**
- * Maps Sling {@link Resource} to a {@link MappingTarget.TargetNode}
+ * Maps Sling {@link Resource} to a {@link DocumentTree.DocumentNode}
*/
@ProviderType
-public interface DocumentMapper {
+public interface DocumentAggregator {
- String ROLE = "sling.document.mapper.role";
-
interface UrlBuilder {
String pathToUrl(String path);
}
@@ -44,5 +42,5 @@
}
}
- void map(@NotNull Resource r, @NotNull MappingTarget.TargetNode destination, Options opt);
+ void aggregate(@NotNull Resource r, @NotNull DocumentTree.DocumentNode destination, Options opt);
}
\ No newline at end of file
diff --git a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/api/MappingTarget.java b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/api/DocumentTree.java
similarity index 77%
rename from remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/api/MappingTarget.java
rename to remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/api/DocumentTree.java
index a774763..d8558e0 100644
--- a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/api/MappingTarget.java
+++ b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/api/DocumentTree.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.sling.remotecontent.documentmapper.api;
+package org.apache.sling.documentaggregator.api;
import org.apache.sling.api.adapter.Adaptable;
import org.jetbrains.annotations.NotNull;
@@ -28,15 +28,15 @@
* document tree, etc.
*/
@ProviderType
-public interface MappingTarget {
+public interface DocumentTree {
String TARGET_TYPE = "sling.mapping.target.type";
- interface TargetNode extends Adaptable {
- TargetNode addChild(String name);
- TargetNode addValue(String name, Object value);
- TargetNode addValue(String name, Object [] value);
+ interface DocumentNode extends Adaptable {
+ DocumentNode addChild(String name);
+ DocumentNode addValue(String name, Object value);
+ DocumentNode addValue(String name, Object [] value);
void close();
}
- @NotNull TargetNode newTargetNode();
+ @NotNull DocumentNode newTargetNode();
}
\ No newline at end of file
diff --git a/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/api/package-info.java b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/api/package-info.java
new file mode 100644
index 0000000..fdca395
--- /dev/null
+++ b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/api/package-info.java
@@ -0,0 +1,21 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+@Version("0.0.1")
+package org.apache.sling.documentaggregator.api;
+import org.osgi.annotation.versioning.Version;
diff --git a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/ContentDocumentMapper.java b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/DocumentAggregatorImpl.java
similarity index 81%
rename from remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/ContentDocumentMapper.java
rename to remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/DocumentAggregatorImpl.java
index 7561acc..6f0424b 100644
--- a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/ContentDocumentMapper.java
+++ b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/DocumentAggregatorImpl.java
@@ -17,22 +17,22 @@
* under the License.
*/
-package org.apache.sling.remotecontent.documentmapper.impl;
+package org.apache.sling.documentaggregator.impl;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;
-import org.apache.sling.remotecontent.documentmapper.api.Annotations;
-import org.apache.sling.remotecontent.documentmapper.api.AnnotationsRegistry;
-import org.apache.sling.remotecontent.documentmapper.api.DocumentMapper;
-import org.apache.sling.remotecontent.documentmapper.api.MappingTarget;
+import org.apache.sling.documentaggregator.api.Annotations;
+import org.apache.sling.documentaggregator.api.AnnotationsRegistry;
+import org.apache.sling.documentaggregator.api.DocumentAggregator;
+import org.apache.sling.documentaggregator.api.DocumentTree;
import org.jetbrains.annotations.NotNull;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@Component(service = DocumentMapper.class, property = { DocumentMapper.ROLE + "=content" })
-public class ContentDocumentMapper implements DocumentMapper {
+@Component(service = DocumentAggregator.class)
+public class DocumentAggregatorImpl implements DocumentAggregator {
private final PropertiesMapper propertiesMapper = new PropertiesMapper();
private final Logger log = LoggerFactory.getLogger(getClass());
@@ -41,7 +41,7 @@
private AnnotationsRegistry annotationsRegistry;
@Override
- public void map(@NotNull Resource originalResource, @NotNull MappingTarget.TargetNode dest, DocumentMapper.Options opt) {
+ public void aggregate(@NotNull Resource originalResource, @NotNull DocumentTree.DocumentNode dest, DocumentAggregator.Options opt) {
Annotations annot = annotationsRegistry.getAnnotations(originalResource.getResourceType());
dest.addValue("path", originalResource.getPath());
final String substPath = annot.childSubstitutePath();
@@ -57,11 +57,11 @@
mapResource(r, dest, opt, r.getResourceType(), annot, annot.isDocumentRoot());
}
- private void mapResource(@NotNull Resource r, @NotNull MappingTarget.TargetNode dest,
- DocumentMapper.Options opt, String documentResourceType, Annotations documentAnnot, boolean recurse) {
+ private void mapResource(@NotNull Resource r, @NotNull DocumentTree.DocumentNode dest,
+ DocumentAggregator.Options opt, String documentResourceType, Annotations documentAnnot, boolean recurse) {
final Annotations resourceAnnot = annotationsRegistry.getAnnotations(r.getResourceType());
- final MappingTarget.TargetNode debug = opt.debug ? dest.addChild("sling:dmap:debug") : null;
+ final DocumentTree.DocumentNode debug = opt.debug ? dest.addChild("sling:dmap:debug") : null;
if(debug != null) {
debug.addValue("sling:dmap:path", r.getPath());
debug.addValue("sling:dmap:resourceType", r.getResourceType());
@@ -91,7 +91,7 @@
if(derefPath != null) {
final Resource dereferenced = r.getResourceResolver().getResource(derefPath);
if(dereferenced != null) {
- final MappingTarget.TargetNode derefNode = dest.addChild("sling:dmap:resolved");
+ final DocumentTree.DocumentNode derefNode = dest.addChild("sling:dmap:resolved");
derefNode.addValue("sling:dmap:resolvedFrom", derefPathPropertyName);
derefNode.addValue("sling:dmap:resolvePath", derefPath);
mapResource(dereferenced, derefNode, opt, documentResourceType, documentAnnot, recurse);
@@ -112,7 +112,7 @@
}
final String childResourceType = child.getResourceType();
if(annotationsRegistry.getAnnotations(childResourceType).visitContent()) {
- final MappingTarget.TargetNode childDest = dest.addChild(child.getName());
+ final DocumentTree.DocumentNode childDest = dest.addChild(child.getName());
mapResource(child, childDest, opt, childResourceType, documentAnnot, true);
}
}
diff --git a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/JsonMappingTarget.java b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/JsonMappingTarget.java
similarity index 76%
rename from remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/JsonMappingTarget.java
rename to remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/JsonMappingTarget.java
index 575638f..0f96063 100644
--- a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/JsonMappingTarget.java
+++ b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/JsonMappingTarget.java
@@ -17,19 +17,19 @@
* under the License.
*/
-package org.apache.sling.remotecontent.documentmapper.impl;
+package org.apache.sling.documentaggregator.impl;
-import org.apache.sling.remotecontent.documentmapper.api.MappingTarget;
+import org.apache.sling.documentaggregator.api.DocumentTree;
import org.jetbrains.annotations.NotNull;
import org.osgi.service.component.annotations.Component;
/** MappingTarget that outputs to a JSON document */
-@Component(service = MappingTarget.class, property = { MappingTarget.TARGET_TYPE + "=json" })
-public class JsonMappingTarget implements MappingTarget {
+@Component(service = DocumentTree.class, property = { DocumentTree.TARGET_TYPE + "=json" })
+public class JsonMappingTarget implements DocumentTree {
@Override
- public @NotNull TargetNode newTargetNode() {
+ public @NotNull DocumentNode newTargetNode() {
return new JsonTargetNode("ROOT_THIS_NAME_SHOULD_NOT_APPEAR_IN_OUTPUT");
}
}
\ No newline at end of file
diff --git a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/JsonTargetNode.java b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/JsonTargetNode.java
similarity index 82%
rename from remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/JsonTargetNode.java
rename to remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/JsonTargetNode.java
index 77f98c1..9cb7dce 100644
--- a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/JsonTargetNode.java
+++ b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/JsonTargetNode.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.sling.remotecontent.documentmapper.impl;
+package org.apache.sling.documentaggregator.impl;
import java.util.ArrayList;
import java.util.Arrays;
@@ -26,11 +26,11 @@
import javax.json.Json;
import javax.json.JsonObjectBuilder;
-import org.apache.sling.remotecontent.documentmapper.api.MappingTarget;
-import org.apache.sling.remotecontent.documentmapper.api.MappingTarget.TargetNode;
+import org.apache.sling.documentaggregator.api.DocumentTree;
+import org.apache.sling.documentaggregator.api.DocumentTree.DocumentNode;
/** A TargetNode that outputs to a JSON document */
-public class JsonTargetNode implements MappingTarget.TargetNode {
+public class JsonTargetNode implements DocumentTree.DocumentNode {
private final String name;
private final JsonObjectBuilder builder;
@@ -42,7 +42,7 @@
}
@Override
- public TargetNode addChild(String name) {
+ public DocumentNode addChild(String name) {
if(children == null) {
children = new ArrayList<>();
}
@@ -52,13 +52,13 @@
}
@Override
- public TargetNode addValue(String name, Object value) {
+ public DocumentNode addValue(String name, Object value) {
builder.add(name, String.valueOf(value));
return this;
}
@Override
- public TargetNode addValue(String name, Object[] value) {
+ public DocumentNode addValue(String name, Object[] value) {
builder.add(name, String.valueOf(Arrays.asList(value)));
return this;
}
diff --git a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/MapMappingTarget.java b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/MapMappingTarget.java
similarity index 76%
rename from remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/MapMappingTarget.java
rename to remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/MapMappingTarget.java
index 10718fb..5aaf833 100644
--- a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/MapMappingTarget.java
+++ b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/MapMappingTarget.java
@@ -17,19 +17,19 @@
* under the License.
*/
-package org.apache.sling.remotecontent.documentmapper.impl;
+package org.apache.sling.documentaggregator.impl;
-import org.apache.sling.remotecontent.documentmapper.api.MappingTarget;
+import org.apache.sling.documentaggregator.api.DocumentTree;
import org.jetbrains.annotations.NotNull;
import org.osgi.service.component.annotations.Component;
/** MappingTarget that outputs to a JSON document */
-@Component(service = MappingTarget.class, property = { MappingTarget.TARGET_TYPE + "=map" })
-public class MapMappingTarget implements MappingTarget {
+@Component(service = DocumentTree.class, property = { DocumentTree.TARGET_TYPE + "=map" })
+public class MapMappingTarget implements DocumentTree {
@Override
- public @NotNull TargetNode newTargetNode() {
+ public @NotNull DocumentNode newTargetNode() {
return new MapTargetNode("ROOT_THIS_NAME_SHOULD_NOT_APPEAR_IN_OUTPUT");
}
}
\ No newline at end of file
diff --git a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/MapTargetNode.java b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/MapTargetNode.java
similarity index 79%
rename from remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/MapTargetNode.java
rename to remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/MapTargetNode.java
index c12f7f7..722d2ad 100644
--- a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/MapTargetNode.java
+++ b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/MapTargetNode.java
@@ -17,35 +17,35 @@
* under the License.
*/
-package org.apache.sling.remotecontent.documentmapper.impl;
+package org.apache.sling.documentaggregator.impl;
import java.util.HashMap;
import java.util.Map;
-import org.apache.sling.remotecontent.documentmapper.api.MappingTarget;
-import org.apache.sling.remotecontent.documentmapper.api.MappingTarget.TargetNode;
+import org.apache.sling.documentaggregator.api.DocumentTree;
+import org.apache.sling.documentaggregator.api.DocumentTree.DocumentNode;
/** A TargetNode that outputs to a Map document */
-public class MapTargetNode extends HashMap<String, Object> implements MappingTarget.TargetNode {
+public class MapTargetNode extends HashMap<String, Object> implements DocumentTree.DocumentNode {
MapTargetNode(String name) {
}
@Override
- public TargetNode addChild(String name) {
+ public DocumentNode addChild(String name) {
final MapTargetNode child = new MapTargetNode(name);
put(name, child);
return child;
}
@Override
- public TargetNode addValue(String name, Object value) {
+ public DocumentNode addValue(String name, Object value) {
put(name, value);
return this;
}
@Override
- public TargetNode addValue(String name, Object[] value) {
+ public DocumentNode addValue(String name, Object[] value) {
put(name, value);
return this;
}
diff --git a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/PropertiesMapper.java b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/PropertiesMapper.java
similarity index 85%
rename from remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/PropertiesMapper.java
rename to remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/PropertiesMapper.java
index 825c238..ac273cb 100644
--- a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/PropertiesMapper.java
+++ b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/PropertiesMapper.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.sling.remotecontent.documentmapper.impl;
+package org.apache.sling.documentaggregator.impl;
import java.util.Arrays;
import java.util.Calendar;
@@ -25,11 +25,11 @@
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;
-import org.apache.sling.remotecontent.documentmapper.api.Annotations;
-import org.apache.sling.remotecontent.documentmapper.api.MappingTarget;
+import org.apache.sling.documentaggregator.api.Annotations;
+import org.apache.sling.documentaggregator.api.DocumentTree;
class PropertiesMapper {
- void mapProperties(MappingTarget.TargetNode dest, Resource r, Annotations annot) {
+ void mapProperties(DocumentTree.DocumentNode dest, Resource r, Annotations annot) {
final ValueMap vm = r.adaptTo(ValueMap.class);
if(vm != null) {
for(Map.Entry<String, Object> e : vm.entrySet()) {
diff --git a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/PropertiesSelector.java b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/PropertiesSelector.java
similarity index 93%
rename from remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/PropertiesSelector.java
rename to remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/PropertiesSelector.java
index e303d2b..187a62c 100644
--- a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/documentmapper/impl/PropertiesSelector.java
+++ b/remote-content-api/document-aggregator/src/main/java/org/apache/sling/documentaggregator/impl/PropertiesSelector.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.sling.remotecontent.documentmapper.impl;
+package org.apache.sling.documentaggregator.impl;
interface PropertiesSelector {
boolean renderProperty(String name);
diff --git a/remote-content-api/pom.xml b/remote-content-api/pom.xml
index a1ff8dc..eb2b88e 100644
--- a/remote-content-api/pom.xml
+++ b/remote-content-api/pom.xml
@@ -36,6 +36,7 @@
<modules>
<module>sample-graphql-api</module>
+ <module>document-aggregator</module>
</modules>
<build>
diff --git a/remote-content-api/sample-graphql-api/README.md b/remote-content-api/sample-graphql-api/README.md
index 3454984..f1f2a4f 100644
--- a/remote-content-api/sample-graphql-api/README.md
+++ b/remote-content-api/sample-graphql-api/README.md
@@ -1,10 +1,11 @@
# Apache Sling Document-Oriented Content API - Sample GraphQL API
-To start this use
+To start this, build the sibling modules with `mvn clean install` in the parent folder
+of this one and then, in this folder, run
mvn clean install exec:java
-In this folder, and open http://localhost:8080 - which might require logging in
+Then open http://localhost:8080 - which might require logging in
at http://localhost:8080/system/console first.
This should redirect you to the main GraphQL endpoint, currently
diff --git a/remote-content-api/sample-graphql-api/pom.xml b/remote-content-api/sample-graphql-api/pom.xml
index 505163c..25afa71 100644
--- a/remote-content-api/sample-graphql-api/pom.xml
+++ b/remote-content-api/sample-graphql-api/pom.xml
@@ -133,14 +133,14 @@
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.commons.johnzon</artifactId>
- <version>1.2.2</version>
+ <artifactId>org.apache.sling.repoinit.parser</artifactId>
+ <version>1.6.8</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.repoinit.parser</artifactId>
- <version>1.6.8</version>
+ <artifactId>org.apache.sling.document.aggregator</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
diff --git a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/samples/graphql/DocumentDataFetcher.java b/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/samples/graphql/DocumentDataFetcher.java
index 1472361..48e6d1c 100644
--- a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/samples/graphql/DocumentDataFetcher.java
+++ b/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/samples/graphql/DocumentDataFetcher.java
@@ -23,11 +23,10 @@
import java.util.Map;
import org.apache.sling.api.resource.Resource;
+import org.apache.sling.documentaggregator.api.DocumentAggregator;
+import org.apache.sling.documentaggregator.api.DocumentTree;
import org.apache.sling.graphql.api.SlingDataFetcher;
import org.apache.sling.graphql.api.SlingDataFetcherEnvironment;
-import org.apache.sling.remotecontent.documentmapper.api.DocumentMapper;
-import org.apache.sling.remotecontent.documentmapper.api.DocumentMapper.UrlBuilder;
-import org.apache.sling.remotecontent.documentmapper.api.MappingTarget;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.osgi.service.component.annotations.Component;
@@ -36,11 +35,11 @@
@Component(service = SlingDataFetcher.class, property = {"name=samples/document"})
public class DocumentDataFetcher implements SlingDataFetcher<Object> {
- @Reference(target="(" + MappingTarget.TARGET_TYPE + "=map)")
- private MappingTarget mappingTarget;
+ @Reference(target="(" + DocumentTree.TARGET_TYPE + "=map)")
+ private DocumentTree mappingTarget;
@Reference
- private DocumentMapper documentMapper;
+ private DocumentAggregator documentAggregator;
@Override
public @Nullable Object get(@NotNull SlingDataFetcherEnvironment e) throws Exception {
@@ -49,14 +48,14 @@
final Map<String, Object> data = new HashMap<>();
data.put("path", path);
data.put("selectors", e.getArgument("selectors"));
- final DocumentMapper.Options opt = new DocumentMapper.Options(e.getArgument("debug", false), new UrlBuilderStub());
+ final DocumentAggregator.Options opt = new DocumentAggregator.Options(e.getArgument("debug", false), new UrlBuilderStub());
// Get the target Resource
final Resource target = e.getCurrentResource().getResourceResolver().getResource(path);
- // Use DocumentMapper to build the body
- final MappingTarget.TargetNode body = mappingTarget.newTargetNode();
- documentMapper.map(target, body, opt);
+ // Use the aggregator to build the body
+ final DocumentTree.DocumentNode body = mappingTarget.newTargetNode();
+ documentAggregator.aggregate(target, body, opt);
body.close();
data.put("body", body.adaptTo(Map.class));
return data;
diff --git a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/samples/graphql/DocumentsDataFetcher.java b/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/samples/graphql/DocumentsDataFetcher.java
index a56843f..22a10cd 100644
--- a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/samples/graphql/DocumentsDataFetcher.java
+++ b/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/samples/graphql/DocumentsDataFetcher.java
@@ -27,10 +27,10 @@
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.documentaggregator.api.DocumentAggregator;
+import org.apache.sling.documentaggregator.api.DocumentTree;
import org.apache.sling.graphql.api.SlingDataFetcher;
import org.apache.sling.graphql.api.SlingDataFetcherEnvironment;
-import org.apache.sling.remotecontent.documentmapper.api.DocumentMapper;
-import org.apache.sling.remotecontent.documentmapper.api.MappingTarget;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.osgi.service.component.annotations.Component;
@@ -39,27 +39,27 @@
@Component(service = SlingDataFetcher.class, property = {"name=samples/documents"})
public class DocumentsDataFetcher implements SlingDataFetcher<Object> {
- @Reference(target="(" + MappingTarget.TARGET_TYPE + "=map)")
- private MappingTarget mappingTarget;
+ @Reference(target="(" + DocumentTree.TARGET_TYPE + "=map)")
+ private DocumentTree mappingTarget;
@Reference
- private DocumentMapper documentMapper;
+ private DocumentAggregator documentAggregator;
- private void addDocumentData(final Map<String, Object> data, String key, Resource r, DocumentMapper mapper, DocumentMapper.Options opt) {
- final MappingTarget.TargetNode target = mappingTarget.newTargetNode();
- mapper.map(r, target, opt);
+ private void addDocumentData(final Map<String, Object> data, String key, Resource r, DocumentAggregator aggregator, DocumentAggregator.Options opt) {
+ final DocumentTree.DocumentNode target = mappingTarget.newTargetNode();
+ aggregator.aggregate(r, target, opt);
target.close();
data.put(key, target.adaptTo(Map.class));
}
- private Map<String, Object> toDocument(Resource r, DocumentMapper.Options opt) {
+ private Map<String, Object> toDocument(Resource r, DocumentAggregator.Options opt) {
final Map<String, Object> data = new HashMap<>();
data.put("path", r.getPath());
// TODO for now those are the same...
- addDocumentData(data, "body", r, documentMapper, opt);
- addDocumentData(data, "summary", r, documentMapper, opt);
+ addDocumentData(data, "body", r, documentAggregator, opt);
+ addDocumentData(data, "summary", r, documentAggregator, opt);
return data;
}
@@ -69,7 +69,7 @@
// Use a suffix as we might not keep these built-in language in the long term
final String langSuffix = "2020";
- final DocumentMapper.Options opt = new DocumentMapper.Options(e.getArgument("debug", false), new UrlBuilderStub());
+ final DocumentAggregator.Options opt = new DocumentAggregator.Options(e.getArgument("debug", false), new UrlBuilderStub());
String lang = e.getArgument("lang", "xpath" + langSuffix);
if(!lang.endsWith(langSuffix)) {
diff --git a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/samples/graphql/UrlBuilderStub.java b/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/samples/graphql/UrlBuilderStub.java
index b5a161a..f1a534d 100644
--- a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/samples/graphql/UrlBuilderStub.java
+++ b/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/samples/graphql/UrlBuilderStub.java
@@ -19,7 +19,7 @@
package org.apache.sling.remotecontent.samples.graphql;
-import org.apache.sling.remotecontent.documentmapper.api.DocumentMapper.UrlBuilder;
+import org.apache.sling.documentaggregator.api.DocumentAggregator.UrlBuilder;
class UrlBuilderStub implements UrlBuilder {
@Override
diff --git a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/samples/graphql/annotations/AnnotationsRegistryImpl.java b/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/samples/graphql/annotations/AnnotationsRegistryImpl.java
index 4915be7..d220f3e 100644
--- a/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/samples/graphql/annotations/AnnotationsRegistryImpl.java
+++ b/remote-content-api/sample-graphql-api/src/main/java/org/apache/sling/remotecontent/samples/graphql/annotations/AnnotationsRegistryImpl.java
@@ -22,8 +22,8 @@
import java.util.HashMap;
import java.util.Map;
-import org.apache.sling.remotecontent.documentmapper.api.Annotations;
-import org.apache.sling.remotecontent.documentmapper.api.AnnotationsRegistry;
+import org.apache.sling.documentaggregator.api.Annotations;
+import org.apache.sling.documentaggregator.api.AnnotationsRegistry;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
diff --git a/remote-content-api/sample-graphql-api/src/main/resources/features/feature-sample-graphql-api.json b/remote-content-api/sample-graphql-api/src/main/resources/features/feature-sample-graphql-api.json
index 3a3b62c..5968071 100644
--- a/remote-content-api/sample-graphql-api/src/main/resources/features/feature-sample-graphql-api.json
+++ b/remote-content-api/sample-graphql-api/src/main/resources/features/feature-sample-graphql-api.json
@@ -7,6 +7,7 @@
"variables":{},
"bundles":[
"org.apache.sling:org.apache.sling.experimental.remotecontent.sample.graphql.api:0.0.1-SNAPSHOT",
+ "org.apache.sling:org.apache.sling.document.aggregator:0.0.1-SNAPSHOT",
"org.apache.sling:org.apache.sling.servlet-helpers:1.4.2",
"org.apache.sling:org.apache.sling.graphql.core:0.0.8",
"com.graphql-java:graphql-java:jar:15.0",