2  * ============LICENSE_START=======================================================
 
   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
 
  12  *       http://www.apache.org/licenses/LICENSE-2.0
 
  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=========================================================
 
  21 package org.onap.aai.sparky.aggregation.sync;
 
  23 import java.util.ArrayList;
 
  24 import java.util.List;
 
  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;
 
  46 public class AggregationSyncControllerFactory implements SyncControllerRegistrar {
 
  48   private static final Logger LOG =
 
  49       LoggerFactory.getInstance().getLogger(AggregationSyncControllerFactory.class);
 
  51   private ActiveInventoryAdapter aaiAdapter;
 
  52   private SearchServiceAdapter searchServiceAdapter;
 
  53   private SuggestionEntityLookup suggestionEntityLookup;
 
  55   private Map<String, String> aggregationEntityToIndexMap;
 
  56   private Map<String, ElasticSearchSchemaConfig> indexNameToSchemaConfigMap;
 
  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;
 
  66   private List<SyncController> syncControllers;
 
  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;
 
  82   public NetworkStatisticsConfig getAaiStatConfig() {
 
  86   public void setAaiStatConfig(NetworkStatisticsConfig aaiStatConfig) {
 
  87     this.aaiStatConfig = aaiStatConfig;
 
  90   public NetworkStatisticsConfig getEsStatConfig() {
 
  94   public void setEsStatConfig(NetworkStatisticsConfig esStatConfig) {
 
  95     this.esStatConfig = esStatConfig;
 
  98   public Map<String, ElasticSearchSchemaConfig> getIndexNameToSchemaConfigMap() {
 
  99     return indexNameToSchemaConfigMap;
 
 102   public void setIndexNameToSchemaConfigMap(
 
 103       Map<String, ElasticSearchSchemaConfig> indexNameToSchemaConfigMap) {
 
 104     this.indexNameToSchemaConfigMap = indexNameToSchemaConfigMap;
 
 107   public RestEndpointConfig getEndpointConfig() {
 
 108     return endpointConfig;
 
 111   public void setEndpointConfig(
 
 112                   RestEndpointConfig endpointConfig) {
 
 113     this.endpointConfig = endpointConfig;
 
 116   public SyncControllerConfig getSyncControllerConfig() {
 
 117     return syncControllerConfig;
 
 120   public void setSyncControllerConfig(SyncControllerConfig syncControllerConfig) {
 
 121     this.syncControllerConfig = syncControllerConfig;
 
 124   public ActiveInventoryAdapter getAaiAdapter() {
 
 128   public void setAaiAdapter(ActiveInventoryAdapter aaiAdapter) {
 
 129     this.aaiAdapter = aaiAdapter;
 
 132   public SearchServiceAdapter getSearchServiceAdapter() {
 
 133     return searchServiceAdapter;
 
 136   public void setSearchServiceAdapter(SearchServiceAdapter searchServiceAdapter) {
 
 137     this.searchServiceAdapter = searchServiceAdapter;
 
 140   public SuggestionEntityLookup getSuggestionEntityLookup() {
 
 141     return suggestionEntityLookup;
 
 144   public void setSuggestionEntityLookup(SuggestionEntityLookup suggestionEntityLookup) {
 
 145     this.suggestionEntityLookup = suggestionEntityLookup;
 
 148   public Map<String, String> getAggregationEntityToIndexMap() {
 
 149     return aggregationEntityToIndexMap;
 
 152   public void setAggregationEntityToIndexMap(Map<String, String> aggregationEntityToIndexMap) {
 
 153     this.aggregationEntityToIndexMap = aggregationEntityToIndexMap;
 
 156   public void buildControllers() {
 
 158     if (syncControllerConfig.isEnabled()) {
 
 160       Map<String, SuggestionEntityDescriptor> suggestionEntitites =
 
 161           suggestionEntityLookup.getSuggestionSearchEntityDescriptors();
 
 162       SyncControllerImpl aggregationSyncController = null;
 
 164       for (String entityType : suggestionEntitites.keySet()) {
 
 166         String indexName = aggregationEntityToIndexMap.get(entityType);
 
 168         if (indexName == null) {
 
 169           LOG.error(AaiUiMsgs.ERROR_GENERIC,
 
 170               "Could not determine aggregation index name" + " for entity type: " + entityType);
 
 176           aggregationSyncController = new SyncControllerImpl(syncControllerConfig, entityType);
 
 178           ElasticSearchSchemaConfig schemaConfig = indexNameToSchemaConfigMap.get(indexName);
 
 180           if (schemaConfig == null) {
 
 181             LOG.error(AaiUiMsgs.ERROR_GENERIC,
 
 182                 "Could not determine elastic search schema config for index name: " + indexName);
 
 186           IndexIntegrityValidator aggregationIndexValidator = new IndexIntegrityValidator(searchServiceAdapter,
 
 187               schemaConfig, endpointConfig, elasticSearchSchemaFactory.getIndexSchema(schemaConfig));
 
 189           aggregationSyncController.registerIndexValidator(aggregationIndexValidator);
 
 191           AggregationSynchronizer aggSynchronizer = new AggregationSynchronizer(entityType,
 
 192               schemaConfig, syncControllerConfig.getNumInternalSyncWorkers(),
 
 193               syncControllerConfig.getNumSyncActiveInventoryWorkers(),
 
 194               syncControllerConfig.getNumSyncElasticWorkers(), aaiStatConfig, esStatConfig,
 
 197           aggSynchronizer.setAaiAdapter(aaiAdapter);
 
 198           aggSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
 
 200           aggregationSyncController.registerEntitySynchronizer(aggSynchronizer);
 
 202           syncControllers.add(aggregationSyncController);
 
 203         } catch (Exception exc) {
 
 205           exc.printStackTrace();
 
 207           LOG.error(AaiUiMsgs.ERROR_GENERIC,
 
 208               "Failed to build aggregation sync controller.  Error : " + exc.getMessage());
 
 213       LOG.info(AaiUiMsgs.INFO_GENERIC, "Sync controller with name = "
 
 214           + syncControllerConfig.getControllerName() + " is disabled");
 
 219   public void registerController() {
 
 223     if ( syncControllerRegistry != null ) {
 
 224       for ( SyncController controller : syncControllers ) {
 
 225         syncControllerRegistry.registerSyncController(controller);