1 package org.daisy.pipeline.braille.common.calabash.impl;
2
3 import java.util.Map;
4
5 import com.xmlcalabash.core.XProcRuntime;
6 import com.xmlcalabash.io.WritablePipe;
7 import com.xmlcalabash.library.DefaultStep;
8 import com.xmlcalabash.runtime.XAtomicStep;
9
10 import net.sf.saxon.s9api.QName;
11 import net.sf.saxon.s9api.SaxonApiException;
12
13 import org.daisy.common.xproc.calabash.XProcStep;
14 import org.daisy.common.xproc.calabash.XProcStepProvider;
15 import org.daisy.common.xproc.calabash.XMLCalabashOptionValue;
16 import org.daisy.common.xproc.calabash.XMLCalabashOutputValue;
17 import org.daisy.common.xproc.XProcMonitor;
18 import static org.daisy.pipeline.braille.common.Query.util.query;
19 import static org.daisy.pipeline.braille.common.Query.util.marshallQuery;
20
21 import org.osgi.service.component.annotations.Component;
22
23 public class PxParseQueryStep extends DefaultStep implements XProcStep {
24
25 @Component(
26 name = "px:parse-query",
27 service = { XProcStepProvider.class },
28 property = { "type:String={http://www.daisy.org/ns/pipeline/xproc}parse-query" }
29 )
30 public static class StepProvider implements XProcStepProvider {
31 @Override
32 public XProcStep newStep(XProcRuntime runtime, XAtomicStep step, XProcMonitor monitor, Map<String,String> properties) {
33 return new PxParseQueryStep(runtime, step);
34 }
35 }
36
37 private WritablePipe result = null;
38 private static final QName _QUERY = new QName("query");
39
40 private PxParseQueryStep(XProcRuntime runtime, XAtomicStep step) {
41 super(runtime, step);
42 }
43
44 @Override
45 public void setOutput(String port, WritablePipe pipe) {
46 result = pipe;
47 }
48
49 @Override
50 public void reset() {
51 result.resetWriter();
52 }
53
54 @Override
55 public void run() throws SaxonApiException {
56 try {
57 marshallQuery(query(XMLCalabashOptionValue.of(getOption(_QUERY)).toString()),
58 XMLCalabashOutputValue.of(result, runtime).asXMLStreamWriter());
59 } catch (Throwable e) {
60 throw XProcStep.raiseError(e, step);
61 }
62 super.run();
63 }
64 }