1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.enforcer.rules.checksum;
20
21 import javax.inject.Inject;
22 import javax.inject.Named;
23
24 import java.io.IOException;
25 import java.io.InputStream;
26 import java.io.Reader;
27 import java.nio.charset.Charset;
28 import java.nio.file.Files;
29 import java.util.Objects;
30
31 import org.apache.commons.io.input.ReaderInputStream;
32 import org.apache.commons.lang3.StringUtils;
33 import org.apache.maven.enforcer.rule.api.EnforcerRuleError;
34 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
35 import org.apache.maven.enforcer.rules.checksum.NormalizeLineSeparatorReader.LineSeparator;
36 import org.apache.maven.project.MavenProject;
37
38
39
40
41
42
43
44 @Named("requireTextFileChecksum")
45 public final class RequireTextFileChecksum extends RequireFileChecksum {
46
47 private NormalizeLineSeparatorReader.LineSeparator normalizeLineSeparatorTo = LineSeparator.UNIX;
48
49 private Charset encoding;
50
51 private final MavenProject project;
52
53 @Inject
54 public RequireTextFileChecksum(MavenProject project) {
55 this.project = Objects.requireNonNull(project);
56 }
57
58 public void setNormalizeLineSeparatorTo(NormalizeLineSeparatorReader.LineSeparator normalizeLineSeparatorTo) {
59 this.normalizeLineSeparatorTo = normalizeLineSeparatorTo;
60 }
61
62 public void setEncoding(String encoding) {
63 this.encoding = Charset.forName(encoding);
64 }
65
66 public Charset getEncoding() {
67 return encoding;
68 }
69
70 @Override
71 public void execute() throws EnforcerRuleException {
72
73 if (encoding == null) {
74
75 String projectEncoding = project.getProperties().getProperty("project.build.sourceEncoding", null);
76 if (StringUtils.isBlank(projectEncoding)) {
77 encoding = Charset.defaultCharset();
78 getLog().warn(
79 "File encoding has not been set, using platform encoding " + encoding.displayName()
80 + ". Build is platform dependent! - https://maven.apache.org/general.html#How_do_I_prevent_.E2.80.9C.5BWARNING.5D_Using_platform_encoding_.28Cp1252_actually.29_to_copy_filtered_resources.2C_i.e._build_is_platform_dependent.21.E2.80.9D");
81 } else {
82 encoding = Charset.forName(projectEncoding);
83 }
84 }
85 super.execute();
86 }
87
88 @Override
89 protected String calculateChecksum() throws EnforcerRuleException {
90 try (Reader reader = new NormalizeLineSeparatorReader(
91 Files.newBufferedReader(getFile().toPath(), encoding), normalizeLineSeparatorTo);
92 InputStream inputStream = new ReaderInputStream(reader, encoding)) {
93 return super.calculateChecksum(inputStream);
94 } catch (IOException e) {
95 throw new EnforcerRuleError("Unable to calculate checksum (with normalized line separators)", e);
96 }
97 }
98
99 @Override
100 public String toString() {
101 return String.format(
102 "RequireFileChecksum[message=%s, file=%s, checksum=%s, type=%s, encoding=%s, normalizeLineSeparatorTo=%s, nonexistentFileMessage=%s, level=%s]",
103 getMessage(),
104 getFile(),
105 getChecksum(),
106 getType(),
107 encoding,
108 normalizeLineSeparatorTo,
109 getNonexistentFileMessage(),
110 getLevel());
111 }
112 }