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