From 523fa176e7f54f74b44e6f9b30ae6a6a69e56432 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Wed, 26 Feb 2020 03:18:52 -0500 Subject: [PATCH] add support for prefix before header, allow comments in header json --- .../org/cobbzilla/util/main/FileHeader.java | 5 ++++- .../org/cobbzilla/util/main/FileHeaderMain.java | 17 +++++++++++++++-- .../cobbzilla/util/main/FileHeaderOptions.java | 3 ++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/cobbzilla/util/main/FileHeader.java b/src/main/java/org/cobbzilla/util/main/FileHeader.java index 68c6eb2..c2452d6 100644 --- a/src/main/java/org/cobbzilla/util/main/FileHeader.java +++ b/src/main/java/org/cobbzilla/util/main/FileHeader.java @@ -10,7 +10,10 @@ public class FileHeader { @Getter @Setter private String ext; @Getter @Setter private String header; @Getter @Setter private String regex; - @Getter(lazy=true) private final Pattern pattern = Pattern.compile(getRegex()+"\n", Pattern.MULTILINE); + @Getter @Setter private String prefix; + public boolean hasPrefix () { return prefix != null; } + @Getter(lazy=true) private final Pattern prefixPattern = Pattern.compile(getPrefix()+"\n", Pattern.MULTILINE); + } diff --git a/src/main/java/org/cobbzilla/util/main/FileHeaderMain.java b/src/main/java/org/cobbzilla/util/main/FileHeaderMain.java index 4e51af1..b85b54f 100644 --- a/src/main/java/org/cobbzilla/util/main/FileHeaderMain.java +++ b/src/main/java/org/cobbzilla/util/main/FileHeaderMain.java @@ -24,12 +24,25 @@ public class FileHeaderMain extends BaseMain { if (header != null) { String contents = toStringOrDie(file); if (contents == null) contents = ""; + final String prefix; + if (header.hasPrefix()) { + final Matcher prefixMatcher = header.getPrefixPattern().matcher(contents); + if (!prefixMatcher.find()) { + err("prefix not found ("+header.getPrefix().replace("\n", "\\n")+") in file: "+abs(file)); + return; + } + prefix = contents.substring(0, prefixMatcher.start()) + + contents.substring(prefixMatcher.start(), prefixMatcher.end()); + contents = contents.substring(prefixMatcher.end()); + } else { + prefix = ""; + } final Matcher matcher = header.getPattern().matcher(contents); if (matcher.find()) { - contents = contents.substring(0, matcher.start()) + contents = prefix + contents.substring(0, matcher.start()) + header.getHeader() + "\n" + contents.substring(matcher.end()); } else { - contents = header.getHeader() + "\n" + contents; + contents = prefix + header.getHeader() + "\n" + contents; } out(abs(file)); toFileOrDie(file, contents); diff --git a/src/main/java/org/cobbzilla/util/main/FileHeaderOptions.java b/src/main/java/org/cobbzilla/util/main/FileHeaderOptions.java index 3f95845..55d3288 100644 --- a/src/main/java/org/cobbzilla/util/main/FileHeaderOptions.java +++ b/src/main/java/org/cobbzilla/util/main/FileHeaderOptions.java @@ -13,6 +13,7 @@ import java.util.Map; import java.util.stream.Collectors; import static java.util.function.Function.identity; +import static org.cobbzilla.util.json.JsonUtil.FULL_MAPPER_ALLOW_COMMENTS; import static org.cobbzilla.util.json.JsonUtil.json; import static org.cobbzilla.util.string.StringUtil.UTF8cs; @@ -37,7 +38,7 @@ public class FileHeaderOptions extends BaseMainOptions { } else { input = inStream(new File(headersJson)); } - final FileHeader[] headers = json(IOUtils.toString(input, UTF8cs), FileHeader[].class); + final FileHeader[] headers = json(IOUtils.toString(input, UTF8cs), FileHeader[].class, FULL_MAPPER_ALLOW_COMMENTS); return Arrays.stream(headers).collect(Collectors.toMap(FileHeader::getExt, identity())); }