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é 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;).
* You should escape & 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