package org.gnue.forms; import java.io.IOException; import org.apache.xerces.parsers.DOMParser; import org.w3c.dom.*; import org.xml.sax.SAXException; /** * This utility class provides for the creation of a Form object by parsing * the contents of a GFD document * * @see org.gnue.forms.Form */ public class FormManager { /** * Parse the contents of the file located at the given URL and create * a Form object * * @param url the url of the document to be parsed * @return the new Form object * @exception java.io.IOException if an I/O error occurs while parsing * the url */ public static Form parseURL(String url) throws IOException { DOMParser parser = new DOMParser(); try { parser.parse(url); } catch (SAXException sax) { System.err.println(sax); return null; } return createForm(parser.getDocument().getDocumentElement()); } /** * Generate a Form object from an XML element * * @param element the element * @return the Form object * @exception org.xml.sax.SAXException if the element is not well-formed */ protected static Form createForm(Element element) { Form retval = new Form(); retval.setAttribute("title", element.getAttribute("title")); try { retval.setWidth(Integer.parseInt(element.getAttribute("width"))); retval.setHeight(Integer.parseInt(element.getAttribute("height"))); } catch (NumberFormatException nfe) { System.err.println(nfe); } NodeList pages = element.getElementsByTagName("page"); for (int i = 0, maxCount = pages.getLength(); i < maxCount; i++) { try { retval.addPage(createPage((Element)pages.item(i))); } catch (ClassCastException cce) { System.err.println(cce); } } return retval; } /** * Generate a Page object from an XML element * * @param element the element * @return the Page object */ protected static Page createPage(Element element) { if (!(element.getNodeName().equals("page"))) throw new IllegalArgumentException(); Page retval = new Page(); NodeList blocks = element.getElementsByTagName("block"); for (int i = 0, maxCount = blocks.getLength(); i < maxCount; i++) { retval.addBlock(createBlock((Element)blocks.item(i))); } return retval; } /** * Generate a Block element from an XML element * * @param element the element * @return the Block object */ protected static Block createBlock(Element element) { if (!(element.getNodeName().equals("block"))) throw new IllegalArgumentException(); Block retval = new Block(); retval.setTitle(element.getAttribute("title")); NodeList widgets = element.getChildNodes(); for (int i = 0, maxCount = widgets.getLength(); i < maxCount; i++) { Node widget = widgets.item(i); if (widget.getNodeType() == Node.ELEMENT_NODE) { if (widget.getNodeName().equals("label")) { retval.addWidget(createLabel((Element)widget)); } else if (widget.getNodeName().equals("entry")) { retval.addWidget(createEntry((Element)widget)); } } } return retval; } /** * Generates a Label object from a XML element * * @param element the element * @return the Label object */ protected static Label createLabel(Element element) { if (!(element.getNodeName().equals("label"))) throw new IllegalArgumentException(); Label retval = new Label(); retval.setValue(element.getAttribute("text")); try { retval.setX(Integer.parseInt(element.getAttribute("x"))); retval.setY(Integer.parseInt(element.getAttribute("y"))); } catch (NumberFormatException nfe) { System.err.println(nfe); } return retval; } /** * Generate an Entry object from an XML element * * @param element the element * @return the Entry */ protected static Entry createEntry(Element element) { if (!(element.getNodeName().equals("entry"))) throw new IllegalArgumentException(); Entry retval = new Entry(); retval.setDefaultValue(element.getAttribute("default")); try { retval.setX(Integer.parseInt(element.getAttribute("x"))); retval.setY(Integer.parseInt(element.getAttribute("y"))); retval.setWidth(Integer.parseInt(element.getAttribute("width"))); retval.setHeight(Integer.parseInt(element.getAttribute("height"))); } catch (NumberFormatException nfe) { System.err.println(nfe); } return retval; } }