package woolpack.samples.hellomain; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Arrays; import java.util.HashMap; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import woolpack.dom.DomContext; import woolpack.dom.DomExpression; import woolpack.dom.Serial; import woolpack.dom.XmlToNode; import woolpack.el.PathEL; import woolpack.html.AutoUpdate; import woolpack.utils.MapBuilder; import woolpack.utils.StringReaderFactory; import woolpack.utils.UtilsConstants; /** * Woolpack の Hello World アプリケーション。 * @author nakamura * */ public class Hello { public static void main(final String[] args) throws IOException { // Expression 役を順に実行する定義。 final DomExpression expression = new Serial( // 固定のHTMLの雛型を読み込む定義。 new XmlToNode(new StringReaderFactory( "<HTML><BODY><FORM><TABLE><TR id=\"list0\">"+ "<TD><TEXTAREA name=\"textarea0\" >value0</TEXTAREA></TD>"+ "<TD><DIV id=\"div0\" >value0</DIV></TD>"+ "<TD><SPAN id=\"span0\" >value0</SPAN></TD>"+ "<TD><INPUT name=\"input0\" value=\"value0\" /></TD>"+ "<TD><SPAN id=\"span1\" >spanvalue1</SPAN></TD>"+ "</TR></TABLE></FORM></BODY></HTML>")), // DomContext#getLocal()#get("list0")の内容を HTML 雛型に自動設定する定義。 // ゼロ番目の引数は自動的に画面に値を設定するための、更新対象の属性名の一覧。 new AutoUpdate(Arrays.asList("name", "id"), new PathEL("local.list0"))); // Context 役。 final DomContext context = new DomContext(); // Context 役に対し、HTML に流し込む値を設定する。 context.getLocal().put("list0", MapBuilder.get(new HashMap<String,Object>()) .put("list0", Arrays.asList( MapBuilder.get(new HashMap<String,Object>()) .put("textarea0", "textareavalue0") .put("div0", "divvalue0") .put("span0", "spanvalue0") .put("input0", "inputvalue0") .get(), MapBuilder.get(new HashMap<String,Object>()) .put("textarea0", "textareavalue1") .put("div0", "divvalue1") .put("span0", "spanvalue1") .put("input0", "inputvalue1") .get())) .get()); // Context 役を Expression 役に作用させる。 expression.interpret(context); // 結果を出力する。 Writer w = new OutputStreamWriter(System.out); try{ UtilsConstants.TRANSFORMER_FACTORY.newInstance().transform( new DOMSource(context.getNode()), new StreamResult(w) ); }finally{ w.close(); } } } |
<HTML> <BODY> <FORM> <TABLE> <TR id="list0"> <TD><TEXTAREA name="textarea0">textareavalue0</TEXTAREA></TD><TD> <DIV id="div0">divvalue0</DIV> </TD><TD><SPAN id="span0">spanvalue0</SPAN></TD><TD><INPUT name="input0" value="inputvalue0"></TD><TD><SPAN id="span1">spanvalue1</SPAN></TD> </TR> <TR id="list0"> <TD><TEXTAREA name="textarea0">textareavalue1</TEXTAREA></TD><TD> <DIV id="div0">divvalue1</DIV> </TD><TD><SPAN id="span0">spanvalue1</SPAN></TD><TD><INPUT name="input0" value="inputvalue1"></TD><TD><SPAN id="span1">spanvalue1</SPAN></TD> </TR> </TABLE> </FORM> </BODY> </HTML> |