Return-Path: Delivered-To: apmail-tapestry-commits-archive@locus.apache.org Received: (qmail 3947 invoked from network); 18 Jun 2007 23:47:38 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 18 Jun 2007 23:47:38 -0000 Received: (qmail 43401 invoked by uid 500); 18 Jun 2007 23:47:41 -0000 Delivered-To: apmail-tapestry-commits-archive@tapestry.apache.org Received: (qmail 43393 invoked by uid 500); 18 Jun 2007 23:47:41 -0000 Mailing-List: contact commits-help@tapestry.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@tapestry.apache.org Delivered-To: mailing list commits@tapestry.apache.org Received: (qmail 43372 invoked by uid 99); 18 Jun 2007 23:47:41 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 18 Jun 2007 16:47:41 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 18 Jun 2007 16:47:37 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id EED921A981A; Mon, 18 Jun 2007 16:47:16 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r548533 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry/internal/services/PageTemplateLocatorImpl.java test/java/org/apache/tapestry/internal/services/PageTemplateLocatorImplTest.java Date: Mon, 18 Jun 2007 23:47:16 -0000 To: commits@tapestry.apache.org From: hlship@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070618234716.EED921A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: hlship Date: Mon Jun 18 16:47:15 2007 New Revision: 548533 URL: http://svn.apache.org/viewvc?view=rev&rev=548533 Log: TAPESTRY-1590: Component template is located based on logical page/component name, rather than on the class name itself Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageTemplateLocatorImpl.java tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PageTemplateLocatorImplTest.java Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageTemplateLocatorImpl.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageTemplateLocatorImpl.java?view=diff&rev=548533&r1=548532&r2=548533 ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageTemplateLocatorImpl.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/PageTemplateLocatorImpl.java Mon Jun 18 16:47:15 2007 @@ -20,6 +20,7 @@ import org.apache.tapestry.internal.InternalConstants; import org.apache.tapestry.ioc.Resource; +import org.apache.tapestry.ioc.internal.util.InternalUtils; import org.apache.tapestry.model.ComponentModel; import org.apache.tapestry.services.ComponentClassResolver; @@ -41,10 +42,21 @@ // A bit of a hack, but should work. - if (!className.contains(".pages.")) - return null; + if (!className.contains(".pages.")) return null; String logicalName = _resolver.resolvePageClassNameToPageName(className); + + int slashx = logicalName.lastIndexOf('/'); + + if (slashx > 0) + { + // However, the logical name isn't quite what we want. It may have been somewhat + // trimmed. + + String simpleClassName = InternalUtils.lastTerm(className); + + logicalName = logicalName.substring(0, slashx + 1) + simpleClassName; + } String path = format("WEB-INF/%s.%s", logicalName, InternalConstants.TEMPLATE_EXTENSION); Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PageTemplateLocatorImplTest.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PageTemplateLocatorImplTest.java?view=diff&rev=548533&r1=548532&r2=548533 ============================================================================== --- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PageTemplateLocatorImplTest.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/PageTemplateLocatorImplTest.java Mon Jun 18 16:47:15 2007 @@ -70,6 +70,41 @@ verify(); } + /** + * Because of how Tapestry maps class names to logical page names, part of the name may be have + * been stripped off and we want to make sure we get it back. + */ + @Test + public void uses_simple_class_name_in_folders() + { + ComponentModel model = mockComponentModel(); + Resource root = mockResource(); + Resource withExtension = mockResource(); + Resource forLocale = mockResource(); + Locale locale = Locale.FRENCH; + String className = "myapp.pages.foo.CreateFoo"; + + ComponentClassResolver resolver = mockComponentClassResolver(); + + train_getComponentClassName(model, className); + + // Notice: foo/Create not foo/CreateFoo; we're simulating how the redundancy gets stripped + // out of the class name. + train_resolvePageClassNameToPageName(resolver, className, "foo/Create"); + + // Abnd here's where we're showing that PTLI stitches it back together. + train_forFile(root, "WEB-INF/foo/CreateFoo.html", withExtension); + train_forLocale(withExtension, locale, forLocale); + + replay(); + + PageTemplateLocator locator = new PageTemplateLocatorImpl(root, resolver); + + assertSame(locator.findPageTemplateResource(model, locale), forLocale); + + verify(); + } + @Test public void template_not_found() {