[jira] [Reopened] (TAP5-1409) datefield - cannot select same day in different month

2011-09-01 Thread Robert Zeigler (JIRA)

 [ 
https://issues.apache.org/jira/browse/TAP5-1409?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Robert Zeigler reopened TAP5-1409:
--


Re-opened to address month popup issue.

> datefield - cannot select same day in different month
> -
>
> Key: TAP5-1409
> URL: https://issues.apache.org/jira/browse/TAP5-1409
> Project: Tapestry 5
>  Issue Type: Bug
>Affects Versions: 5.2.4
>Reporter: Paul Stanton
>Assignee: Robert Zeigler
> Fix For: 5.3
>
> Attachments: datepicker.js
>
>
> say your date format is m/d/ and the initial value is 1/1/2011 and you 
> want to change it to 2/1/2011.. that is not possible. changing month, the 
> selected 'day' is still selected and therefore not selectable.
> use case:
> initial date is 1/1/2011
> 1. open date picker
> 2. change month to feb
> 3. try to click on 1st of feb
> - nothing happens. 

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira




[CONF] Apache Tapestry > Release Notes 5.3

2011-09-01 Thread confluence







Release Notes 5.3
Page edited by Howard M. Lewis Ship


Comment:
add note about application folders


 Changes (2)
 




...
h3. New Component Class Validations  
Tapestry includes new validations of component classes to help cut down on many common errors; Tapestry now checks that component ids referencesd by an event handler method (the {{From}}_component id_ part of the method name) actually matches a component defined in the template ... this quickly identifies typos in method names. This check can be disabled with a configuration symbol, as existing 5.2 apps may have such errors and still operate (that is, they may have _dead_ event handler methods that will never be invoked). 
 
h3. Application Folder  Tapestry can now be configured to execute inside a folder, which can be useful when running Tapestry inside a web application that contains other servlet or filters, as a way to prevent conflicts.  
h2. Removed Functionality  
...


Full Content

Release Notes 5.2 Release Notes 

This is the consolidated list of changes between Tapestry versions 5.2 and 5.3.  To upgrade from 5.1 to 5.2, most users will be able to just update the Maven dependency in their POM file (or download the new JAR file) and the new version will just work.  However, please read carefully below before upgrading.

Contents


Breaking Changes
New Features
Removed Functionality
Release Notes: Tapestry 5.3.0
Sub-task
Bug
Improvement
New Feature
Task
Test


Breaking Changes

Some number of interfaces and APIs in Tapestry 5.3 will be removed in Tapestry 5.4 or later. These include:

	The "suppress redirects" functionality, which allows component event requests to respond directly with HTML, as in Tapestry 4
	The RenderSupport environmental (replaced with the _javascript_Support environmental)
	ClassFactory service and ClassFab interface (replaced with the PlasticProxyFactory service and PlasticClass interface)



Many classes and interfaces marked as deprecated in prior releases of Tapestry have been removed.

Because of the upgrade to Prototype 1.7, existing _javascript_ that uses value.toJSON() may break; replace with Object.toJSON(value).

New Features

User Alerts

Tapestry now has a central mechanism for handling user alerts; this includes the AlertManager service and the Alerts component.  Just add an Alerts component to your application's standard layout component and Tapestry takes care of the rest. Alerts can be added during both traditional and Ajax requests, and may be transient (displayed for a few seconds), normal, or sticky (persist until the user expressly dismisses them). Alerts support three severities: info, warn(ing) and error; the look and feel can be customized by overriding Tapestry's default CSS rules. 

Rendering comments

It is now possible to have Tapestry emit rendering comments; these are comments (such as ) that can assist you in debugging markup output on the client-side. This is enabled for all requests using the configuration symbol tapestry.component-render-tracing-enabled, and can be added to any request by adding the query parameter t:component-trace=true to the URL. This will significantly increase the size of the rendered markup, but can be very helpful with complex layouts to determine which component was responsible for which portion of the rendered page.

Adaptable service contributions

When making contributions to a service, you are no longer restricted to contributing a value that is assignable to the type associated with the configuration; objects of any type may be contributed, and the TypeCoercer service is used to coerce the value to the configuration's type.

Component debugging improvements

Because of how Tapestry instruments your pages and components, it has been difficult to debug Tapestry applications; any mutable field shows its default value in the debugger, regardless of what has been written to the field or read out of it. In Tapestry 5.3, when in development mode, Tapestry now shadows values read from or written to such fields into the fields themselves (this has also been fixed in the 5.2.5 maintenance release). This does not occur in production, to avoid potential memory leaks.

Reloading disabled in production

Tapestry no longer checks for changes to Tapestry component class files, templates, or message catalogs in production mode. It is assumed that Tapestry applications are packaged as WAR files in production, and that changing the WAR file causes the servlet container to redeploy the entire application. This change is to improve throughput and reduce memory consumption in production applications.

String-to-Enum coercions

The T

[CONF] Apache Tapestry > Limitations

2011-09-01 Thread confluence







Limitations
Page edited by Howard M. Lewis Ship


Comment:
add note that multiple t5 apps in one war not supported


 Changes (1)
 




...
{scrollbar}  
 h3. How do I run multiple Tapestry applications in the same web application?  This is not supported; there's only one place to identify the application root package, so even configuring multiple filters into multiple folders will not work.   Support for multiple Tapestry applications in the same web application was a specific non-goal in Tapestry 5 (it needlessly complicated Tapestry 4). Given how loosely connected Tapestry 5 pages are from each other, there doesn't seem to be an advantage to doing so ... and certainly, in terms of memory utilization, there is a significant down side, were it event possible.  
  {display-footnotes} 


Full Content

Request Processing FAQ Frequently Asked Questions Specific Errors FAQ

Limitations

How do I add new components to an existing page dynamically?

The short answer here is: you don't. The long answer here is you don't have to, to get the behavior you desire.

One of Tapestry basic values is high scalability: this is expressed in a number of ways, reflecting scalability concerns within a single server, and within a cluster of servers.

Although you code Tapestry pages and components as if they were ordinary POJOs




1


, as deployed by Tapestry they are closer to a traditional servlet: a single instance of each page services requests from multiple threads. Behind the scenes, Tapestry transforms you code, rewriting it on the fly.

What this means is that any incoming request must be handled by a single page instance. Therefore, Tapestry enforces the concept of static structure, dynamic behavior.

Tapestry provides quite a number of ways to vary what content is rendered, well beyond simple conditionals and loops. It is possible to "drag in" components from other pages when rendering a page (other FAQs will expand on this concept). The point is, that although a Tapestry page's structure is very rigid, the order in which the components of the page render does not have to be top to bottom.


Why doesn't my service implementation reload when I change it?

Main article: Service Implementation Reloading

Live service reloading has some limitations:

	The service must define a service interface.
	The service implementation must be on the file system (not inside a JAR).
	The implementation must be instantiated by Tapestry, not inside code (even code inside a module class).
	The service must use the default scope (reloading of perthread scopes is not supported).



Consider the following example module:



public static void bind(ServiceBinder binder)
{
  binder.bind(ArchiveService.class, ArchiveServiceImpl.class);
}

public static JobQueue buildJobQueue(MessageService messageService, Map configuration)
{
  JobQueueImpl service = new JobQueueImpl(configuration);

  messageService.addQueueListener(service);
 
  return service;
}



ArchiveService is reloadable, because Tapestry instantiates ArchiveServiceImpl itself.  On the other hand, Tapestry invokes buildJobQueue() and it is your code inside the method that instantiates JobQueueImpl, so the JobQueue service will not be reloadable.

Finally, only classes whose class files are stored directly on the file system, and not packaged inside JARs, are ever reloadable ... generally, only the services of the application being built (and not services from libraries) will be stored on the file system. This reflects the intent of reloading: as an agile development tool, but not something to be used in deployment.

Request Processing FAQ Frequently Asked Questions Specific Errors FAQ


How do I run multiple Tapestry applications in the same web application?

This is not supported; there's only one place to identify the application root package, so even configuring multiple filters into multiple folders will not work. 

Support for multiple Tapestry applications in the same web application was a specific non-goal in Tapestry 5 (it needlessly complicated Tapestry 4). Given how loosely connected Tapestry 5 pages are from each other, there doesn't seem to be an advantage to doing so ... and certainly, in terms of memory utilization, there is a significant down side, were it event possible.



  Footnotes
  

  Reference
  Notes

  
  

  

1

  
  
  Plain Old Java Object. Tapestry does not require you to extend any base classes or implement any special interfaces.
  

  




Change Notification Preferences

View Online
|
View Changes

[CONF] Apache Tapestry > Request Processing FAQ

2011-09-01 Thread confluence







Request Processing FAQ
Page edited by Howard M. Lewis Ship


Comment:
add link to application folder config


 Changes (1)
 




...
Alternately, you may contribute a [HttpServletRequestFilter|http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/HttpServletRequestFilter.html] to the [HttpServletRequestHandler|http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/HttpServletRequestHandler.html] pipeline. A filter that simply returns false from its {{service()}} method will cause Tapestry to hand off the request to the servlet container for normal handling.  You would use this approach when a simple regular _expression_ is not sufficient to identify which requests should be ignored.  
Alternately, you can configure the Tapestry application to execute inside a folder to avoid conflicts. See the notes on the [configuration page|Configuration#Configuration-SegregatingApplicationsIntoFolders].  
{scrollbar}  


Full Content

Integration with existing applications Frequently Asked Questions Limitations 

Request Processing

How do I get Tapestry to not handle a request?

Often, when integrating with outside libraries, or working with legacy code, you will want Tapestry to ignore a request and let the normal servlet or other processing handle the request.

The easy way to do this is to contribute a regular _expression_ to the IgnoredPathsFilter service, whose job is to exclude some requests.



public static void contributeIgnoredPathsFilter(Configuration configuration)
  {
configuration.add("/dwr/.*");
  }



Alternately, you may contribute a HttpServletRequestFilter to the HttpServletRequestHandler pipeline. A filter that simply returns false from its service() method will cause Tapestry to hand off the request to the servlet container for normal handling.  You would use this approach when a simple regular _expression_ is not sufficient to identify which requests should be ignored.

Alternately, you can configure the Tapestry application to execute inside a folder to avoid conflicts. See the notes on the configuration page.

Integration with existing applications Frequently Asked Questions Limitations 



Change Notification Preferences

View Online
|
View Changes









[CONF] Apache Tapestry > Integration with existing applications

2011-09-01 Thread confluence







Integration with existing applications
Page edited by Howard M. Lewis Ship


Comment:
add note about tapestry application folder to integration faq


 Changes (1)
 




...
  
h3. How do I put the Tapestry application inside a folder, to avoid conflicts?  Support for this was added in 5.3; see the notes on the [configuration page|Configuration#Configuration-SegregatingApplicationsIntoFolders].   
 {display-footnotes} 


Full Content

Tapestry Inversion of Control FAQ Frequently Asked Questions Request Processing FAQ

Integration with existing applications

You may have an existing JSP (or Struts, Spring MVC, etc.) application that you want to migrate to Tapestry. It's quite common to do this in stages, moving some functionality into Tapestry and leaving other parts, initially, in the other system. You may need to prevent Tapestry from handling certain requests.

How do I make a form on a JSP submit into Tapestry?

Tapestry's Form component does a lot of work while an HTML form is rendering to store all the information needed to handle the form submission in a later request; this is all very specific to Tapestry and the particular construction of your pages and forms; it can't be reproduced from a JSP.

Fortunately, that isn't necessary: you can have a standard HTML Form submit to a Tapestry page, you just don't get to use all of Tapestry's built in conversion and validation logic.

All you need to know is how Tapestry converts page class names to page names (that appear in the URL).  It's basically a matter of stripping off the root-package.pages prefix from the fully qualified class name. So, for example, if you are building a login screen as a JSP, you might want to have a Tapestry page to receive the user name and password.  Let's assume the Tapestry page class is com.example.myapp.pages.LoginForm; the page name will be loginform




1


, and the URL will be /loginform.



"post" action="" class="code-quote">"/loginform">

  "text" value="userName"/>
  
  "password" value="password"/>
  
  "submit" value="Login"/>





On the Tapestry side, we can expect that the LoginForm page will be activated; this means that its activate event handler will be invoked.  We can leverage this, and Tapestry's RequestParameter annotation:



public class LoginForm
{
  void onActivate(@RequestParameter("userName") String userName, @RequestParameter("password") String password)
  {
 // Validate and store credentials, etc.
  }
}



The RequestParameter annotation extracts the named query parameter from the request, coerces its type from String to the parameter type (here, also String) and passes it into the method.


How do I share information between a JSP application and the Tapestry application?

From the servlet container's point of view, there's no difference between a servlet, a JSP, and an entire Tapestry application. They all share the same ServletContext, and (once created), the same HttpSession.

On the Tapestry side, it is very easy to read and write session attributes:



public class ShowSearchResults
{
  @SessionAttribute
  private SearchResults searchResults;
}



Reading the instance variable searchResults is instrumented to instead read the corresponding HttpSession attribute named "searchResults".  You can also specify the value attribute of the SessionAttribute annotation to override the default attribute name.

Writing to the field causes the corresponding HttpSession attribute to be modified.

The session is automatically created as needed.

Tapestry Inversion of Control FAQ Frequently Asked Questions Request Processing FAQ


How do I put the Tapestry application inside a folder, to avoid conflicts?

Support for this was added in 5.3; see the notes on the configuration page. 



  Footnotes
  

  Reference
  Notes

  
  

  

1

  
  
  Tapestry is case insensitive, so LoginForm would work just as well.
  

  




Change Notification Preferences

View Online
|
View Changes









[CONF] Apache Tapestry > Ajax Components FAQ

2011-09-01 Thread confluence







Ajax Components FAQ
Page edited by Howard M. Lewis Ship


Comment:
document AjaxResponseRenderer as replacement for MultiZoneUpdate


 Changes (3)
 




...
From the event handler method, instead of returning a Block or a Component, return a multi-zone update:  
{code:controls=true|linenumbers=true} 
{code:title=Multiple Zone Update (5.2)|controls=true|linenumbers=true} 
  @Inject   private Block searchResults; 
...
{code}  
The above will work in Tapestry 5.3, but MultiZoneUpdate is deprecated and replaced:  {code:title=Multiple Zone Update (5.2)|controls=true|linenumbers=true}   @Inject   private Block searchResults;@Inject   private Block statusBlock;@Inject   private AjaxResponseRenderer ajaxResponseRenderer;void onSuccessFromSearchForm()   { searchHits = searchService.performSearch(query);  message = String.format("Found %,d matching documents", searchHits.size());  ajaxResponseRenderer.addRender("results", searchResults).addRender("status", statusBlock);   } {code}  AjaxResponseRenderer adds other useful commands as well.  It also has the advantage that a simple return value can be returned to render content for the Zone that triggered the request.  
h3. What's that weird number in the middle of the client ids after a Zone is updated?  
...


Full Content

_javascript_ FAQ Frequently Asked Questions Injection FAQ

Ajax Components

Main article: Ajax and Zones

Do I have to specify both id and t:id for Zone components?

The examples for the Zone component (in the Component Reference) consistently specify both id and t:id and this is probably a good idea.

Generally speaking, if you don't specify the client-side id (the id attribute), it will be the same as the Tapestry component id (t:id).

However, there are any number of exceptions to this rule. The Zone may be rendering inside a Loop (in which case, each rendering will have a unique client side id). The Zone may be rendering as part of a partial page render, in which case, a random unique id is inserted into the id. There are other examples where Tapestry component ids in nested components may also clash.

The point is, to be sure, specify the exact client id.  This will be the value for the zone parameter of the triggering component (such as a Form, PageLink, ActionLink, etc.).

How do I update the content of a Zone from an event handler method?

When a client-side link or form triggers an update, the return value from the event handler method is used to construct a partial page response; this partial page response includes markup content that is used to update the Zone's client-side  element.

Where does that content come from?  You inject it into your page.



"search" t:id="searchZone">
  "searchForm" zone="searchZone">
"query" size="20"/>
"submit" value="Search"/>
  


"searchResults">
  
"loop" source="searchHits" value="searchHit">${searchHit}
  






  @Inject
  private Block searchResults;

  Object onSuccessFromSearchForm()
  {
searchHits = searchService.performSearch(query);

return searchResults;
  }



So, when the search form is submitted, the resulting search hits are collected.  In the same request, the searchResults block is rendered, package, and sent to the client.  The form inside the client-side Zone  is replaced with the list of hits.

In many cases, you just want to re-render the Zone itself, to display updated content.  In that case, you don't need a separate , instead you can use @InjectComponent to inject the Zone object itself, and return the Zone's body:



  @InjectComponent
  private Zone statusZone;

  Object onActionFromUpdateStatus()
  {
return statusZone.getBody();
  }



How to I update multiple zones in a single event handler?

To do this, you must know, on the server, the client ids of each Zone. That's one of the reasons that you will generally set the Zone's client id (via the Zone's id parameter), rather than let Tapestry assign a client id for you.

From the event handler method, instead of returning a Block or a Component, return a multi-zone update:

Multiple Zone Update (5.2)

  @Inject
  private Block searchResults;

  @Inject
  private Block statusBlock;

  Object onSuccessFromSearchForm()
  {
searchHits = searchService.performSearch(query);

message = String.format("Found %,d matching documents", searchHits.size());

return new MultiZoneUpdate("results", searchResults).add("status", statusBlock);
  }



The above will work in Tapestry 5.3, but MultiZoneUpdate is deprecated and replaced:

Multiple Zone Update (5.2)

  @Inject
  private Block searchResults;

  @Inject
  private Block statusBlock;

  @Inj

[CONF] Apache Tapestry > Configuration

2011-09-01 Thread confluence







Configuration
Page edited by Howard M. Lewis Ship


Comment:
document app folders


 Changes (3)
 




...
 *Contents* 
{toc:minLevel=2|maxLevel=24} 
 h2. Changes to web.xml 
...
The version of the application, which is incorporated into URLs for context and classpath assets. Assets may be [compressed|Response Compression], and will have far-future expiration headers; they will be aggressively cached by the client web browser. You should change the application version on each new deployment of the application (that is, any time assets in the context change), to force clients to re-download changed versions of files. If you do not specify an application version, a _random_ one will be assigned on every deployment (which is good for development but very bad for production).  
h3. tapestry.application-folder  The folder, of the context, in which the Tapestry application executes. By default this is blank, meaning the Tapestry application executes in the root of the web application context. Setting this value allows the Tapestry application to be [segregated into a folder|TAPESTRY:Configuration#Configuration-SegregatingApplicationsIntoFolders], which can be useful when Tapestry is executed inside a web application with other servlets or filters.  {since:since=5.3}{since}  
h3. tapestry.blackbird-enabled  
...
 then Tapestry will load modules in the order: DevelopmentMode1Module1, DevelopmentMode1Module2, DevelopmentMode2Module1 and DevelopmentMode2Module2 
 h2. Segregating Applications Into Folders  In many cases where Tapestry is being adopted into an existing web application (possibly written in Tapestry 4 or some other framework), it is nice to segregate the Tapestry application into its own folder, to avoid conflicts with the existing application or servlets.   {since:since=5.3} Support for application folders was added in release 5.3. {since}  Setting this up is in two parts:  * Modifying the configuration of the {{}} for the Tapestry filter to match the specified folder. * Identifying the folder name using a Tapestry symbol value contribution.  So, if you wanted to run the Tapestry application inside folder {{t5ap}}, your web.xml would be modified to indicate the use of the folder:  {code}app /t5app/*{code}  ... and in your AppModule, you would inform Tapestry about the mapping change:  {code} public class AppModule {  @Contribute(SymbolProvider.class) @ApplicationDefaults public static void applicationDefaults(MappedConfiguration configuration) { configuration.add(SymbolConstants.APPLICATION_FOLDER, "t5app") } } {code}  The changes the servlet container to only forward requests inside the {{t5app}} folder to Tapestry; requests for other folders (or the root folder) will not be passed to Tapestry at all. It also lets Tapestry change the URLs it generates to include the necessary folder name.  In addition, if you choose to place page template files in the context, rather than on the classpath (as with component templates), then you will place those template files inside the {{t5app}} folder.  At this time, it is still not possible to run multiple Tapestry 5 applications within the same web application. 


Full Content


Related Articles


 Page:
 IoC cookbook - Service Configurations





 Page:
 Response Compression





 Page:
 Application Module Class Cheat Sheet





 Page:
 Tapestry IoC Configuration





 Page:
 Symbols





 Page:
 Configuration






Configuring Tapestry

Tapestry runs on top of the standard Java Servlet API. To the servlet container, such as Tomcat, Tapestry appears as a servlet filter. This gives Tapestry great flexibility in matching URLs without requiring lots of XML configuration.

Contents


Chang

[jira] [Resolved] (TAP5-1609) Generate Maven archetype from within gradle builds

2011-09-01 Thread Massimo Lusetti (JIRA)

 [ 
https://issues.apache.org/jira/browse/TAP5-1609?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Massimo Lusetti resolved TAP5-1609.
---

   Resolution: Fixed
Fix Version/s: 5.3

> Generate Maven archetype from within gradle builds
> --
>
> Key: TAP5-1609
> URL: https://issues.apache.org/jira/browse/TAP5-1609
> Project: Tapestry 5
>  Issue Type: New Feature
>Affects Versions: 5.3
>Reporter: Massimo Lusetti
>Assignee: Massimo Lusetti
> Fix For: 5.3
>
>
> It would be nice to have (again) the Maven archetype produced by the build 
> cycle.
> Maybe with a build.gradle script in it...

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira




svn commit: r1164263 - /tapestry/tapestry5/trunk/quickstart/build.gradle

2011-09-01 Thread mlusetti
Author: mlusetti
Date: Thu Sep  1 20:29:14 2011
New Revision: 1164263

URL: http://svn.apache.org/viewvc?rev=1164263&view=rev
Log:
TAP5-1609 Example task to publish newly generate archetype catalog to 
people.apache.org

Modified:
tapestry/tapestry5/trunk/quickstart/build.gradle

Modified: tapestry/tapestry5/trunk/quickstart/build.gradle
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/quickstart/build.gradle?rev=1164263&r1=1164262&r2=1164263&view=diff
==
--- tapestry/tapestry5/trunk/quickstart/build.gradle (original)
+++ tapestry/tapestry5/trunk/quickstart/build.gradle Thu Sep  1 20:29:14 2011
@@ -17,6 +17,47 @@ import org.apache.tools.ant.filters.Repl
 
 generatedDir = new File(buildDir, 'quickstart-generated')
 
+/*
+ * An example on how to scp the generated archetype-catalog.xml to the 
tapestry.apache.org
+ * site, we need a nice way to hook it in the right place
+ */
+//configurations {
+//scpTask
+//}
+//
+//dependencies {
+//scpTask 'org.apache.ant:ant-jsch:1.8.2', 'com.jcraft:jsch:0.1.42'
+//}
+//
+//
+//task publishArchetypeCatalog(dependsOn: 'archetype') {
+//description = 'Update archetype on minotaur'
+//
+//// As with properties to deploy to the maven repositories (staging or 
central)
+//// minotaurDeployUsername and minotaurDeployPassword should be specified 
in
+//// ~/.gradle/gradle.properties
+//// "minotaurDeployUsername"
+//// "minotaurDeployPassword"
+//// "minotaurSshPassphrase"
+//
+//scpToDir = minotaurDeployUserName + "@people.apache.org:/tmp"
+//
+//println scpToDir
+//
+//ant.taskdef(name: 'scp', classname: 
'org.apache.tools.ant.taskdefs.optional.ssh.Scp',
+//classpath: configurations.scpTask.asPath)
+//
+//ant.scp(todir: scpToDir,
+//keyfile: '${user.home}/.ssh/id_rsa',
+//// passphrase: minotaurSshPassphrase,
+//// password: minotaurDeployPassword,
+//verbose: 'true') {
+//fileset(dir: generatedDir) {
+//include(name: '**/archetype-catalog.xml')
+//}
+//}
+//}
+
 task generateArchetype(type: Copy) {
 srcDir = file('prototypes')
 
@@ -52,4 +93,4 @@ task archetype(type: Jar, dependsOn: 'ge
 exclude '**/archetype-catalog.xml'
 
 from generatedDir
-}
\ No newline at end of file
+}




svn commit: r1164262 - /tapestry/tapestry5/trunk/quickstart/prototypes/archetype-catalog.xml

2011-09-01 Thread mlusetti
Author: mlusetti
Date: Thu Sep  1 20:28:19 2011
New Revision: 1164262

URL: http://svn.apache.org/viewvc?rev=1164262&view=rev
Log:
TAP5-1609 Import all the current published archetypes at tapestry.apache.org

Modified:
tapestry/tapestry5/trunk/quickstart/prototypes/archetype-catalog.xml

Modified: tapestry/tapestry5/trunk/quickstart/prototypes/archetype-catalog.xml
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/quickstart/prototypes/archetype-catalog.xml?rev=1164262&r1=1164261&r2=1164262&view=diff
==
--- tapestry/tapestry5/trunk/quickstart/prototypes/archetype-catalog.xml 
(original)
+++ tapestry/tapestry5/trunk/quickstart/prototypes/archetype-catalog.xml Thu 
Sep  1 20:28:19 2011
@@ -13,15 +13,46 @@
 
 
 
-http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0";
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-  
xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0
 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd";>
-   
-   
-   org.apache.tapestry
-   quickstart
-   @quickstartVersion@
-   
-   Tapestry @quickstartVersion@ Quickstart 
archetype
-   
-   
+http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0";
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+   
xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0
 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd";>
+
+
+org.apache.tapestry
+quickstart
+5.2.5
+Tapestry Quickstart Project
+
+
+org.apache.tapestry
+quickstart
+5.2.4
+Tapestry Quickstart Project
+
+
+org.apache.tapestry
+quickstart
+5.1.0.5
+Tapestry Quickstart Project
+
+
+org.apache.tapestry
+quickstart
+5.0.19
+Tapestry Quickstart Project
+
+
+org.apache.tapestry
+tapestry-archetype
+4.1.6
+Tapestry 4.1.6 Archetype
+
+
+org.apache.tapestry
+quickstart
+@quickstartVersion@
+
+Tapestry @quickstartVersion@ Quickstart 
archetype
+
+
 




svn commit: r1164241 - /tapestry/tapestry5/trunk/build.gradle

2011-09-01 Thread hlship
Author: hlship
Date: Thu Sep  1 20:13:52 2011
New Revision: 1164241

URL: http://svn.apache.org/viewvc?rev=1164241&view=rev
Log:
Prep for 5.3-beta-2

Modified:
tapestry/tapestry5/trunk/build.gradle

Modified: tapestry/tapestry5/trunk/build.gradle
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/build.gradle?rev=1164241&r1=1164240&r2=1164241&view=diff
==
--- tapestry/tapestry5/trunk/build.gradle (original)
+++ tapestry/tapestry5/trunk/build.gradle Thu Sep  1 20:13:52 2011
@@ -1,8 +1,8 @@
 description = "Apache Tapestry 5 Project"
 
-// Remember that after generating a release, this should be incremented. Also 
don't forget to
+// Remember that when generating a release, this should be incremented. Also 
don't forget to
 // tag the release in Subversion.
-tapestryVersion = "5.3-beta-1"
+tapestryVersion = "5.3-beta-2"
 
 jettyVersion = '7.0.0.v20091005'
 tomcatVersion = '6.0.30'




[jira] [Closed] (TAP5-743) It is too much work to hide all T5 pages inside a virtual folder, for use in mixed-implementation deployments

2011-09-01 Thread Howard M. Lewis Ship (JIRA)

 [ 
https://issues.apache.org/jira/browse/TAP5-743?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Howard M. Lewis Ship closed TAP5-743.
-

   Resolution: Fixed
Fix Version/s: 5.3

> It is too much work to hide all T5 pages inside a virtual folder, for use in 
> mixed-implementation deployments
> -
>
> Key: TAP5-743
> URL: https://issues.apache.org/jira/browse/TAP5-743
> Project: Tapestry 5
>  Issue Type: Improvement
>  Components: tapestry-core
>Affects Versions: 5.1.0.5
>Reporter: Howard M. Lewis Ship
>Assignee: Howard M. Lewis Ship
> Fix For: 5.3
>
>
> In a mixed-implementation deployment (mixing Tapestry 5 with Tapestry 4 or 
> some other framework), it would be nice if the T5 apps could be "hidden" in a 
> virtual /t5 folder.
> This is doable, but awkward and ugly, today.
> Ideally, this would be a matter of changing the web.xml mapping to:
> /t5/*
> and making some form of configuration change, i.e.,
> configuration.add(ConfigurationConstants.TAPESTRY_APP_FOLDER, "t5");
> This would affect link generation, prefixing urls with "t5/" (including the 
> virtual /assets folder, which would be /t5/assets). Since the /t5 portion is 
> part of the URL mapping, it would not be part of the request pathInfo, so 
> existing dispatch code would not need to change.  
> Of course, Websphere has some bugs in this area that might cause some grief.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira




svn commit: r1164211 - /tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy

2011-09-01 Thread hlship
Author: hlship
Date: Thu Sep  1 19:01:54 2011
New Revision: 1164211

URL: http://svn.apache.org/viewvc?rev=1164211&view=rev
Log:
TAP5-743: Add test to verify that assets are downloaded from a URL inside the 
application folder

Modified:

tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy?rev=1164211&r1=1164210&r2=1164211&view=diff
==
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy
 Thu Sep  1 19:01:54 2011
@@ -2,6 +2,7 @@ package org.apache.tapestry5.integration
 
 import org.apache.tapestry5.integration.TapestryCoreTestCase
 import org.testng.annotations.Test
+import org.apache.tapestry5.test.TapestryTestConstants
 
 class AppFolderTests extends TapestryCoreTestCase
 {
@@ -45,4 +46,22 @@ class AppFolderTests extends TapestryCor
 
 assertTitle "Index Page"
 }
+
+@Test
+void asset_access() {
+openLinks "t5app/"
+
+// Ony one image on page
+String assetURL = getAttribute("//img/@src")
+
+assert assetURL.startsWith("/t5app/assets/")
+
+URL url = new URL(getBaseURL() + assetURL.substring(1))
+
+byte[] downloaded = url.bytes
+
+byte[] actual = new File(TapestryTestConstants.MODULE_BASE_DIR, 
"src/test/appfolder/images/t5-logo.png").bytes
+
+assertEquals downloaded, actual, "Contents of t5-logo.png do not match"
+}
 }




svn commit: r1164210 - /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java

2011-09-01 Thread hlship
Author: hlship
Date: Thu Sep  1 19:01:51 2011
New Revision: 1164210

URL: http://svn.apache.org/viewvc?rev=1164210&view=rev
Log:
TAP5-743: Make a correction to page render request decoding that appears to 
only occur when testing with Selenium

Modified:

tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java?rev=1164210&r1=1164209&r2=1164210&view=diff
==
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
 Thu Sep  1 19:01:51 2011
@@ -89,7 +89,7 @@ public class ComponentEventLinkEncoderIm
 
 boolean hasAppFolder = applicationFolder.equals("");
 
-applicationFolderPrefix = hasAppFolder ? null : SLASH + 
applicationFolder + SLASH;
+applicationFolderPrefix = hasAppFolder ? null : SLASH + 
applicationFolder;
 
 String applicationFolderPattern = hasAppFolder ? "" : 
applicationFolder + SLASH;
 
@@ -292,9 +292,17 @@ public class ComponentEventLinkEncoderIm
 
 assert path.substring(0, 
prefixLength).equalsIgnoreCase(applicationFolderPrefix);
 
+// This checks that the character after the prefix is a slash ... 
the extra complexity
+// only seems to occur in Selenium. There's some ambiguity about 
what to do with a request for
+// the application folder that doesn't end with a slash. Manuyal 
with Chrome and IE 8 shows that such
+// requests are passed through with a training slash,  automated 
testing with Selenium and FireFox
+// can include requests for the folder without the trailing slash.
+
+assert path.length() <= prefixLength || path.charAt(prefixLength) 
== '/';
+
 // Strip off the folder prefix (i.e., "/foldername"), leaving the 
rest of the path (i.e., "/en/pagename").
 
-path = path.substring(prefixLength - 1);
+path = path.substring(prefixLength);
 }
 
 




svn commit: r1164209 - in /tapestry/tapestry5/trunk/tapestry-core/src/test: appfolder/ appfolder/t5app/ conf/ groovy/org/apache/tapestry5/integration/appfolder/ resources/org/apache/tapestry5/integrat

2011-09-01 Thread hlship
Author: hlship
Date: Thu Sep  1 19:01:47 2011
New Revision: 1164209

URL: http://svn.apache.org/viewvc?rev=1164209&view=rev
Log:
TAP5-743: Add basic tests for application folder support

Added:

tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/static.html

tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/t5app/ContextTemplate.tml
tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml

tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/appfolder/pages/Index.tml

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/static.html
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/static.html?rev=1164209&r1=1164208&r2=1164209&view=diff
==
--- tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/static.html 
(original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/static.html Thu 
Sep  1 19:01:47 2011
@@ -1,4 +1,7 @@
 
+Static File
+
+
 
 Static File in Context
 
@@ -6,4 +9,5 @@
 to Tapestry application
 
 
+
 
\ No newline at end of file

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/t5app/ContextTemplate.tml
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/t5app/ContextTemplate.tml?rev=1164209&r1=1164208&r2=1164209&view=diff
==
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/t5app/ContextTemplate.tml
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/t5app/ContextTemplate.tml
 Thu Sep  1 19:01:47 2011
@@ -1,9 +1,11 @@
 http://tapestry.apache.org/schema/tapestry_5_3.xsd";>
+Context Template
+
 
 Context Template Demo
 
 
 
 back to index
-
+
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml?rev=1164209&r1=1164208&r2=1164209&view=diff
==
--- tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml Thu Sep  1 
19:01:47 2011
@@ -8,93 +8,100 @@
 
 
-  
-
-  
-  
-  
-  
-  
-
-  
-
-  
-
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-
-  
-
-  
-  
-
-
-
-  
-
-  
-
-  
-
-
-
-  
-
-  
-
-  
-
-
-
-  
-
-  
-
-  
-
-  
-
-  
-
-  
-
-
-  
-
-  
-
-  
-
-
-  
-
-  
-
-  
-
-  
-
-  
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy?rev=1164209&view=auto
==
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy
 Thu Sep  1 19:01:47 2011
@@ -0,0 +1,48 @@
+package org.apache.tapestry5.integration.appfolder
+
+import org.apache.tapestry5.integration.TapestryCoreTestCase
+import org.testng.annotations.Test
+
+class AppFolderTests extends TapestryCoreTestCase
+{
+
+/**
+ * Tests basic navigation, and also tests ability to place a page template 
in the context, under the configured
+ * a

svn commit: r1164207 - in /tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages: ContextTemplate.groovy ContextTemplate.java

2011-09-01 Thread hlship
Author: hlship
Date: Thu Sep  1 19:01:42 2011
New Revision: 1164207

URL: http://svn.apache.org/viewvc?rev=1164207&view=rev
Log:
TAP5-743: Change the ContextTemplate demo page to a Groovy class (the original 
intention)

Added:

tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.groovy
  - copied, changed from r1164206, 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.java
Modified:

tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.java

Copied: 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.groovy
 (from r1164206, 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.java)
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.groovy?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.groovy&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.java&r1=1164206&r2=1164207&rev=1164207&view=diff
==
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.groovy
 Thu Sep  1 19:01:42 2011
@@ -1,8 +1,5 @@
 package org.apache.tapestry5.integration.appfolder.pages;
 
-/**
- *
- */
 public class ContextTemplate
 {
 }




svn commit: r1164206 - /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java

2011-09-01 Thread hlship
Author: hlship
Date: Thu Sep  1 19:01:38 2011
New Revision: 1164206

URL: http://svn.apache.org/viewvc?rev=1164206&view=rev
Log:
TAP5-743: Add note about servlet container case sensitivity

Modified:

tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java?rev=1164206&r1=1164205&r2=1164206&view=diff
==
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
 Thu Sep  1 19:01:38 2011
@@ -356,6 +356,9 @@ public class SymbolConstants
  * This also affects the search for page templates (which are allowed 
within the web context). When set to a non-blank value, page templates are 
searched for in the folder, rather than in the root context.
  * 
  * The default value is the empty string, which preserves Tapestry 5.2 
behavior (and continues to be appropriate for most applications).
+ * 
+ * Note that while Tapestry is case-insensitive, the servlet container is 
not, so the configured value must exactly match
+ * the folder name inside the {@code } value, including 
case.
  *
  * @since 5.3
  */




svn commit: r1164204 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/services/templates/ main/java/org/apache/tapestry5/services/ test/appfolder/ test/appfold

2011-09-01 Thread hlship
Author: hlship
Date: Thu Sep  1 19:01:29 2011
New Revision: 1164204

URL: http://svn.apache.org/viewvc?rev=1164204&view=rev
Log:
TAP5-743: Allow for page templates in the folder, under the context
Begin adding tests

Added:
tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/
tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/WEB-INF/
tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/WEB-INF/web.xml
tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/images/
tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/images/t5-logo.png
tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/t5app/

tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/t5app/ContextTemplate.tml

tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/

tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/

tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.java

tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/Index.groovy

tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/services/

tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/services/AppModule.groovy

tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/appfolder/

tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/appfolder/pages/

tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/appfolder/pages/Index.tml
Modified:

tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java

tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java?rev=1164204&r1=1164203&r2=1164204&view=diff
==
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java
 Thu Sep  1 19:01:29 2011
@@ -14,8 +14,6 @@
 
 package org.apache.tapestry5.internal.services.templates;
 
-import java.util.Locale;
-
 import org.apache.tapestry5.TapestryConstants;
 import org.apache.tapestry5.ioc.Resource;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
@@ -23,9 +21,11 @@ import org.apache.tapestry5.model.Compon
 import org.apache.tapestry5.services.ComponentClassResolver;
 import org.apache.tapestry5.services.templates.ComponentTemplateLocator;
 
+import java.util.Locale;
+
 /**
  * The special case for pages, where the template is searched for in the web 
application context.
- * 
+ *
  * @since 5.2.0
  */
 public class PageTemplateLocator implements ComponentTemplateLocator
@@ -34,15 +34,22 @@ public class PageTemplateLocator impleme
 
 private final ComponentClassResolver resolver;
 
-public PageTemplateLocator(Resource contextRoot, ComponentClassResolver 
resolver)
+private final String prefix;
+
+public PageTemplateLocator(Resource contextRoot, ComponentClassResolver 
resolver, String applicationFolder)
 {
 this.contextRoot = contextRoot;
 this.resolver = resolver;
+
+prefix = applicationFolder.equals("") ? "" : applicationFolder + "/";
 }
 
 public Resource locateTemplate(ComponentModel model, Locale locale)
 {
-if (!model.isPage()) { return null; }
+if (!model.isPage())
+{
+return null;
+}
 
 String className = model.getComponentClassName();
 
@@ -60,7 +67,7 @@ public class PageTemplateLocator impleme
 logicalName = logicalName.substring(0, slashx + 1) + 
simpleClassName;
 }
 
-String path = String.format("%s.%s", logicalName, 
TapestryConstants.TEMPLATE_EXTENSION);
+String path = prefix + logicalName + "." + 
TapestryConstants.TEMPLATE_EXTENSION;
 
 return contextRoot.forFile(path).forLocale(locale);
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=1164204&r1=1164203&r2=1164204&view=diff
=

svn commit: r1164203 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/ main/java/org/apache/tapestry5/internal/services/ main/java/org/apache/tapestry5/internal/service

2011-09-01 Thread hlship
Author: hlship
Date: Thu Sep  1 19:01:14 2011
New Revision: 1164203

URL: http://svn.apache.org/viewvc?rev=1164203&view=rev
Log:
TAP5-743: First pass at application folder work

Modified:

tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java

tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetDispatcher.java

tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java

tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/AssetPathConstructorImpl.java

tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java

tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java

tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventDispatcherTest.java

tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java

tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ContextAssetFactoryTest.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java?rev=1164203&r1=1164202&r2=1164203&view=diff
==
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
 Thu Sep  1 19:01:14 2011
@@ -304,6 +304,9 @@ public class SymbolConstants
  * object that was accessed during the request.
  * 
  * This is provided as a performance enhancement for servers that do not 
use clustered sessions.
+ * 
+ * The default is {@code true}, to preserve 5.2 behavior. For 
non-clustered applications (the majority), this value should be
+ * overridden to {@code false}. A future release of Tapestry may change 
the default.
  *
  * @since 5.3
  */
@@ -332,7 +335,7 @@ public class SymbolConstants
  * can cause a page load error if there is no matching component in the 
component's template. Although this is correct behavior,
  * it can make the upgrade from 5.2 to 5.3 difficult if an existing app 
had some "left over" event handler methods. Changing
  * this symbol to {@code false} is a temporary approach to resolving this 
problem.
- * 
+ * 
  * This symbol will be ignored in release 5.4 and removed in 5.5.
  *
  * @since 5.3
@@ -340,4 +343,21 @@ public class SymbolConstants
  */
 @Deprecated
 public static final String UNKNOWN_COMPONENT_ID_CHECK_ENABLED = 
"tapestry.compatibility.unknown-component-id-check-enabled";
+
+/**
+ * The name of a folder in which the Tapestry application executes. Prior 
to 5.3, a Tapestry application always responded to all
+ * URLs in the context under the context root; by setting this to the name 
of a folder, the T5 URLs will be inside that folder only, and should
+ * match a corresponding entry in the {@code web.xml} configuration file.  
This is useful when running multiple servlets within the same web application 
(such as when migrating
+ * from Tapestry 4 or some other framework, to Tapestry 5).
+ * Effectively, if this symbol is set to a value, that folder name will 
be placed after the context path
+ * (typically "/") and before the locale, page name, or other prefix.  For 
example, if this symbol is set to "app", the {@code web.xml } 
should be set to {@code /app/*}, and Tapestry will
+ * only be in invoked by the servlet container for requests inside the 
virtual {@code app} folder.
+ * 
+ * This also affects the search for page templates (which are allowed 
within the web context). When set to a non-blank value, page templates are 
searched for in the folder, rather than in the root context.
+ * 
+ * The default value is the empty string, which preserves Tapestry 5.2 
behavior (and continues to be appropriate for most applications).
+ *
+ * @since 5.3
+ */
+public static final String APPLICATION_FOLDER = 
"tapestry.application-folder";
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetDispatcher.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetDispatcher.java?rev=1164203&r1=1164202&r2=1164203&view=diff
==
--- 
tapestry/tapestry5/trunk/ta

[jira] [Commented] (TAP5-1625) RubyonRails-like Asset Pipeline

2011-09-01 Thread Thiago H. de Paula Figueiredo (JIRA)

[ 
https://issues.apache.org/jira/browse/TAP5-1625?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13095407#comment-13095407
 ] 

Thiago H. de Paula Figueiredo commented on TAP5-1625:
-

Tapestry already combines all JavaScript files in a given page into a single 
one for a long time. Howard already said he wanted to support something like 
SCSS in Tapestry. And Tapestry already provides hooks for any asset 
transformations, so all you're suggesting that isn't provided yet could be 
provided as a separate project, packaged as a drop-in JAR.

> RubyonRails-like Asset Pipeline
> ---
>
> Key: TAP5-1625
> URL: https://issues.apache.org/jira/browse/TAP5-1625
> Project: Tapestry 5
>  Issue Type: Wish
>  Components: tapestry-core
>Reporter: Toby
>Assignee: Howard M. Lewis Ship
>Priority: Minor
>
> see:
> http://weblog.rubyonrails.org/2011/5/22/rails-3-1-release-candidate
> "The Asset Pipeline
> The star feature of 3.1 is the asset pipeline powered by Sprockets 2.0. It 
> makes CSS and JavaScript first-class code citizens and enables proper 
> organization, including use in plugins and engines. See my RailsConf keynote 
> for a full tour. This comes with SCSS as the default for stylesheets and 
> CoffeeScript as the default for JavaScript. Much documentation is on the way 
> for this."
> http://www.youtube.com/watch?v=cGdCI2HhfAU
> something like this would be nice in Tapestry - at least a way to 
> automatically generate a single JS file to increase load speed would be 
> important as a core-feature.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Resolved] (TAP5-1625) RubyonRails-like Asset Pipeline

2011-09-01 Thread Howard M. Lewis Ship (JIRA)

 [ 
https://issues.apache.org/jira/browse/TAP5-1625?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Howard M. Lewis Ship resolved TAP5-1625.


Resolution: Invalid
  Assignee: Howard M. Lewis Ship

Tapestry 5.3 already has the key components of this, of course its not 
implemented the same way. Tapestry has JavaScript aggregation (since 5.1, and 
improved in 5.2), and in 5.3 adds ResourceTransformer that allow dynamic 
conversion of files from one type to another (such as CoffeeScript to 
JavaScript). In addition, there's now direct support for use of YUICompressor 
(as a ResourceMinimizer).

It's a bit different than Rails, in that your code references the resource, and 
Tapestry uses configuration to determine how to convert it into simple JS and 
CSS for the client.  In Rails, you add additional file extensions to guide 
Rails on how to transform the resource, and (I believe), JS aggregation is done 
at build time, not runtime.

> RubyonRails-like Asset Pipeline
> ---
>
> Key: TAP5-1625
> URL: https://issues.apache.org/jira/browse/TAP5-1625
> Project: Tapestry 5
>  Issue Type: Wish
>  Components: tapestry-core
>Reporter: Toby
>Assignee: Howard M. Lewis Ship
>Priority: Minor
>
> see:
> http://weblog.rubyonrails.org/2011/5/22/rails-3-1-release-candidate
> "The Asset Pipeline
> The star feature of 3.1 is the asset pipeline powered by Sprockets 2.0. It 
> makes CSS and JavaScript first-class code citizens and enables proper 
> organization, including use in plugins and engines. See my RailsConf keynote 
> for a full tour. This comes with SCSS as the default for stylesheets and 
> CoffeeScript as the default for JavaScript. Much documentation is on the way 
> for this."
> http://www.youtube.com/watch?v=cGdCI2HhfAU
> something like this would be nice in Tapestry - at least a way to 
> automatically generate a single JS file to increase load speed would be 
> important as a core-feature.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Commented] (TAP5-1409) datefield - cannot select same day in different month

2011-09-01 Thread b kopelove (JIRA)

[ 
https://issues.apache.org/jira/browse/TAP5-1409?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13095402#comment-13095402
 ] 

b kopelove commented on TAP5-1409:
--

This fix is great but it introduced a different bug.  When one clicks on the 
month name at the top of the calendar, a popup list of surrounding months is 
shown.  Upon clicking one of these months, the calendar disappears because the 
javascript thinks that you have clicked "outside" the calendar and exits.

I identified a simple fix to not exit when a popup month is selected:

---change:
331  if (parent.className == 'datePicker') { 

---to:
331  if (parent.className == 'datePicker' || parent.className == 
'labelPopup') { 



> datefield - cannot select same day in different month
> -
>
> Key: TAP5-1409
> URL: https://issues.apache.org/jira/browse/TAP5-1409
> Project: Tapestry 5
>  Issue Type: Bug
>Affects Versions: 5.2.4
>Reporter: Paul Stanton
>Assignee: Robert Zeigler
> Fix For: 5.3
>
> Attachments: datepicker.js
>
>
> say your date format is m/d/ and the initial value is 1/1/2011 and you 
> want to change it to 2/1/2011.. that is not possible. changing month, the 
> selected 'day' is still selected and therefore not selectable.
> use case:
> initial date is 1/1/2011
> 1. open date picker
> 2. change month to feb
> 3. try to click on 1st of feb
> - nothing happens. 

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira




[jira] [Created] (TAP5-1625) RubyonRails-like Asset Pipeline

2011-09-01 Thread Toby (JIRA)
RubyonRails-like Asset Pipeline
---

 Key: TAP5-1625
 URL: https://issues.apache.org/jira/browse/TAP5-1625
 Project: Tapestry 5
  Issue Type: Wish
  Components: tapestry-core
Reporter: Toby
Priority: Minor


see:

http://weblog.rubyonrails.org/2011/5/22/rails-3-1-release-candidate

"The Asset Pipeline

The star feature of 3.1 is the asset pipeline powered by Sprockets 2.0. It 
makes CSS and JavaScript first-class code citizens and enables proper 
organization, including use in plugins and engines. See my RailsConf keynote 
for a full tour. This comes with SCSS as the default for stylesheets and 
CoffeeScript as the default for JavaScript. Much documentation is on the way 
for this."

http://www.youtube.com/watch?v=cGdCI2HhfAU

something like this would be nice in Tapestry - at least a way to automatically 
generate a single JS file to increase load speed would be important as a 
core-feature.


--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira