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.");
}
}