Update of /var/cvs/src/org/mmbase/framework
In directory james.mmbase.org:/tmp/cvs-serv31754
Modified Files:
BasicComponent.java Block.java
Log Message:
ensuring that 'PatternParameters' are always the last in the definition. Went
wrong if you had a processor with parameters. MMB-1769
See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/framework
See also: http://www.mmbase.org/jira/browse/MMB-1769
Index: BasicComponent.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/BasicComponent.java,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -b -r1.51 -r1.52
--- BasicComponent.java 15 Oct 2008 13:03:53 -0000 1.51
+++ BasicComponent.java 5 Jan 2009 17:51:39 -0000 1.52
@@ -24,7 +24,7 @@
* components, and may be requested several blocks.
*
* @author Michiel Meeuwissen
- * @version $Id: BasicComponent.java,v 1.51 2008/10/15 13:03:53 michiel Exp $
+ * @version $Id: BasicComponent.java,v 1.52 2009/01/05 17:51:39 michiel Exp $
* @since MMBase-1.9
*/
public class BasicComponent implements Component {
@@ -156,9 +156,9 @@
b.getDescription().fillFromXml("description", element);
b.getTitle().fillFromXml("title", element);
log.trace("Found block: " + blockName);
- b.getRenderers().put(Renderer.Type.HEAD, getRenderer("head",
element, b));
- b.getRenderers().put(Renderer.Type.BODY, getRenderer("body",
element, b));
- b.processor = getProcessor("process", element, b);
+ b.putRenderer(Renderer.Type.HEAD, getRenderer("head", element,
b));
+ b.putRenderer(Renderer.Type.BODY, getRenderer("body", element,
b));
+ b.setProcessor(getProcessor("process", element, b));
if (defaultBlock == null) defaultBlock = b;
blocks.put(blockName, b);
}
Index: Block.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/Block.java,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -b -r1.41 -r1.42
--- Block.java 7 Aug 2008 14:51:06 -0000 1.41
+++ Block.java 5 Jan 2009 17:51:39 -0000 1.42
@@ -37,7 +37,7 @@
*
* @author Johannes Verelst
* @author Michiel Meeuwissen
- * @version $Id: Block.java,v 1.41 2008/08/07 14:51:06 michiel Exp $
+ * @version $Id: Block.java,v 1.42 2009/01/05 17:51:39 michiel Exp $
* @since MMBase-1.9
*/
public class Block {
@@ -45,9 +45,10 @@
private static final Logger log = Logging.getLoggerInstance(Block.class);
private final Map<Renderer.Type, Renderer> renderers = new
EnumMap<Renderer.Type, Renderer>(Renderer.Type.class);
- Processor processor;
+ private Processor processor;
- protected Parameter.Wrapper specific;
+ protected Parameter[] specific;
+ protected Parameter[] paramDefinition = null;
private final String name;
private final String mimetype;
@@ -126,7 +127,7 @@
* the block). Use {...@link #getRenderer(Renderer.Type}).
*/
Map<Renderer.Type, Renderer> getRenderers() {
- return renderers;
+ return Collections.unmodifiableMap(renderers);
}
/**
@@ -148,15 +149,47 @@
void addParameters(Parameter ... params) {
List<Parameter> help = new ArrayList<Parameter>();
if (specific != null) {
- help.addAll(Arrays.asList(specific.getArguments()));
+ help.addAll(Arrays.asList(specific));
}
for (Parameter p : params) {
help.add(p);
}
- specific = new Parameter.Wrapper(help.toArray(Parameter.emptyArray()));
+ specific = help.toArray(Parameter.emptyArray());
log.debug("Set parameters of " + this + " to " + help);
}
+ private void addParameters(List<Parameter> list, Parameter[] params) {
+ for (Parameter p : params) {
+ if (! (p instanceof PatternParameter)) {
+ list.add(p);
+ }
+ }
+ }
+ private void addPatternParameters(List<Parameter> list, Parameter[]
params) {
+ for (Parameter p : params) {
+ if (p instanceof PatternParameter) {
+ list.add(p);
+ }
+ }
+ }
+
+ private synchronized void calculateParameterDefinition() {
+ List<Parameter> list = new ArrayList<Parameter>();
+
+ addParameters(list, specific);
+ addParameters(list, getRenderer(Renderer.Type.HEAD).getParameters());
+ addParameters(list, getRenderer(Renderer.Type.BODY).getParameters());
+ addParameters(list, getProcessor().getParameters());
+
+ addPatternParameters(list, specific);
+ addPatternParameters(list,
getRenderer(Renderer.Type.HEAD).getParameters());
+ addPatternParameters(list,
getRenderer(Renderer.Type.BODY).getParameters());
+ addPatternParameters(list, getProcessor().getParameters());
+
+ paramDefinition = list.toArray(Parameter.emptyArray());
+
+ }
+
/**
* Before rendering, it may have to be fed with certain parameters. Obtain
a parameters
@@ -166,10 +199,10 @@
if (specific == null) {
return new AutodefiningParameters();
} else {
- return new Parameters(specific,
- new
Parameter.Wrapper(getRenderer(Renderer.Type.HEAD).getParameters()),
- new
Parameter.Wrapper(getRenderer(Renderer.Type.BODY).getParameters()),
- new
Parameter.Wrapper(getProcessor().getParameters()));
+ if (paramDefinition == null) {
+ calculateParameterDefinition();
+ }
+ return new Parameters(paramDefinition);
}
}
@@ -184,6 +217,17 @@
return getName();
}
+ Processor setProcessor(Processor p) {
+ paramDefinition = null;
+ Processor r = processor;
+ processor = p;
+ return r;
+ }
+ Renderer putRenderer(Renderer.Type type, Renderer renderer) {
+ paramDefinition = null;
+ return renderers.put(type, renderer);
+ }
+
/**
* Every block can be assigned a hierarchal 'Type', which can classify it.
*/
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs