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"
+            ]
+        },
+    }
+}


Reply via email to