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(new XMLCalabashOptionValue(getOption(_QUERY)).toString()),
58  			              new XMLCalabashOutputValue(result, runtime).asXMLStreamWriter());
59  		} catch (Throwable e) {
60  			throw XProcStep.raiseError(e, step);
61  		}
62  		super.run();
63  	}
64  }