package at.ac.tuwien.dsg.scaledom.util; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.nio.charset.Charset; import org.xml.sax.InputSource; import at.ac.tuwien.dsg.scaledom.ScaleDomDocumentSource; import at.ac.tuwien.dsg.scaledom.io.impl.FileDocumentSource; import at.ac.tuwien.dsg.scaledom.io.impl.HttpDocumentSource; /** * Various utilities for <code>InputSource</code> objects. * * @author Dominik Rauch */ public class InputSourceUtils { /** * Returns a <code>FileDocumentSource</code> implementation of <code>ScaleDomDocumentSource</code> for a given * <code>InputSource</code>. * * @param is the input source. * @param defaultEncoding default encoding, used if input source does not provide the encoding. * @return a file document source. * @throws IOException If the input source is pointing to an invalid document source. */ public static ScaleDomDocumentSource inputSourceToDocumentSource(final InputSource is, final String defaultEncoding) throws IOException { checkNotNull(is, "Argument is must not be null."); checkNotNull(is, "Argument defaultEncoding must not be null."); checkArgument(Charset.isSupported(defaultEncoding), "Default encoding '%s' is not supported.", defaultEncoding); try { String uri = is.getSystemId().trim(); if(uri.startsWith("file://")) { // Get File from InputSource final File file = new File(new URI(is.getSystemId())); final String isEncoding = is.getEncoding(); final String encoding = isEncoding != null ? isEncoding : defaultEncoding; return new FileDocumentSource(file, encoding); } else { // Get connection from URL URL url = new URL(uri); final String isEncoding = is.getEncoding(); final String encoding = isEncoding != null ? isEncoding : defaultEncoding; return new HttpDocumentSource(url, encoding); } } catch (final URISyntaxException ex) { throw new IOException(ex); } } }