wip
diff --git a/build-snaps/.ant-targets-build.xml b/build-snaps/.ant-targets-build.xml index 916f1ed..8a82e3b 100644 --- a/build-snaps/.ant-targets-build.xml +++ b/build-snaps/.ant-targets-build.xml
@@ -13,7 +13,6 @@ osgi-validate p2.extract-publisher package-multi-bundle.package -publish publish-ivy publish-maven quality-multi-bundle.test
diff --git a/org.eclipse.virgo.snaps.core/.classpath b/org.eclipse.virgo.snaps.core/.classpath index 1cd9a52..276f058 100644 --- a/org.eclipse.virgo.snaps.core/.classpath +++ b/org.eclipse.virgo.snaps.core/.classpath
@@ -36,7 +36,7 @@ <classpathentry kind="var" path="SNAPS_IVY_CACHE/org.eclipse.gemini.web/org.eclipse.gemini.web.tomcat/2.1.0.BUILD-20110928081203/org.eclipse.gemini.web.tomcat-2.1.0.BUILD-20110928081203.jar" sourcepath="/SNAPS_IVY_CACHE/org.eclipse.gemini.web/org.eclipse.gemini.web.tomcat/2.1.0.BUILD-20110928081203/org.eclipse.gemini.web.tomcat-sources-2.1.0.BUILD-20110928081203.jar"/> <classpathentry kind="var" path="SNAPS_IVY_CACHE/org.eclipse.virgo.util/org.eclipse.virgo.util.common/3.1.0.D-20110927204747/org.eclipse.virgo.util.common-3.1.0.D-20110927204747.jar"/> <classpathentry kind="var" path="SNAPS_IVY_CACHE/org.springframework/org.springframework.core/3.0.5.RELEASE/org.springframework.core-3.0.5.RELEASE.jar" sourcepath="/SNAPS_IVY_CACHE/org.springframework/org.springframework.core/3.0.5.RELEASE/org.springframework.core-sources-3.0.5.RELEASE.jar"/> - <classpathentry kind="var" path="SNAPS_IVY_CACHE/org.apache.catalina/com.springsource.org.apache.catalina/7.0.12/com.springsource.org.apache.catalina-7.0.12.jar" sourcepath="/SNAPS_IVY_CACHE/org.apache.catalina/com.springsource.org.apache.catalina/7.0.12/com.springsource.org.apache.catalina-sources-7.0.12.jar"/> + <classpathentry kind="var" path="SNAPS_IVY_CACHE/org.apache.catalina/com.springsource.org.apache.catalina/7.0.21/com.springsource.org.apache.catalina-7.0.21.jar" sourcepath="/SNAPS_IVY_CACHE/org.apache.catalina/com.springsource.org.apache.catalina/7.0.12/com.springsource.org.apache.catalina-sources-7.0.12.jar"/> <classpathentry kind="var" path="SNAPS_IVY_CACHE/org.eclipse.virgo.teststubs/org.eclipse.virgo.teststubs.osgi/3.1.0.D-20110921083459/org.eclipse.virgo.teststubs.osgi-3.1.0.D-20110921083459.jar" sourcepath="/SNAPS_IVY_CACHE/org.eclipse.virgo.teststubs/org.eclipse.virgo.teststubs.osgi/3.1.0.D-20110921083459/org.eclipse.virgo.teststubs.osgi-sources-3.1.0.D-20110921083459.jar"/> <classpathentry kind="var" path="SNAPS_IVY_CACHE/org.eclipse.virgo.util/org.eclipse.virgo.util.parser.manifest/3.1.0.D-20110927204747/org.eclipse.virgo.util.parser.manifest-3.1.0.D-20110927204747.jar" sourcepath="/SNAPS_IVY_CACHE/org.eclipse.virgo.util/org.eclipse.virgo.util.parser.manifest/3.1.0.D-20110927204747/org.eclipse.virgo.util.parser.manifest-sources-3.1.0.D-20110927204747.jar"/> <classpathentry kind="var" path="SNAPS_IVY_CACHE/org.aspectj/com.springsource.org.aspectj.runtime/1.6.6.RELEASE/com.springsource.org.aspectj.runtime-1.6.6.RELEASE.jar"/>
diff --git a/org.eclipse.virgo.snaps.core/src/main/java/org/eclipse/virgo/snaps/core/RequestRouter.java b/org.eclipse.virgo.snaps.core/src/main/java/org/eclipse/virgo/snaps/core/RequestRouter.java index 90f9f6f..db90005 100644 --- a/org.eclipse.virgo.snaps.core/src/main/java/org/eclipse/virgo/snaps/core/RequestRouter.java +++ b/org.eclipse.virgo.snaps.core/src/main/java/org/eclipse/virgo/snaps/core/RequestRouter.java
@@ -20,9 +20,6 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.virgo.snaps.core.internal.Snap; -import org.eclipse.virgo.snaps.core.internal.SnapUtils; - - /** * TODO Document RequestRouter @@ -34,6 +31,8 @@ * */ public final class RequestRouter { + + private static final String PATH_ELEMENT_SEPARATOR = "/"; private final SnapRegistry snapRegistry; @@ -56,21 +55,54 @@ } public void forward(String path, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String contextPath = SnapUtils.determineSnapContextPath(request); + String contextPath = determineSnapContextPath(request); servletContext.getRequestDispatcher(contextPath + path).forward(request, response); } public void include(String path, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String contextPath = SnapUtils.determineSnapContextPath(request); + String contextPath = determineSnapContextPath(request); servletContext.getRequestDispatcher(contextPath + path).include(request, response); } private Snap findSnap(HttpServletRequest request) { - String contextPath = SnapUtils.determineSnapContextPath(request); + String contextPath = determineSnapContextPath(request); return this.snapRegistry.findSnapByContextPath(contextPath); } void destroy() { this.snapRegistry.destroy(); } + + private String determineSnapContextPath(HttpServletRequest request) { + String result; + String includeServletPath = (String)request.getAttribute("javax.servlet.include.servlet_path"); + if (includeServletPath != null) { + result = includeServletPath; + } else { + result = request.getServletPath(); + } + + String checking = result; + // /dog/cat/web/page + + int index2 = result.indexOf(PATH_ELEMENT_SEPARATOR, 1); + if (index2 > -1){ + String result2 = result.substring(0, index2); + } + //return result2; + + Snap snap = this.snapRegistry.findSnapByContextPath(checking); + while(snap == null){ + int index = checking.lastIndexOf(PATH_ELEMENT_SEPARATOR); + if(index <= 0){ + return result; + } + checking = checking.substring(0, index); + snap = this.snapRegistry.findSnapByContextPath(checking); + } + return checking; + } + + + }
diff --git a/org.eclipse.virgo.snaps.core/src/main/java/org/eclipse/virgo/snaps/core/internal/SnapUtils.java b/org.eclipse.virgo.snaps.core/src/main/java/org/eclipse/virgo/snaps/core/internal/SnapUtils.java index 2db87b3..d0704a4 100644 --- a/org.eclipse.virgo.snaps.core/src/main/java/org/eclipse/virgo/snaps/core/internal/SnapUtils.java +++ b/org.eclipse.virgo.snaps.core/src/main/java/org/eclipse/virgo/snaps/core/internal/SnapUtils.java
@@ -11,8 +11,6 @@ package org.eclipse.virgo.snaps.core.internal; -import javax.servlet.http.HttpServletRequest; - import org.osgi.framework.Bundle; import org.eclipse.virgo.util.osgi.manifest.BundleManifest; @@ -28,22 +26,6 @@ private SnapUtils() { } - public static String determineSnapContextPath(HttpServletRequest request) { - // TODO Move to HostUtils, or similar - String result; - String includeServletPath = (String)request.getAttribute("javax.servlet.include.servlet_path"); - if (includeServletPath != null) { - result = includeServletPath; - } else { - result = request.getServletPath(); - } - int index = result.indexOf(PATH_ELEMENT_SEPARATOR, 1); - if (index > -1) { - result = result.substring(0, index); - } - return result; - } - public static boolean hasSnapHostHeader(BundleManifest manifest) { return manifest.getHeader(HEADER_SNAP_HOST) != null; }
diff --git a/sample/org.eclipse.virgo.snaps.sample.animal/src/main/webapp/META-INF/MANIFEST.MF b/sample/org.eclipse.virgo.snaps.sample.animal/src/main/webapp/META-INF/MANIFEST.MF index f469bbe..76631a4 100644 --- a/sample/org.eclipse.virgo.snaps.sample.animal/src/main/webapp/META-INF/MANIFEST.MF +++ b/sample/org.eclipse.virgo.snaps.sample.animal/src/main/webapp/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@ Manifest-Version: 1 Export-Package: images;version="1.0",styles;version="1.0" Import-Bundle: com.springsource.org.apache.taglibs.standard;version="[ - 1.1.2,2.1.2)",org.eclipse.virgo.snaps.api;version="[3.0.0,3.1)" + 1.1.2,2.1.2)",org.eclipse.virgo.snaps.api;version="[3.1.0,3.2)" Bundle-Version: 1.0 Tool: Bundlor 1.0.0.RELEASE Bundle-Name: Multiple Styles Host @@ -9,5 +9,5 @@ Bundle-SymbolicName: org.eclipse.virgo.snaps.sample.animal Web-ContextPath: /animal-menu-bar Import-Package: javax.servlet.jsp.jstl.core;version="[1.2.0,2.2.0)",or - g.eclipse.virgo.snaps.core;version="[3.0.0,3.1)" + g.eclipse.virgo.snaps.core;version="[3.1.0,3.2)"
diff --git a/sample/org.eclipse.virgo.snaps.sample.animal/template.mf b/sample/org.eclipse.virgo.snaps.sample.animal/template.mf index de71839..acbc715 100644 --- a/sample/org.eclipse.virgo.snaps.sample.animal/template.mf +++ b/sample/org.eclipse.virgo.snaps.sample.animal/template.mf
@@ -5,9 +5,9 @@ Bundle-Name: Multiple Styles Host Web-ContextPath: /animal-menu-bar Import-Package: - org.eclipse.virgo.snaps.core;version="${version:[=.=.=, =.+1)}", + org.eclipse.virgo.snaps.core;version="${version:[=.=.=, +1.0.0)}", javax.servlet.jsp.jstl.core;version="${javax.servlet.jsp.jstl:[=.=.=,+1.=.=)}" Import-Bundle: com.springsource.org.apache.taglibs.standard;version="${org.apache.taglibs.standard:[=.=.=,+1.=.=)}", - org.eclipse.virgo.snaps.api;version="${version:[=.=.=, =.+1)}" + org.eclipse.virgo.snaps.api;version="${version:[=.=.=, +1.0.0)}"
diff --git a/sample/org.eclipse.virgo.snaps.sample.blue/src/main/webapp/META-INF/MANIFEST.MF b/sample/org.eclipse.virgo.snaps.sample.blue/src/main/webapp/META-INF/MANIFEST.MF index c273cc3..5b09ae0 100644 --- a/sample/org.eclipse.virgo.snaps.sample.blue/src/main/webapp/META-INF/MANIFEST.MF +++ b/sample/org.eclipse.virgo.snaps.sample.blue/src/main/webapp/META-INF/MANIFEST.MF
@@ -5,6 +5,6 @@ Bundle-Name: Styling Snap Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.eclipse.virgo.snaps.sample.blue -Snap-Host: org.eclipse.virgo.snaps.sample.animal;version="[3.0.0,3.1)" +Snap-Host: org.eclipse.virgo.snaps.sample.animal;version="[3.1.0,3.2)" Snap-ContextPath: /styles
diff --git a/sample/org.eclipse.virgo.snaps.sample.blue/template.mf b/sample/org.eclipse.virgo.snaps.sample.blue/template.mf index 6cf03d8..0605044 100644 --- a/sample/org.eclipse.virgo.snaps.sample.blue/template.mf +++ b/sample/org.eclipse.virgo.snaps.sample.blue/template.mf
@@ -3,5 +3,5 @@ Bundle-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Styling Snap -Snap-Host: org.eclipse.virgo.snaps.sample.animal;version="${version:[=.=.=, =.+1)}" +Snap-Host: org.eclipse.virgo.snaps.sample.animal;version="${version:[=.=.=, +1.0.0)}" Snap-ContextPath: /styles
diff --git a/sample/org.eclipse.virgo.snaps.sample.cat/src/main/webapp/META-INF/MANIFEST.MF b/sample/org.eclipse.virgo.snaps.sample.cat/src/main/webapp/META-INF/MANIFEST.MF index 3a21e25..4c8a5d5 100644 --- a/sample/org.eclipse.virgo.snaps.sample.cat/src/main/webapp/META-INF/MANIFEST.MF +++ b/sample/org.eclipse.virgo.snaps.sample.cat/src/main/webapp/META-INF/MANIFEST.MF
@@ -1,6 +1,6 @@ Manifest-Version: 1.0 Import-Bundle: com.springsource.org.apache.taglibs.standard;version="[ - 1.1.2,2.1.2)",org.eclipse.virgo.snaps.api;version="[3.0.0,3.1)" + 1.1.2,2.1.2)",org.eclipse.virgo.snaps.api;version="[3.1.0,3.2)" Bundle-Version: 1.0 Tool: Bundlor 1.0.0.RELEASE Bundle-Name: Cat Menu Item Snap @@ -8,13 +8,13 @@ Bundle-SymbolicName: org.eclipse.virgo.snaps.sample.cat Import-Package: javax.servlet;version="[2.5.0,4)",javax.servlet.http;v ersion="[2.5.0,4)",javax.servlet.jsp.jstl.core;version="[1.2.0,2.2.0) - ",org.eclipse.virgo.snaps.core;version="[3.0.0,3.1)",org.eclipse.virg + ",org.eclipse.virgo.snaps.core;version="[3.1.0,3.2)",org.eclipse.virg o.web.dm;version="[2,4)",org.springframework.context.config;version=" [2.5.6,4)",org.springframework.context.support;version="[2.5.6,4)",or g.springframework.stereotype;version="[2.5.6,4)",org.springframework. web.bind.annotation;version="[2.5.6,4)",org.springframework.web.conte xt;version="[2.5.6,4)",org.springframework.web.servlet;version="[2.5. 6,4)",org.springframework.web.servlet.view;version="[2.5.6,4)" -Snap-Host: org.eclipse.virgo.snaps.sample.animal;version="[3.0.0,3.1)" -Snap-ContextPath: /cat +Snap-Host: org.eclipse.virgo.snaps.sample.animal;version="[3.1.0,3.2)" +Snap-ContextPath: /dog/cat
diff --git a/sample/org.eclipse.virgo.snaps.sample.cat/template.mf b/sample/org.eclipse.virgo.snaps.sample.cat/template.mf index fa9fdf8..11a8a05 100644 --- a/sample/org.eclipse.virgo.snaps.sample.cat/template.mf +++ b/sample/org.eclipse.virgo.snaps.sample.cat/template.mf
@@ -3,18 +3,18 @@ Bundle-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Cat Menu Item Snap -Snap-Host: org.eclipse.virgo.snaps.sample.animal;version="${version:[=.=.=, =.+1)}" -Snap-ContextPath: /cat +Snap-Host: org.eclipse.virgo.snaps.sample.animal;version="${version:[=.=.=, +1.0.0)}" +Snap-ContextPath: /dog/cat Import-Bundle: com.springsource.org.apache.taglibs.standard;version="${org.apache.taglibs.standard:[=.=.=,+1.=.=)}", - org.eclipse.virgo.snaps.api;version="${version:[=.=.=, =.+1)}" + org.eclipse.virgo.snaps.api;version="${version:[=.=.=, +1.0.0)}" Import-Package: javax.servlet.jsp.jstl.core;version="${javax.servlet.jsp.jstl:[=.=.=,+1.=.=)}", - org.eclipse.virgo.snaps.core;version="${version:[=.=.=, =.+1)}", - org.springframework.context.config;version="${org.springframework:[2.5.6,+1)}", - org.springframework.context.support;version="${org.springframework:[2.5.6,+1)}" + org.eclipse.virgo.snaps.core;version="${version:[=.=.=, +1.0.0)}", + org.springframework.context.config;version="${org.springframework:[=.=.=,+1)}", + org.springframework.context.support;version="${org.springframework:[=.=.=,+1)}" Import-Template: javax.servlet.*;version="${javax.servlet:[-1.5.=,+1)}", - org.springframework.*;version="${org.springframework:[2.5.6,+1)}", - org.eclipse.virgo.web.*;version="${org.eclipse.virgo.web:[-1,+1)}" + org.springframework.*;version="${org.springframework:[=.=.=,+1)}", + org.eclipse.virgo.web.*;version="${org.eclipse.virgo.web:[=.=.=,+1)}" Excluded-Exports: *
diff --git a/sample/org.eclipse.virgo.snaps.sample.dog/src/main/webapp/META-INF/MANIFEST.MF b/sample/org.eclipse.virgo.snaps.sample.dog/src/main/webapp/META-INF/MANIFEST.MF index 9ed00cd..367ebcc 100644 --- a/sample/org.eclipse.virgo.snaps.sample.dog/src/main/webapp/META-INF/MANIFEST.MF +++ b/sample/org.eclipse.virgo.snaps.sample.dog/src/main/webapp/META-INF/MANIFEST.MF
@@ -1,13 +1,13 @@ Manifest-Version: 1.0 Import-Bundle: com.springsource.org.apache.taglibs.standard;version="[ - 1.1.2,2.1.2)",org.eclipse.virgo.snaps.api;version="[3.0.0,3.1)" + 1.1.2,2.1.2)",org.eclipse.virgo.snaps.api;version="[3.1.0,3.2)" Bundle-Version: 1.0 Tool: Bundlor 1.0.0.RELEASE Bundle-Name: Dog Menu Item Snap Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.eclipse.virgo.snaps.sample.dog Import-Package: javax.servlet.jsp.jstl.core;version="[1.2.0,2.2.0)",or - g.eclipse.virgo.snaps.core;version="[3.0.0,3.1)" -Snap-Host: org.eclipse.virgo.snaps.sample.animal;version="[3.0.0,3.1)" + g.eclipse.virgo.snaps.core;version="[3.1.0,3.2)" +Snap-Host: org.eclipse.virgo.snaps.sample.animal;version="[3.1.0,3.2)" Snap-ContextPath: /dog
diff --git a/sample/org.eclipse.virgo.snaps.sample.dog/template.mf b/sample/org.eclipse.virgo.snaps.sample.dog/template.mf index a1bdbdf..b9f0743 100644 --- a/sample/org.eclipse.virgo.snaps.sample.dog/template.mf +++ b/sample/org.eclipse.virgo.snaps.sample.dog/template.mf
@@ -3,12 +3,12 @@ Bundle-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Dog Menu Item Snap -Snap-Host: org.eclipse.virgo.snaps.sample.animal;version="${version:[=.=.=, =.+1)}" +Snap-Host: org.eclipse.virgo.snaps.sample.animal;version="${version:[=.=.=, +1.0.0)}" Snap-ContextPath: /dog Excluded-Exports: images Import-Bundle: com.springsource.org.apache.taglibs.standard;version="${org.apache.taglibs.standard:[=.=.=,+1.=.=)}", - org.eclipse.virgo.snaps.api;version="${version:[=.=.=, =.+1)}" + org.eclipse.virgo.snaps.api;version="${version:[=.=.=, +1.0.0)}" Import-Package: javax.servlet.jsp.jstl.core;version="${javax.servlet.jsp.jstl:[=.=.=,+1.=.=)}", - org.eclipse.virgo.snaps.core;version="${version:[=.=.=, =.+1)}" + org.eclipse.virgo.snaps.core;version="${version:[=.=.=, +1.0.0)}"
diff --git a/test-apps/simple-host/src/main/webapp/META-INF/MANIFEST.MF b/test-apps/simple-host/src/main/webapp/META-INF/MANIFEST.MF index 57202f6..316d48c 100644 --- a/test-apps/simple-host/src/main/webapp/META-INF/MANIFEST.MF +++ b/test-apps/simple-host/src/main/webapp/META-INF/MANIFEST.MF
@@ -1,12 +1,10 @@ Manifest-Version: 1.0 -Export-Package: simple.host;version="1.0";uses:="javax.servlet,javax.s - ervlet.http" +Export-Package: simple.host;version="1.0" Bundle-Version: 1.0 Tool: Bundlor 1.0.0.RELEASE Bundle-Name: Simple Host Bundle-ManifestVersion: 2 Bundle-SymbolicName: simple.host Web-ContextPath: /simple-host -Import-Package: javax.servlet;version="[3.0.0,4.0.0)",javax.servlet.ht - tp,org.eclipse.virgo.snaps.core;version="1.0" +Import-Package: org.eclipse.virgo.snaps.core;version="1.0"
diff --git a/test-apps/simple-snap/src/main/webapp/META-INF/MANIFEST.MF b/test-apps/simple-snap/src/main/webapp/META-INF/MANIFEST.MF index 1c2f4fc..4625579 100644 --- a/test-apps/simple-snap/src/main/webapp/META-INF/MANIFEST.MF +++ b/test-apps/simple-snap/src/main/webapp/META-INF/MANIFEST.MF
@@ -9,6 +9,6 @@ Import-Package: javax.management;version="0",javax.servlet;version="[3 .0.0,4.0.0)",javax.servlet.http;version="[3.0.0,4.0.0)",org.osgi.fram ework;version="0" -Snap-Host: simple.host;version="[1.0, 2.0)" +Snap-Host: simple.host;version="[1.0, 4.0)" Snap-ContextPath: /simple
diff --git a/test-apps/spring-snap/src/main/webapp/META-INF/MANIFEST.MF b/test-apps/spring-snap/src/main/webapp/META-INF/MANIFEST.MF index c52ff85..9175f0e 100644 --- a/test-apps/spring-snap/src/main/webapp/META-INF/MANIFEST.MF +++ b/test-apps/spring-snap/src/main/webapp/META-INF/MANIFEST.MF
@@ -1,7 +1,5 @@ Manifest-Version: 1.0 -Export-Package: spring;version="1.0";uses:="org.springframework.stereo - type,org.springframework.web.bind.annotation,org.springframework.web. - servlet" +Export-Package: spring;version="1.0" Import-Bundle: org.springframework.beans;version="[3.0.5,4.0.5)",org.s pringframework.context;version="[3.0.5,4.0.5)",org.springframework.we b;version="[3.0.5,4.0.5)",org.springframework.web.servlet;version="[3 @@ -11,6 +9,6 @@ Bundle-Name: Spring Snap Bundle-ManifestVersion: 2 Bundle-SymbolicName: spring.snap -Snap-Host: simple.host;version="[1.0, 2.0)" +Snap-Host: simple.host;version="[1.0, 4.0)" Snap-ContextPath: /spring
diff --git a/test-apps/taglib-snap-one/src/main/webapp/META-INF/MANIFEST.MF b/test-apps/taglib-snap-one/src/main/webapp/META-INF/MANIFEST.MF index 24ddca0..0fe9246 100644 --- a/test-apps/taglib-snap-one/src/main/webapp/META-INF/MANIFEST.MF +++ b/test-apps/taglib-snap-one/src/main/webapp/META-INF/MANIFEST.MF
@@ -4,6 +4,6 @@ Bundle-Name: Taglib Snap One Bundle-ManifestVersion: 2 Bundle-SymbolicName: taglib.snap.one -Snap-Host: taglib.host;version="[1.0, 2.0)" +Snap-Host: taglib.host;version="[1.0, 4.0)" Snap-ContextPath: /one
diff --git a/test-apps/taglib-snap-two/src/main/webapp/META-INF/MANIFEST.MF b/test-apps/taglib-snap-two/src/main/webapp/META-INF/MANIFEST.MF index 488404e..7adcb6c 100644 --- a/test-apps/taglib-snap-two/src/main/webapp/META-INF/MANIFEST.MF +++ b/test-apps/taglib-snap-two/src/main/webapp/META-INF/MANIFEST.MF
@@ -4,6 +4,6 @@ Bundle-Name: Taglib Snap Two Bundle-ManifestVersion: 2 Bundle-SymbolicName: taglib.snap.two -Snap-Host: taglib.host;version="[1.0, 2.0)" +Snap-Host: taglib.host;version="[1.0, 4.0)" Snap-ContextPath: /two