Fixed issue with spike events for "relationship"
[aai/data-router.git] / src / main / java / org / onap / aai / datarouter / policy / AbstractSpikeEntityEventProcessor.java
index 6d04ed6..4aad6f2 100644 (file)
@@ -33,7 +33,6 @@ import java.util.Map;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
-import org.apache.http.conn.routing.RouteInfo.LayerType;
 import org.eclipse.persistence.dynamic.DynamicType;
 import org.eclipse.persistence.internal.helper.DatabaseField;
 import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
@@ -43,22 +42,23 @@ import org.json.JSONObject;
 import org.onap.aai.cl.api.Logger;
 import org.onap.aai.cl.eelf.LoggerFactory;
 import org.onap.aai.cl.mdc.MdcContext;
+import org.onap.aai.schema.OxmModelLoader;
 import org.onap.aai.datarouter.entity.DocumentStoreDataEntity;
-import org.onap.aai.datarouter.entity.OxmEntityDescriptor;
 import org.onap.aai.datarouter.entity.SpikeEventEntity;
 import org.onap.aai.datarouter.entity.SpikeEventMeta;
 import org.onap.aai.datarouter.entity.SpikeEventVertex;
 import org.onap.aai.datarouter.logging.EntityEventPolicyMsgs;
-import org.onap.aai.datarouter.util.EntityOxmReferenceHelper;
-import org.onap.aai.datarouter.util.ExternalOxmModelProcessor;
-import org.onap.aai.datarouter.util.OxmModelLoader;
 import org.onap.aai.datarouter.util.RouterServiceUtil;
 import org.onap.aai.datarouter.util.SearchServiceAgent;
-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.ExternalOxmModelProcessor;
+import org.onap.aai.util.Version;
+import org.onap.aai.util.VersionedOxmEntities;
 import org.onap.aai.restclient.client.Headers;
 import org.onap.aai.restclient.client.OperationResult;
 import org.onap.aai.restclient.rest.HttpUtil;
+import org.onap.aai.setup.SchemaVersions;
 import org.slf4j.MDC;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -81,6 +81,8 @@ public abstract class AbstractSpikeEntityEventProcessor implements Processor {
   protected static final String BODY_KEY = "body";
   protected static final String OPERATION_KEY = "operation";
   
+  protected static final String EDGE_KEY = "relationship";
+  
   protected static final String VERTEX_KEY = "vertex";
   protected static final String VERTEX_PROPERTIES_KEY = "properties";
   protected static final String VERTEX_KEY_KEY = "key";
@@ -109,8 +111,7 @@ public abstract class AbstractSpikeEntityEventProcessor implements Processor {
   protected Logger logger;
   protected Logger metricsLogger;
   protected ObjectMapper mapper;
-
-
+  
   public AbstractSpikeEntityEventProcessor(SpikeEventPolicyConfig config)
       throws FileNotFoundException {
     mapper = new ObjectMapper();
@@ -128,7 +129,7 @@ public abstract class AbstractSpikeEntityEventProcessor implements Processor {
     this.externalOxmModelProcessors = new ArrayList<>();
     this.externalOxmModelProcessors.add(EntityOxmReferenceHelper.getInstance());
     OxmModelLoader.registerExternalOxmModelProcessors(externalOxmModelProcessors);
-    OxmModelLoader.loadModels();
+    OxmModelLoader.loadModels(config.getSchemaVersions(), config.getSchemaLocationsBean());
     oxmVersionContextMap = OxmModelLoader.getVersionContextMap();
     parseLatestOxmVersion();
   }
@@ -295,7 +296,7 @@ public abstract class AbstractSpikeEntityEventProcessor implements Processor {
   }
 
   protected DynamicJAXBContext readOxm(Exchange exchange, String uebPayload) {
-    DynamicJAXBContext oxmJaxbContext = loadOxmContext(oxmVersion.toLowerCase());
+    DynamicJAXBContext oxmJaxbContext = loadOxmContext(oxmVersion);
     if (oxmJaxbContext == null) {
       logger.error(EntityEventPolicyMsgs.OXM_VERSION_NOT_SUPPORTED, oxmVersion);
       logger.debug(EntityEventPolicyMsgs.DISCARD_EVENT_VERBOSE, "OXM version mismatch", uebPayload);
@@ -407,13 +408,7 @@ public abstract class AbstractSpikeEntityEventProcessor implements Processor {
 
 
  protected String getOxmEntityType(String entityType) {
-
-   String[] entityTypeArr = entityType.split("-");
-   String oxmEntityType = "";
-   for (String entityWord : entityTypeArr) {
-     oxmEntityType += entityWord.substring(0, 1).toUpperCase() + entityWord.substring(1);
-   }
-   return oxmEntityType;
+   return new OxmEntityTypeConverter().convert(entityType);
  }
  
  protected List<String> getSearchableAttibutes(DynamicJAXBContext oxmJaxbContext, String oxmEntityType,
@@ -539,7 +534,7 @@ public abstract class AbstractSpikeEntityEventProcessor implements Processor {
   private List<String> getOxmAttributes(DynamicJAXBContext oxmJaxbContext, String oxmEntityType,
       String entityType, String fieldName) {
 
-    DynamicType entity = (DynamicType) oxmJaxbContext.getDynamicType(oxmEntityType);
+    DynamicType entity = oxmJaxbContext.getDynamicType(oxmEntityType);
     if (entity == null) {
       return null;
     }
@@ -750,7 +745,7 @@ public abstract class AbstractSpikeEntityEventProcessor implements Processor {
       // drop event
       logger.debug(EntityEventPolicyMsgs.DISCARD_EVENT_VERBOSE, "Ignoring event with sourceName='"
           + sourceName + "' and eventType='" + eventType + "'.  Payload=" + eventPayload);
-      logger.error(EntityEventPolicyMsgs.DISCARD_EVENT_NONVERBOSE,
+      logger.info(EntityEventPolicyMsgs.DISCARD_EVENT_NONVERBOSE,
           "Ignoring event with sourceName='" + sourceName + "' and eventType='" + eventType + "'.");
 
       /*
@@ -772,22 +767,33 @@ public abstract class AbstractSpikeEntityEventProcessor implements Processor {
 
     String action = eventBody.getString(OPERATION_KEY);
     if (action == null || !SUPPORTED_ACTIONS.contains(action.toLowerCase())) {
-      logger.debug(EntityEventPolicyMsgs.DISCARD_EVENT_VERBOSE,
-          "Unrecognized action '" + action + "'", eventPayload);
-      logger.error(EntityEventPolicyMsgs.DISCARD_EVENT_NONVERBOSE,
-          "Unrecognized action '" + action + "'");
-      setResponse(exchange, ResponseType.FAILURE, additionalInfo);
+      returnWithError(exchange, eventPayload, "Unrecognized action '" + action + "'");
       return null;
     }
     meta.setBodyOperationType(action);
 
-    // Load the event body data, any errors will result in a failure and discard
+    
+    /*
+     * Ignore spike events for edges
+     */
+    if (eventBody.has(EDGE_KEY)){
+      logger.debug(EntityEventPolicyMsgs.DISCARD_EVENT_VERBOSE, "Ignoring event for edge with sourceName='"
+          + sourceName + "' and eventType='" + eventType + "'.  Payload=" + eventPayload);
+      logger.info(EntityEventPolicyMsgs.DISCARD_EVENT_NONVERBOSE,
+          "Ignoring event for edge with sourceName='" + sourceName + "' and eventType='" + eventType + "'.");
+      setResponse(exchange, ResponseType.SUCCESS, additionalInfo);
+      return null;      
+    }
 
-    JSONObject spikeVertex = eventBody.getJSONObject(VERTEX_KEY);
-    if (spikeVertex == null) {
+    
+    // Load the event body data, any errors will result in a failure and discard
+    JSONObject spikeVertex = null;
+    try {
+      spikeVertex = eventBody.getJSONObject(VERTEX_KEY);
+    } catch (JSONException exc) {
       returnWithError(exchange, eventPayload, "Payload is missing " + VERTEX_KEY);
       return null;
-    }
+    }    
 
     meta.setSpikeVertex(spikeVertex);
 
@@ -795,18 +801,13 @@ public abstract class AbstractSpikeEntityEventProcessor implements Processor {
     try {
       spikeEventVertex = initializeSpikeEventVertex(spikeVertex);
     } catch (JSONException exc) {
-      logger.debug(EntityEventPolicyMsgs.DISCARD_EVENT_VERBOSE,
-          "Error initializating spike event.  Error: " + exc.getMessage(), eventPayload);
-      logger.error(EntityEventPolicyMsgs.DISCARD_EVENT_NONVERBOSE,
-          "Error initializating spike event.  Error: " + exc.getMessage());
-
-      setResponse(exchange, ResponseType.FAILURE, additionalInfo);
+      returnWithError(exchange, eventPayload, "Error initializating spike event.  Error: " + exc.getMessage());
       return null;
     }
 
     meta.setSpikeEventVertex(spikeEventVertex);
 
-    DynamicJAXBContext oxmJaxbContext = loadOxmContext(oxmVersion.toLowerCase());
+    DynamicJAXBContext oxmJaxbContext = loadOxmContext(oxmVersion);
     if (oxmJaxbContext == null) {
       logger.error(EntityEventPolicyMsgs.OXM_VERSION_NOT_SUPPORTED, oxmVersion);
       logger.debug(EntityEventPolicyMsgs.DISCARD_EVENT_VERBOSE, "OXM version mismatch",
@@ -820,12 +821,7 @@ public abstract class AbstractSpikeEntityEventProcessor implements Processor {
 
     String entityType = spikeEventVertex.getType();
     if (entityType == null || entityType.isEmpty()) {
-      logger.debug(EntityEventPolicyMsgs.DISCARD_EVENT_VERBOSE,
-          "Payload header missing entity type", eventPayload);
-      logger.error(EntityEventPolicyMsgs.DISCARD_EVENT_NONVERBOSE,
-          "Payload header missing entity type");
-
-      setResponse(exchange, ResponseType.FAILURE, additionalInfo);
+      returnWithError(exchange, eventPayload, "Payload vertex missing entity type");
       return null;
     }
     
@@ -834,52 +830,31 @@ public abstract class AbstractSpikeEntityEventProcessor implements Processor {
      */
 
     VersionedOxmEntities oxmEntities =
-    EntityOxmReferenceHelper.getInstance().getVersionedOxmEntities(Version.valueOf(oxmVersion));
+    EntityOxmReferenceHelper.getInstance().getVersionedOxmEntities(Version.valueOf(oxmVersion.toLowerCase()));
     
     if (oxmEntities != null && !oxmEntities.getEntityTypeLookup().containsKey(entityType)) {
-      logger.debug(EntityEventPolicyMsgs.DISCARD_EVENT_VERBOSE, "No matching OXM Descriptor for entity-type='" + entityType + "'",
-          eventPayload);
-      logger.error(EntityEventPolicyMsgs.DISCARD_EVENT_NONVERBOSE,
-          "No matching OXM Descriptor for entity-type='" + entityType + "'");
-
-      setResponse(exchange, ResponseType.FAILURE, additionalInfo);
+      returnWithError(exchange, eventPayload, "No matching OXM Descriptor for entity-type='" + entityType + "'");
       return null;
     }
 
     
     String entityKey = spikeEventVertex.getKey();
     if (entityKey == null || entityKey.isEmpty()) {
-      logger.debug(EntityEventPolicyMsgs.DISCARD_EVENT_VERBOSE, "Payload vertex missing entity key",
-          eventPayload);
-      logger.error(EntityEventPolicyMsgs.DISCARD_EVENT_NONVERBOSE,
-          "Payload vertex missing entity key");
-
-      setResponse(exchange, ResponseType.FAILURE, additionalInfo);
+      returnWithError(exchange, eventPayload, "Payload vertex missing entity key");
       return null;
     }
+
     String entityLink = spikeEventVertex.getEntityLink();
     if (entityLink == null || entityLink.isEmpty()) {
-      logger.debug(EntityEventPolicyMsgs.DISCARD_EVENT_VERBOSE,
-          "Payload header missing entity link", eventPayload);
-      logger.error(EntityEventPolicyMsgs.DISCARD_EVENT_NONVERBOSE,
-          "Payload header missing entity link");
-
-      setResponse(exchange, ResponseType.FAILURE, additionalInfo);
+      returnWithError(exchange, eventPayload, "Payload vertex missing entity link");
       return null;
     }
 
     JSONObject vertexProperties = null;
     try {
-
       vertexProperties = spikeVertex.getJSONObject(VERTEX_PROPERTIES_KEY);
-
     } catch (JSONException exc) {
-      logger.debug(EntityEventPolicyMsgs.DISCARD_EVENT_VERBOSE,
-          "Payload header missing " + VERTEX_PROPERTIES_KEY, eventPayload);
-      logger.error(EntityEventPolicyMsgs.DISCARD_EVENT_NONVERBOSE,
-          "Payload header missing " + VERTEX_PROPERTIES_KEY);
-
-      setResponse(exchange, ResponseType.FAILURE, additionalInfo);
+      returnWithError(exchange, eventPayload, "Payload vertex missing " + VERTEX_PROPERTIES_KEY);
       return null;
     }