-S2Tools
POJOでためし掘りしてみようかとS2周辺ツールのインターフェイス切ってみました。これでうまいこと成果がでるようなら報告します。S2Containerを組み込んだS2Pluginが実現しなくてもTestCaseに組み込んで使えるかなと思ってます。
インターフェイスはこんな感じ。
package org.seasar.tools.validate; import java.io.InputStream; import org.seasar.tools.Task; import org.seasar.tools.TaskMonitor; public interface ValidateTask { public boolean validate(InputStream in, TaskMonitor monitor) throws Throwable; }
package org.seasar.tools.validate; public interface ValidateReporter { public void report(ValidateTask task, boolean error, String message); public void report(ValidateTask task, boolean error, String message, int begin, int end); }
実装イメージはこんな感じ。うまくできたら、Groovy-Seasarのも作ってみたいな。
package org.seasar.tools.validate; import java.io.InputStream; import org.seasar.framework.container.S2Container; import org.seasar.framework.xml.SaxHandlerParser; import org.seasar.tools.TaskMonitor; public class S2ConfigXMLValidateTask implements ValidateTask { private ValidateReporter reporter; public S2ConfigXMLValidateTask(ValidateReporter reporter) { this.reporter = reporter; } public String getTaskName() { return "S2ConfigValidate"; } public boolean validate(InputStream in, TaskMonitor monitor) throws Throwable { try { SaxHandlerParser parser = createParser(); S2Container container = (S2Container)parser.parse(in); // TODO: パースできた後のバリデーション処理 return true; } catch(Exception e) { String message = analizeException(e); reporter.report(this, true, message); return false; } } private SaxHandlerParser createParser() { // TODO: reporterを仕込んだSAXハンドラを作る return null; } private String analizeException(Exception e) { // TODO: XMLパーサーの例外を分析する return null; } }
とりあえずのレポーター実装
package org.seasar.tools.validate; import java.io.PrintStream; public class SimpleReporter implements ValidateReporter { private PrintStream out; public SimpleReporter(PrintStream out) { this.out = out; } private String getMessage(String taskName, boolean error, String message) { return "[" + taskName + "] " + (error ? "error: " : "warning: ") + message; } public void report(ValidateTask task, boolean error, String message, int begin, int end) { out.println(getMessage(task.getTaskName(), error, " pos:" + begin + "-" + end + " " + message)); } public void report(ValidateTask task, boolean error, String message) { out.println(getMessage(task.getTaskName(), error, message)); } }