Fix aggregate-vnf search index population
[aai/data-router.git] / src / main / java / org / onap / aai / datarouter / policy / SpikeAggregateGenericVnfProcessor.java
index 76fce7b..c723d2b 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.util.ArrayList;
 import java.util.List;
 
 import org.apache.camel.Exchange;
-import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
 import org.onap.aai.datarouter.entity.SpikeAggregationEntity;
-import org.onap.aai.datarouter.entity.SpikeEventVertex;
+import org.onap.aai.datarouter.entity.SpikeEventMeta;
 import org.onap.aai.datarouter.logging.EntityEventPolicyMsgs;
+import org.onap.aai.util.EntityOxmReferenceHelper;
+import org.onap.aai.util.Version;
+import org.onap.aai.util.VersionedOxmEntities;
 
 import com.fasterxml.jackson.databind.JsonNode;
 
@@ -39,73 +39,58 @@ public class SpikeAggregateGenericVnfProcessor extends AbstractSpikeEntityEventP
 
   public static final String additionalInfo = "Response of SpikeEntityEventPolicy";
 
-  /** Agent for communicating with the Search Service. */
-
   public SpikeAggregateGenericVnfProcessor(SpikeEventPolicyConfig config)
       throws FileNotFoundException {
     super(config);
   }
-  
+
   @Override
   protected void startup() {
     // Create the indexes in the search service if they do not already exist.
     searchAgent.createSearchIndex(searchIndexName, searchIndexSchema, createIndexUrl);
     logger.info(EntityEventPolicyMsgs.ENTITY_EVENT_POLICY_REGISTERED);
+    
   }
-
+  
   @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;
-    }
+
+    SpikeEventMeta meta = processSpikeEvent(exchange);
     
-    String action = getSpikeEventAction(exchange, uebPayload);
-    if (action == null) {
+    if (meta == null) {
       return;
     }
-    SpikeEventVertex eventVertex = populateEventVertex(exchange, uebPayload);
-    if (eventVertex == 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(meta.getSpikeEventVertex().getType());
+    
+    VersionedOxmEntities oxmEntities =
+        EntityOxmReferenceHelper.getInstance().getVersionedOxmEntities(Version.valueOf(oxmVersion.toLowerCase()));
+    
+    List<String> suggestibleAttrInPayload = new ArrayList<>();
+    List<String> suggestibleAttrInOxm = extractSuggestableAttr(oxmEntities, meta.getSpikeEventVertex().getType());
+    if (suggestibleAttrInOxm != null) {
+      for (String attr: suggestibleAttrInOxm){
+        if (meta.getVertexProperties().has(attr)) {
+          suggestibleAttrInPayload.add(attr);
+        }
+      }
     }
-    String oxmEntityType = getOxmEntityType(entityType);
-    List<String> searchableAttr =  getSearchableAttibutes(oxmJaxbContext, oxmEntityType, entityType, uebPayload,
-        exchange);
-    if (searchableAttr == null) {
+
+    if (suggestibleAttrInPayload.isEmpty()) {
       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);
+    JsonNode propertiesNode =
+        mapper.readValue(meta.getVertexProperties().toString(), JsonNode.class);
 
     SpikeAggregationEntity spikeAgregationEntity = new SpikeAggregationEntity();
-    spikeAgregationEntity.setLink(entityLink);
-    spikeAgregationEntity.deriveFields(uebAsJson);
-    handleSearchServiceOperation(spikeAgregationEntity, action, searchIndexName);
+    spikeAgregationEntity.setLink(meta.getSpikeEventVertex().getEntityLink());
+    spikeAgregationEntity.deriveFields(propertiesNode);
+
+    handleSearchServiceOperation(spikeAgregationEntity, meta.getBodyOperationType(),
+        searchIndexName);
 
     long stopTime = System.currentTimeMillis();
     metricsLogger.info(EntityEventPolicyMsgs.OPERATION_RESULT_NO_ERRORS, PROCESS_SPIKE_EVENT,