Initial commit for AAI-UI(sparky-backend)
[aai/sparky-be.git] / src / test / java / org / openecomp / sparky / synchronizer / SyncControllerBuilder.java
diff --git a/src/test/java/org/openecomp/sparky/synchronizer/SyncControllerBuilder.java b/src/test/java/org/openecomp/sparky/synchronizer/SyncControllerBuilder.java
new file mode 100644 (file)
index 0000000..45c272b
--- /dev/null
@@ -0,0 +1,581 @@
+/* 
+* ============LICENSE_START=======================================================
+* SPARKY (inventory UI service)
+* ================================================================================
+* Copyright © 2017 AT&T Intellectual Property.
+* Copyright © 2017 Amdocs
+* All rights reserved.
+* ================================================================================
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* 
+*      http://www.apache.org/licenses/LICENSE-2.0
+* 
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+* ============LICENSE_END=========================================================
+* 
+* ECOMP and OpenECOMP are trademarks
+* and service marks of AT&T Intellectual Property.
+*/
+
+package org.openecomp.sparky.synchronizer;
+
+import org.openecomp.sparky.dal.aai.ActiveInventoryAdapter;
+import org.openecomp.sparky.dal.aai.config.ActiveInventoryConfig;
+import org.openecomp.sparky.dal.cache.InMemoryEntityCache;
+import org.openecomp.sparky.dal.cache.PersistentEntityCache;
+import org.openecomp.sparky.dal.elasticsearch.ElasticSearchAdapter;
+import org.openecomp.sparky.dal.elasticsearch.ElasticSearchDataProvider;
+import org.openecomp.sparky.dal.elasticsearch.config.ElasticSearchConfig;
+import org.openecomp.sparky.dal.rest.OperationResult;
+import org.openecomp.sparky.dal.rest.RestClientBuilder;
+import org.openecomp.sparky.dal.rest.RestfulDataAccessor;
+import org.openecomp.sparky.synchronizer.SyncController.SyncActions;
+import org.openecomp.sparky.synchronizer.enumeration.SynchronizerState;
+import org.slf4j.LoggerFactory;
+
+import ch.qos.logback.classic.Level;
+
+/**
+ * The Class SyncControllerBuilder.
+ */
+public class SyncControllerBuilder {
+
+  /**
+   * Do master entity sync.
+   */
+  public void doMasterEntitySync() {
+
+  }
+
+  /**
+   * Test elastic search update api.
+   */
+  public void testElasticSearchUpdateApi() {
+    try {
+
+      RestClientBuilder clientBuilder = new RestClientBuilder();
+      clientBuilder.setUseHttps(false);
+
+      RestfulDataAccessor nonCachingRestProvider = new RestfulDataAccessor(clientBuilder);
+
+      ElasticSearchConfig esConfig = ElasticSearchConfig.getConfig();
+      ElasticSearchDataProvider elasticSearchDataProvider =
+          new ElasticSearchAdapter(nonCachingRestProvider, esConfig);
+
+      String payload =
+          "{ \"entityType\": \"complex\", \"pkey\": \"MORRISTOWN0075\", \"location\": { \"lat\": \"40.793414\", \"lon\": \"-74.480432\" }, \"selfLink\": \"https://aai-int1.test.att.com:8443/aai/v8/cloud-infrastructure/complexes/complex/MORRISTOWN0075?nodes-only\" }\n";
+
+      String updateRequest = elasticSearchDataProvider.buildBulkImportOperationRequest(
+          "topographysearchindex-localhost", "default",
+          "1e2a6ba9e09d5e1bcb016b3a0b8d50273b42828e47957bd2a2f3ce1854744f5f", "6", payload);
+
+      OperationResult or =
+          elasticSearchDataProvider.doBulkOperation("http://localhost:9200/_bulk", updateRequest);
+
+      System.out.println(or.toString());
+
+      /*
+       * String BULK_IMPORT_INDEX_TEMPLATE =
+       * "{\"index\":{\"_index\":\"%s\",\"_type\":\"%s\",\"_id\":\"%s\", \"_version\":\"%s\"}}\n";
+       * 
+       * StringBuilder updateRequestPayload = new StringBuilder(128);
+       * updateRequestPayload.append(String.format(BULK_IMPORT_INDEX_TEMPLATE,
+       * "topographysearchindex-localhost", "default",
+       * "1e2a6ba9e09d5e1bcb016b3a0b8d50273b42828e47957bd2a2f3ce1854744f5f", "5"));
+       * 
+       * 
+       * updateRequestPayload.append(payload);
+       * 
+       * OperationResult or = nonCachingRestProvider.doRestfulOperation(HttpMethod.PUT,
+       * "http://localhost:9200/_bulk", updateRequestPayload.toString(),
+       * RestfulDataAccessor.APPLICATION_X_WWW_FORM_URL_ENCODED,
+       * RestfulDataAccessor.APPLICATION_JSON);
+       */
+
+
+
+    } catch (Exception exc) {
+      exc.printStackTrace();
+      System.out.println("Error:  failed to sync with message = " + exc.getMessage());
+    }
+  }
+
+  /**
+   * Do historical entity sync.
+   */
+  public void doHistoricalEntitySync() {
+    try {
+      SyncController syncController = new SyncController("historicalEntityTestController");
+
+      ActiveInventoryAdapter aaiAdapter = new ActiveInventoryAdapter(new RestClientBuilder());
+      aaiAdapter.setCacheEnabled(false);
+
+      RestClientBuilder clientBuilder = new RestClientBuilder();
+      clientBuilder.setUseHttps(false);
+
+      RestfulDataAccessor nonCachingRestProvider = new RestfulDataAccessor(clientBuilder);
+
+      ElasticSearchConfig esConfig = ElasticSearchConfig.getConfig();
+
+      ElasticSearchAdapter esAdapter = new ElasticSearchAdapter(nonCachingRestProvider,esConfig);
+
+
+      IndexIntegrityValidator entityCounterHistoryValidator =
+          new IndexIntegrityValidator(nonCachingRestProvider, esConfig.getEntityCountHistoryIndex(),
+              esConfig.getType(), esConfig.getIpAddress(), esConfig.getHttpPort(),
+              esConfig.buildElasticSearchEntityCountHistoryTableConfig());
+
+      syncController.registerIndexValidator(entityCounterHistoryValidator);
+
+
+      //////
+
+
+
+      HistoricalEntitySummarizer historicalSummarizer =
+          new HistoricalEntitySummarizer(esConfig.getEntityCountHistoryIndex());
+      historicalSummarizer.setAaiDataProvider(aaiAdapter);
+      historicalSummarizer.setEsDataProvider(esAdapter);
+      syncController.registerEntitySynchronizer(historicalSummarizer);
+
+      ////
+
+      /*
+       * IndexIntegrityValidator entitySearchIndexValidator = new IndexIntegrityValidator(new
+       * RestClientBuilder());
+       * 
+       * entitySearchIndexValidator.setIndexName("topographysearchindex-localhost");
+       * entitySearchIndexValidator.setIndexType("default");
+       * entitySearchIndexValidator.setIndexSettings("");
+       * entitySearchIndexValidator.setIndexSettings("");
+       * 
+       * syncController.registerIndexValidator(entitySearchIndexValidator);
+       */
+
+      ////
+
+      /*
+       * IndexCleaner index1Cleaner = new ElasticSearchIndexCleaner(nonCachingRestProvider,
+       * "topographysearchindex-localhost", "default", "127.0.0.1", "9200", 5, 5000);
+       */
+
+      // syncController.registerIndexCleaner(index1Cleaner);
+
+      ///
+
+      for (int x = 0; x < 10; x++) {
+
+        syncController.performAction(SyncActions.SYNCHRONIZE);
+
+        while (syncController.getState() == SynchronizerState.PERFORMING_SYNCHRONIZATION) {
+
+          System.out.println("sync controller state = " + syncController.getState());
+
+          Thread.sleep(1000);
+        }
+      }
+
+      syncController.shutdown();
+
+    } catch (Exception exc) {
+      exc.printStackTrace();
+      System.out.println("Error:  failed to sync with message = " + exc.getMessage());
+    }
+  }
+
+
+
+  /**
+   * Do geo entity sync.
+   */
+  public void doGeoEntitySync() {
+    try {
+
+      ActiveInventoryAdapter aaiAdapter = new ActiveInventoryAdapter(new RestClientBuilder());
+
+      aaiAdapter.setCacheEnabled(true);
+
+      InMemoryEntityCache aaiInMemoryCache = new InMemoryEntityCache();
+      aaiAdapter.setEntityCache(aaiInMemoryCache);
+
+      /*
+       * PersistentEntityCache aaiDiskCache = new PersistentEntityCache();
+       * aaiAdapter.setEntityCache(aaiDiskCache);
+       */
+
+      RestClientBuilder clientBuilder = new RestClientBuilder();
+      clientBuilder.setUseHttps(false);
+
+      RestfulDataAccessor nonCachingRestProvider = new RestfulDataAccessor(clientBuilder);
+      ElasticSearchConfig esConfig = ElasticSearchConfig.getConfig();
+
+      ElasticSearchAdapter esAdapter = new ElasticSearchAdapter(nonCachingRestProvider,esConfig);
+
+      IndexIntegrityValidator entitySearchIndexValidator =
+          new IndexIntegrityValidator(nonCachingRestProvider, esConfig.getIndexName(),
+              esConfig.getType(), esConfig.getIpAddress(), esConfig.getHttpPort(),
+              esConfig.buildElasticSearchTableConfig());
+
+      SyncController syncController = new SyncController("geoEntitySyncTestController");
+      syncController.registerIndexValidator(entitySearchIndexValidator);
+
+
+      //////
+
+      GeoSynchronizer geoSync = new GeoSynchronizer("topographysearchindex-localhost");
+      geoSync.setAaiDataProvider(aaiAdapter);
+      geoSync.setEsDataProvider(esAdapter);
+      syncController.registerEntitySynchronizer(geoSync);
+
+      ////
+
+      /*
+       * IndexIntegrityValidator entitySearchIndexValidator = new IndexIntegrityValidator(new
+       * RestClientBuilder());
+       * 
+       * entitySearchIndexValidator.setIndexName("topographysearchindex-localhost");
+       * entitySearchIndexValidator.setIndexType("default");
+       * entitySearchIndexValidator.setIndexSettings("");
+       * entitySearchIndexValidator.setIndexSettings("");
+       * 
+       * syncController.registerIndexValidator(entitySearchIndexValidator);
+       */
+
+      ////
+
+      /*
+       * IndexCleaner index1Cleaner = new ElasticSearchIndexCleaner(nonCachingRestProvider,
+       * "topographysearchindex-localhost", "default", "127.0.0.1", "9200", 5, 5000);
+       */
+
+      // syncController.registerIndexCleaner(index1Cleaner);
+
+      ///
+
+      syncController.performAction(SyncActions.SYNCHRONIZE);
+
+      while (syncController.getState() == SynchronizerState.PERFORMING_SYNCHRONIZATION) {
+        Thread.sleep(1000);
+      }
+
+      syncController.shutdown();
+
+    } catch (Exception exc) {
+      exc.printStackTrace();
+      System.out.println("Error:  failed to sync with message = " + exc.getMessage());
+    }
+  }
+
+  /**
+   * Do searchable entitysync.
+   */
+  public void doSearchableEntitysync() {
+    try {
+      
+
+      ActiveInventoryAdapter aaiAdapter = new ActiveInventoryAdapter(new RestClientBuilder());
+
+      aaiAdapter.setCacheEnabled(true);
+
+      /*
+       * InMemoryEntityCache aaiInMemoryCache = new InMemoryEntityCache();
+       * aaiAdapter.setEntityCache(aaiInMemoryCache);
+       */
+
+      PersistentEntityCache aaiDiskCache = new PersistentEntityCache();
+      aaiAdapter.setEntityCache(aaiDiskCache);
+
+      RestClientBuilder clientBuilder = new RestClientBuilder();
+      clientBuilder.setUseHttps(false);
+
+      RestfulDataAccessor nonCachingRestProvider = new RestfulDataAccessor(clientBuilder);
+      ElasticSearchConfig esConfig = ElasticSearchConfig.getConfig();
+
+      ElasticSearchAdapter esAdapter = new ElasticSearchAdapter(nonCachingRestProvider,esConfig);
+
+      //////
+      
+      SyncController syncController = new SyncController("searchtableEntityTestController");
+
+      SearchableEntitySynchronizer ses =
+          new SearchableEntitySynchronizer("entitysearchindex-localhost");
+      ses.setAaiDataProvider(aaiAdapter);
+      ses.setEsDataProvider(esAdapter);
+      syncController.registerEntitySynchronizer(ses);
+
+      ////
+
+      /*
+       * IndexIntegrityValidator entitySearchIndexValidator = new IndexIntegrityValidator(new
+       * RestClientBuilder());
+       * 
+       * entitySearchIndexValidator.setIndexName("esi-sync2-localhost");
+       * entitySearchIndexValidator.setIndexType("default");
+       * 
+       * syncController.registerIndexValidator(entitySearchIndexValidator);
+       */
+
+      ////
+
+      /*
+       * IndexCleaner index1Cleaner = new ElasticSearchIndexCleaner(nonCachingRestProvider,
+       * "entitysearchindex-localhost", "default", "127.0.0.1", "9200", 5, 5000);
+       * 
+       * syncController.registerIndexCleaner(index1Cleaner);
+       */
+
+      ///
+
+      syncController.performAction(SyncActions.SYNCHRONIZE);
+
+      while (syncController.getState() == SynchronizerState.PERFORMING_SYNCHRONIZATION) {
+        Thread.sleep(1000);
+      }
+
+      syncController.shutdown();
+
+    } catch (Exception exc) {
+      exc.printStackTrace();
+      System.out.println("Error:  failed to sync with message = " + exc.getMessage());
+    }
+  }
+
+  /**
+   * Do cross entity reference sync.
+   */
+  public void doCrossEntityReferenceSync() {
+    try {
+      
+
+      ActiveInventoryAdapter aaiAdapter = new ActiveInventoryAdapter(new RestClientBuilder());
+
+      aaiAdapter.setCacheEnabled(true);
+
+      /*
+       * InMemoryEntityCache aaiInMemoryCache = new InMemoryEntityCache();
+       * aaiAdapter.setEntityCache(aaiInMemoryCache);
+       */
+
+      PersistentEntityCache aaiDiskCache = new PersistentEntityCache();
+      aaiAdapter.setEntityCache(aaiDiskCache);
+
+      RestClientBuilder clientBuilder = new RestClientBuilder();
+      clientBuilder.setUseHttps(false);
+
+      RestfulDataAccessor nonCachingRestProvider = new RestfulDataAccessor(clientBuilder);
+      ElasticSearchConfig esConfig = ElasticSearchConfig.getConfig();
+
+      ElasticSearchAdapter esAdapter = new ElasticSearchAdapter(nonCachingRestProvider,esConfig);
+
+      SyncController syncController = new SyncController("crossEntityRefSyncController");
+
+      CrossEntityReferenceSynchronizer cers =
+          new CrossEntityReferenceSynchronizer("entitysearchindex-localhost", ActiveInventoryConfig.getConfig());
+      cers.setAaiDataProvider(aaiAdapter);
+      cers.setEsDataProvider(esAdapter);
+      syncController.registerEntitySynchronizer(cers);
+
+      SearchableEntitySynchronizer ses =
+          new SearchableEntitySynchronizer("entitysearchindex-localhost");
+      ses.setAaiDataProvider(aaiAdapter);
+      ses.setEsDataProvider(esAdapter);
+      syncController.registerEntitySynchronizer(ses);
+
+      ElasticSearchConfig config = ElasticSearchConfig.getConfig();
+
+      IndexIntegrityValidator entitySearchIndexValidator = new IndexIntegrityValidator(
+          nonCachingRestProvider, config.getIndexName(), config.getType(), config.getIpAddress(),
+          config.getHttpPort(), config.buildElasticSearchTableConfig());
+
+      syncController.registerIndexValidator(entitySearchIndexValidator);
+
+      ////
+
+      IndexCleaner index1Cleaner =
+          new ElasticSearchIndexCleaner(nonCachingRestProvider, config.getIndexName(),
+              config.getType(), config.getIpAddress(), config.getHttpPort(), 5, 5000);
+
+      syncController.registerIndexCleaner(index1Cleaner);
+
+      ///
+
+      syncController.performAction(SyncActions.SYNCHRONIZE);
+
+      while (syncController.getState() == SynchronizerState.PERFORMING_SYNCHRONIZATION) {
+        Thread.sleep(1000);
+      }
+
+      syncController.shutdown();
+
+    } catch (Exception exc) {
+      exc.printStackTrace();
+      System.out.println("Error:  Failed to sync with message = " + exc.getMessage());
+    }
+  }
+
+  /**
+   * Do suggestion entitysync.
+   */
+  public void doSuggestionEntitySync() {
+    try {
+      
+
+      ActiveInventoryAdapter aaiAdapter = new ActiveInventoryAdapter(new RestClientBuilder());
+
+      aaiAdapter.setCacheEnabled(true);
+
+      /*
+       * InMemoryEntityCache aaiInMemoryCache = new InMemoryEntityCache();
+       * aaiAdapter.setEntityCache(aaiInMemoryCache);
+       */
+
+      PersistentEntityCache aaiDiskCache = new PersistentEntityCache();
+      aaiAdapter.setEntityCache(aaiDiskCache);
+
+      RestClientBuilder clientBuilder = new RestClientBuilder();
+      clientBuilder.setUseHttps(false);
+
+      RestfulDataAccessor nonCachingRestProvider = new RestfulDataAccessor(clientBuilder);
+      ElasticSearchConfig esConfig = ElasticSearchConfig.getConfig();
+
+      ElasticSearchAdapter esAdapter = new ElasticSearchAdapter(nonCachingRestProvider,esConfig);
+      
+      SyncController syncController = new SyncController("suggestionEntityTestController");
+
+      AutosuggestionSynchronizer ses =
+          new AutosuggestionSynchronizer("suggestionentityindex-localhost");
+      ses.setAaiDataProvider(aaiAdapter);
+      ses.setEsDataProvider(esAdapter);
+      syncController.registerEntitySynchronizer(ses);
+
+      syncController.performAction(SyncActions.SYNCHRONIZE);
+
+      while (syncController.getState() == SynchronizerState.PERFORMING_SYNCHRONIZATION) {
+        Thread.sleep(1000);
+      }
+
+      syncController.shutdown();
+
+    } catch (Exception exc) {
+      exc.printStackTrace();
+      System.out.println("Error:  failed to sync with message = " + exc.getMessage());
+    }
+  }
+  
+  /*
+   * Do no op sync.
+   */
+  public void doNoOpSync() {
+    try {
+      SyncController syncController = new SyncController("noopSyncTestController");
+
+      /*
+       * ActiveInventoryAdapter aaiAdapter = new ActiveInventoryAdapter(new RestClientBuilder());
+       * 
+       * aaiAdapter.setCacheEnabled(true);
+       * 
+       * /*InMemoryEntityCache aaiInMemoryCache = new InMemoryEntityCache();
+       * aaiAdapter.setEntityCache(aaiInMemoryCache);
+       */
+
+      /*
+       * PersistentEntityCache aaiDiskCache = new PersistentEntityCache();
+       * aaiAdapter.setEntityCache(aaiDiskCache);
+       * 
+       * ElasticSearchConfig config = ElasticSearchConfig.getConfig(); OXMModelLoader loader =
+       * OXMModelLoader.getInstance(); SyncAdapter syncAdapter = new SyncAdapter(new
+       * RestClientBuilder(), config, loader);
+       * 
+       * //////
+       * 
+       * SearchableEntitySynchronizer ses = new SearchableEntitySynchronizer();
+       * ses.setAaiDataProvider(aaiAdapter); ses.setEsDataProvider(syncAdapter);
+       * syncController.registerEntitySynchronizer(ses);
+       * 
+       * ////
+       * 
+       * IndexIntegrityValidator entitySearchIndexValidator = new IndexIntegrityValidator(new
+       * RestClientBuilder());
+       * 
+       * entitySearchIndexValidator.setIndexName("esi-sync2-localhost");
+       * entitySearchIndexValidator.setIndexType("default");
+       * entitySearchIndexValidator.setIndexSettings("");
+       * entitySearchIndexValidator.setIndexSettings("");
+       * 
+       * syncController.registerIndexValidator(entitySearchIndexValidator);
+       * 
+       * ////
+       * 
+       * ElasticSearchEntityPurger p1 = new ElasticSearchEntityPurger(new RestClientBuilder());
+       * p1.setIndexName("esi-blal-blah");
+       * 
+       * ElasticSearchEntityPurger p2 = new ElasticSearchEntityPurger(new RestClientBuilder());
+       * p2.setIndexName("esi-topo-blah");
+       */
+      ///
+
+      syncController.performAction(SyncActions.SYNCHRONIZE);
+
+      while (syncController.getState() == SynchronizerState.PERFORMING_SYNCHRONIZATION) {
+        Thread.sleep(1000);
+      }
+
+      syncController.shutdown();
+
+    } catch (Exception exc) {
+      System.out.println("Error:  failed to sync with message = " + exc.getMessage());
+    }
+  }
+
+
+  /**
+   * The main method.
+   *
+   * @param args the arguments
+   */
+  public static void main(String[] args) {
+    boolean runSearchableEntitySync = false;
+    boolean runGeoEntitySync = true;
+
+    System.setProperty("AJSC_HOME", "e:\\dev");
+    // System.getProperties().setProperty("AJSC_HOME",
+    // "c:\\rpo\\tier-support-ui\\target\\swm\\package\\nix\\"
+    // + "dist_files\\opt\\app\\ajsc-tier-support-ui");
+    System.setProperty("AJSC_HOME", "d:\\AAI\\tier_support_ui\\tier-support-ui\\target\\swm\\package\\nix\\dist_files\\appl\\inventory-ui-service\\1.0-SNAPSHOT");
+
+    ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory
+        .getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
+    // root.detachAndStopAllAppenders();
+    // logger = new CaptureLoggerAppender();
+    root.setLevel(Level.INFO);
+    // root.addAppender(logger);
+
+
+    SyncControllerBuilder syncBuilder = new SyncControllerBuilder();
+
+    /*
+     * if (runSearchableEntitySync) syncBuilder.doSearchableEntitysync();
+     */
+
+    //syncBuilder.doSearchableEntitysync();
+    // syncBuilder.doCrossEntityReferenceSync();
+    // syncBuilder.doHistoricalEntitySync();
+    // syncBuilder.doGeoEntitySync();
+    syncBuilder.doSuggestionEntitySync();
+
+    // syncBuilder.testElasticSearchUpdateAPI();
+
+    /*
+     * if (runGeoEntitySync) { syncBuilder.doGeoEntitySync(); }
+     */
+
+
+
+  }
+}