1 /* 2 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 package com.sun.swingset3.demos.table; 25 26 import java.io.BufferedInputStream; 27 import java.io.IOException; 28 import java.io.InputStream; 29 import java.net.URL; 30 import java.util.logging.Level; 31 32 import javax.xml.parsers.ParserConfigurationException; 33 import javax.xml.parsers.SAXParser; 34 import javax.xml.parsers.SAXParserFactory; 35 36 import org.xml.sax.Attributes; 37 import org.xml.sax.SAXException; 38 import org.xml.sax.SAXParseException; 39 import org.xml.sax.helpers.DefaultHandler; 40 41 public abstract class OscarDataParser extends DefaultHandler { 42 private static final String[] CATEGORIES_IN = { 43 "actor", "actress", "bestPicture", 44 "actorSupporting", "actressSupporting", "artDirection", 45 "assistantDirector", "director", "cinematography", 46 "costumeDesign", "danceDirection", "docFeature", 47 "docShort", "filmEditing", "foreignFilm", 48 "makeup", "musicScore", "musicSong", 49 "screenplayAdapted", "screenplayOriginal", "shortAnimation", 50 "shortLiveAction", "sound", "soundEditing", 51 "specialEffects", "visualEffects", "writing", 52 "engEffects", "uniqueArtisticPicture" 53 }; 54 55 private static final String[] CATEGORIES_OUT = { 56 "Best Actor", "Best Actress", "Best Picture", 57 "Best Supporting Actor", "Best Supporting Actress", "Best Art Direction", 58 "Best Assistant Director", "Best Director", "Best Cinematography", 59 "Best Costume Design", "Best Dance Direction", "Best Feature Documentary", 60 "Best Short Documentary", "Best Film Editing", "Best Foreign Film", 61 "Best Makeup", "Best Musical Score", "Best Song", 62 "Best Adapted Screenplay", "Best Original Screenplay", "Best Animation Short", 63 "Best Live Action Short", "Best Sound", "Best Sound Editing", 64 "Best Special Effects", "Best Visual Effects", "Best Engineering Effects", 65 "Best Writing", "Most Unique Artistic Picture" 66 }; 67 68 69 private String tempVal; 70 71 //to maintain context 72 private OscarCandidate tempOscarCandidate; 73 74 private int count = 0; 75 getCount()76 public int getCount() { 77 return count; 78 } 79 parseDocument(URL oscarURL)80 public void parseDocument(URL oscarURL) { 81 //get a factory 82 SAXParserFactory spf = SAXParserFactory.newInstance(); 83 84 try { 85 //get a new instance of parser 86 SAXParser sp = spf.newSAXParser(); 87 88 //parse the file and also register this class for call backs 89 InputStream is = new BufferedInputStream(oscarURL.openStream()); 90 sp.parse(is, this); 91 System.out.println("done parsing count="+count); 92 is.close(); 93 94 } catch (SAXException se) { 95 se.printStackTrace(); 96 } catch (ParserConfigurationException pce) { 97 pce.printStackTrace(); 98 } catch (IOException ie) { 99 ie.printStackTrace(); 100 } 101 } 102 103 //Event Handlers startElement(String uri, String localName, String qName, Attributes attributes)104 public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 105 //reset 106 tempVal = ""; 107 for (int i = 0; i < CATEGORIES_IN.length; i++) { 108 if (qName.equalsIgnoreCase(CATEGORIES_IN[i])) { 109 tempOscarCandidate = new OscarCandidate(CATEGORIES_OUT[i]); 110 tempOscarCandidate.setYear(Integer.parseInt(attributes.getValue("year"))); 111 if (CATEGORIES_IN[i].equals("screenplayOriginal") && 112 tempOscarCandidate.getYear() == 2007) { 113 } 114 return; 115 } 116 } 117 } 118 characters(char[] ch, int start, int length)119 public void characters(char[] ch, int start, int length) throws SAXException { 120 tempVal = new String(ch, start, length); 121 } 122 endElement(String uri, String localName, String qName)123 public void endElement(String uri, String localName, String qName) throws SAXException { 124 if (qName.equalsIgnoreCase("won")) { 125 tempOscarCandidate.setWinner(true); 126 } else if (qName.equalsIgnoreCase("lost")) { 127 tempOscarCandidate.setWinner(false); 128 } else if (qName.equalsIgnoreCase("movie")) { 129 tempOscarCandidate.setMovieTitle(tempVal); 130 } else if (qName.equalsIgnoreCase("person")) { 131 tempOscarCandidate.getPersons().add(tempVal); 132 } else { 133 // find category 134 for (String category : CATEGORIES_IN) { 135 if (qName.equalsIgnoreCase(category)) { 136 //add it to the list 137 count++; 138 addCandidate(tempOscarCandidate); 139 break; 140 } 141 } 142 } 143 } 144 145 @Override error(SAXParseException ex)146 public void error(SAXParseException ex) throws SAXException { 147 TableDemo.logger.log(Level.SEVERE, "error parsing oscar data ", ex); 148 } 149 150 @Override fatalError(SAXParseException ex)151 public void fatalError(SAXParseException ex) throws SAXException { 152 TableDemo.logger.log(Level.SEVERE, "fatal error parsing oscar data ", ex); 153 } 154 155 @Override warning(SAXParseException ex)156 public void warning(SAXParseException ex) { 157 TableDemo.logger.log(Level.WARNING, "warning occurred while parsing oscar data ", ex); 158 } 159 160 @Override endDocument()161 public void endDocument() throws SAXException { 162 TableDemo.logger.log(Level.FINER, "parsed to end of oscar data."); 163 } 164 addCandidate(OscarCandidate candidate)165 protected abstract void addCandidate(OscarCandidate candidate); 166 } 167 168