1   package org.daisy.pipeline.tts.calabash.impl;
2   
3   import java.util.Map;
4   
5   import com.xmlcalabash.core.XProcRuntime;
6   import com.xmlcalabash.io.ReadablePipe;
7   import com.xmlcalabash.io.WritablePipe;
8   import com.xmlcalabash.model.RuntimeValue;
9   import com.xmlcalabash.runtime.XAtomicStep;
10  
11  import net.sf.saxon.s9api.QName;
12  import net.sf.saxon.s9api.SaxonApiException;
13  import net.sf.saxon.s9api.XdmNode;
14  
15  import org.daisy.common.xproc.calabash.XProcStep;
16  import org.daisy.common.xproc.calabash.XProcStepProvider;
17  import org.daisy.common.xproc.XProcMonitor;
18  import org.daisy.pipeline.tts.config.AnnotationsConfigExtension;
19  import org.daisy.pipeline.tts.config.ConfigReader;
20  
21  import org.osgi.service.component.annotations.Component;
22  
23  @Component(
24  	name = "get-tts-annotations",
25  	service = { XProcStepProvider.class },
26  	property = { "type:String={http://www.daisy.org/ns/pipeline/xproc}get-tts-annotations" }
27  )
28  public class GetAnnotationsProvider implements XProcStepProvider {
29  
30  	@Override
31  	public XProcStep newStep(final XProcRuntime runtime, XAtomicStep step, XProcMonitor monitor, Map<String,String> properties) {
32  		return new XProcStep() {
33  
34  			private String mContentType;
35  			private ReadablePipe mConfig;
36  			private WritablePipe mResult;
37  
38  			public void setInput(String port, ReadablePipe pipe) {
39  				if ("config".equalsIgnoreCase(port))
40  					mConfig = pipe;
41  				else {
42  					runtime.error(new Throwable("unknown port " + port));
43  				}
44  			}
45  
46  			@Override
47  			public void setOption(QName name, RuntimeValue value) {
48  				String optName = name.getLocalName();
49  				if ("content-type".equalsIgnoreCase(optName)) {
50  					mContentType = value.getString();
51  				} else {
52  					runtime.error(new Throwable("unknown option " + optName));
53  					return;
54  				}
55  			}
56  
57  			public void setOutput(String port, WritablePipe pipe) {
58  				mResult = pipe;
59  			}
60  
61  			public void reset() {
62  				mConfig.resetReader();
63  				mResult.resetWriter();
64  			}
65  
66  			public void run() throws SaxonApiException {
67  
68  				AnnotationsConfigExtension annoExt = new AnnotationsConfigExtension();
69  				new ConfigReader(runtime.getProcessor(), mConfig.read(), properties, annoExt);
70  
71  				for (XdmNode annotations : annoExt.getAnnotations(mContentType)) {
72  					mResult.write(annotations);
73  				}
74  			}
75  
76  			@Override
77  			public void setParameter(QName arg0, RuntimeValue arg1) {
78  			}
79  
80  			@Override
81  			public void setParameter(String arg0, QName arg1, RuntimeValue arg2) {
82  			}
83  		};
84  	}
85  }