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.XProcStep; 14 import org.daisy.common.xproc.calabash.XProcStepProvider; 15 import org.daisy.common.xproc.XProcMonitor; 16 import org.daisy.pipeline.braille.common.AbstractTransform; 17 import org.daisy.pipeline.braille.common.AbstractTransformProvider; 18 import org.daisy.pipeline.braille.common.AbstractTransformProvider.util.Iterables; 19 import org.daisy.pipeline.braille.common.calabash.CxEvalBasedTransformer; 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/transform/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 CxEvalBasedTransformer(href, null, 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 }