Adding UI extensibility
[aai/sparky-be.git] / src / main / java / org / onap / aai / sparky / aggregation / sync / AggregationSyncControllerFactory.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6  * Copyright © 2017 Amdocs
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *       http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  *
21  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22  */
23 package org.onap.aai.sparky.aggregation.sync;
24
25 import java.util.ArrayList;
26 import java.util.List;
27 import java.util.Map;
28
29 import org.onap.aai.cl.api.Logger;
30 import org.onap.aai.cl.eelf.LoggerFactory;
31 import org.onap.aai.sparky.config.oxm.SuggestionEntityDescriptor;
32 import org.onap.aai.sparky.config.oxm.SuggestionEntityLookup;
33 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
34 import org.onap.aai.sparky.dal.ElasticSearchAdapter;
35 import org.onap.aai.sparky.logging.AaiUiMsgs;
36 import org.onap.aai.sparky.sync.ElasticSearchIndexCleaner;
37 import org.onap.aai.sparky.sync.ElasticSearchSchemaFactory;
38 import org.onap.aai.sparky.sync.IndexCleaner;
39 import org.onap.aai.sparky.sync.IndexIntegrityValidator;
40 import org.onap.aai.sparky.sync.SyncController;
41 import org.onap.aai.sparky.sync.SyncControllerImpl;
42 import org.onap.aai.sparky.sync.SyncControllerRegistrar;
43 import org.onap.aai.sparky.sync.SyncControllerRegistry;
44 import org.onap.aai.sparky.sync.config.ElasticSearchEndpointConfig;
45 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
46 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
47 import org.onap.aai.sparky.sync.config.SyncControllerConfig;
48
49 public class AggregationSyncControllerFactory implements SyncControllerRegistrar {
50
51   private static final Logger LOG =
52       LoggerFactory.getInstance().getLogger(AggregationSyncControllerFactory.class);
53
54   private ActiveInventoryAdapter aaiAdapter;
55   private ElasticSearchAdapter esAdapter;
56   private SuggestionEntityLookup suggestionEntityLookup;
57
58   private Map<String, String> aggregationEntityToIndexMap;
59   private Map<String, ElasticSearchSchemaConfig> indexNameToSchemaConfigMap;
60
61   private ElasticSearchEndpointConfig elasticSearchEndpointConfig;
62   private SyncControllerConfig syncControllerConfig;
63   private SyncControllerRegistry syncControllerRegistry;
64   private NetworkStatisticsConfig aaiStatConfig;
65   private NetworkStatisticsConfig esStatConfig;
66
67   private List<SyncController> syncControllers;
68
69   public AggregationSyncControllerFactory(ElasticSearchEndpointConfig esEndpointConfig,
70       SyncControllerConfig syncControllerConfig, SyncControllerRegistry syncControllerRegistry,
71       SuggestionEntityLookup suggestionEntityLookup) {
72     this.syncControllers = new ArrayList<SyncController>();
73     this.elasticSearchEndpointConfig = esEndpointConfig;
74     this.syncControllerConfig = syncControllerConfig;
75     this.syncControllerRegistry = syncControllerRegistry;
76     this.suggestionEntityLookup = suggestionEntityLookup;
77   }
78
79   public NetworkStatisticsConfig getAaiStatConfig() {
80     return aaiStatConfig;
81   }
82
83   public void setAaiStatConfig(NetworkStatisticsConfig aaiStatConfig) {
84     this.aaiStatConfig = aaiStatConfig;
85   }
86
87   public NetworkStatisticsConfig getEsStatConfig() {
88     return esStatConfig;
89   }
90
91   public void setEsStatConfig(NetworkStatisticsConfig esStatConfig) {
92     this.esStatConfig = esStatConfig;
93   }
94
95   public Map<String, ElasticSearchSchemaConfig> getIndexNameToSchemaConfigMap() {
96     return indexNameToSchemaConfigMap;
97   }
98
99   public void setIndexNameToSchemaConfigMap(
100       Map<String, ElasticSearchSchemaConfig> indexNameToSchemaConfigMap) {
101     this.indexNameToSchemaConfigMap = indexNameToSchemaConfigMap;
102   }
103
104   public ElasticSearchEndpointConfig getElasticSearchEndpointConfig() {
105     return elasticSearchEndpointConfig;
106   }
107
108   public void setElasticSearchEndpointConfig(
109       ElasticSearchEndpointConfig elasticSearchEndpointConfig) {
110     this.elasticSearchEndpointConfig = elasticSearchEndpointConfig;
111   }
112
113   public SyncControllerConfig getSyncControllerConfig() {
114     return syncControllerConfig;
115   }
116
117   public void setSyncControllerConfig(SyncControllerConfig syncControllerConfig) {
118     this.syncControllerConfig = syncControllerConfig;
119   }
120
121   public ActiveInventoryAdapter getAaiAdapter() {
122     return aaiAdapter;
123   }
124
125   public void setAaiAdapter(ActiveInventoryAdapter aaiAdapter) {
126     this.aaiAdapter = aaiAdapter;
127   }
128
129   public ElasticSearchAdapter getEsAdapter() {
130     return esAdapter;
131   }
132
133   public void setEsAdapter(ElasticSearchAdapter esAdapter) {
134     this.esAdapter = esAdapter;
135   }
136
137   public SuggestionEntityLookup getSuggestionEntityLookup() {
138     return suggestionEntityLookup;
139   }
140
141   public void setSuggestionEntityLookup(SuggestionEntityLookup suggestionEntityLookup) {
142     this.suggestionEntityLookup = suggestionEntityLookup;
143   }
144
145   public Map<String, String> getAggregationEntityToIndexMap() {
146     return aggregationEntityToIndexMap;
147   }
148
149   public void setAggregationEntityToIndexMap(Map<String, String> aggregationEntityToIndexMap) {
150     this.aggregationEntityToIndexMap = aggregationEntityToIndexMap;
151   }
152
153   public void buildControllers() {
154
155     if (syncControllerConfig.isEnabled()) {
156
157       Map<String, SuggestionEntityDescriptor> suggestionEntitites =
158           suggestionEntityLookup.getSuggestionSearchEntityDescriptors();
159       SyncControllerImpl aggregationSyncController = null;
160
161       for (String entityType : suggestionEntitites.keySet()) {
162
163         String indexName = aggregationEntityToIndexMap.get(entityType);
164
165         if (indexName == null) {
166           LOG.error(AaiUiMsgs.ERROR_GENERIC,
167               "Could not determine aggregation index name" + " for entity type: " + entityType);
168           continue;
169         }
170
171         try {
172
173           aggregationSyncController = new SyncControllerImpl(syncControllerConfig, entityType);
174
175           ElasticSearchSchemaConfig schemaConfig = indexNameToSchemaConfigMap.get(indexName);
176
177           if (schemaConfig == null) {
178             LOG.error(AaiUiMsgs.ERROR_GENERIC,
179                 "Could not determine elastic search schema config for index name: " + indexName);
180             continue;
181           }
182
183           IndexIntegrityValidator aggregationIndexValidator =
184               new IndexIntegrityValidator(esAdapter, schemaConfig, elasticSearchEndpointConfig,
185                   ElasticSearchSchemaFactory.getIndexSchema(schemaConfig));
186
187           aggregationSyncController.registerIndexValidator(aggregationIndexValidator);
188
189           AggregationSynchronizer aggSynchronizer = new AggregationSynchronizer(entityType,
190               schemaConfig, syncControllerConfig.getNumInternalSyncWorkers(),
191               syncControllerConfig.getNumSyncActiveInventoryWorkers(),
192               syncControllerConfig.getNumSyncElasticWorkers(), aaiStatConfig, esStatConfig);
193
194           aggSynchronizer.setAaiAdapter(aaiAdapter);
195           aggSynchronizer.setElasticSearchAdapter(esAdapter);
196
197           aggregationSyncController.registerEntitySynchronizer(aggSynchronizer);
198
199           IndexCleaner entityDataIndexCleaner =
200               new ElasticSearchIndexCleaner(esAdapter, elasticSearchEndpointConfig, schemaConfig);
201
202           aggregationSyncController.registerIndexCleaner(entityDataIndexCleaner);
203
204           syncControllers.add(aggregationSyncController);
205         } catch (Exception exc) {
206
207           exc.printStackTrace();
208
209           LOG.error(AaiUiMsgs.ERROR_GENERIC,
210               "Failed to build aggregation sync controller.  Error : " + exc.getMessage());
211         }
212
213       }
214     } else {
215       LOG.info(AaiUiMsgs.INFO_GENERIC, "Sync controller with name = "
216           + syncControllerConfig.getControllerName() + " is disabled");
217     }
218   }
219
220   @Override
221   public void registerController() {
222
223     buildControllers();
224
225     if (syncControllerRegistry != null) {
226       for (SyncController controller : syncControllers) {
227         syncControllerRegistry.registerSyncController(controller);
228       }
229     }
230
231   }
232 }