1 package org.daisy.pipeline.braille.dotify.impl;
2
3 import java.net.URI;
4 import java.util.Map;
5
6 import com.google.common.base.MoreObjects;
7 import com.google.common.base.MoreObjects.ToStringHelper;
8
9 import com.xmlcalabash.core.XProcRuntime;
10 import com.xmlcalabash.runtime.XAtomicStep;
11
12 import org.daisy.common.file.URLs;
13 import org.daisy.common.xproc.calabash.XProcBasedTransformer;
14 import org.daisy.common.xproc.calabash.XProcStep;
15 import org.daisy.common.xproc.calabash.XProcStepProvider;
16 import org.daisy.common.xproc.XProcMonitor;
17 import org.daisy.pipeline.braille.common.AbstractTransform;
18 import org.daisy.pipeline.braille.common.AbstractTransformProvider;
19 import org.daisy.pipeline.braille.common.AbstractTransformProvider.util.Iterables;
20 import static org.daisy.pipeline.braille.common.AbstractTransformProvider.util.logCreate;
21 import org.daisy.pipeline.braille.common.Query;
22 import org.daisy.pipeline.braille.common.Query.Feature;
23 import org.daisy.pipeline.braille.common.Query.MutableQuery;
24 import static org.daisy.pipeline.braille.common.Query.util.mutableQuery;
25 import org.daisy.pipeline.braille.common.Transform;
26 import org.daisy.pipeline.braille.common.TransformProvider;
27
28 import org.osgi.service.component.annotations.Activate;
29 import org.osgi.service.component.annotations.Component;
30
31 public interface DotifyOBFLTransform {
32
33 @Component(
34 name = "org.daisy.pipeline.braille.dotify.impl.DotifyOBFLTransform.Provider",
35 service = {
36 TransformProvider.class
37 }
38 )
39 public class Provider extends AbstractTransformProvider<Transform> {
40
41 private URI href;
42
43 @Activate
44 protected void activate(final Map<?,?> properties) {
45 href = URLs.asURI(URLs.getResourceFromJAR("xml/obfl-to-pef.xpl", DotifyOBFLTransform.class));
46 }
47
48 private final static Iterable<Transform> empty = Iterables.<Transform>empty();
49
50 protected Iterable<Transform> _get(Query query) {
51 try {
52 MutableQuery q = mutableQuery(query);
53 boolean obfl = false;
54 for (Feature f : q.removeAll("input")) {
55 String i = f.getValue().get();
56 if ("obfl".equals(i))
57 obfl = true;
58 else if (!"text-css".equals(i))
59 return empty; }
60 if (!obfl)
61 return empty;
62 for (Feature f : q.removeAll("output"))
63 if (!("pef".equals(f.getValue().get()) || "braille".equals(f.getValue().get())))
64 return empty;
65 if (!q.isEmpty())
66 return empty;
67 return Iterables.<Transform>of(
68 logCreate((Transform)new TransformImpl())); }
69 catch (IllegalStateException e) {}
70 return empty;
71 }
72
73 private class TransformImpl extends AbstractTransform implements XProcStepProvider {
74
75 private TransformImpl() {
76 }
77
78 @Override
79 public XProcStep newStep(XProcRuntime runtime, XAtomicStep step, XProcMonitor monitor, Map<String,String> properties) {
80 return new XProcBasedTransformer(href, null).newStep(runtime, step, monitor, properties);
81 }
82
83 @Override
84 public ToStringHelper toStringHelper() {
85 return MoreObjects.toStringHelper("DotifyOBFLTransform$Provider$TransformImpl");
86 }
87 }
88
89 @Override
90 public ToStringHelper toStringHelper() {
91 return MoreObjects.toStringHelper("DotifyOBFLTransform$Provider");
92 }
93 }
94 }