From 5680007c773705efe7cdf744c4436d032fdb1380 Mon Sep 17 00:00:00 2001 From: Jens Wille Date: Tue, 11 Jan 2022 15:39:07 +0100 Subject: [PATCH] Add `random()` Fix function. (#100) --- .../org/metafacture/metafix/FixMethod.java | 17 ++++++++++++- .../metafix/MetafixRecordTest.java | 24 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/metafix/src/main/java/org/metafacture/metafix/FixMethod.java b/metafix/src/main/java/org/metafacture/metafix/FixMethod.java index 042e88a9..15edb404 100644 --- a/metafix/src/main/java/org/metafacture/metafix/FixMethod.java +++ b/metafix/src/main/java/org/metafacture/metafix/FixMethod.java @@ -22,6 +22,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Random; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -165,6 +166,14 @@ private boolean literalString(final String s) { return s.startsWith("~"); } }, + random { + public void apply(final Metafix metafix, final Record record, final List params, final Map options) { + final String field = params.get(0); + final int max = getInteger(params, 1); + + record.append(field, String.valueOf(RANDOM.nextInt(max))); + } + }, reject { public void apply(final Metafix metafix, final Record record, final List params, final Map options) { record.setReject(true); @@ -258,7 +267,7 @@ public void apply(final Metafix metafix, final Record record, final List }, substring { public void apply(final Metafix metafix, final Record record, final List params, final Map options) { - record.transformFields(params, s -> s.substring(Integer.parseInt(params.get(1)), Integer.parseInt(params.get(2)) - 1)); + record.transformFields(params, s -> s.substring(getInteger(params, 1), getInteger(params, 2) - 1)); } }, trim { @@ -280,6 +289,12 @@ public void apply(final Metafix metafix, final Record record, final List private static final String FILEMAP_SEPARATOR_OPTION = "sep_char"; private static final String FILEMAP_DEFAULT_SEPARATOR = ","; + private static final Random RANDOM = new Random(); + + private static int getInteger(final List params, final int index) { + return Integer.parseInt(params.get(index)); + } + abstract void apply(Metafix metafix, Record record, List params, Map options); } diff --git a/metafix/src/test/java/org/metafacture/metafix/MetafixRecordTest.java b/metafix/src/test/java/org/metafacture/metafix/MetafixRecordTest.java index bd69dea2..64b05d5d 100644 --- a/metafix/src/test/java/org/metafacture/metafix/MetafixRecordTest.java +++ b/metafix/src/test/java/org/metafacture/metafix/MetafixRecordTest.java @@ -24,6 +24,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.RegisterExtension; +import org.mockito.ArgumentMatchers; import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; @@ -1743,4 +1744,27 @@ public void accessArrayOfObjectsByDoListBind() { }); } + @Test + public void shouldAddRandomNumber() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "random(test, '100')" + ), + i -> { + i.startRecord("1"); + i.literal("title", "marc"); + i.literal("title", "json"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().startEntity("title"); + o.get().literal("1", "marc"); + o.get().literal("2", "json"); + o.get().endEntity(); + o.get().literal(ArgumentMatchers.eq("test"), ArgumentMatchers.argThat(i -> Integer.parseInt(i) < 100)); + o.get().endRecord(); + } + ); + } + }