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

Modified Files:
        BasicFramework.java BasicUrlConverter.java 
        ChainedUrlConverter.java DirectoryUrlConverter.java 
        MMBaseUrlConverter.java UrlConverter.java 
Added Files:
        BlockUrlConverter.java 
Log Message:
some improvmenets on directoryurlconverter stuff


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


BlockUrlConverter.java is new



Index: BasicFramework.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/BasicFramework.java,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -b -r1.35 -r1.36
--- BasicFramework.java 4 Sep 2008 05:56:23 -0000       1.35
+++ BasicFramework.java 20 Oct 2008 16:45:11 -0000      1.36
@@ -34,7 +34,7 @@
  * are configured is the order in which they are processed.
  *
  * @author Michiel Meeuwissen
- * @version $Id: BasicFramework.java,v 1.35 2008/09/04 05:56:23 michiel Exp $
+ * @version $Id: BasicFramework.java,v 1.36 2008/10/20 16:45:11 michiel Exp $
  * @since MMBase-1.9
  */
 public class BasicFramework extends Framework {
@@ -68,14 +68,17 @@
     }
 
 
-    public String getUrl(String path, Map<String, Object> parameters,
+    public String getUrl(String path,
+                         Map<String, Object> parameters,
                          Parameters frameworkParameters, boolean escapeAmps) 
throws FrameworkException {
-        String url = urlConverter.getUrl(path, parameters, 
frameworkParameters, escapeAmps);
-        if (url == null) {
+        String link =  urlConverter.getUrl(path, parameters, 
frameworkParameters, escapeAmps);
+        log.debug("got " + link + " from " + urlConverter);
+        if (link == null) {
             return fallbackConverter.getUrl(path, parameters, 
frameworkParameters, escapeAmps);
         } else {
-            return url;
+            return link;
         }
+
     }
 
 
@@ -152,9 +155,10 @@
     }
 
 
-    public Block getBlock(Parameters frameworkParameters) throws 
FrameworkException {
+    /*public Block getBlock(Parameters frameworkParameters) throws 
FrameworkException {
         return urlConverter.getBlock(null, frameworkParameters);
     }
+    */
 
 
     /**


Index: BasicUrlConverter.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/BasicUrlConverter.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- BasicUrlConverter.java      1 Sep 2008 08:12:40 -0000       1.18
+++ BasicUrlConverter.java      20 Oct 2008 16:45:11 -0000      1.19
@@ -26,7 +26,7 @@
  *
  *
  * @author Michiel Meeuwissen
- * @version $Id: BasicUrlConverter.java,v 1.18 2008/09/01 08:12:40 michiel Exp 
$
+ * @version $Id: BasicUrlConverter.java,v 1.19 2008/10/20 16:45:11 michiel Exp 
$
  * @since MMBase-1.9
  */
 public final class BasicUrlConverter implements UrlConverter {
@@ -113,6 +113,12 @@
         framework = fw;
 
     }
+    /**
+     * This URLConverter can work on any url, so is wlays in 'filtered' mode'.
+     */
+    public boolean isFilteredMode(Parameters frameworkParameters) throws 
FrameworkException {
+        return true;
+    }
 
     /**
      * The BasicUrlConverter is unable to explicitely define a block and hence 
returns  <code>null</code>.


Index: ChainedUrlConverter.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/ChainedUrlConverter.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- ChainedUrlConverter.java    1 Sep 2008 21:05:02 -0000       1.9
+++ ChainedUrlConverter.java    20 Oct 2008 16:45:11 -0000      1.10
@@ -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.9 2008/09/01 21:05:02 michiel 
Exp $
+ * @version $Id: ChainedUrlConverter.java,v 1.10 2008/10/20 16:45:11 michiel 
Exp $
  * @since MMBase-1.9
  */
 public class ChainedUrlConverter implements UrlConverter {
@@ -61,12 +61,34 @@
     }
 
 
-    public Block getBlock(String path, Parameters frameworkParameters) throws 
FrameworkException {
+
+//     public static class Link {
+//         public final static Link NULL = new Link(null, null);
+//         public final Block block;
+//         public final UrlConverter converter;
+//         public Link(UrlConverter converter, Block b) {
+//             this.block = b;
+//             this.converter = converter;
+//         }
+//         public String getUrl() {
+//         }
+//     }
+
+//     public Link chain(String path, Parameters frameworkParameters) throws 
FrameworkException {
+//         for (UrlConverter uc : uclist) {
+//             Block b = uc.getBlock(path, frameworkParameters);
+//             if (b != null) {
+//                 return new Link(uc, b);
+//             }
+//         }
+//         return Link.NULL;
+//     }
+
+    public boolean isFilteredMode(Parameters frameworkParameters) throws 
FrameworkException {
         for (UrlConverter uc : uclist) {
-            Block b = uc.getBlock(path, frameworkParameters);
-            if (b != null) return b;
+            if (uc.isFilteredMode(frameworkParameters)) return true;
         }
-        return null;
+        return false;
     }
 
     /**
@@ -82,7 +104,7 @@
             if (b != null) {
                 UrlConverter current  = (UrlConverter) 
request.getAttribute(URLCONVERTER);
                 if (current != null && uc != current) {
-                    log.debug("Explicit block, but not currently rendering is 
done by other UrlConverter");
+                    log.debug("Explicit block, but not currently rendering. 
That is done by other UrlConverter " + current);
                     return null;
                 } else {
                     log.debug("No current urlconverter ");


Index: DirectoryUrlConverter.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/DirectoryUrlConverter.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- DirectoryUrlConverter.java  1 Sep 2008 21:05:02 -0000       1.4
+++ DirectoryUrlConverter.java  20 Oct 2008 16:45:11 -0000      1.5
@@ -25,19 +25,20 @@
  * stead of [EMAIL PROTECTED] #getUrl} and [EMAIL PROTECTED] #getInternalUrl} 
you override [EMAIL PROTECTED] #getNiceUrl} and [EMAIL PROTECTED]
  * #getFilteredInternalUrl}.
  *
+ * 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.4 2008/09/01 21:05:02 michiel 
Exp $
+ * @version $Id: DirectoryUrlConverter.java,v 1.5 2008/10/20 16:45:11 michiel 
Exp $
  * @since MMBase-1.9
+ * @todo EXPERIMENTAL
  */
-public abstract class DirectoryUrlConverter implements UrlConverter {
+public abstract class DirectoryUrlConverter extends BlockUrlConverter {
     private static final Logger log = 
Logging.getLoggerInstance(DirectoryUrlConverter.class);
 
     protected String  directory = null;
-    protected final BasicFramework framework;
-    protected Set<Component> components = null;
 
     public DirectoryUrlConverter(BasicFramework fw) {
-        framework = fw;
+        super(fw);
     }
 
     public void setDirectory(String d) {
@@ -45,154 +46,26 @@
         if (! directory.endsWith("/")) directory += "/";
     }
 
-    public Parameter[] getParameterDefinition() {
-        return new Parameter[] {Parameter.REQUEST, Framework.COMPONENT, 
Framework.BLOCK};
-    }
-
-
-    protected void addComponent(Component comp) {
-        if (components == null) components = new HashSet<Component>();
-        components.add(comp);
-    }
-
-    /**
-     * The components for which this URL converter can produces nice url. Or 
<code>null</code> if it
-     * can do that for any component.
-    */
-    protected Set<Component> getComponents() {
-        return components;
-    }
-
-
-
-    /**
-     * This proposal implemention simply uses [EMAIL PROTECTED] 
Framework#COMPONENT} [EMAIL PROTECTED] Framework#BLOCK},
-     * which may often be what you want.
-     */
-    protected Block getExplicitBlock(Parameters frameworkParameters) throws 
FrameworkException {
-        String componentName = frameworkParameters.get(Framework.COMPONENT);
-        if (componentName != null) {
-            Component component = 
ComponentRepository.getInstance().getComponent(componentName);
-            if (component == null) throw new FrameworkException("No such 
component " + componentName);
-            String blockName = frameworkParameters.get(Framework.BLOCK);
-            if (blockName == null) {
-                log.debug("found explicit component " + component);
-                return component.getDefaultBlock();
-            } else {
-                Block block = component.getBlock(blockName);
-                if (block == null) throw new FrameworkException("No such block 
" + blockName);
-                log.debug("found explicit block " + block);
-                return block;
-            }
-        }
-        return null;
-    }
-
-    public Block getBlock(String path, Parameters frameworkParameters) throws 
FrameworkException {
-
-
-        HttpServletRequest request = 
BasicUrlConverter.getUserRequest(frameworkParameters.get(Parameter.REQUEST));
-        State state = State.getState(request);
-
-        // First explore
-        Block block = getExplicitBlock(frameworkParameters);
-        if (block != null) {
-            if (components != null && ! 
components.contains(block.getComponent())) {
-                log.debug("Explicit block, but not mine one");
-                return null;
-            }
-            if (path != null && ! "".equals(path)) throw new 
IllegalArgumentException("Cannot use both 'path' argument and 'block' 
parameter");
-            return block;
-        }
 
+    @Override public boolean isFilteredMode(Parameters frameworkParameters) 
throws FrameworkException {
         if (directory == null) throw new RuntimeException("Directory not set");
-        // dealing with the case when we know that we're in 'nice' mode 
already.
-
-        boolean filteredMode = 
FrameworkFilter.getPath(request).startsWith(directory);
-
-        if (filteredMode) {
-            if (state.isRendering() && state.getDepth() == 0) {
-                Block stateBlock = state.getBlock();
-                if (components == null || 
components.contains(stateBlock.getComponent())) {
-                    if (path != null && ! "".equals(path)) {
-                        return stateBlock.getComponent().getBlock(path);
-                    } else {
-                        return stateBlock;
-                    }
-                } else {
-                    log.debug("Not a recognized component");
-                }
-            } else {
-                log.debug("Not currently rendering");
-            }
-        } else {
-            log.debug("Not in filtering mode for " + directory);
-        }
-
-        return null;
-    }
-
-
-
-    protected String getUrl(String path,
-                             Map<String, Object> parameters,
-                             Parameters frameworkParameters, boolean 
escapeAmps, boolean action) throws FrameworkException {
-        Block block = getBlock(path, frameworkParameters);
-        if (block != null) {
-            return getNiceUrl(block, parameters, frameworkParameters, 
escapeAmps, action);
-        } else {
-            return null;
-        }
+        HttpServletRequest request = 
BasicUrlConverter.getUserRequest(frameworkParameters.get(Parameter.REQUEST));
+        return FrameworkFilter.getPath(request).startsWith(directory);
     }
 
-    public String getUrl(String path,
-                         Map<String, Object> parameters,
-                         Parameters frameworkParameters, boolean escapeAmps) 
throws FrameworkException {
-        return getUrl(path, parameters, frameworkParameters, escapeAmps, 
false);
-    }
 
-    public String getProcessUrl(String path,
-                                Map<String, Object> parameters,
-                                Parameters frameworkParameters, boolean 
escapeAmps) throws FrameworkException {
-        return getUrl(path, parameters, frameworkParameters, escapeAmps, true);
-    }
 
-    public String getInternalUrl(String page, Map<String, Object> params, 
Parameters frameworkParameters) throws FrameworkException {
-        HttpServletRequest request = 
frameworkParameters.get(Parameter.REQUEST);
-        if (request == null) return null;
-        if (page == null) throw new IllegalArgumentException();
-        if (page.startsWith(directory)) {
-            String sp = FrameworkFilter.getPath(request);
-            String[] path = sp.split("/");
-            assert path[0].equals("");
-            assert path[1].equals(directory.split("/")[1]);
-            List<String> p = Arrays.asList(path);
-            return getFilteredInternalUrl(p.subList(2, p.size()), params, 
frameworkParameters);
-        } else {
-            if (log.isDebugEnabled()) {
-                log.debug("Leaving unfiltered " + getClass() + " " + page + " 
not starting with " + directory);
-            }
-            return null;
+    @Override final public String getFilteredInternalUrl(String pa, 
Map<String, Object> params, Parameters frameworkParameters) throws 
FrameworkException {
+        List<String> path = new ArrayList<String>();
+        for (String p: pa.split("/")) {
+            path.add(p);
         }
+        return getFilteredInternalDirectoryUrl(path.subList(2, path.size()), 
params, frameworkParameters);
     }
 
-    /**
-     * When implemnting this method, you can already assume that the url must 
be 'nice', iow that we
-     * are actually rendering in the 'realm' of this UrlConverter
-     */
-    protected abstract String getNiceUrl(Block block,
-                                         Map<String, Object> parameters,
-                                         Parameters frameworkParameters,
-                                         boolean escapeAmps, boolean action) 
throws FrameworkException;
+    protected abstract String getFilteredInternalDirectoryUrl(List<String> 
path, Map<String, Object> params, Parameters frameworkParameters) throws 
FrameworkException;
 
 
-    /**
-     * When implementing this method you can assume that you don't have to 
return
-     * <code>null</code>. IOW it is certain that the current URL is 'nice' 
according to this URL
-     * Converter.
-    */
-    protected  abstract String getFilteredInternalUrl(List<String> path, 
Map<String, Object> params, Parameters frameworkParameters) throws 
FrameworkException;
-
 
     public String toString() {
         return directory;


Index: MMBaseUrlConverter.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/MMBaseUrlConverter.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- MMBaseUrlConverter.java     1 Sep 2008 07:06:12 -0000       1.13
+++ MMBaseUrlConverter.java     20 Oct 2008 16:45:11 -0000      1.14
@@ -20,7 +20,7 @@
  * was configured for this prefix).
  *
  * @author Michiel Meeuwissen
- * @version $Id: MMBaseUrlConverter.java,v 1.13 2008/09/01 07:06:12 michiel 
Exp $
+ * @version $Id: MMBaseUrlConverter.java,v 1.14 2008/10/20 16:45:11 michiel 
Exp $
  * @since MMBase-1.9
  */
 public class MMBaseUrlConverter extends DirectoryUrlConverter {
@@ -66,91 +66,22 @@
         }
     }
 
-    protected String getNiceUrl(Block block,
-                                Map<String, Object> parameters,
-                                Parameters frameworkParameters, boolean 
escapeAmps, boolean action) throws FrameworkException {
+    @Override protected String getNiceUrl(Block block, Parameters 
blockParameters, Parameters frameworkParameters,  boolean action) throws 
FrameworkException {
         if (log.isDebugEnabled()) {
-            log.debug("block '" + block  + "' parameters: " + parameters + " 
framework parameters " + frameworkParameters);
+            log.debug("block '" + block  + "'  framework parameters " + 
frameworkParameters);
         }
-        HttpServletRequest request = 
BasicUrlConverter.getUserRequest(frameworkParameters.get(Parameter.REQUEST));
-
+        State state = getState(frameworkParameters);
         String category = frameworkParameters.get(CATEGORY);
-        State state = State.getState(request);
 
         if (category == null && state.isRendering()) {
             category = state.getFrameworkParameters().get(CATEGORY);
         }
+        return directory + (category == null ? "_" : category) + "/" + 
block.getComponent().getName() + "/" + block.getName();
 
-        Component component = block.getComponent();
-
-        // @TODO
-        // Stuff happening with map, and processorUrl and things like that, 
seems to have no place
-        // here.
-        // Refactor it away
-
-
-        Map<String, Object> map = new TreeMap<String, Object>();
-        if (log.isDebugEnabled()) {
-            log.debug("Generating URL to " + block + " State " + state + " 
category " + category);
-        }
-        boolean processUrl = frameworkParameters.get(BasicFramework.ACTION) != 
null;
-        if (processUrl) {
-            // get current components ids
-            if (state.isRendering()) {
-                map.put(BasicFramework.ACTION.getName(), state.getId());
-            } else {
-                map.put(BasicFramework.ACTION.getName(), 
state.getUpcomingId());
-            }
-        }
-
-
-        if (! processUrl && state.isRendering()) {
-            // copy all current parameters of the request.
-            for (Object e : request.getParameterMap().entrySet()) {
-                Map.Entry<String, String[]> entry = (Map.Entry<String, 
String[]>) e;
-                String k = entry.getKey();
-                if (k.equals(Framework.BLOCK.getName())) continue;
-                if (k.equals(Framework.COMPONENT.getName())) continue;
-                if (k.equals(CATEGORY.getName())) continue;
-                log.debug("putting " + entry);
-                map.put(k, entry.getValue());
-            }
-        } else {
-            //log.debug("Now processing " + processor);
         }
 
-        if (! processUrl) {
-            Parameters blockParameters = block.createParameters();
-            blockParameters.setAutoCasting(true);
-            for (Map.Entry<String, Object> entry : parameters.entrySet()) {
-                blockParameters.set(entry.getKey(), entry.getValue());
-            }
-            map.putAll(framework.prefix(state, blockParameters.toMap()));
-        }
-
-        // TODO, if no category specified somehow, then guess when, using the 
avaiable
-        // classifications for the specified block.
-
-        if (category == null) {
-            Block.Type[] classification = block.getClassification();
-        }
-        //boolean subComponent = state.getDepth() > 0;
-
-
-        String page;
-        if (state.isRendering() && state.getBlock().equals(block)) {
-            page = FrameworkFilter.getPath(request);
-        } else {
-            page = directory + (category == null ? "_" : category) + "/" + 
component.getName() + "/" + block.getName() ;
-        }
-
-        //path == null || subComponent ?
-
-        String sb = BasicUrlConverter.getUrl(page, map , request, escapeAmps);
-        return sb;
-    }
 
-    public String getFilteredInternalUrl(List<String> path, Map<String, 
Object> params, Parameters frameworkParameters) {
+    @Override protected String getFilteredInternalDirectoryUrl(List<String> 
path, Map<String, Object> blockParameters, Parameters frameworkParameters) {
         if (path.size() == 0) {
             // nothing indicated after /mmbase/, don't know what to do, 
leaving unfiltered
             return null;
@@ -173,7 +104,7 @@
                     }
                 }
                 if (! categoryOk) {
-                    log.debug("No such component clasification, ignoring 
this");
+                    log.debug("No sBuch component clasification, ignoring 
this");
                     return null;
                 }
             }


Index: UrlConverter.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/UrlConverter.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- UrlConverter.java   1 Sep 2008 07:06:12 -0000       1.9
+++ UrlConverter.java   20 Oct 2008 16:45:11 -0000      1.10
@@ -22,8 +22,9 @@
  * chained one after another.
  *
  * @author Michiel Meeuwissen
- * @version $Id: UrlConverter.java,v 1.9 2008/09/01 07:06:12 michiel Exp $
+ * @version $Id: UrlConverter.java,v 1.10 2008/10/20 16:45:11 michiel Exp $
  * @since MMBase-1.9
+ * @todo EXPERIMENTAL
  */
 public interface UrlConverter {
 
@@ -37,18 +38,16 @@
 
 
     /**
-     * The UrlConverter can indicate whether given framework parameters would 
for it define a
-     * specific block.
-     * @return Explicitely defined block, or <code>null</code> if no block 
defined according to this UrlConverter.
+     * The state of rendering will be determined (request.getRequestUri) and 
we will return if the
+     * current URL is managed by <em>this</em> UrlConverter
      */
-
-    Block getBlock(String path, Parameters urlConvererParameters) throws 
FrameworkException;
+    boolean isFilteredMode(Parameters frameworkParameters) throws 
FrameworkException;
 
     /**
      * See [EMAIL PROTECTED] org.mmbase.framework.Framework#getUrl(String, 
Map, Parameters, boolean)}.
      * But it can also return <code>null</code> which mean, 'I don't know.'
      * @param path The path (generally a relative URL) to create an URL for.
-     * @param parameters Parameters The parameters to be passed to the page
+     * @param parameters Parameters The parameters to be passed to the page, 
as specified e.g. with  mm:param -tags
      * @param frameworkParameters The parameters that are required by the 
framework
      * @param escapeAmps <code>true</code> if parameters should be added with 
an escaped &amp; (&amp;amp;).
      *                   You should escape &amp; when a URL is exposed (i.e. 
in HTML), but not if the url is
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to