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.DefaultConfiguration;
21 import org.apache.any23.extractor.html.HTMLMetaExtractorFactory;
22 import org.apache.any23.extractor.rdfa.RDFa11ExtractorFactory;
23 import org.apache.any23.extractor.rdfa.RDFaExtractorFactory;
24
25 import java.util.ArrayList;
26 import java.util.Collections;
27 import java.util.List;
28
29
30
31
32 @SuppressWarnings("rawtypes")
33 public class ExtractorRegistryImpl extends
34 org.eclipse.rdf4j.common.lang.service.ServiceRegistry<String, ExtractorFactory> implements ExtractorRegistry {
35
36
37
38
39 private static ExtractorRegistry instance = null;
40
41
42
43
44 public ExtractorRegistryImpl() {
45 super(ExtractorFactory.class);
46 }
47
48
49
50
51 public static ExtractorRegistry getInstance() {
52
53 synchronized (ExtractorRegistry.class) {
54 final DefaultConfiguration conf = DefaultConfiguration.singleton();
55 if (instance == null) {
56 instance = new ExtractorRegistryImpl();
57
58 if (conf.getFlagProperty("any23.extraction.rdfa.programmatic")) {
59 instance.unregister(RDFaExtractorFactory.NAME);
60
61
62 } else {
63 instance.unregister(RDFa11ExtractorFactory.NAME);
64
65
66 }
67 if (!conf.getFlagProperty("any23.extraction.head.meta")) {
68 instance.unregister(HTMLMetaExtractorFactory.NAME);
69
70
71 }
72 }
73 }
74 return instance;
75 }
76
77
78
79
80
81
82
83
84
85
86 @Override
87 public void register(ExtractorFactory<?> factory) {
88 this.add(factory);
89 }
90
91
92
93
94
95
96
97 @Override
98 public void unregister(String name) {
99 if (this.has(name)) {
100 this.remove(this.get(name).get());
101 }
102 }
103
104
105
106
107
108
109
110
111
112
113
114
115
116 @Override
117 public ExtractorFactory<?> getFactory(final String name) {
118 return this.get(name).orElseThrow(() -> new IllegalArgumentException("Unregistered extractor name: " + name));
119 }
120
121
122
123
124 @Override
125 public ExtractorGroup getExtractorGroup() {
126 return getExtractorGroup(getAllNames());
127 }
128
129
130
131
132
133
134
135
136
137 @Override
138 public ExtractorGroup getExtractorGroup(List<String> names) {
139 List<ExtractorFactory<?>> members = new ArrayList<>(names.size());
140 for (String name : names) {
141 members.add(getFactory(name));
142 }
143 return new ExtractorGroup(members);
144 }
145
146
147
148
149
150
151
152
153 @Override
154 public boolean isRegisteredName(String name) {
155 return this.has(name);
156 }
157
158
159
160
161 @Override
162 public List<String> getAllNames() {
163 List<String> result = new ArrayList<>(this.getKeys());
164 Collections.sort(result);
165 return result;
166 }
167
168 @Override
169 protected String getKey(ExtractorFactory service) {
170 return service.getExtractorName();
171 }
172
173 }