Adding interfaces in documentation
[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-2018 AT&T Intellectual Property. All rights reserved.
6  * Copyright © 2017-2018 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 package org.onap.aai.sparky.aggregation.sync;
22
23 import java.util.ArrayList;
24 import java.util.List;
25 import java.util.Map;
26
27 import org.onap.aai.cl.api.Logger;
28 import org.onap.aai.cl.eelf.LoggerFactory;
29 import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
30 import org.onap.aai.sparky.config.oxm.SuggestionEntityDescriptor;
31 import org.onap.aai.sparky.config.oxm.SuggestionEntityLookup;
32 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
33 import org.onap.aai.sparky.dal.ElasticSearchAdapter;
34 import org.onap.aai.sparky.logging.AaiUiMsgs;
35 import org.onap.aai.sparky.sync.ElasticSearchIndexCleaner;
36 import org.onap.aai.sparky.sync.ElasticSearchSchemaFactory;
37 import org.onap.aai.sparky.sync.IndexCleaner;
38 import org.onap.aai.sparky.sync.IndexIntegrityValidator;
39 import org.onap.aai.sparky.sync.SyncController;
40 import org.onap.aai.sparky.sync.SyncControllerImpl;
41 import org.onap.aai.sparky.sync.SyncControllerRegistrar;
42 import org.onap.aai.sparky.sync.SyncControllerRegistry;
43 import org.onap.aai.sparky.sync.config.ElasticSearchEndpointConfig;
44 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
45 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
46 import org.onap.aai.sparky.sync.config.SyncControllerConfig;
47
48 public class AggregationSyncControllerFactory implements SyncControllerRegistrar {
49
50   private static final Logger LOG =
51       LoggerFactory.getInstance().getLogger(AggregationSyncControllerFactory.class);
52
53   private ActiveInventoryAdapter aaiAdapter;
54   private ElasticSearchAdapter esAdapter;
55   private SuggestionEntityLookup suggestionEntityLookup;
56
57   private Map<String, String> aggregationEntityToIndexMap;
58   private Map<String, ElasticSearchSchemaConfig> indexNameToSchemaConfigMap;
59
60   private ElasticSearchEndpointConfig elasticSearchEndpointConfig;
61   private SyncControllerConfig syncControllerConfig;
62   private SyncControllerRegistry syncControllerRegistry;
63   private NetworkStatisticsConfig aaiStatConfig; 
64   private NetworkStatisticsConfig esStatConfig;
65   private OxmEntityLookup oxmEntityLookup;
66   
67   private List<SyncController> syncControllers;
68
69   public AggregationSyncControllerFactory(ElasticSearchEndpointConfig esEndpointConfig,
70       SyncControllerConfig syncControllerConfig, SyncControllerRegistry syncControllerRegistry,
71       SuggestionEntityLookup suggestionEntityLookup,
72       OxmEntityLookup oxmEntityLookup) {
73     this.syncControllers = new ArrayList<SyncController>();
74     this.elasticSearchEndpointConfig = esEndpointConfig;
75     this.syncControllerConfig = syncControllerConfig;
76     this.syncControllerRegistry = syncControllerRegistry;
77     this.suggestionEntityLookup = suggestionEntityLookup;
78     this.oxmEntityLookup = oxmEntityLookup;
79   }
80
81   public NetworkStatisticsConfig getAaiStatConfig() {
82     return aaiStatConfig;
83   }
84
85   public void setAaiStatConfig(NetworkStatisticsConfig aaiStatConfig) {
86     this.aaiStatConfig = aaiStatConfig;
87   }
88
89   public NetworkStatisticsConfig getEsStatConfig() {
90     return esStatConfig;
91   }
92
93   public void setEsStatConfig(NetworkStatisticsConfig esStatConfig) {
94     this.esStatConfig = esStatConfig;
95   }
96
97   public Map<String, ElasticSearchSchemaConfig> getIndexNameToSchemaConfigMap() {
98     return indexNameToSchemaConfigMap;
99   }
100
101   public void setIndexNameToSchemaConfigMap(
102       Map<String, ElasticSearchSchemaConfig> indexNameToSchemaConfigMap) {
103     this.indexNameToSchemaConfigMap = indexNameToSchemaConfigMap;
104   }
105
106   public ElasticSearchEndpointConfig getElasticSearchEndpointConfig() {
107     return elasticSearchEndpointConfig;
108   }
109
110   public void setElasticSearchEndpointConfig(
111       ElasticSearchEndpointConfig elasticSearchEndpointConfig) {
112     this.elasticSearchEndpointConfig = elasticSearchEndpointConfig;
113   }
114
115   public SyncControllerConfig getSyncControllerConfig() {
116     return syncControllerConfig;
117   }
118
119   public void setSyncControllerConfig(SyncControllerConfig syncControllerConfig) {
120     this.syncControllerConfig = syncControllerConfig;
121   }
122
123   public ActiveInventoryAdapter getAaiAdapter() {
124     return aaiAdapter;
125   }
126
127   public void setAaiAdapter(ActiveInventoryAdapter aaiAdapter) {
128     this.aaiAdapter = aaiAdapter;
129   }
130
131   public ElasticSearchAdapter getEsAdapter() {
132     return esAdapter;
133   }
134
135   public void setEsAdapter(ElasticSearchAdapter esAdapter) {
136     this.esAdapter = esAdapter;
137   }
138
139   public SuggestionEntityLookup getSuggestionEntityLookup() {
140     return suggestionEntityLookup;
141   }
142
143   public void setSuggestionEntityLookup(SuggestionEntityLookup suggestionEntityLookup) {
144     this.suggestionEntityLookup = suggestionEntityLookup;
145   }
146
147   public Map<String, String> getAggregationEntityToIndexMap() {
148     return aggregationEntityToIndexMap;
149   }
150
151   public void setAggregationEntityToIndexMap(Map<String, String> aggregationEntityToIndexMap) {
152     this.aggregationEntityToIndexMap = aggregationEntityToIndexMap;
153   }
154
155   public void buildControllers() {
156
157     if (syncControllerConfig.isEnabled()) {
158       
159       Map<String, SuggestionEntityDescriptor> suggestionEntitites =
160           suggestionEntityLookup.getSuggestionSearchEntityDescriptors();
161       SyncControllerImpl aggregationSyncController = null;
162
163       for (String entityType : suggestionEntitites.keySet()) {
164         
165         String indexName = aggregationEntityToIndexMap.get(entityType);
166
167         if (indexName == null) {
168           LOG.error(AaiUiMsgs.ERROR_GENERIC,
169               "Could not determine aggregation index name" + " for entity type: " + entityType);
170           continue;
171         }
172
173         try {
174
175           aggregationSyncController = new SyncControllerImpl(syncControllerConfig, entityType);
176
177           ElasticSearchSchemaConfig schemaConfig = indexNameToSchemaConfigMap.get(indexName);
178
179           if (schemaConfig == null) {
180             LOG.error(AaiUiMsgs.ERROR_GENERIC,
181                 "Could not determine elastic search schema config for index name: " + indexName);
182             continue;
183           }
184
185           IndexIntegrityValidator aggregationIndexValidator = new IndexIntegrityValidator(esAdapter,
186               schemaConfig, elasticSearchEndpointConfig, ElasticSearchSchemaFactory.getIndexSchema(schemaConfig));
187
188           aggregationSyncController.registerIndexValidator(aggregationIndexValidator);
189
190           AggregationSynchronizer aggSynchronizer = new AggregationSynchronizer(entityType,
191               schemaConfig, syncControllerConfig.getNumInternalSyncWorkers(),
192               syncControllerConfig.getNumSyncActiveInventoryWorkers(),
193               syncControllerConfig.getNumSyncElasticWorkers(), aaiStatConfig, esStatConfig,
194               oxmEntityLookup);
195
196           aggSynchronizer.setAaiAdapter(aaiAdapter);
197           aggSynchronizer.setElasticSearchAdapter(esAdapter);
198
199           aggregationSyncController.registerEntitySynchronizer(aggSynchronizer);
200
201           IndexCleaner entityDataIndexCleaner =
202               new ElasticSearchIndexCleaner(esAdapter, elasticSearchEndpointConfig, schemaConfig);
203
204           aggregationSyncController.registerIndexCleaner(entityDataIndexCleaner);
205
206           syncControllers.add(aggregationSyncController);
207         } catch (Exception exc) {
208           
209           exc.printStackTrace();
210           
211           LOG.error(AaiUiMsgs.ERROR_GENERIC,
212               "Failed to build aggregation sync controller.  Error : " + exc.getMessage());
213         }
214
215       }
216     } else {
217       LOG.info(AaiUiMsgs.INFO_GENERIC, "Sync controller with name = "
218           + syncControllerConfig.getControllerName() + " is disabled");
219     }
220   }
221
222   @Override
223   public void registerController() {
224     
225     buildControllers();
226     
227     if ( syncControllerRegistry != null ) {
228       for ( SyncController controller : syncControllers ) {
229         syncControllerRegistry.registerSyncController(controller);
230       }
231     }
232     
233   }
234 }