Update of /var/cvs/src/org/mmbase/framework/basic
In directory james.mmbase.org:/tmp/cvs-serv656

Modified Files:
        BasicUrlConverter.java 
Log Message:
added some debugging, made static getUrl also recogognized array values (which 
is conventient, because that is wat request.getParameterMap returns)


See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/framework/basic


Index: BasicUrlConverter.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/BasicUrlConverter.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- BasicUrlConverter.java      23 Feb 2008 14:36:30 -0000      1.9
+++ BasicUrlConverter.java      21 Mar 2008 10:25:52 -0000      1.10
@@ -25,13 +25,14 @@
  *
  *
  * @author Michiel Meeuwissen
- * @version $Id: BasicUrlConverter.java,v 1.9 2008/02/23 14:36:30 michiel Exp $
+ * @version $Id: BasicUrlConverter.java,v 1.10 2008/03/21 10:25:52 michiel Exp 
$
  * @since MMBase-1.9
  */
 public final class BasicUrlConverter implements UrlConverter {
     private static final Logger log = 
Logging.getLoggerInstance(BasicUrlConverter.class);
 
-    private static final CharTransformer paramEscaper = new Url(Url.ESCAPE);
+    private static final CharTransformer PARAM_ESCAPER= new Url(Url.ESCAPE);
+
 
     /**
      * General utility function to create an Url
@@ -66,21 +67,33 @@
             Writer w = new StringBuilderWriter(show);
             for (Map.Entry<String, ? extends Object> entry : 
params.entrySet()) {
                 Object value = entry.getValue();
-                if (value != null && 
Casting.isStringRepresentable(value.getClass())) { // if not string 
representable, that suppose it was an 'automatic' parameter which does need 
presenting on url
-                    if (value instanceof Iterable) {
+                if (value != null) {
+                    if (value.getClass().isArray()) {
+                        for (Object v : (Object[]) value) {
+                            if (v == null || 
Casting.isStringRepresentable(v.getClass())) { // if not string representable, 
that suppose it was an 'automatic' parameter which does need presenting on url
+                                
show.append(connector).append(entry.getKey()).append("=");
+                                PARAM_ESCAPER.transform(new 
StringReader(Casting.toString(v)), w);
+                                connector = amp;
+                            }
+                        }
+                    } else if (value instanceof Iterable) {
                         for (Object v : (Iterable<?>) value) {
+                            if (v == null || 
Casting.isStringRepresentable(v.getClass())) {
                             
show.append(connector).append(entry.getKey()).append("=");
-                            paramEscaper.transform(new 
StringReader(Casting.toString(v)), w);
+                                PARAM_ESCAPER.transform(new 
StringReader(Casting.toString(v)), w);
                             connector = amp;
                         }
+                        }
                     } else {
+                        if (Casting.isStringRepresentable(value.getClass())) {
                         
show.append(connector).append(entry.getKey()).append("=");
-                        paramEscaper.transform(new 
StringReader(Casting.toString(value)), w);
+                            PARAM_ESCAPER.transform(new 
StringReader(Casting.toString(value)), w);
                         connector = amp;
                     }
                 }
             }
         }
+        }
         return show.toString();
     }
 
@@ -105,13 +118,15 @@
         State state = State.getState(request);
         Map<String, Object> map = new TreeMap<String, Object>();
         if (log.isDebugEnabled()) {
-            log.debug("path '" + path + "' " + parameters + " " + 
frameworkParameters);
+            log.debug("path '" + path + "' p:" + parameters + " fwp:" + 
frameworkParameters + " " + state);
         }
         for (Map.Entry<String, Object> e : parameters.entrySet()) {
             map.put(e.getKey(), e.getValue());
         }
         if (state.isRendering()) {
             map = new TreeMap<String, Object>(framework.prefix(state, map));
+            String prefix = framework.getPrefix(state);
+            log.debug("Using prefix " + prefix);
             for (Object e : request.getParameterMap().entrySet()) {
                 Map.Entry<String, String[]> entry = (Map.Entry<String, 
String[]>) e;
 
@@ -119,10 +134,12 @@
                 if (k.startsWith(framework.getPrefix(state))) {
                     // for this block, don't add that,
                     // because should be in parameters then
+                    log.trace("skipping " + entry);
                     continue;
                 }
                 if (! map.containsKey(k)) {
-                    map.put(k, entry.getValue()[0]);
+                    log.trace("Adding " + entry);
+                    map.put(k, entry.getValue());
                 }
             }
             Block block = state.getBlock();
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to