summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/onap/dcaegen2/services/pmmapper/App.java10
-rw-r--r--src/main/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandler.java79
2 files changed, 53 insertions, 36 deletions
diff --git a/src/main/java/org/onap/dcaegen2/services/pmmapper/App.java b/src/main/java/org/onap/dcaegen2/services/pmmapper/App.java
index 21e4441..6aeeaba 100644
--- a/src/main/java/org/onap/dcaegen2/services/pmmapper/App.java
+++ b/src/main/java/org/onap/dcaegen2/services/pmmapper/App.java
@@ -59,7 +59,6 @@ import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.ArrayList;
import java.util.List;
@Data
@@ -213,6 +212,7 @@ public class App {
try {
hasMatchingFilter = filterHandler.filterByMeasType(events);
if(!hasMatchingFilter) {
+ logger.unwrap().info("No filter match from all measurement files.");
sendEventProcessed(config,event);
}
} catch (Exception exception) {
@@ -223,25 +223,25 @@ public class App {
}
public static Flux<List<Event>> map(Mapper mapper, List<Event> events, MapperConfig config) {
- List<Event> mappedEvents = new ArrayList<>();
+ List<Event> mappedEvents;
try {
mappedEvents = mapper.mapEvents(events);
} catch (Exception exception) {
logger.unwrap().error("Unable to map XML to VES",exception);
sendEventProcessed(config,events.get(0));
- return Flux.<List<Event>>empty();
+ return Flux.empty();
}
return Flux.just(mappedEvents);
}
public static Flux<List<Event>> split(MeasSplitter splitter, Event event, MapperConfig config) {
- List<Event> splitEvents = new ArrayList<>();
+ List<Event> splitEvents;
try {
splitEvents = splitter.split(event);
} catch (Exception exception) {
logger.unwrap().error("Unable to split MeasCollecFile",exception);
sendEventProcessed(config,event);
- return Flux.<List<Event>>empty();
+ return Flux.empty();
}
return Flux.just(splitEvents);
}
diff --git a/src/main/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandler.java b/src/main/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandler.java
index fb5772e..7f2a5d6 100644
--- a/src/main/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandler.java
+++ b/src/main/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandler.java
@@ -21,8 +21,11 @@
package org.onap.dcaegen2.services.pmmapper.filtering;
import java.util.ArrayList;
+import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
import java.util.stream.Collectors;
import org.apache.commons.io.FilenameUtils;
@@ -68,16 +71,9 @@ public class MeasFilterHandler {
logger.unwrap().info("Filtering the measurement file by measTypes.");
MeasurementData measData = measurementFile.getMeasurementData().get().get(0);
List<MeasurementInfo> measInfos = measData.getMeasurementInfo();
- List<MeasurementInfo> filteredMeasInfos = new ArrayList<>();
+ List<Pattern> filterPatternList = getPatternsFromFilters(filter);
- for (MeasurementInfo currentMeasInfo : measInfos) {
- List<String> measTypesNode = currentMeasInfo.getMeasTypes();
- if (measTypesNode != null && !measTypesNode.isEmpty()) {
- setMeasInfosFromMeasTypes(currentMeasInfo, filteredMeasInfos, filter.get());
- } else {
- setMeasInfoFromMeasType(currentMeasInfo, filteredMeasInfos, filter.get());
- }
- }
+ List<MeasurementInfo> filteredMeasInfos = filterMeasInfos(measInfos, filterPatternList);
if (filteredMeasInfos.isEmpty()) {
logger.unwrap().info("No filter match from the current measurement file.");
@@ -90,27 +86,43 @@ public class MeasFilterHandler {
return true;
}
- /**
- * Filters each measInfo node in the list for measTypes that match the given measTypes from filters.
- **/
- public boolean filterByMeasType(List<Event> events) {
- boolean hasMatchAnyFilter = false;
- for (int i = 0; i < events.size(); i++) {
- Event currentEvent = events.get(i);
- boolean hasMatchingFilter = filterByMeasType(currentEvent);
- if (hasMatchingFilter) {
- hasMatchAnyFilter = true;
+ private List<MeasurementInfo> filterMeasInfos(List<MeasurementInfo> measInfos, List<Pattern> filterPatternList) {
+ List<MeasurementInfo> filteredMeasInfos = new LinkedList<>();
+ for (MeasurementInfo currentMeasInfo : measInfos) {
+ List<String> measTypesNode = currentMeasInfo.getMeasTypes();
+ if (measTypesNode != null && !measTypesNode.isEmpty()) {
+ getFilteredMeasInfosFromMeasTypes(currentMeasInfo, filterPatternList).ifPresent(filteredMeasInfos::add);
} else {
- events.remove(events.get(i));
+ getFilteredMeasInfoFromMeasType(currentMeasInfo, filterPatternList).ifPresent(filteredMeasInfos::add);
}
}
+ return filteredMeasInfos;
+ }
- if (!hasMatchAnyFilter) {
- logger.unwrap().info("No filter match from all measurement files.");
- return false;
+ private List<Pattern> getPatternsFromFilters(Optional<Filter> filters) {
+ List<Pattern> patternList = new LinkedList<>();
+ for (String filter : filters.get().getMeasTypes()) {
+ tryToCompileFilter(filter).ifPresent(patternList::add);
+ }
+ return patternList;
+ }
+ private Optional<Pattern> tryToCompileFilter(String measType) {
+ try {
+ return Optional.of(Pattern.compile("^" + measType + "$"));
+ } catch (PatternSyntaxException exception) {
+ logger.unwrap().warn("Can not parse measType filter: ", exception);
}
+ return Optional.empty();
+ }
- return true;
+ /**
+ * Filters each measInfo node in the list for measTypes that match the given measTypes from filters.
+ **/
+ public boolean filterByMeasType(List<Event> events) {
+ List<Event> filteredList = events.stream().filter(this::filterByMeasType).collect(Collectors.toList());
+ events.clear();
+ events.addAll(filteredList);
+ return !events.isEmpty();
}
private boolean hasNoFilters(Optional<Filter> filter) {
@@ -162,9 +174,9 @@ public class MeasFilterHandler {
return hasResults;
}
- private void setMeasInfoFromMeasType(MeasurementInfo currentMeasInfo, List<MeasurementInfo> filteredMeasInfos, Filter filter) {
+ private Optional<MeasurementInfo> getFilteredMeasInfoFromMeasType(MeasurementInfo currentMeasInfo, List<Pattern> filters) {
List<MeasurementInfo.MeasType> filteredMeasTypes = currentMeasInfo.getMeasType().stream()
- .filter(mt -> filter.getMeasTypes().contains(mt.getValue()))
+ .filter(mt -> matchFilters(filters, mt.getValue()))
.collect(Collectors.toList());
if(!filteredMeasTypes.isEmpty()) {
@@ -173,11 +185,16 @@ public class MeasFilterHandler {
.collect(Collectors.toList());
currentMeasInfo.replaceMeasType(filteredMeasTypes);
currentMeasInfo.replaceMeasValue(filteredMeasValues);
- filteredMeasInfos.add(currentMeasInfo);
+ return Optional.of(currentMeasInfo);
}
+ return Optional.empty();
+ }
+
+ private boolean matchFilters(List<Pattern> filters, String measType) {
+ return filters.stream().anyMatch(filter -> filter.matcher(measType).matches());
}
- private void setMeasInfosFromMeasTypes(MeasurementInfo currentMeasInfo, List<MeasurementInfo> filteredMeasInfos, Filter filter) {
+ private Optional<MeasurementInfo> getFilteredMeasInfosFromMeasTypes(MeasurementInfo currentMeasInfo, List<Pattern> filters) {
MeasValue currentMeasValue = currentMeasInfo.getMeasValue()
.get(0);
List<String> measTypesNode = currentMeasInfo.getMeasTypes();
@@ -187,8 +204,7 @@ public class MeasFilterHandler {
List<String> filteredMeasTypes = new ArrayList<>();
for (int j = 0; j < measTypesNode.size(); j++) {
String currentMeasType = measTypesNode.get(j);
- List<String> measTypeFilters = filter.getMeasTypes();
- if (measTypeFilters.contains(currentMeasType)) {
+ if (matchFilters(filters, currentMeasType)) {
filteredMeasTypes.add(currentMeasType);
filteredMeasResults.add(measResultsNode.get(j));
}
@@ -197,8 +213,9 @@ public class MeasFilterHandler {
if (!filteredMeasTypes.isEmpty()) {
currentMeasInfo.replaceMeasTypes(filteredMeasTypes);
currentMeasValue.replaceMeasResults(filteredMeasResults);
- filteredMeasInfos.add(currentMeasInfo);
+ return Optional.of(currentMeasInfo);
}
+ return Optional.empty();
}
}