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