You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@click.apache.org by sa...@apache.org on 2009/07/27 00:45:44 UTC
svn commit: r797998 - in /incubator/click/trunk/click: build/
documentation/docs/ documentation/docs/developer-guide/
documentation/xdocs/src/docbook/click/
extras/src/org/apache/click/extras/gae/
extras/src/org/apache/click/extras/service/ framework/s...
Author: sabob
Date: Sun Jul 26 22:45:43 2009
New Revision: 797998
URL: http://svn.apache.org/viewvc?rev=797998&view=rev
Log:
deploy resources from META-INF/resources instead of META-INF/web. CLK-570
Modified:
incubator/click/trunk/click/build/build.xml
incubator/click/trunk/click/documentation/docs/developer-guide/contributing.html
incubator/click/trunk/click/documentation/docs/roadmap-changes.html
incubator/click/trunk/click/documentation/docs/upgrade-path.html
incubator/click/trunk/click/documentation/xdocs/src/docbook/click/chapter-configuration.xml
incubator/click/trunk/click/extras/src/org/apache/click/extras/gae/GoogleAppEngineListener.java
incubator/click/trunk/click/extras/src/org/apache/click/extras/service/FreemarkerTemplateService.java
incubator/click/trunk/click/framework/src/org/apache/click/service/VelocityTemplateService.java
incubator/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java
Modified: incubator/click/trunk/click/build/build.xml
URL: http://svn.apache.org/viewvc/incubator/click/trunk/click/build/build.xml?rev=797998&r1=797997&r2=797998&view=diff
==============================================================================
--- incubator/click/trunk/click/build/build.xml (original)
+++ incubator/click/trunk/click/build/build.xml Sun Jul 26 22:45:43 2009
@@ -708,7 +708,7 @@
todir="documentation/docs/click-api/org/apache/click/control"/>
<copy file="documentation/images/inline-paginator.png"
todir="documentation/docs/extras-api/org/apache/click/extras/control"/>
- <copy file="extras/src/META-INF/web/click/colorpicker/images/color-picker.png"
+ <copy file="extras/src/META-INF/resources/click/colorpicker/images/color-picker.png"
todir="documentation/docs/extras-api/org/apache/click/extras/control/colorpicker"/>
<copy file="documentation/images/tree.png"
todir="documentation/docs/extras-api/org/apache/click/extras/tree"/>
Modified: incubator/click/trunk/click/documentation/docs/developer-guide/contributing.html
URL: http://svn.apache.org/viewvc/incubator/click/trunk/click/documentation/docs/developer-guide/contributing.html?rev=797998&r1=797997&r2=797998&view=diff
==============================================================================
--- incubator/click/trunk/click/documentation/docs/developer-guide/contributing.html (original)
+++ incubator/click/trunk/click/documentation/docs/developer-guide/contributing.html Sun Jul 26 22:45:43 2009
@@ -75,11 +75,8 @@
Click automatically deploys configured classpath resources to the <tt class="blue">/click</tt>
directory at startup (existing files will not be overwritten).
<p/>
- To enable your controls to deploy resources on startup either place the resources
- in the Click Extras JAR folder 'META-INF/web/' or use the Control
- <a href="../click-api/org/apache/click/Control.html#on-deploy">onDeploy()</a> method.
- Click extra controls which use the <tt>onDeploy</tt> method should be registered
- in Click Extras JAR <tt>extras-controls.xml</tt> file. See the section
+ To enable your controls to deploy resources on startup place the resources
+ in the Click Extras JAR directory 'META-INF/resources/'. See the section
<a href="../user-guide/html/ch04s03.html#deploying-custom-resources">Deploying Custom Resources</a>
for more information on resource deployment.
Modified: incubator/click/trunk/click/documentation/docs/roadmap-changes.html
URL: http://svn.apache.org/viewvc/incubator/click/trunk/click/documentation/docs/roadmap-changes.html?rev=797998&r1=797997&r2=797998&view=diff
==============================================================================
--- incubator/click/trunk/click/documentation/docs/roadmap-changes.html (original)
+++ incubator/click/trunk/click/documentation/docs/roadmap-changes.html Sun Jul 26 22:45:43 2009
@@ -201,6 +201,13 @@
[<a target="_blank" href="https://issues.apache.org/jira/browse/CLK-571">571</a>].
</li>
<li class="change">
+ Added support to deploy resources inside JARs from the Servlet 3.0 compliant
+ location, <tt>META-INF/resources</tt>. If Click is running on a Servlet 3.0
+ server, it won't deploy its resources, but rely on the container to
+ serve the resources directly
+ [<a target="_blank" href="https://issues.apache.org/jira/browse/CLK-570">570</a>].
+ </li>
+ <li class="change">
Added new Calendar popup to DateField. This Calendar popup uses
<a target="_blank" class="external" href="http://code.google.com/p/calendardateselect/">Calendar Date Select</a>
which is based on the Prototype JavaScript library.
Modified: incubator/click/trunk/click/documentation/docs/upgrade-path.html
URL: http://svn.apache.org/viewvc/incubator/click/trunk/click/documentation/docs/upgrade-path.html?rev=797998&r1=797997&r2=797998&view=diff
==============================================================================
--- incubator/click/trunk/click/documentation/docs/upgrade-path.html (original)
+++ incubator/click/trunk/click/documentation/docs/upgrade-path.html Sun Jul 26 22:45:43 2009
@@ -92,6 +92,27 @@
<a href="click-api/org/apache/click/Control.html#getHeadElements()">Control.getHeadElements()</a>
and <a href="click-api/org/apache/click/Page.html#getHeadElements()">Page.getHeadElements()</a>.
</li>
+ <li class="change">
+ Deprecated methods: <a href="click-api/org/apache/click/Page.html#getPageImports()">Page.getPageImports()</a>
+ and <a href="click-api/org/apache/click/Page.html#setPageImports(org.apache.click.util.PageImports)">Page.setPageImports()</a>.
+ These methods have been deprecated in favor of
+ <a href="click-api/org/apache/click/Page.html#getHeadElements()">Page.getHeadElements()</a>.
+ </li>
+ <li class="change">
+ Click automatically deploy resources from the classpath that are located
+ under the directory <tt>META-INF/web</tt>.
+ <p/>
+ The Servlet 3.0 specification introduced a similar concept where resources
+ can be packaged in a JAR and served directly without having to be
+ deployed.
+ <p/>
+ Click 2.1.0 aligns with Servlet 3.0 in that resources are now also deployed
+ from the location <tt>META-INF/resources</tt>.
+ <p/>
+ For backwards compatibility Click will still deploy resources from
+ <tt>META-INF/web</tt>, however it is highly recommended to use the new
+ Servlet 3.0 location instead.
+ </li>
</ul>
</dd>
Modified: incubator/click/trunk/click/documentation/xdocs/src/docbook/click/chapter-configuration.xml
URL: http://svn.apache.org/viewvc/incubator/click/trunk/click/documentation/xdocs/src/docbook/click/chapter-configuration.xml?rev=797998&r1=797997&r2=797998&view=diff
==============================================================================
--- incubator/click/trunk/click/documentation/xdocs/src/docbook/click/chapter-configuration.xml (original)
+++ incubator/click/trunk/click/documentation/xdocs/src/docbook/click/chapter-configuration.xml Sun Jul 26 22:45:43 2009
@@ -1032,7 +1032,7 @@
<title>Deploying Custom Resources</title>
<para> Click supports two ways of deploying pre-configured resources
- (templates, stylesheets, JavaScript etc.) from a Jar to a web applications.
+ (templates, stylesheets, JavaScript etc.) from a Jar to a web application.
</para>
<orderedlist>
@@ -1044,8 +1044,14 @@
</para>
</listitem>
<listitem>
- <para> By packaging the resources (stylesheets, JavaScript, Images etc.)
- into a special folder called <emphasis>'META-INF/web'</emphasis>.
+ <para>By packaging the resources (stylesheets, JavaScript, Images etc.)
+ into a special folder called <emphasis>'META-INF/resources'</emphasis>.
+ Please note that if Click is executing inside a Servlet 3.0 compliant
+ server, it won't deploy its resources. Instead it will rely on the
+ Servlet 3.0 feature where if the server cannot find a resource
+ in the root directory of the webapp, it will look for the resource
+ under <emphasis>'META-INF/resources'</emphasis>, and if it is found,
+ serve it up.
</para>
</listitem>
</orderedlist>
@@ -1055,14 +1061,14 @@
</para>
<para>When Click starts up, it scans each Jar in the classpath for
- specially marked entries starting with 'META-INF/web/'. (Please note that
- even though Click will scan the entire classpath it is strongly recommended
- to host your Jar files inside your WAR lib folder e.g. WEB-INF/lib. Sharing
- Jars on the classpath can lead to class loading issues.)
+ specially marked entries starting with 'META-INF/resources/'. (Please note
+ that even though Click will scan the entire classpath it is strongly
+ recommended to host your Jar files under your WAR lib folder e.g. WEB-INF/lib.
+ Sharing Jars on the classpath can lead to class loading issues.)
</para>
- <para>Click will then copy all files found under 'META-INF/web/' to the web
- application folder.
+ <para>Click will then copy all files found under 'META-INF/resources/' to
+ the root directory of the webapp.
</para>
<para>
@@ -1071,10 +1077,10 @@
<itemizedlist>
<listitem>
- <para>META-INF/web/mycorp/edit_customer.js</para>
+ <para>META-INF/resources/mycorp/edit_customer.js</para>
</listitem>
<listitem>
- <para>META-INF/web/mycorp/edit_customer.css</para>
+ <para>META-INF/resources/mycorp/edit_customer.css</para>
</listitem>
<listitem>
<para>mycorp/pages/EditCustomerPage.class</para>
Modified: incubator/click/trunk/click/extras/src/org/apache/click/extras/gae/GoogleAppEngineListener.java
URL: http://svn.apache.org/viewvc/incubator/click/trunk/click/extras/src/org/apache/click/extras/gae/GoogleAppEngineListener.java?rev=797998&r1=797997&r2=797998&view=diff
==============================================================================
--- incubator/click/trunk/click/extras/src/org/apache/click/extras/gae/GoogleAppEngineListener.java (original)
+++ incubator/click/trunk/click/extras/src/org/apache/click/extras/gae/GoogleAppEngineListener.java Sun Jul 26 22:45:43 2009
@@ -128,9 +128,10 @@
*
* <h3>Deployment issues</h3>
*
- * On application startup, Click automatically deploys all its JavaScript and
- * CSS resources to the "<tt>/click</tt>" folder. Since GAE doesn't allow
- * writing to disk, Click cannot automatically deploy its resources.
+ * On application startup, Click automatically deploys all its JavaScript, CSS
+ * and image resources to the "<tt>/click</tt>" folder in the root directory of
+ * the webapp. Since GAE doesn't allow writing to disk, Click cannot
+ * automatically deploy its resources.
* <p/>
* Instead you will have to manually add Click's resources in your GAE
* application's "<tt>/war</tt>" folder. To do this create a <tt>click</tt>
@@ -138,8 +139,8 @@
* <p/>
* Next you need to copy the resources from the click-core.X.X.X.jar and
* click-extras.X.X.X.jar. Use your favorite IDE or ZIP utility to open the
- * jars and navigate to "<tt>META-INF/web/</tt>" where you will find the
- * "<tt>/click</tt>" folder with all the resources packaged for that jar. Simple
+ * jars and navigate to "<tt>META-INF/resources/</tt>" where you will find the
+ * "<tt>/click</tt>" folder with all the resources packaged for that jar. Simply
* copy the content of the "<tt>/click</tt>" folder to your GAE folder:
* "<tt>/war/click</tt>".
*/
Modified: incubator/click/trunk/click/extras/src/org/apache/click/extras/service/FreemarkerTemplateService.java
URL: http://svn.apache.org/viewvc/incubator/click/trunk/click/extras/src/org/apache/click/extras/service/FreemarkerTemplateService.java?rev=797998&r1=797997&r2=797998&view=diff
==============================================================================
--- incubator/click/trunk/click/extras/src/org/apache/click/extras/service/FreemarkerTemplateService.java (original)
+++ incubator/click/trunk/click/extras/src/org/apache/click/extras/service/FreemarkerTemplateService.java Sun Jul 26 22:45:43 2009
@@ -246,10 +246,10 @@
String templatePath = page.getTemplate();
if (!deployedErrorTemplate && templatePath.equals(ERROR_PAGE_PATH)) {
- templatePath = "META-INF/web" + ERROR_PAGE_PATH;
+ templatePath = "META-INF/resources" + ERROR_PAGE_PATH;
}
if (!deployedErrorTemplate && templatePath.equals(NOT_FOUND_PAGE_PATH)) {
- templatePath = "META-INF/web" + NOT_FOUND_PAGE_PATH;
+ templatePath = "META-INF/resources" + NOT_FOUND_PAGE_PATH;
}
// Get the template object
Modified: incubator/click/trunk/click/framework/src/org/apache/click/service/VelocityTemplateService.java
URL: http://svn.apache.org/viewvc/incubator/click/trunk/click/framework/src/org/apache/click/service/VelocityTemplateService.java?rev=797998&r1=797997&r2=797998&view=diff
==============================================================================
--- incubator/click/trunk/click/framework/src/org/apache/click/service/VelocityTemplateService.java (original)
+++ incubator/click/trunk/click/framework/src/org/apache/click/service/VelocityTemplateService.java Sun Jul 26 22:45:43 2009
@@ -318,10 +318,10 @@
String templatePath = page.getTemplate();
if (!deployedErrorTemplate && templatePath.equals(ERROR_PAGE_PATH)) {
- templatePath = "META-INF/web" + ERROR_PAGE_PATH;
+ templatePath = "META-INF/resources" + ERROR_PAGE_PATH;
}
if (!deployedErrorTemplate && templatePath.equals(NOT_FOUND_PAGE_PATH)) {
- templatePath = "META-INF/web" + NOT_FOUND_PAGE_PATH;
+ templatePath = "META-INF/resources" + NOT_FOUND_PAGE_PATH;
}
// May throw parsing error if template could not be obtained
Modified: incubator/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java
URL: http://svn.apache.org/viewvc/incubator/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java?rev=797998&r1=797997&r2=797998&view=diff
==============================================================================
--- incubator/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java (original)
+++ incubator/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java Sun Jul 26 22:45:43 2009
@@ -1237,7 +1237,7 @@
deployControls(rootElm);
deployControlSets(rootElm);
- deployAutoFiles();
+ deployResourcesOnClasspath();
} else {
String msg = "Could not auto deploy files to 'click' web folder."
+ " You may need to manually include click resources in your"
@@ -1247,73 +1247,101 @@
}
/**
- * Deploy from jars and directories all files that are specified in the
- * folder 'META-INF/web'.
+ * Deploy from the classpath all resources found under the directory
+ * 'META-INF/resources/'. For backwards compatibility resources under the
+ * directory 'META-INF/web/' are also deployed.
* <p/>
* Only jars and folders available on the classpath are scanned.
*
- * @throws java.lang.Exception if the files cannot be deployed
+ * @throws java.lang.IOException if the resources cannot be deployed
*/
- private void deployAutoFiles() throws Exception {
+ private void deployResourcesOnClasspath() throws IOException {
- // Find all jars under WEB-INF/lib and deploy all resources from these jars
long startTime = System.currentTimeMillis();
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
- Enumeration en = classLoader.getResources("META-INF/web");
+ // Find all jars and directories on the classpath that contains the
+ // directory "META-INF/resources/", and deploy those resources
+ String resourceDirectory = "META-INF/resources/";
+ Enumeration<URL> en = classLoader.getResources(resourceDirectory);
while (en.hasMoreElements()) {
- URL url = (URL) en.nextElement();
- String path = url.getFile();
+ URL url = en.nextElement();
+ deployResourcesOnClasspath(url, resourceDirectory);
+ }
- // Decode the url, esp on Windows where file paths can have their
- // spaces encoded. decodeURL will convert C:\Program%20Files\project
- // to C:\Program Files\project
- path = ClickUtils.decodeURL(path);
+ // For backward compatibility, find all jars and directories on the
+ // classpath that contains the directory "META-INF/web/", and deploy those
+ // resources
+ resourceDirectory = "META-INF/web/";
+ en = classLoader.getResources(resourceDirectory);
+ while (en.hasMoreElements()) {
+ URL url = en.nextElement();
+ deployResourcesOnClasspath(url, resourceDirectory);
+ }
- // Strip file prefix
- if (path.startsWith("file:")) {
- path = path.substring(5);
- }
+ //if (logService.isTraceEnabled()) {
+ logService.info("deployed files from jars and folders - "
+ + (System.currentTimeMillis() - startTime) + " ms");
+ //}
+ }
- String jarPath = null;
+ /**
+ * Deploy from the url all resources found under the prefix.
+ *
+ * @param url the url of the jar or folder which resources to deploy
+ * @param resourceDirectory the directory under which resources are found
+ * @throws IOException if resources from the url cannot be deployed
+ */
+ private void deployResourcesOnClasspath(URL url, String resourceDirectory)
+ throws IOException {
- // Check if path represents a jar
- if (path.indexOf('!') > 0) {
- jarPath = path.substring(0, path.indexOf('!'));
+ String path = url.getFile();
- File jar = new File(jarPath);
+ // Decode the url, esp on Windows where file paths can have their
+ // spaces encoded. decodeURL will convert C:\Program%20Files\project
+ // to C:\Program Files\project
+ path = ClickUtils.decodeURL(path);
- if (jar.exists()) {
- deployFilesInJar(jar);
+ // Strip file prefix
+ if (path.startsWith("file:")) {
+ path = path.substring(5);
+ }
+
+ String jarPath = null;
+
+ // Check if path represents a jar
+ if (path.indexOf('!') > 0) {
+ jarPath = path.substring(0, path.indexOf('!'));
+
+ File jar = new File(jarPath);
+
+ if (jar.exists()) {
+ deployFilesInJar(jar, resourceDirectory);
- } else {
- logService.error("Could not deploy the jar '" + jarPath
- + "'. Please ensure this file exists in the specified"
- + " location.");
- }
} else {
- File dir = new File(path);
- deployFilesInDir(dir);
+ logService.error("Could not deploy the jar '" + jarPath +
+ "'. Please ensure this file exists in the specified" +
+ " location.");
}
- }
-
- if (logService.isTraceEnabled()) {
- logService.trace("deployed files from jars and folders - "
- + (System.currentTimeMillis() - startTime) + " ms");
+ } else {
+ File dir = new File(path);
+ deployFilesInDir(dir, resourceDirectory);
}
}
/**
- * Deploy files from the specified directory.
- * <p/>
- * Only files specified in the folder 'META-INF/web' will be deployed.
+ * Deploy files from the specified directory which are stored under the given
+ * resourceDirectory.
*
* @param dir the directory which resources will be deployed
- * @throws java.lang.Exception if for some reason the files cannot be
+ * @param resourceDirectory the directory under which resources are found
+ * @throws java.lang.IOException if for some reason the files cannot be
* deployed
*/
- private void deployFilesInDir(File dir) throws Exception {
+ private void deployFilesInDir(File dir, String resourceDirectory)
+ throws IOException {
+
if (dir == null) {
throw new IllegalArgumentException("Dir cannot be null");
}
@@ -1329,12 +1357,12 @@
boolean logFeedback = true;
while (files.hasNext()) {
- // file example -> META-INF/web/click/table.css
+ // file example -> META-INF/resources/click/table.css
File file = (File) files.next();
String fileName = file.getCanonicalPath().replace('\\', '/');
- // Only deploy resources from "META-INF/web/"
- int pathIndex = fileName.indexOf("META-INF/web/");
+ // Only deploy resources from "META-INF/resources/"
+ int pathIndex = fileName.indexOf(resourceDirectory);
if (pathIndex != -1) {
if (logFeedback && logService.isTraceEnabled()) {
logService.trace("deploy files from folder -> "
@@ -1344,21 +1372,23 @@
logFeedback = false;
}
fileName = fileName.substring(pathIndex);
- deployFile(fileName, "META-INF/web/");
+ deployFile(fileName, resourceDirectory);
}
}
}
/**
- * Deploy files from the specified jar.
- * <p/>
- * Only files specified in the folder 'META-INF/web' will be deployed.
+ * Deploy files from the specified jar which are stored under the given
+ * resourceDirectory.
*
* @param jar the jar which resources will be deployed
- * @throws java.lang.Exception if for some reason the files cannot be
+ * @param resourceDirectory the directory under which resources are found
+ * @throws java.lang.IOException if for some reason the files cannot be
* deployed
*/
- private void deployFilesInJar(File jar) throws Exception {
+ private void deployFilesInJar(File jar, String resourceDirectory)
+ throws IOException {
+
if (jar == null) {
throw new IllegalArgumentException("Jar cannot be null");
}
@@ -1376,11 +1406,11 @@
// from jar
boolean logFeedback = true;
while ((jarEntry = jarInputStream.getNextJarEntry()) != null) {
- // jarEntryName example -> META-INF/web/click/table.css
+ // jarEntryName example -> META-INF/resources/click/table.css
String jarEntryName = jarEntry.getName();
- // Only deploy resources from "META-INF/web/"
- int pathIndex = jarEntryName.indexOf("META-INF/web/");
+ // Only deploy resources from "META-INF/resources/"
+ int pathIndex = jarEntryName.indexOf(resourceDirectory);
if (pathIndex == 0) {
if (logFeedback && logService.isTraceEnabled()) {
logService.trace("deploy files from jar -> "
@@ -1389,7 +1419,7 @@
// Only provide feedback once per jar
logFeedback = false;
}
- deployFile(jarEntryName, "META-INF/web/");
+ deployFile(jarEntryName, resourceDirectory);
}
}
} finally {