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.mime.MIMEType;
21
22 import java.util.ArrayList;
23 import java.util.Collection;
24 import java.util.Iterator;
25
26
27
28
29
30 public class ExtractorGroup implements Iterable<ExtractorFactory<?>> {
31
32 private final Collection<ExtractorFactory<?>> factories;
33
34 public ExtractorGroup(Collection<ExtractorFactory<?>> factories) {
35 this.factories = factories;
36 }
37
38 public boolean isEmpty() {
39 return factories.isEmpty();
40 }
41
42 public int getNumOfExtractors() {
43 return factories.size();
44 }
45
46
47
48
49
50
51
52
53 public ExtractorGroup filterByMIMEType(MIMEType mimeType) {
54
55 Collection<ExtractorFactory<?>> matching = new ArrayList<ExtractorFactory<?>>();
56 for (ExtractorFactory<?> factory : factories) {
57 if (supportsAllContentTypes(factory) || supports(factory, mimeType)) {
58 matching.add(factory);
59 }
60 }
61 return new ExtractorGroup(matching);
62 }
63
64 public Iterator<ExtractorFactory<?>> iterator() {
65 return factories.iterator();
66 }
67
68
69
70
71
72 public boolean allExtractorsSupportAllContentTypes() {
73 for (ExtractorFactory<?> factory : factories) {
74 if (!supportsAllContentTypes(factory)) return false;
75 }
76 return true;
77 }
78
79 private boolean supportsAllContentTypes(ExtractorFactory<?> factory) {
80 return factory.getSupportedMIMETypes().contains("*/*");
81 }
82
83 private boolean supports(ExtractorFactory<?> factory, MIMEType mimeType) {
84 for (MIMEType supported : factory.getSupportedMIMETypes()) {
85 if (supported.isAnyMajorType()) return true;
86 if (supported.isAnySubtype() && supported.getMajorType().equals(mimeType.getMajorType())) return true;
87 if (supported.getFullType().equals(mimeType.getFullType())) return true;
88 }
89 return false;
90 }
91
92 }