Update license and poms
[aai/sparky-be.git] / sparkybe-onap-service / 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   private ElasticSearchSchemaFactory elasticSearchSchemaFactory;
67   
68   private List<SyncController> syncControllers;
69
70   public AggregationSyncControllerFactory(ElasticSearchEndpointConfig esEndpointConfig,
71       SyncControllerConfig syncControllerConfig, SyncControllerRegistry syncControllerRegistry,
72       SuggestionEntityLookup suggestionEntityLookup,
73       OxmEntityLookup oxmEntityLookup,
74       ElasticSearchSchemaFactory elasticSearchSchemaFactory) {
75     this.elasticSearchSchemaFactory = elasticSearchSchemaFactory;
76     this.syncControllers = new ArrayList<SyncController>();
77     this.elasticSearchEndpointConfig = esEndpointConfig;
78     this.syncControllerConfig = syncControllerConfig;
79     this.syncControllerRegistry = syncControllerRegistry;
80     this.suggestionEntityLookup = suggestionEntityLookup;
81     this.oxmEntityLookup = oxmEntityLookup;
82   }
83
84   public NetworkStatisticsConfig getAaiStatConfig() {
85     return aaiStatConfig;
86   }
87
88   public void setAaiStatConfig(NetworkStatisticsConfig aaiStatConfig) {
89     this.aaiStatConfig = aaiStatConfig;
90   }
91
92   public NetworkStatisticsConfig getEsStatConfig() {
93     return esStatConfig;
94   }
95
96   public void setEsStatConfig(NetworkStatisticsConfig esStatConfig) {
97     this.esStatConfig = esStatConfig;
98   }
99
100   public Map<String, ElasticSearchSchemaConfig> getIndexNameToSchemaConfigMap() {
101     return indexNameToSchemaConfigMap;
102   }
103
104   public void setIndexNameToSchemaConfigMap(
105       Map<String, ElasticSearchSchemaConfig> indexNameToSchemaConfigMap) {
106     this.indexNameToSchemaConfigMap = indexNameToSchemaConfigMap;
107   }
108
109   public ElasticSearchEndpointConfig getElasticSearchEndpointConfig() {
110     return elasticSearchEndpointConfig;
111   }
112
113   public void setElasticSearchEndpointConfig(
114       ElasticSearchEndpointConfig elasticSearchEndpointConfig) {
115     this.elasticSearchEndpointConfig = elasticSearchEndpointConfig;
116   }
117
118   public SyncControllerConfig getSyncControllerConfig() {
119     return syncControllerConfig;
120   }
121
122   public void setSyncControllerConfig(SyncControllerConfig syncControllerConfig) {
123     this.syncControllerConfig = syncControllerConfig;
124   }
125
126   public ActiveInventoryAdapter getAaiAdapter() {
127     return aaiAdapter;
128   }
129
130   public void setAaiAdapter(ActiveInventoryAdapter aaiAdapter) {
131     this.aaiAdapter = aaiAdapter;
132   }
133
134   public ElasticSearchAdapter getEsAdapter() {
135     return esAdapter;
136   }
137
138   public void setEsAdapter(ElasticSearchAdapter esAdapter) {
139     this.esAdapter = esAdapter;
140   }
141
142   public SuggestionEntityLookup getSuggestionEntityLookup() {
143     return suggestionEntityLookup;
144   }
145
146   public void setSuggestionEntityLookup(SuggestionEntityLookup suggestionEntityLookup) {
147     this.suggestionEntityLookup = suggestionEntityLookup;
148   }
149
150   public Map<String, String> getAggregationEntityToIndexMap() {
151     return aggregationEntityToIndexMap;
152   }
153
154   public void setAggregationEntityToIndexMap(Map<String, String> aggregationEntityToIndexMap) {
155     this.aggregationEntityToIndexMap = aggregationEntityToIndexMap;
156   }
157
158   public void buildControllers() {
159
160     if (syncControllerConfig.isEnabled()) {
161       
162       Map<String, SuggestionEntityDescriptor> suggestionEntitites =
163           suggestionEntityLookup.getSuggestionSearchEntityDescriptors();
164       SyncControllerImpl aggregationSyncController = null;
165
166       for (String entityType : suggestionEntitites.keySet()) {
167         
168         String indexName = aggregationEntityToIndexMap.get(entityType);
169
170         if (indexName == null) {
171           LOG.error(AaiUiMsgs.ERROR_GENERIC,
172               "Could not determine aggregation index name" + " for entity type: " + entityType);
173           continue;
174         }
175
176         try {
177
178           aggregationSyncController = new SyncControllerImpl(syncControllerConfig, entityType);
179
180           ElasticSearchSchemaConfig schemaConfig = indexNameToSchemaConfigMap.get(indexName);
181
182           if (schemaConfig == null) {
183             LOG.error(AaiUiMsgs.ERROR_GENERIC,
184                 "Could not determine elastic search schema config for index name: " + indexName);
185             continue;
186           }
187
188           IndexIntegrityValidator aggregationIndexValidator = new IndexIntegrityValidator(esAdapter,
189               schemaConfig, elasticSearchEndpointConfig, elasticSearchSchemaFactory.getIndexSchema(schemaConfig));
190
191           aggregationSyncController.registerIndexValidator(aggregationIndexValidator);
192
193           AggregationSynchronizer aggSynchronizer = new AggregationSynchronizer(entityType,
194               schemaConfig, syncControllerConfig.getNumInternalSyncWorkers(),
195               syncControllerConfig.getNumSyncActiveInventoryWorkers(),
196               syncControllerConfig.getNumSyncElasticWorkers(), aaiStatConfig, esStatConfig,
197               oxmEntityLookup);
198
199           aggSynchronizer.setAaiAdapter(aaiAdapter);
200           aggSynchronizer.setElasticSearchAdapter(esAdapter);
201
202           aggregationSyncController.registerEntitySynchronizer(aggSynchronizer);
203
204           IndexCleaner entityDataIndexCleaner =
205               new ElasticSearchIndexCleaner(esAdapter, elasticSearchEndpointConfig, schemaConfig);
206
207           aggregationSyncController.registerIndexCleaner(entityDataIndexCleaner);
208
209           syncControllers.add(aggregationSyncController);
210         } catch (Exception exc) {
211           
212           exc.printStackTrace();
213           
214           LOG.error(AaiUiMsgs.ERROR_GENERIC,
215               "Failed to build aggregation sync controller.  Error : " + exc.getMessage());
216         }
217
218       }
219     } else {
220       LOG.info(AaiUiMsgs.INFO_GENERIC, "Sync controller with name = "
221           + syncControllerConfig.getControllerName() + " is disabled");
222     }
223   }
224
225   @Override
226   public void registerController() {
227     
228     buildControllers();
229     
230     if ( syncControllerRegistry != null ) {
231       for ( SyncController controller : syncControllers ) {
232         syncControllerRegistry.registerSyncController(controller);
233       }
234     }
235     
236   }
237 }