From 6278ed5793f70aa3087020d1d2e555b381da7cc6 Mon Sep 17 00:00:00 2001 From: PatrikBuhr Date: Thu, 4 Aug 2022 12:08:56 +0200 Subject: [PATCH] NONRTRIC - dmaap adapter characteristic improvement Minor refactoring Signed-off-by: PatrikBuhr Issue-ID: NONRTRIC-773 Change-Id: Ibedc361673aad2a9362e31651d11853bd282df85 --- .../{repository/filters => filter}/Filter.java | 7 ++- .../oran/dmaapadapter/filter/FilterFactory.java | 59 ++++++++++++++++++++ .../{repository/filters => filter}/JsltFilter.java | 4 +- .../filters => filter}/JsonPathFilter.java | 4 +- .../{repository/filters => filter}/PmReport.java | 2 +- .../filters => filter}/PmReportFilter.java | 3 +- .../filters => filter}/RegexpFilter.java | 4 +- .../java/org/oran/dmaapadapter/repository/Job.java | 65 ++++------------------ .../org/oran/dmaapadapter/ApplicationTest.java | 4 +- .../oran/dmaapadapter/IntegrationWithKafka.java | 2 +- .../filters => filter}/JsltFilterTest.java | 2 +- .../filters => filter}/JsonPathFilterTest.java | 2 +- .../filters => filter}/PmReportFilterTest.java | 2 +- 13 files changed, 91 insertions(+), 69 deletions(-) rename src/main/java/org/oran/dmaapadapter/{repository/filters => filter}/Filter.java (87%) create mode 100644 src/main/java/org/oran/dmaapadapter/filter/FilterFactory.java rename src/main/java/org/oran/dmaapadapter/{repository/filters => filter}/JsltFilter.java (95%) rename src/main/java/org/oran/dmaapadapter/{repository/filters => filter}/JsonPathFilter.java (94%) rename src/main/java/org/oran/dmaapadapter/{repository/filters => filter}/PmReport.java (98%) rename src/main/java/org/oran/dmaapadapter/{repository/filters => filter}/PmReportFilter.java (99%) rename src/main/java/org/oran/dmaapadapter/{repository/filters => filter}/RegexpFilter.java (94%) rename src/test/java/org/oran/dmaapadapter/{repository/filters => filter}/JsltFilterTest.java (98%) rename src/test/java/org/oran/dmaapadapter/{repository/filters => filter}/JsonPathFilterTest.java (96%) rename src/test/java/org/oran/dmaapadapter/{repository/filters => filter}/PmReportFilterTest.java (99%) diff --git a/src/main/java/org/oran/dmaapadapter/repository/filters/Filter.java b/src/main/java/org/oran/dmaapadapter/filter/Filter.java similarity index 87% rename from src/main/java/org/oran/dmaapadapter/repository/filters/Filter.java rename to src/main/java/org/oran/dmaapadapter/filter/Filter.java index e878387..2e06069 100644 --- a/src/main/java/org/oran/dmaapadapter/repository/filters/Filter.java +++ b/src/main/java/org/oran/dmaapadapter/filter/Filter.java @@ -18,9 +18,14 @@ * ========================LICENSE_END=================================== */ -package org.oran.dmaapadapter.repository.filters; +package org.oran.dmaapadapter.filter; public interface Filter { + + public enum Type { + REGEXP, JSLT, JSON_PATH, PM_DATA, NONE + } + public String filter(String data); } diff --git a/src/main/java/org/oran/dmaapadapter/filter/FilterFactory.java b/src/main/java/org/oran/dmaapadapter/filter/FilterFactory.java new file mode 100644 index 0000000..8d51727 --- /dev/null +++ b/src/main/java/org/oran/dmaapadapter/filter/FilterFactory.java @@ -0,0 +1,59 @@ +/*- + * ========================LICENSE_START================================= + * O-RAN-SC + * %% + * Copyright (C) 2022 Nordix Foundation + * %% + * 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.oran.dmaapadapter.filter; + +import com.google.gson.GsonBuilder; + +import java.lang.invoke.MethodHandles; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class FilterFactory { + private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + private static com.google.gson.Gson gson = new GsonBuilder().disableHtmlEscaping().create(); + + private FilterFactory() {} + + public static Filter create(Object filter, Filter.Type type) { + switch (type) { + case PM_DATA: + return new PmReportFilter(createPmFilterData(filter)); + case REGEXP: + return new RegexpFilter(filter.toString()); + case JSLT: + return new JsltFilter(filter.toString()); + case JSON_PATH: + return new JsonPathFilter(filter.toString()); + case NONE: + return null; + default: + logger.error("Not handeled filter type: {}", type); + return null; + } + } + + private static PmReportFilter.FilterData createPmFilterData(Object filter) { + String str = gson.toJson(filter); + return gson.fromJson(str, PmReportFilter.FilterData.class); + } + +} diff --git a/src/main/java/org/oran/dmaapadapter/repository/filters/JsltFilter.java b/src/main/java/org/oran/dmaapadapter/filter/JsltFilter.java similarity index 95% rename from src/main/java/org/oran/dmaapadapter/repository/filters/JsltFilter.java rename to src/main/java/org/oran/dmaapadapter/filter/JsltFilter.java index 5c2520e..df7eb44 100644 --- a/src/main/java/org/oran/dmaapadapter/repository/filters/JsltFilter.java +++ b/src/main/java/org/oran/dmaapadapter/filter/JsltFilter.java @@ -18,7 +18,7 @@ * ========================LICENSE_END=================================== */ -package org.oran.dmaapadapter.repository.filters; +package org.oran.dmaapadapter.filter; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonParser; @@ -31,7 +31,7 @@ import com.schibsted.spt.data.jslt.Parser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class JsltFilter implements Filter { +class JsltFilter implements Filter { private Expression expression; private final ObjectMapper mapper = new ObjectMapper(); diff --git a/src/main/java/org/oran/dmaapadapter/repository/filters/JsonPathFilter.java b/src/main/java/org/oran/dmaapadapter/filter/JsonPathFilter.java similarity index 94% rename from src/main/java/org/oran/dmaapadapter/repository/filters/JsonPathFilter.java rename to src/main/java/org/oran/dmaapadapter/filter/JsonPathFilter.java index 8022312..c931e27 100644 --- a/src/main/java/org/oran/dmaapadapter/repository/filters/JsonPathFilter.java +++ b/src/main/java/org/oran/dmaapadapter/filter/JsonPathFilter.java @@ -18,14 +18,14 @@ * ========================LICENSE_END=================================== */ -package org.oran.dmaapadapter.repository.filters; +package org.oran.dmaapadapter.filter; import com.jayway.jsonpath.JsonPath; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class JsonPathFilter implements Filter { +class JsonPathFilter implements Filter { private String expression; private static final Logger logger = LoggerFactory.getLogger(JsonPathFilter.class); diff --git a/src/main/java/org/oran/dmaapadapter/repository/filters/PmReport.java b/src/main/java/org/oran/dmaapadapter/filter/PmReport.java similarity index 98% rename from src/main/java/org/oran/dmaapadapter/repository/filters/PmReport.java rename to src/main/java/org/oran/dmaapadapter/filter/PmReport.java index b361616..21cc672 100644 --- a/src/main/java/org/oran/dmaapadapter/repository/filters/PmReport.java +++ b/src/main/java/org/oran/dmaapadapter/filter/PmReport.java @@ -18,7 +18,7 @@ * ========================LICENSE_END=================================== */ -package org.oran.dmaapadapter.repository.filters; +package org.oran.dmaapadapter.filter; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/org/oran/dmaapadapter/repository/filters/PmReportFilter.java b/src/main/java/org/oran/dmaapadapter/filter/PmReportFilter.java similarity index 99% rename from src/main/java/org/oran/dmaapadapter/repository/filters/PmReportFilter.java rename to src/main/java/org/oran/dmaapadapter/filter/PmReportFilter.java index 78334e2..c120585 100644 --- a/src/main/java/org/oran/dmaapadapter/repository/filters/PmReportFilter.java +++ b/src/main/java/org/oran/dmaapadapter/filter/PmReportFilter.java @@ -18,7 +18,7 @@ * ========================LICENSE_END=================================== */ -package org.oran.dmaapadapter.repository.filters; +package org.oran.dmaapadapter.filter; import java.util.ArrayList; import java.util.Collection; @@ -70,7 +70,6 @@ public class PmReportFilter implements Filter { return ""; } return gson.toJson(report); - } /** diff --git a/src/main/java/org/oran/dmaapadapter/repository/filters/RegexpFilter.java b/src/main/java/org/oran/dmaapadapter/filter/RegexpFilter.java similarity index 94% rename from src/main/java/org/oran/dmaapadapter/repository/filters/RegexpFilter.java rename to src/main/java/org/oran/dmaapadapter/filter/RegexpFilter.java index c8b5541..a2842ed 100644 --- a/src/main/java/org/oran/dmaapadapter/repository/filters/RegexpFilter.java +++ b/src/main/java/org/oran/dmaapadapter/filter/RegexpFilter.java @@ -18,7 +18,7 @@ * ========================LICENSE_END=================================== */ -package org.oran.dmaapadapter.repository.filters; +package org.oran.dmaapadapter.filter; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -26,7 +26,7 @@ import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class RegexpFilter implements Filter { +class RegexpFilter implements Filter { private static final Logger logger = LoggerFactory.getLogger(RegexpFilter.class); private Pattern regexp; diff --git a/src/main/java/org/oran/dmaapadapter/repository/Job.java b/src/main/java/org/oran/dmaapadapter/repository/Job.java index d296f8e..7201dad 100644 --- a/src/main/java/org/oran/dmaapadapter/repository/Job.java +++ b/src/main/java/org/oran/dmaapadapter/repository/Job.java @@ -20,8 +20,6 @@ package org.oran.dmaapadapter.repository; -import com.google.gson.GsonBuilder; - import java.lang.invoke.MethodHandles; import java.time.Duration; @@ -30,18 +28,13 @@ import lombok.Setter; import lombok.ToString; import org.oran.dmaapadapter.clients.AsyncRestClient; -import org.oran.dmaapadapter.repository.filters.Filter; -import org.oran.dmaapadapter.repository.filters.JsltFilter; -import org.oran.dmaapadapter.repository.filters.JsonPathFilter; -import org.oran.dmaapadapter.repository.filters.PmReportFilter; -import org.oran.dmaapadapter.repository.filters.RegexpFilter; +import org.oran.dmaapadapter.filter.Filter; +import org.oran.dmaapadapter.filter.FilterFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @ToString public class Job { - - private static com.google.gson.Gson gson = new GsonBuilder().disableHtmlEscaping().create(); private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); public static class Parameters { @@ -52,6 +45,7 @@ public class Job { @Setter private String filterType = REGEXP_TYPE; + @Getter private Object filter; @Getter private BufferTimeout bufferTimeout; @@ -76,33 +70,20 @@ public class Job { return maxConcurrency == null || maxConcurrency == 0 ? 1 : maxConcurrency; } - public String getFilterAsString() { - return this.filter.toString(); - } - - public PmReportFilter.FilterData getPmFilter() { - String str = gson.toJson(this.filter); - return gson.fromJson(str, PmReportFilter.FilterData.class); - } - - public enum FilterType { - REGEXP, JSLT, JSON_PATH, PM_DATA, NONE - } - - public FilterType getFilterType() { + public Filter.Type getFilterType() { if (filter == null || filterType == null) { - return FilterType.NONE; + return Filter.Type.NONE; } else if (filterType.equalsIgnoreCase(JSLT_FILTER_TYPE)) { - return FilterType.JSLT; + return Filter.Type.JSLT; } else if (filterType.equalsIgnoreCase(JSON_PATH_FILTER_TYPE)) { - return FilterType.JSON_PATH; + return Filter.Type.JSON_PATH; } else if (filterType.equalsIgnoreCase(REGEXP_TYPE)) { - return FilterType.REGEXP; + return Filter.Type.REGEXP; } else if (filterType.equalsIgnoreCase(PM_FILTER_TYPE)) { - return FilterType.PM_DATA; + return Filter.Type.PM_DATA; } else { logger.warn("Unsupported filter type: {}", this.filterType); - return FilterType.NONE; + return Filter.Type.NONE; } } } @@ -156,33 +137,11 @@ public class Job { this.owner = owner; this.lastUpdated = lastUpdated; this.parameters = parameters; - filter = createFilter(parameters); + filter = parameters.filter == null ? null + : FilterFactory.create(parameters.getFilter(), parameters.getFilterType()); this.consumerRestClient = consumerRestClient; } - private static Filter createFilter(Parameters parameters) { - - if (parameters.filter == null) { - return null; - } - - switch (parameters.getFilterType()) { - case PM_DATA: - return new PmReportFilter(parameters.getPmFilter()); - case REGEXP: - return new RegexpFilter(parameters.getFilterAsString()); - case JSLT: - return new JsltFilter(parameters.getFilterAsString()); - case JSON_PATH: - return new JsonPathFilter(parameters.getFilterAsString()); - case NONE: - return null; - default: - logger.error("Not handeled filter type: {}", parameters.getFilterType()); - return null; - } - } - public String filter(String data) { if (filter == null) { logger.debug("No filter used"); diff --git a/src/test/java/org/oran/dmaapadapter/ApplicationTest.java b/src/test/java/org/oran/dmaapadapter/ApplicationTest.java index 2d0d621..85c02b0 100644 --- a/src/test/java/org/oran/dmaapadapter/ApplicationTest.java +++ b/src/test/java/org/oran/dmaapadapter/ApplicationTest.java @@ -47,13 +47,13 @@ import org.oran.dmaapadapter.configuration.ApplicationConfig; import org.oran.dmaapadapter.configuration.WebClientConfig; import org.oran.dmaapadapter.configuration.WebClientConfig.HttpProxyConfig; import org.oran.dmaapadapter.controllers.ProducerCallbacksController; +import org.oran.dmaapadapter.filter.PmReport; +import org.oran.dmaapadapter.filter.PmReportFilter; import org.oran.dmaapadapter.r1.ConsumerJobInfo; import org.oran.dmaapadapter.r1.ProducerJobInfo; import org.oran.dmaapadapter.repository.InfoTypes; import org.oran.dmaapadapter.repository.Job; import org.oran.dmaapadapter.repository.Jobs; -import org.oran.dmaapadapter.repository.filters.PmReport; -import org.oran.dmaapadapter.repository.filters.PmReportFilter; import org.oran.dmaapadapter.tasks.JobDataDistributor; import org.oran.dmaapadapter.tasks.ProducerRegstrationTask; import org.oran.dmaapadapter.tasks.TopicListener; diff --git a/src/test/java/org/oran/dmaapadapter/IntegrationWithKafka.java b/src/test/java/org/oran/dmaapadapter/IntegrationWithKafka.java index 3bb3a4a..65a1366 100644 --- a/src/test/java/org/oran/dmaapadapter/IntegrationWithKafka.java +++ b/src/test/java/org/oran/dmaapadapter/IntegrationWithKafka.java @@ -48,12 +48,12 @@ import org.oran.dmaapadapter.configuration.ApplicationConfig; import org.oran.dmaapadapter.configuration.WebClientConfig; import org.oran.dmaapadapter.configuration.WebClientConfig.HttpProxyConfig; import org.oran.dmaapadapter.exceptions.ServiceException; +import org.oran.dmaapadapter.filter.PmReportFilter; import org.oran.dmaapadapter.r1.ConsumerJobInfo; import org.oran.dmaapadapter.repository.InfoType; import org.oran.dmaapadapter.repository.InfoTypes; import org.oran.dmaapadapter.repository.Job; import org.oran.dmaapadapter.repository.Jobs; -import org.oran.dmaapadapter.repository.filters.PmReportFilter; import org.oran.dmaapadapter.tasks.KafkaTopicListener; import org.oran.dmaapadapter.tasks.TopicListener; import org.oran.dmaapadapter.tasks.TopicListeners; diff --git a/src/test/java/org/oran/dmaapadapter/repository/filters/JsltFilterTest.java b/src/test/java/org/oran/dmaapadapter/filter/JsltFilterTest.java similarity index 98% rename from src/test/java/org/oran/dmaapadapter/repository/filters/JsltFilterTest.java rename to src/test/java/org/oran/dmaapadapter/filter/JsltFilterTest.java index c769c56..ea6943d 100644 --- a/src/test/java/org/oran/dmaapadapter/repository/filters/JsltFilterTest.java +++ b/src/test/java/org/oran/dmaapadapter/filter/JsltFilterTest.java @@ -18,7 +18,7 @@ * ========================LICENSE_END=================================== */ -package org.oran.dmaapadapter.repository.filters; +package org.oran.dmaapadapter.filter; import static org.assertj.core.api.Assertions.assertThat; diff --git a/src/test/java/org/oran/dmaapadapter/repository/filters/JsonPathFilterTest.java b/src/test/java/org/oran/dmaapadapter/filter/JsonPathFilterTest.java similarity index 96% rename from src/test/java/org/oran/dmaapadapter/repository/filters/JsonPathFilterTest.java rename to src/test/java/org/oran/dmaapadapter/filter/JsonPathFilterTest.java index 1360943..d5e59b4 100644 --- a/src/test/java/org/oran/dmaapadapter/repository/filters/JsonPathFilterTest.java +++ b/src/test/java/org/oran/dmaapadapter/filter/JsonPathFilterTest.java @@ -18,7 +18,7 @@ * ========================LICENSE_END=================================== */ -package org.oran.dmaapadapter.repository.filters; +package org.oran.dmaapadapter.filter; import static org.assertj.core.api.Assertions.assertThat; diff --git a/src/test/java/org/oran/dmaapadapter/repository/filters/PmReportFilterTest.java b/src/test/java/org/oran/dmaapadapter/filter/PmReportFilterTest.java similarity index 99% rename from src/test/java/org/oran/dmaapadapter/repository/filters/PmReportFilterTest.java rename to src/test/java/org/oran/dmaapadapter/filter/PmReportFilterTest.java index f4a6457..6a11639 100644 --- a/src/test/java/org/oran/dmaapadapter/repository/filters/PmReportFilterTest.java +++ b/src/test/java/org/oran/dmaapadapter/filter/PmReportFilterTest.java @@ -18,7 +18,7 @@ * ========================LICENSE_END=================================== */ -package org.oran.dmaapadapter.repository.filters; +package org.oran.dmaapadapter.filter; import static org.assertj.core.api.Assertions.assertThat; -- 2.16.6