Almost all the tests pass even with the changes I made. The ones that are failing are in TestPageSpecificationResolver because, of course I changed things in that file.
I've spent the better part of the last two hours trying to put the tests in sync with the changes I made but easymock is doing things that are strange to me, I'm tired and I didn't get any Spindle work done today so I'm giving up for now. Geoff A question, how many tests are there? I ran 1459 in 138 seconds. On 10/14/05, Geoff Longman <[EMAIL PROTECTED]> wrote: > Have been doing some investigation. In my copy of the code I went > ahead and moved the page class lookup chain into > PageSpecificationResolverImpl and had made some interesting > observations. > > Note that in the project I fixed some typos in the project I sent > earlier and renamed the page class from com.myfoo.Home to > com.myfoo.MyHome to align the classname with the spec name > (MyHome.page). > > the following now all work. yay! > > <span jwcid="@PageLink" page="Home">Jump</span> > > <span jwcid="@PageLink" page="WEB-INF/MyHome">Jump</span> > > <span jwcid="@PageLink" page="MyHome">Jump</span> > > And with specification caching in the SpecificationSource (which has > been there forever of course) it's all very efficient. Three page > names are installed in the namespace but the same spec is associated > each time. > > I curious though, ComponentConstructorFactoryImpl caches enhanced > classed in Map using a specification as the key. Why not cache using > the fully qualified classname as the key? Is there a case where one > would need to enhance a class more than once? > > > > Geoff > > > > > > > On 10/13/05, Geoff Longman <[EMAIL PROTECTED]> wrote: > > I think the arguments I've given have missed one point. > > > > If I reference a specless page in T3, it looks in the context root for > > the template. I guess that in T4, referencing specless > > "com/myfoo/MyPage" should result in the template being loaded from > > context:/com/myfoo/MyPage.html? > > > > This is doable with the changes I have described, with one more change :-) > > > > Currently when a standin page specification is created it is given the > > location context:/pageName.page > > > > and the template pageName.html is resolved relative to that location. > > > > The change I would suggest is that if the page name has a path element > > then set the resource location of the standin to reflect the path > > part. > > > > So "com/myfoo/MyPage"'s standin would have a specification location of > > context:com/myfoo/MyPage.page > > > > and the template would be found at context:/com/myfoo/MyPage.html > > > > Geoff > > > > > > > > > > > > > > On 10/13/05, Geoff Longman <[EMAIL PROTECTED]> wrote: > > > Hmm, page name --> page class --> specification. > > > > > > This is contrary to the way Tapestry has worked since 3.0 and I'm not > > > sure this could be achieved and still maintain any notion of backwards > > > compatibility. The 3.0 mechanism looks for specs first in various > > > places based on the name. People have been placing a spec in one of > > > those locations and using the spec name as the page name. Not the only > > > way to do it of course but a common method. > > > > > > Isn't the underlying goal to able to handle pages that do not have > > > specs? Tapestry 3.0 was already halfway there so the goal is really to > > > *improve* how Tapestry handles pages that do not have specs. And that > > > improvement is to be able to infer a page class in these cases. An > > > added bonus is that we would like to allow pages that *do* have specs > > > to use the same mechanism to infer thier page classes. > > > > > > T4 still looks for the spec first in all cases and currently the page > > > class is not inferred until the page instance is needed. > > > > > > page name->page spec --------*PageLoader*------page class (maybe > > > inferred)----->page instance > > > > > > Since standin specs are created as required before page instances are > > > created I think it makes sense to do this: > > > > > > page name->page spec->page class(maybe > > > inferred)--------*PageLoader*------>page instance > > > > > > with the inference based on the name of the spec (which is the page > > > name if a stand-in was created). > > > > > > I'm thinking that this will achieve the goal, maintain backwards > > > compatibility, and altogether avoid the nasty problem I first > > > described. > > > > > > The last argument I can make is: Is the behaviour I discovered an > > > intended feature of T4? If not then I think it's a bug. > > > > > > Geoff > > > > > > On 10/12/05, Howard Lewis Ship <[EMAIL PROTECTED]> wrote: > > > > Have to think about it; basically, I'm tring to shift Tapestry towards > > > > the following: page name --> page class --> specification; right now > > > > its backwards, page name --> specification --> page class. I can't > > > > tell if your suggestion is more correct or not; sounds like it might > > > > be. > > > > > > > > On 10/12/05, Geoff Longman <[EMAIL PROTECTED]> wrote: > > > > > ok. here's a suggestion. why not move the page classname lookup into > > > > > the PageSpecificationResolverImpl? Use the same lookup chain but in a > > > > > different place. > > > > > > > > > > I think this would handle all the cases. > > > > > > > > > > Pages: > > > > > > > > > > resolver finds a page spec and does the resolve on the name of the > > > > > spec file. I don't think this is unreasonable. All the pages I've ever > > > > > built had classes based on the name of the .page file and not on the > > > > > name used to reference the page at runtime. > > > > > > > > > > resolver finds a specless page - currently the > > > > > PageSpecificationResolver creates a stand in spec with a location > > > > > relative to it's namespace with a name of _simpleName + ".page". So > > > > > you could still do the classname resolution on the simple name. > > > > > > > > > > Plus, now that I've taken a closer look at the code for > > > > > ComponentSpecificationResolverImpl I see that it is doing exactly what > > > > > I have described above (but without a chain). > > > > > > > > > > IMHO leaving things the way they are is leaving a bit of 'magic' in > > > > > the system that is of questionable value to end users. More likely > > > > > it'll be a cause of frustration due to a lack of consistency. Perhaps > > > > > a rare cause of frustration but a cause none the less. > > > > > > > > > > thoughts? > > > > > > > > > > Geoff > > > > > > > > > > On 10/11/05, Geoff Longman <[EMAIL PROTECTED]> wrote: > > > > > > I'm trying to get a handle on how the page class provider chain > > > > > > works. > > > > > > > > > > > > attached is a 3k zip of a little project that displays a problem I > > > > > > found with the way classes are discovered. (If the zip does not get > > > > > > through email me directly and I'll pass it along). > > > > > > > > > > > > The classname used for discovery is the page name passed into the > > > > > > PageLoader . In the example I'm referencing the 'home' page in 3 > > > > > > ways, > > > > > > only one of which comes up with the right page class. > > > > > > > > > > > > In capsule... > > > > > > > > > > > > in application file.. > > > > > > > > > > > > <meta key="org.apache.tapestry.page-class-packages" > > > > > > value="com.myfoo"/> > > > > > > <page name="Home" specification-path="WEB-INF/MyHome.page" /> > > > > > > > > > > > > there exists a class com.myfoo.Home, which has a property foo. > > > > > > MyHome.html references the foo property. > > > > > > > > > > > > referencing the page as "Home" works as the page name "Home" is used > > > > > > during class discovery. > > > > > > > > > > > > but, referencing the page as "WEB-INF/MyHome" or "MyHome" does not > > > > > > work as there are no classes named 'com.myfoo.WEB-INF/MyHome' or > > > > > > 'com.myfoo.MyHome'. BasePage is used and the expression ognl:foo > > > > > > fails > > > > > > in the template. > > > > > > > > > > > > The Exception page as usual is thorough but not really helpful in > > > > > > tracking down this problem unless you know what you are looking for. > > > > > > > > > > > > Perhaps it would be better to base the class discovery on the name > > > > > > of > > > > > > the Specification file? But what happens if there is no > > > > > > specification > > > > > > file? > > > > > > > > > > > > Geoff > > > > > > > > > > > > -- > > > > > > The Spindle guy. http://spindle.sf.net > > > > > > Get help with Spindle: > > > > > > http://lists.sourceforge.net/mailman/listinfo/spindle-user > > > > > > Announcement Feed: > > > > > > http://www.jroller.com/rss/glongman?catname=/Announcements > > > > > > Feature Updates: http://spindle.sf.net/updates > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > The Spindle guy. http://spindle.sf.net > > > > > Get help with Spindle: > > > > > http://lists.sourceforge.net/mailman/listinfo/spindle-user > > > > > Announcement Feed: > > > > > http://www.jroller.com/rss/glongman?catname=/Announcements > > > > > Feature Updates: http://spindle.sf.net/updates > > > > > > > > > > --------------------------------------------------------------------- > > > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > > > > > > > > > > -- > > > > Howard M. Lewis Ship > > > > Independent J2EE / Open-Source Java Consultant > > > > Creator, Jakarta Tapestry > > > > Creator, Jakarta HiveMind > > > > > > > > Professional Tapestry training, mentoring, support > > > > and project work. http://howardlewisship.com > > > > > > > > --------------------------------------------------------------------- > > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > > > > > -- > > > The Spindle guy. http://spindle.sf.net > > > Get help with Spindle: > > > http://lists.sourceforge.net/mailman/listinfo/spindle-user > > > Announcement Feed: > > > http://www.jroller.com/rss/glongman?catname=/Announcements > > > Feature Updates: http://spindle.sf.net/updates > > > > > > > > > -- > > The Spindle guy. http://spindle.sf.net > > Get help with Spindle: > > http://lists.sourceforge.net/mailman/listinfo/spindle-user > > Announcement Feed: > > http://www.jroller.com/rss/glongman?catname=/Announcements > > Feature Updates: http://spindle.sf.net/updates > > > > > -- > The Spindle guy. http://spindle.sf.net > Get help with Spindle: > http://lists.sourceforge.net/mailman/listinfo/spindle-user > Announcement Feed: > http://www.jroller.com/rss/glongman?catname=/Announcements > Feature Updates: http://spindle.sf.net/updates > -- The Spindle guy. http://spindle.sf.net Get help with Spindle: http://lists.sourceforge.net/mailman/listinfo/spindle-user Announcement Feed: http://www.jroller.com/rss/glongman?catname=/Announcements Feature Updates: http://spindle.sf.net/updates --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]