diff --git a/pom.xml b/pom.xml index 6d8b628..e0b69ef 100644 --- a/pom.xml +++ b/pom.xml @@ -63,9 +63,9 @@ - com.rackspace.papi.components - translation - 2.9.0 + org.springframework + spring-web + 3.1.1.RELEASE diff --git a/src/main/java/com/rackspace/cloud/api/docs/pipeline/AbstractPipeline.java b/src/main/java/com/rackspace/cloud/api/docs/pipeline/AbstractPipeline.java index 9ebb3d4..63cea48 100644 --- a/src/main/java/com/rackspace/cloud/api/docs/pipeline/AbstractPipeline.java +++ b/src/main/java/com/rackspace/cloud/api/docs/pipeline/AbstractPipeline.java @@ -1,14 +1,15 @@ package com.rackspace.cloud.api.docs.pipeline; -import com.rackspace.papi.components.translation.resolvers.InputStreamUriParameterResolver; - +import com.rackspace.cloud.api.docs.pipeline.resolvers.InputStreamUriParameterResolver; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; public abstract class AbstractPipeline implements Pipeline { - private static final org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(AbstractPipeline.class); + private static final Logger LOG = Logger.getLogger(AbstractPipeline.class.getName()); private final InputStreamUriParameterResolver resolver; public AbstractPipeline(InputStreamUriParameterResolver resolver) { @@ -57,7 +58,7 @@ public abstract class AbstractPipeline implements Pipeline { try { ((InputStream)source).close(); } catch (IOException ex) { - LOG.error("Unable to close input stream. Reason: " + ex.getMessage(), ex); + LOG.log(Level.SEVERE, "Unable to close input stream. Reason: " + ex.getMessage(), ex); } resolver.removeStream((InputStream)source); } diff --git a/src/main/java/com/rackspace/cloud/api/docs/pipeline/CalabashPipeline.java b/src/main/java/com/rackspace/cloud/api/docs/pipeline/CalabashPipeline.java index 688c7ac..254f10f 100644 --- a/src/main/java/com/rackspace/cloud/api/docs/pipeline/CalabashPipeline.java +++ b/src/main/java/com/rackspace/cloud/api/docs/pipeline/CalabashPipeline.java @@ -1,6 +1,6 @@ package com.rackspace.cloud.api.docs.pipeline; -import com.rackspace.papi.components.translation.resolvers.InputStreamUriParameterResolver; +import com.rackspace.cloud.api.docs.pipeline.resolvers.InputStreamUriParameterResolver; import com.xmlcalabash.core.XProcRuntime; import com.xmlcalabash.io.ReadablePipe; import com.xmlcalabash.model.RuntimeValue; diff --git a/src/main/java/com/rackspace/cloud/api/docs/pipeline/CalabashPipelineBuilder.java b/src/main/java/com/rackspace/cloud/api/docs/pipeline/CalabashPipelineBuilder.java index 73ee7c7..1542392 100644 --- a/src/main/java/com/rackspace/cloud/api/docs/pipeline/CalabashPipelineBuilder.java +++ b/src/main/java/com/rackspace/cloud/api/docs/pipeline/CalabashPipelineBuilder.java @@ -1,7 +1,7 @@ package com.rackspace.cloud.api.docs.pipeline; -import com.rackspace.papi.components.translation.resolvers.ClassPathUriResolver; -import com.rackspace.papi.components.translation.resolvers.InputStreamUriParameterResolver; +import com.rackspace.cloud.api.docs.pipeline.resolvers.ClassPathUriResolver; +import com.rackspace.cloud.api.docs.pipeline.resolvers.InputStreamUriParameterResolver; import com.xmlcalabash.core.XProcConfiguration; import com.xmlcalabash.core.XProcMessageListener; import com.xmlcalabash.core.XProcRuntime; diff --git a/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/ClassPathUriResolver.java b/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/ClassPathUriResolver.java new file mode 100644 index 0000000..a9efc2e --- /dev/null +++ b/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/ClassPathUriResolver.java @@ -0,0 +1,41 @@ +package com.rackspace.cloud.api.docs.pipeline.resolvers; + +import javax.xml.transform.Source; +import javax.xml.transform.TransformerException; +import javax.xml.transform.URIResolver; +import javax.xml.transform.stream.StreamSource; +import java.io.InputStream; +import java.net.URISyntaxException; + +public class ClassPathUriResolver extends SourceUriResolver { + + public static final String CLASSPATH_PREFIX = "classpath://"; + + public ClassPathUriResolver() { + super(); + } + + public ClassPathUriResolver(URIResolver parent) { + super(parent); + } + + @Override + public Source resolve(String href, String base) throws TransformerException { + + if (href != null && href.toLowerCase().startsWith(CLASSPATH_PREFIX)) { + String path = href.substring(CLASSPATH_PREFIX.length()); + InputStream resource = getClass().getResourceAsStream(path); + if (resource == null) { + return null; + } + + try { + return new StreamSource(resource, getClass().getResource(path).toURI().toString()); + } catch (URISyntaxException ex) { + return new StreamSource(resource); + } + } + + return super.resolve(href, base); + } +} diff --git a/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/InputStreamUriParameterResolver.java b/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/InputStreamUriParameterResolver.java new file mode 100644 index 0000000..a62195b --- /dev/null +++ b/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/InputStreamUriParameterResolver.java @@ -0,0 +1,95 @@ +package com.rackspace.cloud.api.docs.pipeline.resolvers; + +import javax.xml.transform.Source; +import javax.xml.transform.TransformerException; +import javax.xml.transform.URIResolver; +import javax.xml.transform.stream.StreamSource; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.springframework.web.util.UriUtils; + +public class InputStreamUriParameterResolver extends SourceUriResolver { + + private static final String PREFIX = "reference:jio:"; + private final Map streams = new HashMap(); + private final List resolvers = new ArrayList(); + + public InputStreamUriParameterResolver() { + super(); + } + + public InputStreamUriParameterResolver(URIResolver parent) { + super(parent); + } + + public void addResolver(URIResolver resolver) { + resolvers.add(resolver); + } + + public String addStream(InputStream inputStreamReference) { + String key = getHref(inputStreamReference); + streams.put(key, inputStreamReference); + return key; + } + + public String addStream(InputStream inputStreamReference, String name) { + String key = getHref(name); + streams.put(key, inputStreamReference); + return key; + } + + public void removeStream(InputStream inputStreamReference) { + String key = getHref(inputStreamReference); + removeStream(key); + } + + public void removeStream(String name) { + streams.remove(name); + } + + public String getHref(InputStream inputStreamReference) { + try { + return PREFIX + UriUtils.encodePathSegment(inputStreamReference.toString(), "utf-8"); + } catch (UnsupportedEncodingException ex) { + return PREFIX + inputStreamReference.toString(); + } + } + + public String getHref(String name) { + return PREFIX + name; + } + + public void clearStreams() { + streams.clear(); + } + + @Override + public Source resolve(String href, String base) throws TransformerException { + InputStream stream = streams.get(href); + if (stream != null) { + try { + return new StreamSource(stream, new URI(href).toString()); + } catch (URISyntaxException ex) { + return new StreamSource(stream); + } + } + + if (!resolvers.isEmpty()) { + for (URIResolver resolver : resolvers) { + Source source = resolver.resolve(href, base); + if (source != null) { + return source; + } + } + + } + + return super.resolve(href, base); + } +} diff --git a/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/SourceUriResolver.java b/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/SourceUriResolver.java new file mode 100644 index 0000000..2d68f8a --- /dev/null +++ b/src/main/java/com/rackspace/cloud/api/docs/pipeline/resolvers/SourceUriResolver.java @@ -0,0 +1,32 @@ +package com.rackspace.cloud.api.docs.pipeline.resolvers; + +import javax.xml.transform.Source; +import javax.xml.transform.TransformerException; +import javax.xml.transform.URIResolver; + +public class SourceUriResolver implements URIResolver { + + private final URIResolver parent; + + public SourceUriResolver() { + this.parent = null; + } + + public SourceUriResolver(URIResolver parent) { + this.parent = parent; + } + + public URIResolver getParent() { + return parent; + } + + @Override + public Source resolve(String href, String base) throws TransformerException { + + if (parent != null) { + return parent.resolve(href, base); + } + + return null; + } +}