sarannotationreader.java

来自「world wind java sdk 源码」· Java 代码 · 共 212 行

JAVA
212
字号
/*Copyright (C) 2001, 2007 United States Government as represented bythe Administrator of the National Aeronautics and Space Administration.All Rights Reserved.*/package gov.nasa.worldwind.applications.sar;import gov.nasa.worldwind.util.Logging;import gov.nasa.worldwind.geom.Position;/** * @author dcollins * @version $Id: SARAnnotationReader.java 4876 2008-03-31 19:24:17Z dcollins $ */public class SARAnnotationReader{    private javax.xml.parsers.SAXParser parser;    private java.util.List<SARAnnotation> sarAnnotations = new java.util.ArrayList<SARAnnotation>();    public SARAnnotationReader() throws javax.xml.parsers.ParserConfigurationException, org.xml.sax.SAXException    {        javax.xml.parsers.SAXParserFactory factory = javax.xml.parsers.SAXParserFactory.newInstance();        factory.setNamespaceAware(true);        this.parser = factory.newSAXParser();    }    public void readFile(String path) throws java.io.IOException, org.xml.sax.SAXException    {        if (path == null)        {            String msg = Logging.getMessage("nullValue.PathIsNull");            Logging.logger().severe(msg);            throw new IllegalArgumentException(msg);        }        java.io.File file = new java.io.File(path);        if (!file.exists())        {            String msg = Logging.getMessage("generic.FileNotFound", path);            Logging.logger().severe(msg);            throw new java.io.FileNotFoundException(path);        }        java.io.FileInputStream fis = new java.io.FileInputStream(file);        this.doRead(fis);    }    public void readStream(java.io.InputStream stream) throws java.io.IOException, org.xml.sax.SAXException    {        if (stream == null)        {            String msg = Logging.getMessage("nullValue.InputStreamIsNull");            Logging.logger().severe(msg);            throw new IllegalArgumentException(msg);        }        this.doRead(stream);    }    public java.util.List<SARAnnotation> getSARAnnotations()    {        return this.sarAnnotations;    }    private void doRead(java.io.InputStream fis) throws java.io.IOException, org.xml.sax.SAXException    {        this.parser.parse(fis, new Handler());    }    private class Handler extends org.xml.sax.helpers.DefaultHandler    {        // this is a private class used solely by the containing class, so no validation occurs in it.        private gov.nasa.worldwind.applications.sar.ElementParser currentElement = null;        @Override        public void warning(org.xml.sax.SAXParseException saxParseException) throws org.xml.sax.SAXException        {            saxParseException.printStackTrace();            super.warning(saxParseException);        }        @Override        public void error(org.xml.sax.SAXParseException saxParseException) throws org.xml.sax.SAXException        {            saxParseException.printStackTrace();            super.error(saxParseException);        }        @Override        public void fatalError(org.xml.sax.SAXParseException saxParseException) throws org.xml.sax.SAXException        {            saxParseException.printStackTrace();            super.fatalError(saxParseException);        }        private boolean firstElement = true;        @Override        public void startElement(String uri, String lname, String qname, org.xml.sax.Attributes attributes)            throws org.xml.sax.SAXException        {            if (this.firstElement)            {                if (!lname.equalsIgnoreCase("sarTrackAnnotations"))                    throw new IllegalArgumentException("Not a SAR Track Annotations file");                else                    this.firstElement = false;            }            if (this.currentElement != null)            {                this.currentElement.startElement(uri, lname, qname, attributes);            }            else if (lname.equalsIgnoreCase("sarAnnotation"))            {                this.currentElement = new SARAnnotationElement(uri, lname, qname, attributes);            }        }        @Override        public void endElement(String uri, String lname, String qname) throws org.xml.sax.SAXException        {            if (this.currentElement != null)            {                this.currentElement.endElement(uri, lname, qname);                if (lname.equalsIgnoreCase(this.currentElement.getElementName()))                {                    // Get the SARAnnotation once the element is completely constructed.                    if (this.currentElement instanceof SARAnnotationElement)                        SARAnnotationReader.this.sarAnnotations.add(((SARAnnotationElement) this.currentElement).getSARAnnotation());                    this.currentElement = null;                }            }        }        @Override        public void characters(char[] data, int start, int length) throws org.xml.sax.SAXException        {            if (this.currentElement != null)                this.currentElement.characters(data, start, length);        }    }    private class SARAnnotationElement extends ElementParser    {        private double latitutde;        private double longitude;        private String id;        private String text;        public SARAnnotationElement(String uri, String lname, String qname, org.xml.sax.Attributes attributes)        {            super("sarAnnotation");            // don't perform validation here - no parameters are actually used        }        public SARAnnotation getSARAnnotation()        {            Position pos = Position.fromDegrees(this.latitutde, this.longitude, 0);            SARAnnotation sa = new SARAnnotation(this.text, pos);            sa.setId(this.id);            return sa;        }        @Override        public void doStartElement(String uri, String lname, String qname, org.xml.sax.Attributes attributes)            throws org.xml.sax.SAXException        {            // don't perform validation here - no parameters are actually used        }        /**         * @param uri         * @param lname         * @param qname         * @throws IllegalArgumentException if <code>lname</code> is null         * @throws org.xml.sax.SAXException         */        @Override        public void doEndElement(String uri, String lname, String qname) throws org.xml.sax.SAXException        {            if (lname == null)            {                String msg = Logging.getMessage("nullValue.LNameIsNull");                Logging.logger().severe(msg);                throw new IllegalArgumentException(msg);            }            // don't validate uri or qname - they aren't used.            if (lname.equalsIgnoreCase("latitude"))            {                this.latitutde = Double.parseDouble(this.currentCharacters);            }            else if (lname.equalsIgnoreCase("longitude"))            {                this.longitude = Double.parseDouble(this.currentCharacters);            }            else if (lname.equalsIgnoreCase("id"))            {                this.id = this.currentCharacters.trim();            }            else if (lname.equalsIgnoreCase("text"))            {                this.text = this.currentCharacters.trim();            }        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?