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]

Reply via email to