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

Modified Files:
        BasicFramework.java BasicUrlConverter.java 
        ChainedUrlConverter.java DirectoryUrlConverter.java 
        MMBaseUrlConverter.java UrlConverter.java 
Log Message:
Finished DirectoryUrlConverter and extend MMBaseUrlConverter from it. Added a 
method 'getBlock' on UrlConverter. Javadoc


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


Index: BasicFramework.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/BasicFramework.java,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -b -r1.31 -r1.32
--- BasicFramework.java 26 Aug 2008 19:45:21 -0000      1.31
+++ BasicFramework.java 1 Sep 2008 07:06:12 -0000       1.32
@@ -34,7 +34,7 @@
  * are configured is the order in which they are processed.
  *
  * @author Michiel Meeuwissen
- * @version $Id: BasicFramework.java,v 1.31 2008/08/26 19:45:21 michiel Exp $
+ * @version $Id: BasicFramework.java,v 1.32 2008/09/01 07:06:12 michiel Exp $
  * @since MMBase-1.9
  */
 public class BasicFramework extends Framework {
@@ -152,68 +152,15 @@
     }
 
 
-    public Block getBlock(Parameters frameworkParameters) {
-        HttpServletRequest request = 
frameworkParameters.get(Parameter.REQUEST);
-        State state = State.getState(request);
-        log.debug("Getting block for " + frameworkParameters + " -> " + state);
-
-        // BasicFramework always shows only one component
-        Component component  = 
ComponentRepository.getInstance().getComponent(frameworkParameters.get(MMBaseUrlConverter.COMPONENT));
-        boolean explicitComponent = component != null;
-        if (state != null && state.isRendering()) {
-            component = state.getBlock().getComponent();
-        } else {
-            log.debug("No state object found");
-        }
-
-        if (component == null || !component.getName().equals("mynews")) {
-            log.debug("Not currently rendering mynews component");
-            return null;
-        } else {
-            // can explicitely state new block by either 'path' (of mm:url) or 
framework parameter  'block'.
-            boolean filteredMode =
-                (state == null && explicitComponent) ||
-                request.getServletPath().startsWith("/magazine");
-
-            log.debug("Using " + component);
-
-            Block block = null;
-            String blockParam = 
frameworkParameters.get(MMBaseUrlConverter.BLOCK);
-            if (blockParam != null) {
-                block = component.getBlock(blockParam);
-            }
-            /*
-            else {
-                block = component.getBlock(path);
-                if (block == null && path != null && ! "".equals(path)) {
-                    log.debug("No block '" + path + "' found");
-                    return null;
-                }
-
-            }
-            */
-            if (block == null && state != null) {
-                block = state.getRenderer().getBlock();
-            }
-
-            if (block == null) {
-                log.debug("Cannot determin a block for '" + state + "' suppose 
it a normal link");
-                if (filteredMode) {
-                    return null;
-                } else {
-                    // throw new IllegalArgumentException("not such block '" + 
+ " for component " + block);
-                }
-            }
-            return block;
-        }
-        //return null;
+    public Block getBlock(Parameters frameworkParameters) throws 
FrameworkException {
+        return urlConverter.getBlock(frameworkParameters);
     }
 
 
     /**
      */
     public Parameter[] getParameterDefinition() {
-        return new Parameter[] { ACTION, Parameter.REQUEST, Parameter.CLOUD, 
new Parameter.Wrapper(urlConverter.getParameterDefinition())};
+        return new Parameter[] {ACTION, Parameter.REQUEST, Parameter.CLOUD, 
new Parameter.Wrapper(urlConverter.getParameterDefinition())};
     }
 
     public Parameters createParameters() {


Index: BasicUrlConverter.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/BasicUrlConverter.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- BasicUrlConverter.java      18 Apr 2008 13:47:13 -0000      1.16
+++ BasicUrlConverter.java      1 Sep 2008 07:06:12 -0000       1.17
@@ -26,7 +26,7 @@
  *
  *
  * @author Michiel Meeuwissen
- * @version $Id: BasicUrlConverter.java,v 1.16 2008/04/18 13:47:13 michiel Exp 
$
+ * @version $Id: BasicUrlConverter.java,v 1.17 2008/09/01 07:06:12 michiel Exp 
$
  * @since MMBase-1.9
  */
 public final class BasicUrlConverter implements UrlConverter {
@@ -115,6 +115,13 @@
     }
 
     /**
+     * The BasicUrlConverter is unable to explicitely define a block and hence 
returns  <code>null</code>.
+     */
+    public Block getBlock(Parameters frameworkParameters) {
+        return null;
+    }
+
+    /**
      * @todo Actually these parameters are only added here, because this 
urlconverter is always in
      * BasicFramework. Actually BasicFramework should add them itself.
      */
@@ -133,6 +140,8 @@
         return req;
     }
 
+
+
     protected String getUrl(String path,
                             Map<String, Object> parameters,
                             Parameters frameworkParameters, boolean 
escapeAmps, boolean action) {


Index: ChainedUrlConverter.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/ChainedUrlConverter.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- ChainedUrlConverter.java    18 Apr 2008 13:47:13 -0000      1.7
+++ ChainedUrlConverter.java    1 Sep 2008 07:06:12 -0000       1.8
@@ -11,7 +11,7 @@
 
 import java.util.*;
 
-import org.mmbase.framework.FrameworkException;
+import org.mmbase.framework.*;
 import org.mmbase.util.functions.Parameters;
 import org.mmbase.util.functions.Parameter;
 
@@ -25,7 +25,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.7 2008/04/18 13:47:13 michiel 
Exp $
+ * @version $Id: ChainedUrlConverter.java,v 1.8 2008/09/01 07:06:12 michiel 
Exp $
  * @since MMBase-1.9
  */
 public class ChainedUrlConverter implements UrlConverter {
@@ -57,6 +57,15 @@
         return parameterDefinition.toArray(Parameter.EMPTY);
     }
 
+
+    public Block getBlock(String path, Parameters frameworkParameters) throws 
FrameworkException {
+        for (UrlConverter uc : uclist) {
+            Block b = uc.getBlock(path, frameworkParameters);
+            if (b != null) return b;
+        }
+        return null;
+    }
+
     /**
      * The URL to be printed in a page
      */


Index: DirectoryUrlConverter.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/DirectoryUrlConverter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- DirectoryUrlConverter.java  30 Aug 2008 09:20:19 -0000      1.1
+++ DirectoryUrlConverter.java  1 Sep 2008 07:06:12 -0000       1.2
@@ -26,77 +26,146 @@
  * #getFilteredInternalUrl}.
  *
  * @author Michiel Meeuwissen
- * @version $Id: DirectoryUrlConverter.java,v 1.1 2008/08/30 09:20:19 michiel 
Exp $
+ * @version $Id: DirectoryUrlConverter.java,v 1.2 2008/09/01 07:06:12 michiel 
Exp $
  * @since MMBase-1.9
  */
 public abstract class DirectoryUrlConverter implements UrlConverter {
     private static final Logger log = 
Logging.getLoggerInstance(DirectoryUrlConverter.class);
 
-    protected String  directory = "/magazine";
-    protected final Framework framework;
+    protected String  directory = null;
+    protected final BasicFramework framework;
+    protected Set<Component> components = null;
 
-    public DirectoryUrlConverter(Framework fw) {
+    public DirectoryUrlConverter(BasicFramework fw) {
         framework = fw;
     }
 
     public void setDirectory(String d) {
         directory = d;
+        if (! directory.endsWith("/")) directory += "/";
     }
 
     public Parameter[] getParameterDefinition() {
-        return new Parameter[] {Parameter.REQUEST};
+        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 List<Component> getComponents() {
+    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;
     }
 
-    protected String getUrl(String path,
-                             Map<String, Object> parameters,
-                             Parameters frameworkParameters, boolean 
escapeAmps, boolean action) {
+    public Block getBlock(String path, Parameters frameworkParameters) throws 
FrameworkException {
+
+        // First explore
+        Block block = getExplicitBlock(frameworkParameters);
+        if (block != null) {
+            if (path != null && ! "".equals(path)) throw new 
IllegalArgumentException("Cannot use both 'path' argument and 'block' 
parameter");
+            return block;
+        }
+
         HttpServletRequest request = 
BasicUrlConverter.getUserRequest(frameworkParameters.get(Parameter.REQUEST));
-        State state = State.getState(request);
+        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) {
+            State state = State.getState(request);
+            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);
+        }
 
-        /*
-        Block block = framework.getBlock(frameworkParameters);
+        return null;
+    }
 
-            if (block != null && 
"mynews".equals(block.getComponent().getName())) {
-        */
 
-        if (state.isRendering() || ! filteredMode) {
-            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 getNiceUrl(path, parameters, frameworkParameters, 
escapeAmps, action);
+            return null;
         }
     }
 
     public String getUrl(String path,
                          Map<String, Object> parameters,
-                         Parameters frameworkParameters, boolean escapeAmps) {
+                         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) {
+                                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("/");
-            return getFilteredInternalUrl(path, params, frameworkParameters);
+            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 {
-            log.debug("Leaving unfiltered");
+            if (log.isDebugEnabled()) {
+                log.debug("Leaving unfiltered " + getClass() + " " + page + " 
not starting with " + directory);
+            }
             return null;
         }
     }
@@ -105,8 +174,10 @@
      * 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(String path, Map<String, Object> 
parameters,
-                               Parameters frameworkParameters, boolean 
escapeAmps, boolean action);
+    protected abstract String getNiceUrl(Block block,
+                                         Map<String, Object> parameters,
+                                         Parameters frameworkParameters,
+                                         boolean escapeAmps, boolean action) 
throws FrameworkException;
 
 
     /**
@@ -114,7 +185,7 @@
      * <code>null</code>. IOW it is certain that the current URL is 'nice' 
according to this URL
      * Converter.
     */
-    protected  abstract String getFilteredInternalUrl(String[] path, 
Map<String, Object> params, Parameters frameworkParameters) throws 
FrameworkException;
+    protected  abstract String getFilteredInternalUrl(List<String> path, 
Map<String, Object> params, Parameters frameworkParameters) throws 
FrameworkException;
 
 
     public String toString() {


Index: MMBaseUrlConverter.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/MMBaseUrlConverter.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- MMBaseUrlConverter.java     26 Aug 2008 19:45:21 -0000      1.12
+++ MMBaseUrlConverter.java     1 Sep 2008 07:06:12 -0000       1.13
@@ -20,135 +20,78 @@
  * was configured for this prefix).
  *
  * @author Michiel Meeuwissen
- * @version $Id: MMBaseUrlConverter.java,v 1.12 2008/08/26 19:45:21 michiel 
Exp $
+ * @version $Id: MMBaseUrlConverter.java,v 1.13 2008/09/01 07:06:12 michiel 
Exp $
  * @since MMBase-1.9
  */
-public class MMBaseUrlConverter implements UrlConverter {
+public class MMBaseUrlConverter extends DirectoryUrlConverter {
 
     private static final Logger log = 
Logging.getLoggerInstance(MMBaseUrlConverter.class);
 
-    /**
-     * MMBaseUrlConverter points to a jsp which renders 1 block. This 
parameter indicates of which component.
-     */
-    public static final Parameter<String> COMPONENT = new 
Parameter<String>("component", String.class);
 
-    /**
-     * MMBaseUrlConverter points to a jsp which renders 1 block. This 
parameter indicates its name.
-     */
-    public static final Parameter<String> BLOCK     = new 
Parameter<String>("block", String.class);
 
     /**
      * MMBaseUrlConverter wants a 'category'.
      */
     public static final Parameter<String> CATEGORY  = new 
Parameter<String>("category", String.class);
 
-
-    private final BasicFramework framework;
-
-    protected String dir = "/mmbase/";
-
     protected String renderJsp = "/mmbase/admin/index.jsp";
 
     public MMBaseUrlConverter(BasicFramework fw) {
-        framework = fw;
+        super(fw);
+        setDirectory("/mmbase/");
     }
 
-    public void setDir(String d) {
-        dir = d;
-    }
 
     public void setRenderJsp(String j) {
         renderJsp = j;
     }
 
-    public Parameter[] getParameterDefinition() {
-        return new Parameter[] {Parameter.REQUEST, CATEGORY, COMPONENT, BLOCK};
-    }
-
-    protected String getUrl(String path,
-                            Map<String, Object> parameters,
-                            Parameters frameworkParameters, boolean 
escapeAmps, boolean action) {
-        if (log.isDebugEnabled()) {
-            log.debug("path '" + path + "' parameters: " + parameters + " 
framework parameters " + frameworkParameters);
+    @Override public Parameter[] getParameterDefinition() {
+        return new Parameter[] {Parameter.REQUEST, CATEGORY, 
Framework.COMPONENT, Framework.BLOCK};
         }
-        HttpServletRequest request = 
BasicUrlConverter.getUserRequest(frameworkParameters.get(Parameter.REQUEST));
-        State state = State.getState(request);
 
-        String category = frameworkParameters.get(CATEGORY);
-        if (category == null && state.isRendering()) {
-            category = state.getFrameworkParameters().get(CATEGORY);
+    @Override public Block getBlock(String path, Parameters 
frameworkParameters) throws FrameworkException {
+        Block block = super.getBlock(path, frameworkParameters);
+        if (block == null) {
+            String categoryName = frameworkParameters.get(CATEGORY);
+            if (categoryName != null) {
+                boolean categoryOk = false;
+                Block.Type[] mmbaseBlocks = 
ComponentRepository.getInstance().getBlockClassification("mmbase." + 
categoryName);
+                if (mmbaseBlocks.length == 0) throw new FrameworkException("No 
such category mmbase." + categoryName);
+                return mmbaseBlocks[0].getBlocks().get(0);
         }
-
-        // MMBase urls always shows only one block
-        Component component  = 
ComponentRepository.getInstance().getComponent(frameworkParameters.get(COMPONENT));
-        if (component == null) {
-            // if no explicit component specified, suppose current component, 
if there is one:
-            if (state.isRendering()) {
-                component = state.getBlock().getComponent();
-            } else {
-                log.debug("No rendering state object found, so no current 
component.");
-                if (category != null) {
-                    log.debug("Found category " + category);
-                    return dir + category;
-                } else {
                     return null;
+        } else {
+            return block;
                 }
             }
-        }
-
-        assert component != null;
-
-        boolean filteredMode = 
FrameworkFilter.getPath(request).startsWith(dir);
 
-
-        if (state.isRendering() && (! filteredMode || state.getDepth() > 0)) {
-            log.debug("we are rendering a sub-component, deal with that as if  
no mmbaseurlconverter. " + filteredMode);
-            return null;
+    protected String getNiceUrl(Block block,
+                                Map<String, Object> parameters,
+                                Parameters frameworkParameters, boolean 
escapeAmps, boolean action) throws FrameworkException {
+        if (log.isDebugEnabled()) {
+            log.debug("block '" + block  + "' parameters: " + parameters + " 
framework parameters " + frameworkParameters);
         }
+        HttpServletRequest request = 
BasicUrlConverter.getUserRequest(frameworkParameters.get(Parameter.REQUEST));
 
+        String category = frameworkParameters.get(CATEGORY);
+        State state = State.getState(request);
 
-        Block block;
-        {  // determin the block:
-            String blockParam = frameworkParameters.get(BLOCK);
-            if (blockParam != null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("found block " + blockParam + " trying it on " + 
component);
+        if (category == null && state.isRendering()) {
+            category = state.getFrameworkParameters().get(CATEGORY);
                 }
 
-                if (path != null && ! "".equals(path)) throw new 
IllegalArgumentException("Cannot use both 'path' argument and 'block' 
parameter");
-                block = component.getBlock(blockParam);
-                if (block == null) throw new IllegalArgumentException("No 
block '" + blockParam + "' found in component '" + component + "'");
-            } else {
-                block = component.getBlock(path);
-                if (block != null) {
-                    if (! filteredMode) {
-                        path = null; // used, determin path with block name
-                    }
-                } else {
-                    // no such block
-                    if (path != null && ! "".equals(path)) {
-                        log.debug("No block '" + path + "' found");
-                        return null;
-                    }
-                }
-                if (block == null) {
-                    if(state.isRendering()) {
-                        // current block
-                        block = state.getRenderer().getBlock();
-                    } else {
-                        // default block
-                        block = component.getDefaultBlock();
-                    }
-                }
-            }
-        }
+        Component component = block.getComponent();
 
-        assert block != null;
+        // @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("Creating URL to component " + component + " generating 
URL to " + block + " State " + state + " category " + category);
+            log.debug("Generating URL to " + block + " State " + state + " 
category " + category);
         }
         boolean processUrl = frameworkParameters.get(BasicFramework.ACTION) != 
null;
         if (processUrl) {
@@ -166,8 +109,8 @@
             for (Object e : request.getParameterMap().entrySet()) {
                 Map.Entry<String, String[]> entry = (Map.Entry<String, 
String[]>) e;
                 String k = entry.getKey();
-                if (k.equals(BLOCK.getName())) continue;
-                if (k.equals(COMPONENT.getName())) continue;
+                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());
@@ -198,7 +141,7 @@
         if (state.isRendering() && state.getBlock().equals(block)) {
             page = FrameworkFilter.getPath(request);
         } else {
-            page = dir + (category == null ? "_" : category) + "/" + 
component.getName() + "/" + block.getName() ;
+            page = directory + (category == null ? "_" : category) + "/" + 
component.getName() + "/" + block.getName() ;
         }
 
         //path == null || subComponent ?
@@ -207,30 +150,16 @@
         return sb;
     }
 
-    public String getUrl(String path,
-                         Map<String, Object> parameters,
-                         Parameters frameworkParameters, boolean escapeAmps) {
-        return getUrl(path, parameters, frameworkParameters, escapeAmps, 
false);
-    }
-    public String getProcessUrl(String path,
-                                Map<String, Object> parameters,
-                                Parameters frameworkParameters, boolean 
escapeAmps) {
-        return getUrl(path, parameters, frameworkParameters, escapeAmps, true);
-    }
-    public String getInternalUrl(String page, Map<String, Object> params, 
Parameters frameworkParameters) {
-        HttpServletRequest request = 
frameworkParameters.get(Parameter.REQUEST);
-        if (request == null) return null;
-        if (page == null) throw new IllegalArgumentException();
-        if (page.startsWith(dir)) {
-            //String sp = FrameworkFilter.getPath(request); // I don't 
remember where this was for.
-            String[] path = page.split("/"); // use to be sp.split("/")
-            if (log.isDebugEnabled()) {
-                log.debug("Going to filter " + Arrays.asList(path));
+    public String getFilteredInternalUrl(List<String> path, Map<String, 
Object> params, Parameters frameworkParameters) {
+        if (path.size() == 0) {
+            // nothing indicated after /mmbase/, don't know what to do, 
leaving unfiltered
+            return null;
             }
-            if (path.length >= 3) {
-                assert path[0].equals("");
-                assert path[1].equals(dir.split("/")[1]);
-                String category = path[2];
+
+        StringBuilder url = new StringBuilder(renderJsp);
+
+        {   // dealing with the category part
+            String category = path.get(0);
                 if (! category.equals("_")) {
                     boolean categoryOk = false;
                     Block.Type[] mmbaseBlocks = 
ComponentRepository.getInstance().getBlockClassification("mmbase");
@@ -249,47 +178,39 @@
                     }
                 }
 
-                StringBuilder url = new StringBuilder(renderJsp);
                 url.append("?category=");
                 url.append(category);
+        }
 
-                if (path.length == 3) return url.toString();
+        if (path.size() > 1) {
+            // dealing with the component part
 
-                Component comp = 
ComponentRepository.getInstance().getComponent(path[3]);
+            Component comp = 
ComponentRepository.getInstance().getComponent(path.get(1));
                 if (comp == null) {
                     log.debug("No such component, ignoring this too");
                     return null;
                 }
                 url.append("&component=").append(comp.getName());
 
-                if (path.length == 4) return url.toString();
-
-                Block block = comp.getBlock(path[4]);
+            if (path.size() > 2) {
+                // dealing with the block
+                Block block = comp.getBlock(path.get(2));
                 if (log.isDebugEnabled()) {
                     log.debug("Will try to display " + block);
                 }
                 if (block == null) {
-                    log.debug("No block " + path[4] + " in component " + 
path[3]);
+                    log.debug("No block " + path.get(2) + " in component " + 
comp);
                     return null;
 
                 }
                 url.append("&block=").append(block.getName());
+            }
+        }
+
                 if (log.isDebugEnabled()) {
                     log.debug("internal URL " + url);
                 }
                 return url.toString();
-            } else {
-                log.debug("path length " + path.length);
-                return null;
-            }
-        } else {
-            log.debug("Leaving unfiltered");
-            return null;
-        }
-    }
-
-    public String toString() {
-        return dir;
     }
 
 }


Index: UrlConverter.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/basic/UrlConverter.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- UrlConverter.java   25 Apr 2008 14:31:39 -0000      1.8
+++ UrlConverter.java   1 Sep 2008 07:06:12 -0000       1.9
@@ -10,7 +10,7 @@
 package org.mmbase.framework.basic;
 import java.util.*;
 
-import org.mmbase.framework.FrameworkException;
+import org.mmbase.framework.*;
 import org.mmbase.util.functions.*;
 
 /**
@@ -22,14 +22,28 @@
  * chained one after another.
  * 
  * @author Michiel Meeuwissen
- * @version $Id: UrlConverter.java,v 1.8 2008/04/25 14:31:39 andre Exp $
+ * @version $Id: UrlConverter.java,v 1.9 2008/09/01 07:06:12 michiel Exp $
  * @since MMBase-1.9
  */
 public interface UrlConverter {
 
 
+    /**
+     * An URLConverter can add parameters to it's parent Framework. If the 
parameter is already
+     * defined in the Framework, the framework will of course ignore the one 
requested to be defined
+     * by this UrlConverter.
+     */
     Parameter[] getParameterDefinition();
 
+
+    /**
+     * 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.
+     */
+
+    Block getBlock(String path, Parameters urlConvererParameters) 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.'
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to