Prefer default field if available
[aai/data-router.git] / src / main / java / org / onap / aai / datarouter / policy / AbstractSpikeEntityEventProcessor.java
index 50d344b..08ebd77 100644 (file)
@@ -26,7 +26,6 @@ import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -43,6 +42,7 @@ 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.datarouter.util.DataRouterProperties;
 import org.onap.aai.schema.OxmModelLoader;
 import org.onap.aai.datarouter.entity.DocumentStoreDataEntity;
 import org.onap.aai.datarouter.entity.SpikeEventEntity;
@@ -59,6 +59,7 @@ 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 +82,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 +112,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 +130,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();
   }
@@ -460,6 +462,10 @@ public abstract class AbstractSpikeEntityEventProcessor implements Processor {
 
   private String getEntityPrimaryKeyFieldName(DynamicJAXBContext oxmJaxbContext,
       String oxmEntityType, String entityType) {
+    String defaultKey = DataRouterProperties.get("entity.primary.field");
+    if (defaultKey != null) {
+      return defaultKey;
+    }
 
     DynamicType entity = oxmJaxbContext.getDynamicType(oxmEntityType);
     if (entity == null) {
@@ -744,7 +750,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 + "'.");
 
       /*
@@ -766,22 +772,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);
 
@@ -789,12 +806,7 @@ 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;
     }
 
@@ -814,12 +826,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;
     }
     
@@ -831,49 +838,28 @@ public abstract class AbstractSpikeEntityEventProcessor implements Processor {
     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;
     }
 
@@ -906,21 +892,4 @@ public abstract class AbstractSpikeEntityEventProcessor implements Processor {
 
   }
   
-  protected 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();
-  }
-  
 }