Author: bdelacretaz
Date: Tue Feb 3 15:28:48 2015
New Revision: 1656758
URL: http://svn.apache.org/r1656758
Log:
SLING-4386 - content-based Resource to Tenant mapping with tenant-specific
search paths
Added:
sling/whiteboard/bdelacretaz/multisling2015/ (with props)
sling/whiteboard/bdelacretaz/multisling2015/pom.xml
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/ (with props)
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/pom.xml
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/org/
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/org/apache/
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/org/apache/sling/
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/org/apache/sling/ms2015/
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/org/apache/sling/ms2015/tenantresolver/
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/org/apache/sling/ms2015/tenantresolver/impl/
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/org/apache/sling/ms2015/tenantresolver/impl/ContentBasedTenant.java
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/org/apache/sling/ms2015/tenantresolver/impl/ContentTenantAdapterFactory.java
sling/whiteboard/bdelacretaz/multisling2015/test-content/ (with props)
sling/whiteboard/bdelacretaz/multisling2015/test-content/pom.xml
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/apps/
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/apps/blog/
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/apps/blog/homepage.json
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/apps/blog/page/
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/apps/blog/page/page.esp
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/content/
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/content/T/
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/content/T/example.com.json
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/tenants/
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/tenants/example.com.json
Propchange: sling/whiteboard/bdelacretaz/multisling2015/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Tue Feb 3 15:28:48 2015
@@ -0,0 +1,13 @@
+target
+bin
+*.iml
+*.ipr
+*.iws
+.settings
+.project
+.classpath
+.externalToolBuilders
+maven-eclipse.xml
+
+
+
Added: sling/whiteboard/bdelacretaz/multisling2015/pom.xml
URL:
http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/multisling2015/pom.xml?rev=1656758&view=auto
==============================================================================
--- sling/whiteboard/bdelacretaz/multisling2015/pom.xml (added)
+++ sling/whiteboard/bdelacretaz/multisling2015/pom.xml Tue Feb 3 15:28:48 2015
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>sling</artifactId>
+ <version>22</version>
+ </parent>
+
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.ms2015.reactor</artifactId>
+ <version>0.1.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Apache Sling MultiSling 2015 prototype - Reactor</name>
+
+ <modules>
+ <module>tenant-resolver</module>
+ <module>test-content</module>
+ </modules>
+</project>
Propchange: sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Tue Feb 3 15:28:48 2015
@@ -0,0 +1,13 @@
+target
+bin
+*.iml
+*.ipr
+*.iws
+.settings
+.project
+.classpath
+.externalToolBuilders
+maven-eclipse.xml
+
+
+
Added: sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/pom.xml
URL:
http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/pom.xml?rev=1656758&view=auto
==============================================================================
--- sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/pom.xml (added)
+++ sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/pom.xml Tue Feb
3 15:28:48 2015
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>sling</artifactId>
+ <version>22</version>
+ </parent>
+
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.ms2015.tenantresolver</artifactId>
+ <version>0.1.1-SNAPSHOT</version>
+ <packaging>bundle</packaging>
+ <name>Apache Sling MultiSling 2015 prototype - Tenant resolver</name>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-scr-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+
<Private-Package>org.apache.sling.ms2015.*</Private-Package>
+
<Export-Package>org.apache.sling.tenant</Export-Package>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.scr.annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.tenant</artifactId>
+ <version>1.0.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.api</artifactId>
+ <version>2.8.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.commons.osgi</artifactId>
+ <version>2.1.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
Added:
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/org/apache/sling/ms2015/tenantresolver/impl/ContentBasedTenant.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/org/apache/sling/ms2015/tenantresolver/impl/ContentBasedTenant.java?rev=1656758&view=auto
==============================================================================
---
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/org/apache/sling/ms2015/tenantresolver/impl/ContentBasedTenant.java
(added)
+++
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/org/apache/sling/ms2015/tenantresolver/impl/ContentBasedTenant.java
Tue Feb 3 15:28:48 2015
@@ -0,0 +1,104 @@
+/*
+ * 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.ms2015.tenantresolver.impl;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.apache.sling.api.resource.Resource;
+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.tenant.Tenant;
+
+/** Adapt a Resource found under our content root to a Tenant, based
+ * on the content path.
+ */
+public class ContentBasedTenant implements Tenant {
+
+ private final String id;
+ private final ValueMap data;
+
+ // TODO should be configurable
+ public static final String TENANTS_ROOT_PATH = "/tenants";
+
+ public static final String SLING_TENANT = "sling:tenant";
+ public static final String SEARCH_PATH = "searchPath";
+
+ public static final String TENANT_PATH_PROP = "sling.tenant.path";
+ public static final String TENANT_SEARCH_PATH_PROP =
"sling.tenant.search.path";
+
+ ContentBasedTenant(String id, ResourceResolver tenantResourceResolver) {
+ this.id = id;
+ this.data = new ValueMapDecorator(new HashMap<String, Object>());
+
+ // Get this tenant's search path from under /tenants
+ // TODO should be cached
+ final String tenantPath = TENANTS_ROOT_PATH + "/" + id + "/" +
SLING_TENANT;
+ data.put(TENANT_PATH_PROP, tenantPath);
+ final Resource r = tenantResourceResolver.resolve(tenantPath);
+ if(r != null) {
+ final ValueMap props = r.adaptTo(ValueMap.class);
+ if(props != null) {
+ data.put(TENANT_SEARCH_PATH_PROP, props.get(SEARCH_PATH,
String[].class));
+ }
+ }
+ }
+
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append(getClass().getSimpleName());
+ sb.append(", id=").append(id);
+ sb.append(", path=").append(data.get(TENANT_PATH_PROP));
+ sb.append(", search path=");
+ final String [] sp = data.get(TENANT_SEARCH_PATH_PROP, String[].class);
+ for(int i=0; i < sp.length; i++) {
+ if(i > 0) {
+ sb.append(", ");
+ }
+ sb.append(sp[i]);
+ }
+ return sb.toString();
+ }
+
+ public String getDescription() {
+ return null;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getName() {
+ return null;
+ }
+
+ public <Type> Type getProperty(String key, Type t) {
+ return data.get(key, t);
+ }
+
+ public Object getProperty(String key) {
+ return data.get(key);
+ }
+
+ public Iterator<String> getPropertyNames() {
+ return data.keySet().iterator();
+ }
+}
Added:
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/org/apache/sling/ms2015/tenantresolver/impl/ContentTenantAdapterFactory.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/org/apache/sling/ms2015/tenantresolver/impl/ContentTenantAdapterFactory.java?rev=1656758&view=auto
==============================================================================
---
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/org/apache/sling/ms2015/tenantresolver/impl/ContentTenantAdapterFactory.java
(added)
+++
sling/whiteboard/bdelacretaz/multisling2015/tenant-resolver/src/main/java/org/apache/sling/ms2015/tenantresolver/impl/ContentTenantAdapterFactory.java
Tue Feb 3 15:28:48 2015
@@ -0,0 +1,113 @@
+/*
+ * 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.ms2015.tenantresolver.impl;
+
+import java.util.Map;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Properties;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.sling.api.adapter.AdapterFactory;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.apache.sling.tenant.Tenant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/** Adapt a Resource found under our content root to a Tenant, based
+ * on the content path.
+ */
+@Component
+@Service(value=AdapterFactory.class)
+@Properties({
+ @Property(name="adaptables",
+ value="org.apache.sling.api.resource.Resource",
+ propertyPrivate=true),
+ @Property(name="adapters",
+ value={"org.apache.sling.tenant.Tenant"},
+ propertyPrivate=true),
+ @Property(name="adapter.condition",
+ value="If the resource is inside our tenants content path under a
sling:siteRoot",
+ propertyPrivate=true)
+})
+public class ContentTenantAdapterFactory implements AdapterFactory {
+
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ public static final String TENANT_CLASS = Tenant.class.getName();
+ public static final String DEFAULT_CONTENT_ROOT_PATH = "/content/T";
+ public static final String TENANT_ID = "sling:tenantId";
+
+ @Property(value=DEFAULT_CONTENT_ROOT_PATH)
+ public static final String CONTENT_ROOT_PATH = "content.root.path";
+ private String contentRootPath;
+
+ @Activate
+ protected void activate(final Map<String, Object> properties) {
+ contentRootPath =
PropertiesUtil.toString(properties.get(CONTENT_ROOT_PATH),
DEFAULT_CONTENT_ROOT_PATH);
+ }
+
+ @SuppressWarnings("unchecked")
+ public <AdapterType> AdapterType getAdapter(Object adaptable,
Class<AdapterType> type) {
+ if(type == Tenant.class && adaptable instanceof Resource) {
+ return (AdapterType)getTenant((Resource)adaptable);
+ }
+ return null;
+ }
+
+ /** Return the Tenant that applies to r, null if not found */
+ private Tenant getTenant(Resource r) {
+ final String path = r.getPath();
+ Tenant result = null;
+ if(!path.startsWith(contentRootPath)) {
+ log.debug("Path {} does not start with {}, Resource ignored",
path, contentRootPath);
+ }
+
+ final String tenantPath = getTenantPath(r);
+ if(tenantPath != null) {
+ // TODO we might need a service user to access the tenant data
+ result = new ContentBasedTenant(tenantPath,
r.getResourceResolver());
+ }
+
+ log.info("{} -> Tenant {}", r, result);
+ return result;
+ }
+
+ /** Look for a sling:tenantId property in this resource
+ * or its ancestors.
+ */
+ private String getTenantPath(Resource r) {
+ String result = null;
+ while(r != null) {
+ final ValueMap m = r.adaptTo(ValueMap.class);
+ if(m != null && m.containsKey(TENANT_ID)) {
+ result = m.get(TENANT_ID, null);
+ if(result != null) {
+ log.debug("Found {}={} at {}", new Object[] { TENANT_ID,
result, r.getPath() } );
+ break;
+ }
+ }
+ r = r.getParent();
+ }
+ return result;
+ }
+}
\ No newline at end of file
Propchange: sling/whiteboard/bdelacretaz/multisling2015/test-content/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Tue Feb 3 15:28:48 2015
@@ -0,0 +1,13 @@
+target
+bin
+*.iml
+*.ipr
+*.iws
+.settings
+.project
+.classpath
+.externalToolBuilders
+maven-eclipse.xml
+
+
+
Added: sling/whiteboard/bdelacretaz/multisling2015/test-content/pom.xml
URL:
http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/multisling2015/test-content/pom.xml?rev=1656758&view=auto
==============================================================================
--- sling/whiteboard/bdelacretaz/multisling2015/test-content/pom.xml (added)
+++ sling/whiteboard/bdelacretaz/multisling2015/test-content/pom.xml Tue Feb 3
15:28:48 2015
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>sling</artifactId>
+ <version>22</version>
+ </parent>
+
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.ms2015.testcontent</artifactId>
+ <version>0.1.1-SNAPSHOT</version>
+ <packaging>bundle</packaging>
+ <name>Apache Sling MultiSling 2015 prototype - Test Content</name>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-scr-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+
<Private-Package>org.apache.sling.ms2015.*</Private-Package>
+
<Sling-Initial-Content>SLING-CONTENT;overwrite:=true</Sling-Initial-Content>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added:
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/apps/blog/homepage.json
URL:
http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/apps/blog/homepage.json?rev=1656758&view=auto
==============================================================================
---
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/apps/blog/homepage.json
(added)
+++
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/apps/blog/homepage.json
Tue Feb 3 15:28:48 2015
@@ -0,0 +1,4 @@
+{
+ "jcr:primaryType" : "nt:unstructured",
+ "sling:resourceSuperType" : "blog/page"
+}
\ No newline at end of file
Added:
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/apps/blog/page/page.esp
URL:
http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/apps/blog/page/page.esp?rev=1656758&view=auto
==============================================================================
---
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/apps/blog/page/page.esp
(added)
+++
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/apps/blog/page/page.esp
Tue Feb 3 15:28:48 2015
@@ -0,0 +1,16 @@
+<html>
+<%
+var t = resource.adaptTo(Packages.org.apache.sling.tenant.Tenant);
+%>
+<body>
+<p>
+This is the default /apps rendering for the blog/page resource type.
+</p>
+<p>
+The current Resource is <b><%= resource %></b>.
+</p>
+<p>
+The current Tenant is <b><%= t %></b>.
+</p>
+<body>
+</html>
\ No newline at end of file
Added:
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/content/T/example.com.json
URL:
http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/content/T/example.com.json?rev=1656758&view=auto
==============================================================================
---
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/content/T/example.com.json
(added)
+++
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/content/T/example.com.json
Tue Feb 3 15:28:48 2015
@@ -0,0 +1,18 @@
+{
+ "jcr:primaryType" : "nt:unstructured",
+ "jcr:title" : "Welcome to example.com",
+ "sling:resourceType" : "blog/homepage",
+ "sling:tenantId" : "example.com",
+ "about" : {
+ "jcr:title" : "About example.com",
+ "sling:resourceType" : "blog/page"
+ },
+ "subsite" : {
+ "sling:tenantId" : "example.com/subsite",
+ "somepage" : {
+ "sling:resourceType" : "blog/page",
+ "jcr:title" : "This is somepage from the example.com/subsite
tenant"
+ }
+ }
+
+}
Added:
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/tenants/example.com.json
URL:
http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/tenants/example.com.json?rev=1656758&view=auto
==============================================================================
---
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/tenants/example.com.json
(added)
+++
sling/whiteboard/bdelacretaz/multisling2015/test-content/src/main/resources/SLING-CONTENT/tenants/example.com.json
Tue Feb 3 15:28:48 2015
@@ -0,0 +1,17 @@
+{
+ "jcr:primaryType" : "nt:unstructured",
+ "sling:tenant" : {
+ "searchPath" : [
+ "/modules/blog/v42/scripts",
+ "/tenants/example.com/sling:tenant/scripts"
+ ]
+ },
+ "subsite" : {
+ "sling:tenant" : {
+ "searchPath" : [
+ "/modules/blog/v43/scripts",
+ "/tenants/example.com/subsite/sling:tenant/scripts"
+ ]
+ },
+ }
+}