Fix aggregate-vnf search index population
[aai/data-router.git] / src / main / java / org / onap / aai / datarouter / policy / SpikeAutosuggestIndexProcessor.java
index 7c10fff..c101425 100644 (file)
@@ -2,8 +2,8 @@
  * ============LICENSE_START=======================================================
  * org.onap.aai
  * ================================================================================
- * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
- * Copyright © 2017 Amdocs
+ * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright © 2017-2018 Amdocs
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  * ============LICENSE_END=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  */
 package org.onap.aai.datarouter.policy;
 
 import java.io.FileNotFoundException;
-import java.io.IOException;
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.camel.Exchange;
-import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.onap.aai.datarouter.entity.OxmEntityDescriptor;
-import org.onap.aai.datarouter.entity.SpikeEventVertex;
+import org.onap.aai.datarouter.entity.SpikeEventMeta;
 import org.onap.aai.datarouter.entity.SuggestionSearchEntity;
 import org.onap.aai.datarouter.logging.EntityEventPolicyMsgs;
-import org.onap.aai.datarouter.util.EntityOxmReferenceHelper;
 import org.onap.aai.datarouter.util.SearchSuggestionPermutation;
-import org.onap.aai.datarouter.util.Version;
-import org.onap.aai.datarouter.util.VersionedOxmEntities;
+import org.onap.aai.entity.OxmEntityDescriptor;
+import org.onap.aai.util.EntityOxmReferenceHelper;
+import org.onap.aai.util.Version;
+import org.onap.aai.util.VersionedOxmEntities;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
-
 public class SpikeAutosuggestIndexProcessor extends AbstractSpikeEntityEventProcessor {
 
   public static final String additionalInfo = "Response of SpikeEntityEventPolicy";
 
-  private final String EVENT_VERTEX = "vertex";
-
-  private String oxmVersion = null;
+  private static final String PROCESS_SPIKE_EVENT = "Process Spike Event";
 
+  
   /** Agent for communicating with the Search Service. */
 
   public SpikeAutosuggestIndexProcessor(SpikeEventPolicyConfig config)
       throws FileNotFoundException {
     super(config);
-    parseLatestOxmVersion();
   }
 
   @Override
@@ -73,76 +63,30 @@ public class SpikeAutosuggestIndexProcessor extends AbstractSpikeEntityEventProc
   @Override
   public void process(Exchange exchange) throws Exception {
    
-    long startTime = System.currentTimeMillis();
-    String uebPayload = getExchangeBody(exchange);
-    if (uebPayload == null) {
-      return;
-    }
-    JsonNode uebAsJson = null;
-    try {
-      uebAsJson = mapper.readTree(uebPayload);
-    } catch (IOException e) {
-      returnWithError(exchange, uebPayload, "Invalid Payload");
-      return;
-    }
+  long startTime = System.currentTimeMillis();
     
-    String action = getSpikeEventAction(exchange, uebPayload);
-    if (action == null) {
-      return;
-    }
-    JSONObject uebObjEntity = getUebContentAsJson(uebPayload, EVENT_VERTEX);
-    if (uebObjEntity == null) {
-      returnWithError(exchange, uebPayload, "Payload is missing " + EVENT_VERTEX);
-      return;
-    }
+    SpikeEventMeta meta = processSpikeEvent(exchange);
     
-    SpikeEventVertex eventVertex = populateEventVertex(exchange, uebPayload);
-    if (eventVertex == null) {
+    if ( meta == null ) {
       return;
     }
-    String entityType = getEntityType(exchange, eventVertex, uebPayload);
-    if (entityType == null) {
-      return;
-    }
-    String entityLink = getEntityLink(exchange, eventVertex, uebPayload);
-    if (entityLink == null) {
-      return;
-    }
-    DynamicJAXBContext oxmJaxbContext = readOxm(exchange, uebPayload);
-    if (oxmJaxbContext == null) {
-      return;
-    }
-    String oxmEntityType = getOxmEntityType(entityType);
-    List<String> searchableAttr =  getSearchableAttibutes(oxmJaxbContext, oxmEntityType, entityType, uebPayload,
-        exchange);
-    if (searchableAttr == null) {
-      return;
-    }    
-   
-    // log the fact that all data are in good shape
-    logger.info(EntityEventPolicyMsgs.PROCESS_ENTITY_EVENT_POLICY_NONVERBOSE, action, entityType);
-    logger.debug(EntityEventPolicyMsgs.PROCESS_ENTITY_EVENT_POLICY_VERBOSE, action, entityType,
-        uebPayload);
-    
-        
     /*
      * Use the versioned OXM Entity class to get access to cross-entity reference helper collections
      */
     VersionedOxmEntities oxmEntities =
-        EntityOxmReferenceHelper.getInstance().getVersionedOxmEntities(Version.valueOf(oxmVersion));
+        EntityOxmReferenceHelper.getInstance().getVersionedOxmEntities(Version.valueOf(oxmVersion.toLowerCase()));
     
-    /*
-     * Process for autosuggestable entities
-     */
     if (oxmEntities != null) {
       Map<String, OxmEntityDescriptor> rootDescriptor =
           oxmEntities.getSuggestableEntityDescriptors();
       if (!rootDescriptor.isEmpty()) {
         List<String> suggestibleAttrInPayload = new ArrayList<>();
-        List<String> suggestibleAttrInOxm = extractSuggestableAttr(oxmEntities, entityType);
+        List<String> suggestibleAttrInOxm =
+            extractSuggestableAttr(oxmEntities, meta.getSpikeEventVertex().getType());
         if (suggestibleAttrInOxm != null) {
-          for (String attr: suggestibleAttrInOxm){
-            if ( uebAsJson.get("vertex").get("properties").has(attr) ){
+          for (String attr : suggestibleAttrInOxm) {
+            if (meta.getVertexProperties().has(attr)) {
               suggestibleAttrInPayload.add(attr);
             }
           }
@@ -151,24 +95,26 @@ public class SpikeAutosuggestIndexProcessor extends AbstractSpikeEntityEventProc
         if (suggestibleAttrInPayload.isEmpty()) {
           return;
         }
-        List<String> suggestionAliases = extractAliasForSuggestableEntity(oxmEntities, entityType);       
+        List<String> suggestionAliases = extractAliasForSuggestableEntity(oxmEntities,  meta.getSpikeEventVertex().getType());       
 
         /*
          * It was decided to silently ignore DELETE requests for resources we don't allow to be
          * deleted. e.g. auto-suggestion deletion is not allowed while aggregation deletion is.
          */
-        if (!ACTION_DELETE.equalsIgnoreCase(action)) {
+        if (!DELETE.equalsIgnoreCase(meta.getBodyOperationType())) {
           List<ArrayList<String>> listOfValidPowerSetElements =
               SearchSuggestionPermutation.getNonEmptyUniqueLists(suggestibleAttrInPayload);
-
+          
+          JsonNode propertiesNode = mapper.readValue(meta.getVertexProperties().toString(), JsonNode.class);
+          
           // Now we have a list containing the power-set (minus empty element) for the status that are
           // available in the payload. Try inserting a document for every combination.
           for (ArrayList<String> list : listOfValidPowerSetElements) {
             SuggestionSearchEntity suggestionSearchEntity = new SuggestionSearchEntity();
-            suggestionSearchEntity.setEntityType(entityType);
+            suggestionSearchEntity.setEntityType(meta.getSpikeEventVertex().getType());
             suggestionSearchEntity.setSuggestableAttr(list);
             suggestionSearchEntity.setEntityTypeAliases(suggestionAliases);
-            suggestionSearchEntity.setFilterBasedPayloadFromResponse(uebAsJson.get("vertex").get("properties"),
+            suggestionSearchEntity.setFilterBasedPayloadFromResponse(propertiesNode,
                 suggestibleAttrInOxm, list);
             suggestionSearchEntity.setSuggestionInputPermutations(
                 suggestionSearchEntity.generateSuggestionInputPermutations());
@@ -182,7 +128,7 @@ public class SpikeAutosuggestIndexProcessor extends AbstractSpikeEntityEventProc
                         + e.getLocalizedMessage());
               }
 
-              handleSearchServiceOperation(suggestionSearchEntity, action, searchIndexName);
+              handleSearchServiceOperation(suggestionSearchEntity, meta.getBodyOperationType(), searchIndexName);
             }
           }
         }
@@ -194,24 +140,7 @@ public class SpikeAutosuggestIndexProcessor extends AbstractSpikeEntityEventProc
     setResponse(exchange, ResponseType.SUCCESS, additionalInfo);
     return;
   }
-
-  public List<String> extractSuggestableAttr(VersionedOxmEntities oxmEntities, String entityType) {
-    // Extract suggestable attributeshandleTopographicalData
-    Map<String, OxmEntityDescriptor> rootDescriptor = oxmEntities.getSuggestableEntityDescriptors();
-
-    if (rootDescriptor == null) {
-      return Collections.emptyList();
-    }
-
-    OxmEntityDescriptor desc = rootDescriptor.get(entityType);
-
-    if (desc == null) {
-      return Collections.emptyList();
-    }
-
-    return desc.getSuggestableAttributes();
-  }
-
 
   public List<String> extractAliasForSuggestableEntity(VersionedOxmEntities oxmEntities,
       String entityType) {
@@ -227,28 +156,4 @@ public class SpikeAutosuggestIndexProcessor extends AbstractSpikeEntityEventProc
     return desc.getAlias();
   }
 
-  private void parseLatestOxmVersion() {
-    int latestVersion = -1;
-    if (oxmVersionContextMap != null) {
-      Iterator it = oxmVersionContextMap.entrySet().iterator();
-      while (it.hasNext()) {
-        Map.Entry pair = (Map.Entry) it.next();
-
-        String version = pair.getKey().toString();
-        int versionNum = Integer.parseInt(version.substring(1, version.length()));
-
-        if (versionNum > latestVersion) {
-          latestVersion = versionNum;
-          oxmVersion = pair.getKey().toString();
-        }
-
-        logger.info(EntityEventPolicyMsgs.PROCESS_OXM_MODEL_FOUND, pair.getKey().toString());
-      }
-    } else {
-      logger.error(EntityEventPolicyMsgs.PROCESS_OXM_MODEL_MISSING, "");
-    }
-  }
-  
-  
-
 }