@@ -10,7 +10,10 @@ public class FileHeader { | |||||
@Getter @Setter private String ext; | @Getter @Setter private String ext; | ||||
@Getter @Setter private String header; | @Getter @Setter private String header; | ||||
@Getter @Setter private String regex; | @Getter @Setter private String regex; | ||||
@Getter(lazy=true) private final Pattern pattern = Pattern.compile(getRegex()+"\n", Pattern.MULTILINE); | @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); | |||||
} | } |
@@ -24,12 +24,25 @@ public class FileHeaderMain extends BaseMain<FileHeaderOptions> { | |||||
if (header != null) { | if (header != null) { | ||||
String contents = toStringOrDie(file); | String contents = toStringOrDie(file); | ||||
if (contents == null) contents = ""; | 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); | final Matcher matcher = header.getPattern().matcher(contents); | ||||
if (matcher.find()) { | if (matcher.find()) { | ||||
contents = contents.substring(0, matcher.start()) | |||||
contents = prefix + contents.substring(0, matcher.start()) | |||||
+ header.getHeader() + "\n" + contents.substring(matcher.end()); | + header.getHeader() + "\n" + contents.substring(matcher.end()); | ||||
} else { | } else { | ||||
contents = header.getHeader() + "\n" + contents; | |||||
contents = prefix + header.getHeader() + "\n" + contents; | |||||
} | } | ||||
out(abs(file)); | out(abs(file)); | ||||
toFileOrDie(file, contents); | toFileOrDie(file, contents); | ||||
@@ -13,6 +13,7 @@ import java.util.Map; | |||||
import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||
import static java.util.function.Function.identity; | 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.json.JsonUtil.json; | ||||
import static org.cobbzilla.util.string.StringUtil.UTF8cs; | import static org.cobbzilla.util.string.StringUtil.UTF8cs; | ||||
@@ -37,7 +38,7 @@ public class FileHeaderOptions extends BaseMainOptions { | |||||
} else { | } else { | ||||
input = inStream(new File(headersJson)); | 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())); | return Arrays.stream(headers).collect(Collectors.toMap(FileHeader::getExt, identity())); | ||||
} | } | ||||