Thanks! I'll check that in with the next set of bug fixes.
On 8/8/05, Xi Ping Wang <[EMAIL PROTECTED]> wrote:
> DescribedLocation.java has a @Override annotation ,so it can't be
> compiled with JDK 1.3 .
>
> On 8 Aug 2005 16:12:26 -0000, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> > hlship 2005/08/08 09:12:26
> >
> > Modified: . status.xml
> > framework/src/test/org/apache/tapestry/resolver
> > TestComponentSpecificationResolver.java
> > annotations/src/java/org/apache/tapestry/annotations
> > AssetAnnotationWorker.java
> > AnnotationEnhancementWorker.java
> > framework/src/java/org/apache/tapestry/services
> > ClassFinder.java
> > framework/src/java/org/apache/tapestry/resolver
> > ComponentSpecificationResolverImpl.java
> > annotations/src/test/org/apache/tapestry/annotations
> > TestAnnotationEnhancementWorker.java
> > TestAssetAnnotationWorker.java
> > framework/src/descriptor/META-INF tapestry.page.xml
> > examples/Workbench/src/context/css workbench.css
> > Added:
> > examples/Workbench/src/java/org/apache/tapestry/workbench/components
> > ShowError.java
> > framework/src/test/org/apache/tapestry/util
> > TestDescribedLocation.java
> > framework/src/java/org/apache/tapestry/util
> > DescribedLocation.java
> > Removed: examples/Workbench/src/context/WEB-INF ShowError.jwc
> > ShowError.html
> > annotations/src/java/org/apache/tapestry/annotations
> > AnnotationLocation.java
> > annotations/src/test/org/apache/tapestry/annotations
> > TestAnnotationLocation.java
> > Log:
> > TAPESTRY-354: Component w/o .jwc file not visible
> >
> > Revision Changes Path
> > 1.190 +1 -0 jakarta-tapestry/status.xml
> >
> > Index: status.xml
> > ===================================================================
> > RCS file: /home/cvs/jakarta-tapestry/status.xml,v
> > retrieving revision 1.189
> > retrieving revision 1.190
> > diff -u -r1.189 -r1.190
> > --- status.xml 6 Aug 2005 16:21:46 -0000 1.189
> > +++ status.xml 8 Aug 2005 16:12:25 -0000 1.190
> > @@ -72,6 +72,7 @@
> > <action type="update" dev="HLS">Enable Eclipse project-specific
> > compile options, active additional checks as errors, and fix those errors
> > in the code base</action>
> > <action type="fix" dev="HLS" fixes-bug="TAPESTRY-534">WebRequest
> > interface doesn't expose getRemoteUser(), isUserInRole() or
> > getUserPrincipal()</action>
> > <action type="fix" dev="HLS" fixes-bug="TAPESTRY-530"
> > due-to="Raphael Jean">Namespace messages are retrieved using page's locale
> > rather than engine's locale</action>
> > + <action type="fix" dev="HLS" fixes-bug="TAPESTRY-354">Component
> > w/o .jwc file not visible</action>
> > </release>
> > <release version="4.0-beta-3" date="Jul 22 2005">
> > <action type="fix" dev="HLS" fixes-bug="TAPESTRY-398"
> > due-to="Jonas Maurus">HiveMind configuration error breaks the useage of the
> > state: binding prefix</action>
> >
> >
> >
> > 1.6 +105 -14
> > jakarta-tapestry/framework/src/test/org/apache/tapestry/resolver/TestComponentSpecificationResolver.java
> >
> > Index: TestComponentSpecificationResolver.java
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/resolver/TestComponentSpecificationResolver.java,v
> > retrieving revision 1.5
> > retrieving revision 1.6
> > diff -u -r1.5 -r1.6
> > --- TestComponentSpecificationResolver.java 12 Jun 2005 15:27:16 -0000
> > 1.5
> > +++ TestComponentSpecificationResolver.java 8 Aug 2005 16:12:25 -0000
> > 1.6
> > @@ -18,9 +18,11 @@
> > import org.apache.hivemind.ApplicationRuntimeException;
> > import org.apache.hivemind.Location;
> > import org.apache.hivemind.Resource;
> > +import org.apache.tapestry.BaseComponent;
> > import org.apache.tapestry.INamespace;
> > import org.apache.tapestry.IRequestCycle;
> > import org.apache.tapestry.engine.ISpecificationSource;
> > +import org.apache.tapestry.services.ClassFinder;
> > import org.apache.tapestry.spec.IComponentSpecification;
> > import org.easymock.MockControl;
> >
> > @@ -62,13 +64,13 @@
> > }
> >
> > private ISpecificationResolverDelegate newDelegate(IRequestCycle
> > cycle, INamespace namespace,
> > - IComponentSpecification spec)
> > + String type, IComponentSpecification spec)
> > {
> > MockControl control =
> > newControl(ISpecificationResolverDelegate.class);
> > ISpecificationResolverDelegate delegate =
> > (ISpecificationResolverDelegate) control
> > .getMock();
> >
> > - delegate.findComponentSpecification(cycle, namespace,
> > "DelegateComponent");
> > + delegate.findComponentSpecification(cycle, namespace, type);
> > control.setReturnValue(spec);
> >
> > return delegate;
> > @@ -125,8 +127,9 @@
> > trainIsDeprecated(specc, spec, true);
> >
> > Log log = (Log) newMock(Log.class);
> > -
> > - log.error("Component 'MyComponent' (at
> > classpath:/org/apache/tapestry/resolver/TestComponentSpecificationResolver,
> > line 1) is deprecated, and will likely be removed in a later release.
> > Consult its documentation to find a replacement component.");
> > +
> > + log
> > + .error("Component 'MyComponent' (at
> > classpath:/org/apache/tapestry/resolver/TestComponentSpecificationResolver,
> > line 1) is deprecated, and will likely be removed in a later release.
> > Consult its documentation to find a replacement component.");
> >
> > replayControls();
> >
> > @@ -259,6 +262,9 @@
> > namespace.isApplicationNamespace();
> > namespacec.setReturnValue(false);
> >
> > + ClassFinder finder = newClassFinder("org.foo",
> > "FrameworkComponent", null);
> > + trainGetPackages(namespacec, namespace, "org.foo");
> > +
> > ISpecificationSource source = newSource(framework);
> >
> > framework.containsComponentType("FrameworkComponent");
> > @@ -278,6 +284,7 @@
> > ComponentSpecificationResolverImpl resolver = new
> > ComponentSpecificationResolverImpl();
> > resolver.setLog(log);
> > resolver.setSpecificationSource(source);
> > + resolver.setClassFinder(finder);
> >
> > resolver.resolve(cycle, namespace, "FrameworkComponent", l);
> >
> > @@ -304,7 +311,11 @@
> > MockControl frameworkc = newControl(INamespace.class);
> > INamespace framework = (INamespace) frameworkc.getMock();
> >
> > - ISpecificationResolverDelegate delegate = newDelegate(cycle,
> > namespace, spec);
> > + ISpecificationResolverDelegate delegate = newDelegate(
> > + cycle,
> > + namespace,
> > + "DelegateComponent",
> > + spec);
> >
> > Resource namespaceLocation =
> > newResource("LibraryStandin.library");
> >
> > @@ -329,9 +340,12 @@
> >
> > log.isDebugEnabled();
> > logc.setReturnValue(false);
> > -
> > +
> > + ClassFinder finder = newClassFinder("org.foo",
> > "DelegateComponent", null);
> > + trainGetPackages(namespacec, namespace, "org.foo");
> > +
> > namespace.installComponentSpecification("DelegateComponent",
> > spec);
> > -
> > +
> > trainIsDeprecated(specc, spec, false);
> >
> > replayControls();
> > @@ -340,6 +354,7 @@
> > resolver.setLog(log);
> > resolver.setSpecificationSource(source);
> > resolver.setDelegate(delegate);
> > + resolver.setClassFinder(finder);
> >
> > resolver.resolve(cycle, namespace, "DelegateComponent", l);
> >
> > @@ -349,6 +364,23 @@
> > verifyControls();
> > }
> >
> > + private void trainGetPackages(MockControl namespacec, INamespace
> > namespace, String packages)
> > + {
> > +
> > namespace.getPropertyValue("org.apache.tapestry.component-class-packages");
> > + namespacec.setReturnValue(packages);
> > + }
> > +
> > + private ClassFinder newClassFinder(String packages, String
> > className, Class result)
> > + {
> > + MockControl control = newControl(ClassFinder.class);
> > + ClassFinder finder = (ClassFinder) control.getMock();
> > +
> > + finder.findClass(packages, className);
> > + control.setReturnValue(result);
> > +
> > + return finder;
> > + }
> > +
> > public void testNotFound()
> > {
> > IRequestCycle cycle = newCycle();
> > @@ -363,45 +395,53 @@
> > MockControl frameworkc = newControl(INamespace.class);
> > INamespace framework = (INamespace) frameworkc.getMock();
> >
> > - ISpecificationResolverDelegate delegate = newDelegate(cycle,
> > namespace, null);
> > + ISpecificationResolverDelegate delegate = newDelegate(
> > + cycle,
> > + namespace,
> > + "NotFoundComponent",
> > + null);
> >
> > Resource namespaceLocation =
> > newResource("LibraryStandin.library");
> >
> > - namespace.containsComponentType("DelegateComponent");
> > + namespace.containsComponentType("NotFoundComponent");
> > namespacec.setReturnValue(false);
> >
> > - train(log, logc,
> > ResolverMessages.resolvingComponent("DelegateComponent", namespace));
> > + train(log, logc,
> > ResolverMessages.resolvingComponent("NotFoundComponent", namespace));
> >
> > namespace.getSpecificationLocation();
> > namespacec.setReturnValue(namespaceLocation);
> >
> > train(log, logc,
> > ResolverMessages.checkingResource(namespaceLocation
> > - .getRelativeResource("DelegateComponent.jwc")));
> > + .getRelativeResource("NotFoundComponent.jwc")));
> >
> > namespace.isApplicationNamespace();
> > namespacec.setReturnValue(false);
> >
> > ISpecificationSource source = newSource(framework);
> >
> > - framework.containsComponentType("DelegateComponent");
> > + framework.containsComponentType("NotFoundComponent");
> > frameworkc.setReturnValue(false);
> >
> > + ClassFinder finder = newClassFinder("org.foo",
> > "NotFoundComponent", null);
> > + trainGetPackages(namespacec, namespace, "org.foo");
> > +
> > replayControls();
> >
> > ComponentSpecificationResolverImpl resolver = new
> > ComponentSpecificationResolverImpl();
> > resolver.setLog(log);
> > resolver.setSpecificationSource(source);
> > resolver.setDelegate(delegate);
> > + resolver.setClassFinder(finder);
> >
> > try
> > {
> > - resolver.resolve(cycle, namespace, "DelegateComponent", l);
> > + resolver.resolve(cycle, namespace, "NotFoundComponent", l);
> > unreachable();
> > }
> > catch (ApplicationRuntimeException ex)
> > {
> > assertEquals(
> > - "Component 'DelegateComponent' not found in EasyMock
> > for interface org.apache.tapestry.INamespace.",
> > + "Component 'NotFoundComponent' not found in EasyMock
> > for interface org.apache.tapestry.INamespace.",
> > ex.getMessage());
> > assertSame(l, ex.getLocation());
> > }
> > @@ -599,4 +639,55 @@
> >
> > verifyControls();
> > }
> > +
> > + private Resource newResource()
> > + {
> > + return (Resource) newMock(Resource.class);
> > + }
> > +
> > + public void testFoundComponentClass()
> > + {
> > + Resource componentResource = newResource();
> > + Resource namespaceResource =
> > newResource("folder/MyComponent.jwc", componentResource);
> > +
> > + MockControl namespacec = newControl(INamespace.class);
> > + INamespace namespace = (INamespace) namespacec.getMock();
> > +
> > + trainGetPackages(namespacec, namespace, "org.foo");
> > + ClassFinder finder = newClassFinder("org.foo",
> > "folder.MyComponent", BaseComponent.class);
> > +
> > + trainGetResource(namespacec, namespace, namespaceResource);
> > +
> > + replayControls();
> > +
> > + ComponentSpecificationResolverImpl resolver = new
> > ComponentSpecificationResolverImpl();
> > + resolver.setClassFinder(finder);
> > +
> > + IComponentSpecification spec = resolver.searchForComponentClass(
> > + namespace,
> > + "folder/MyComponent");
> > +
> > + assertEquals(BaseComponent.class.getName(),
> > spec.getComponentClassName());
> > + assertSame(componentResource, spec.getSpecificationLocation());
> > + assertSame(componentResource, spec.getLocation().getResource());
> > +
> > + verifyControls();
> > + }
> > +
> > + private void trainGetResource(MockControl control, INamespace
> > namespace, Resource resource)
> > + {
> > + namespace.getSpecificationLocation();
> > + control.setReturnValue(resource);
> > + }
> > +
> > + private Resource newResource(String relativePath, Resource
> > relativeResource)
> > + {
> > + MockControl control = newControl(Resource.class);
> > + Resource resource = (Resource) control.getMock();
> > +
> > + resource.getRelativeResource(relativePath);
> > + control.setReturnValue(relativeResource);
> > +
> > + return resource;
> > + }
> > }
> > \ No newline at end of file
> >
> >
> >
> > 1.6 +2 -1
> > jakarta-tapestry/annotations/src/java/org/apache/tapestry/annotations/AssetAnnotationWorker.java
> >
> > Index: AssetAnnotationWorker.java
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-tapestry/annotations/src/java/org/apache/tapestry/annotations/AssetAnnotationWorker.java,v
> > retrieving revision 1.5
> > retrieving revision 1.6
> > diff -u -r1.5 -r1.6
> > --- AssetAnnotationWorker.java 6 Aug 2005 06:58:25 -0000 1.5
> > +++ AssetAnnotationWorker.java 8 Aug 2005 16:12:25 -0000 1.6
> > @@ -22,6 +22,7 @@
> > import org.apache.tapestry.spec.AssetSpecification;
> > import org.apache.tapestry.spec.IAssetSpecification;
> > import org.apache.tapestry.spec.IComponentSpecification;
> > +import org.apache.tapestry.util.DescribedLocation;
> >
> > /**
> > * Uses the [EMAIL PROTECTED] org.apache.tapestry.annotations.Asset}
> > annotation to create a new
> > @@ -48,7 +49,7 @@
> > // of a location) to figure out what kind of asset they are.
> >
> > Resource specResource = spec.getSpecificationLocation();
> > - Location assetLocation = new AnnotationLocation(specResource,
> > location.toString());
> > + Location assetLocation = new DescribedLocation(specResource,
> > location.toString());
> >
> > as.setLocation(assetLocation);
> >
> >
> >
> >
> > 1.5 +3 -2
> > jakarta-tapestry/annotations/src/java/org/apache/tapestry/annotations/AnnotationEnhancementWorker.java
> >
> > Index: AnnotationEnhancementWorker.java
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-tapestry/annotations/src/java/org/apache/tapestry/annotations/AnnotationEnhancementWorker.java,v
> > retrieving revision 1.4
> > retrieving revision 1.5
> > diff -u -r1.4 -r1.5
> > --- AnnotationEnhancementWorker.java 2 Jul 2005 22:51:23 -0000 1.4
> > +++ AnnotationEnhancementWorker.java 8 Aug 2005 16:12:25 -0000 1.5
> > @@ -26,6 +26,7 @@
> > import org.apache.tapestry.enhance.EnhancementOperation;
> > import org.apache.tapestry.enhance.EnhancementWorker;
> > import org.apache.tapestry.spec.IComponentSpecification;
> > +import org.apache.tapestry.util.DescribedLocation;
> >
> > /**
> > * Implementation of [EMAIL PROTECTED]
> > org.apache.tapestry.enhance.EnhancementWorker} that finds class and
> > @@ -84,7 +85,7 @@
> >
> > try
> > {
> > - Location location = new AnnotationLocation(classResource,
> > AnnotationMessages
> > + Location location = new DescribedLocation(classResource,
> > AnnotationMessages
> > .classAnnotation(annotation, clazz));
> >
> > worker.performEnhancement(op, spec, clazz, location);
> > @@ -119,7 +120,7 @@
> >
> > try
> > {
> > - Location location = new AnnotationLocation(classResource,
> > AnnotationMessages
> > + Location location = new DescribedLocation(classResource,
> > AnnotationMessages
> > .methodAnnotation(annotation, method));
> > worker.performEnhancement(op, spec, method, location);
> > }
> >
> >
> >
> > 1.3 +1 -1
> > jakarta-tapestry/framework/src/java/org/apache/tapestry/services/ClassFinder.java
> >
> > Index: ClassFinder.java
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/services/ClassFinder.java,v
> > retrieving revision 1.2
> > retrieving revision 1.3
> > diff -u -r1.2 -r1.3
> > --- ClassFinder.java 16 Jul 2005 00:23:24 -0000 1.2
> > +++ ClassFinder.java 8 Aug 2005 16:12:25 -0000 1.3
> > @@ -26,7 +26,7 @@
> > * Searches for a class within a list of packages, which always
> > includes the default package.
> > *
> > * @param packageList
> > - * a comma seperated list of package named (i.e.,
> > "java.lang,java.util")
> > + * a comma seperated list of package names (i.e.,
> > "java.lang,java.util")
> > * @param className
> > * the name of the class to search for. This may be just
> > a class name, or even a
> > * partial class name (i.e., "impl.Foo").
> >
> >
> >
> > 1.1
> > jakarta-tapestry/examples/Workbench/src/java/org/apache/tapestry/workbench/components/ShowError.java
> >
> > Index: ShowError.java
> > ===================================================================
> > // Copyright 2005 The Apache Software Foundation
> > //
> > // Licensed under the Apache License, Version 2.0 (the "License");
> > // you may not use this file except in compliance with the License.
> > // You may obtain a copy of the License at
> > //
> > // http://www.apache.org/licenses/LICENSE-2.0
> > //
> > // Unless required by applicable law or agreed to in writing, software
> > // distributed under the License is distributed on an "AS IS" BASIS,
> > // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied.
> > // See the License for the specific language governing permissions and
> > // limitations under the License.
> >
> > package org.apache.tapestry.workbench.components;
> >
> > import java.util.List;
> >
> > import org.apache.tapestry.AbstractComponent;
> > import org.apache.tapestry.IMarkupWriter;
> > import org.apache.tapestry.IRender;
> > import org.apache.tapestry.IRequestCycle;
> > import org.apache.tapestry.annotations.ComponentClass;
> > import org.apache.tapestry.annotations.Parameter;
> > import org.apache.tapestry.valid.IValidationDelegate;
> >
> > /**
> > * This would normally be done entirely <em>without</em> using code.
> > Trying to demonstrate that
> > * you can create components without a .jwc file by matching the
> > component type against a class name
> > * (in the proper package, as defined in the application specification).
> > *
> > * @author Howard Lewis Ship
> > * @since 4.0
> > */
> > @ComponentClass(allowBody = false, allowInformalParameters = false)
> > public abstract class ShowError extends AbstractComponent
> > {
> > @Parameter(required = true)
> > public abstract IValidationDelegate getDelegate();
> >
> > @Override
> > protected void renderComponent(IMarkupWriter writer, IRequestCycle
> > cycle)
> > {
> > if (cycle.isRewinding())
> > return;
> >
> > IValidationDelegate delegate = getDelegate();
> >
> > if (!delegate.getHasErrors())
> > return;
> >
> > writer.begin("table");
> > writer.attribute("class", "inputerror");
> >
> > writer.begin("tr");
> > writer.attribute("valign", "top");
> >
> > writer.begin("td");
> > writer.beginEmpty("img");
> > writer.attribute("src", "images/Warning.gif");
> > writer.attribute("width", 42);
> > writer.attribute("height", 41);
> > writer.end();
> >
> > writer.begin("td");
> > writer.attribute("class", "message");
> >
> > List<IRender> errorRenders = delegate.getErrorRenderers();
> >
> > errorRenders.get(0).render(writer, cycle);
> >
> > writer.end("table");
> > }
> > }
> >
> >
> >
> > 1.10 +76 -39
> > jakarta-tapestry/framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolverImpl.java
> >
> > Index: ComponentSpecificationResolverImpl.java
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/resolver/ComponentSpecificationResolverImpl.java,v
> > retrieving revision 1.9
> > retrieving revision 1.10
> > diff -u -r1.9 -r1.10
> > --- ComponentSpecificationResolverImpl.java 6 Aug 2005 06:58:28 -0000
> > 1.9
> > +++ ComponentSpecificationResolverImpl.java 8 Aug 2005 16:12:25 -0000
> > 1.10
> > @@ -18,8 +18,11 @@
> > import org.apache.hivemind.ApplicationRuntimeException;
> > import org.apache.hivemind.Location;
> > import org.apache.hivemind.Resource;
> > +import org.apache.hivemind.impl.LocationImpl;
> > import org.apache.tapestry.INamespace;
> > import org.apache.tapestry.IRequestCycle;
> > +import org.apache.tapestry.services.ClassFinder;
> > +import org.apache.tapestry.spec.ComponentSpecification;
> > import org.apache.tapestry.spec.IComponentSpecification;
> >
> > /**
> > @@ -34,11 +37,13 @@
> > * specification. The search, based on the <i>simple-name </i> of the
> > page, goes as follows:
> > * <ul>
> > * <li>As declared in the application specification
> > - * <li><i>type </i>.jwc in the same folder as the application
> > specification
> > - * <li><i>type </i> jwc in the WEB-INF/ <i>servlet-name </i> directory
> > of the context root
> > - * <li><i>type </i>.jwc in WEB-INF
> > - * <li><i>type </i>.jwc in the application root (within the context root)
> > + * <li><i>type</i>.jwc in the same folder as the application
> > specification
> > + * <li><i>type</i> jwc in the WEB-INF/ <i>servlet-name </i> directory of
> > the context root
> > + * <li><i>type</i>.jwc in WEB-INF
> > + * <li><i>type</i>.jwc in the application root (within the context root)
> > * <li>By searching the framework namespace
> > + * <li>By searching for a named class file within the
> > org.apache.tapestry.component-class-packages
> > + * property (defined within the namespace)
> > * </ul>
> > * The search for components in library namespaces is more abbreviated:
> > * <li>As declared in the library specification
> > @@ -59,6 +64,8 @@
> > /** Set by resolve() */
> > private String _type;
> >
> > + private ClassFinder _classFinder;
> > +
> > protected void reset()
> > {
> > _type = null;
> > @@ -133,27 +140,36 @@
> > setNamespace(namespace);
> >
> > if (namespace.containsComponentType(type))
> > + {
> > setSpecification(namespace.getComponentSpecification(type));
> > - else
> > - searchForComponent(cycle);
> > + return;
> > + }
> > +
> > + IComponentSpecification spec = searchForComponent(cycle);
> >
> > // If not found after search, check to see if it's in
> > // the framework instead.
> >
> > - if (getSpecification() == null)
> > + if (spec == null)
> > {
> > -
> > throw new
> > ApplicationRuntimeException(ResolverMessages.noSuchComponentType(
> > type,
> > namespace), location, null);
> >
> > }
> > +
> > + setSpecification(spec);
> > +
> > + // Install it into the namespace, to short-circuit any future
> > search.
> > +
> > + install();
> > }
> >
> > // Hm. This could maybe go elsewhere, say onto ISpecificationSource
> >
> > - private void searchForComponent(IRequestCycle cycle)
> > + private IComponentSpecification searchForComponent(IRequestCycle
> > cycle)
> > {
> > + IComponentSpecification result = null;
> > INamespace namespace = getNamespace();
> >
> > if (_log.isDebugEnabled())
> > @@ -165,64 +181,80 @@
> > // Look for appropriate file in same folder as the library (or
> > application)
> > // specificaiton.
> >
> > - if (found(namespaceLocation.getRelativeResource(expectedName)))
> > - return;
> > + result =
> > check(namespaceLocation.getRelativeResource(expectedName));
> > +
> > + if (result != null)
> > + return result;
> >
> > if (namespace.isApplicationNamespace())
> > {
> >
> > // The application namespace gets some extra searching.
> >
> > - if
> > (found(getWebInfAppLocation().getRelativeResource(expectedName)))
> > - return;
> > + result =
> > check(getWebInfAppLocation().getRelativeResource(expectedName));
> >
> > - if
> > (found(getWebInfLocation().getRelativeResource(expectedName)))
> > - return;
> > + if (result == null)
> > + result =
> > check(getWebInfLocation().getRelativeResource(expectedName));
> >
> > - if
> > (found(getContextRoot().getRelativeResource(expectedName)))
> > - return;
> > + if (result == null)
> > + result =
> > check((getContextRoot().getRelativeResource(expectedName)));
> > +
> > + if (result != null)
> > + return result;
> > }
> >
> > + result = searchForComponentClass(namespace, _type);
> > +
> > + if (result != null)
> > + return result;
> > +
> > // Not in the library or app spec; does it match a component
> > // provided by the Framework?
> >
> > INamespace framework =
> > getSpecificationSource().getFrameworkNamespace();
> >
> > if (framework.containsComponentType(_type))
> > - {
> > - setSpecification(framework.getComponentSpecification(_type));
> > + return framework.getComponentSpecification(_type);
> >
> > - install();
> > + return getDelegate().findComponentSpecification(cycle,
> > namespace, _type);
> > + }
> >
> > - return;
> > - }
> > + IComponentSpecification searchForComponentClass(INamespace
> > namespace, String type)
> > + {
> > + String packages = namespace
> > +
> > .getPropertyValue("org.apache.tapestry.component-class-packages");
> >
> > - IComponentSpecification specification =
> > getDelegate().findComponentSpecification(
> > - cycle,
> > - namespace,
> > - _type);
> > + String className = type.replace('/', '.');
> >
> > - if (specification != null)
> > - {
> > - setSpecification(specification);
> > - install();
> > - return;
> > - }
> > + Class componentClass = _classFinder.findClass(packages,
> > className);
> > +
> > + if (componentClass == null)
> > + return null;
> > +
> > + IComponentSpecification spec = new ComponentSpecification();
> > +
> > + Resource namespaceResource =
> > namespace.getSpecificationLocation();
> > +
> > + Resource componentResource =
> > namespaceResource.getRelativeResource(type + ".jwc");
> > +
> > + Location location = new LocationImpl(componentResource);
> > +
> > + spec.setLocation(location);
> > + spec.setSpecificationLocation(componentResource);
> > + spec.setComponentClassName(componentClass.getName());
> > +
> > + return spec;
> > }
> >
> > - private boolean found(Resource resource)
> > + private IComponentSpecification check(Resource resource)
> > {
> > if (_log.isDebugEnabled())
> > _log.debug("Checking: " + resource);
> >
> > if (resource.getResourceURL() == null)
> > - return false;
> > + return null;
> >
> > -
> > setSpecification(getSpecificationSource().getComponentSpecification(resource));
> > -
> > - install();
> > -
> > - return true;
> > + return
> > getSpecificationSource().getComponentSpecification(resource);
> > }
> >
> > private void install()
> > @@ -246,4 +278,9 @@
> > _log = log;
> > }
> >
> > + public void setClassFinder(ClassFinder classFinder)
> > + {
> > + _classFinder = classFinder;
> > + }
> > +
> > }
> > \ No newline at end of file
> >
> >
> >
> > 1.6 +10 -9
> > jakarta-tapestry/annotations/src/test/org/apache/tapestry/annotations/TestAnnotationEnhancementWorker.java
> >
> > Index: TestAnnotationEnhancementWorker.java
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-tapestry/annotations/src/test/org/apache/tapestry/annotations/TestAnnotationEnhancementWorker.java,v
> > retrieving revision 1.5
> > retrieving revision 1.6
> > diff -u -r1.5 -r1.6
> > --- TestAnnotationEnhancementWorker.java 2 Jul 2005 22:51:24 -0000
> > 1.5
> > +++ TestAnnotationEnhancementWorker.java 8 Aug 2005 16:12:25 -0000
> > 1.6
> > @@ -25,6 +25,7 @@
> > import org.apache.hivemind.impl.DefaultClassResolver;
> > import org.apache.tapestry.enhance.EnhancementOperation;
> > import org.apache.tapestry.spec.IComponentSpecification;
> > +import org.apache.tapestry.util.DescribedLocation;
> > import org.easymock.MockControl;
> >
> > /**
> > @@ -81,7 +82,7 @@
> >
> > Method m = findMethod(AnnotatedPage.class, "getInjectedObject");
> >
> > - AnnotationLocation location = newMethodLocation(
> > + DescribedLocation location = newMethodLocation(
> > resolver,
> > AnnotatedPage.class,
> > m,
> > @@ -100,22 +101,22 @@
> > verifyControls();
> > }
> >
> > - protected AnnotationLocation newMethodLocation(ClassResolver
> > resolver, Class baseClass,
> > + protected DescribedLocation newMethodLocation(ClassResolver
> > resolver, Class baseClass,
> > Method m, Class annotationClass)
> > {
> > Resource classResource = newResource(resolver, baseClass);
> >
> > - return new AnnotationLocation(classResource,
> > AnnotationMessages.methodAnnotation(m
> > + return new DescribedLocation(classResource,
> > AnnotationMessages.methodAnnotation(m
> > .getAnnotation(annotationClass), m));
> > }
> >
> > - private AnnotationLocation newClassLocation(ClassResolver resolver,
> > Class baseClass,
> > + private DescribedLocation newClassLocation(ClassResolver resolver,
> > Class baseClass,
> > Class annotationClass)
> > {
> > Resource classResource = newResource(resolver, baseClass);
> > Annotation annotation = baseClass.getAnnotation(annotationClass);
> >
> > - return new AnnotationLocation(classResource,
> > AnnotationMessages.classAnnotation(
> > + return new DescribedLocation(classResource,
> > AnnotationMessages.classAnnotation(
> > annotation,
> > baseClass));
> > }
> > @@ -131,7 +132,7 @@
> >
> > Method m = findMethod(AnnotatedPageSubclass.class,
> > "getInjectedObject");
> >
> > - AnnotationLocation location = newMethodLocation(
> > + DescribedLocation location = newMethodLocation(
> > resolver,
> > AnnotatedPageSubclass.class,
> > m,
> > @@ -166,7 +167,7 @@
> >
> > Method m = findMethod(AnnotatedPage.class, "getInjectedObject");
> >
> > - AnnotationLocation location = newMethodLocation(
> > + DescribedLocation location = newMethodLocation(
> > resolver,
> > AnnotatedPage.class,
> > m,
> > @@ -209,7 +210,7 @@
> >
> > ClassAnnotationEnhancementWorker classWorker =
> > (ClassAnnotationEnhancementWorker)
> > newMock(ClassAnnotationEnhancementWorker.class);
> >
> > - AnnotationLocation location = newClassLocation(
> > + DescribedLocation location = newClassLocation(
> > resolver,
> > DeprecatedBean.class,
> > Deprecated.class);
> > @@ -241,7 +242,7 @@
> >
> > Throwable t = new RuntimeException("Simulated failure.");
> >
> > - AnnotationLocation location = newClassLocation(
> > + DescribedLocation location = newClassLocation(
> > resolver,
> > DeprecatedBean.class,
> > Deprecated.class);
> >
> >
> >
> > 1.6 +2 -1
> > jakarta-tapestry/annotations/src/test/org/apache/tapestry/annotations/TestAssetAnnotationWorker.java
> >
> > Index: TestAssetAnnotationWorker.java
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-tapestry/annotations/src/test/org/apache/tapestry/annotations/TestAssetAnnotationWorker.java,v
> > retrieving revision 1.5
> > retrieving revision 1.6
> > diff -u -r1.5 -r1.6
> > --- TestAssetAnnotationWorker.java 6 Aug 2005 06:58:25 -0000 1.5
> > +++ TestAssetAnnotationWorker.java 8 Aug 2005 16:12:25 -0000 1.6
> > @@ -22,6 +22,7 @@
> > import org.apache.tapestry.spec.ComponentSpecification;
> > import org.apache.tapestry.spec.IAssetSpecification;
> > import org.apache.tapestry.spec.IComponentSpecification;
> > +import org.apache.tapestry.util.DescribedLocation;
> >
> > /**
> > * Tests for [EMAIL PROTECTED]
> > org.apache.tapestry.annotations.AssetAnnotationWorker}.
> > @@ -49,7 +50,7 @@
> >
> > IAssetSpecification as = spec.getAsset("globalStylesheet");
> > assertEquals("/style/global.css", as.getPath());
> > - assertEquals(new AnnotationLocation(r, l.toString()),
> > as.getLocation());
> > + assertEquals(new DescribedLocation(r, l.toString()),
> > as.getLocation());
> > assertEquals("globalStylesheet", as.getPropertyName());
> > }
> > }
> >
> >
> >
> > 1.21 +1 -0
> > jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.page.xml
> >
> > Index: tapestry.page.xml
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-tapestry/framework/src/descriptor/META-INF/tapestry.page.xml,v
> > retrieving revision 1.20
> > retrieving revision 1.21
> > diff -u -r1.20 -r1.21
> > --- tapestry.page.xml 8 Jul 2005 02:00:47 -0000 1.20
> > +++ tapestry.page.xml 8 Aug 2005 16:12:25 -0000 1.21
> > @@ -105,6 +105,7 @@
> > <set-service property="delegate"
> > service-id="SpecificationResolverDelegate"/>
> > <set-object property="applicationId"
> > value="infrastructure:applicationId"/>
> > <set-object property="contextRoot"
> > value="infrastructure:contextRoot"/>
> > + <set-object property="classFinder"
> > value="infrastructure:classFinder"/>
> > </construct>
> > </invoke-factory>
> > </service-point>
> >
> >
> >
> > 1.5 +1 -1
> > jakarta-tapestry/examples/Workbench/src/context/css/workbench.css
> >
> > Index: workbench.css
> > ===================================================================
> > RCS file:
> > /home/cvs/jakarta-tapestry/examples/Workbench/src/context/css/workbench.css,v
> > retrieving revision 1.4
> > retrieving revision 1.5
> > diff -u -r1.4 -r1.5
> > --- workbench.css 21 Jul 2005 13:17:58 -0000 1.4
> > +++ workbench.css 8 Aug 2005 16:12:25 -0000 1.5
> > @@ -10,7 +10,7 @@
> > background-color: Red;
> > }
> >
> > -TABLE.inputError TD.message
> > +TABLE.inputerror TD.message
> > {
> > font-weight: bold;
> > font-size: smaller;
> >
> >
> >
> > 1.1
> > jakarta-tapestry/framework/src/test/org/apache/tapestry/util/TestDescribedLocation.java
> >
> > Index: TestDescribedLocation.java
> > ===================================================================
> > // Copyright 2005 The Apache Software Foundation
> > //
> > // Licensed under the Apache License, Version 2.0 (the "License");
> > // you may not use this file except in compliance with the License.
> > // You may obtain a copy of the License at
> > //
> > // http://www.apache.org/licenses/LICENSE-2.0
> > //
> > // Unless required by applicable law or agreed to in writing, software
> > // distributed under the License is distributed on an "AS IS" BASIS,
> > // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied.
> > // See the License for the specific language governing permissions and
> > // limitations under the License.
> >
> > package org.apache.tapestry.util;
> >
> > import org.apache.hivemind.Resource;
> > import org.apache.hivemind.test.HiveMindTestCase;
> >
> > /**
> > * Tests for [EMAIL PROTECTED]
> > org.apache.tapestry.util.DescribedLocation}.
> > *
> > * @author Howard Lewis Ship
> > * @since 4.0
> > */
> > public class TestDescribedLocation extends HiveMindTestCase
> > {
> > public void testLineRowAreZero()
> > {
> > Resource r = (Resource) newMock(Resource.class);
> >
> > replayControls();
> >
> > DescribedLocation l = new DescribedLocation(r, "location
> > description");
> >
> > assertEquals(0, l.getLineNumber());
> > assertEquals(0, l.getColumnNumber());
> >
> > assertSame(r, l.getResource());
> >
> > assertEquals("location description", l.toString());
> >
> > verifyControls();
> > }
> >
> > public void testEquals()
> > {
> > Resource r = (Resource) newMock(Resource.class);
> > Resource r2 = (Resource) newMock(Resource.class);
> >
> > replayControls();
> >
> > DescribedLocation l = new DescribedLocation(r, "location
> > description");
> > DescribedLocation l2 = new DescribedLocation(r2, "location
> > description");
> > DescribedLocation l3 = new DescribedLocation(r, "wrong
> > description");
> > DescribedLocation l4 = new DescribedLocation(r, "location
> > description");
> >
> > assertEquals(false, l.equals(null));
> > assertEquals(false, l.equals("XYZ"));
> > assertEquals(false, l.equals(l2));
> > assertEquals(false, l.equals(l3));
> > assertEquals(true, l.equals(l4));
> >
> > verifyControls();
> > }
> > }
> >
> >
> >
> > 1.1
> > jakarta-tapestry/framework/src/java/org/apache/tapestry/util/DescribedLocation.java
> >
> > Index: DescribedLocation.java
> > ===================================================================
> > // Copyright 2005 The Apache Software Foundation
> > //
> > // Licensed under the Apache License, Version 2.0 (the "License");
> > // you may not use this file except in compliance with the License.
> > // You may obtain a copy of the License at
> > //
> > // http://www.apache.org/licenses/LICENSE-2.0
> > //
> > // Unless required by applicable law or agreed to in writing, software
> > // distributed under the License is distributed on an "AS IS" BASIS,
> > // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied.
> > // See the License for the specific language governing permissions and
> > // limitations under the License.
> >
> > package org.apache.tapestry.util;
> >
> > import org.apache.hivemind.Location;
> > import org.apache.hivemind.Resource;
> > import org.apache.hivemind.util.Defense;
> >
> > /**
> > * Implementation of [EMAIL PROTECTED] org.apache.hivemind.Location} that
> > is used to describe a location within
> > * a resource. This is used when the location within the resource can't
> > be expressed as a line and
> > * column. One example is for setting the location of an annotation. This
> > is useful for line-precise
> > * exception reporting of errors related to annotations.
> > *
> > * @author Howard Lewis Ship
> > * @since 4.0
> > */
> > public class DescribedLocation implements Location
> > {
> > private final Resource _resource;
> >
> > private final String _description;
> >
> > public DescribedLocation(Resource resource, String description)
> > {
> > Defense.notNull(resource, "resource");
> > Defense.notNull(description, "description");
> >
> > _resource = resource;
> > _description = description;
> > }
> >
> > /**
> > * Returns the description provided in the constructor.
> > */
> >
> > public String toString()
> > {
> > return _description;
> > }
> >
> > /**
> > * Returns the resource provided in the constructor.
> > */
> >
> > public Resource getResource()
> > {
> > return _resource;
> > }
> >
> > /**
> > * Always returns 0.
> > */
> >
> > public int getLineNumber()
> > {
> > return 0;
> > }
> >
> > /**
> > * Always returns 0.
> > */
> >
> > public int getColumnNumber()
> > {
> > return 0;
> > }
> >
> > /**
> > * A DescribedLocation is equal to another only if their resources
> > are equal, and their
> > * descriptions are equal.
> > */
> > @Override
> > public boolean equals(Object other)
> > {
> > if (other instanceof DescribedLocation)
> > {
> > DescribedLocation otherLocation = (DescribedLocation) other;
> >
> > return _resource.equals(otherLocation._resource)
> > && _description.equals(otherLocation._description);
> > }
> >
> > return false;
> > }
> > }
> >
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
> ---------------------------------------------------------------------
> 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]