You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ju...@apache.org on 2017/03/17 13:56:20 UTC
svn commit: r1787388 - in /sling/trunk/bundles/extensions/models:
impl/src/main/java/org/apache/sling/models/impl/ integration-tests/
integration-tests/src/main/java/org/apache/sling/models/it/exporter/
Author: justin
Date: Fri Mar 17 13:56:20 2017
New Revision: 1787388
URL: http://svn.apache.org/viewvc?rev=1787388&view=rev
Log:
SLING-6652 - allow for multiple classes to export the same resourceType
This closes #207
Added:
sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/DoubledFirstComponent.java
sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/DoubledSecondComponent.java
Modified:
sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ExportServlet.java
sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ModelPackageBundleListener.java
sling/trunk/bundles/extensions/models/integration-tests/pom.xml
sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/ExporterTest.java
Modified: sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ExportServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ExportServlet.java?rev=1787388&r1=1787387&r2=1787388&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ExportServlet.java (original)
+++ sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ExportServlet.java Fri Mar 17 13:56:20 2017
@@ -182,17 +182,33 @@ class ExportServlet extends SlingSafeMet
String getExportedString(SlingHttpServletRequest request, Map<String, String> options, ModelFactory modelFactory, String exporterName) throws ExportException, MissingExporterException;
}
- public static final ExportedObjectAccessor RESOURCE_ACCESSOR = new ExportedObjectAccessor() {
+ public static final class ResourceAccessor implements ExportedObjectAccessor {
+
+ private final Class<?> adapterClass;
+
+ public ResourceAccessor(Class<?> adapterClass) {
+ this.adapterClass = adapterClass;
+ }
+
@Override
public String getExportedString(SlingHttpServletRequest request, Map<String, String> options, ModelFactory modelFactory, String exporterName) throws ExportException, MissingExporterException {
- return modelFactory.exportModelForResource(request.getResource(), exporterName, String.class, options);
+ Object adapter = modelFactory.createModel(request.getResource(), adapterClass);
+ return modelFactory.exportModel(adapter, exporterName, String.class, options);
+ }
+ }
+
+ public static final class RequestAccessor implements ExportedObjectAccessor {
+
+ private final Class<?> adapterClass;
+
+ public RequestAccessor(Class<?> adapterClass) {
+ this.adapterClass = adapterClass;
}
- };
- public static final ExportedObjectAccessor REQUEST_ACCESSOR = new ExportedObjectAccessor() {
@Override
public String getExportedString(SlingHttpServletRequest request, Map<String, String> options, ModelFactory modelFactory, String exporterName) throws ExportException, MissingExporterException {
- return modelFactory.exportModelForRequest(request, exporterName, String.class, options);
+ Object adapter = modelFactory.createModel(request, adapterClass);
+ return modelFactory.exportModel(adapter, exporterName, String.class, options);
}
};
Modified: sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ModelPackageBundleListener.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ModelPackageBundleListener.java?rev=1787388&r1=1787387&r2=1787388&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ModelPackageBundleListener.java (original)
+++ sling/trunk/bundles/extensions/models/impl/src/main/java/org/apache/sling/models/impl/ModelPackageBundleListener.java Fri Mar 17 13:56:20 2017
@@ -162,9 +162,9 @@ public class ModelPackageBundleListener
adapterImplementations.registerModelToResourceType(bundle, resourceType, adaptable, implType);
ExportServlet.ExportedObjectAccessor accessor = null;
if (adaptable == Resource.class) {
- accessor = ExportServlet.RESOURCE_ACCESSOR;
+ accessor = new ExportServlet.ResourceAccessor(implType);
} else if (adaptable == SlingHttpServletRequest.class) {
- accessor = ExportServlet.REQUEST_ACCESSOR;
+ accessor = new ExportServlet.RequestAccessor(implType);
}
Exporter exporterAnnotation = implType.getAnnotation(Exporter.class);
if (exporterAnnotation != null) {
Modified: sling/trunk/bundles/extensions/models/integration-tests/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/integration-tests/pom.xml?rev=1787388&r1=1787387&r2=1787388&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/models/integration-tests/pom.xml (original)
+++ sling/trunk/bundles/extensions/models/integration-tests/pom.xml Fri Mar 17 13:56:20 2017
@@ -124,7 +124,9 @@
org.apache.sling.models.it.exporter.ExtendedComponent,
org.apache.sling.models.it.exporter.BaseRequestComponent,
org.apache.sling.models.it.exporter.RequestComponentImpl,
- org.apache.sling.models.it.exporter.ExtendedRequestComponent
+ org.apache.sling.models.it.exporter.ExtendedRequestComponent,
+ org.apache.sling.models.it.exporter.DoubledFirstComponent,
+ org.apache.sling.models.it.exporter.DoubledSecondComponent
</Sling-Model-Classes>
<Sling-Test-Regexp>.*Test</Sling-Test-Regexp>
<Export-Package>org.apache.sling.models.it</Export-Package>
Added: sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/DoubledFirstComponent.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/DoubledFirstComponent.java?rev=1787388&view=auto
==============================================================================
--- sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/DoubledFirstComponent.java (added)
+++ sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/DoubledFirstComponent.java Fri Mar 17 13:56:20 2017
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ */
+package org.apache.sling.models.it.exporter;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.models.annotations.Exporter;
+import org.apache.sling.models.annotations.Model;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+@Model(adaptables = { Resource.class }, resourceType = "sling/exp/doubled")
+@Exporter(name = "jackson", extensions = "json", selector = "firstmodel")
+public class DoubledFirstComponent {
+
+ public String getValue() {
+ return "first";
+ }
+}
Added: sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/DoubledSecondComponent.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/DoubledSecondComponent.java?rev=1787388&view=auto
==============================================================================
--- sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/DoubledSecondComponent.java (added)
+++ sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/DoubledSecondComponent.java Fri Mar 17 13:56:20 2017
@@ -0,0 +1,30 @@
+/*
+ * 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.
+ */
+package org.apache.sling.models.it.exporter;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.models.annotations.Exporter;
+import org.apache.sling.models.annotations.Model;
+
+@Model(adaptables = { Resource.class }, resourceType = "sling/exp/doubled")
+@Exporter(name = "jackson", extensions = "json", selector = "secondmodel")
+public class DoubledSecondComponent {
+
+ public String getValue() {
+ return "second";
+ }
+}
Modified: sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/ExporterTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/ExporterTest.java?rev=1787388&r1=1787387&r2=1787388&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/ExporterTest.java (original)
+++ sling/trunk/bundles/extensions/models/integration-tests/src/main/java/org/apache/sling/models/it/exporter/ExporterTest.java Fri Mar 17 13:56:20 2017
@@ -56,6 +56,7 @@ public class ExporterTest {
private SlingRequestProcessor slingRequestProcessor;
private final String baseComponentPath = "/content/exp/baseComponent";
+ private final String doubledComponentPath = "/content/exp/doubledComponent";
private final String childComponentPath = "/content/exp/childComponent";
private final String extendedComponentPath = "/content/exp/extendedComponent";
private final String interfaceComponentPath = "/content/exp/interfaceComponent";
@@ -125,6 +126,11 @@ public class ExporterTest {
ResourceUtil.getOrCreateResource(adminResolver, interfaceRequestComponentPath, properties, null, false);
properties.clear();
+ properties.put(SlingConstants.NAMESPACE_PREFIX + ":" + SlingConstants.PROPERTY_RESOURCE_TYPE,
+ "sling/exp/doubled");
+ ResourceUtil.getOrCreateResource(adminResolver, doubledComponentPath, properties, null, false);
+
+
adminResolver.commit();
} finally {
if (adminResolver != null && adminResolver.isLive()) {
@@ -284,6 +290,30 @@ public class ExporterTest {
} finally {
if (resolver != null && resolver.isLive()) {
resolver.close();
+ }
+ }
+ }
+
+ @Test
+ public void testDoubledServlets() throws Exception {
+ ResourceResolver resolver = null;
+ try {
+ resolver = rrFactory.getAdministrativeResourceResolver(null);
+ FakeResponse response = new FakeResponse();
+ slingRequestProcessor.processRequest(new FakeRequest(doubledComponentPath + ".firstmodel.json"), response, resolver);
+
+ JSONObject obj = new JSONObject(response.getStringWriter().toString());
+ Assert.assertEquals("application/json", response.getContentType());
+ Assert.assertEquals("first", obj.getString("value"));
+
+ response = new FakeResponse();
+ slingRequestProcessor.processRequest(new FakeRequest(doubledComponentPath + ".secondmodel.json"), response, resolver);
+ obj = new JSONObject(response.getStringWriter().toString());
+ Assert.assertEquals("application/json", response.getContentType());
+ Assert.assertEquals("second", obj.getString("value"));
+ } finally {
+ if (resolver != null && resolver.isLive()) {
+ resolver.close();
}
}
}