Update of
/var/cvs/applications/vpro-wizards/src/org/mmbase/applications/vprowizards/spring/cache/template
In directory
james.mmbase.org:/tmp/cvs-serv17195/applications/vpro-wizards/src/org/mmbase/applications/vprowizards/spring/cache/template
Modified Files:
QueryTemplate.java MultiTemplateParser.java
AbstractTemplateParser.java
Added Files:
MultiTemplateValidator.java
Log Message:
some more refactoring
See also:
http://cvs.mmbase.org/viewcvs/applications/vpro-wizards/src/org/mmbase/applications/vprowizards/spring/cache/template
MultiTemplateValidator.java is new
Index: QueryTemplate.java
===================================================================
RCS file:
/var/cvs/applications/vpro-wizards/src/org/mmbase/applications/vprowizards/spring/cache/template/QueryTemplate.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- QueryTemplate.java 6 Dec 2008 17:58:51 -0000 1.1
+++ QueryTemplate.java 6 Dec 2008 18:45:42 -0000 1.2
@@ -1,7 +1,5 @@
package org.mmbase.applications.vprowizards.spring.cache.template;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
public class QueryTemplate extends Template{
Index: MultiTemplateParser.java
===================================================================
RCS file:
/var/cvs/applications/vpro-wizards/src/org/mmbase/applications/vprowizards/spring/cache/template/MultiTemplateParser.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- MultiTemplateParser.java 6 Dec 2008 17:58:51 -0000 1.1
+++ MultiTemplateParser.java 6 Dec 2008 18:45:42 -0000 1.2
@@ -8,6 +8,24 @@
private TemplateQueryRunner templateQueryRunner;
+ public static boolean isTemplate(String template) {
+ MultiTemplateValidator validator = new
MultiTemplateValidator(template);
+ validator.validate();
+ return validator.isValidMultitemplate();
+ }
+
+ /**
+ * Convenience method to clean the node numbers from a multi template. For
this you don't need
+ * things like node type,node number or a [EMAIL PROTECTED]
TemplateQueryRunner} instance.
+ * @param template
+ * @return
+ */
+ public static String cleanTemplate(String template) {
+ MultiTemplateParser mtp = new MultiTemplateParser("", "", template,
null);
+ mtp.removeNumber();
+ return mtp.getTemplate();
+ }
+
public MultiTemplateParser(String nodeType, String nodeNumber, String
template,
TemplateQueryRunner templateQueryRunner) {
super(nodeType, nodeNumber, template);
@@ -23,12 +41,6 @@
});
}
-// public void setTemplate(String template) {
-// if (!MultiTemplateParser.isTemplate(template)) {
-// throw new IllegalStateException(String.format("template %s is
not a multi template.", template));
-// }
-// this.template = template;
-// }
public void removeNumber() {
process(new Processor() {
@@ -39,76 +51,6 @@
});
}
- public static boolean isTemplate(String template) {
- boolean result = true, insideTemplate = false;
- int templatesOpened = 0, templatesClosed = 0;
- boolean nextCharEscaped = false;
- String subTemplate = "";
- List<String> templates = new ArrayList<String>();
-
- char[] chars = template.toCharArray();
- for (char c : chars) {
- switch (c) {
- case '\\':
- if (!nextCharEscaped) {
- nextCharEscaped = true;
- break;
- }
- case '[':
- // if escape is on, and you are not inside a subtemplate,
start a new subtemplate
- //if you are inside a template: disregard escape, write it
- if(insideTemplate){
- subTemplate = subTemplate + c;
- }else{
- if(!nextCharEscaped){
- insideTemplate = true;
- templatesOpened++;
- }
- }
- nextCharEscaped = false;
- break;
-
- case ']':
- // if escape is off, and you are inside a subtemplate,
finish this.
- // if escape is on and you are inside a template, write it.
- if (insideTemplate) {
- if (nextCharEscaped) {
- subTemplate = subTemplate + c;
- } else {
- insideTemplate = false;
- templates.add(subTemplate);
- subTemplate = "";
- templatesClosed++;
- }
- }
- nextCharEscaped = false;
- break;
-
- default:
- if (insideTemplate) {
- subTemplate = subTemplate + c;
- }
- nextCharEscaped = false;
- }
- }
-
- for (String t : templates) {
- if (!SimpleTemplateParser.isTemplate(t) &&
!QueryTemplateParser.isTemplate(t))
- result = false;
- }
- if (templatesOpened != templatesClosed)
- result = false;
- if (templates.size() == 0)
- result = false; /* multitemplate should contain at least one sub
template in square brackets */
- return result;
- }
-
- public static String cleanTemplate(String template) {
- MultiTemplateParser mtp = new MultiTemplateParser("", "", template,
null);
- mtp.removeNumber();
- return mtp.getTemplate();
- }
-
private void process(Processor processor) {
int offset = 0;
while (offset < template.getTemplate().length() &&
MultiTemplateParser.isTemplate(template.getTemplate().substring(offset))) {
@@ -128,6 +70,7 @@
}
private TemplateParser createParserForSubtemplate(String subTemplate) {
+ //TODO: i would like a factory class for all this type specific stuff.
if (QueryTemplateParser.isTemplate(subTemplate)) {
QueryTemplate queryTemplate = new QueryTemplate(subTemplate);
return new QueryTemplateParser(nodeType, nodeNumber, subTemplate,
queryTemplate, templateQueryRunner);
@@ -136,7 +79,6 @@
return new SimpleTemplateParser(nodeType, nodeNumber, subTemplate);
}
throw new RuntimeException(String.format("Could not find right parser
for template %s", subTemplate));
-
}
@@ -161,6 +103,8 @@
@Override
protected Template instantiateTemplate(String templateStr) {
+ //TODO: there should be a MultiTemplate type, that holds the structure
of text/subtemplates as a model.
+
return new Template(templateStr);
}
}
Index: AbstractTemplateParser.java
===================================================================
RCS file:
/var/cvs/applications/vpro-wizards/src/org/mmbase/applications/vprowizards/spring/cache/template/AbstractTemplateParser.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- AbstractTemplateParser.java 6 Dec 2008 17:58:51 -0000 1.1
+++ AbstractTemplateParser.java 6 Dec 2008 18:45:42 -0000 1.2
@@ -27,7 +27,7 @@
}
//TODO: this is all a bit weird. Better solution for static isTemplate()
methods
- //(should be in interface, but you dont want to instantiate a parser to
see if it can parse a template...
+ //(should be in interface, but you don't want to instantiate a parser to
see if it can parse a template...
protected abstract boolean matches(String template);
protected abstract Template instantiateTemplate(String templateStr);
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs