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

Reply via email to