View Javadoc
1   package org.exoplatform.commons.search.index;
2   
3   import java.util.HashMap;
4   import java.util.Map;
5   
6   import org.exoplatform.services.log.ExoLogger;
7   import org.exoplatform.services.log.Log;
8   
9   /**
10   * Created by The eXo Platform SAS
11   * Author : eXoPlatform
12   *          exo@exoplatform.com
13   * 10/12/15
14   */
15  public abstract class IndexingOperationProcessor {
16  
17    private static final Log LOG = ExoLogger.getExoLogger(IndexingOperationProcessor.class);
18  
19    private static final ThreadLocal<String> CURRENT_TENANT_NAME = new ThreadLocal<>();
20  
21    private Map<String, IndexingServiceConnector> connectors = new HashMap<String, IndexingServiceConnector>();
22  
23    public static String getCurrentTenantName() {
24      return CURRENT_TENANT_NAME.get();
25    }
26  
27    public static void setCurrentTenantName(String tenantName) {
28      CURRENT_TENANT_NAME.set(tenantName);
29    }
30  
31    /**
32     * Add Indexing Connector to the service
33     * @param indexingServiceConnector the indexing connector to add
34     * @LevelAPI Experimental
35     */
36    public void addConnector (IndexingServiceConnector indexingServiceConnector) {
37      addConnector(indexingServiceConnector, false);
38    }
39  
40    /**
41     * Add Indexing Connector to the service
42     * @param indexingServiceConnector the indexing connector to add
43     * @param override equal true if we can override an existing connector, false otherwise
44     * @LevelAPI Experimental
45     */
46    public void addConnector (IndexingServiceConnector indexingServiceConnector, Boolean override) {
47      if (connectors.containsKey(indexingServiceConnector.getType()) && override.equals(false)) {
48        LOG.error("Impossible to add connector {}. A connector with the same name has already been registered.",
49            indexingServiceConnector.getType());
50      } else {
51        connectors.put(indexingServiceConnector.getType(), indexingServiceConnector);
52        LOG.info("An Indexing Connector has been added: {}", indexingServiceConnector.getType());
53      }
54    }
55  
56    /**
57     * Gets all current connectors
58     * @return Connectors
59     * @LevelAPI Experimental
60     */
61    public Map<String, IndexingServiceConnector> getConnectors() {
62      return connectors;
63    }
64  
65    /**
66     * Index all document in the indexing queue
67     * @LevelAPI Experimental
68     */
69    public abstract void process();
70  
71    /**
72     * Interrupt the indexing queue process
73     */
74    public abstract void interrupt();
75  }