Author: michiel
Date: 2009-05-18 23:13:08 +0200 (Mon, 18 May 2009)
New Revision: 35294

Modified:
   mmbase/trunk/src/org/mmbase/util/functions/Parameters.java
Log:
Added a method toUndefaultMap

Modified: mmbase/trunk/src/org/mmbase/util/functions/Parameters.java
===================================================================
--- mmbase/trunk/src/org/mmbase/util/functions/Parameters.java  2009-05-18 
21:03:16 UTC (rev 35293)
+++ mmbase/trunk/src/org/mmbase/util/functions/Parameters.java  2009-05-18 
21:13:08 UTC (rev 35294)
@@ -575,18 +575,59 @@
         return Casting.toString(get(parameterName));
     }
 
+
     /**
-     * Gives the arguments back as a (unmodifiable) map.
+     * Returns a view on the backing where every value wich is the default 
value is set to
+     * <code>null</code>
+     * @since MMBase-1.9.1
      */
-    public Map<String, Object> toMap() {
+    protected Map<String, Object> undefaultBacking() {
         return new AbstractMap<String, Object>() {
             public Set<Map.Entry<String, Object>> entrySet() {
                 return new AbstractSet<Map.Entry<String, Object>>() {
                     public Iterator<Map.Entry<String, Object>> iterator() {
+                        final Iterator<Map.Entry<String, Object>> iterator = 
Parameters.this.backing.entrySet().iterator();
+
+                        return new Iterator<Map.Entry<String, Object>>() {
+                            public boolean hasNext() {
+                                return iterator.hasNext();
+                            }
+                            public Map.Entry<String, Object> next() {
+                                Map.Entry<String, Object> entry = 
iterator.next();
+                                Parameter<?> def = 
Parameters.this.definition[Parameters.this.indexOfParameter(entry.getKey())];
+                                Object defaultValue = def.getDefaultValue();
+                                if (defaultValue == null) {
+                                    return entry;
+                                }
+                                if (defaultValue.equals(entry.getValue())) {
+                                    return new org.mmbase.util.Entry<String, 
Object>(entry.getKey(), null);
+                                } else {
+                                    return entry;
+                                }
+                            }
+                            public void remove() {
+                                throw new UnsupportedOperationException();
+                            }
+
+                        };
+                    }
+                    public int size() {
+                        return Parameters.this.backing.size();
+                    }
+                };
+            }
+        };
+    }
+
+    private Map<String, Object> toMap(final Map<String, Object> b) {
+        return new AbstractMap<String, Object>() {
+            public Set<Map.Entry<String, Object>> entrySet() {
+                return new AbstractSet<Map.Entry<String, Object>>() {
+                    public Iterator<Map.Entry<String, Object>> iterator() {
                         return patternBacking != null ?
-                            new 
org.mmbase.util.ChainedIterator<Map.Entry<String, 
Object>>(backing.entrySet().iterator(), patternBacking.iterator())
+                            new 
org.mmbase.util.ChainedIterator<Map.Entry<String, 
Object>>(b.entrySet().iterator(), patternBacking.iterator())
                             :
-                            backing.entrySet().iterator();
+                            b.entrySet().iterator();
                     }
                     public int size() {
                         return Parameters.this.size();
@@ -597,6 +638,20 @@
     }
 
     /**
+     * Gives the arguments back as a (unmodifiable) map.
+     */
+    public Map<String, Object> toMap() {
+        return toMap(backing);
+    }
+    /**
+     * Returns this parameters object as a (unmodifiable)  Map, but all values 
which only have the default value are <code>null</code>
+     * @since MMBase-1.9.1
+     */
+    public Map<String, Object> toUndefaultMap() {
+        return toMap(undefaultBacking());
+    }
+
+    /**
      * Returns the Parameters as an unmodifiable List of Map.Entrys with 
predictable iteration order
      * (the same order of this Parameters, which is a List of the values only, 
itself)
      * @since MMBase-1.9

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to