You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2006/08/05 00:13:20 UTC
svn commit: r428904 - in /tapestry/tapestry5/tapestry-core/trunk: ./
src/main/java/org/apache/tapestry/
src/main/java/org/apache/tapestry/internal/
src/main/java/org/apache/tapestry/internal/ioc/
src/main/java/org/apache/tapestry/internal/pageload/ src...
Author: hlship
Date: Fri Aug 4 15:13:18 2006
New Revision: 428904
URL: http://svn.apache.org/viewvc?rev=428904&view=rev
Log:
Remove last dependencies on HiveMind.
Added:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/BaseLocatable.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Locatable.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Location.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Resource.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/LocationImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/LocationImplTest.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryException.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/LocalizedNameGenerator.java
- copied, changed from r424849, hivemind/trunk/framework/src/java/org/apache/hivemind/util/LocalizedNameGenerator.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/BaseLocatableTest.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ClasspathResource.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/util/LocalizedNameGeneratorTest.java
Modified:
tapestry/tapestry5/tapestry-core/trunk/pom.xml
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/ioc/IOCUtilities.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/ComponentTemplateSourceImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/AttributeToken.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/CDATAToken.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/CommentToken.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/ComponentTemplate.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/ComponentTemplateImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/EndElementToken.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/ParserMessages.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/StartComponentToken.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/StartElementToken.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TemplateParser.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TemplateParserImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TemplateToken.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TextToken.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ioc/services/AbstractIntWrapper.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ioc/services/ClassFabImplTest.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/pageload/ComponentTemplateSourceImplTest.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/parser/TemplateParserImplTest.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImplTest.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/ioc/RegistryBuilderTest.java
Modified: tapestry/tapestry5/tapestry-core/trunk/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/pom.xml?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/pom.xml (original)
+++ tapestry/tapestry5/tapestry-core/trunk/pom.xml Fri Aug 4 15:13:18 2006
@@ -23,19 +23,6 @@
<scope>compile</scope>
</dependency>
<dependency>
- <groupId>hivemind</groupId>
- <artifactId>hivemind</artifactId>
- </dependency>
- <dependency>
- <groupId>hivemind</groupId>
- <artifactId>hivemind-lib</artifactId>
- </dependency>
- <!-- Really, a transitive dependency of hivemind. -->
- <dependency>
- <groupId>oro</groupId>
- <artifactId>oro</artifactId>
- </dependency>
- <dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</dependency>
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/BaseLocatable.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/BaseLocatable.java?rev=428904&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/BaseLocatable.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/BaseLocatable.java Fri Aug 4 15:13:18 2006
@@ -0,0 +1,38 @@
+// Copyright 2006 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;
+
+import org.apache.tapestry.internal.annotations.SuppressNullCheck;
+
+/**
+ * Base implementation of {@link org.apache.tapestry.Locatable}.
+ *
+ * @author Howard M. Lewis Ship
+ */
+@SuppressNullCheck
+public class BaseLocatable implements Locatable
+{
+ private final Location _location;
+
+ protected BaseLocatable(Location location)
+ {
+ _location = location;
+ }
+
+ public final Location getLocation()
+ {
+ return _location;
+ }
+}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Locatable.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Locatable.java?rev=428904&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Locatable.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Locatable.java Fri Aug 4 15:13:18 2006
@@ -0,0 +1,27 @@
+// Copyright 2006 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;
+
+/**
+ * Interface implemented by objects which carry a location tag. Defines a readable property,
+ * location.
+ *
+ * @author Howard M. Lewis Ship
+ */
+public interface Locatable
+{
+ /** Returns the location associated with this object for error reporting purposes. */
+ Location getLocation();
+}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Location.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Location.java?rev=428904&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Location.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Location.java Fri Aug 4 15:13:18 2006
@@ -0,0 +1,39 @@
+// Copyright 2006 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;
+
+/**
+ * A kind of tag applied to other objects to identify where they came from, in terms of a file (the
+ * resource), a line number, and a column number. This is part of "line precise exception
+ * reporting", whereby errors at runtime can be tracked backwards to the files from which they were
+ * parsed or otherwise constructed.
+ *
+ * @author Howard M. Lewis Ship
+ */
+public interface Location
+{
+ /** The resource from which the object tagged with a location was derived. */
+ Resource getResource();
+
+ /**
+ * The line number within the resource, if known, or -1 otherwise.
+ */
+ int getLine();
+
+ /**
+ * The column number within the line if known, or -1 otherwise.
+ */
+ int getColumn();
+}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Resource.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Resource.java?rev=428904&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Resource.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/Resource.java Fri Aug 4 15:13:18 2006
@@ -0,0 +1,37 @@
+// Copyright 2006 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;
+
+import java.net.URL;
+import java.util.Locale;
+
+/**
+ * Represents a resource on the server that may be used for server side processing, or may be
+ * exposed to the client side. Generally, this represents an abstraction on top of files on the
+ * class path and files stored in the web application context.
+ * <p>
+ * Resources are often used as map keys; they should be immutable and should implement hashCode()
+ * and equals().
+ *
+ * @author Howard M. Lewis Ship
+ */
+public interface Resource
+{
+ /** Returns the URL for the resource, or null if it does not exist. */
+ URL getResourceURL();
+
+ /** Returns a localized version of the resource. */
+ Resource getLocalization(Locale locale);
+}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/LocationImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/LocationImpl.java?rev=428904&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/LocationImpl.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/LocationImpl.java Fri Aug 4 15:13:18 2006
@@ -0,0 +1,88 @@
+// Copyright 2006 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.internal;
+
+import java.util.Formatter;
+
+import org.apache.tapestry.Location;
+import org.apache.tapestry.Resource;
+
+/**
+ * Implementation class for {@link org.apache.tapestry.Location}.
+ *
+ * @author Howard M. Lewis Ship
+ */
+public final class LocationImpl implements Location
+{
+ private final Resource _resource;
+
+ private final int _line;
+
+ private final int _column;
+
+ private static final int UNKNOWN = -1;
+
+ public LocationImpl(Resource resource)
+ {
+ this(resource, UNKNOWN);
+ }
+
+ public LocationImpl(Resource resource, int line)
+ {
+ this(resource, line, UNKNOWN);
+ }
+
+ public LocationImpl(Resource resource, int line, int column)
+ {
+ _resource = resource;
+ _line = line;
+ _column = column;
+ }
+
+ public Resource getResource()
+ {
+ return _resource;
+ }
+
+ public int getLine()
+ {
+ return _line;
+ }
+
+ public int getColumn()
+ {
+ return _column;
+ }
+
+ @Override
+ public String toString()
+ {
+ StringBuffer buffer = new StringBuffer();
+ Formatter formatter = new Formatter(buffer);
+
+ formatter.format("<Location: %s", _resource);
+
+ if (_line != UNKNOWN)
+ formatter.format(", line %d", _line);
+
+ if (_column != UNKNOWN)
+ formatter.format(", column %d", _column);
+
+ formatter.format(">");
+
+ return buffer.toString();
+ }
+
+}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/LocationImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/LocationImplTest.java?rev=428904&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/LocationImplTest.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/LocationImplTest.java Fri Aug 4 15:13:18 2006
@@ -0,0 +1,101 @@
+// Copyright 2006 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.internal;
+
+import java.net.URL;
+import java.util.Locale;
+import java.util.Random;
+
+import org.apache.tapestry.Location;
+import org.apache.tapestry.Resource;
+import org.apache.tapestry.test.BaseTestCase;
+import org.testng.annotations.Test;
+
+/**
+ * @author Howard M. Lewis Ship
+ */
+public class LocationImplTest extends BaseTestCase
+{
+ private final Random _random = new Random();
+
+ private static class ResourceFixture implements Resource
+ {
+ public URL getResourceURL()
+ {
+ return null;
+ }
+
+ public Resource getLocalization(Locale locale)
+ {
+ return null;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "<Resource>";
+ }
+ }
+
+ @Test
+ public void all_three_parameters()
+ {
+ Resource r = new ResourceFixture();
+
+ int line = _random.nextInt();
+ int column = _random.nextInt();
+
+ Location l = new LocationImpl(r, line, column);
+
+ assertSame(l.getResource(), r);
+ assertEquals(l.getLine(), line);
+ assertEquals(l.getColumn(), column);
+
+ assertEquals(l.toString(), String.format(
+ "<Location: <Resource>, line %d, column %d>",
+ line,
+ column));
+ }
+
+ @Test
+ public void unknown_column()
+ {
+ Resource r = new ResourceFixture();
+
+ int line = _random.nextInt();
+
+ Location l = new LocationImpl(r, line);
+
+ assertSame(l.getResource(), r);
+ assertEquals(l.getLine(), line);
+ assertEquals(l.getColumn(), -1);
+
+ assertEquals(l.toString(), String.format("<Location: <Resource>, line %d>", line));
+ }
+
+ @Test
+ public void unknown_line_and_column()
+ {
+ Resource r = new ResourceFixture();
+
+ Location l = new LocationImpl(r);
+
+ assertSame(l.getResource(), r);
+ assertEquals(l.getLine(), -1);
+ assertEquals(l.getColumn(), -1);
+
+ assertEquals(l.toString(), "<Location: <Resource>>");
+ }
+}
Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryException.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryException.java?rev=428904&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryException.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryException.java Fri Aug 4 15:13:18 2006
@@ -0,0 +1,66 @@
+// Copyright 2006 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.internal;
+
+import org.apache.tapestry.Locatable;
+import org.apache.tapestry.Location;
+import org.apache.tapestry.internal.annotations.SuppressNullCheck;
+
+/**
+ * Exception class used as a replacement for {@link java.lang.RuntimeException} when the exception
+ * is related to a particular location.
+ *
+ * @author Howard M. Lewis Ship
+ */
+@SuppressNullCheck
+public class TapestryException extends RuntimeException implements Locatable
+{
+ private static final long serialVersionUID = 6396903640977182682L;
+
+ private transient final Location _location;
+
+ /**
+ * @param message
+ * a message (may be null)
+ * @param locatable
+ * if not null, the object containing the location to attribute the exception to
+ * @param cause
+ * if not null, the root cause of the exception
+ */
+ public TapestryException(String message, Locatable locatable, Throwable cause)
+ {
+ this(message, locatable != null ? locatable.getLocation() : null, cause);
+ }
+
+ /**
+ * @param message
+ * a message (may be null)
+ * @param locatable
+ * location to associated with the exception, or null if not known
+ * @param cause
+ * if not null, the root cause of the exception
+ */
+ public TapestryException(String message, Location location, Throwable cause)
+ {
+ super(message, cause);
+
+ _location = location;
+ }
+
+ public Location getLocation()
+ {
+ return _location;
+ }
+}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/ioc/IOCUtilities.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/ioc/IOCUtilities.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/ioc/IOCUtilities.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/ioc/IOCUtilities.java Fri Aug 4 15:13:18 2006
@@ -21,6 +21,7 @@
import java.util.List;
import java.util.Map;
+import org.apache.tapestry.internal.annotations.SuppressNullCheck;
import org.apache.tapestry.internal.annotations.Utility;
import org.apache.tapestry.ioc.ServiceLocator;
import org.apache.tapestry.ioc.annotations.InjectService;
@@ -132,5 +133,15 @@
Collections.sort(list);
return join(list);
+ }
+
+ /**
+ * Returns true if the input is null, or is a zero length string (excluding leading/trailing
+ * whitespace).
+ */
+ @SuppressNullCheck
+ public static boolean isBlank(String input)
+ {
+ return input == null || input.length() == 0 || input.trim().length() == 0;
}
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/ComponentTemplateSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/ComponentTemplateSourceImpl.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/ComponentTemplateSourceImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/pageload/ComponentTemplateSourceImpl.java Fri Aug 4 15:13:18 2006
@@ -14,22 +14,21 @@
package org.apache.tapestry.internal.pageload;
-import static org.apache.tapestry.util.CollectionFactory.newMap;
-
import java.util.Locale;
import java.util.Map;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.util.ClasspathResource;
+import org.apache.tapestry.Resource;
import org.apache.tapestry.events.UpdateEvent;
import org.apache.tapestry.events.UpdateListener;
+import org.apache.tapestry.internal.ClasspathResource;
import org.apache.tapestry.internal.annotations.Concurrent;
import org.apache.tapestry.internal.event.InvalidationEventHubImpl;
import org.apache.tapestry.internal.parser.ComponentTemplate;
import org.apache.tapestry.internal.parser.TemplateParser;
import org.apache.tapestry.internal.util.URLChangeTracker;
+import static org.apache.tapestry.util.CollectionFactory.newMap;
+
/**
* Service implementation that manages a cache of parsed component templates.
*
@@ -39,9 +38,9 @@
public final class ComponentTemplateSourceImpl extends InvalidationEventHubImpl implements
ComponentTemplateSource, UpdateListener
{
- private ClassResolver _classResolver;
+ private final ClassLoader _loader;
- private TemplateParser _parser;
+ private final TemplateParser _parser;
/**
* Caches from a key (combining component name and locale) to a resource. Often, many different
@@ -58,6 +57,17 @@
private final URLChangeTracker _tracker = new URLChangeTracker();
+ public ComponentTemplateSourceImpl(TemplateParser parser)
+ {
+ this(Thread.currentThread().getContextClassLoader(), parser);
+ }
+
+ ComponentTemplateSourceImpl(ClassLoader loader, TemplateParser parser)
+ {
+ _loader = loader;
+ _parser = parser;
+ }
+
/**
* Resolves the component name to a {@link Resource} and finds the localization of that resource
* (the combination of component name and locale is resolved to a resource). The localized
@@ -104,11 +114,10 @@
// ComoponentModel and determine the correct extension from that.
String path = componentName.replace('.', '/') + ".html";
- Resource baseResource = new ClasspathResource(_classResolver, path);
+ Resource baseResource = new ClasspathResource(_loader, path);
Resource localized = baseResource.getLocalization(locale);
_templateResources.put(key, localized);
-
}
/**
@@ -128,15 +137,4 @@
}
}
- /** For injection. */
- public void setClassResolver(ClassResolver classResolver)
- {
- _classResolver = classResolver;
- }
-
- /** For injection. */
- public void setParser(TemplateParser parser)
- {
- _parser = parser;
- }
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/AttributeToken.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/AttributeToken.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/AttributeToken.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/AttributeToken.java Fri Aug 4 15:13:18 2006
@@ -14,7 +14,7 @@
package org.apache.tapestry.internal.parser;
-import org.apache.hivemind.Location;
+import org.apache.tapestry.Location;
/**
* Stores an attribute/value pair (as part of an XML element).
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/CDATAToken.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/CDATAToken.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/CDATAToken.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/CDATAToken.java Fri Aug 4 15:13:18 2006
@@ -14,7 +14,7 @@
package org.apache.tapestry.internal.parser;
-import org.apache.hivemind.Location;
+import org.apache.tapestry.Location;
/**
* Literal text that was enclosed within a !CDATA in the input template (so we should do the same
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/CommentToken.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/CommentToken.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/CommentToken.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/CommentToken.java Fri Aug 4 15:13:18 2006
@@ -14,7 +14,7 @@
package org.apache.tapestry.internal.parser;
-import org.apache.hivemind.Location;
+import org.apache.tapestry.Location;
/**
* A node representing a comment embedded in the source input.
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/ComponentTemplate.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/ComponentTemplate.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/ComponentTemplate.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/ComponentTemplate.java Fri Aug 4 15:13:18 2006
@@ -16,7 +16,7 @@
import java.util.List;
-import org.apache.hivemind.Resource;
+import org.apache.tapestry.Resource;
/**
* A parsed component template, containing all the tokens parsed from the template.
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/ComponentTemplateImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/ComponentTemplateImpl.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/ComponentTemplateImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/ComponentTemplateImpl.java Fri Aug 4 15:13:18 2006
@@ -16,7 +16,7 @@
import java.util.List;
-import org.apache.hivemind.Resource;
+import org.apache.tapestry.Resource;
import static org.apache.tapestry.util.CollectionFactory.newList;
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/EndElementToken.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/EndElementToken.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/EndElementToken.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/EndElementToken.java Fri Aug 4 15:13:18 2006
@@ -14,7 +14,7 @@
package org.apache.tapestry.internal.parser;
-import org.apache.hivemind.Location;
+import org.apache.tapestry.Location;
/**
* Ends a previously started element (including components, parameters, etc.).
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/ParserMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/ParserMessages.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/ParserMessages.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/ParserMessages.java Fri Aug 4 15:13:18 2006
@@ -14,8 +14,8 @@
package org.apache.tapestry.internal.parser;
-import org.apache.hivemind.Resource;
import org.apache.tapestry.Messages;
+import org.apache.tapestry.Resource;
import org.apache.tapestry.internal.MessagesImpl;
import org.apache.tapestry.internal.annotations.Utility;
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/StartComponentToken.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/StartComponentToken.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/StartComponentToken.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/StartComponentToken.java Fri Aug 4 15:13:18 2006
@@ -14,7 +14,7 @@
package org.apache.tapestry.internal.parser;
-import org.apache.hivemind.Location;
+import org.apache.tapestry.Location;
import org.apache.tapestry.internal.annotations.SuppressNullCheck;
/**
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/StartElementToken.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/StartElementToken.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/StartElementToken.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/StartElementToken.java Fri Aug 4 15:13:18 2006
@@ -14,7 +14,7 @@
package org.apache.tapestry.internal.parser;
-import org.apache.hivemind.Location;
+import org.apache.tapestry.Location;
/**
* The start of an ordinary element within the template (as opposed to
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TemplateParser.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TemplateParser.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TemplateParser.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TemplateParser.java Fri Aug 4 15:13:18 2006
@@ -14,7 +14,7 @@
package org.apache.tapestry.internal.parser;
-import org.apache.hivemind.Resource;
+import org.apache.tapestry.Resource;
/**
* Parses a resource into a {@link org.apache.tapestry.internal.parser.ComponentTemplate}.
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TemplateParserImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TemplateParserImpl.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TemplateParserImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TemplateParserImpl.java Fri Aug 4 15:13:18 2006
@@ -14,9 +14,6 @@
package org.apache.tapestry.internal.parser;
-import static org.apache.tapestry.util.CollectionFactory.newList;
-import static org.apache.tapestry.util.CollectionFactory.newMap;
-
import java.net.URL;
import java.util.List;
import java.util.Map;
@@ -24,11 +21,10 @@
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.HiveMind;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.LocationImpl;
+import org.apache.tapestry.Location;
+import org.apache.tapestry.Resource;
+import org.apache.tapestry.internal.LocationImpl;
+import org.apache.tapestry.internal.TapestryException;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
@@ -36,6 +32,10 @@
import org.xml.sax.ext.LexicalHandler;
import org.xml.sax.helpers.DefaultHandler;
+import static org.apache.tapestry.internal.ioc.IOCUtilities.isBlank;
+import static org.apache.tapestry.util.CollectionFactory.newList;
+import static org.apache.tapestry.util.CollectionFactory.newMap;
+
/**
* Non-threadsafe implementation.
*
@@ -118,9 +118,8 @@
_parser = null;
- throw new ApplicationRuntimeException(ParserMessages.templateParseError(
- templateResource,
- ex), getCurrentLocation(), ex);
+ throw new TapestryException(ParserMessages.templateParseError(templateResource, ex),
+ getCurrentLocation(), ex);
}
finally
{
@@ -245,7 +244,7 @@
{
String name = attributes.getLocalName(i);
- if (HiveMind.isBlank(name))
+ if (isBlank(name))
continue;
String value = attributes.getValue(i);
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TemplateToken.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TemplateToken.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TemplateToken.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TemplateToken.java Fri Aug 4 15:13:18 2006
@@ -14,8 +14,8 @@
package org.apache.tapestry.internal.parser;
-import org.apache.hivemind.Locatable;
-import org.apache.hivemind.Location;
+import org.apache.tapestry.BaseLocatable;
+import org.apache.tapestry.Location;
/**
* Base class for tokens parsed out of a template. The set of classes rooted here are effectively
@@ -23,25 +23,18 @@
*
* @author Howard M. Lewis Ship
*/
-public abstract class TemplateToken implements Locatable
+public abstract class TemplateToken extends BaseLocatable
{
private final TokenType _tokenType;
- private final Location _location;
-
public TemplateToken(TokenType tokenType, Location location)
{
+ super(location);
_tokenType = tokenType;
- _location = location;
}
public TokenType getTokenType()
{
return _tokenType;
- }
-
- public Location getLocation()
- {
- return _location;
}
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TextToken.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TextToken.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TextToken.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/parser/TextToken.java Fri Aug 4 15:13:18 2006
@@ -14,7 +14,7 @@
package org.apache.tapestry.internal.parser;
-import org.apache.hivemind.Location;
+import org.apache.tapestry.Location;
public class TextToken extends TemplateToken
{
Copied: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/LocalizedNameGenerator.java (from r424849, hivemind/trunk/framework/src/java/org/apache/hivemind/util/LocalizedNameGenerator.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/LocalizedNameGenerator.java?p2=tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/LocalizedNameGenerator.java&p1=hivemind/trunk/framework/src/java/org/apache/hivemind/util/LocalizedNameGenerator.java&r1=424849&r2=428904&rev=428904&view=diff
==============================================================================
--- hivemind/trunk/framework/src/java/org/apache/hivemind/util/LocalizedNameGenerator.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/LocalizedNameGenerator.java Fri Aug 4 15:13:18 2006
@@ -1,4 +1,4 @@
-// Copyright 2004, 2005 The Apache Software Foundation
+// Copyright 2004, 2005, 2006 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.
@@ -12,57 +12,74 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package org.apache.hivemind.util;
+package org.apache.tapestry.internal.util;
import java.util.Locale;
import java.util.NoSuchElementException;
-import org.apache.hivemind.HiveMind;
+import static org.apache.tapestry.internal.ioc.IOCUtilities.isBlank;
/**
- * Used in a wide variety of resource searches. Generates
- * a series of name variations from a base name, a
- * {@link java.util.Locale} and an optional suffix.
- *
- * @author Howard Lewis Ship
+ * Used in a wide variety of resource searches. Generates a series of name variations from a path
+ * (which must include a suffix) and locale.
+ * <P>
+ * This class is not threadsafe.
+ *
+ * @author Howard Lewis Ship
*/
public class LocalizedNameGenerator
{
- private int _baseNameLength;
- private String _suffix;
- private StringBuffer _buffer;
- private String _language;
- private String _country;
- private String _variant;
+ private final int _baseNameLength;
+
+ private final String _suffix;
+
+ private final StringBuilder _builder;
+
+ private final String _language;
+
+ private final String _country;
+
+ private final String _variant;
+
private int _state;
+
private int _prevState;
private static final int INITIAL = 0;
+
private static final int LCV = 1;
+
private static final int LC = 2;
+
private static final int LV = 3;
+
private static final int L = 4;
+
private static final int BARE = 5;
+
private static final int EXHAUSTED = 6;
- public LocalizedNameGenerator(String baseName, Locale locale, String suffix)
+ public LocalizedNameGenerator(String path, Locale locale)
{
- _baseNameLength = baseName.length();
+ int dotx = path.lastIndexOf('.');
- if (locale != null)
- {
- _language = locale.getLanguage();
- _country = locale.getCountry();
- _variant = locale.getVariant();
- }
+ // TODO: Case where there is no suffix
+
+ String baseName = path.substring(0, dotx);
+
+ _suffix = path.substring(dotx);
+
+ _baseNameLength = dotx;
+
+ _language = locale.getLanguage();
+ _country = locale.getCountry();
+ _variant = locale.getVariant();
_state = INITIAL;
_prevState = INITIAL;
- _suffix = suffix;
-
- _buffer = new StringBuffer(baseName);
+ _builder = new StringBuilder(baseName);
advance();
}
@@ -77,49 +94,47 @@
switch (_state)
{
- case LCV :
+ case LCV:
- if (HiveMind.isBlank(_variant))
+ if (isBlank(_variant))
continue;
return;
- case LC :
+ case LC:
- if (HiveMind.isBlank(_country))
+ if (isBlank(_country))
continue;
return;
- case LV :
+ case LV:
// If _country is null, then we've already generated this string
// as state LCV and we can continue directly to state L
- if (HiveMind.isBlank(_variant) || HiveMind.isBlank(_country))
+ if (isBlank(_variant) || isBlank(_country))
continue;
return;
- case L :
+ case L:
- if (HiveMind.isBlank(_language))
+ if (isBlank(_language))
continue;
return;
- case BARE :
- default :
+ case BARE:
+ default:
return;
}
}
}
/**
- * Returns true if there are more name variants to be
- * returned, false otherwise.
- *
- **/
+ * Returns true if there are more name variants to be returned, false otherwise.
+ */
public boolean more()
{
@@ -127,12 +142,11 @@
}
/**
- * Returns the next localized variant.
- *
- * @throws NoSuchElementException if all variants have been
- * returned.
+ * Returns the next localized variant.
*
- **/
+ * @throws NoSuchElementException
+ * if all variants have been returned.
+ */
public String next()
{
@@ -148,12 +162,12 @@
private String build()
{
- _buffer.setLength(_baseNameLength);
+ _builder.setLength(_baseNameLength);
if (_state == LC || _state == LCV || _state == L)
{
- _buffer.append('_');
- _buffer.append(_language);
+ _builder.append('_');
+ _builder.append(_language);
}
// For LV, we want two underscores between language
@@ -161,45 +175,45 @@
if (_state == LC || _state == LCV || _state == LV)
{
- _buffer.append('_');
+ _builder.append('_');
if (_state != LV)
- _buffer.append(_country);
+ _builder.append(_country);
}
if (_state == LV || _state == LCV)
{
- _buffer.append('_');
- _buffer.append(_variant);
+ _builder.append('_');
+ _builder.append(_variant);
}
if (_suffix != null)
- _buffer.append(_suffix);
+ _builder.append(_suffix);
- return _buffer.toString();
+ return _builder.toString();
}
public Locale getCurrentLocale()
{
switch (_prevState)
{
- case LCV :
+ case LCV:
return new Locale(_language, _country, _variant);
- case LC :
+ case LC:
return new Locale(_language, _country, "");
- case LV :
+ case LV:
return new Locale(_language, "", _variant);
- case L :
+ case L:
return new Locale(_language, "", "");
- default :
+ default:
return null;
}
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java Fri Aug 4 15:13:18 2006
@@ -14,8 +14,6 @@
package org.apache.tapestry.test;
-import static java.lang.Thread.sleep;
-
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
@@ -29,7 +27,7 @@
import java.util.UUID;
import org.apache.commons.logging.Log;
-import org.apache.hivemind.Resource;
+import org.apache.tapestry.Resource;
import org.apache.tapestry.internal.annotations.SuppressNullCheck;
import org.apache.tapestry.internal.ioc.Module;
import org.apache.tapestry.ioc.Configuration;
@@ -47,6 +45,8 @@
import org.apache.tapestry.ioc.def.ServiceDef;
import org.apache.tapestry.model.MutableComponentModel;
import org.apache.tapestry.transform.ClassTransformation;
+
+import static java.lang.Thread.sleep;
/**
* Base test case that adds a number of convienience factory and training methods to
Added: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/BaseLocatableTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/BaseLocatableTest.java?rev=428904&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/BaseLocatableTest.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/BaseLocatableTest.java Fri Aug 4 15:13:18 2006
@@ -0,0 +1,56 @@
+// Copyright 2006 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;
+
+import org.apache.tapestry.internal.annotations.SuppressNullCheck;
+import org.apache.tapestry.test.BaseTestCase;
+import org.testng.annotations.Test;
+
+/**
+ * @author Howard M. Lewis Ship
+ */
+public class BaseLocatableTest extends BaseTestCase
+{
+ @SuppressNullCheck
+ static class LocatableFixture extends BaseLocatable
+ {
+ LocatableFixture(Location location)
+ {
+ super(location);
+ }
+ }
+
+ @Test
+ public void location_property_is_readable()
+ {
+ Location location = newMock(Location.class);
+
+ replay();
+
+ Locatable locatable = new LocatableFixture(location);
+
+ verify();
+
+ assertSame(locatable.getLocation(), location);
+ }
+
+ @Test
+ public void null_is_allowed_for_location()
+ {
+ Locatable locatable = new LocatableFixture(null);
+
+ assertNull(locatable.getLocation());
+ }
+}
Added: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ClasspathResource.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ClasspathResource.java?rev=428904&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ClasspathResource.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ClasspathResource.java Fri Aug 4 15:13:18 2006
@@ -0,0 +1,101 @@
+// Copyright 2006 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.internal;
+
+import java.net.URL;
+import java.util.Locale;
+
+import org.apache.tapestry.Resource;
+import org.apache.tapestry.internal.util.LocalizedNameGenerator;
+
+/**
+ * Bare-bones, temporary implementation.
+ *
+ * @author Howard M. Lewis Ship
+ */
+public class ClasspathResource implements Resource
+{
+ private final ClassLoader _classLoader;
+
+ private final String _path;
+
+ private URL _url;
+
+ public ClasspathResource(ClassLoader classLoader, String path)
+ {
+ _classLoader = classLoader;
+ _path = path;
+ }
+
+ private ClasspathResource(ClassLoader classLoader, String path, URL url)
+ {
+ this(classLoader, path);
+ _url = url;
+ }
+
+ public synchronized URL getResourceURL()
+ {
+ if (_url == null)
+ _url = _classLoader.getResource(_path);
+
+ return _url;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (obj == null)
+ return false;
+
+ if (obj == this)
+ return true;
+
+ if (obj.getClass() != getClass())
+ return false;
+
+ ClasspathResource other = (ClasspathResource) obj;
+
+ return other._classLoader == _classLoader && other._path.equals(_path);
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return 227 ^ _path.hashCode();
+ }
+
+ public Resource getLocalization(Locale locale)
+ {
+ LocalizedNameGenerator g = new LocalizedNameGenerator(_path, locale);
+
+ while (g.more())
+ {
+ String path = g.next();
+
+ URL url = _classLoader.getResource(path);
+
+ if (url == null)
+ continue;
+
+ if (_path.equals(path))
+ return this;
+
+ return new ClasspathResource(_classLoader, path, url);
+ }
+
+ return null;
+ }
+
+}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ioc/services/AbstractIntWrapper.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ioc/services/AbstractIntWrapper.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ioc/services/AbstractIntWrapper.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ioc/services/AbstractIntWrapper.java Fri Aug 4 15:13:18 2006
@@ -14,14 +14,12 @@
package org.apache.tapestry.internal.ioc.services;
-import org.apache.hivemind.impl.BaseLocatable;
-
/**
* Used by {@link org.apache.tapestry.internal.ioc.services.ClassFabImplTest}.
*
* @author Howard Lewis Ship
*/
-public abstract class AbstractIntWrapper extends BaseLocatable
+public abstract class AbstractIntWrapper
{
public abstract int getIntValue();
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ioc/services/ClassFabImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ioc/services/ClassFabImplTest.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ioc/services/ClassFabImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/ioc/services/ClassFabImplTest.java Fri Aug 4 15:13:18 2006
@@ -24,7 +24,7 @@
import javassist.CtClass;
import org.apache.commons.logging.LogFactory;
-import org.apache.hivemind.impl.BaseLocatable;
+import org.apache.tapestry.BaseLocatable;
import org.apache.tapestry.internal.ioc.services.LoggingDecoratorImplTest.ToStringService;
import org.apache.tapestry.ioc.services.ClassFab;
import org.apache.tapestry.ioc.services.MethodSignature;
@@ -420,7 +420,7 @@
assertContains(
toString,
- "public class FredRunnable extends org.apache.hivemind.impl.BaseLocatable\n"
+ "public class FredRunnable extends org.apache.tapestry.BaseLocatable\n"
+ " implements java.lang.Runnable, java.io.Serializable");
assertContains(toString, "private java.util.Map _map;");
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/pageload/ComponentTemplateSourceImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/pageload/ComponentTemplateSourceImplTest.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/pageload/ComponentTemplateSourceImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/pageload/ComponentTemplateSourceImplTest.java Fri Aug 4 15:13:18 2006
@@ -18,20 +18,18 @@
import java.net.URLClassLoader;
import java.util.Locale;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.util.ClasspathResource;
+import org.apache.tapestry.Resource;
import org.apache.tapestry.events.InvalidationEvent;
import org.apache.tapestry.events.InvalidationListener;
import org.apache.tapestry.events.UpdateEvent;
+import org.apache.tapestry.internal.ClasspathResource;
import org.apache.tapestry.internal.parser.ComponentTemplate;
import org.apache.tapestry.internal.parser.TemplateParser;
import org.apache.tapestry.internal.test.InternalBaseTestCase;
-import org.easymock.EasyMock;
-import org.testng.Assert;
import org.testng.annotations.Test;
+import static org.easymock.EasyMock.isA;
+
/**
* @author Howard M. Lewis Ship
*/
@@ -41,7 +39,7 @@
static public final String PATH = "org/apache/tapestry/internal/pageload";
- public ClassResolver _resolver = new DefaultClassResolver();
+ private final ClassLoader _loader = Thread.currentThread().getContextClassLoader();
@Test
public void caching()
@@ -55,9 +53,7 @@
replay();
- ComponentTemplateSourceImpl source = new ComponentTemplateSourceImpl();
- source.setParser(parser);
- source.setClassResolver(_resolver);
+ ComponentTemplateSource source = new ComponentTemplateSourceImpl(parser);
String name = PACKAGE + ".Fred";
assertSame(source.getTemplate(name, Locale.ENGLISH), template);
@@ -70,7 +66,7 @@
verify();
}
- private void trainParseTemplate(TemplateParser parser, Resource resource,
+ protected final void trainParseTemplate(TemplateParser parser, Resource resource,
ComponentTemplate template)
{
parser.parseTemplate(resource);
@@ -91,11 +87,7 @@
f.createNewFile();
- // A special resolver that knows about our special class path.
-
- ClassResolver resolver = new DefaultClassResolver(loader);
-
- Resource localized = new ClasspathResource(resolver, "baz/Biff.html");
+ Resource localized = new ClasspathResource(loader, "baz/Biff.html");
TemplateParser parser = newTemplateParser();
ComponentTemplate template = newComponentTemplate();
@@ -105,9 +97,7 @@
replay();
- ComponentTemplateSourceImpl source = new ComponentTemplateSourceImpl();
- source.setParser(parser);
- source.setClassResolver(resolver);
+ ComponentTemplateSourceImpl source = new ComponentTemplateSourceImpl(loader, parser);
source.addInvalidationListener(listener);
String name = "baz.Biff";
@@ -128,7 +118,7 @@
touch(f);
- listener.objectWasInvalidated(EasyMock.isA(InvalidationEvent.class));
+ listener.objectWasInvalidated(isA(InvalidationEvent.class));
replay();
@@ -166,9 +156,7 @@
replay();
- ComponentTemplateSourceImpl source = new ComponentTemplateSourceImpl();
- source.setParser(parser);
- source.setClassResolver(_resolver);
+ ComponentTemplateSourceImpl source = new ComponentTemplateSourceImpl(parser);
String name = PACKAGE + ".Fred";
assertSame(source.getTemplate(name, Locale.ENGLISH), template);
@@ -192,18 +180,16 @@
replay();
- ComponentTemplateSourceImpl source = new ComponentTemplateSourceImpl();
- source.setParser(parser);
- source.setClassResolver(_resolver);
+ ComponentTemplateSourceImpl source = new ComponentTemplateSourceImpl(parser);
String name = PACKAGE + ".Barney";
- Assert.assertNull(source.getTemplate(name, Locale.ENGLISH));
+ assertNull(source.getTemplate(name, Locale.ENGLISH));
verify();
}
private Resource newResource(String name)
{
- return new ClasspathResource(_resolver, PATH + "/" + name);
+ return new ClasspathResource(_loader, PATH + "/" + name);
}
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/parser/TemplateParserImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/parser/TemplateParserImplTest.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/parser/TemplateParserImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/parser/TemplateParserImplTest.java Fri Aug 4 15:13:18 2006
@@ -14,17 +14,13 @@
package org.apache.tapestry.internal.parser;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertSame;
-
import java.util.List;
-import org.apache.hivemind.ClassResolver;
-import org.apache.hivemind.Locatable;
-import org.apache.hivemind.Location;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.DefaultClassResolver;
-import org.apache.hivemind.util.ClasspathResource;
+import org.apache.tapestry.Locatable;
+import org.apache.tapestry.Location;
+import org.apache.tapestry.Resource;
+import org.apache.tapestry.internal.ClasspathResource;
+import org.apache.tapestry.test.BaseTestCase;
import org.testng.annotations.Configuration;
import org.testng.annotations.Test;
@@ -34,12 +30,10 @@
*
* @author Howard M. Lewis Ship
*/
-public class TemplateParserImplTest
+public class TemplateParserImplTest extends BaseTestCase
{
private TemplateParser _parser;
- private ClassResolver _resolver = new DefaultClassResolver();
-
/**
* What's nice is that we get to set up a single parser for all the test methods to share, which
* will actually do a very good job of simulating how a parser is used in production.
@@ -68,8 +62,9 @@
String path = packageName.replace('.', '/') + "/" + file;
- Resource resource = new ClasspathResource(_resolver, path);
- return resource;
+ ClassLoader loader = getClass().getClassLoader();
+
+ return new ClasspathResource(loader, path);
}
private <T extends TemplateToken> T get(List l, int index)
@@ -81,7 +76,7 @@
private void checkLine(Locatable l, int expectedLineNumber)
{
- assertEquals(l.getLocation().getLineNumber(), expectedLineNumber);
+ assertEquals(l.getLocation().getLine(), expectedLineNumber);
}
@Test
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImplTest.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/transform/ComponentInstantiatorSourceImplTest.java Fri Aug 4 15:13:18 2006
@@ -29,14 +29,15 @@
import javassist.NotFoundException;
import org.apache.commons.logging.Log;
-import org.apache.hivemind.util.PropertyUtils;
import org.apache.tapestry.internal.InternalComponentResources;
import org.apache.tapestry.internal.InternalModule;
+import org.apache.tapestry.internal.ioc.services.PropertyAccessImpl;
import org.apache.tapestry.internal.services.UpdateListenerHub;
import org.apache.tapestry.internal.transform.pages.BasicComponent;
import org.apache.tapestry.internal.transform.pages.BasicSubComponent;
import org.apache.tapestry.ioc.Registry;
import org.apache.tapestry.ioc.RegistryBuilder;
+import org.apache.tapestry.ioc.services.PropertyAccess;
import org.apache.tapestry.runtime.ComponentLifecycle;
import org.apache.tapestry.test.BaseTestCase;
import org.apache.tapestry.transform.TransformModule;
@@ -44,9 +45,6 @@
import org.testng.annotations.Configuration;
import org.testng.annotations.Test;
-import static java.lang.Thread.currentThread;
-import static org.apache.hivemind.util.PropertyUtils.read;
-
/**
* Tests for {@link org.apache.tapestry.internal.transform.ComponentInstantiatorSourceImpl}.
* Several of these tests are more of the form of integration tests that instantiate the Tapestry
@@ -64,9 +62,11 @@
private Registry _registry;
- private ClassLoader _originalContextClassLoader = Thread.currentThread()
+ private final ClassLoader _originalContextClassLoader = Thread.currentThread()
.getContextClassLoader();
+ private final PropertyAccess _access = new PropertyAccessImpl();
+
@Test
public void controlled_packages() throws Exception
{
@@ -109,24 +109,24 @@
// Should not be an instance, since it is loaded by a different class loader.
Assert.assertFalse(BasicComponent.class.isInstance(target));
- PropertyUtils.write(target, "value", "some default value");
- assertEquals(read(target, "value"), "some default value");
+ _access.set(target, "value", "some default value");
+ assertEquals(_access.get(target, "value"), "some default value");
- PropertyUtils.write(target, "retainedValue", "some retained value");
- assertEquals(read(target, "retainedValue"), "some retained value");
+ _access.set(target, "retainedValue", "some retained value");
+ assertEquals(_access.get(target, "retainedValue"), "some retained value");
// Setting a property value before pageDidLoad will cause that value
// to be the default when the page detaches.
target.containingPageDidLoad();
- PropertyUtils.write(target, "value", "some transient value");
- assertEquals(read(target, "value"), "some transient value");
+ _access.set(target, "value", "some transient value");
+ assertEquals(_access.get(target, "value"), "some transient value");
target.containingPageDidDetach();
- assertEquals(read(target, "value"), "some default value");
- assertEquals(read(target, "retainedValue"), "some retained value");
+ assertEquals(_access.get(target, "value"), "some default value");
+ assertEquals(_access.get(target, "retainedValue"), "some retained value");
}
@Test
@@ -136,16 +136,16 @@
target.containingPageDidLoad();
- PropertyUtils.write(target, "value", "base class");
- assertEquals(read(target, "value"), "base class");
+ _access.set(target, "value", "base class");
+ assertEquals(_access.get(target, "value"), "base class");
- PropertyUtils.write(target, "intValue", 33);
- assertEquals(read(target, "intValue"), 33);
+ _access.set(target, "intValue", 33);
+ assertEquals(_access.get(target, "intValue"), 33);
target.containingPageDidDetach();
- assertNull(read(target, "value"));
- assertEquals(read(target, "intValue"), 0);
+ assertNull(_access.get(target, "value"));
+ assertEquals(_access.get(target, "intValue"), 0);
}
@Test
@@ -187,7 +187,7 @@
ClassPool pool = new ClassPool();
// Inside Maven Surefire, the system classpath is not sufficient to find all
// the necessary files.
- pool.appendClassPath(new LoaderClassPath(currentThread().getContextClassLoader()));
+ pool.appendClassPath(new LoaderClassPath(Thread.currentThread().getContextClassLoader()));
CtClass ctClass = pool.makeClass(SYNTH_COMPONENT_CLASSNAME);
Added: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/util/LocalizedNameGeneratorTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/util/LocalizedNameGeneratorTest.java?rev=428904&view=auto
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/util/LocalizedNameGeneratorTest.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/util/LocalizedNameGeneratorTest.java Fri Aug 4 15:13:18 2006
@@ -0,0 +1,70 @@
+// Copyright 2006 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.internal.util;
+
+import java.util.Locale;
+
+import org.apache.tapestry.test.BaseTestCase;
+import org.testng.annotations.Test;
+
+/**
+ * @author Howard M. Lewis Ship
+ */
+public class LocalizedNameGeneratorTest extends BaseTestCase
+{
+
+ private void run(String path, Locale locale, String... expected)
+ {
+ LocalizedNameGenerator g = new LocalizedNameGenerator(path, locale);
+
+ for (String s : expected)
+ {
+ assertTrue(g.more());
+ assertEquals(g.next(), s);
+ }
+
+ assertFalse(g.more());
+ }
+
+ @Test
+ public void locale_with_language_and_country()
+ {
+ run("basic.test", Locale.US, "basic_en_US.test", "basic_en.test", "basic.test");
+ }
+
+ @Test
+ public void locale_with_just_language()
+ {
+ run("noCountry.zap", Locale.FRENCH, "noCountry_fr.zap", "noCountry.zap");
+ }
+
+ @Test
+ public void locale_with_variant_but_no_country()
+ {
+
+ // The double-underscore is correct, it's a kind
+ // of placeholder for the null country.
+ // JDK1.3 always converts the locale to upper case. JDK 1.4
+ // does not. To keep this test happyt, we selected an all-uppercase
+ // locale.
+
+ run(
+ "fred.foo",
+ new Locale("en", "", "GEEK"),
+ "fred_en__GEEK.foo",
+ "fred_en.foo",
+ "fred.foo");
+ }
+}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/ioc/RegistryBuilderTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/ioc/RegistryBuilderTest.java?rev=428904&r1=428903&r2=428904&view=diff
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/ioc/RegistryBuilderTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/ioc/RegistryBuilderTest.java Fri Aug 4 15:13:18 2006
@@ -18,7 +18,6 @@
import java.util.List;
import java.util.jar.Manifest;
-import org.apache.hivemind.service.ClassFactory;
import org.apache.tapestry.internal.test.InternalBaseTestCase;
import org.testng.annotations.Test;
@@ -27,29 +26,6 @@
*/
public class RegistryBuilderTest extends InternalBaseTestCase
{
- /**
- * During testing, there is no manifest for tapestry-core (the manifest is created during JAR
- * packaging). Therefore, building the default registry results in a completely empty registry.
- */
- @Test
- public void no_modules()
- {
- Registry registry = IOCUtilities.buildDefaultRegistry();
-
- try
- {
- // This isn't here because we don't know about tapestry.ioc module, because
- // the manifest is not visible while building the tapestry-core jar.
-
- registry.getService(IOCConstants.CLASS_FACTORY_SERVICE_ID, ClassFactory.class);
- unreachable();
- }
- catch (RuntimeException ex)
- {
- // Expected.
- }
- }
-
@Test
public void sub_module()
{