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  }