From: Mehdi Houshmand Date: Thu, 14 Jun 2012 14:05:16 +0000 (+0000) Subject: Removed URI resolving class that are no longer needed and handled data URIs X-Git-Tag: fop-2_0~346^2~12 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d17d05e36c068e0ce4b71d24ba764d80c26a9155;p=xmlgraphics-fop.git Removed URI resolving class that are no longer needed and handled data URIs git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_URI_Unification@1350248 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/fop/afp/AFPStreamer.java b/src/java/org/apache/fop/afp/AFPStreamer.java index 3edcd1265..93a0075c9 100644 --- a/src/java/org/apache/fop/afp/AFPStreamer.java +++ b/src/java/org/apache/fop/afp/AFPStreamer.java @@ -24,11 +24,9 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; -import java.net.URISyntaxException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import java.util.concurrent.atomic.AtomicLong; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; @@ -36,6 +34,7 @@ import org.apache.commons.logging.LogFactory; import org.apache.fop.afp.modca.ResourceGroup; import org.apache.fop.afp.modca.StreamedResourceGroup; +import org.apache.fop.apps.io.TempResourceURIGenerator; import org.apache.fop.apps.io.URIResolverWrapper; /** @@ -47,6 +46,9 @@ public class AFPStreamer implements Streamable { private static final String DEFAULT_EXTERNAL_RESOURCE_FILENAME = "resources.afp"; + private static final TempResourceURIGenerator TEMP_URI_GENERATOR + = new TempResourceURIGenerator("AFPDataStream_"); + private final Factory factory; private final URIResolverWrapper uriResolverWrapper; @@ -77,7 +79,7 @@ public class AFPStreamer implements Streamable { public AFPStreamer(Factory factory, URIResolverWrapper uriResolverWrapper) { this.factory = factory; this.uriResolverWrapper = uriResolverWrapper; - this.tempUri = TempUriGenerator.INSTANCE.generate(); + this.tempUri = TEMP_URI_GENERATOR.generate(); defaultResourceGroupUri = URI.create(DEFAULT_EXTERNAL_RESOURCE_FILENAME); } @@ -188,25 +190,4 @@ public class AFPStreamer implements Streamable { tempInputStream.close(); os.flush(); } - - private static final class TempUriGenerator { - - private static final TempUriGenerator INSTANCE = new TempUriGenerator(); - - private static final String AFPDATASTREAM_TEMP_URL_PREFIX = "tmp:///AFPDataStream_"; - - private final AtomicLong counter; - - private TempUriGenerator() { - counter = new AtomicLong(); - } - - public URI generate() { - try { - return new URI(AFPDATASTREAM_TEMP_URL_PREFIX + counter.getAndIncrement()); - } catch (URISyntaxException e) { - throw new RuntimeException(e); - } - } - } } diff --git a/src/java/org/apache/fop/afp/fonts/CharacterSetBuilder.java b/src/java/org/apache/fop/afp/fonts/CharacterSetBuilder.java index 3cada1ed3..e145de745 100644 --- a/src/java/org/apache/fop/afp/fonts/CharacterSetBuilder.java +++ b/src/java/org/apache/fop/afp/fonts/CharacterSetBuilder.java @@ -143,7 +143,7 @@ public abstract class CharacterSetBuilder { * @return an inputStream * @throws IOException in the event that an I/O exception of some sort has occurred */ - protected InputStream openInputStream(AFPResourceAccessor accessor, String uriStr, + private InputStream openInputStream(AFPResourceAccessor accessor, String uriStr, AFPEventProducer eventProducer) throws IOException { URI uri; @@ -163,7 +163,7 @@ public abstract class CharacterSetBuilder { * * @param inputStream the inputstream to close */ - protected void closeInputStream(InputStream inputStream) { + private void closeInputStream(InputStream inputStream) { try { if (inputStream != null) { inputStream.close(); @@ -381,9 +381,8 @@ public abstract class CharacterSetBuilder { * @return a class representing the font descriptor * @throws IOException if an I/O exception of some sort has occurred. */ - protected static FontDescriptor processFontDescriptor( - StructuredFieldReader structuredFieldReader) - throws IOException { + private static FontDescriptor processFontDescriptor( + StructuredFieldReader structuredFieldReader) throws IOException { byte[] fndData = structuredFieldReader.getNext(FONT_DESCRIPTOR_SF); return new FontDescriptor(fndData); @@ -397,8 +396,8 @@ public abstract class CharacterSetBuilder { * @return the FontControl * @throws IOException if an I/O exception of some sort has occurred. */ - protected FontControl processFontControl(StructuredFieldReader structuredFieldReader) - throws IOException { + private FontControl processFontControl(StructuredFieldReader structuredFieldReader) + throws IOException { byte[] fncData = structuredFieldReader.getNext(FONT_CONTROL_SF); @@ -429,7 +428,7 @@ public abstract class CharacterSetBuilder { * @return CharacterSetOrientation array * @throws IOException if an I/O exception of some sort has occurred. */ - protected CharacterSetOrientation[] processFontOrientation( + private CharacterSetOrientation[] processFontOrientation( StructuredFieldReader structuredFieldReader) throws IOException { byte[] data = structuredFieldReader.getNext(FONT_ORIENTATION_SF); @@ -477,7 +476,7 @@ public abstract class CharacterSetBuilder { * font metric values * @throws IOException if an I/O exception of some sort has occurred. */ - protected void processFontPosition(StructuredFieldReader structuredFieldReader, + private void processFontPosition(StructuredFieldReader structuredFieldReader, CharacterSetOrientation[] characterSetOrientations, double metricNormalizationFactor) throws IOException { @@ -534,7 +533,7 @@ public abstract class CharacterSetBuilder { * font metric values * @throws IOException if an I/O exception of some sort has occurred. */ - protected void processFontIndex(StructuredFieldReader structuredFieldReader, + private void processFontIndex(StructuredFieldReader structuredFieldReader, CharacterSetOrientation cso, Map codepage, double metricNormalizationFactor) throws IOException { @@ -706,13 +705,14 @@ public abstract class CharacterSetBuilder { return INSTANCE; } + @Override protected Map loadCodePage(String codePage, String encoding, AFPResourceAccessor accessor, AFPEventProducer eventProducer) throws IOException { // Create the HashMap to store code page information Map codePages = new HashMap(); InputStream inputStream = null; try { - inputStream = openInputStream(accessor, codePage.trim(), eventProducer); + inputStream = super.openInputStream(accessor, codePage.trim(), eventProducer); } catch (IOException e) { eventProducer.codePageNotFound(this, e); throw e; @@ -750,7 +750,7 @@ public abstract class CharacterSetBuilder { } } } finally { - closeInputStream(inputStream); + super.closeInputStream(inputStream); } return codePages; } diff --git a/src/java/org/apache/fop/apps/FOUserAgent.java b/src/java/org/apache/fop/apps/FOUserAgent.java index c395d01d8..b8459e459 100644 --- a/src/java/org/apache/fop/apps/FOUserAgent.java +++ b/src/java/org/apache/fop/apps/FOUserAgent.java @@ -23,7 +23,6 @@ package org.apache.fop.apps; import java.io.File; import java.io.IOException; import java.io.OutputStream; -import java.net.URI; import java.net.URISyntaxException; import java.util.Date; import java.util.Map; @@ -41,7 +40,6 @@ import org.apache.xmlgraphics.image.loader.ImageManager; import org.apache.xmlgraphics.image.loader.ImageSessionContext; import org.apache.xmlgraphics.image.loader.impl.AbstractImageSessionContext; import org.apache.xmlgraphics.util.UnitConv; -import org.apache.xmlgraphics.util.uri.CommonURIResolver; import org.apache.fop.Version; import org.apache.fop.accessibility.Accessibility; @@ -57,7 +55,6 @@ import org.apache.fop.events.LoggingEventListener; import org.apache.fop.fo.ElementMappingRegistry; import org.apache.fop.fo.FOEventHandler; import org.apache.fop.fonts.FontManager; -import org.apache.fop.hyphenation.HyphenationTreeResolver; import org.apache.fop.layoutmgr.LayoutManagerMaker; import org.apache.fop.render.ImageHandlerRegistry; import org.apache.fop.render.Renderer; @@ -220,7 +217,6 @@ public class FOUserAgent { setStructureTreeEventHandler(documentHandler.getStructureTreeEventHandler()); } this.documentHandlerOverride = documentHandler; - } /** @@ -409,16 +405,9 @@ public class FOUserAgent { public Source resolveURI(String uri) { // TODO: What do we want to do when resources aren't found??? try { - Source src; // Have to do this so we can resolve data URIs - if (uri.startsWith("data:")) { - CommonURIResolver uriResolver = new CommonURIResolver(); - src = uriResolver.resolve(uri, ""); - } else { - URI actualUri = URIResolverWrapper.cleanURI(uri); - src = new StreamSource(newUriResolver.resolveIn(actualUri)); - src.setSystemId(uri); - } + Source src = new StreamSource(newUriResolver.resolveIn(uri)); + src.setSystemId(uri); return src; } catch (URISyntaxException use) { return null; @@ -801,11 +790,6 @@ public class FOUserAgent { return factory.getColorSpaceCache(); } - /** @return the HyphenationTreeResolver for resolving user-supplied hyphenation patterns. */ - public HyphenationTreeResolver getHyphenationTreeResolver() { - return factory.getHyphenationTreeResolver(); - } - public Map getHyphPatNames() { return factory.getHyphPatNames(); } diff --git a/src/java/org/apache/fop/apps/FopConfParser.java b/src/java/org/apache/fop/apps/FopConfParser.java index b095d8f74..3ecba717b 100644 --- a/src/java/org/apache/fop/apps/FopConfParser.java +++ b/src/java/org/apache/fop/apps/FopConfParser.java @@ -171,18 +171,6 @@ public class FopConfParser { } } - if (cfg.getChild("hyphenation-base", false) != null) { - String path = cfg.getChild("hyphenation-base").getValue(null); - if (defaultBaseURI != null) { - try { - URI hyphBaseUri = URIResolverWrapper.getBaseURI(path); - fopFactoryBuilder.setHyphenationBaseURI(defaultBaseURI.resolve(hyphBaseUri)); - } catch (URISyntaxException use) { - LogUtil.handleException(log, use, strict); - } - } - } - // renderer options if (cfg.getChild("source-resolution", false) != null) { float srcRes = cfg.getChild("source-resolution").getValueAsFloat( diff --git a/src/java/org/apache/fop/apps/FopFactory.java b/src/java/org/apache/fop/apps/FopFactory.java index 9cb4edc27..f60e6675b 100644 --- a/src/java/org/apache/fop/apps/FopFactory.java +++ b/src/java/org/apache/fop/apps/FopFactory.java @@ -28,9 +28,6 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; -import javax.xml.transform.Source; -import javax.xml.transform.TransformerException; - import org.xml.sax.SAXException; import org.apache.avalon.framework.configuration.Configuration; @@ -45,7 +42,6 @@ import org.apache.fop.apps.io.URIResolverWrapper; import org.apache.fop.fo.ElementMapping; import org.apache.fop.fo.ElementMappingRegistry; import org.apache.fop.fonts.FontManager; -import org.apache.fop.hyphenation.HyphenationTreeResolver; import org.apache.fop.layoutmgr.LayoutManagerMaker; import org.apache.fop.render.ImageHandlerRegistry; import org.apache.fop.render.RendererConfig; @@ -94,7 +90,7 @@ public final class FopFactory implements ImageContext { this.config = config; this.uriResolverWrapper = new URIResolverWrapper(config.getBaseURI(), config.getNewURIResolver()); this.elementMappingRegistry = new ElementMappingRegistry(this); - this.colorSpaceCache = new ColorSpaceCache(config.getURIResolver()); + this.colorSpaceCache = new ColorSpaceCache(uriResolverWrapper); this.rendererFactory = new RendererFactory(config.preferRenderer()); this.xmlHandlers = new XMLHandlerRegistry(); this.imageHandlers = new ImageHandlerRegistry(); @@ -343,15 +339,6 @@ public final class FopFactory implements ImageContext { return config.getLayoutManagerMakerOverride(); } - /** @return the hyphen base URI */ - public String getHyphenBaseURI() { - return config.getHyphenationBaseURI().toASCIIString(); - } - - /** @return the HyphenationTreeResolver for resolving user-supplied hyphenation patterns. */ - public HyphenationTreeResolver getHyphenationTreeResolver() { - return config.getHyphenationTreeResolver(); - } public Map getHyphPatNames() { return config.getHyphPatNames(); @@ -465,26 +452,6 @@ public final class FopFactory implements ImageContext { return config.getFontManager(); } - /** - * Attempts to resolve the given URI. - * Will use the configured resolver and if not successful fall back - * to the default resolver. - * @param href URI to access - * @param baseUri the base URI to resolve against - * @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 href, String baseUri) { - Source source = null; - try { - source = config.getURIResolver().resolve(href, baseUri); - } catch (TransformerException e) { - log.error("Attempt to resolve URI '" + href + "' failed: ", e); - } - return source; - } - /** * Returns the color space cache for this instance. *

diff --git a/src/java/org/apache/fop/apps/FopFactoryBuilder.java b/src/java/org/apache/fop/apps/FopFactoryBuilder.java index 013b15efe..5d49712ba 100644 --- a/src/java/org/apache/fop/apps/FopFactoryBuilder.java +++ b/src/java/org/apache/fop/apps/FopFactoryBuilder.java @@ -33,11 +33,9 @@ import org.apache.avalon.framework.configuration.Configuration; import org.apache.xmlgraphics.image.loader.ImageContext; import org.apache.xmlgraphics.image.loader.ImageManager; -import org.apache.fop.apps.io.FOURIResolver; import org.apache.fop.apps.io.ResourceResolver; import org.apache.fop.apps.io.ResourceResolverFactory; import org.apache.fop.fonts.FontManager; -import org.apache.fop.hyphenation.HyphenationTreeResolver; import org.apache.fop.layoutmgr.LayoutManagerMaker; /** @@ -189,32 +187,6 @@ public final class FopFactoryBuilder { return this; } - /** - * Sets the base URI for hyphenation data. - * - * @param hyphenationBase the hyphenation-base-URI - * @return this - * @deprecated this will be phased out in favour of a unified URI resolution mechanism - */ - public FopFactoryBuilder setHyphenationBaseURI(URI hyphenationBase) { - fopFactoryConfigBuilder.setHyphenationBaseURI(hyphenationBase); - return this; - } - - /** - * Sets the URI resolver specific to Hyphenation data. - * - * @param hyphResolver the hyphenation-URI-resolver - * @return this - * @deprecated this will be phased out in favour of a unified URI resolution mechanism - */ - public FopFactoryBuilder setHyphenationTreeResolver( - HyphenationTreeResolver hyphResolver) { - fopFactoryConfigBuilder.setHyphenationTreeResolver(hyphResolver); - return this; - - } - /** * Sets whether to perform strict validation on the FO used. * @@ -362,10 +334,6 @@ public final class FopFactoryBuilder { private URI baseURI; - private URI hyphenationBaseURI; - - private HyphenationTreeResolver hyphenationTreeResolver; - private boolean hasStrictFOValidation = true; private boolean hasStrictUserValidation = FopFactoryConfig.DEFAULT_STRICT_USERCONFIG_VALIDATION; @@ -410,7 +378,6 @@ public final class FopFactoryBuilder { this.enviro = enviro; this.baseURI = enviro.getDefaultBaseURI(); this.imageManager = new ImageManager(new ImageContextImpl(this)); - this.resolver = new FOURIResolver(); } /** {@inheritDoc} */ @@ -438,16 +405,6 @@ public final class FopFactoryBuilder { return baseURI; } - /** {@inheritDoc} */ - public URI getHyphenationBaseURI() { - return hyphenationBaseURI; - } - - /** {@inheritDoc} */ - public HyphenationTreeResolver getHyphenationTreeResolver() { - return hyphenationTreeResolver; - } - /** {@inheritDoc} */ public boolean validateStrictly() { return hasStrictFOValidation; @@ -532,10 +489,6 @@ public final class FopFactoryBuilder { void setBaseURI(URI baseURI); - void setHyphenationBaseURI(URI hyphenationBase); - - void setHyphenationTreeResolver(HyphenationTreeResolver hyphResolver); - void setStrictFOValidation(boolean validateStrictly); void setStrictUserConfigValidation(boolean validateStrictly); @@ -593,11 +546,6 @@ public final class FopFactoryBuilder { throwIllegalStateException(); } - public void setHyphenationTreeResolver( - HyphenationTreeResolver hyphResolver) { - throwIllegalStateException(); - } - public void setStrictFOValidation(boolean validateStrictly) { throwIllegalStateException(); } @@ -677,14 +625,6 @@ public final class FopFactoryBuilder { config.baseURI = baseURI; } - public void setHyphenationBaseURI(URI hyphenationBase) { - config.hyphenationBaseURI = hyphenationBase; - } - - public void setHyphenationTreeResolver(HyphenationTreeResolver hyphResolver) { - config.hyphenationTreeResolver = hyphResolver; - } - public void setStrictFOValidation(boolean validateStrictly) { config.hasStrictFOValidation = validateStrictly; } diff --git a/src/java/org/apache/fop/apps/FopFactoryConfig.java b/src/java/org/apache/fop/apps/FopFactoryConfig.java index 792f2fa04..525d32204 100644 --- a/src/java/org/apache/fop/apps/FopFactoryConfig.java +++ b/src/java/org/apache/fop/apps/FopFactoryConfig.java @@ -23,15 +23,12 @@ import java.net.URI; import java.util.Map; import java.util.Set; -import javax.xml.transform.URIResolver; - import org.apache.avalon.framework.configuration.Configuration; import org.apache.xmlgraphics.image.loader.ImageManager; import org.apache.fop.apps.io.ResourceResolver; import org.apache.fop.fonts.FontManager; -import org.apache.fop.hyphenation.HyphenationTreeResolver; import org.apache.fop.layoutmgr.LayoutManagerMaker; /** @@ -77,14 +74,6 @@ public interface FopFactoryConfig { */ ResourceResolver getNewURIResolver(); - /** - * The URI resolver for controlling file access. - * - * @return the URI resolver - * @deprecated please use the {@link #getNewURIResolver()} method. - */ - URIResolver getURIResolver(); - /** * The base URI from which URIs are resolved against. * @@ -92,24 +81,6 @@ public interface FopFactoryConfig { */ URI getBaseURI(); - /** - * The base URI of hyphenation data. - * - * @return the hyphenation-base-URI - * @deprecated this intelligence can be configured in the URI resolver set in - * {@link #getNewURIResolver()} - */ - URI getHyphenationBaseURI(); - - /** - * The URI resolver for resolving hyphenation data. - * - * @return the hyphenation-URI-resolver - * @deprecated this intelligence can be configured in the URI resolver set in - * {@link #getNewURIResolver()} - */ - HyphenationTreeResolver getHyphenationTreeResolver(); - /** @see {@link FopFactory#validateStrictly()} */ boolean validateStrictly(); diff --git a/src/java/org/apache/fop/apps/io/ResourceResolverFactory.java b/src/java/org/apache/fop/apps/io/ResourceResolverFactory.java index 6e9484c82..89ba34e14 100644 --- a/src/java/org/apache/fop/apps/io/ResourceResolverFactory.java +++ b/src/java/org/apache/fop/apps/io/ResourceResolverFactory.java @@ -89,7 +89,7 @@ public final class ResourceResolverFactory { } private static boolean isTempUri(URI uri) { - return "tmp".equals(uri.getScheme()); + return TempResourceURIGenerator.isTempUri(uri); } public Resource getResource(URI uri) throws IOException { diff --git a/src/java/org/apache/fop/apps/io/TempResourceURIGenerator.java b/src/java/org/apache/fop/apps/io/TempResourceURIGenerator.java new file mode 100644 index 000000000..039f4cab4 --- /dev/null +++ b/src/java/org/apache/fop/apps/io/TempResourceURIGenerator.java @@ -0,0 +1,57 @@ +/* + * 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. + */ + +package org.apache.fop.apps.io; + +import java.net.URI; +import java.util.concurrent.atomic.AtomicLong; + +/** + * Creates a URI for any temporary resource used within FOP. + */ +public final class TempResourceURIGenerator { + + private static final String TMP_SCHEMA = "tmp"; + + private final String tempURIPrefix; + + private final AtomicLong counter; + + /** + * @param uriPrefix a prefix used to name the unique URI + */ + public TempResourceURIGenerator(String uriPrefix) { + counter = new AtomicLong(); + tempURIPrefix = URI.create(TMP_SCHEMA + ":///" + uriPrefix).toASCIIString(); + } + + /** + * Generate a unique URI for a temporary resource + * @return the URI + */ + public URI generate() { + return URI.create(tempURIPrefix + getUniqueId()); + } + + private String getUniqueId() { + return Long.toHexString(counter.getAndIncrement()); + } + + public static boolean isTempUri(URI uri) { + return TMP_SCHEMA.equals(uri.getScheme()); + } +} diff --git a/src/java/org/apache/fop/apps/io/URIResolverWrapper.java b/src/java/org/apache/fop/apps/io/URIResolverWrapper.java index 7ff912089..2d2420d49 100644 --- a/src/java/org/apache/fop/apps/io/URIResolverWrapper.java +++ b/src/java/org/apache/fop/apps/io/URIResolverWrapper.java @@ -25,10 +25,16 @@ 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; public class URIResolverWrapper { private final URI baseUri; private final ResourceResolver uriResolver; + private final DataURIResolver dataSchemeResolver = new DataURIResolver(); public URIResolverWrapper(URI baseUri, ResourceResolver uriResolver) { this.baseUri = baseUri; @@ -40,10 +46,16 @@ public class URIResolverWrapper { } public InputStream resolveIn(String stringUri) throws IOException, URISyntaxException { + if (stringUri.startsWith("data:")) { + return resolveDataURI(stringUri); + } return resolveIn(cleanURI(stringUri)); } public InputStream resolveIn(URI uri) throws IOException { + if (uri.getScheme() != null && uri.getScheme().startsWith("data")) { + return resolveDataURI(uri.toASCIIString()); + } return uriResolver.getResource(resolveFromBase(uri)); } @@ -55,12 +67,12 @@ public class URIResolverWrapper { return baseUri.resolve(uri); } - public static URI cleanURI(String base) throws URISyntaxException { + public static URI cleanURI(String uriStr) throws URISyntaxException { // replace back slash with forward slash to ensure windows file:/// URLS are supported - if (base == null) { + if (uriStr == null) { return null; } - String fixedUri = base.replace('\\', '/'); + String fixedUri = uriStr.replace('\\', '/'); fixedUri = fixedUri.replace(" ", "%20"); URI baseURI = new URI(fixedUri); return baseURI; @@ -71,4 +83,12 @@ public class URIResolverWrapper { 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); + } + } } diff --git a/src/java/org/apache/fop/area/CachedRenderPagesModel.java b/src/java/org/apache/fop/area/CachedRenderPagesModel.java index 288884a55..4844ddcbd 100644 --- a/src/java/org/apache/fop/area/CachedRenderPagesModel.java +++ b/src/java/org/apache/fop/area/CachedRenderPagesModel.java @@ -21,13 +21,12 @@ package org.apache.fop.area; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; +import java.net.URI; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -36,9 +35,9 @@ import org.xml.sax.SAXException; import org.apache.commons.io.IOUtils; -import org.apache.fop.ResourceEventProducer; import org.apache.fop.apps.FOPException; import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.apps.io.TempResourceURIGenerator; import org.apache.fop.fonts.FontInfo; /** @@ -49,10 +48,12 @@ import org.apache.fop.fonts.FontInfo; */ public class CachedRenderPagesModel extends RenderPagesModel { - private Map pageMap = new HashMap(); + private Map pageMap = new HashMap(); /** Base directory to save temporary file in, typically points to the user's temp dir. */ - protected File baseDir; + private final URI tempBaseURI; + private static final TempResourceURIGenerator TEMP_URI_GENERATOR + = new TempResourceURIGenerator("cached-pages"); /** * Main Constructor @@ -65,8 +66,7 @@ public class CachedRenderPagesModel extends RenderPagesModel { public CachedRenderPagesModel (FOUserAgent userAgent, String outputFormat, FontInfo fontInfo, OutputStream stream) throws FOPException { super(userAgent, outputFormat, fontInfo, stream); - //TODO: Avoid System.getProperty()? - this.baseDir = new File(System.getProperty("java.io.tmpdir")); + tempBaseURI = TEMP_URI_GENERATOR.generate(); } /** {@inheritDoc} */ @@ -78,27 +78,19 @@ public class CachedRenderPagesModel extends RenderPagesModel { if (pageViewport != newpage) { try { // load page from cache - String name = pageMap.get(pageViewport); - File tempFile = new File(baseDir, name); - log.debug("Loading page from: " + tempFile); - ObjectInputStream in = new ObjectInputStream( - new BufferedInputStream( - new FileInputStream(tempFile))); + URI tempURI = pageMap.get(pageViewport); + log.debug("Loading page from: " + tempURI); + InputStream inStream = renderer.getUserAgent().getNewURIResolver().resolveIn(tempURI); + ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(inStream)); try { pageViewport.loadPage(in); } finally { + IOUtils.closeQuietly(inStream); IOUtils.closeQuietly(in); } - if (!tempFile.delete()) { - ResourceEventProducer eventProducer - = ResourceEventProducer.Provider.get( - renderer.getUserAgent().getEventBroadcaster()); - eventProducer.cannotDeleteTempFile(this, tempFile); - } pageMap.remove(pageViewport); } catch (Exception e) { - AreaEventProducer eventProducer - = AreaEventProducer.Provider.get( + AreaEventProducer eventProducer = AreaEventProducer.Provider.get( renderer.getUserAgent().getEventBroadcaster()); eventProducer.pageLoadError(this, pageViewport.getPageNumberString(), e); } @@ -131,18 +123,17 @@ public class CachedRenderPagesModel extends RenderPagesModel { // save page to cache ObjectOutputStream tempstream; String fname = "fop-page-" + page.getPageIndex() + ".ser"; - File tempFile = new File(baseDir, fname); - tempFile.deleteOnExit(); - tempstream = new ObjectOutputStream(new BufferedOutputStream( - new FileOutputStream(tempFile))); + URI tempURI = tempBaseURI.resolve(fname); + OutputStream outStream = renderer.getUserAgent().getNewURIResolver().resolveOut(tempURI); + tempstream = new ObjectOutputStream(new BufferedOutputStream(outStream)); try { page.savePage(tempstream); } finally { IOUtils.closeQuietly(tempstream); } - pageMap.put(page, fname); + pageMap.put(page, tempURI); if (log.isDebugEnabled()) { - log.debug("Page saved to temporary file: " + tempFile); + log.debug("Page saved to temporary file: " + tempURI); } } catch (IOException ioe) { AreaEventProducer eventProducer diff --git a/src/java/org/apache/fop/fo/extensions/svg/SVGElement.java b/src/java/org/apache/fop/fo/extensions/svg/SVGElement.java index 7b771776d..eb1e2bd83 100644 --- a/src/java/org/apache/fop/fo/extensions/svg/SVGElement.java +++ b/src/java/org/apache/fop/fo/extensions/svg/SVGElement.java @@ -23,7 +23,6 @@ package org.apache.fop.fo.extensions.svg; import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; -import java.io.File; import java.net.URI; import org.w3c.dom.Element; @@ -73,7 +72,6 @@ public class SVGElement extends SVGObj { try { URI baseUri = getUserAgent().getNewURIResolver().getBaseURI(); - baseUri = baseUri == null ? new File("").toURI() : baseUri; if (baseUri != null) { SVGOMDocument svgdoc = (SVGOMDocument)doc; svgdoc.setURLObject(baseUri.toURL()); diff --git a/src/java/org/apache/fop/hyphenation/HyphenationTreeResolver.java b/src/java/org/apache/fop/hyphenation/HyphenationTreeResolver.java deleted file mode 100644 index c9d9ed179..000000000 --- a/src/java/org/apache/fop/hyphenation/HyphenationTreeResolver.java +++ /dev/null @@ -1,38 +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.hyphenation; - -import javax.xml.transform.Source; - -/** - *

This interface is used to resolve relative URIs pointing to hyphenation tree files.

- */ -public interface HyphenationTreeResolver { - - /** - * Called to resolve an URI to a Source instance. The base URI needed by the URIResolver's - * resolve() method is defined to be implicitely available in this case. If the URI cannot - * be resolved, null is returned. - * @param href An href attribute, which may be relative or absolute. - * @return A Source object, or null if the href could not resolved. - */ - Source resolve(String href); - -} diff --git a/src/java/org/apache/fop/hyphenation/Hyphenator.java b/src/java/org/apache/fop/hyphenation/Hyphenator.java index 062b0e922..6959e07a1 100644 --- a/src/java/org/apache/fop/hyphenation/Hyphenator.java +++ b/src/java/org/apache/fop/hyphenation/Hyphenator.java @@ -20,21 +20,20 @@ package org.apache.fop.hyphenation; import java.io.BufferedInputStream; -import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; +import java.net.URISyntaxException; import java.util.Map; -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; - import org.xml.sax.InputSource; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.fop.apps.io.URIResolverWrapper; + /** *

This class is the main entry point to the hyphenation package. * You can use only the static methods or create an instance.

@@ -75,7 +74,7 @@ public final class Hyphenator { * @return the hyphenation tree */ public static HyphenationTree getHyphenationTree(String lang, - String country, HyphenationTreeResolver resolver, Map hyphPatNames) { + String country, URIResolverWrapper resolver, Map hyphPatNames) { String llccKey = HyphenationTreeCache.constructLlccKey(lang, country); HyphenationTreeCache cache = getHyphenationTreeCache(); @@ -130,8 +129,8 @@ public final class Hyphenator { * @param hyphPatNames the map with user-configured hyphenation pattern file names * @return the hyphenation tree */ - private static HyphenationTree getHyphenationTree2(String lang, - String country, HyphenationTreeResolver resolver, Map hyphPatNames) { + public static HyphenationTree getHyphenationTree2(String lang, + String country, URIResolverWrapper resolver, Map hyphPatNames) { String llccKey = HyphenationTreeCache.constructLlccKey(lang, country); HyphenationTreeCache cache = getHyphenationTreeCache(); @@ -226,25 +225,6 @@ public final class Hyphenator { return hTree; } - /** - * Load tree from serialized file or xml file - * using configuration settings - * @param key language key for the requested hyphenation file - * @param hyphenDir base directory to find hyphenation files in - * @return the requested HypenationTree or null if it is not available - */ - public static HyphenationTree getUserHyphenationTree(String key, - String hyphenDir) { - final File baseDir = new File(hyphenDir); - HyphenationTreeResolver resolver = new HyphenationTreeResolver() { - public Source resolve(String href) { - File f = new File(baseDir, href); - return new StreamSource(f); - } - }; - return getUserHyphenationTree(key, resolver); - } - /** * Load tree from serialized file or xml file * using configuration settings @@ -253,7 +233,7 @@ public final class Hyphenator { * @return the requested HypenationTree or null if it is not available */ public static HyphenationTree getUserHyphenationTree(String key, - HyphenationTreeResolver resolver) { + URIResolverWrapper resolver) { HyphenationTree hTree = null; // I use here the following convention. The file name specified in // the configuration is taken as the base name. First we try @@ -262,88 +242,58 @@ public final class Hyphenator { // first try serialized object String name = key + ".hyp"; - Source source = resolver.resolve(name); - if (source != null) { + try { + InputStream in = getHyphenationTreeStream(name, resolver); try { - InputStream in = null; - if (source instanceof StreamSource) { - in = ((StreamSource) source).getInputStream(); - } - if (in == null) { - if (source.getSystemId() != null) { - in = new java.net.URL(source.getSystemId()).openStream(); - } else { - throw new UnsupportedOperationException - ("Cannot load hyphenation pattern file" - + " with the supplied Source object: " + source); - } - } - in = new BufferedInputStream(in); - try { - hTree = readHyphenationTree(in); - } finally { - IOUtils.closeQuietly(in); - } - return hTree; - } catch (IOException ioe) { - if (log.isDebugEnabled()) { - log.debug("I/O problem while trying to load " + name, ioe); - } + hTree = readHyphenationTree(in); + } finally { + IOUtils.closeQuietly(in); + } + return hTree; + } catch (IOException ioe) { + if (log.isDebugEnabled()) { + log.debug("I/O problem while trying to load " + name, ioe); } } // try the raw XML file name = key + ".xml"; - source = resolver.resolve(name); - if (source != null) { - hTree = new HyphenationTree(); + hTree = new HyphenationTree(); + try { + InputStream in = getHyphenationTreeStream(name, resolver); try { - InputStream in = null; - if (source instanceof StreamSource) { - in = ((StreamSource) source).getInputStream(); - } - if (in == null) { - if (source.getSystemId() != null) { - in = new java.net.URL(source.getSystemId()).openStream(); - } else { - throw new UnsupportedOperationException( - "Cannot load hyphenation pattern file" - + " with the supplied Source object: " + source); - } - } - if (!(in instanceof BufferedInputStream)) { - in = new BufferedInputStream(in); - } - try { - InputSource src = new InputSource(in); - src.setSystemId(source.getSystemId()); - hTree.loadPatterns(src); - } finally { - IOUtils.closeQuietly(in); - } - if (statisticsDump) { - System.out.println("Stats: "); - hTree.printStats(); - } - return hTree; - } catch (HyphenationException ex) { - log.error("Can't load user patterns from XML file " + source.getSystemId() - + ": " + ex.getMessage()); - return null; - } catch (IOException ioe) { - if (log.isDebugEnabled()) { - log.debug("I/O problem while trying to load " + name, ioe); - } - return null; + InputSource src = new InputSource(in); + src.setSystemId(name); + hTree.loadPatterns(src); + } finally { + IOUtils.closeQuietly(in); + } + if (statisticsDump) { + System.out.println("Stats: "); + hTree.printStats(); } - } else { + return hTree; + } catch (HyphenationException ex) { + log.error("Can't load user patterns from XML file " + name + ": " + ex.getMessage()); + return null; + } catch (IOException ioe) { if (log.isDebugEnabled()) { - log.debug("Could not load user hyphenation file for '" + key + "'."); + log.debug("I/O problem while trying to load " + name, ioe); } return null; } } + private static InputStream getHyphenationTreeStream(String name, URIResolverWrapper resolver) + throws IOException { + try { + return new BufferedInputStream(resolver.resolveIn(name)); + } catch (URISyntaxException use) { + log.debug("An exception was thrown while attempting to load " + name, use); + } + return null; + } + /** * Hyphenates a word. * @param lang the language @@ -356,15 +306,11 @@ public final class Hyphenator { * @return the hyphenation result */ public static Hyphenation hyphenate(String lang, String country, - HyphenationTreeResolver resolver, - Map hyphPatNames, - String word, - int leftMin, int rightMin) { + URIResolverWrapper resolver, Map hyphPatNames, String word, int leftMin, int rightMin) { HyphenationTree hTree = getHyphenationTree(lang, country, resolver, hyphPatNames); if (hTree == null) { return null; } return hTree.hyphenate(word, leftMin, rightMin); } - } diff --git a/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java index 0f959022c..2ad0eb823 100644 --- a/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java +++ b/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java @@ -1396,10 +1396,9 @@ public class LineLayoutManager extends InlineStackingLayoutManager // TextLM which generate the hyphenation buffer, // since these properties inherit and could be specified // on an inline or wrapper below the block level. - Hyphenation hyph - = Hyphenator.hyphenate(hyphenationProperties.language.getString(), + Hyphenation hyph = Hyphenator.hyphenate(hyphenationProperties.language.getString(), hyphenationProperties.country.getString(), - getFObj().getUserAgent().getHyphenationTreeResolver(), + getFObj().getUserAgent().getNewURIResolver(), getFObj().getUserAgent().getHyphPatNames(), sbChars.toString(), hyphenationProperties.hyphenationRemainCharacterCount.getValue(), diff --git a/src/java/org/apache/fop/pdf/PDFDocument.java b/src/java/org/apache/fop/pdf/PDFDocument.java index 9850c605e..dad404d11 100644 --- a/src/java/org/apache/fop/pdf/PDFDocument.java +++ b/src/java/org/apache/fop/pdf/PDFDocument.java @@ -21,7 +21,6 @@ package org.apache.fop.pdf; // Java import java.io.IOException; -import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; @@ -718,24 +717,6 @@ public class PDFDocument { return this.fontMap; } - /** - * Resolve a URI. - * - * @param uri the uri to resolve - * @throws java.io.FileNotFoundException if the URI could not be resolved - * @return the InputStream from the URI. - */ - protected InputStream resolveURI(String uri) - throws java.io.FileNotFoundException { - try { - /* TODO: Temporary hack to compile, improve later */ - return new java.net.URL(uri).openStream(); - } catch (Exception e) { - throw new java.io.FileNotFoundException( - "URI could not be resolved (" + e.getMessage() + "): " + uri); - } - } - /** * Get an image from the image map. * diff --git a/src/java/org/apache/fop/pdf/StreamCacheFactory.java b/src/java/org/apache/fop/pdf/StreamCacheFactory.java index 4e2d12eb2..aa4d665da 100644 --- a/src/java/org/apache/fop/pdf/StreamCacheFactory.java +++ b/src/java/org/apache/fop/pdf/StreamCacheFactory.java @@ -24,56 +24,24 @@ import java.io.IOException; /** * This class is serves as a factory from */ -public class StreamCacheFactory { +public final class StreamCacheFactory { - private static boolean defaultCacheToFile = false; - private static StreamCacheFactory fileInstance = null; - private static StreamCacheFactory memoryInstance = null; - - private boolean cacheToFile = false; + private static StreamCacheFactory memoryInstance = new StreamCacheFactory(); /** * Returns an instance of a StreamCacheFactory with the requested features. * @param cacheToFile True if file shall be cached using a temporary file * @return StreamCacheFactory the requested factory */ - public static StreamCacheFactory getInstance(boolean cacheToFile) { - if (cacheToFile) { - if (fileInstance == null) { - fileInstance = new StreamCacheFactory(true); - } - return fileInstance; - } else { - if (memoryInstance == null) { - memoryInstance = new StreamCacheFactory(false); - } - return memoryInstance; - } - } - - /** - * Returns an instance of a StreamCacheFactory depending on the default - * setting for cacheToFile. - * @return StreamCacheFactory the requested factory - */ public static StreamCacheFactory getInstance() { - return getInstance(defaultCacheToFile); - } - - /** - * Sets the global default for cacheToFile - * @param cacheToFile True if stream caches should be held in files. - */ - public static void setDefaultCacheToFile(boolean cacheToFile) { - defaultCacheToFile = cacheToFile; + return memoryInstance; } /** * Creates a new StreamCacheFactory. * @param cacheToFile True if file shall be cached using a temporary file */ - public StreamCacheFactory(boolean cacheToFile) { - this.cacheToFile = cacheToFile; + private StreamCacheFactory() { } /** @@ -83,11 +51,7 @@ public class StreamCacheFactory { * @return a new StreamCache for caching streams */ public StreamCache createStreamCache() throws IOException { - if (this.cacheToFile) { - return new TempFileStreamCache(); - } else { - return new InMemoryStreamCache(); - } + return new InMemoryStreamCache(); } /** @@ -98,20 +62,6 @@ public class StreamCacheFactory { * @return a new StreamCache for caching streams */ public StreamCache createStreamCache(int hintSize) throws IOException { - if (this.cacheToFile) { - return new TempFileStreamCache(); - } else { - return new InMemoryStreamCache(hintSize); - } - } - - /** - * Get the value of the global cacheToFile flag. - * @return the current cache to file flag - */ - public boolean getCacheToFile() { - return this.cacheToFile; + return new InMemoryStreamCache(hintSize); } - - } diff --git a/src/java/org/apache/fop/render/intermediate/AbstractBinaryWritingIFDocumentHandler.java b/src/java/org/apache/fop/render/intermediate/AbstractBinaryWritingIFDocumentHandler.java index 0a5324384..24a91d9e3 100644 --- a/src/java/org/apache/fop/render/intermediate/AbstractBinaryWritingIFDocumentHandler.java +++ b/src/java/org/apache/fop/render/intermediate/AbstractBinaryWritingIFDocumentHandler.java @@ -19,15 +19,14 @@ package org.apache.fop.render.intermediate; -import java.io.File; +import java.io.BufferedOutputStream; import java.io.IOException; import java.io.OutputStream; -import java.net.URL; +import java.net.URI; import javax.xml.transform.Result; import javax.xml.transform.stream.StreamResult; -import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.fop.fonts.FontCollection; @@ -56,7 +55,7 @@ public abstract class AbstractBinaryWritingIFDocumentHandler extends AbstractIFD /** {@inheritDoc} */ public void setResult(Result result) throws IFException { if (result instanceof StreamResult) { - StreamResult streamResult = (StreamResult)result; + StreamResult streamResult = (StreamResult) result; OutputStream out = streamResult.getOutputStream(); if (out == null) { if (streamResult.getWriter() != null) { @@ -64,22 +63,13 @@ public abstract class AbstractBinaryWritingIFDocumentHandler extends AbstractIFD "FOP cannot use a Writer. Please supply an OutputStream!"); } try { - URL url = new URL(streamResult.getSystemId()); - File f = FileUtils.toFile(url); - if (f != null) { - out = new java.io.FileOutputStream(f); - } else { - out = url.openConnection().getOutputStream(); - } + URI resultURI = URI.create(streamResult.getSystemId()); + out = new BufferedOutputStream(getUserAgent().getNewURIResolver().resolveOut(resultURI)); } catch (IOException ioe) { throw new IFException("I/O error while opening output stream" , ioe); } - out = new java.io.BufferedOutputStream(out); this.ownOutputStream = true; } - if (out == null) { - throw new IllegalArgumentException("Need a StreamResult with an OutputStream"); - } this.outputStream = out; } else { throw new UnsupportedOperationException( diff --git a/src/java/org/apache/fop/render/pcl/PCLDocumentHandler.java b/src/java/org/apache/fop/render/pcl/PCLDocumentHandler.java index 0ba85146c..d2e06d76f 100644 --- a/src/java/org/apache/fop/render/pcl/PCLDocumentHandler.java +++ b/src/java/org/apache/fop/render/pcl/PCLDocumentHandler.java @@ -274,7 +274,6 @@ public class PCLDocumentHandler extends AbstractBinaryWritingIFDocumentHandler public void endPageContent() throws IFException { if (this.currentImage != null) { try { - //ImageWriterUtil.saveAsPNG(this.currentImage, new java.io.File("D:/page.png")); Rectangle printArea = this.currentPageDefinition.getLogicalPageRect(); gen.setCursorPos(0, 0); gen.paintBitmap(this.currentImage, printArea.getSize(), true); diff --git a/src/java/org/apache/fop/render/pcl/PCLGenerator.java b/src/java/org/apache/fop/render/pcl/PCLGenerator.java index 29fe77323..0db295a5a 100644 --- a/src/java/org/apache/fop/render/pcl/PCLGenerator.java +++ b/src/java/org/apache/fop/render/pcl/PCLGenerator.java @@ -677,13 +677,6 @@ public class PCLGenerator { } finally { g2d.dispose(); } - /* - try { - BatchDiffer.saveAsPNG(alpha, new java.io.File("D:/out-alpha.png")); - BatchDiffer.saveAsPNG(mask, new java.io.File("D:/out-mask.png")); - } catch (IOException e) { - e.printStackTrace(); - }*/ return mask; } else { return null; @@ -715,7 +708,6 @@ public class PCLGenerator { (int)Math.ceil(UnitConv.mpt2px(targetDim.height, effResolution))); } boolean scaled = !orgDim.equals(effDim); - //ImageWriterUtil.saveAsPNG(img, new java.io.File("D:/text-0-org.png")); boolean monochrome = isMonochromeImage(img); if (!monochrome) { diff --git a/src/java/org/apache/fop/render/ps/PSDocumentHandler.java b/src/java/org/apache/fop/render/ps/PSDocumentHandler.java index 76e9b66e5..a126fc176 100644 --- a/src/java/org/apache/fop/render/ps/PSDocumentHandler.java +++ b/src/java/org/apache/fop/render/ps/PSDocumentHandler.java @@ -22,10 +22,12 @@ package org.apache.fop.render.ps; import java.awt.Dimension; import java.awt.geom.Dimension2D; import java.awt.geom.Rectangle2D; -import java.io.File; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.net.URI; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -51,6 +53,7 @@ import org.apache.xmlgraphics.ps.dsc.events.DSCCommentBoundingBox; import org.apache.xmlgraphics.ps.dsc.events.DSCCommentHiResBoundingBox; import org.apache.fop.apps.MimeConstants; +import org.apache.fop.apps.io.TempResourceURIGenerator; import org.apache.fop.render.intermediate.AbstractBinaryWritingIFDocumentHandler; import org.apache.fop.render.intermediate.IFContext; import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator; @@ -83,7 +86,9 @@ public class PSDocumentHandler extends AbstractBinaryWritingIFDocumentHandler { protected PSGenerator gen; /** the temporary file in case of two-pass processing */ - private File tempFile; + private URI tempURI; + private static final TempResourceURIGenerator TEMP_URI_GENERATOR + = new TempResourceURIGenerator("ps-optimize"); private int currentPageNumber = 0; private PageDefinition currentPageDefinition; @@ -141,11 +146,10 @@ public class PSDocumentHandler extends AbstractBinaryWritingIFDocumentHandler { super.startDocument(); this.fontResources = new FontResourceCache(getFontInfo()); try { - OutputStream out; + final OutputStream out; if (psUtil.isOptimizeResources()) { - this.tempFile = File.createTempFile("fop", null); - out = new java.io.FileOutputStream(this.tempFile); - out = new java.io.BufferedOutputStream(out); + tempURI = TEMP_URI_GENERATOR.generate(); + out = new BufferedOutputStream(getUserAgent().getNewURIResolver().resolveOut(tempURI)); } else { out = this.outputStream; } @@ -252,8 +256,7 @@ public class PSDocumentHandler extends AbstractBinaryWritingIFDocumentHandler { log.debug("Processing PostScript resources..."); long startTime = System.currentTimeMillis(); ResourceTracker resTracker = gen.getResourceTracker(); - InputStream in = new java.io.FileInputStream(this.tempFile); - in = new java.io.BufferedInputStream(in); + InputStream in = new BufferedInputStream(getUserAgent().getNewURIResolver().resolveIn(tempURI)); try { try { ResourceHandler handler = new ResourceHandler(getUserAgent(), this.fontInfo, @@ -266,10 +269,6 @@ public class PSDocumentHandler extends AbstractBinaryWritingIFDocumentHandler { } } finally { IOUtils.closeQuietly(in); - if (!this.tempFile.delete()) { - this.tempFile.deleteOnExit(); - log.warn("Could not delete temporary file: " + this.tempFile); - } } if (log.isDebugEnabled()) { long duration = System.currentTimeMillis() - startTime; diff --git a/src/java/org/apache/fop/util/ColorSpaceCache.java b/src/java/org/apache/fop/util/ColorSpaceCache.java index e7c8f04b5..15db719e9 100644 --- a/src/java/org/apache/fop/util/ColorSpaceCache.java +++ b/src/java/org/apache/fop/util/ColorSpaceCache.java @@ -21,21 +21,16 @@ package org.apache.fop.util; import java.awt.color.ColorSpace; import java.awt.color.ICC_Profile; -import java.net.URI; -import java.net.URISyntaxException; +import java.io.InputStream; import java.util.Collections; +import java.util.HashMap; import java.util.Map; -import javax.xml.transform.Source; -import javax.xml.transform.URIResolver; -import javax.xml.transform.stream.StreamSource; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.xmlgraphics.java2d.color.ICCColorSpaceWithIntent; import org.apache.xmlgraphics.java2d.color.RenderingIntent; -import org.apache.xmlgraphics.java2d.color.profile.ColorProfileUtil; import org.apache.fop.apps.io.URIResolverWrapper; @@ -46,15 +41,14 @@ public class ColorSpaceCache { /** logger instance */ private static Log log = LogFactory.getLog(ColorSpaceCache.class); - private URIResolver resolver; - private Map colorSpaceMap - = Collections.synchronizedMap(new java.util.HashMap()); + private URIResolverWrapper resolver; + private Map colorSpaceMap = Collections.synchronizedMap(new HashMap()); /** * Default constructor * @param resolver uri resolver */ - public ColorSpaceCache(URIResolver resolver) { + public ColorSpaceCache(URIResolverWrapper resolver) { this.resolver = resolver; } @@ -73,28 +67,21 @@ public class ColorSpaceCache { * @param renderingIntent overriding rendering intent * @return ICC ColorSpace object or null if ColorSpace could not be created */ - public ColorSpace get(String profileName, String base, String iccProfileSrc, + public ColorSpace get(String profileName, String iccProfileSrc, RenderingIntent renderingIntent) { - String key = profileName + ":" + base + iccProfileSrc; + String key = profileName + ":" + iccProfileSrc; // TODO: This stuff needs some TLC, fix it!! - try { - URI uri = URIResolverWrapper.getBaseURI(base); - key = uri.resolve(URIResolverWrapper.cleanURI(iccProfileSrc)).toASCIIString(); - } catch (URISyntaxException e) { - // TODO: handle this - } ColorSpace colorSpace = null; if (!colorSpaceMap.containsKey(key)) { try { ICC_Profile iccProfile = null; // First attempt to use the FOP URI resolver to locate the ICC // profile - Source src = resolver.resolve(iccProfileSrc, base); - if (src != null && src instanceof StreamSource) { + InputStream stream = resolver.resolveIn(iccProfileSrc); + if (stream != null) { // FOP URI resolver found ICC profile - create ICC profile // from the Source - iccProfile = ColorProfileUtil.getICC_Profile(((StreamSource) src) - .getInputStream()); + iccProfile = ICC_Profile.getInstance(stream); } else { // TODO - Would it make sense to fall back on VM ICC // resolution diff --git a/src/java/org/apache/fop/util/ColorUtil.java b/src/java/org/apache/fop/util/ColorUtil.java index c03130f2d..b18192657 100644 --- a/src/java/org/apache/fop/util/ColorUtil.java +++ b/src/java/org/apache/fop/util/ColorUtil.java @@ -405,9 +405,7 @@ public final class ColorUtil { RenderingIntent renderingIntent = RenderingIntent.AUTO; //TODO connect to fo:color-profile/@rendering-intent colorSpace = foUserAgent.getColorSpaceCache().get( - iccProfileName, - foUserAgent.getNewURIResolver().getBaseURI().toASCIIString(), - iccProfileSrc, renderingIntent); + iccProfileName, iccProfileSrc, renderingIntent); } if (colorSpace != null) { // ColorSpace is available @@ -489,9 +487,7 @@ public final class ColorUtil { RenderingIntent renderingIntent = RenderingIntent.AUTO; //TODO connect to fo:color-profile/@rendering-intent colorSpace = (ICC_ColorSpace)foUserAgent.getColorSpaceCache().get( - iccProfileName, - foUserAgent.getNewURIResolver().getBaseURI().toASCIIString(), - iccProfileSrc, renderingIntent); + iccProfileName, iccProfileSrc, renderingIntent); } if (colorSpace != null) { ICC_Profile profile = colorSpace.getProfile(); diff --git a/test/java/org/apache/fop/apps/FopConfParserTestCase.java b/test/java/org/apache/fop/apps/FopConfParserTestCase.java index ca9dd1440..2fe939f76 100644 --- a/test/java/org/apache/fop/apps/FopConfParserTestCase.java +++ b/test/java/org/apache/fop/apps/FopConfParserTestCase.java @@ -86,14 +86,6 @@ public class FopConfParserTestCase { assertFalse(buildFactory().isAccessibilityEnabled()); } - @Test - public void testHyphenationBaseURI() { - String hyphBaseURI = "./test/base/uri/"; - builder.setHyphenationBaseURI(hyphBaseURI); - assertEquals(baseURI.resolve(hyphBaseURI), - URI.create(buildFactory().getHyphenBaseURI())); - } - @Test public void testSourceResolution() { float srcRes = 123.456f; diff --git a/test/java/org/apache/fop/config/FOURIResolverTestCase.java b/test/java/org/apache/fop/config/FOURIResolverTestCase.java deleted file mode 100644 index 0358638b3..000000000 --- a/test/java/org/apache/fop/config/FOURIResolverTestCase.java +++ /dev/null @@ -1,59 +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.config; - -import static org.junit.Assert.fail; - -import java.net.MalformedURLException; - -import org.apache.fop.apps.io.FOURIResolver; -import org.junit.Test; - -/** - * This tests some aspects of the {@link FOURIResolver} class. - */ -public class FOURIResolverTestCase { - - /** - * Checks the {@link FOURIResolver#checkBaseURL(String)} method. - * @throws Exception if an error occurs - */ - @Test - public void testCheckBaseURI() throws Exception { - FOURIResolver resolver = new FOURIResolver(true); - System.out.println(resolver.checkBaseURL("./test/config")); - System.out.println(resolver.checkBaseURL("file:test/config")); - System.out.println(resolver.checkBaseURL("fantasy:myconfig")); - System.out.println(resolver.checkBaseURL("file:test\\config\\")); - try { - resolver.checkBaseURL("./doesnotexist"); - fail("Expected an exception for a inexistent base directory"); - } catch (MalformedURLException mfue) { - //expected - } - try { - resolver.checkBaseURL("file:doesnotexist"); - fail("Expected an exception for a inexistent base URI"); - } catch (MalformedURLException mfue) { - //expected - } - } - -} diff --git a/test/java/org/apache/fop/config/UserConfigTestSuite.java b/test/java/org/apache/fop/config/UserConfigTestSuite.java index 91329f6ec..9cb5c4270 100644 --- a/test/java/org/apache/fop/config/UserConfigTestSuite.java +++ b/test/java/org/apache/fop/config/UserConfigTestSuite.java @@ -34,8 +34,7 @@ import org.junit.runners.Suite.SuiteClasses; FontMetricsUrlMalformedTestCase.class, FontsDirectoryRecursiveTestCase.class, FontsAutoDetectTestCase.class, - FontsSubstitutionTestCase.class, - FOURIResolverTestCase.class + FontsSubstitutionTestCase.class }) public class UserConfigTestSuite { } diff --git a/test/java/org/apache/fop/fotreetest/FOTreeTestCase.java b/test/java/org/apache/fop/fotreetest/FOTreeTestCase.java index c45b4d1f4..7e03b2e8b 100644 --- a/test/java/org/apache/fop/fotreetest/FOTreeTestCase.java +++ b/test/java/org/apache/fop/fotreetest/FOTreeTestCase.java @@ -28,7 +28,6 @@ import java.util.Set; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; -import javax.xml.transform.URIResolver; import org.junit.BeforeClass; import org.junit.Test; @@ -52,7 +51,6 @@ import org.apache.fop.apps.FopFactoryConfig; import org.apache.fop.apps.io.ResourceResolver; import org.apache.fop.fonts.FontManager; import org.apache.fop.fotreetest.ext.TestElementMapping; -import org.apache.fop.hyphenation.HyphenationTreeResolver; import org.apache.fop.layoutengine.LayoutEngineTestUtils; import org.apache.fop.layoutengine.TestFilesConfiguration; import org.apache.fop.layoutmgr.LayoutManagerMaker; @@ -209,22 +207,10 @@ public class FOTreeTestCase { return delegate.getNewURIResolver(); } - public URIResolver getURIResolver() { - return delegate.getURIResolver(); - } - public URI getBaseURI() { return delegate.getBaseURI(); } - public URI getHyphenationBaseURI() { - return delegate.getHyphenationBaseURI(); - } - - public HyphenationTreeResolver getHyphenationTreeResolver() { - return delegate.getHyphenationTreeResolver(); - } - public boolean validateStrictly() { return delegate.validateStrictly(); } diff --git a/test/java/org/apache/fop/util/ColorUtilTestCase.java b/test/java/org/apache/fop/util/ColorUtilTestCase.java index 6271b18de..6e65004a3 100644 --- a/test/java/org/apache/fop/util/ColorUtilTestCase.java +++ b/test/java/org/apache/fop/util/ColorUtilTestCase.java @@ -44,7 +44,6 @@ import static org.junit.Assert.assertTrue; */ public class ColorUtilTestCase { private FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI()); - private final String thisDirectory = "file:" + new File("./").getAbsolutePath(); /** * Test serialization to String. @@ -131,7 +130,7 @@ public class ColorUtilTestCase { FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI()); URI sRGBLoc = new URI("src/java/org/apache/fop/pdf/sRGB%20Color%20Space%20Profile.icm"); ColorSpace cs = fopFactory.getColorSpaceCache().get( - "sRGBAlt", thisDirectory, sRGBLoc.toASCIIString(), RenderingIntent.AUTO); + "sRGBAlt", sRGBLoc.toASCIIString(), RenderingIntent.AUTO); assertNotNull("Color profile not found", cs); FOUserAgent ua = fopFactory.newFOUserAgent(); @@ -300,7 +299,7 @@ public class ColorUtilTestCase { FopFactory fopFactory = FopFactory.newInstance(new File("./").toURI()); URI ncpLoc = new URI("test/resources/color/ncp-example.icc"); ColorSpace cs = fopFactory.getColorSpaceCache().get( - "NCP", thisDirectory, ncpLoc.toASCIIString(), RenderingIntent.AUTO); + "NCP", ncpLoc.toASCIIString(), RenderingIntent.AUTO); assertNotNull("Color profile not found", cs); FOUserAgent ua = fopFactory.newFOUserAgent(); diff --git a/test/layoutengine/standard-testcases/external-graphic_rfc2397.xml b/test/layoutengine/standard-testcases/external-graphic_rfc2397.xml index 8508cad8b..0e8b333d8 100644 --- a/test/layoutengine/standard-testcases/external-graphic_rfc2397.xml +++ b/test/layoutengine/standard-testcases/external-graphic_rfc2397.xml @@ -33,7 +33,7 @@ Image referenced by RFC 2397 "data" URL: - EOG + EOG EOF