XMLSheet.java

00001 package edu.stanford.hci.r3.paper.sheets;
00002 
00003 import java.io.File;
00004 import java.io.IOException;
00005 import java.util.Iterator;
00006 
00007 import javax.xml.parsers.DocumentBuilder;
00008 import javax.xml.parsers.DocumentBuilderFactory;
00009 import javax.xml.parsers.ParserConfigurationException;
00010 
00011 import org.w3c.dom.NamedNodeMap;
00012 import org.w3c.dom.Node;
00013 import org.w3c.dom.NodeList;
00014 import org.xml.sax.SAXException;
00015 
00016 import edu.stanford.hci.r3.paper.Sheet;
00017 import edu.stanford.hci.r3.paper.regions.XMLRegion;
00018 import edu.stanford.hci.r3.units.Points;
00019 
00030 public class XMLSheet extends Sheet {
00031         
00032         public static void main(String args[]) {
00033                 try {
00034                         File file = new File("SketchedPaperUI.xml");
00035                         /*XMLSheet sheet = */new XMLSheet(file);
00036                         
00037                 } catch (Exception ex) {
00038                         ex.printStackTrace();
00039                 }
00040         }
00041 
00042         public XMLSheet(File xmlFile) throws IOException {
00043                 try {
00044                         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
00045                         DocumentBuilder builder = factory.newDocumentBuilder();
00046                         Node sheetNode = builder.parse( xmlFile ).getFirstChild();
00047                         
00048                         NamedNodeMap sheetAttributes = sheetNode.getAttributes();
00049                         
00050                         double sheetWidth = Double.parseDouble(sheetAttributes.getNamedItem("width").getTextContent());
00051                         double sheetHeight = Double.parseDouble(sheetAttributes.getNamedItem("height").getTextContent());
00052         
00053                         setSize(new Points(sheetWidth), new Points(sheetHeight));
00054                         
00055                         System.out.println("sheet: width="+sheetWidth+" x height="+sheetHeight);
00056                         
00057                         for (Node region : new Iterate(sheetNode)) {
00058                                 if (region.getNodeName().equals("region")) {
00059                                         NamedNodeMap attributes = region.getAttributes();
00060                                         String name = attributes.getNamedItem("name").getTextContent();
00061                                         double x = Double.parseDouble(attributes.getNamedItem("x").getTextContent());
00062                                         double y = Double.parseDouble(attributes.getNamedItem("y").getTextContent());
00063                                         double width = Double.parseDouble(attributes.getNamedItem("width").getTextContent());
00064                                         double height = Double.parseDouble(attributes.getNamedItem("height").getTextContent());
00065                                         System.out.println("region: "+name+"[x="+x+",y="+y+" width="+width+" x height="+height+"]");
00066                                         
00067                                         String eventType = null;
00068                                         
00069                                         for (Node eventHandler : new Iterate(region)) {
00070                                                 if (eventHandler.getNodeName().equals("eventHandler")) {
00071                                                         eventType = eventHandler.getAttributes().getNamedItem("type").getTextContent();
00072                                                         System.out.println("event: "+ eventType);
00073                                                 }
00074                                         }
00075                                         addRegion(new XMLRegion(name,x,y,width,height,eventType));
00076                                         
00077                                 }
00078                         }
00079                 } catch (SAXException ex) {
00080                         throw new IOException(ex);
00081                 } catch (ParserConfigurationException ex) {
00082                         throw new IOException(ex);
00083                 }
00084         }
00085         
00086         private class Iterate implements Iterator<Node>,Iterable<Node> {
00087                 NodeList list;
00088                 int i = 0;
00089                 Iterate(Node n) {
00090                         this.list = n.getChildNodes();
00091                 }
00092                 Iterate(NodeList list) {
00093                         this.list = list;
00094                 }
00095                 public boolean hasNext() {
00096                         return i < list.getLength();
00097                 }
00098                 public Node next() {
00099                         return list.item(i++);
00100                 }
00101                 public void remove() {
00102                         throw new UnsupportedOperationException();
00103                 }
00104                 public Iterator<Node> iterator() {
00105                         return new Iterate(list);
00106                 }
00107                 
00108         }
00109 }

Generated on Sat Apr 14 18:21:39 2007 for R3 Paper Toolkit by  doxygen 1.4.7