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