1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.deri.any23.extractor;
18
19 import org.deri.any23.configuration.Configuration;
20 import org.deri.any23.configuration.DefaultConfiguration;
21
22 import java.util.HashMap;
23 import java.util.Map;
24
25
26
27
28
29
30
31 public class ExtractionParameters {
32
33
34
35
36
37 public static final ExtractionParameters newDefault(Configuration c) {
38 return new ExtractionParameters(c, ValidationMode.None);
39 }
40
41
42
43
44
45
46 public static final ExtractionParameters newDefault() {
47 return new ExtractionParameters(DefaultConfiguration.singleton(), ValidationMode.None);
48 }
49
50
51
52
53 public enum ValidationMode {
54 None,
55 Validate,
56 ValidateAndFix
57 }
58
59 private final Configuration configuration;
60
61 private final ValidationMode extractionMode;
62
63 private final Map<String, Boolean> extractionFlags;
64
65 private final Map<String,String> extractionProperties;
66
67
68
69
70
71
72
73
74
75
76
77 public ExtractionParameters(
78 Configuration configuration,
79 ValidationMode extractionMode,
80 Map<String, Boolean> extractionFlags,
81 Map<String,String> extractionProperties
82 ) {
83 if(configuration == null) {
84 throw new NullPointerException("Configuration cannot be null.");
85 }
86 if(extractionMode == null) {
87 throw new NullPointerException("Extraction mode cannot be null.");
88 }
89 this.configuration = configuration;
90 this.extractionMode = extractionMode;
91 this.extractionFlags =
92 extractionFlags == null
93 ?
94 new HashMap<String,Boolean>()
95 :
96 new HashMap<String,Boolean>(extractionFlags);
97 this.extractionProperties =
98 extractionProperties == null
99 ?
100 new HashMap<String,String>()
101 :
102 new HashMap<String,String>(extractionProperties);
103 }
104
105
106
107
108
109
110
111 public ExtractionParameters(Configuration configuration, ValidationMode extractionMode) {
112 this(configuration, extractionMode, null, null);
113 }
114
115
116
117
118
119
120
121
122
123 public ExtractionParameters(Configuration configuration, ValidationMode extractionMode, final boolean nesting) {
124 this(
125 configuration,
126 extractionMode,
127 new HashMap<String, Boolean>(){{
128 put(SingleDocumentExtraction.METADATA_NESTING_FLAG, nesting);
129 }},
130 null
131 );
132 }
133
134
135
136
137 public boolean isValidate() {
138 return extractionMode == ValidationMode.Validate || extractionMode == ValidationMode.ValidateAndFix;
139 }
140
141
142
143
144 public boolean isFix() {
145 return extractionMode == ValidationMode.ValidateAndFix;
146 }
147
148
149
150
151
152
153
154
155 public boolean getFlag(String flagName) {
156 final Boolean value = extractionFlags.get(flagName);
157 if(value == null) {
158 return configuration.getFlagProperty(flagName);
159 }
160 return value;
161 }
162
163
164
165
166
167
168
169
170 public Boolean setFlag(String flagName, boolean value) {
171 checkPropertyExists(flagName);
172 validateValue("flag name", flagName);
173 return extractionFlags.put(flagName, value);
174 }
175
176
177
178
179
180
181
182
183 public String getProperty(String propertyName) {
184 final String propertyValue = extractionProperties.get(propertyName);
185 if(propertyValue == null) {
186 return configuration.getPropertyOrFail(propertyName);
187 }
188 return propertyValue;
189 }
190
191
192
193
194
195
196
197
198 public String setProperty(String propertyName, String propertyValue) {
199 checkPropertyExists(propertyName);
200 validateValue("property name" , propertyName);
201 validateValue("property value", propertyValue);
202 return extractionProperties.put(propertyName, propertyValue);
203 }
204
205 @Override
206 public boolean equals(Object obj) {
207 if(obj == null) {
208 return false;
209 }
210 if(obj == this) {
211 return true;
212 }
213 if(obj instanceof ExtractionParameters) {
214 ExtractionParameters other = (ExtractionParameters) obj;
215 return
216 extractionMode == other.extractionMode
217 &&
218 extractionFlags.equals( other.extractionFlags)
219 &&
220 extractionProperties.equals( other.extractionProperties );
221 }
222 return false;
223 }
224
225 @Override
226 public int hashCode() {
227 return extractionMode.hashCode() * 2 * extractionFlags.hashCode() * 3 * extractionProperties.hashCode() * 5;
228 }
229
230 private void checkPropertyExists(String propertyName) {
231 if(! configuration.defineProperty(propertyName) ) {
232 throw new IllegalArgumentException(
233 String.format("Property '%s' is unknown and cannot be set.", propertyName)
234 );
235 }
236 }
237
238 private void validateValue(String desc, String value) {
239 if(value == null || value.trim().length() == 0)
240 throw new IllegalArgumentException( String.format("Invalid %s value: '%s', flagName", desc, value) );
241 }
242 }