1 package org.apache.maven.plugins.enforcer;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.util.ArrayList;
24 import java.util.List;
25
26 import org.apache.maven.enforcer.rule.api.EnforcerRule;
27 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
28 import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
29
30
31
32
33
34
35 public abstract class AbstractRequireFiles
36 extends AbstractStandardEnforcerRule
37 {
38
39
40 private File[] files;
41
42
43 private boolean allowNulls = false;
44
45
46
47
48
49
50
51
52 abstract boolean checkFile( File file );
53
54
55
56
57
58
59
60 abstract String getErrorMsg();
61
62 @Override
63 public void execute( EnforcerRuleHelper helper )
64 throws EnforcerRuleException
65 {
66
67 if ( !allowNulls && files.length == 0 )
68 {
69 throw new EnforcerRuleException( "The file list is empty and Null files are disabled." );
70 }
71
72 List<File> failures = new ArrayList<File>();
73 for ( File file : files )
74 {
75 if ( !allowNulls && file == null )
76 {
77 failures.add( file );
78 }
79 else if ( !checkFile( file ) )
80 {
81 failures.add( file );
82 }
83 }
84
85
86 if ( !failures.isEmpty() )
87 {
88 String message = getMessage();
89
90 StringBuilder buf = new StringBuilder();
91 if ( message != null )
92 {
93 buf.append( message + System.lineSeparator() );
94 }
95 buf.append( getErrorMsg() );
96
97 for ( File file : failures )
98 {
99 if ( file != null )
100 {
101 buf.append( file.getAbsolutePath() + System.lineSeparator() );
102 }
103 else
104 {
105 buf.append( "(an empty filename was given and allowNulls is false)" + System.lineSeparator() );
106 }
107 }
108
109 throw new EnforcerRuleException( buf.toString() );
110 }
111 }
112
113 @Override
114 public String getCacheId()
115 {
116 return Integer.toString( hashCode( files ) );
117 }
118
119
120
121
122
123
124
125
126 private static int hashCode( Object[] items )
127 {
128 int hash = 0;
129 if ( items != null )
130 {
131 hash = 1;
132 for ( int i = 0; i < items.length; i++ )
133 {
134 Object item = items[i];
135 hash = 31 * hash + ( item == null ? 0 : item.hashCode() );
136 }
137 }
138 return hash;
139 }
140
141 @Override
142 public boolean isCacheable()
143 {
144 return true;
145 }
146
147 @Override
148 public boolean isResultValid( EnforcerRule cachedRule )
149 {
150 return true;
151 }
152
153 public File[] getFiles()
154 {
155 return files;
156 }
157
158 public void setFiles( File[] files )
159 {
160 this.files = files;
161 }
162
163 public boolean isAllowNulls()
164 {
165 return allowNulls;
166 }
167
168 public void setAllowNulls( boolean allowNulls )
169 {
170 this.allowNulls = allowNulls;
171 }
172 }