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
32 public class ExtractionParameters {
33
34
35
36
37
38 public static final ExtractionParameters newDefault(Configuration c) {
39 return new ExtractionParameters(c, ValidationMode.None);
40 }
41
42
43
44
45
46
47 public static final ExtractionParameters newDefault() {
48 return new ExtractionParameters(DefaultConfiguration.singleton(), ValidationMode.None);
49 }
50
51
52
53
54 public enum ValidationMode {
55 None,
56 Validate,
57 ValidateAndFix
58 }
59
60 private final Configuration configuration;
61
62 private final ValidationMode extractionMode;
63
64 private final Map<String, Boolean> extractionFlags;
65
66 private final Map<String,String> extractionProperties;
67
68 public static final String METADATA_DOMAIN_PER_ENTITY_FLAG = "any23.extraction.metadata.domain.per.entity";
69
70 public static final String METADATA_NESTING_FLAG = "any23.extraction.metadata.nesting";
71
72 public static final String METADATA_TIMESIZE_FLAG = "any23.extraction.metadata.timesize";
73
74 public static final String EXTRACTION_CONTEXT_URI_PROPERTY = "any23.extraction.context.uri";
75
76
77
78
79
80
81
82
83
84
85
86 public ExtractionParameters(
87 Configuration configuration,
88 ValidationMode extractionMode,
89 Map<String, Boolean> extractionFlags,
90 Map<String,String> extractionProperties
91 ) {
92 if(configuration == null) {
93 throw new NullPointerException("Configuration cannot be null.");
94 }
95 if(extractionMode == null) {
96 throw new NullPointerException("Extraction mode cannot be null.");
97 }
98 this.configuration = configuration;
99 this.extractionMode = extractionMode;
100 this.extractionFlags =
101 extractionFlags == null
102 ?
103 new HashMap<String,Boolean>()
104 :
105 new HashMap<String,Boolean>(extractionFlags);
106 this.extractionProperties =
107 extractionProperties == null
108 ?
109 new HashMap<String,String>()
110 :
111 new HashMap<String,String>(extractionProperties);
112 }
113
114
115
116
117
118
119
120 public ExtractionParameters(Configuration configuration, ValidationMode extractionMode) {
121 this(configuration, extractionMode, null, null);
122 }
123
124
125
126
127
128
129
130
131
132 public ExtractionParameters(Configuration configuration, ValidationMode extractionMode, final boolean nesting) {
133 this(
134 configuration,
135 extractionMode,
136 new HashMap<String, Boolean>(){{
137 put(ExtractionParameters.METADATA_NESTING_FLAG, nesting);
138 }},
139 null
140 );
141 }
142
143
144
145
146 public boolean isValidate() {
147 return extractionMode == ValidationMode.Validate || extractionMode == ValidationMode.ValidateAndFix;
148 }
149
150
151
152
153 public boolean isFix() {
154 return extractionMode == ValidationMode.ValidateAndFix;
155 }
156
157
158
159
160
161
162
163
164 public boolean getFlag(String flagName) {
165 final Boolean value = extractionFlags.get(flagName);
166 if(value == null) {
167 return configuration.getFlagProperty(flagName);
168 }
169 return value;
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 public String getProperty(String propertyName) {
194 final String propertyValue = extractionProperties.get(propertyName);
195 if(propertyValue == null) {
196 return configuration.getPropertyOrFail(propertyName);
197 }
198 return propertyValue;
199 }
200
201
202
203
204
205
206
207
208 public String setProperty(String propertyName, String propertyValue) {
209 checkPropertyExists(propertyName);
210 validateValue("property name" , propertyName);
211 validateValue("property value", propertyValue);
212 return extractionProperties.put(propertyName, propertyValue);
213 }
214
215 @Override
216 public boolean equals(Object obj) {
217 if(obj == null) {
218 return false;
219 }
220 if(obj == this) {
221 return true;
222 }
223 if(obj instanceof ExtractionParameters) {
224 ExtractionParameters other = (ExtractionParameters) obj;
225 return
226 extractionMode == other.extractionMode
227 &&
228 extractionFlags.equals( other.extractionFlags)
229 &&
230 extractionProperties.equals( other.extractionProperties );
231 }
232 return false;
233 }
234
235 @Override
236 public int hashCode() {
237 return extractionMode.hashCode() * 2 * extractionFlags.hashCode() * 3 * extractionProperties.hashCode() * 5;
238 }
239
240 private void checkPropertyExists(String propertyName) {
241 if(! configuration.defineProperty(propertyName) ) {
242 throw new IllegalArgumentException(
243 String.format("Property '%s' is unknown and cannot be set.", propertyName)
244 );
245 }
246 }
247
248 private void validateValue(String desc, String value) {
249 if(value == null || value.trim().length() == 0)
250 throw new IllegalArgumentException( String.format("Invalid %s: '%s'", desc, value) );
251 }
252 }