1 package org.daisy.pipeline.file.calabash.impl; 2 3 import java.net.URI; 4 import java.util.Map; 5 6 import javax.xml.transform.stream.StreamSource; 7 8 import net.sf.saxon.s9api.QName; 9 import net.sf.saxon.s9api.SaxonApiException; 10 11 import org.daisy.common.xproc.calabash.XProcStep; 12 import org.daisy.common.xproc.calabash.XProcStepProvider; 13 import org.daisy.common.xproc.XProcMonitor; 14 import static org.daisy.pipeline.file.FileUtils.normalizeURI; 15 import static org.daisy.pipeline.file.FileUtils.cResultDocument; 16 17 import com.xmlcalabash.core.XProcRuntime; 18 import com.xmlcalabash.io.WritablePipe; 19 import com.xmlcalabash.library.DefaultStep; 20 import com.xmlcalabash.runtime.XAtomicStep; 21 22 import org.osgi.service.component.annotations.Component; 23 24 @Component( 25 name = "pxi:normalize-uri", 26 service = { XProcStepProvider.class }, 27 property = { "type:String={http://www.daisy.org/ns/pipeline/xproc/internal}normalize-uri" } 28 ) 29 public class NormalizeURIProvider implements XProcStepProvider { 30 31 @Override 32 public XProcStep newStep(XProcRuntime runtime, XAtomicStep step, XProcMonitor monitor, Map<String,String> properties) { 33 return new NormalizeURI(runtime, step); 34 } 35 36 public static class NormalizeURI extends DefaultStep implements XProcStep { 37 38 private static final QName _URI = new QName("uri"); 39 40 private WritablePipe result = null; 41 42 public NormalizeURI(XProcRuntime runtime, XAtomicStep step) { 43 super(runtime,step); 44 } 45 46 public void setOutput(String port, WritablePipe pipe) { 47 result = pipe; 48 } 49 50 public void reset() { 51 result.resetWriter(); 52 } 53 54 public void run() throws SaxonApiException { 55 super.run(); 56 URI uri = URI.create(getOption(_URI, "")); 57 result.write( 58 runtime.getProcessor().newDocumentBuilder().build( 59 new StreamSource(cResultDocument(normalizeURI(uri).toASCIIString())))); 60 } 61 } 62 }