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  }