Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 11th, 2012  |  syntax: Java  |  size: 6.67 KB  |  hits: 25  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. class CrosswordIO {
  2.         public static void writePuzzle(Crossword c, String file) {
  3.                 try {
  4.                          
  5.                         DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
  6.                         DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
  7.          
  8.                         // root elements
  9.                         Document doc = docBuilder.newDocument();
  10.                         Element rootElement = doc.createElement("CROSSWORD");
  11.                         doc.appendChild(rootElement);
  12.                        
  13.                         Element title = doc.createElement("TITLE");
  14.                         title.appendChild(doc.createTextNode(c.title));
  15.                         rootElement.appendChild(title);
  16.                        
  17.                         Element size = doc.createElement("SIZE");
  18.                         size.appendChild(doc.createTextNode(Integer.toString(c.size)));
  19.                         rootElement.appendChild(size);
  20.                        
  21.                         for(Clue aClue : c.acrossClues) {
  22.                                 Element cluesAcross = doc.createElement("CLUESACROSS");
  23.                                 rootElement.appendChild(cluesAcross);
  24.                                
  25.                                 Element clue = doc.createElement("CLUE");
  26.                                 cluesAcross.appendChild(clue);
  27.                                
  28.                                 Element number = doc.createElement("NUMBER");
  29.                                 number.appendChild(doc.createTextNode(Integer.toString(aClue.number)));
  30.                                 clue.appendChild(number);
  31.                                
  32.                                 Element x = doc.createElement("ROW");
  33.                                 x.appendChild(doc.createTextNode(Integer.toString(aClue.x)));
  34.                                 clue.appendChild(x);
  35.                                
  36.                                 Element y = doc.createElement("COLUMN");
  37.                                 y.appendChild(doc.createTextNode(Integer.toString(aClue.y)));
  38.                                 clue.appendChild(y);
  39.                                
  40.                                 Element clueName = doc.createElement("NAME");
  41.                                 clueName.appendChild(doc.createTextNode(aClue.clue));
  42.                                 clue.appendChild(clueName);
  43.                                
  44.                                 Element clueAnswer = doc.createElement("ANSWER");
  45.                                 clueAnswer.appendChild(doc.createTextNode(aClue.answer));
  46.                                 clue.appendChild(clueAnswer);
  47.                         }
  48.                        
  49.                         for(Clue dClue : c.downClues) {
  50.                                 Element cluesDown = doc.createElement("CLUESDOWN");
  51.                                 rootElement.appendChild(cluesDown);
  52.                                
  53.                                 Element clue = doc.createElement("CLUE");
  54.                                 cluesDown.appendChild(clue);
  55.                                
  56.                                 Element number = doc.createElement("NUMBER");
  57.                                 number.appendChild(doc.createTextNode(Integer.toString(dClue.number)));
  58.                                 clue.appendChild(number);
  59.                                
  60.                                 Element x = doc.createElement("ROW");
  61.                                 x.appendChild(doc.createTextNode(Integer.toString(dClue.x)));
  62.                                 clue.appendChild(x);
  63.                                
  64.                                 Element y = doc.createElement("COLUMN");
  65.                                 y.appendChild(doc.createTextNode(Integer.toString(dClue.y)));
  66.                                 clue.appendChild(y);
  67.                                
  68.                                 Element clueName = doc.createElement("NAME");
  69.                                 clueName.appendChild(doc.createTextNode(dClue.clue));
  70.                                 clue.appendChild(clueName);
  71.                                
  72.                                 Element clueAnswer = doc.createElement("ANSWER");
  73.                                 clueAnswer.appendChild(doc.createTextNode(dClue.answer));
  74.                                 clue.appendChild(clueAnswer);
  75.                         }
  76.                        
  77.                         // write the content into xml file
  78.                         TransformerFactory transformerFactory = TransformerFactory.newInstance();
  79.                         Transformer transformer = transformerFactory.newTransformer();
  80.                         DOMSource source = new DOMSource(doc);
  81.                         StreamResult result = new StreamResult(file);
  82.          
  83.                         // Output to console for testing
  84.                         //StreamResult result = new StreamResult(System.out);
  85.          
  86.                         transformer.transform(source, result);
  87.                        
  88.                 } catch (ParserConfigurationException pce) {
  89.                         pce.printStackTrace();
  90.                 } catch (TransformerException tfe) {
  91.                         tfe.printStackTrace();
  92.                 }
  93.         }
  94.         static String title;
  95.         static int size;
  96.         static ArrayList<Clue> acrossClues;
  97.         static ArrayList<Clue> downClues;
  98.        
  99.         public static Crossword readPuzzle(File file) {
  100.                 acrossClues = new ArrayList<Clue>();
  101.                 downClues = new ArrayList<Clue>();
  102.                 try {
  103.                          
  104.                       SAXParserFactory factory = SAXParserFactory.newInstance();
  105.                       SAXParser saxParser = factory.newSAXParser();
  106.        
  107.                       DefaultHandler handler = new DefaultHandler() {
  108.                          
  109.                           int clueNumber;
  110.                           int x;
  111.                           int y;
  112.                           String clueName;
  113.                           String answer;
  114.                           boolean bTitle = false;
  115.                           boolean bSize = false;
  116.                           boolean bClueAcross = false;
  117.                           boolean bClueDown = false;
  118.                           boolean bClueNumber = false;
  119.                           boolean bClueX = false;
  120.                           boolean bClueY = false;
  121.                           boolean bClueName = false;
  122.                           boolean bAnswer = false;
  123.                          
  124.                                 public void startElement(String uri, String localName,
  125.                                                 String qName, Attributes attributes)
  126.                                                 throws SAXException {
  127.  
  128.                                         if (qName.equalsIgnoreCase("TITLE")) {
  129.                                                 bTitle = true;
  130.                                         }
  131.                                         if (qName.equalsIgnoreCase("SIZE")) {
  132.                                                 bSize = true;
  133.                                         }
  134.                                         if (qName.equalsIgnoreCase("NUMBER")) {
  135.                                                 bClueNumber = true;
  136.                                         }
  137.                                         if (qName.equalsIgnoreCase("ROW")) {
  138.                                                 bClueX = true;
  139.                                         }
  140.                                         if (qName.equalsIgnoreCase("COLUMN")) {
  141.                                                 bClueY = true;
  142.                                         }
  143.                                         if (qName.equalsIgnoreCase("NAME")) {
  144.                                                 bClueName = true;
  145.                                         }
  146.                                         if (qName.equalsIgnoreCase("ANSWER")) {
  147.                                                 bAnswer = true;
  148.                                         }
  149.                                         if (qName.equalsIgnoreCase("CLUESACROSS")) {
  150.                                                 bClueAcross = true;
  151.                                         }
  152.                                         if (qName.equalsIgnoreCase("CLUESDOWN")) {
  153.                                                 bClueDown = true;
  154.                                         }
  155.                                 }
  156.                          
  157.                           public void endElement(String uri, String localName,
  158.                                         String qName) throws SAXException {
  159.                                   if(qName.equalsIgnoreCase("CLUESACROSS")) {
  160.                                           acrossClues.add(new Clue(clueNumber, x, y, clueName, answer));
  161.                                   }
  162.                                  if(qName.equalsIgnoreCase("CLUESDOWN")) {
  163.                                           downClues.add(new Clue(clueNumber, x, y, clueName, answer));
  164.                                   }
  165.                           }
  166.                          
  167.                           public void characters(char ch[], int start, int length) throws SAXException {
  168.                                         if(bTitle) {
  169.                                                 title = new String(ch, start, length);
  170.                                                 bTitle = false;
  171.                                         }
  172.                                         if(bSize) {
  173.                                                 size = Integer.parseInt(new String(ch, start, length));
  174.                                                 bSize = false;
  175.                                         }
  176.                                         if(bClueNumber) {
  177.                                                 clueNumber = Integer.parseInt(new String(ch, start, length));
  178.                                                 bClueNumber = false;
  179.                                         }
  180.                                         if(bClueX) {
  181.                                                 x = Integer.parseInt(new String(ch, start, length));
  182.                                                 System.out.println("x: " + x);
  183.                                                 bClueX = false;
  184.                                         }
  185.                                         if(bClueY) {
  186.                                                 y = Integer.parseInt(new String(ch, start, length));
  187.                                                 bClueY = false;
  188.                                         }
  189.                                         if(bClueName) {
  190.                                                 clueName = new String(ch, start, length);
  191.                                                 bClueName = false;
  192.                                         }
  193.                                         if(bAnswer) {
  194.                                                 answer = new String(ch, start, length);
  195.                                                 bAnswer= false;
  196.                                         }                                      
  197.                           }
  198.                       };
  199.                
  200.                 saxParser.parse(file, handler);
  201.                 } catch (Exception e) {
  202.                        e.printStackTrace();
  203.                 }
  204.                 return new Crossword(title, size, acrossClues, downClues);
  205.         }
  206. }