You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by he...@apache.org on 2006/06/28 18:14:32 UTC

svn commit: r417808 - in /jakarta/velocity/engine/trunk/whiteboard/henning/jdk15: ./ src/ src/java/ src/java/org/ src/java/org/apache/ src/java/org/apache/velocity/ src/java/org/apache/velocity/util/ src/java/org/apache/velocity/util/introspection/ src...

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:henning@apache.org">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: velocity-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: velocity-dev-help@jakarta.apache.org