All Downloads are FREE. Search and download functionalities are using the official Maven repository.

uk.ac.starlink.util.StarEntityResolver Maven / Gradle / Ivy

package uk.ac.starlink.util;

import java.io.IOException;
import java.io.InputStream;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

/**
 * Provides specialised XML entity resolution.
 * This resolver knows about some entities which starjava applications
 * are likely to want to retrieve; it keeps copies of them so that
 * no network connection is required for them.
 * 

* Use {@link #getInstance} to obtain an instance of this class without * a parent. * * @author Mark Taylor (Starlink) */ public class StarEntityResolver implements EntityResolver { private static StarEntityResolver instance = new StarEntityResolver(); private EntityResolver parent; private static final String VOT_URI_BASE = "http://www.ivoa.net/xml/VOTable/"; /** * Private no-arg constructor. */ private StarEntityResolver() { } /** * Constructs a resolver which will resolve entities this class knows * about, and for those it doesn't it will defer resolution to a supplied * parent resolver. * * @param parent fallback resolver (may be null) */ public StarEntityResolver( EntityResolver parent ) { this.parent = parent; } /** * Returns the sole instance of this class. * * @return StarEntityResolver instance */ public static StarEntityResolver getInstance() { return instance; } /** * Resolves an entity if it is one of the ones that we keep on hand. */ public InputSource resolveEntity( String publicId, String systemId ) throws SAXException, IOException { String local = getLocalResource( publicId, systemId ); if ( local != null ) { InputStream istrm = getClass().getResourceAsStream( local ); InputSource isrc = new InputSource( istrm ); isrc.setPublicId( publicId ); isrc.setSystemId( systemId ); return isrc; } else if ( parent != null ) { return parent.resolveEntity( publicId, systemId ); } else { return null; } } /** * Returns a resource name locating the entity referenced by a given * public/system ID pair. If there is a local copy of this entity, * its path relative to this class is returned, otherwise null * is returned. * * @param systemId the entity's system ID * @param publicId the entity's public ID * @return path to the resource, or null if it is unknown */ protected String getLocalResource( String publicId, String systemId ) { /* Avoid null pointer exceptions. */ if ( publicId == null ) { publicId = ""; } if ( systemId == null ) { systemId = ""; } /* VOTable DTD. */ if ( systemId.endsWith( "VOTable.dtd" ) ) { return "text/VOTable.dtd"; } /* VOTable 1.1 schema. */ if ( systemId.equals( VOT_URI_BASE + "v1.1" ) || systemId.equals( VOT_URI_BASE + "v1.1/" ) || systemId.startsWith( VOT_URI_BASE + "v1.1" ) && systemId.endsWith( ".xsd" ) || systemId.equals( VOT_URI_BASE + "votable-1.1.xsd" ) ) { return "text/VOTable1.1.xsd"; } /* VOTable 1.2 schema. */ if ( systemId.equals( VOT_URI_BASE + "v1.2" ) || systemId.equals( VOT_URI_BASE + "votable-1.2.xsd" ) ) { return "text/VOTable1.2.xsd"; } /* VOTable 1.3 schema. */ if ( systemId.equals( VOT_URI_BASE + "votable-1.3.xsd" ) ) { return "text/VOTable1.3.xsd"; } /* VOTable 1.4 schema. */ if ( systemId.equals( VOT_URI_BASE + "votable-1.4.xsd" ) ) { return "text/VOTable1.4.xsd"; } /* Latest version of 1.* series VOTable. * See the IVOA Endorsed Note "XML Schema Versioning Policies" * (http://www.ivoa.net/documents/Notes/XMLVers/) and the commentary * in VOTable 1.4 section 3 to explain why the "v1.3" URI is used * for the latest, not necessarily v1.3, schema for versions 1.3+. */ if ( systemId.equals( VOT_URI_BASE + "v1.3" ) ) { return "text/VOTable1.4.xsd"; } /* VOTable 1.0 schema. */ if ( systemId.endsWith( "VOTable.xsd" ) ) { return "text/VOTable.xsd"; } /* Astrores DTD. */ if ( systemId.endsWith( "astrores.dtd" ) ) { return "text/astrores.dtd"; } /* JavaHelp DTDs. */ String javaHelpId = "-//Sun Microsystems Inc.//DTD JavaHelp "; if ( publicId.equals( javaHelpId + "HelpSet Version 1.0//EN" ) ) { return "text/helpset_1_0.dtd"; } if ( publicId.equals( javaHelpId + "TOC Version 1.0//EN" ) ) { return "text/toc_1_0.dtd"; } if ( publicId.equals( javaHelpId + "Map Version 1.0//EN" ) ) { return "text/map_1_0.dtd"; } /* Don't know. */ return null; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy