1 package org.daisy.pipeline.braille.pef; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import org.daisy.dotify.api.embosser.FileFormat; 7 8 import org.daisy.pipeline.braille.common.Provider; 9 import static org.daisy.pipeline.braille.common.Provider.util.dispatch; 10 import org.daisy.pipeline.braille.common.Provider.util.Memoize; 11 import org.daisy.pipeline.braille.common.Query; 12 13 import org.osgi.service.component.annotations.Component; 14 import org.osgi.service.component.annotations.Reference; 15 import org.osgi.service.component.annotations.ReferenceCardinality; 16 import org.osgi.service.component.annotations.ReferencePolicy; 17 18 @Component( 19 name = "file-format-registry", 20 service = { FileFormatRegistry.class } 21 ) 22 public class FileFormatRegistry extends Memoize<Query,FileFormat> implements FileFormatProvider { 23 24 private List<Provider<Query,FileFormat>> providers = new ArrayList<Provider<Query,FileFormat>>(); 25 private Provider<Query,FileFormat> dispatch = dispatch(providers); 26 27 @Reference( 28 name = "FileFormatProvider", 29 unbind = "-", 30 service = FileFormatProvider.class, 31 cardinality = ReferenceCardinality.MULTIPLE, 32 policy = ReferencePolicy.STATIC 33 ) 34 public void addProvider(FileFormatProvider p) { 35 providers.add(p); 36 } 37 38 public Iterable<FileFormat> _get(Query q) { 39 return dispatch.get(q); 40 } 41 }