summaryrefslogtreecommitdiffstats
path: root/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/event/impl/jsonprotocolplugin/Apex2JSONEventConverter.java
diff options
context:
space:
mode:
Diffstat (limited to 'services/services-engine/src/main/java/org/onap/policy/apex/service/engine/event/impl/jsonprotocolplugin/Apex2JSONEventConverter.java')
-rw-r--r--services/services-engine/src/main/java/org/onap/policy/apex/service/engine/event/impl/jsonprotocolplugin/Apex2JSONEventConverter.java188
1 files changed, 101 insertions, 87 deletions
diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/event/impl/jsonprotocolplugin/Apex2JSONEventConverter.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/event/impl/jsonprotocolplugin/Apex2JSONEventConverter.java
index 3b21a29ca..223843631 100644
--- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/event/impl/jsonprotocolplugin/Apex2JSONEventConverter.java
+++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/event/impl/jsonprotocolplugin/Apex2JSONEventConverter.java
@@ -43,8 +43,8 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
/**
- * The Class Apex2JSONEventConverter converts {@link ApexEvent} instances to and from JSON string
- * representations of Apex events.
+ * The Class Apex2JSONEventConverter converts {@link ApexEvent} instances to and from JSON string representations of
+ * Apex events.
*
* @author Liam Fallon (liam.fallon@ericsson.com)
*/
@@ -57,8 +57,7 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
/*
* (non-Javadoc)
*
- * @see
- * org.onap.policy.apex.service.engine.event.ApexEventProtocolConverter#init(org.onap.policy.
+ * @see org.onap.policy.apex.service.engine.event.ApexEventProtocolConverter#init(org.onap.policy.
* apex.service.parameters.eventprotocol.EventProtocolParameters)
*/
@Override
@@ -76,9 +75,7 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
/*
* (non-Javadoc)
*
- * @see
- * org.onap.policy.apex.service.engine.event.ApexEventConverter#toApexEvent(java.lang.String,
- * java.lang.Object)
+ * @see org.onap.policy.apex.service.engine.event.ApexEventConverter#toApexEvent(java.lang.String, java.lang.Object)
*/
@Override
public List<ApexEvent> toApexEvent(final String eventName, final Object eventObject) throws ApexEventException {
@@ -100,12 +97,12 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
}
// The list of events we will return
- final List<ApexEvent> eventList = new ArrayList<ApexEvent>();
+ final List<ApexEvent> eventList = new ArrayList<>();
try {
// We may have a single JSON object with a single event or an array of JSON objects
- final Object decodedJsonObject =
- new GsonBuilder().serializeNulls().create().fromJson(jsonEventString, Object.class);
+ final Object decodedJsonObject = new GsonBuilder().serializeNulls().create().fromJson(jsonEventString,
+ Object.class);
// Check if we have a list of objects
if (decodedJsonObject instanceof List) {
@@ -121,15 +118,15 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
eventList.add(jsonObject2ApexEvent(eventName, (JsonObject) jsonListObject));
} else {
throw new ApexEventException("incoming event (" + jsonEventString
- + ") is a JSON object array containing an invalid object " + jsonListObject);
+ + ") is a JSON object array containing an invalid object " + jsonListObject);
}
}
} else {
eventList.add(jsonStringApexEvent(eventName, jsonEventString));
}
} catch (final Exception e) {
- final String errorString =
- "Failed to unmarshal JSON event: " + e.getMessage() + ", event=" + jsonEventString;
+ final String errorString = "Failed to unmarshal JSON event: " + e.getMessage() + ", event="
+ + jsonEventString;
LOGGER.warn(errorString, e);
throw new ApexEventException(errorString, e);
}
@@ -141,8 +138,7 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
/*
* (non-Javadoc)
*
- * @see
- * org.onap.policy.apex.service.engine.event.ApexEventConverter#fromApexEvent(org.onap.policy.
+ * @see org.onap.policy.apex.service.engine.event.ApexEventConverter#fromApexEvent(org.onap.policy.
* apex.service.engine.event.ApexEvent)
*/
@Override
@@ -154,8 +150,8 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
}
// Get the event definition for the event from the model service
- final AxEvent eventDefinition =
- ModelService.getModel(AxEvents.class).get(apexEvent.getName(), apexEvent.getVersion());
+ final AxEvent eventDefinition = ModelService.getModel(AxEvents.class).get(apexEvent.getName(),
+ apexEvent.getVersion());
// Use a GSON Json object to marshal the Apex event to JSON
final Gson gson = new GsonBuilder().serializeNulls().setPrettyPrinting().create();
@@ -177,7 +173,7 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
if (!apexEvent.containsKey(fieldName)) {
if (!eventField.getOptional()) {
final String errorMessage = "error parsing " + eventDefinition.getID() + " event to Json. "
- + "Field \"" + fieldName + "\" is missing, but is mandatory. Fields: " + apexEvent;
+ + "Field \"" + fieldName + "\" is missing, but is mandatory. Fields: " + apexEvent;
LOGGER.debug(errorMessage);
throw new ApexEventRuntimeException(errorMessage);
}
@@ -187,9 +183,9 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
final Object fieldValue = apexEvent.get(fieldName);
// Get the schema helper
- final SchemaHelper fieldSchemaHelper =
- new SchemaHelperFactory().createSchemaHelper(eventField.getKey(), eventField.getSchema());
- jsonObject.add(fieldName, fieldSchemaHelper.marshal2JsonElement(fieldValue));
+ final SchemaHelper fieldSchemaHelper = new SchemaHelperFactory().createSchemaHelper(eventField.getKey(),
+ eventField.getSchema());
+ jsonObject.add(fieldName, (JsonElement)fieldSchemaHelper.marshal2Object(fieldValue));
}
// Output JSON string in a pretty format
@@ -199,20 +195,23 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
/**
* This method converts a JSON object into an Apex event.
*
- * @param eventName the name of the event
- * @param jsonEventString the JSON string that holds the event
+ * @param eventName
+ * the name of the event
+ * @param jsonEventString
+ * the JSON string that holds the event
* @return the apex event that we have converted the JSON object into
- * @throws ApexEventException thrown on unmarshaling exceptions
+ * @throws ApexEventException
+ * thrown on unmarshaling exceptions
*/
private ApexEvent jsonStringApexEvent(final String eventName, final String jsonEventString)
- throws ApexEventException {
+ throws ApexEventException {
// Use GSON to read the event string
- final JsonObject jsonObject =
- new GsonBuilder().serializeNulls().create().fromJson(jsonEventString, JsonObject.class);
+ final JsonObject jsonObject = new GsonBuilder().serializeNulls().create().fromJson(jsonEventString,
+ JsonObject.class);
if (jsonObject == null || !jsonObject.isJsonObject()) {
throw new ApexEventException(
- "incoming event (" + jsonEventString + ") is not a JSON object or an JSON object array");
+ "incoming event (" + jsonEventString + ") is not a JSON object or an JSON object array");
}
return jsonObject2ApexEvent(eventName, jsonObject);
@@ -221,19 +220,22 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
/**
* This method converts a JSON object into an Apex event.
*
- * @param eventName the name of the event
- * @param jsonObject the JSON object that holds the event
+ * @param eventName
+ * the name of the event
+ * @param jsonObject
+ * the JSON object that holds the event
* @return the apex event that we have converted the JSON object into
- * @throws ApexEventException thrown on unmarshaling exceptions
+ * @throws ApexEventException
+ * thrown on unmarshaling exceptions
*/
private ApexEvent jsonObject2ApexEvent(final String eventName, final JsonObject jsonObject)
- throws ApexEventException {
+ throws ApexEventException {
// Process the mandatory Apex header
final ApexEvent apexEvent = processApexEventHeader(eventName, jsonObject);
// Get the event definition for the event from the model service
- final AxEvent eventDefinition =
- ModelService.getModel(AxEvents.class).get(apexEvent.getName(), apexEvent.getVersion());
+ final AxEvent eventDefinition = ModelService.getModel(AxEvents.class).get(apexEvent.getName(),
+ apexEvent.getVersion());
// Iterate over the input fields in the event
for (final AxField eventField : eventDefinition.getFields()) {
@@ -241,7 +243,7 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
if (!hasJSONField(jsonObject, fieldName)) {
if (!eventField.getOptional()) {
final String errorMessage = "error parsing " + eventDefinition.getID() + " event from Json. "
- + "Field \"" + fieldName + "\" is missing, but is mandatory.";
+ + "Field \"" + fieldName + "\" is missing, but is mandatory.";
LOGGER.debug(errorMessage);
throw new ApexEventException(errorMessage);
}
@@ -252,8 +254,8 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
if (fieldValue != null && !fieldValue.isJsonNull()) {
// Get the schema helper
- final SchemaHelper fieldSchemaHelper =
- new SchemaHelperFactory().createSchemaHelper(eventField.getKey(), eventField.getSchema());
+ final SchemaHelper fieldSchemaHelper = new SchemaHelperFactory().createSchemaHelper(eventField.getKey(),
+ eventField.getSchema());
apexEvent.put(fieldName, fieldSchemaHelper.createNewInstance(fieldValue));
} else {
apexEvent.put(fieldName, null);
@@ -266,48 +268,48 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
/**
* This method processes the event header of an Apex event.
*
- * @param eventName the name of the event
- * @param jsonObject the JSON object containing the JSON representation of the incoming event
+ * @param eventName
+ * the name of the event
+ * @param jsonObject
+ * the JSON object containing the JSON representation of the incoming event
* @return an apex event constructed using the header fields of the event
- * @throws ApexEventRuntimeException the apex event runtime exception
- * @throws ApexEventException on invalid events with missing header fields
+ * @throws ApexEventRuntimeException
+ * the apex event runtime exception
+ * @throws ApexEventException
+ * on invalid events with missing header fields
*/
private ApexEvent processApexEventHeader(final String eventName, final JsonObject jsonObject)
- throws ApexEventRuntimeException, ApexEventException {
+ throws ApexEventException {
// Get the event header fields
- // @formatter:off
- String name = getJSONStringField(jsonObject, ApexEvent.NAME_HEADER_FIELD, jsonPars.getNameAlias(), ApexEvent.NAME_REGEXP, false);
- String version = getJSONStringField(jsonObject, ApexEvent.VERSION_HEADER_FIELD, jsonPars.getVersionAlias(), ApexEvent.VERSION_REGEXP, false);
- String namespace = getJSONStringField(jsonObject, ApexEvent.NAMESPACE_HEADER_FIELD, jsonPars.getNameSpaceAlias(), ApexEvent.NAMESPACE_REGEXP, false);
- String source = getJSONStringField(jsonObject, ApexEvent.SOURCE_HEADER_FIELD, jsonPars.getSourceAlias(), ApexEvent.SOURCE_REGEXP, false);
- String target = getJSONStringField(jsonObject, ApexEvent.TARGET_HEADER_FIELD, jsonPars.getTargetAlias(), ApexEvent.TARGET_REGEXP, false);
- // @formatter:on
+ // @formatter:off
+ String name = getJSONStringField(jsonObject, ApexEvent.NAME_HEADER_FIELD, jsonPars.getNameAlias(), ApexEvent.NAME_REGEXP, false);
+ String version = getJSONStringField(jsonObject, ApexEvent.VERSION_HEADER_FIELD, jsonPars.getVersionAlias(), ApexEvent.VERSION_REGEXP, false);
+ String namespace = getJSONStringField(jsonObject, ApexEvent.NAMESPACE_HEADER_FIELD, jsonPars.getNameSpaceAlias(), ApexEvent.NAMESPACE_REGEXP, false);
+ String source = getJSONStringField(jsonObject, ApexEvent.SOURCE_HEADER_FIELD, jsonPars.getSourceAlias(), ApexEvent.SOURCE_REGEXP, false);
+ String target = getJSONStringField(jsonObject, ApexEvent.TARGET_HEADER_FIELD, jsonPars.getTargetAlias(), ApexEvent.TARGET_REGEXP, false);
+ // @formatter:on
+
+ // Check that an event name has been specified
+ if (name == null && eventName == null) {
+ throw new ApexEventRuntimeException(
+ "event received without mandatory parameter \"name\" on configuration or on event");
+ }
// Check if an event name was specified on the event parameters
if (eventName != null) {
if (name != null && !eventName.equals(name)) {
- LOGGER.warn("The incoming event name \"" + name + "\" does not match the configured event name \""
- + eventName + "\", using configured event name");
+ LOGGER.warn("The incoming event name \"{}\" does not match the configured event name \"{}\", using configured event name",
+ name, eventName);
}
name = eventName;
- } else {
- if (name == null) {
- throw new ApexEventRuntimeException(
- "event received without mandatory parameter \"name\" on configuration or on event");
- }
}
// Now, find the event definition in the model service. If version is null, the newest event
// definition in the model service is used
final AxEvent eventDefinition = ModelService.getModel(AxEvents.class).get(name, version);
if (eventDefinition == null) {
- if (version == null) {
- throw new ApexEventRuntimeException(
- "an event definition for an event named \"" + name + "\" not found in Apex model");
- } else {
- throw new ApexEventRuntimeException("an event definition for an event named \"" + name
- + "\" with version \"" + version + "\" not found in Apex model");
- }
+ throw new ApexEventRuntimeException("an event definition for an event named \"" + name
+ + "\" with version \"" + version + "\" not found in Apex model");
}
// Use the defined event version if no version is specified on the incoming fields
@@ -318,9 +320,9 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
// Check the name space is OK if it is defined, if not, use the name space from the model
if (namespace != null) {
if (!namespace.equals(eventDefinition.getNameSpace())) {
- throw new ApexEventRuntimeException(
- "namespace \"" + namespace + "\" on event \"" + name + "\" does not match namespace \""
- + eventDefinition.getNameSpace() + "\" for that event in the Apex model");
+ throw new ApexEventRuntimeException("namespace \"" + namespace + "\" on event \"" + name
+ + "\" does not match namespace \"" + eventDefinition.getNameSpace()
+ + "\" for that event in the Apex model");
}
} else {
namespace = eventDefinition.getNameSpace();
@@ -342,17 +344,22 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
/**
* This method gets an event string field from a JSON object.
*
- * @param jsonObject the JSON object containing the JSON representation of the incoming event
- * @param fieldName the field name to find in the event
- * @param fieldAlias the alias for the field to find in the event, overrides the field name if
- * it is not null
- * @param fieldRE the regular expression to check the field against for validity
- * @param mandatory true if the field is mandatory
+ * @param jsonObject
+ * the JSON object containing the JSON representation of the incoming event
+ * @param fieldName
+ * the field name to find in the event
+ * @param fieldAlias
+ * the alias for the field to find in the event, overrides the field name if it is not null
+ * @param fieldRE
+ * the regular expression to check the field against for validity
+ * @param mandatory
+ * true if the field is mandatory
* @return the value of the field in the JSON object or null if the field is optional
- * @throws ApexEventRuntimeException the apex event runtime exception
+ * @throws ApexEventRuntimeException
+ * the apex event runtime exception
*/
private String getJSONStringField(final JsonObject jsonObject, final String fieldName, final String fieldAlias,
- final String fieldRE, final boolean mandatory) throws ApexEventRuntimeException {
+ final String fieldRE, final boolean mandatory) {
// Get the JSON field for the string field
final JsonElement jsonField = getJSONField(jsonObject, fieldName, fieldAlias, mandatory);
@@ -368,7 +375,7 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
} catch (final Exception e) {
// The element is not a string so throw an error
throw new ApexEventRuntimeException("field \"" + fieldName + "\" with type \""
- + jsonField.getClass().getCanonicalName() + "\" is not a string value");
+ + jsonField.getClass().getCanonicalName() + "\" is not a string value");
}
// Is regular expression checking required
@@ -379,7 +386,7 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
// Check the event field against its regular expression
if (!fieldValueString.matches(fieldRE)) {
throw new ApexEventRuntimeException(
- "field \"" + fieldName + "\" with value \"" + fieldValueString + "\" is invalid");
+ "field \"" + fieldName + "\" with value \"" + fieldValueString + "\" is invalid");
}
return fieldValueString;
@@ -388,16 +395,20 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
/**
* This method gets an event field from a JSON object.
*
- * @param jsonObject the JSON object containing the JSON representation of the incoming event
- * @param fieldName the field name to find in the event
- * @param fieldAlias the alias for the field to find in the event, overrides the field name if
- * it is not null
- * @param mandatory true if the field is mandatory
+ * @param jsonObject
+ * the JSON object containing the JSON representation of the incoming event
+ * @param fieldName
+ * the field name to find in the event
+ * @param fieldAlias
+ * the alias for the field to find in the event, overrides the field name if it is not null
+ * @param mandatory
+ * true if the field is mandatory
* @return the value of the field in the JSON object or null if the field is optional
- * @throws ApexEventRuntimeException the apex event runtime exception
+ * @throws ApexEventRuntimeException
+ * the apex event runtime exception
*/
private JsonElement getJSONField(final JsonObject jsonObject, final String fieldName, final String fieldAlias,
- final boolean mandatory) throws ApexEventRuntimeException {
+ final boolean mandatory) {
// Check if we should use the alias for this field
String fieldToFind = fieldName;
@@ -421,12 +432,15 @@ public class Apex2JSONEventConverter implements ApexEventProtocolConverter {
/**
* This method if a JSON object has a named field.
*
- * @param jsonObject the JSON object containing the JSON representation of the incoming event
- * @param fieldName the field name to find in the event
+ * @param jsonObject
+ * the JSON object containing the JSON representation of the incoming event
+ * @param fieldName
+ * the field name to find in the event
* @return true if the field is present
- * @throws ApexEventRuntimeException the apex event runtime exception
+ * @throws ApexEventRuntimeException
+ * the apex event runtime exception
*/
- private boolean hasJSONField(final JsonObject jsonObject, final String fieldName) throws ApexEventRuntimeException {
+ private boolean hasJSONField(final JsonObject jsonObject, final String fieldName) {
// check for the field
return jsonObject.has(fieldName);
}