mirror of https://github.com/apache/nifi.git
NIFI-3497 - fixing Pcontrib issues
This commit is contained in:
parent
c5d52cf6f0
commit
65ed46de9a
|
@ -107,7 +107,6 @@ public class ScanAttribute extends AbstractProcessor {
|
||||||
.addValidator(StandardValidators.createRegexValidator(0, 1, false))
|
.addValidator(StandardValidators.createRegexValidator(0, 1, false))
|
||||||
.defaultValue(null)
|
.defaultValue(null)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final PropertyDescriptor DICTIONARY_ENTRY_METADATA_DEMARCATOR = new PropertyDescriptor.Builder()
|
public static final PropertyDescriptor DICTIONARY_ENTRY_METADATA_DEMARCATOR = new PropertyDescriptor.Builder()
|
||||||
.name("Dictionary Entry Metadata Demarcator")
|
.name("Dictionary Entry Metadata Demarcator")
|
||||||
.description("A single character used to demarcate the dictionary entry string between dictionary value and metadata.")
|
.description("A single character used to demarcate the dictionary entry string between dictionary value and metadata.")
|
||||||
|
@ -196,16 +195,13 @@ public class ScanAttribute extends AbstractProcessor {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dictionaryEntryMetadataDemarcator != null && line.contains(dictionaryEntryMetadataDemarcator))
|
if(dictionaryEntryMetadataDemarcator != null && line.contains(dictionaryEntryMetadataDemarcator)) {
|
||||||
{
|
termMeta = line.split(dictionaryEntryMetadataDemarcator);
|
||||||
termMeta = line.split(dictionaryEntryMetadataDemarcator);
|
term = termMeta[0];
|
||||||
term = termMeta[0];
|
meta = termMeta[1];
|
||||||
meta = termMeta[1];
|
} else {
|
||||||
}
|
term=line;
|
||||||
else
|
meta="";
|
||||||
{
|
|
||||||
term=line;
|
|
||||||
meta="";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String matchingTerm = term;
|
String matchingTerm = term;
|
||||||
|
@ -248,8 +244,8 @@ public class ScanAttribute extends AbstractProcessor {
|
||||||
final boolean matchAll = context.getProperty(MATCHING_CRITERIA).getValue().equals(MATCH_CRITERIA_ALL);
|
final boolean matchAll = context.getProperty(MATCHING_CRITERIA).getValue().equals(MATCH_CRITERIA_ALL);
|
||||||
|
|
||||||
for (FlowFile flowFile : flowFiles) {
|
for (FlowFile flowFile : flowFiles) {
|
||||||
final Map<String,String> matched = (matchAll ? matchAll(flowFile, attributePattern, dictionaryTerms) : matchAny(flowFile, attributePattern, dictionaryTerms));
|
final Map<String,String> matched = (matchAll ? matchAll(flowFile, attributePattern, dictionaryTerms) : matchAny(flowFile, attributePattern, dictionaryTerms));
|
||||||
flowFile = session.putAllAttributes(flowFile, matched);
|
flowFile = session.putAllAttributes(flowFile, matched);
|
||||||
|
|
||||||
final Relationship relationship = (((matched.size() == (attributeNameMatches.size() * 3) && matchAll) || (matched.size() > 0 && !matchAll))) ? REL_MATCHED : REL_UNMATCHED;
|
final Relationship relationship = (((matched.size() == (attributeNameMatches.size() * 3) && matchAll) || (matched.size() > 0 && !matchAll))) ? REL_MATCHED : REL_UNMATCHED;
|
||||||
session.getProvenanceReporter().route(flowFile, relationship);
|
session.getProvenanceReporter().route(flowFile, relationship);
|
||||||
|
@ -259,20 +255,20 @@ public class ScanAttribute extends AbstractProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String,String> matchAny(final FlowFile flowFile, final Pattern attributePattern, final Map<String,String> dictionary) {
|
private Map<String,String> matchAny(final FlowFile flowFile, final Pattern attributePattern, final Map<String,String> dictionary) {
|
||||||
Map<String,String> dictionaryTermMatches = new HashMap<String,String>();
|
Map<String,String> dictionaryTermMatches = new HashMap<String,String>();
|
||||||
attributeNameMatches = new HashSet<String>();
|
attributeNameMatches = new HashSet<String>();
|
||||||
|
|
||||||
int hitCounter = 0;
|
int hitCounter = 0;
|
||||||
|
|
||||||
for (final Map.Entry<String, String> attribute : flowFile.getAttributes().entrySet()) {
|
for (final Map.Entry<String, String> attribute : flowFile.getAttributes().entrySet()) {
|
||||||
if (attributePattern == null || attributePattern.matcher(attribute.getKey()).matches()) {
|
if (attributePattern == null || attributePattern.matcher(attribute.getKey()).matches()) {
|
||||||
attributeNameMatches.add(attribute.getKey());
|
attributeNameMatches.add(attribute.getKey());
|
||||||
|
|
||||||
if (dictionary.containsKey(attribute.getValue())) {
|
if (dictionary.containsKey(attribute.getValue())) {
|
||||||
hitCounter++;
|
hitCounter++;
|
||||||
dictionaryTermMatches.put("dictionary.hit." + hitCounter + ".attribute", attribute.getKey());
|
dictionaryTermMatches.put("dictionary.hit." + hitCounter + ".attribute", attribute.getKey());
|
||||||
dictionaryTermMatches.put("dictionary.hit." + hitCounter + ".term", attribute.getValue());
|
dictionaryTermMatches.put("dictionary.hit." + hitCounter + ".term", attribute.getValue());
|
||||||
dictionaryTermMatches.put("dictionary.hit." + hitCounter + ".metadata", dictionary.get(attribute.getValue()));
|
dictionaryTermMatches.put("dictionary.hit." + hitCounter + ".metadata", dictionary.get(attribute.getValue()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -280,26 +276,24 @@ public class ScanAttribute extends AbstractProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String,String> matchAll(final FlowFile flowFile, final Pattern attributePattern, final Map<String,String> dictionary) {
|
private Map<String,String> matchAll(final FlowFile flowFile, final Pattern attributePattern, final Map<String,String> dictionary) {
|
||||||
Map<String,String> dictionaryTermMatches = new HashMap<String,String>();
|
Map<String,String> dictionaryTermMatches = new HashMap<String,String>();
|
||||||
attributeNameMatches = new HashSet<String>();
|
attributeNameMatches = new HashSet<String>();
|
||||||
|
|
||||||
int hitCounter = 0;
|
int hitCounter = 0;
|
||||||
|
|
||||||
for (final Map.Entry<String, String> attribute : flowFile.getAttributes().entrySet()) {
|
for (final Map.Entry<String, String> attribute : flowFile.getAttributes().entrySet()) {
|
||||||
if (attributePattern == null || attributePattern.matcher(attribute.getKey()).matches()) {
|
if (attributePattern == null || attributePattern.matcher(attribute.getKey()).matches()) {
|
||||||
attributeNameMatches.add(attribute.getKey());
|
attributeNameMatches.add(attribute.getKey());
|
||||||
|
|
||||||
if (dictionary.containsKey(attribute.getValue())) {
|
if (dictionary.containsKey(attribute.getValue())) {
|
||||||
hitCounter++;
|
hitCounter++;
|
||||||
dictionaryTermMatches.put("dictionary.hit." + hitCounter + ".attribute", attribute.getKey());
|
dictionaryTermMatches.put("dictionary.hit." + hitCounter + ".attribute", attribute.getKey());
|
||||||
dictionaryTermMatches.put("dictionary.hit." + hitCounter + ".term", attribute.getValue());
|
dictionaryTermMatches.put("dictionary.hit." + hitCounter + ".term", attribute.getValue());
|
||||||
dictionaryTermMatches.put("dictionary.hit." + hitCounter + ".metadata", dictionary.get(attribute.getValue()));
|
dictionaryTermMatches.put("dictionary.hit." + hitCounter + ".metadata", dictionary.get(attribute.getValue()));
|
||||||
}
|
} else {
|
||||||
else
|
//if one attribute value is not found in the dictionary then no need to continue since this is a matchAll scenario.
|
||||||
{
|
dictionaryTermMatches.clear();
|
||||||
//if one attribute value is not found in the dictionary then no need to continue since this is a matchAll scenario.
|
break;
|
||||||
dictionaryTermMatches.clear();
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.nifi.processors.standard;
|
package org.apache.nifi.processors.standard;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
Loading…
Reference in New Issue