aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMehdi Houshmand <mehdi@apache.org>2012-06-14 14:43:58 +0000
committerMehdi Houshmand <mehdi@apache.org>2012-06-14 14:43:58 +0000
commit3e7cd3611bd15772e881ce49671a60035abc3ef5 (patch)
tree3bbea75a090425c7379071dbe5e3076f7e583c19 /src
parentd17d05e36c068e0ce4b71d24ba764d80c26a9155 (diff)
downloadxmlgraphics-fop-3e7cd3611bd15772e881ce49671a60035abc3ef5.tar.gz
xmlgraphics-fop-3e7cd3611bd15772e881ce49671a60035abc3ef5.zip
Deleted FOURIResolver class
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_URI_Unification@1350272 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
-rw-r--r--src/java/org/apache/fop/apps/FOUserAgent.java1
-rw-r--r--src/java/org/apache/fop/apps/io/FOURIResolver.java377
2 files changed, 0 insertions, 378 deletions
diff --git a/src/java/org/apache/fop/apps/FOUserAgent.java b/src/java/org/apache/fop/apps/FOUserAgent.java
index b8459e459..d0472a835 100644
--- a/src/java/org/apache/fop/apps/FOUserAgent.java
+++ b/src/java/org/apache/fop/apps/FOUserAgent.java
@@ -400,7 +400,6 @@ public class FOUserAgent {
* @param uri URI to access
* @return A {@link javax.xml.transform.Source} object, or null if the URI
* cannot be resolved.
- * @see org.apache.fop.apps.io.FOURIResolver
*/
public Source resolveURI(String uri) {
// TODO: What do we want to do when resources aren't found???
diff --git a/src/java/org/apache/fop/apps/io/FOURIResolver.java b/src/java/org/apache/fop/apps/io/FOURIResolver.java
deleted file mode 100644
index b73c67fa8..000000000
--- a/src/java/org/apache/fop/apps/io/FOURIResolver.java
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* $Id$ */
-
-package org.apache.fop.apps.io;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.URLConnection;
-
-import javax.xml.transform.Source;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.URIResolver;
-import javax.xml.transform.stream.StreamSource;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fop.apps.FOUserAgent;
-
-import org.apache.xmlgraphics.util.io.Base64EncodeStream;
-import org.apache.xmlgraphics.util.uri.CommonURIResolver;
-
-/**
- * Provides FOP specific URI resolution. This is the default URIResolver
- * {@link FOUserAgent} will use unless overridden.
- *
- * @see javax.xml.transform.URIResolver
- */
-public class FOURIResolver implements javax.xml.transform.URIResolver {
-
- // log
- private Log log = LogFactory.getLog("FOP");
-
- /** Common URIResolver */
- private CommonURIResolver commonURIResolver = new CommonURIResolver();
-
- /** A user settable URI Resolver */
- private URIResolver uriResolver = null;
-
- /** true if exceptions are to be thrown if the URIs cannot be resolved. */
- private boolean throwExceptions = false;
-
- /**
- * Checks if the given base URL is acceptable. It also normalizes the URL.
- * @param base the base URL to check
- * @return the normalized URL
- * @throws MalformedURLException if there's a problem with a file URL
- */
- public String checkBaseURL(String base) throws MalformedURLException {
- // replace back slash with forward slash to ensure windows file:/// URLS are supported
- base = base.replace('\\', '/');
- if (!base.endsWith("/")) {
- // The behavior described by RFC 3986 regarding resolution of relative
- // references may be misleading for normal users:
- // file://path/to/resources + myResource.res -> file://path/to/myResource.res
- // file://path/to/resources/ + myResource.res -> file://path/to/resources/myResource.res
- // We assume that even when the ending slash is missing, users have the second
- // example in mind
- base += "/";
- }
- File dir = new File(base);
- if (dir.isDirectory()) {
- return dir.toURI().toASCIIString();
- } else {
- URI baseURI;
- try {
- baseURI = new URI(base);
- String scheme = baseURI.getScheme();
- boolean directoryExists = true;
- if ("file".equals(scheme)) {
- dir = FileUtils.toFile(baseURI.toURL());
- directoryExists = dir.isDirectory();
- }
- if (scheme == null || !directoryExists) {
- String message = "base " + base + " is not a valid directory";
- if (throwExceptions) {
- throw new MalformedURLException(message);
- }
- log.error(message);
- }
- return baseURI.toASCIIString();
- } catch (URISyntaxException e) {
- //TODO not ideal: our base URLs are actually base URIs.
- throw new MalformedURLException(e.getMessage());
- }
- }
- }
-
- /**
- * Default constructor
- */
- public FOURIResolver() {
- this(false);
- }
-
- /**
- * Additional constructor
- *
- * @param throwExceptions
- * true if exceptions are to be thrown if the URIs cannot be
- * resolved.
- */
- public FOURIResolver(boolean throwExceptions) {
- this.throwExceptions = throwExceptions;
- }
-
- /**
- * Handles resolve exceptions appropriately.
- *
- * @param e
- * the exception
- * @param errorStr
- * error string
- * @param strict
- * strict user config
- */
- private void handleException(Exception e, String errorStr, boolean strict)
- throws TransformerException {
- if (strict) {
- throw new TransformerException(errorStr, e);
- }
- log.error(e.getMessage());
- }
-
- /**
- * Called by the processor through {@link FOUserAgent} when it encounters an
- * uri in an external-graphic element. (see also
- * {@link javax.xml.transform.URIResolver#resolve(String, String)} This
- * resolver will allow URLs without a scheme, i.e. it assumes 'file:' as the
- * default scheme. It also allows relative URLs with scheme, e.g.
- * file:../../abc.jpg which is not strictly RFC compliant as long as the
- * scheme is the same as the scheme of the base URL. If the base URL is null
- * a 'file:' URL referencing the current directory is used as the base URL.
- * If the method is successful it will return a Source of type
- * {@link javax.xml.transform.stream.StreamSource} with its SystemID set to
- * the resolved URL used to open the underlying InputStream.
- *
- * @param href
- * An href attribute, which may be relative or absolute.
- * @param base
- * The base URI against which the first argument will be made
- * absolute if the absolute URI is required.
- * @return A {@link javax.xml.transform.Source} object, or null if the href
- * cannot be resolved.
- * @throws javax.xml.transform.TransformerException
- * Never thrown by this implementation.
- * @see javax.xml.transform.URIResolver#resolve(String, String)
- */
- public Source resolve(String href, String base) throws TransformerException {
- Source source = null;
-
- // data URLs can be quite long so evaluate early and don't try to build a File
- // (can lead to problems)
- source = commonURIResolver.resolve(href, base);
-
- // Custom uri resolution
- if (source == null && uriResolver != null) {
- source = uriResolver.resolve(href, base);
- }
-
- // Fallback to default resolution mechanism
- if (source == null) {
- URL absoluteURL = null;
- int hashPos = href.indexOf('#');
- String fileURL;
- String fragment;
- if (hashPos >= 0) {
- fileURL = href.substring(0, hashPos);
- fragment = href.substring(hashPos);
- } else {
- fileURL = href;
- fragment = null;
- }
- File file = new File(fileURL);
- if (file.canRead() && file.isFile()) {
- try {
- if (fragment != null) {
- absoluteURL = new URL(file.toURI().toURL().toExternalForm() + fragment);
- } else {
- absoluteURL = file.toURI().toURL();
- }
- } catch (MalformedURLException mfue) {
- handleException(mfue, "Could not convert filename '" + href
- + "' to URL", throwExceptions);
- }
- } else {
- // no base provided
- if (base == null) {
- // We don't have a valid file protocol based URL
- try {
- absoluteURL = new URL(href);
- } catch (MalformedURLException mue) {
- try {
- // the above failed, we give it another go in case
- // the href contains only a path then file: is
- // assumed
- absoluteURL = new URL("file:" + href);
- } catch (MalformedURLException mfue) {
- handleException(mfue, "Error with URL '" + href
- + "'", throwExceptions);
- }
- }
-
- // try and resolve from context of base
- } else {
- URL baseURL = null;
- try {
- baseURL = new URL(base);
- } catch (MalformedURLException mfue) {
- handleException(mfue, "Error with base URL '" + base
- + "'", throwExceptions);
- }
-
- /*
- * This piece of code is based on the following statement in
- * RFC2396 section 5.2:
- *
- * 3) If the scheme component is defined, indicating that
- * the reference starts with a scheme name, then the
- * reference is interpreted as an absolute URI and we are
- * done. Otherwise, the reference URI's scheme is inherited
- * from the base URI's scheme component.
- *
- * Due to a loophole in prior specifications [RFC1630], some
- * parsers allow the scheme name to be present in a relative
- * URI if it is the same as the base URI scheme.
- * Unfortunately, this can conflict with the correct parsing
- * of non-hierarchical URI. For backwards compatibility, an
- * implementation may work around such references by
- * removing the scheme if it matches that of the base URI
- * and the scheme is known to always use the <hier_part>
- * syntax.
- *
- * The URL class does not implement this work around, so we
- * do.
- */
- assert (baseURL != null);
- String scheme = baseURL.getProtocol() + ":";
- if (href.startsWith(scheme) && "file:".equals(scheme)) {
- href = href.substring(scheme.length());
- int colonPos = href.indexOf(':');
- int slashPos = href.indexOf('/');
- if (slashPos >= 0 && colonPos >= 0
- && colonPos < slashPos) {
- href = "/" + href; // Absolute file URL doesn't
- // have a leading slash
- }
- }
- try {
- absoluteURL = new URL(baseURL, href);
- } catch (MalformedURLException mfue) {
- handleException(mfue, "Error with URL; base '" + base
- + "' " + "href '" + href + "'", throwExceptions);
- }
- }
- }
-
- if (absoluteURL != null) {
- String effURL = absoluteURL.toExternalForm();
- try {
- URLConnection connection = absoluteURL.openConnection();
- connection.setAllowUserInteraction(false);
- connection.setDoInput(true);
- updateURLConnection(connection, href);
- connection.connect();
- return new StreamSource(connection.getInputStream(), effURL);
- } catch (FileNotFoundException fnfe) {
- // Note: This is on "debug" level since the caller is
- // supposed to handle this
- log.debug("File not found: " + effURL);
- } catch (java.io.IOException ioe) {
- log.error("Error with opening URL '" + effURL + "': "
- + ioe.getMessage());
- }
- }
- }
- return source;
- }
-
- /**
- * This method allows you to set special values on a URLConnection just
- * before the connect() method is called. Subclass FOURIResolver and
- * override this method to do things like adding the user name and password
- * for HTTP basic authentication.
- *
- * @param connection
- * the URLConnection instance
- * @param href
- * the original URI
- */
- protected void updateURLConnection(URLConnection connection, String href) {
- // nop
- }
-
- /**
- * This is a convenience method for users who want to override
- * updateURLConnection for HTTP basic authentication. Simply call it using
- * the right username and password.
- *
- * @param connection
- * the URLConnection to set up for HTTP basic authentication
- * @param username
- * the username
- * @param password
- * the password
- */
- protected void applyHttpBasicAuthentication(URLConnection connection,
- String username, String password) {
- String combined = username + ":" + password;
- try {
- ByteArrayOutputStream baout = new ByteArrayOutputStream(combined
- .length() * 2);
- Base64EncodeStream base64 = new Base64EncodeStream(baout);
- // TODO Not sure what charset/encoding can be used with basic
- // authentication
- base64.write(combined.getBytes("UTF-8"));
- base64.close();
- connection.setRequestProperty("Authorization", "Basic "
- + new String(baout.toByteArray(), "UTF-8"));
- } catch (IOException e) {
- // won't happen. We're operating in-memory.
- throw new RuntimeException(
- "Error during base64 encodation of username/password");
- }
- }
-
- /**
- * Sets the custom URI Resolver. It is used for resolving factory-level URIs like
- * hyphenation patterns and as backup for URI resolution performed during a
- * rendering run.
- *
- * @param resolver
- * the new URI resolver
- */
- public void setCustomURIResolver(URIResolver resolver) {
- this.uriResolver = resolver;
- }
-
- /**
- * Returns the custom URI Resolver.
- *
- * @return the URI Resolver or null, if none is set
- */
- public URIResolver getCustomURIResolver() {
- return this.uriResolver;
- }
-
- /**
- * @param throwExceptions
- * Whether or not to throw exceptions on resolution error
- */
- public void setThrowExceptions(boolean throwExceptions) {
- this.throwExceptions = throwExceptions;
- }
-}