package examples;
import java.net.MalformedURLException;
import java.net.URL;

import dk.brics.xact.*;

public class Phonelist {

	static {
		XML.getNamespaceMap().put("h", "http://www.w3.org/1999/xhtml");
		XML.getNamespaceMap().put("b", "http://businesscard.org");
		XML.getNamespaceMap().put("s", "http://www.w3.org/2001/XMLSchema");
		XML.loadXMLSchema("file:input/xhtml1-transitional.dtd");
		XML.loadXMLSchema("file:input/bcard.xsd");
	}
	
	public @Type("h:html[s:string TITLE, h:Flow MAIN]") XML wrapper;

	public @Type("h:html") XML transform(@Type("b:cardlist") XML cardlist) {
		return wrapper.plug("TITLE", "My Phone List")
		              .plug("MAIN", makeList(cardlist));
	}
		
	private XML makeList(XML x) {
		XML r =  [[ <h:ul><[h:li CARDS]></h:ul> ]];
		for (Element c : x.getElements("b:card[b:phone]"))
			r = r.plug("CARDS", [[
			  <h:li>
			    <h:b><{ c.getString("b:name") }></h:b>,
			    phone: <{ c.getString("b:phone") }>
			  </h:li>
			  <[h:li CARDS]>
			]]);
		return r.close(); 
	}
	
	private void setDefaultWrapper(String color) {
		wrapper = [[
		  <h:html>
		    <h:head>
		      <h:title><[s:string TITLE]></h:title>
		    </h:head>
		    <h:body bgcolor={ color }>
		      <h:h1><[s:string TITLE]></h:h1>
		      <[h:Flow MAIN]>
		    </h:body>
		  </h:html>
		]];
	}
		
	public static void main(String[] args) throws XMLValidationException, MalformedURLException {
		Phonelist pp = new Phonelist();
		pp.setDefaultWrapper("white");
		XML cardlist = XML.parseDocument(new URL("file:input/bcard.xml")).validate("b:cardlist");
		XML xhtml = pp.transform(cardlist);
		xhtml = xhtml.analyze("h:html");
		System.out.println(xhtml.toDocument());
	}
}
