package dods.clients.importwizard.GCMD; import dods.clients.importwizard.*; import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import java.util.*; import java.io.*; /** * This class is used by the SAX Parser to create a <code>Dif</code> from * the xml representation of a Dif. */ public class DifHandler extends DefaultHandler { boolean insideTitle; boolean insideSummary; boolean insideURL; boolean insideContentType; boolean insideID; boolean insideRole; boolean insideFirstName; boolean insideMiddleName; boolean insideLastName; boolean insideEmail; boolean insidePhone; boolean insideFax; boolean insideAddress; boolean insideSouthernmost; boolean insideNorthernmost; boolean insideWesternmost; boolean insideEasternmost; //boolean insideParameters; boolean insideCategory; boolean insideTopic; boolean insideTerm; boolean insideVariable; boolean insideStartDate; boolean insideStopDate; boolean insideLatResolution; boolean insideLongResolution; boolean insideTemporalResolution; String relatedURL; String contentType; String summary; String role; String name; String email; String phone; String fax; String address; String southernmost; String northernmost; String westernmost; String easternmost; String category; String topic; String term; String variable; String startDate; String stopDate; String latResolution; String longResolution; String temporalResolution; Vector difs; Dif dif; /** * Create a new <code>DifHandler</code>. * @param id The Entry_ID of the Dif. */ public DifHandler() { relatedURL = contentType = ""; insideSummary = insideURL = insideContentType = insideTitle = insideID = insideRole = insideFirstName = insideMiddleName = insideLastName = insideEmail = insidePhone = insideFax = insideAddress = insideSouthernmost = insideNorthernmost = insideWesternmost = insideEasternmost //= insideParameters = insideCategory = insideTopic = insideTerm = insideVariable = insideStartDate = insideStopDate = insideLatResolution = insideLongResolution = insideTemporalResolution = false; dif = new Dif(); difs = new Vector(); summary = ""; role = ""; name = ""; email = ""; phone = ""; fax = ""; address = ""; southernmost = ""; northernmost = ""; westernmost = ""; easternmost = ""; category = ""; topic = ""; term = ""; variable = ""; startDate = ""; stopDate = ""; latResolution = ""; longResolution = ""; temporalResolution = ""; } public void startElement(String namespaceURI, String lName, // local name String qName, // qualified name Attributes attrs) throws SAXException { insideID = false; insideURL = false; insideContentType = false; insideTitle = false; insideSummary = false; insideSummary = insideURL = insideContentType = insideTitle = insideID = insideRole = insideFirstName = insideMiddleName = insideLastName = insideEmail = insidePhone = insideFax = insideAddress = insideSouthernmost = insideNorthernmost = insideWesternmost = insideEasternmost //= insideParameters = insideCategory = insideTopic = insideTerm = insideVariable = insideStartDate = insideStopDate = insideLatResolution = insideLongResolution = insideTemporalResolution = false; //System.out.println("start: qName = " + qName); if(qName.equals("DIF")) dif = new Dif(); else if(qName.equals("Entry_ID")) insideID = true; else if(qName.equals("Entry_Title")) insideTitle = true; else if(qName.equals("URL")) insideURL = true; else if(qName.equals("URL_Content_Type")) insideContentType = true; else if(qName.equals("Summary")) insideSummary = true; else if(qName.equals("Role")) insideRole = true; else if(qName.equals("First_Name")) insideFirstName = true; else if(qName.equals("Middle_Name")) insideMiddleName = true; else if(qName.equals("Last_Name")) insideLastName = true; else if(qName.equals("Email")) insideEmail = true; else if(qName.equals("Phone")) insidePhone = true; else if(qName.equals("Fax")) insideFax = true; else if(qName.equals("Address")) insideAddress = true; else if(qName.equals("Southernmost_Latitude")) insideSouthernmost = true; else if(qName.equals("Northernmost_Latitude")) insideNorthernmost = true; else if(qName.equals("Westernmost_Longitude")) insideWesternmost = true; else if(qName.equals("Easternmost_Longitude")) insideEasternmost = true; else if(qName.equals("Category")) insideCategory = true; else if(qName.equals("Topic")) insideTopic = true; else if(qName.equals("Term")) insideTerm = true; else if(qName.equals("Variable")) insideVariable = true; else if(qName.equals("Start_Date")) insideStartDate = true; else if(qName.equals("Stop_Date")) insideStopDate = true; else if(qName.equals("Latitude_Resolution")) insideLatResolution = true; else if(qName.equals("Longitude_Resolution")) insideLongResolution = true; else if(qName.equals("Temporal_Resolution")) insideTemporalResolution = true; } public void endElement(String namespaceURI, String sName, // simple name String qName // qualified name ) throws SAXException { insideURL = false; insideContentType = false; insideTitle = false; insideSummary = false; insideID = false; insideSummary = insideURL = insideContentType = insideTitle = insideID = insideRole = insideFirstName = insideMiddleName = insideLastName = insideEmail = insidePhone = insideFax = insideAddress = insideSouthernmost = insideNorthernmost = insideWesternmost = insideEasternmost //= insideParameters = insideCategory = insideTopic = insideTerm = insideVariable = insideStartDate = insideStopDate = insideLatResolution = insideLongResolution = insideTemporalResolution = false; //System.out.println("end: qName = " + qName); if(qName.equals("DIF")) difs.addElement(dif); else if(qName.equals("Related_URL")) { dif.addRelatedURL(relatedURL, contentType); relatedURL = contentType = ""; } else if(qName.equals("Summary")) { dif.setSummary(summary); summary = ""; } else if(qName.equals("Personnel")){ dif.addContactInfo(role, name, email, phone, fax, address); role = ""; name = ""; email = ""; phone = ""; fax = ""; address = ""; } else if(qName.equals("Spatial_Coverage")){ dif.setSpatialCoverage(southernmost, northernmost, westernmost, easternmost); southernmost = ""; northernmost = ""; westernmost = ""; easternmost = ""; } else if(qName.equals("Temporal_Coverage")){ dif.setTemporalCoverage(startDate, stopDate); startDate = stopDate = ""; } else if(qName.equals("Parameters")) { dif.addParameters(category, topic, term, variable); category = topic = term = variable = ""; } else if(qName.equals("Data_Resolution")) { dif.setDataResolution(latResolution, longResolution, temporalResolution); latResolution = longResolution = temporalResolution = ""; } } public void characters(char buf[], int offset, int len) throws SAXException { String s = new String(buf, offset, len); //System.out.println("buf " + buf + ", offset " + offset + ", len" + len); if(insideTitle) dif.setTitle(s); else if(insideID) dif.setID(s); else if(insideURL) { relatedURL = s; } else if(insideContentType) { contentType = s; } else if(insideSummary) { summary = summary + s; } else if(insideRole) { role = s; } else if(insideFirstName) { name = s + " " + name; } else if(insideMiddleName) { name = name + " " + s; } else if(insideLastName) { name = name + " " + s; } else if(insideEmail) { email = s; } else if(insidePhone) { phone = s; } else if(insideFax) { fax = s; } else if(insideAddress) { address = s; //ystem.out.println("s " + s + ", address " + address); } else if(insideSouthernmost) { southernmost = s; } else if(insideNorthernmost) { northernmost = s; } else if(insideWesternmost) { westernmost = s; } else if(insideEasternmost) { easternmost = s; } else if(insideCategory) { category = s; } else if(insideTopic) { topic = s; } else if(insideTerm) { term = s; } else if(insideVariable) { variable = s; } else if(insideStartDate) { startDate = s; } else if(insideStopDate) { stopDate = s; } else if(insideLatResolution) { latResolution = s; } else if(insideLongResolution) { longResolution = s; } else if(insideTemporalResolution) { temporalResolution = s; } } public Vector getDifs() { return difs; } }