Author: henning
Date: Wed Jun 28 09:14:31 2006
New Revision: 417808
URL: http://svn.apache.org/viewvc?rev=417808&view=rev
Log:
Add an introspector that can be used with JDK5 to the Whiteboard. This might get
included post 1.5.
This is related to issue VELOCITY-443
Added:
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/README
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/java/
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/java/org/
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/java/org/apache/
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/java/org/apache/velocity/
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/java/org/apache/velocity/util/
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/java/org/apache/velocity/util/introspection/
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/java/org/apache/velocity/util/introspection/JDK15UberspectImpl.java
(with props)
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/test/
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/test/org/
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/test/org/apache/
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/test/org/apache/velocity/
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/test/org/apache/velocity/util/
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/test/org/apache/velocity/util/introspection/
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/test/org/apache/velocity/util/introspection/JDK15UberspectTestCase.java
(with props)
Added: jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/README
URL:
http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/README?rev=417808&view=auto
==============================================================================
--- jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/README (added)
+++ jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/README Wed Jun 28
09:14:31 2006
@@ -0,0 +1,7 @@
+This is an Uberspect Implementation (with test) that only compiles under JDK
1.5
+but allows Objects that implement Iterable to be used in #foreach()
+
+Use it by adding the following line to your velocity.properties:
+
+runtime.introspector.uberspect =
org.apache.velocity.util.introspection.JDK15UberspectImpl
+
Added:
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/java/org/apache/velocity/util/introspection/JDK15UberspectImpl.java
URL:
http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/java/org/apache/velocity/util/introspection/JDK15UberspectImpl.java?rev=417808&view=auto
==============================================================================
---
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/java/org/apache/velocity/util/introspection/JDK15UberspectImpl.java
(added)
+++
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/java/org/apache/velocity/util/introspection/JDK15UberspectImpl.java
Wed Jun 28 09:14:31 2006
@@ -0,0 +1,50 @@
+package org.apache.velocity.util.introspection;
+
+/*
+ * Copyright 2002-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.
+ */
+
+import java.util.Iterator;
+
+/**
+ * JDK 1.5 extension of the Uberspector that allows Iterable Objects to be
+ * put into the Context to be used with #foreach
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Henning P. Schmiedehausen</a>
+ * @version $Id$
+ */
+public class JDK15UberspectImpl
+ extends UberspectImpl
+{
+ /**
+ * To support iterative objects used in a <code>#foreach()</code>
+ * loop.
+ *
+ * @param obj The iterative object.
+ * @param i Info about the object's location.
+ */
+ public Iterator getIterator(Object obj, Info i)
+ throws Exception
+ {
+ if (obj instanceof Iterable)
+ {
+ return ((Iterable) obj).iterator();
+ }
+ else
+ {
+ return super.getIterator(obj, i);
+ }
+ }
+ }
Propchange:
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/java/org/apache/velocity/util/introspection/JDK15UberspectImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/java/org/apache/velocity/util/introspection/JDK15UberspectImpl.java
------------------------------------------------------------------------------
svn:keywords = Id Author Date Revision
Added:
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/test/org/apache/velocity/util/introspection/JDK15UberspectTestCase.java
URL:
http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/test/org/apache/velocity/util/introspection/JDK15UberspectTestCase.java?rev=417808&view=auto
==============================================================================
---
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/test/org/apache/velocity/util/introspection/JDK15UberspectTestCase.java
(added)
+++
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/test/org/apache/velocity/util/introspection/JDK15UberspectTestCase.java
Wed Jun 28 09:14:31 2006
@@ -0,0 +1,79 @@
+package org.apache.velocity.util.introspection;
+
+import java.util.Iterator;
+import java.util.Properties;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.apache.velocity.runtime.RuntimeConstants;
+import org.apache.velocity.runtime.RuntimeSingleton;
+
+public class JDK15UberspectTestCase
+ extends TestCase
+{
+ public JDK15UberspectTestCase(final String name)
+ {
+ super(name);
+ }
+
+ public void setUp()
+ throws Exception
+ {
+ Properties p = new Properties();
+ p.put(RuntimeConstants.UBERSPECT_CLASSNAME,
JDK15UberspectImpl.class.getName());
+ RuntimeSingleton.init(p);
+ }
+
+ public static Test suite()
+ {
+ return new TestSuite(JDK15UberspectTestCase.class);
+ }
+
+ public void testIterable()
+ throws Exception
+ {
+ TestIterator itobj = new TestIterator();
+ TestIterable io = new TestIterable(itobj);
+
+ Uberspect u = RuntimeSingleton.getUberspect();
+ assertEquals("Wrong Uberspector configured!",
JDK15UberspectImpl.class, u.getClass());
+ Iterator it = u.getIterator(io, null);
+
+ assertNotNull("The introspector did not return an iterator!", it);
+ assertEquals("The introspector did return a wrong iterator!", itobj,
it);
+ }
+
+ public static class TestIterator
+ implements Iterator
+ {
+
+ public boolean hasNext() {
+ return false;
+ }
+
+ public Object next() {
+ return null;
+ }
+
+ public void remove() {
+ }
+ }
+
+ public static class TestIterable
+ implements Iterable
+ {
+ private final Iterator it;
+
+ public TestIterable(final Iterator it)
+ {
+ this.it = it;
+ }
+
+ public Iterator iterator()
+ {
+ return it;
+ }
+ }
+}
Propchange:
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/test/org/apache/velocity/util/introspection/JDK15UberspectTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
jakarta/velocity/engine/trunk/whiteboard/henning/jdk15/src/test/org/apache/velocity/util/introspection/JDK15UberspectTestCase.java
------------------------------------------------------------------------------
svn:keywords = Id Author Date Revision
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]