You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by fp...@apache.org on 2022/03/08 16:39:25 UTC
[karaf-decanter] 01/01: [KARAF-7403] Add a config param to use default key id in the split parser
This is an automated email from the ASF dual-hosted git repository.
fpapon pushed a commit to branch KARAF-7403
in repository https://gitbox.apache.org/repos/asf/karaf-decanter.git
commit b2c413c53d16a16b835e69d7b8547e2cb3b4e408
Author: francois papon <fp...@apache.org>
AuthorDate: Tue Mar 8 17:38:40 2022 +0100
[KARAF-7403] Add a config param to use default key id in the split parser
---
.../src/main/asciidoc/user-guide/collectors.adoc | 4 +-
.../cfg/org.apache.karaf.decanter.parser.split.cfg | 4 +-
.../karaf/decanter/parser/split/SplitParser.java | 47 +++++++++++++---------
.../decanter/parser/split/SplitParserTest.java | 20 ++++++++-
4 files changed, 54 insertions(+), 21 deletions(-)
diff --git a/manual/src/main/asciidoc/user-guide/collectors.adoc b/manual/src/main/asciidoc/user-guide/collectors.adoc
index 1c69523..30c5ab5 100644
--- a/manual/src/main/asciidoc/user-guide/collectors.adoc
+++ b/manual/src/main/asciidoc/user-guide/collectors.adoc
@@ -185,6 +185,7 @@ For instance, you can have the following `etc/org.apache.karaf.decanter.parser.s
----
separator=,
keys=first,second,third,fourth
+useDefaultKey=false
----
If the parser gets a line (collected by the file collector) like `this,is,a,test`, the line will be parsed as follows (the file collector will send the following data to the dispatcher):
@@ -196,7 +197,8 @@ third->a
fourth->test
----
-If the `keys` configuration is not set, then `key-0`, `key-1`, etc will be used.
+If the `keys` configuration is not set and `useDefaultKey` is set to `true`, then `key-0`, `key-1`, etc will be used.
+When the `useDefaultKey` is set to `false` and the line doesn't match the `keys` configuration the data will not be sent.
To use this parser in the file collector, you have to define it in the `parser.target` configuration (in `etc/org.apache.karaf.decanter.collector.file-XXXX.cfg`):
diff --git a/parser/split/src/main/cfg/org.apache.karaf.decanter.parser.split.cfg b/parser/split/src/main/cfg/org.apache.karaf.decanter.parser.split.cfg
index 4796b77..8dd59cb 100644
--- a/parser/split/src/main/cfg/org.apache.karaf.decanter.parser.split.cfg
+++ b/parser/split/src/main/cfg/org.apache.karaf.decanter.parser.split.cfg
@@ -22,4 +22,6 @@
#
separator=,
-# keys=key1,key2,key3
\ No newline at end of file
+# keys=key1,key2,key3
+
+useDefaultKey=false
\ No newline at end of file
diff --git a/parser/split/src/main/java/org/apache/karaf/decanter/parser/split/SplitParser.java b/parser/split/src/main/java/org/apache/karaf/decanter/parser/split/SplitParser.java
index 6f2c9b5..9195c57 100644
--- a/parser/split/src/main/java/org/apache/karaf/decanter/parser/split/SplitParser.java
+++ b/parser/split/src/main/java/org/apache/karaf/decanter/parser/split/SplitParser.java
@@ -38,6 +38,7 @@ public class SplitParser implements Parser {
private String separator;
private String keys = null;
+ private Boolean useDefaultKey;
@Activate
public void activate(ComponentContext componentContext) {
@@ -47,11 +48,13 @@ public class SplitParser implements Parser {
public void activate(Dictionary<String, Object> config) {
this.separator = (config.get("separator") != null) ? (String) config.get("separator") : ",";
this.keys = (config.get("keys") != null) ? (String) config.get("keys") : null;
+ this.useDefaultKey = (config.get("useDefaultKey") != null) ? (Boolean) config.get("useDefaultKey") : false;
}
@Override
public Map<String, Object> parse(String key, String line) {
Map<String, Object> map = new HashMap<>();
+ boolean isByPassed = false;
if (line != null) {
String[] valuesArray = line.split(separator);
String[] keysArray;
@@ -59,10 +62,15 @@ public class SplitParser implements Parser {
if (this.keys != null) {
keysArray = this.keys.split(",");
if (keysArray.length != valuesArray.length) {
- LOGGER.warn("keys count and values count don't match, using default keys ID");
- keysArray = new String[valuesArray.length];
- for (int i = 0; i < valuesArray.length; i++) {
- keysArray[i] = "key-" + i;
+ if (useDefaultKey) {
+ LOGGER.warn("keys count and values count don't match, using default key ID");
+ keysArray = new String[valuesArray.length];
+ for (int i = 0; i < valuesArray.length; i++) {
+ keysArray[i] = "key-" + i;
+ }
+ } else {
+ LOGGER.warn("keys count and values count don't match, bypassing default key ID");
+ isByPassed = true;
}
}
} else {
@@ -71,22 +79,25 @@ public class SplitParser implements Parser {
keysArray[i] = "key-" + i;
}
}
- for (int i = 0; i < valuesArray.length; i++) {
- try {
- map.put(keysArray[i], Integer.parseInt(valuesArray[i]));
- continue;
- } catch (Exception e) {
- // nothing to do
- }
- try {
- map.put(keysArray[i], Long.parseLong(valuesArray[i]));
- continue;
- } catch (Exception e) {
- // nothing to do
+ if (!isByPassed) {
+ for (int i = 0; i < valuesArray.length; i++) {
+ try {
+ map.put(keysArray[i], Integer.parseInt(valuesArray[i]));
+ continue;
+ } catch (Exception e) {
+ // nothing to do
+ }
+
+ try {
+ map.put(keysArray[i], Long.parseLong(valuesArray[i]));
+ continue;
+ } catch (Exception e) {
+ // nothing to do
+ }
+ // if not integer and long value
+ map.put(keysArray[i], valuesArray[i]);
}
- // if not integer and long value
- map.put(keysArray[i], valuesArray[i]);
}
}
return map;
diff --git a/parser/split/src/test/java/org/apache/karaf/decanter/parser/split/SplitParserTest.java b/parser/split/src/test/java/org/apache/karaf/decanter/parser/split/SplitParserTest.java
index c05149a..a2ad070 100644
--- a/parser/split/src/test/java/org/apache/karaf/decanter/parser/split/SplitParserTest.java
+++ b/parser/split/src/test/java/org/apache/karaf/decanter/parser/split/SplitParserTest.java
@@ -59,11 +59,29 @@ public class SplitParserTest {
}
@Test
- public void invalidKeys() throws Exception {
+ public void invalidKeysWithoutDefaultKey() throws Exception {
SplitParser splitParser = new SplitParser();
Dictionary<String, Object> config = new Hashtable<>();
config.put("separator", "\\s+");
config.put("keys", "this,is");
+ config.put("useDefaultKey", true);
+ splitParser.activate(config);
+
+ Map<String, Object> result = splitParser.parse("line", TEST_LINE);
+ Assert.assertEquals(4, result.size());
+ Assert.assertEquals("this", result.get("key-0"));
+ Assert.assertEquals("is", result.get("key-1"));
+ Assert.assertEquals("a", result.get("key-2"));
+ Assert.assertEquals("test", result.get("key-3"));
+ }
+
+ @Test
+ public void invalidKeysWithDefaultKey() throws Exception {
+ SplitParser splitParser = new SplitParser();
+ Dictionary<String, Object> config = new Hashtable<>();
+ config.put("separator", "\\s+");
+ config.put("keys", "this,is");
+ config.put("useDefaultKey", true);
splitParser.activate(config);
Map<String, Object> result = splitParser.parse("line", TEST_LINE);