You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by rd...@apache.org on 2005/10/04 00:25:07 UTC

svn commit: r293460 - in /jakarta/commons/proper/betwixt/trunk: src/java/org/apache/commons/betwixt/ src/java/org/apache/commons/betwixt/strategy/ src/java/org/apache/commons/betwixt/strategy/impl/ xdocs/

Author: rdonkin
Date: Mon Oct  3 15:24:54 2005
New Revision: 293460

URL: http://svn.apache.org/viewcvs?rev=293460&view=rev
Log:
Factored out collective types into separate strategy. This allows subclasses of standard java types to be (optionally) regarded as plain POJOs.

Added:
    jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/strategy/CollectiveTypeStrategy.java
    jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/strategy/impl/OverrideCollectiveTypeStategy.java
Modified:
    jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/IntrospectionConfiguration.java
    jakarta/commons/proper/betwixt/trunk/xdocs/tasks.xml

Modified: jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/IntrospectionConfiguration.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/IntrospectionConfiguration.java?rev=293460&r1=293459&r2=293460&view=diff
==============================================================================
--- jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/IntrospectionConfiguration.java (original)
+++ jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/IntrospectionConfiguration.java Mon Oct  3 15:24:54 2005
@@ -22,6 +22,7 @@
 import java.util.Map;
 
 import org.apache.commons.betwixt.strategy.ClassNormalizer;
+import org.apache.commons.betwixt.strategy.CollectiveTypeStrategy;
 import org.apache.commons.betwixt.strategy.DefaultNameMapper;
 import org.apache.commons.betwixt.strategy.DefaultPluralStemmer;
 import org.apache.commons.betwixt.strategy.MappingDerivationStrategy;
@@ -89,7 +90,8 @@
     private SimpleTypeMapper simpleTypeMapper = new StandardSimpleTypeMapper();
     /** Binding strategy for Java type */
     private TypeBindingStrategy typeBindingStrategy = TypeBindingStrategy.DEFAULT;
-    
+    /** Strategy used for determining which types are collective */
+    private CollectiveTypeStrategy collectiveTypeStrategy = CollectiveTypeStrategy.DEFAULT;
     
     /** 
      * Strategy used to determine whether the bind or introspection time type is to be used to  
@@ -385,6 +387,23 @@
         this.propertySuppressionStrategy = propertySuppressionStrategy;
     }
     
+    /**
+     * Gets the strategy used to determine which types are collective.
+     * @return <code>CollectiveTypeStrategy</code>, not null
+     */
+    public CollectiveTypeStrategy getCollectiveTypeStrategy() {
+        return collectiveTypeStrategy;
+    }
+
+    /**
+     * Sets the strategy used to determine which types are collective.
+     * @param collectiveTypeStrategy <code>CollectiveTypeStrategy</code>, not null
+     */
+    public void setCollectiveTypeStrategy(
+            CollectiveTypeStrategy collectiveTypeStrategy) {
+        this.collectiveTypeStrategy = collectiveTypeStrategy;
+    }
+
     /** 
      * Is this a loop type class?
      * @since 0.7
@@ -392,16 +411,6 @@
      * @return true if the type is a loop type, or if type is null 
      */
     public boolean isLoopType(Class type) {
-        // consider: should this be factored into a pluggable strategy?
-        // check for NPEs
-        if (type == null) {
-            return false;
-        }
-        return type.isArray() 
-            || Map.class.isAssignableFrom( type ) 
-            || Collection.class.isAssignableFrom( type ) 
-            || Enumeration.class.isAssignableFrom( type ) 
-            || Iterator.class.isAssignableFrom( type )
-            || Map.Entry.class.isAssignableFrom( type ) ;
+        return getCollectiveTypeStrategy().isCollective(type);
     }
 }

Added: jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/strategy/CollectiveTypeStrategy.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/strategy/CollectiveTypeStrategy.java?rev=293460&view=auto
==============================================================================
--- jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/strategy/CollectiveTypeStrategy.java (added)
+++ jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/strategy/CollectiveTypeStrategy.java Mon Oct  3 15:24:54 2005
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */ 
+package org.apache.commons.betwixt.strategy;
+
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Specifies which types should be regarded as collective
+ */
+public abstract class CollectiveTypeStrategy {
+
+    /**
+     * Default collective type strategy
+     */
+    public static final CollectiveTypeStrategy DEFAULT = new Default();
+    
+    /** 
+     * Is this a loop type class?
+     * @since 0.7
+     * @param type is this <code>Class</code> a loop type?
+     * @return true if the type is a loop type, or if type is null 
+     */
+    public abstract boolean isCollective(Class type);
+    
+    /**
+     * Default collective type strategy
+     */
+    public static class Default extends CollectiveTypeStrategy {
+
+        /**
+         * Basic implementation returns true for all the standard java
+         * collective types and their subclasses.
+         */
+        public boolean isCollective(Class type) {
+            // consider: should this be factored into a pluggable strategy?
+            // check for NPEs
+            if (type == null) {
+                return false;
+            }
+            return type.isArray() 
+                || Map.class.isAssignableFrom( type ) 
+                || Collection.class.isAssignableFrom( type ) 
+                || Enumeration.class.isAssignableFrom( type ) 
+                || Iterator.class.isAssignableFrom( type )
+                || Map.Entry.class.isAssignableFrom( type ) ;
+
+        }
+
+    }
+}

Added: jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/strategy/impl/OverrideCollectiveTypeStategy.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/strategy/impl/OverrideCollectiveTypeStategy.java?rev=293460&view=auto
==============================================================================
--- jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/strategy/impl/OverrideCollectiveTypeStategy.java (added)
+++ jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/strategy/impl/OverrideCollectiveTypeStategy.java Mon Oct  3 15:24:54 2005
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */ 
+package org.apache.commons.betwixt.strategy.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.apache.commons.betwixt.strategy.CollectiveTypeStrategy;
+
+/**
+ * Strategy that allows specific classes to be marked as 
+ * collective ({@link #overrideCollective(Class)})
+ * or not collective ({@link #overrideNotCollective(Class)})
+ */
+public class OverrideCollectiveTypeStategy extends CollectiveTypeStrategy {
+
+    private final CollectiveTypeStrategy delegate;
+    
+    private final Collection collectiveClasses;
+    private final Collection notCollectiveClasses;
+    
+    /**
+     * Constructs a strategy which delegates to CollectiveTypeStrategy#DEFAULT
+     *
+     */
+    public OverrideCollectiveTypeStategy() {
+        this(CollectiveTypeStrategy.DEFAULT);
+    }
+    
+    /**
+     * Constructs a strategy which delegates all those that it does not override.
+     * @param delegate
+     */
+    public OverrideCollectiveTypeStategy(CollectiveTypeStrategy delegate) {
+        super();
+        this.delegate = delegate;
+        collectiveClasses = new ArrayList();
+        notCollectiveClasses = new ArrayList();
+    }
+
+    /**
+     * Marks the given type to be treated as collective.
+     * @param type <code>Class</code>, not null
+     */
+    public void overrideCollective(Class type) {
+        collectiveClasses.add(type);
+    }
+
+    /**
+     * Marks the given type to be treated as not collective
+     * @param type
+     */
+    public void overrideNotCollective(Class type) {
+        notCollectiveClasses.add(type);
+    }
+    
+    /**
+     * @see CollectiveTypeStrategy#isCollective(Class)
+     */
+    public boolean isCollective(Class type) {
+        boolean result = delegate.isCollective(type);
+        if (collectiveClasses.contains(type)) {
+            result = true;
+        } else if (notCollectiveClasses.contains(type)) {
+            result = false;
+        }
+        return result;
+    }
+
+}

Modified: jakarta/commons/proper/betwixt/trunk/xdocs/tasks.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/betwixt/trunk/xdocs/tasks.xml?rev=293460&r1=293459&r2=293460&view=diff
==============================================================================
--- jakarta/commons/proper/betwixt/trunk/xdocs/tasks.xml (original)
+++ jakarta/commons/proper/betwixt/trunk/xdocs/tasks.xml Mon Oct  3 15:24:54 2005
@@ -200,6 +200,10 @@
     <subsection name='Since 0.7'>            
         <ul>
             <li>
+Improved support for subclasses of Java collective types
+by factoring collective type recognition into strategy.
+            </li>
+            <li>
 Added support for multiple contained polymorphic mappings.
             </li>
             <li>



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org