1 package nl.dedicon.pipeline.braille.calabash.impl;
2
3 import com.xmlcalabash.core.XProcException;
4 import com.xmlcalabash.core.XProcRuntime;
5 import com.xmlcalabash.core.XProcStep;
6 import com.xmlcalabash.io.ReadablePipe;
7 import com.xmlcalabash.io.WritablePipe;
8 import com.xmlcalabash.library.DefaultStep;
9 import com.xmlcalabash.runtime.XAtomicStep;
10 import net.sf.saxon.s9api.SaxonApiException;
11 import net.sf.saxon.s9api.XdmNode;
12 import nl.dedicon.pipeline.braille.step.NotesMover;
13 import nl.dedicon.pipeline.braille.step.Utils;
14 import org.daisy.common.xproc.calabash.XProcStepProvider;
15 import org.osgi.service.component.annotations.Component;
16 import org.slf4j.Logger;
17 import org.slf4j.LoggerFactory;
18 import org.w3c.dom.Document;
19
20
21
22
23
24
25
26
27 public class MoveNotesStep extends DefaultStep {
28
29 private static final Logger logger = LoggerFactory.getLogger(MoveNotesStep.class);
30
31 private ReadablePipe source = null;
32 private WritablePipe result = null;
33
34 private MoveNotesStep(XProcRuntime runtime, XAtomicStep step) {
35 super(runtime, step);
36 }
37
38 @Override
39 public void setInput(String port, ReadablePipe pipe) {
40 source = pipe;
41 }
42
43 @Override
44 public void setOutput(String port, WritablePipe pipe) {
45 result = pipe;
46 }
47
48 @Override
49 public void reset() {
50 source.resetReader();
51 result.resetWriter();
52 }
53
54 @Override
55 public void run() throws SaxonApiException {
56
57 super.run();
58
59 try {
60
61 XdmNode book = source.read();
62
63
64 Document document = Utils.convertToDocument(book);
65
66 NotesMover notesMover = new NotesMover();
67
68 notesMover.collectNotesAndNoterefs(document);
69 notesMover.moveNotes();
70
71 XdmNode newBook = Utils.convertToXdmNode(document, runtime.getProcessor().newDocumentBuilder(), true);
72
73 result.write(newBook);
74
75 } catch (Exception e) {
76
77 logger.error("dedicon:move-notes failed", e);
78 throw new XProcException(step.getNode(), e);
79
80 }
81 }
82
83 @Component(
84 name = "dedicon:move-notes",
85 service = {XProcStepProvider.class},
86 property = {"type:String={http://www.dedicon.nl}move-notes"}
87 )
88 public static class Provider implements XProcStepProvider {
89
90 @Override
91 public XProcStep newStep(XProcRuntime runtime, XAtomicStep step) {
92 return new MoveNotesStep(runtime, step);
93 }
94
95 }
96 }