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

Modified Files:
        BasicUrlConverter.java BlockUrlConverter.java 
        ChainedUrlConverter.java DirectoryUrlConverter.java 
        MMBaseUrlConverter.java Url.java 
Log Message:
made ChainedUrlConverter use 'quality' settings of UrlConverters


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.20
retrieving revision 1.21
diff -u -b -r1.20 -r1.21
--- BasicUrlConverter.java      25 Oct 2008 08:32:02 -0000      1.20
+++ BasicUrlConverter.java      25 Oct 2008 09:34:28 -0000      1.21
@@ -25,7 +25,7 @@
  *
  *
  * @author Michiel Meeuwissen
- * @version $Id: BasicUrlConverter.java,v 1.20 2008/10/25 08:32:02 michiel Exp 
$
+ * @version $Id: BasicUrlConverter.java,v 1.21 2008/10/25 09:34:28 michiel Exp 
$
  * @since MMBase-1.9
  */
 public final class BasicUrlConverter implements UrlConverter {
@@ -203,20 +203,22 @@
         return BasicUrlConverter.getUrl(path, map, request, escapeAmps);
     }
 
+    public int QUALITY = Integer.MIN_VALUE + 1000;
+
     public Url getUrl(String path,
                             Map<String, Object> parameters,
                             Parameters frameworkParameters, boolean 
escapeAmps) {
-        return new Url(getUrl(path, parameters, frameworkParameters, 
escapeAmps, false));
+        return new Url(this, getUrl(path, parameters, frameworkParameters, 
escapeAmps, false), QUALITY);
     }
     public Url getProcessUrl(String path,
                             Map<String, Object> parameters,
                             Parameters frameworkParameters, boolean 
escapeAmps) {
-        return new Url(getUrl(path, parameters, frameworkParameters, 
escapeAmps, true));
+        return new Url(this, getUrl(path, parameters, frameworkParameters, 
escapeAmps, true), QUALITY);
     }
 
     public Url getInternalUrl(String page, Map<String, Object> params, 
Parameters frameworkParameters) {
         HttpServletRequest request = 
frameworkParameters.get(Parameter.REQUEST);
-        return new Url(BasicUrlConverter.getUrl(page, params, request, false));
+        return new Url(this, BasicUrlConverter.getUrl(page, params, request, 
false),  QUALITY);
     }
 
     public boolean equals(Object o) {


Index: BlockUrlConverter.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/BlockUrlConverter.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- BlockUrlConverter.java      25 Oct 2008 08:58:47 -0000      1.10
+++ BlockUrlConverter.java      25 Oct 2008 09:34:29 -0000      1.11
@@ -25,7 +25,7 @@
  * URLConverters would probably like this, and can extend from this.
  *
  * @author Michiel Meeuwissen
- * @version $Id: BlockUrlConverter.java,v 1.10 2008/10/25 08:58:47 michiel Exp 
$
+ * @version $Id: BlockUrlConverter.java,v 1.11 2008/10/25 09:34:29 michiel Exp 
$
  * @since MMBase-1.9
  * @todo EXPERIMENTAL
  */
@@ -194,7 +194,7 @@
 
             String u = BasicUrlConverter.getUrl(niceUrl.getUrl(), map, 
request, escapeAmps);
             log.debug("Returning actual url " + u);
-            return new Url(u, niceUrl.getQuality());
+            return new Url(this, u, niceUrl.getQuality());
         } else {
             return Url.NOT;
         }


Index: ChainedUrlConverter.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/ChainedUrlConverter.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- ChainedUrlConverter.java    25 Oct 2008 08:32:02 -0000      1.12
+++ ChainedUrlConverter.java    25 Oct 2008 09:34:29 -0000      1.13
@@ -27,7 +27,7 @@
  * outcome of a converter can be added to the outcome of its preceder.
  *
  * @author Andr&eacute; van Toly
- * @version $Id: ChainedUrlConverter.java,v 1.12 2008/10/25 08:32:02 michiel 
Exp $
+ * @version $Id: ChainedUrlConverter.java,v 1.13 2008/10/25 09:34:29 michiel 
Exp $
  * @since MMBase-1.9
  */
 public class ChainedUrlConverter implements UrlConverter {
@@ -97,45 +97,48 @@
         return false;
     }
 
+    protected Url getProposal(Url u, Parameters frameworkParameters) {
+        HttpServletRequest request = 
BasicUrlConverter.getUserRequest(frameworkParameters.get(Parameter.REQUEST));
+        UrlConverter current  = (UrlConverter) 
request.getAttribute(URLCONVERTER);
+        Class preferred       = frameworkParameters.get(URLCONVERTER_PARAM);
+        Url b = u;
+        if (preferred != null && ! preferred.isInstance(u.getUrlConverter())) {
+            b = new Url(b, b.getQuality() - 10000);
+        }
+        if (current != null && u.getUrlConverter() != current) {
+            b = new Url(b, b.getQuality() - 10000);
+        }
+        return b;
+    }
+
     /**
      * The URL to be printed in a page
      */
     public Url getUrl(String path,
                          Map<String, Object> params,
                          Parameters frameworkParameters, boolean escapeAmps) 
throws FrameworkException {
-
-        HttpServletRequest request = 
BasicUrlConverter.getUserRequest(frameworkParameters.get(Parameter.REQUEST));
-        Class preferred = frameworkParameters.get(URLCONVERTER_PARAM);
+        Url result = Url.NOT;
         for (UrlConverter uc : uclist) {
-            if (preferred != null && ! preferred.isInstance(uc)) continue;
-            Url b = uc.getUrl(path, params, frameworkParameters, escapeAmps);
-            if (b != Url.NOT) {
-                UrlConverter current  = (UrlConverter) 
request.getAttribute(URLCONVERTER);
-                if (current != null && uc != current) {
-                    log.debug("Explicit block, but not currently rendering. 
That is done by other UrlConverter " + current);
-                    return Url.NOT;
-                } else {
-                    log.debug("No current urlconverter ");
-                }
-                return b;
+            Url proposal = getProposal(uc.getUrl(path, params, 
frameworkParameters, escapeAmps), frameworkParameters);
+            if (proposal.getQuality() > result.getQuality()) {
+                result = proposal;
             }
+
         }
-        return Url.NOT;
+        return result;
     }
 
     public Url getProcessUrl(String path,
                                 Map<String, Object> params,
                                 Parameters frameworkParameters, boolean 
escapeAmps) throws FrameworkException {
-
-        Class preferred = frameworkParameters.get(URLCONVERTER_PARAM);
+        Url result = Url.NOT;
         for (UrlConverter uc : uclist) {
-            if (preferred != null && ! preferred.isInstance(uc)) continue;
-            Url b = uc.getProcessUrl(path, params, frameworkParameters, 
escapeAmps);
-            if (b != Url.NOT) {
-                return b;
+            Url proposal = getProposal(uc.getProcessUrl(path, params, 
frameworkParameters, escapeAmps), frameworkParameters);
+            if (proposal.getQuality() > result.getQuality()) {
+                result = proposal;
             }
         }
-        return Url.NOT;
+        return result;
     }
 
 
@@ -145,18 +148,15 @@
     public Url getInternalUrl(String path,
                               Map<String, Object> params,
                               Parameters frameworkParameters) throws 
FrameworkException {
-        Class preferred = frameworkParameters.get(URLCONVERTER_PARAM);
+        Url result = Url.NOT;
         for (UrlConverter uc : uclist) {
-            if (preferred != null && ! preferred.isInstance(uc)) continue;
-            Url b = uc.getInternalUrl(path, params, frameworkParameters);
-            if (b != Url.NOT) {
-                log.debug("ChainedUrlConverter has: " + b);
-                HttpServletRequest request = 
BasicUrlConverter.getUserRequest(frameworkParameters.get(Parameter.REQUEST));
-                request.setAttribute(URLCONVERTER, uc);
-                return b;
+            Url proposal = getProposal(uc.getInternalUrl(path, params, 
frameworkParameters), frameworkParameters);
+            if (proposal.getQuality() > result.getQuality()) {
+                result = proposal;
             }
+
         }
-        return Url.NOT;
+        return result;
     }
 
     public String toString() {


Index: DirectoryUrlConverter.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/DirectoryUrlConverter.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- DirectoryUrlConverter.java  25 Oct 2008 08:58:47 -0000      1.11
+++ DirectoryUrlConverter.java  25 Oct 2008 09:34:29 -0000      1.12
@@ -28,7 +28,7 @@
  * It is also assumed that the niceness of the URL's is basicly about one 
block.
  *
  * @author Michiel Meeuwissen
- * @version $Id: DirectoryUrlConverter.java,v 1.11 2008/10/25 08:58:47 michiel 
Exp $
+ * @version $Id: DirectoryUrlConverter.java,v 1.12 2008/10/25 09:34:29 michiel 
Exp $
  * @since MMBase-1.9
  * @todo EXPERIMENTAL
  */
@@ -53,7 +53,7 @@
                                                 Parameters 
frameworkParameters,  boolean action) throws FrameworkException {
         StringBuilder b = new StringBuilder(directory);
         getNiceDirectoryUrl(b, block, parameters, frameworkParameters, action);
-        return new Url(b.toString());
+        return new Url(this, b.toString());
     }
 
     protected abstract void getNiceDirectoryUrl(StringBuilder b, Block block,
@@ -76,7 +76,7 @@
         }
         if (path.size() < 2) {
             log.debug("pa " + pa + " -> " + path + " (Not long enough for " + 
this + ")");
-            return null;
+            return Url.NOT;
         }
         return getFilteredInternalDirectoryUrl(path.subList(2, path.size()), 
params, frameworkParameters);
     }


Index: MMBaseUrlConverter.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/MMBaseUrlConverter.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- MMBaseUrlConverter.java     25 Oct 2008 08:58:47 -0000      1.17
+++ MMBaseUrlConverter.java     25 Oct 2008 09:34:29 -0000      1.18
@@ -20,7 +20,7 @@
  * was configured for this prefix).
  *
  * @author Michiel Meeuwissen
- * @version $Id: MMBaseUrlConverter.java,v 1.17 2008/10/25 08:58:47 michiel 
Exp $
+ * @version $Id: MMBaseUrlConverter.java,v 1.18 2008/10/25 09:34:29 michiel 
Exp $
  * @since MMBase-1.9
  */
 public class MMBaseUrlConverter extends DirectoryUrlConverter {
@@ -145,7 +145,7 @@
         if (log.isDebugEnabled()) {
             log.debug("internal URL " + url);
         }
-        return new Url(url.toString());
+        return new Url(this, url.toString());
     }
 
 }


Index: Url.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/Url.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- Url.java    25 Oct 2008 08:58:47 -0000      1.2
+++ Url.java    25 Oct 2008 09:34:29 -0000      1.3
@@ -17,20 +17,28 @@
 
  *
  * @author Michiel Meeuwissen
- * @version $Id: Url.java,v 1.2 2008/10/25 08:58:47 michiel Exp $
+ * @version $Id: Url.java,v 1.3 2008/10/25 09:34:29 michiel Exp $
  * @since MMBase-1.9
  * @todo EXPERIMENTAL
  */
 
 public class Url {
     private final String url;
+    private final UrlConverter urlConverter;
     private int quality = 0;
-    public Url(String url) {
+    public Url(UrlConverter uc, String url) {
         this.url = url;
+        this.urlConverter = uc;
     }
-    public Url(String url, int q) {
+    public Url(UrlConverter uc, String url, int q) {
         this.url = url;
         this.quality = q;
+        this.urlConverter = uc;
+    }
+    public Url(Url u, int q) {
+        this.url = u.url;
+        this.urlConverter = u.urlConverter;
+        this.quality = q;
     }
     public String getUrl() {
         return url;
@@ -38,8 +46,11 @@
     public int getQuality() {
         return quality;
     }
+    public UrlConverter getUrlConverter() {
+        return urlConverter;
+    }
 
-    public static final Url NOT = new Url(null, Integer.MIN_VALUE);
+    public static final Url NOT = new Url(null, null, Integer.MIN_VALUE);
 
 
     public String toString() {
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to