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 }