jp.gr.xml.relax.sax.SimpleEntityResolver Maven / Gradle / Ivy
package jp.gr.xml.relax.sax;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
/**
* SimpleEntityResolver
*
* @since Aug. 12, 2000
* @version May. 28, 2001
* @author ASAMI, Tomoharu ([email protected])
*/
public class SimpleEntityResolver implements EntityResolver {
private Map publicIds_ = new HashMap();
private Map systemIds_ = new HashMap();
private List relativeSystemIds_ = new ArrayList();
public SimpleEntityResolver() {
}
public SimpleEntityResolver(String name, String uri) {
_init(new String[][] { { name, uri }
}, null);
}
public SimpleEntityResolver(String[][] systemIds) {
_init(systemIds, null);
}
public SimpleEntityResolver(String[][] systemIds, String[][] publicIds) {
_init(systemIds, publicIds);
}
private void _init(String[][] systemIds, String[][] publicIds) {
if (systemIds != null) {
for (int i = 0; i < systemIds.length; i++) {
String systemId = systemIds[i][0];
addSystemId(systemId, systemIds[i][1]);
}
}
if (publicIds != null) {
for (int i = 0; i < publicIds.length; i++) {
addPublicId(publicIds[i][0], publicIds[i][1]);
}
}
}
public void addSystemId(String systemId, String uri) {
systemIds_.put(systemId, uri);
relativeSystemIds_.add(systemId);
}
public void addPublicId(String publicId, String uri) {
publicIds_.put(publicId, uri);
}
public InputSource resolveEntity(String publicId, String systemId) {
if (systemId != null) {
if (_isExist(systemId)) {
return (new InputSource(systemId));
}
}
if (publicId != null) {
String uri = (String) publicIds_.get(publicId);
if (uri != null) {
return (new InputSource(uri));
} else {
return (null);
}
}
if (systemId != null) {
String uri = _getURIBySystemId(systemId);
if (uri != null) {
return (new InputSource(uri));
} else {
return (new InputSource(systemId));
}
} else {
return (null);
}
}
private boolean _isExist(String uri) {
try {
URL url = new URL(uri);
if ("file".equals(url.getProtocol())) {
InputStream in = url.openStream();
in.close();
return (true);
} else {
return (false); // XXX : http
}
} catch (IOException e) {
return (false);
}
}
private String _getURIBySystemId(String systemId) {
String uri = (String) systemIds_.get(systemId);
if (uri != null) {
return (uri);
}
int size = relativeSystemIds_.size();
for (int i = 0; i < size; i++) {
String relativeId = (String) relativeSystemIds_.get(i);
if (systemId.endsWith(relativeId)) {
return ((String) systemIds_.get(relativeId));
}
}
return (null);
}
}