// Copyright 2000-2005, FreeHEP. package hep.graphics.heprep.xml; import java.io.InputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import hep.graphics.heprep.HepRepDefaults; import hep.graphics.heprep.ref.DefaultHepRepAttDef; import hep.graphics.heprep.ref.DefaultHepRepAttValue; /** * Handles the reading of the XML HepRep defaults file. This file is only allowed * to have a HepRepType at the top-level and HepRepAttDefs as well as HepRepAttValues * as children. No Sub-types are allowed. Names, Values and Types NEED to be specified. * * @author M.Donszelmann * * @version $Id: XMLHepRepDefaultsHandler.java 8584 2006-08-10 23:06:37Z duns $ */ public class XMLHepRepDefaultsHandler extends DefaultHandler { XMLHepRepDefaultsHandler() { } public void startDocument() throws SAXException { } public void startElement(String namespace, String tag, String qName, Attributes atts) throws SAXException { // System.err.println(namespace+", "+tag+", "+qName); tag = tag.intern(); if (tag == "type") { // ignored } else if (tag == "typetree") { // ignored } else if (tag == "heprep") { // ignored } else if (tag == "layer") { // ignored } else if (tag == "attvalue") { String name = atts.getValue("name"); if (name == null) throw new SAXException("[XMLHepRepDefaultsHandler] tag: "+tag+" should have 'name' attribute"); String value = atts.getValue("value"); if (value == null) throw new SAXException("[XMLHepRepDefaultsHandler] tag: "+tag+" with name: "+name+" should have 'value' attribute"); String type = atts.getValue("type"); if (type == null) throw new SAXException("[XMLHepRepDefaultsHandler] tag: "+tag+" with name: "+name+" should have 'type' attribute"); int showLabel = DefaultHepRepAttValue.toShowLabel(atts.getValue("showlabel")); HepRepDefaults.addAttValue(new DefaultHepRepAttValue(name, value, type, showLabel)); } else if (tag == "attdef") { String name = atts.getValue("name"); String desc = atts.getValue("desc"); String category = atts.getValue("category"); String extra = atts.getValue("extra"); HepRepDefaults.addAttDef(new DefaultHepRepAttDef(name, desc, category, extra)); } else { throw new SAXException("[XMLHepRepDefaultsHandler] Unknown tag: "+tag); } } public void endElement(String namespace, String tag, String qName) throws SAXException { // System.out.println("/"+namespace+", "+tag+", "+qName); if (tag.lastIndexOf(':') >= 0) tag = tag.substring(tag.lastIndexOf(':')+1); tag = tag.intern(); if (tag == "type") { } else if (tag == "typetree") { } else if (tag == "heprep") { } else if (tag == "layer") { } else if (tag == "attvalue") { } else if (tag == "attdef") { } else { throw new SAXException("[XMLHepRepDefaultsHandler] Unknown tag: "+tag); } if (Thread.interrupted()) throw new SAXException(new InterruptedException()); } public InputSource resolveEntity(String publicId, String systemId) { System.out.println("Resolving: "+systemId); if (publicId != null) { return null; } // try to open systemId directly InputStream is = null; URL url = null; try { url = new URL(systemId); is = url.openStream(); } catch (MalformedURLException mfue) { return null; } catch (IOException ioe) { // try to resolve systemId relative to object or class String file = url.getFile().substring(url.getFile().lastIndexOf('/')+1); is = getClass().getResourceAsStream(file); } return new InputSource(is); } }