View Javadoc
1   package com.kodexa.client.registry;
2   
3   import com.kodexa.client.Document;
4   import com.kodexa.client.KodexaException;
5   import com.kodexa.client.connectors.Connector;
6   import com.kodexa.client.connectors.FolderConnector;
7   import com.kodexa.client.connectors.InputStreamConnector;
8   
9   import java.io.InputStream;
10  import java.util.HashMap;
11  import java.util.Map;
12  
13  /**
14   * The registry of source types, used in Kodexa to allow us to
15   * separate access to sources from the steps and pipeline
16   */
17  public class SourceRegistry {
18  
19      private static SourceRegistrySourceRegistry">SourceRegistry INTERNAL_REGISTRY = new SourceRegistry();
20  
21      static {
22          INTERNAL_REGISTRY.addConnector(new FolderConnector());
23          INTERNAL_REGISTRY.addConnector(new InputStreamConnector());
24      }
25  
26      private Map<String, Connector> connectors = new HashMap<>();
27  
28      public static SourceRegistry getInstance() {
29          return INTERNAL_REGISTRY;
30      }
31  
32      public void addConnector(Connector connector) {
33          connectors.put(connector.getName(), connector);
34      }
35  
36      public InputStream getSource(Document document) {
37          String CONNECTOR_KEY = "connector";
38          if (document.getMetadata().containsKey(CONNECTOR_KEY)) {
39              String connector = String.valueOf(document.getMetadata().get(CONNECTOR_KEY));
40              if (connectors.containsKey(connector)) {
41                  return connectors.get(connector).getSource(document);
42              } else {
43                  throw new KodexaException("Unable to find connector [" + connector + "]");
44              }
45          } else {
46              throw new KodexaException("Document does not have connector metadata");
47          }
48      }
49  }