import org.ten60.netkernel.xml.xda.*;
import org.ten60.netkernel.xml.representation.*;
import java.text.*;

main()
{   
    DOMXDA page = new DOMXDA(context.sourceAspect("template-page1.xml",IAspectDOM.class).getReadOnlyDocument(),true);
    history = context.sourceAspect("history.xml",IAspectXDA.class).getXDA();
    stateTable = page.iterator("//table[@name='statetable']");
    i=history.readOnlyIterator("state");
    if (i.hasNext())
    {   df = DateFormat.getDateTimeInstance();
        n=1;
        while (i.hasNext())
        {   i.next();
            styleClass = (((n)%2)==0)?"evenrow":"oddrow";
            stateTable.appendPath(".","tr/@class",styleClass);
            timestamp = Long.parseLong(i.getText("timestamp",true));
            stateTable.appendPath("tr[last()]","td",df.format(new Date(timestamp)));
            desc="";
            for (j=i.readOnlyIterator("stats/*"); j.hasNext(); )
            {   j.next();
                type = j.eval("name()").getStringValue();
                if (!type.equals("mirror"))
                {   desc+=type+" "+j.getText("uri",true)+" v"+j.getText("version",true);
                    if (j.hasNext())
                    {   desc+=", ";
                    }
                }
            }
            stateTable.appendPath("tr[last()]","td",desc);
            stateTable.appendPath("tr[last()]","td/input/@type","radio");
            stateTable.appendPath("tr[last()]/td[last()]","@align","center");
            stateTable.appendPath("tr[last()]/td[last()]/input","@name","state");
            stateTable.appendPath("tr[last()]/td[last()]/input","@value",Integer.toString(n));
            if (!i.hasNext())
            {   stateTable.appendPath("tr[last()]/td[last()]/input","@checked","true");
            }
            //stateTable.appendPath(".","@title","hello");
            n++;
        }
        stateTable.appendPath(".","tr/td","now");
        stateTable.appendPath("tr[last()]","td",null);
        stateTable.appendPath("tr[last()]","td",null);
    }
    else
    {   stateTable.appendPath(".","tr/td","no rollback state available yet");
        stateTable.appendPath("tr[last()]/td","@colspan","3");
        page.appendPath("//input[@value='rollback']","@disabled","true");
    }
    response = context.createResponseFrom( new DOMXDAAspect(page) );
    context.setResponse(response);
}