package org.fcrepo.test.api;
import java.io.FileInputStream;
import java.io.IOException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class ValidatorEntityResolver extends DefaultHandler implements EntityResolver {
private static Logger LOGGER = LoggerFactory.getLogger(ValidatorEntityResolver.class);
public static String W3C = "http://www.w3.org/2001/03/";
public static String FEDORA = "http://www.fedora.info/definitions/1/0/";
public static String FEDORA_COMMONS = "http://www.fedora-commons.org/definitions/1/0/";
public static String LOCAL_FEDORA = "http://localhost:8080/fedora/schema/";
public static String DC = "http://dublincore.org/schemas/xmls/";
public static String OAI = "http://www.openarchives.org/OAI/2.0/";
private static final String SCHEMA_RESOURCE_PATH =
System.getProperty("fcrepo-integrationtest-core.classes") != null ?
System.getProperty("fcrepo-integrationtest-core.classes")
+ "schema" : "src/test/resources/schema";
@Override
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
String fname = systemId.substring(systemId.lastIndexOf('/') + 1);
String sname = systemId.substring(0,systemId.lastIndexOf('/') + 1);
LOGGER.debug("xmlns p: {} s: {}", publicId, systemId);
if (W3C.equals(sname)) return inputsource("w3c/" + fname, publicId, systemId);
if (FEDORA.equals(sname)) return inputsource("fedora/" + fname, publicId, systemId);
if (FEDORA_COMMONS.equals(sname)) return inputsource("fedora/" + fname, publicId, systemId);
if (LOCAL_FEDORA.equals(sname)) return inputsource("fedora/" + fname, publicId, systemId);
if (DC.equals(sname)) return inputsource("dc/" + fname, publicId, systemId);
if (OAI.equals(sname)) return inputsource("oai/" + fname, publicId, systemId);
if ("".equals(sname)) return inputsource("fedora/" + fname, publicId, systemId);
LOGGER.warn("FAILED to resolve p: " + publicId + " s: " + systemId);
return null;
}
private InputSource inputsource(String path, String publicId, String systemId)
throws IOException {
FileInputStream fis = new FileInputStream(SCHEMA_RESOURCE_PATH + '/' + path);
InputSource result = new InputSource(fis);
result.setEncoding("UTF-8");
result.setPublicId(publicId);
result.setSystemId(systemId);
return result;
}
}