import net.htmlparser.jericho.*;
import java.util.*;
import java.io.*;
import java.net.*;

public class FormControlDisplayCharacteristics {
	public static void main(String[] args) throws Exception {
		String sourceUrlString="data/form.html";
		if (args.length==0)
		  System.err.println("Using default argument of \""+sourceUrlString+'"');
		else
			sourceUrlString=args[0];
		if (sourceUrlString.indexOf(':')==-1) sourceUrlString="file:"+sourceUrlString;
		Source source=new Source(new URL(sourceUrlString));
		FormFields formFields=source.getFormFields();
		// disable some controls:
		formFields.get("Password").getFormControl().setDisabled(true);
		formFields.setValue("MailingList","C");
		formFields.get("MailingList").getFormControl("C").setDisabled(true);
		formFields.get("MailingList").getFormControl("D").setDisabled(true);
		// remove some controls:
		formFields.get("button1").getFormControl().setOutputStyle(FormControlOutputStyle.REMOVE);
		FormControl rhubarbFormControl=formFields.get("FavouriteFare").getFormControl("rhubarb");
		rhubarbFormControl.setOutputStyle(FormControlOutputStyle.REMOVE);
		// set some controls to display value:
		formFields.setValue("Address","The Lodge\nDeakin  ACT  2600\nAustralia");
		formFields.get("Address").getFormControl().setOutputStyle(FormControlOutputStyle.DISPLAY_VALUE);
		formFields.setValue("FavouriteSports","BB");
		formFields.addValue("FavouriteSports","AFL");
		formFields.get("FavouriteSports").getFormControl().setOutputStyle(FormControlOutputStyle.DISPLAY_VALUE);
		OutputDocument outputDocument=new OutputDocument(source);
		outputDocument.replace(formFields); // adds all segments necessary to effect changes
		// also need to remove label for the removed "rhubarb" radio button:
		// label segment begins at the end of the rhubarb control, and ends at the start of the next control:
		Segment rhubarbLabelSegment=new Segment(source,rhubarbFormControl.getEnd(),source.getNextTag(rhubarbFormControl.getEnd()).getBegin());
		outputDocument.remove(rhubarbLabelSegment);
		// also need to remove instructions for favourite sports control which has been set to output display value:
		Segment instructionsSegment=source.getFirstElement("class","instructions",false).getContent();
		outputDocument.replace(instructionsSegment,"A comma separated list of favourite sports is shown above");

		// modify stylesheet link since the output file is in a different directory to the input file
		int cssPathPos=source.toString().indexOf("main.css");
		outputDocument.insert(cssPathPos,"data/");

		Writer out=new FileWriter("NewForm.html");
		outputDocument.writeTo(out);
		out.close();
		System.err.println("\nThe form containing new default values has been output to NewForm.html");
		System.err.println("This will open automatically in a web browser after you press a key.");
  }
}
