package at.gv.egovernment.moa.util; import java.io.IOException; import java.io.InputStream; import java.util.Map; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** * An <code>EntityResolver</code> that maps system IDs to * <code>InputStream</code>s. * * @author Patrick Peck * @version $Id$ */ public class StreamEntityResolver implements EntityResolver { /** A mapping from Public ID or System ID to an <code>InputStream</code> * containing the entity. */ private Map mappedEntities; /** * Create a <code>StreamEntityResolver</code>. * * @param mappedEntities A mapping from public or system IDs * (<code>String</code> objects) to <code>InputStream</code>s. */ public StreamEntityResolver(Map mappedEntities) { this.mappedEntities = mappedEntities; } /** * Resolve an entity by looking it up in the mapped entities. * * First, the public ID is looked up in the mapping, then the system ID. * * @param publicId The public ID of the entity. * @param systemId The system ID of the entity. * @return An <code>InputStream</code> containing the entity or * <code>null</code> if no entity could be found. * @throws SAXException Signalling a parsing exception. * @throws IOException Error reading the entity. */ public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { InputSource src = null; if (publicId != null && mappedEntities.get(publicId) != null) { src = new InputSource((InputStream) mappedEntities.get(publicId)); } else if (systemId != null && mappedEntities.get(systemId) != null) { src = new InputSource((InputStream) mappedEntities.get(systemId)); } if (src != null) { src.setPublicId(publicId); src.setSystemId(systemId); } return src; } }