aboutsummaryrefslogtreecommitdiffstats
path: root/UniversalVesAdapter/src/main/java/org/onap/universalvesadapter/utils/MapperConfigUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'UniversalVesAdapter/src/main/java/org/onap/universalvesadapter/utils/MapperConfigUtils.java')
-rw-r--r--UniversalVesAdapter/src/main/java/org/onap/universalvesadapter/utils/MapperConfigUtils.java361
1 files changed, 0 insertions, 361 deletions
diff --git a/UniversalVesAdapter/src/main/java/org/onap/universalvesadapter/utils/MapperConfigUtils.java b/UniversalVesAdapter/src/main/java/org/onap/universalvesadapter/utils/MapperConfigUtils.java
deleted file mode 100644
index fb7ed26..0000000
--- a/UniversalVesAdapter/src/main/java/org/onap/universalvesadapter/utils/MapperConfigUtils.java
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
-* ============LICENSE_START=======================================================
-* ONAP : DCAE
-* ================================================================================
-* Copyright 2018 TechMahindra
-*=================================================================================
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-* ============LICENSE_END=========================================================
-*/
-package org.onap.universalvesadapter.utils;
-
-import java.io.IOException;
-import java.util.Set;
-import java.util.TreeSet;
-
-import org.onap.universalvesadapter.exception.MapperConfigException;
-import org.onap.universalvesadapter.mappingconfig.Entry;
-import org.onap.universalvesadapter.mappingconfig.Evaluation;
-import org.onap.universalvesadapter.mappingconfig.MapperConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-/**
- * This class will be used in Future for different telemetry data:
- * This class will be utility class to read the mapper config file and parse the
- * config to prepare the grammar to detect the incoming json's event type.
- *
- * @author kmalbari
- *
- */
-public class MapperConfigUtils {
-
- private static final Logger debugLogger = LoggerFactory.getLogger("debugLogger");
- private static final Logger errorLogger = LoggerFactory.getLogger("errorLogger");
- private static Set<Entry> entries = new TreeSet<>((o1, o2) -> o1.getPriority().compareTo(o2.getPriority()));
-
- private enum JoinOperator {
- AND("AND"), OR("OR");
-
- private final String value;
-
- private JoinOperator(final String value) {
- this.value = value;
- }
-
- public String getValue() {
- return value;
- }
- }
-
- private enum ExpressionOperator {
- EQUALS("EQUALS"), STARTSWITH("STARTSWITH"), ENDSWITH("ENDSWITH"), CONTAINS("CONTAINS");
-
- private final String value;
-
- private ExpressionOperator(final String value) {
- this.value = value;
- }
-
- public String getValue() {
- return value;
- }
- }
-
- private enum DataType {
- STRING("STRING"), DOUBLE("DOUBLE");
-
- private final String value;
-
- private DataType(final String value) {
- this.value = value;
- }
-
- public String getValue() {
- return value;
- }
- }
-
- /**
- * main method.
- *
- * @param args
- * arguments
- */
- public static void main(String[] args) {
-
- String mappingFile = " { " + " \"entries\": [{ " + " \"priority\": 4, " + " \"evaluation\": { "
- + " \"operand\": \"AND\", " + " \"field\": null, " + " \"value\": null, "
- + " \"datatype\": null, " + " \"lhs\": { " + " \"operand\": \"OR\", "
- + " \"field\": null, " + " \"value\": null, "
- + " \"datatype\": null, " + " \"lhs\": { "
- + " \"operand\": \"EQUALS\", " + " \"field\": \"domain\", "
- + " \"value\": \"snmp-heartbeat\", " + " \"datatype\": \"string\", "
- + " \"lhs\": null, " + " \"rhs\": null " + " }, "
- + " \"rhs\": { " + " \"operand\": \"EQUALS\", "
- + " \"field\": \"domain\", " + " \"value\": \"snmp-fault\", "
- + " \"datatype\": \"string\", " + " \"lhs\": null, "
- + " \"rhs\": null " + " } " + " }, " + " \"rhs\": { "
- + " \"operand\": \"EQUALS\", " + " \"field\": \"trap version\", "
- + " \"value\": \"1.2\", " + " \"datatype\": \"float\", "
- + " \"lhs\": null, " + " \"rhs\": null " + " } " + " }, "
- + " \"result\": \"smooks.config\" " + " }, { " + " \"priority\": 1, "
- + " \"evaluation\": { " + " \"operand\": \"AND\", " + " \"field\": null, "
- + " \"value\": null, " + " \"datatype\": null, " + " \"lhs\": { "
- + " \"operand\": \"OR\", " + " \"field\": null, "
- + " \"value\": null, " + " \"datatype\": null, " + " \"lhs\": { "
- + " \"operand\": \"EQUALS\", " + " \"field\": \"domain\", "
- + " \"value\": \"snmp-heartbeat\", " + " \"datatype\": \"string\", "
- + " \"lhs\": null, " + " \"rhs\": null " + " }, "
- + " \"rhs\": { " + " \"operand\": \"EQUALS\", "
- + " \"field\": \"domain\", " + " \"value\": \"snmp-fault\", "
- + " \"datatype\": \"string\", " + " \"lhs\": null, "
- + " \"rhs\": null " + " } " + " }, " + " \"rhs\": { "
- + " \"operand\": \"EQUALS\", " + " \"field\": \"trap version\", "
- + " \"value\": \"1.2\", " + " \"datatype\": \"float\", "
- + " \"lhs\": null, " + " \"rhs\": null " + " } " + " }, "
- + " \"result\": \"smooks.config\" " + " }, { " + " \"priority\": 3, "
- + " \"evaluation\": { " + " \"operand\": \"AND\", " + " \"field\": null, "
- + " \"value\": null, " + " \"datatype\": null, " + " \"lhs\": { "
- + " \"operand\": \"OR\", " + " \"field\": null, "
- + " \"value\": null, " + " \"datatype\": null, " + " \"lhs\": { "
- + " \"operand\": \"EQUALS\", " + " \"field\": \"domain\", "
- + " \"value\": \"snmp-heartbeat\", " + " \"datatype\": \"string\", "
- + " \"lhs\": null, " + " \"rhs\": null " + " }, "
- + " \"rhs\": { " + " \"operand\": \"EQUALS\", "
- + " \"field\": \"domain\", " + " \"value\": \"snmp-fault\", "
- + " \"datatype\": \"string\", " + " \"lhs\": null, "
- + " \"rhs\": null " + " } " + " }, " + " \"rhs\": { "
- + " \"operand\": \"EQUALS\", " + " \"field\": \"trap version\", "
- + " \"value\": \"1.2\", " + " \"datatype\": \"float\", "
- + " \"lhs\": null, " + " \"rhs\": null " + " } " + " }, "
- + " \"result\": \"smooks.config\" " + " }, { " + " \"priority\": 2, "
- + " \"evaluation\": { " + " \"operand\": \"AND\", " + " \"field\": null, "
- + " \"value\": null, " + " \"datatype\": null, " + " \"lhs\": { "
- + " \"operand\": \"OR\", " + " \"field\": null, "
- + " \"value\": null, " + " \"datatype\": null, " + " \"lhs\": { "
- + " \"operand\": \"EQUALS\", " + " \"field\": \"domain\", "
- + " \"value\": \"snmp-heartbeat\", " + " \"datatype\": \"string\", "
- + " \"lhs\": null, " + " \"rhs\": null " + " }, "
- + " \"rhs\": { " + " \"operand\": \"EQUALS\", "
- + " \"field\": \"domain\", " + " \"value\": \"snmp-fault\", "
- + " \"datatype\": \"string\", " + " \"lhs\": null, "
- + " \"rhs\": null " + " } " + " }, " + " \"rhs\": { "
- + " \"operand\": \"EQUALS\", " + " \"field\": \"trap version\", "
- + " \"value\": \"1.2\", " + " \"datatype\": \"float\", "
- + " \"lhs\": null, " + " \"rhs\": null " + " } " + " }, "
- + " \"result\": \"smooks.config\" " + " }] " + "}";
- String incomingJsonString = "{\"domain\":\"snmp-heartbeat\",\"trap version\":1.2}";
-
- try {
- readMapperConfigFile(mappingFile);
- checkIncomingJsonForMatchingDomain(incomingJsonString);
- } catch (MapperConfigException e) {
- errorLogger.error("Exception in mapperConfigFile reading:{}",e);
- }
-
- }
-
- /**
- * Checks incoming json to see which of the domain it mathces as per mapper
- * config entries. If nothing matches, a default mapping will be used.
- *
- * @param incomingJsonString
- * incoming json
- * @throws MapperConfigException
- * if error occurs in operation
- */
- public static String checkIncomingJsonForMatchingDomain(String incomingJsonString) throws MapperConfigException {
- ObjectMapper mapper = new ObjectMapper();
- JsonNode actualObj = null;
- try {
- actualObj = mapper.readTree(incomingJsonString);
- } catch (IOException exception) {
- throw new MapperConfigException("Unable to read incoming json in a tree " + exception.getMessage(),
- exception);
- }
- for (Entry entry : entries) {
-
- boolean result = false;
- result = evaluateEntryMatch(entry.getEvaluation(), actualObj);
- if (result) {
- return entry.getResult();
- }
- }
- return "default";
- }
-
- /**
- * Reads the mapper config file.
- *
- * @param mappingFileData
- * string json for mapper config
- * @throws MapperConfigException
- * if error in mapper config
- */
- public static void readMapperConfigFile(String mappingFileData) throws MapperConfigException {
-
- ObjectMapper name = new ObjectMapper();
- MapperConfig config = null;
- try {
- config = name.readValue(mappingFileData, MapperConfig.class);
- } catch (IOException exception) {
- throw new MapperConfigException("Unable to read config file for reason...\n " + exception.getMessage(),
- exception);
- }
- debugLogger.debug("Read config file content into :{}",config);
-
- if (null != config) {
- entries.addAll(config.getEntries());
- } else {
- throw new MapperConfigException("Unable to generate configuration for different domains.");
- }
- }
-
- /**
- * Evaluates the passed in {@code Evaluation} instance and return boolean
- * result.
- *
- * @param evaluation
- * evaluation instance
- * @param actualObj
- * Json node with values to compare with
- * @return true if matches evaluation else false
- * @throws MapperConfigException
- * error in evaluation
- */
- public static boolean evaluateEntryMatch(Evaluation evaluation, JsonNode actualObj) throws MapperConfigException {
- if (null == evaluation) {
- throw new MapperConfigException("Cannot have null evaluation");
- }
- if (null != evaluation.getOperand()) {
-
- if (MapperConfigUtils.isValidEnum(JoinOperator.class, evaluation.getOperand())) {
- // if(JOIN_OPERATOR.contains(evaluation.getOperand())){
- switch (JoinOperator.valueOf(evaluation.getOperand())) {
- case AND:
- return evaluateEntryMatch(evaluation.getLhs(), actualObj)
- && evaluateEntryMatch(evaluation.getRhs(), actualObj);
- case OR:
- return evaluateEntryMatch(evaluation.getLhs(), actualObj)
- || evaluateEntryMatch(evaluation.getRhs(), actualObj);
- default:
- break;
- }
- }
-
- if (MapperConfigUtils.isValidEnum(ExpressionOperator.class, evaluation.getOperand())) {
- // if(EXPR_OPERATOR.contains(evaluation.getOperand())){
-
- // currently it is assumed field being compared is first level
- // child of incoming JSON structure.
- // If needed, can write a JsonPath implementation later
- String field = evaluation.getField();
- if (null != field && null != evaluation.getDatatype() && actualObj.has(field)) {
- switch (ExpressionOperator.valueOf(evaluation.getOperand())) {
- case EQUALS:
- if (MapperConfigUtils.isValidEnum(DataType.class, evaluation.getDatatype())) {
- switch (DataType.valueOf(evaluation.getDatatype())) {
- case STRING:
- if (null != actualObj.get(field))
- return actualObj.get(field).asText().equals(evaluation.getValue());
- break;
- case DOUBLE:
- if (null != actualObj.get(field))
- return actualObj.get(field).asDouble() == Double
- .valueOf(evaluation.getValue());
- break;
- default:
- return false;
- }
- } else
- return false;
- break;
- case STARTSWITH:
- if (MapperConfigUtils.isValidEnum(DataType.class, evaluation.getDatatype())) {
- switch (DataType.valueOf(evaluation.getDatatype())) {
- case STRING:
- if (null != actualObj.get(field))
- return actualObj.get(field).asText().startsWith(evaluation.getValue());
- break;
- default:
- return false;
- }
- } else
- return false;
- break;
- case ENDSWITH:
- if (MapperConfigUtils.isValidEnum(DataType.class, evaluation.getDatatype())) {
- switch (DataType.valueOf(evaluation.getDatatype())) {
- case STRING:
- if (null != actualObj.get(field))
- return actualObj.get(field).asText().endsWith(evaluation.getValue());
- break;
- default:
- return false;
- }
- } else
- return false;
- break;
- case CONTAINS:
- if (MapperConfigUtils.isValidEnum(DataType.class, evaluation.getDatatype())) {
- switch (DataType.valueOf(evaluation.getDatatype())) {
- case STRING:
- if (null != actualObj.get(field))
- return actualObj.get(field).asText().contains(evaluation.getValue());
- break;
- default:
- return false;
- }
- } else
- return false;
- break;
- default:
- return false;
- }
- }
- }
- } else
- throw new MapperConfigException("Not an expected operand as per config for " + evaluation.getField());
-
- return false;
- }
- /**
- * <p>Checks if the specified name is a valid enum for the class.</p>
- *
- * <p>This method differs from {@link Enum#valueOf} in that checks if the name is
- * a valid enum without needing to catch the exception.</p>
- *
- * @param <E> the type of the enumeration
- * @param enumClass the class of the enum to query, not null
- * @param enumName the enum name, null returns false
- * @return true if the enum name is valid, otherwise false
- */
-
- public static <E extends Enum<E>> boolean isValidEnum(final Class<E> enumClass, final String enumName) {
- if (enumName == null) {
- return false;
- }
- try {
- Enum.valueOf(enumClass, enumName);
- return true;
- } catch (final IllegalArgumentException ex) {
- return false;
- }
- }
-
-
-}