Author: mehdi
Date: Wed Jun 20 13:17:52 2012
New Revision: 1352086

URL: http://svn.apache.org/viewvc?rev=1352086&view=rev
Log:
Added class missing from last commit

Added:
    
xmlgraphics/fop/branches/Temp_URI_Unification/src/java/org/apache/fop/apps/io/InternalResourceResolver.java
   (with props)

Added: 
xmlgraphics/fop/branches/Temp_URI_Unification/src/java/org/apache/fop/apps/io/InternalResourceResolver.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_URI_Unification/src/java/org/apache/fop/apps/io/InternalResourceResolver.java?rev=1352086&view=auto
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_URI_Unification/src/java/org/apache/fop/apps/io/InternalResourceResolver.java
 (added)
+++ 
xmlgraphics/fop/branches/Temp_URI_Unification/src/java/org/apache/fop/apps/io/InternalResourceResolver.java
 Wed Jun 20 13:17:52 2012
@@ -0,0 +1,153 @@
+/*
+ * 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.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import javax.xml.transform.Source;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.stream.StreamSource;
+
+import org.apache.xmlgraphics.util.uri.DataURIResolver;
+
+/**
+ * This object holds the base URI from which to resolve URIs against as well 
as the resolver for
+ * resource acquisition. It also does some URI sanitization of common URI 
syntactical errors. This
+ * class takes in a {@link org.apache.fop.apps.io.ResourceResolver} and 
delegates all relevant
+ * URIs to it.
+ */
+public class InternalResourceResolver {
+    private final URI baseUri;
+    private final ResourceResolver uriResolver;
+    private final DataURIResolver dataSchemeResolver = new DataURIResolver();
+
+    /**
+     * @param baseUri the base URI from which to resolve relative URIs
+     * @param uriResolver the resolver to delegate to
+     */
+    public InternalResourceResolver(URI baseUri, ResourceResolver uriResolver) 
{
+        this.baseUri = baseUri;
+        this.uriResolver = uriResolver;
+    }
+
+    /**
+     * Returns the base URI from which to resolve all URIs against.
+     *
+     * @return the base URI
+     */
+    public URI getBaseURI() {
+        return baseUri;
+    }
+
+    /**
+     * Retrieve a resource given a URI in String form. This also does some 
syntactical sanitaion on
+     * the URI.
+     *
+     * @param stringUri the URI in String form
+     * @return the resource
+     * @throws IOException if an I/O error occurred
+     * @throws URISyntaxException if the URI syntax was invalid
+     */
+    public Resource getResource(String stringUri) throws IOException, 
URISyntaxException {
+        if (stringUri.startsWith("data:")) {
+            return new Resource(resolveDataURI(stringUri));
+        }
+        return getResource(cleanURI(stringUri));
+    }
+
+    /**
+     * Retrieve a resource given a URI in String form.
+     *
+     * @param uri the resource URI
+     * @return the resource
+     * @throws IOException if an I/O error occurred
+     */
+    public Resource getResource(URI uri) throws IOException {
+        if (uri.getScheme() != null && uri.getScheme().startsWith("data")) {
+            return new Resource(resolveDataURI(uri.toASCIIString()));
+        }
+        return uriResolver.getResource(resolveFromBase(uri));
+    }
+
+    /**
+     * Returns the OutputStream for a given URI.
+     *
+     * @param uri the URI for the inteded stream
+     * @return the output stream
+     * @throws IOException if an I/O error occurrred
+     */
+    public OutputStream getOutputStream(URI uri) throws IOException {
+        return uriResolver.getOutputStream(resolveFromBase(uri));
+    }
+
+    /**
+     * Resolves a URI against the base URI.
+     *
+     * @param uri the URI that requires resolution
+     * @return the resolved URI
+     */
+    public URI resolveFromBase(URI uri) {
+        return baseUri.resolve(uri);
+    }
+
+    /**
+     * Performs some sanitation for some of the most common URI syntax 
mistakes.
+     *
+     * @param uriStr the URI in String form
+     * @return a valid URI
+     * @throws URISyntaxException if the given String was too erroneous to 
validate
+     */
+    public static URI cleanURI(String uriStr) throws URISyntaxException {
+        // replace back slash with forward slash to ensure windows file:/// 
URLS are supported
+        if (uriStr == null) {
+            return null;
+        }
+        String fixedUri = uriStr.replace('\\', '/');
+        fixedUri = fixedUri.replace(" ", "%20");
+        URI baseURI = new URI(fixedUri);
+        return baseURI;
+    }
+
+    /**
+     * Performs some sanitation for some of the most common URI syntax 
mistakes but returns a
+     * directory URI rather than a file URI.
+     *
+     * @param base the directory URI in String form
+     * @return the directory URI
+     * @throws URISyntaxException if the given String was too erroneous to 
validate
+     */
+    public static URI getBaseURI(String base) throws URISyntaxException {
+        String path = base + (base.endsWith("/") ? "" : "/");
+        return cleanURI(path);
+    }
+
+    private InputStream resolveDataURI(String dataURI) {
+        try {
+            Source src = dataSchemeResolver.resolve(dataURI, "");
+            return src == null ? null : ((StreamSource) src).getInputStream();
+        } catch (TransformerException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

Propchange: 
xmlgraphics/fop/branches/Temp_URI_Unification/src/java/org/apache/fop/apps/io/InternalResourceResolver.java
------------------------------------------------------------------------------
    svn:eol-style = native



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to