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.files;
20
21 import java.io.File;
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.List;
25
26 import org.apache.maven.enforcer.rule.api.EnforcerRuleError;
27 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
28 import org.apache.maven.enforcer.rules.AbstractStandardEnforcerRule;
29
30
31
32
33
34
35 abstract class AbstractRequireFiles extends AbstractStandardEnforcerRule {
36
37
38 private List<File> files = Collections.emptyList();
39
40
41 private boolean allowNulls = false;
42
43
44 private boolean satisfyAny;
45
46
47
48
49
50
51
52
53 abstract boolean checkFile(File file);
54
55
56
57
58
59
60
61 abstract String getErrorMsg();
62
63 @Override
64 public void execute() throws EnforcerRuleException {
65
66 if (!allowNulls && files.isEmpty()) {
67 throw new EnforcerRuleError("The file list is empty and Null files are disabled.");
68 }
69
70 List<File> failures = new ArrayList<>();
71 for (File file : files) {
72 if (!allowNulls && file == null) {
73 failures.add(file);
74 } else if (!checkFile(file)) {
75 failures.add(file);
76 }
77 }
78
79 if (satisfyAny) {
80 int passed = files.size() - failures.size();
81 if (passed == 0) {
82 fail(failures);
83 }
84 }
85
86 else if (!failures.isEmpty()) {
87 fail(failures);
88 }
89 }
90
91 private void fail(List<File> failures) throws EnforcerRuleException {
92 String message = getMessage();
93
94 StringBuilder buf = new StringBuilder();
95 if (message != null) {
96 buf.append(message + System.lineSeparator());
97 }
98 buf.append(getErrorMsg());
99
100 for (File file : failures) {
101 if (file != null) {
102 buf.append(file.getAbsolutePath() + System.lineSeparator());
103 } else {
104 buf.append("(an empty filename was given and allowNulls is false)" + System.lineSeparator());
105 }
106 }
107
108 throw new EnforcerRuleException(buf.toString());
109 }
110
111 @Override
112 public String getCacheId() {
113 return Integer.toString(files.hashCode());
114 }
115
116 void setFilesList(List<File> files) {
117 this.files = files;
118 }
119
120
121
122 List<File> getFiles() {
123 return files;
124 }
125
126 void setAllowNulls(boolean allowNulls) {
127 this.allowNulls = allowNulls;
128 }
129
130 void setSatisfyAny(boolean satisfyAny) {
131 this.satisfyAny = satisfyAny;
132 }
133
134 @Override
135 public String toString() {
136 return String.format(
137 "%s[message=%s, files=%s, allowNulls=%b, satisfyAny=%b]",
138 getClass().getSimpleName(), getMessage(), files, allowNulls, satisfyAny);
139 }
140 }