You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jd...@apache.org on 2011/01/15 12:39:04 UTC
svn commit: r1059304 - in /wicket/trunk:
wicket-core/src/main/java/org/apache/wicket/request/mapper/
wicket-core/src/main/java/org/apache/wicket/request/resource/
wicket-core/src/main/java/org/apache/wicket/util/file/
wicket-core/src/main/java/org/apac...
Author: jdonnerstag
Date: Sat Jan 15 11:39:04 2011
New Revision: 1059304
URL: http://svn.apache.org/viewvc?rev=1059304&view=rev
Log:
applied: Use "META-INF/resources" (when available: servlet 3.0) to serve static resources
Issue: WICKET-3303
Added:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/MetaInfStaticResourceReference.java
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapper.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/file/WebApplicationPath.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ResourceStreamLocator.java
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapper.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapper.java?rev=1059304&r1=1059303&r2=1059304&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapper.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapper.java Sat Jan 15 11:39:04 2011
@@ -30,6 +30,7 @@ import org.apache.wicket.request.cycle.R
import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.resource.MetaInfStaticResourceReference;
import org.apache.wicket.request.resource.ResourceReference;
import org.apache.wicket.util.IProvider;
import org.apache.wicket.util.lang.Args;
@@ -56,8 +57,7 @@ import org.apache.wicket.util.time.Time;
class BasicResourceReferenceMapper extends AbstractResourceReferenceMapper
{
/** timestamp cache stored in request cycle meta data */
- protected static final MetaDataKey<Map<ResourceReference, Time>> TIMESTAMP_KEY =
- new MetaDataKey<Map<ResourceReference, Time>>()
+ protected static final MetaDataKey<Map<ResourceReference, Time>> TIMESTAMP_KEY = new MetaDataKey<Map<ResourceReference, Time>>()
{
private static final long serialVersionUID = 1L;
};
@@ -195,7 +195,20 @@ class BasicResourceReferenceMapper exten
ResourceReferenceRequestHandler referenceRequestHandler = (ResourceReferenceRequestHandler)requestHandler;
ResourceReference reference = referenceRequestHandler.getResourceReference();
- Url url = new Url();
+ Url url;
+
+ if (reference instanceof MetaInfStaticResourceReference)
+ {
+ url = ((MetaInfStaticResourceReference)reference).mapHandler(referenceRequestHandler);
+ // if running on Servlet 3.0 engine url is not null
+ if (url != null)
+ {
+ return url;
+ }
+ // otherwise it has to be served by the standard wicket way
+ }
+
+ url = new Url();
List<String> segments = url.getSegments();
segments.add(getContext().getNamespace());
Added: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/MetaInfStaticResourceReference.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/MetaInfStaticResourceReference.java?rev=1059304&view=auto
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/MetaInfStaticResourceReference.java (added)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/resource/MetaInfStaticResourceReference.java Sat Jan 15 11:39:04 2011
@@ -0,0 +1,105 @@
+/*
+ * 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.wicket.request.resource;
+
+import java.util.List;
+
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.util.lang.Packages;
+
+/**
+ * Resource reference for static files. The resource must reside under the "/META-INF/resources/"
+ * directory. So if you have a foo.bar.Component and want to have a static icon.gif belonging to it
+ * the image must be available on the "META-INF/resources/foo/bar/icon.gif" classpath inside a jar
+ * file.
+ *
+ * If run under a Servlet 3.0 environment "foo/bar/icon.gif" like resource urls will be made and
+ * served by the servlet container instead of wicket (which is faster).
+ *
+ * If run under a non Servlet 3.0 environment (like 2.5) resources will be served by wicket (urls
+ * will look like "wicket/resource/foo/bar/icon.gif").
+ *
+ * @author akiraly
+ */
+public class MetaInfStaticResourceReference extends PackageResourceReference
+{
+ private static final long serialVersionUID = -1858339228780709471L;
+
+ private static Boolean META_INF_RESOURCES_SUPPORTED = null;
+
+ /**
+ * Construct.
+ *
+ * @param scope
+ * mandatory parameter
+ * @param name
+ * mandatory parameter
+ */
+ public MetaInfStaticResourceReference(Class<?> scope, String name)
+ {
+ super(scope, name);
+ }
+
+ /**
+ * Returns the {@link Url} for given {@link IRequestHandler} if "/META-INF/resources" Servlet
+ * 3.0 feature is supported or <code>null</code> if not (so standard url mapping can take
+ * place).
+ *
+ * @param requestHandler
+ * mandatory parameter
+ * @return Url instance or <code>null</code>.
+ */
+ public Url mapHandler(IRequestHandler requestHandler)
+ {
+ if (!isMetaInfResourcesSupported())
+ {
+ return null;
+ }
+
+ Url url = new Url();
+
+ List<String> segments = url.getSegments();
+
+ String[] parts = Packages.extractPackageName(getScope()).split("\\.");
+ for (String p : parts)
+ {
+ segments.add(p);
+ }
+
+ parts = getName().split("/");
+ for (String p : parts)
+ {
+ segments.add(p);
+ }
+
+ return url;
+ }
+
+ protected boolean isMetaInfResourcesSupported()
+ {
+ if (META_INF_RESOURCES_SUPPORTED == null)
+ {
+ int majorVersion = WebApplication.get().getServletContext().getMajorVersion();
+ META_INF_RESOURCES_SUPPORTED = majorVersion >= 3;
+ }
+
+ return META_INF_RESOURCES_SUPPORTED.booleanValue();
+ }
+
+}
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/file/WebApplicationPath.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/file/WebApplicationPath.java?rev=1059304&r1=1059303&r2=1059304&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/file/WebApplicationPath.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/file/WebApplicationPath.java Sat Jan 15 11:39:04 2011
@@ -58,6 +58,9 @@ public final class WebApplicationPath im
public WebApplicationPath(final ServletContext servletContext)
{
this.servletContext = servletContext;
+
+ // adding root so servlet context resources are always checked
+ webappPaths.add("/");
}
/**
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ResourceStreamLocator.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ResourceStreamLocator.java?rev=1059304&r1=1059303&r2=1059304&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ResourceStreamLocator.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/ResourceStreamLocator.java Sat Jan 15 11:39:04 2011
@@ -201,7 +201,13 @@ public class ResourceStreamLocator imple
}
// Try loading path using classloader
- final URL url = classLoader.getResource(path);
+ URL url = classLoader.getResource(path);
+ if (url == null)
+ {
+ // maybe it is in the Servlet 3.0 like directory
+ url = classLoader.getResource("META-INF/resources/" + path);
+ }
+
if (url != null)
{
return new UrlResourceStream(url);
Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java?rev=1059304&r1=1059303&r2=1059304&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java Sat Jan 15 11:39:04 2011
@@ -94,13 +94,6 @@ public class UploadProgressBar extends P
private final FileUploadField uploadField;
- @Override
- protected void onInitialize()
- {
- super.onInitialize();
- form.getRootForm().setOutputMarkupId(true);
- }
-
/**
* Constructor that will display the upload progress bar for every submit of the given form.
*
@@ -155,6 +148,16 @@ public class UploadProgressBar extends P
}
/**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void onInitialize()
+ {
+ super.onInitialize();
+ form.getRootForm().setOutputMarkupId(true);
+ }
+
+ /**
* Override this to provide your own CSS, or return null to avoid including the default.
*
* @return ResourceReference for your CSS.
@@ -164,6 +167,9 @@ public class UploadProgressBar extends P
return CSS;
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public void renderHead(IHeaderResponse response)
{
@@ -201,6 +207,5 @@ public class UploadProgressBar extends P
js.close();
response.renderOnDomReadyJavaScript(new String(out.toByteArray()));
-
}
}