From 626a3c7695f58f42a70618e276cc5a4afdb0cb08 Mon Sep 17 00:00:00 2001 From: PatrikBuhr Date: Mon, 7 Nov 2022 12:58:42 +0100 Subject: [PATCH] Minor changes More use of lombok in PM filter. Signed-off-by: PatrikBuhr Issue-ID: NONRTRIC-773 Change-Id: Ic8d4fa18ada9efcfc3caee356d52e8a78bf9489f --- .../org/oran/dmaapadapter/filter/PmReport.java | 104 +++++++++-------- .../oran/dmaapadapter/filter/PmReportFilter.java | 124 +++++++++++++-------- .../dmaapadapter/tasks/JobDataDistributor.java | 6 +- .../dmaapadapter/filter/PmReportFilterTest.java | 4 +- 4 files changed, 136 insertions(+), 102 deletions(-) diff --git a/src/main/java/org/oran/dmaapadapter/filter/PmReport.java b/src/main/java/org/oran/dmaapadapter/filter/PmReport.java index bd8b5be..46c90a1 100644 --- a/src/main/java/org/oran/dmaapadapter/filter/PmReport.java +++ b/src/main/java/org/oran/dmaapadapter/filter/PmReport.java @@ -26,53 +26,57 @@ import java.util.ArrayList; import java.util.Collection; import lombok.Builder; +import lombok.Getter; +import lombok.Setter; +@Builder(toBuilder = true) public class PmReport { @Expose - public Event event = new Event(); + public Event event; public static class CommonEventHeader { @Expose - String domain; + private String domain; @Expose - String eventId; + private String eventId; @Expose - int sequence; + private int sequence; @Expose - String eventName; + private String eventName; @Expose - String sourceName; + @Getter + private String sourceName; @Expose - String reportingEntityName; + private String reportingEntityName; @Expose - String priority; + private String priority; @Expose - long startEpochMicrosec; + private long startEpochMicrosec; @Expose - long lastEpochMicrosec; + private long lastEpochMicrosec; @Expose - String version; + private String version; @Expose - String vesEventListenerVersion; + private String vesEventListenerVersion; @Expose - String timeZoneOffset; + private String timeZoneOffset; } public static class MeasInfoId { @Expose - String sMeasInfoId = ""; + private String sMeasInfoId = ""; } public static class MeasTypes { @@ -87,90 +91,92 @@ public class PmReport { protected ArrayList sMeasTypesList = new ArrayList<>(); } + @Getter + @Builder(toBuilder = true) public static class MeasResult { @Expose - int p; + @Setter + private int p; @Expose - String sValue = ""; - - public MeasResult copy() { - MeasResult c = new MeasResult(); - c.p = this.p; - c.sValue = this.sValue; - return c; - } + private String sValue; } + @Builder(toBuilder = true) public static class MeasValuesList { @Expose - String measObjInstId; + @Getter + private String measObjInstId; @Expose - String suspectFlag; + private String suspectFlag; @Expose - Collection measResults = new ArrayList<>(); + @Getter + private Collection measResults; + + public boolean isEmpty() { + return this.measResults.isEmpty(); + } + + static MeasValuesList emptyList = MeasValuesList.builder().measResults(new ArrayList<>()).build(); - public MeasValuesList shallowClone() { - MeasValuesList n = new MeasValuesList(); - n.measObjInstId = this.measObjInstId; - n.suspectFlag = this.suspectFlag; - return n; + public static MeasValuesList empty() { + return emptyList; } } + @Getter + @Builder(toBuilder = true) public static class MeasInfoList { @Expose - MeasInfoId measInfoId; + private MeasInfoId measInfoId; @Expose - MeasTypes measTypes; + private MeasTypes measTypes; @Expose - Collection measValuesList = new ArrayList<>(); + private Collection measValuesList; - public MeasInfoList shallowClone() { - MeasInfoList n = new MeasInfoList(); - n.measInfoId = this.measInfoId; - n.measTypes = new MeasTypes(); - return n; - } } @Builder(toBuilder = true) + @Getter public static class MeasDataCollection { @Expose - int granularityPeriod; + private int granularityPeriod; @Expose - String measuredEntityUserName; + private String measuredEntityUserName; @Expose - String measuredEntityDn; + private String measuredEntityDn; @Expose - String measuredEntitySoftwareVersion; + private String measuredEntitySoftwareVersion; @Expose - Collection measInfoList; + private Collection measInfoList; } @Builder(toBuilder = true) + @Getter public static class Perf3gppFields { @Expose - String perf3gppFieldsVersion; + private String perf3gppFieldsVersion; @Expose - MeasDataCollection measDataCollection; + private MeasDataCollection measDataCollection; } + @Getter + @Builder(toBuilder = true) public static class Event { @Expose - CommonEventHeader commonEventHeader; + private CommonEventHeader commonEventHeader; @Expose - Perf3gppFields perf3gppFields; + private Perf3gppFields perf3gppFields; } } diff --git a/src/main/java/org/oran/dmaapadapter/filter/PmReportFilter.java b/src/main/java/org/oran/dmaapadapter/filter/PmReportFilter.java index c8a575b..a545e90 100644 --- a/src/main/java/org/oran/dmaapadapter/filter/PmReportFilter.java +++ b/src/main/java/org/oran/dmaapadapter/filter/PmReportFilter.java @@ -30,6 +30,13 @@ import java.util.Map; import lombok.Getter; import lombok.Setter; +import org.oran.dmaapadapter.filter.PmReport.Event; +import org.oran.dmaapadapter.filter.PmReport.MeasDataCollection; +import org.oran.dmaapadapter.filter.PmReport.MeasInfoList; +import org.oran.dmaapadapter.filter.PmReport.MeasResult; +import org.oran.dmaapadapter.filter.PmReport.MeasTypes; +import org.oran.dmaapadapter.filter.PmReport.MeasValuesList; +import org.oran.dmaapadapter.filter.PmReport.Perf3gppFields; import org.oran.dmaapadapter.tasks.TopicListener.DataFromTopic; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -91,14 +98,14 @@ public class PmReportFilter implements Filter { public FilteredData filter(DataFromTopic data) { try { PmReport report = getPmReport(data); - PmReport reportFiltered = new PmReport(); - if (report.event.perf3gppFields == null) { + if (report.event == null || report.event.getPerf3gppFields() == null) { logger.warn("Received PM report with no perf3gppFields, ignored. {}", data); return FilteredData.empty(); } - if (!filter(report, reportFiltered, this.filterData)) { + PmReport reportFiltered = filter(report, this.filterData); + if (reportFiltered == null) { return FilteredData.empty(); } return new FilteredData(data.key, gson.toJson(reportFiltered).getBytes()); @@ -125,19 +132,29 @@ public class PmReportFilter implements Filter { * @param filterData * @return true if there is anything left in the report */ - private boolean filter(PmReport report, PmReport reportFiltered, FilterData filterData) { + private PmReport filter(PmReport report, FilterData filterData) { if (!matchSourceNames(report, filterData.sourceNames)) { - return false; + return null; } - Collection filteredMeasObjs = createMeasObjInstIds(report, filterData); - reportFiltered.event.commonEventHeader = report.event.commonEventHeader; - reportFiltered.event.perf3gppFields = report.event.perf3gppFields.toBuilder().build(); - reportFiltered.event.perf3gppFields.measDataCollection = - report.event.perf3gppFields.measDataCollection.toBuilder().build(); - - reportFiltered.event.perf3gppFields.measDataCollection.measInfoList = filteredMeasObjs; - return !filteredMeasObjs.isEmpty(); + Collection filteredMeasObjs = createMeasObjInstIds(report, filterData); + if (filteredMeasObjs.isEmpty()) { + return null; + } + MeasDataCollection measDataCollection = report.event.getPerf3gppFields().getMeasDataCollection().toBuilder() // + .measInfoList(filteredMeasObjs) // + .build(); + + Perf3gppFields perf3gppFields = + report.event.getPerf3gppFields().toBuilder().measDataCollection(measDataCollection) // + .build(); + Event event = report.event.toBuilder() // + .perf3gppFields(perf3gppFields) // + .build(); + + return report.toBuilder() // + .event(event) // + .build(); } private boolean isContainedInAny(String aString, Collection collection) { @@ -149,18 +166,18 @@ public class PmReportFilter implements Filter { return false; } - private boolean isMeasResultMatch(PmReport.MeasResult measResult, PmReport.MeasTypes measTypes, FilterData filter) { - String measType = measTypes.getMeasType(measResult.p); + private boolean isMeasResultMatch(MeasResult measResult, MeasTypes measTypes, FilterData filter) { + String measType = measTypes.getMeasType(measResult.getP()); return filter.measTypes.isEmpty() || filter.measTypes.contains(measType); } - private Collection createMeasResults(Collection oldMeasResults, - PmReport.MeasTypes measTypes, FilterData filter) { - Collection newMeasResults = new ArrayList<>(); + private Collection createMeasResults(Collection oldMeasResults, MeasTypes measTypes, + FilterData filter) { + Collection newMeasResults = new ArrayList<>(); - for (PmReport.MeasResult measResult : oldMeasResults) { + for (MeasResult measResult : oldMeasResults) { if (isMeasResultMatch(measResult, measTypes, filter)) { - newMeasResults.add(measResult.copy()); + newMeasResults.add(measResult.toBuilder().build()); } } return newMeasResults; @@ -191,56 +208,65 @@ public class PmReportFilter implements Filter { return filter.measObjClass.contains(measObjClass); } - private PmReport.MeasValuesList createMeasValuesList(PmReport.MeasValuesList oldMeasValues, - PmReport.MeasTypes measTypes, FilterData filter) { + private MeasValuesList createMeasValuesList(MeasValuesList oldMeasValues, MeasTypes measTypes, FilterData filter) { - PmReport.MeasValuesList newMeasValuesList = oldMeasValues.shallowClone(); + if (isMeasInstIdMatch(oldMeasValues.getMeasObjInstId(), filter) + && isMeasInstClassMatch(oldMeasValues.getMeasObjInstId(), filter)) { - if (isMeasInstIdMatch(oldMeasValues.measObjInstId, filter) - && isMeasInstClassMatch(oldMeasValues.measObjInstId, filter)) { - newMeasValuesList.measResults = createMeasResults(oldMeasValues.measResults, measTypes, filter); + Collection newResults = createMeasResults(oldMeasValues.getMeasResults(), measTypes, filter); + return oldMeasValues.toBuilder() // + .measResults(newResults) // + .build(); + } else { + return MeasValuesList.empty(); } - return newMeasValuesList; } - private PmReport.MeasTypes createMeasTypes(Collection measValues, - PmReport.MeasTypes oldMMeasTypes) { + private MeasTypes createMeasTypes(Collection newMeasValues, MeasTypes oldMMeasTypes) { MeasTypesIndexed newMeasTypes = new MeasTypesIndexed(); - for (PmReport.MeasValuesList l : measValues) { - for (PmReport.MeasResult r : l.measResults) { - String measTypeName = oldMMeasTypes.getMeasType(r.p); - r.p = newMeasTypes.addP(measTypeName); + for (MeasValuesList l : newMeasValues) { + for (MeasResult r : l.getMeasResults()) { + String measTypeName = oldMMeasTypes.getMeasType(r.getP()); + int newP = newMeasTypes.addP(measTypeName); + r.setP(newP); } } return newMeasTypes; } - private PmReport.MeasInfoList createMeasInfoList(PmReport.MeasInfoList oldMeasInfoList, FilterData filter) { - PmReport.MeasInfoList newMeasInfoList = oldMeasInfoList.shallowClone(); + private MeasInfoList createMeasInfoList(MeasInfoList oldMeasInfoList, FilterData filter) { - for (PmReport.MeasValuesList oldValues : oldMeasInfoList.measValuesList) { - PmReport.MeasValuesList newMeasValues = createMeasValuesList(oldValues, oldMeasInfoList.measTypes, filter); - if (!newMeasValues.measResults.isEmpty()) { - newMeasInfoList.measValuesList.add(newMeasValues); + Collection measValueLists = new ArrayList<>(); + for (MeasValuesList oldValues : oldMeasInfoList.getMeasValuesList()) { + MeasValuesList newMeasValues = createMeasValuesList(oldValues, oldMeasInfoList.getMeasTypes(), filter); + if (!newMeasValues.isEmpty()) { + measValueLists.add(newMeasValues); } } - newMeasInfoList.measTypes = createMeasTypes(newMeasInfoList.measValuesList, oldMeasInfoList.measTypes); - return newMeasInfoList; + + MeasTypes newMeasTypes = createMeasTypes(measValueLists, oldMeasInfoList.getMeasTypes()); + + return oldMeasInfoList.toBuilder() // + .measTypes(newMeasTypes).measValuesList(measValueLists) // + .build(); + } private boolean matchMeasuredEntityDns(PmReport report, FilterData filter) { - return filter.measuredEntityDns.isEmpty() || this.isContainedInAny( - report.event.perf3gppFields.measDataCollection.measuredEntityDn, filter.measuredEntityDns); + return filter.measuredEntityDns.isEmpty() + || this.isContainedInAny(report.event.getPerf3gppFields().getMeasDataCollection().getMeasuredEntityDn(), + filter.measuredEntityDns); } - private Collection createMeasObjInstIds(PmReport report, FilterData filter) { - Collection newList = new ArrayList<>(); + private Collection createMeasObjInstIds(PmReport report, FilterData filter) { + Collection newList = new ArrayList<>(); if (!matchMeasuredEntityDns(report, filter)) { return newList; } - for (PmReport.MeasInfoList oldMeasInfoList : report.event.perf3gppFields.measDataCollection.measInfoList) { - PmReport.MeasInfoList l = createMeasInfoList(oldMeasInfoList, filter); - if (!l.measValuesList.isEmpty()) { + for (MeasInfoList oldMeasInfoList : report.event.getPerf3gppFields().getMeasDataCollection() + .getMeasInfoList()) { + MeasInfoList l = createMeasInfoList(oldMeasInfoList, filter); + if (!l.getMeasValuesList().isEmpty()) { newList.add(l); } } @@ -248,7 +274,7 @@ public class PmReportFilter implements Filter { } private boolean matchSourceNames(PmReport report, Collection sourceNames) { - return sourceNames.isEmpty() || sourceNames.contains(report.event.commonEventHeader.sourceName); + return sourceNames.isEmpty() || sourceNames.contains(report.event.getCommonEventHeader().getSourceName()); } } diff --git a/src/main/java/org/oran/dmaapadapter/tasks/JobDataDistributor.java b/src/main/java/org/oran/dmaapadapter/tasks/JobDataDistributor.java index 259edbf..2e247eb 100644 --- a/src/main/java/org/oran/dmaapadapter/tasks/JobDataDistributor.java +++ b/src/main/java/org/oran/dmaapadapter/tasks/JobDataDistributor.java @@ -118,12 +118,14 @@ public abstract class JobDataDistributor { logger.debug("Skipping check of historical PM ROP files, already done. jobId: {}", this.job.getId()); } - }).filter(isLockGranted -> isLockGranted) // + }) // + .filter(isLockGranted -> isLockGranted) // .flatMapMany(b -> Flux.fromIterable(filter.getFilterData().getSourceNames())) // .doOnNext(sourceName -> logger.debug("Checking source name: {}, jobId: {}", sourceName, this.job.getId())) // .flatMap(sourceName -> dataStore.listObjects(DataStore.Bucket.FILES, sourceName), 1) // - .filter(this::isRopFile).filter(fileName -> filterStartTime(filter.getFilterData(), fileName)) // + .filter(this::isRopFile) // + .filter(fileName -> filterStartTime(filter.getFilterData(), fileName)) // .filter(fileName -> filterEndTime(filter.getFilterData(), fileName)) // .map(this::createFakeEvent) // .flatMap(data -> KafkaTopicListener.getDataFromFileIfNewPmFileEvent(data, this.job.getType(), diff --git a/src/test/java/org/oran/dmaapadapter/filter/PmReportFilterTest.java b/src/test/java/org/oran/dmaapadapter/filter/PmReportFilterTest.java index b32d6d1..2f1f3a6 100644 --- a/src/test/java/org/oran/dmaapadapter/filter/PmReportFilterTest.java +++ b/src/test/java/org/oran/dmaapadapter/filter/PmReportFilterTest.java @@ -283,12 +283,12 @@ class PmReportFilterTest { com.google.gson.Gson gson = new com.google.gson.GsonBuilder().disableHtmlEscaping().create(); PmReport report = gson.fromJson(loadReport(), PmReport.class); - String dn = report.event.perf3gppFields.measDataCollection.measuredEntityDn; + String dn = report.event.getPerf3gppFields().getMeasDataCollection().getMeasuredEntityDn(); String json = gson.toJson(report); report = gson.fromJson(json, PmReport.class); // '=' is escaped to unicode by gson. but converted back - assertThat(report.event.perf3gppFields.measDataCollection.measuredEntityDn).isEqualTo(dn); + assertThat(report.event.getPerf3gppFields().getMeasDataCollection().getMeasuredEntityDn()).isEqualTo(dn); } private String loadReport() throws Exception { -- 2.16.6