1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.util;
17
18 import java.util.ArrayList;
19 import java.util.HashMap;
20 import java.util.List;
21 import java.util.Map;
22 import java.util.function.Consumer;
23
24 import org.apache.logging.log4j.LogManager;
25 import org.apache.logging.log4j.Logger;
26 import org.apache.lucene.queryparser.classic.QueryParser;
27 import org.codelibs.core.crypto.CachedCipher;
28 import org.codelibs.core.misc.DynamicProperties;
29 import org.codelibs.fess.api.WebApiManagerFactory;
30 import org.codelibs.fess.auth.AuthenticationManager;
31 import org.codelibs.fess.crawler.client.CrawlerClientCreator;
32 import org.codelibs.fess.crawler.client.CrawlerClientFactory;
33 import org.codelibs.fess.crawler.entity.EsAccessResult;
34 import org.codelibs.fess.crawler.extractor.ExtractorFactory;
35 import org.codelibs.fess.crawler.service.DataService;
36 import org.codelibs.fess.dict.DictionaryManager;
37 import org.codelibs.fess.ds.DataStoreFactory;
38 import org.codelibs.fess.es.client.SearchEngineClient;
39 import org.codelibs.fess.exception.ContainerNotAvailableException;
40 import org.codelibs.fess.helper.AccessTokenHelper;
41 import org.codelibs.fess.helper.ActivityHelper;
42 import org.codelibs.fess.helper.CrawlingConfigHelper;
43 import org.codelibs.fess.helper.CrawlingInfoHelper;
44 import org.codelibs.fess.helper.CurlHelper;
45 import org.codelibs.fess.helper.DocumentHelper;
46 import org.codelibs.fess.helper.DuplicateHostHelper;
47 import org.codelibs.fess.helper.FileTypeHelper;
48 import org.codelibs.fess.helper.IndexingHelper;
49 import org.codelibs.fess.helper.IntervalControlHelper;
50 import org.codelibs.fess.helper.JobHelper;
51 import org.codelibs.fess.helper.KeyMatchHelper;
52 import org.codelibs.fess.helper.LabelTypeHelper;
53 import org.codelibs.fess.helper.LanguageHelper;
54 import org.codelibs.fess.helper.NotificationHelper;
55 import org.codelibs.fess.helper.PathMappingHelper;
56 import org.codelibs.fess.helper.PermissionHelper;
57 import org.codelibs.fess.helper.PluginHelper;
58 import org.codelibs.fess.helper.PopularWordHelper;
59 import org.codelibs.fess.helper.ProcessHelper;
60 import org.codelibs.fess.helper.QueryHelper;
61 import org.codelibs.fess.helper.RelatedContentHelper;
62 import org.codelibs.fess.helper.RelatedQueryHelper;
63 import org.codelibs.fess.helper.RoleQueryHelper;
64 import org.codelibs.fess.helper.SambaHelper;
65 import org.codelibs.fess.helper.SearchHelper;
66 import org.codelibs.fess.helper.SearchLogHelper;
67 import org.codelibs.fess.helper.SuggestHelper;
68 import org.codelibs.fess.helper.SystemHelper;
69 import org.codelibs.fess.helper.ThemeHelper;
70 import org.codelibs.fess.helper.UserAgentHelper;
71 import org.codelibs.fess.helper.UserInfoHelper;
72 import org.codelibs.fess.helper.ViewHelper;
73 import org.codelibs.fess.helper.VirtualHostHelper;
74 import org.codelibs.fess.indexer.IndexUpdater;
75 import org.codelibs.fess.ingest.IngestFactory;
76 import org.codelibs.fess.job.JobExecutor;
77 import org.codelibs.fess.ldap.LdapManager;
78 import org.codelibs.fess.mylasta.direction.FessConfig;
79 import org.codelibs.fess.mylasta.direction.FessProp;
80 import org.codelibs.fess.script.ScriptEngineFactory;
81 import org.codelibs.fess.sso.SsoManager;
82 import org.codelibs.fess.thumbnail.ThumbnailManager;
83 import org.lastaflute.core.message.MessageManager;
84 import org.lastaflute.core.security.PrimaryCipher;
85 import org.lastaflute.di.core.SingletonLaContainer;
86 import org.lastaflute.di.core.exception.ComponentNotFoundException;
87 import org.lastaflute.di.core.factory.SingletonLaContainerFactory;
88 import org.lastaflute.di.core.smart.hot.HotdeployUtil;
89 import org.lastaflute.job.JobManager;
90 import org.lastaflute.web.servlet.request.RequestManager;
91 import org.lastaflute.web.servlet.request.ResponseManager;
92
93 public final class ComponentUtil {
94
95 private static final Logger logger = LogManager.getLogger(ComponentUtil.class);
96
97 private static Map<String, Object> componentMap = new HashMap<>();
98
99 private static final String SCRIPT_ENGINE_FACTORY = "scriptEngineFactory";
100
101 private static final String INGEST_FACTORY = "ingestFactory";
102
103 private static final String NOTIFICATION_HELPER = "notificationHelper";
104
105 private static final String SEARCH_HELPER = "searchHelper";
106
107 private static final String THEME_HELPER = "themeHelper";
108
109 private static final String PLUGIN_HELPER = "pluginHelper";
110
111 private static final String LANGUAGE_HELPER = "languageHelper";
112
113 private static final String CURL_HELPER = "curlHelper";
114
115 private static final String QUERY_STRING_BUILDER = "queryStringBuilder";
116
117 private static final String ACCESS_TOKEN_HELPER = "accessTokenHelper";
118
119 private static final String AUTHENTICATION_MANAGER = "authenticationManager";
120
121 private static final String THUMBNAIL_MANAGER = "thumbnailManager";
122
123 private static final String SSO_MANAGER = "ssoManager";
124
125 private static final String PERMISSION_HELPER = "permissionHelper";
126
127 private static final String QUERY_PARSER = "queryParser";
128
129 private static final String DOCUMENT_HELPER = "documentHelper";
130
131 private static final String ACTIVITY_HELPER = "activityHelper";
132
133 private static final String LDAP_MANAGER = "ldapManager";
134
135 private static final String ROLE_QUERY_HELPER = "roleQueryHelper";
136
137 private static final String SUGGEST_HELPER = "suggestHelper";
138
139 private static final String FESS_ES_CLIENT = "fessEsClient";
140
141 private static final String DICTIONARY_MANAGER = "dictionaryManager";
142
143 private static final String DATA_SERVICE = "dataService";
144
145 private static final String MESSAGE_MANAGER = "messageManager";
146
147 private static final String INDEX_UPDATER = "indexUpdater";
148
149 private static final String FILE_TYPE_HELPER = "fileTypeHelper";
150
151 private static final String EXTRACTOR_FACTORY = "extractorFactory";
152
153 private static final String INTERVAL_CONTROL_HELPER = "intervalControlHelper";
154
155 private static final String DATA_STORE_FACTORY = "dataStoreFactory";
156
157 private static final String USER_AGENT_HELPER = "userAgentHelper";
158
159 private static final String USER_INFO_HELPER = "userInfoHelper";
160
161 private static final String WEB_API_MANAGER_FACTORY = "webApiManagerFactory";
162
163 private static final String PROCESS_HELPER = "processHelper";
164
165 private static final String JOB_HELPER = "jobHelper";
166
167 private static final String DUPLICATE_HOST_HELPER = "duplicateHostHelper";
168
169 private static final String PATH_MAPPING_HELPER = "pathMappingHelper";
170
171 private static final String POPULAR_WORD_HELPER = "popularWordHelper";
172
173 private static final String CRAWLING_INFO_HELPER = "crawlingInfoHelper";
174
175 private static final String CRAWLING_CONFIG_HELPER = "crawlingConfigHelper";
176
177 private static final String SEARCH_LOG_HELPER = "searchLogHelper";
178
179 private static final String LABEL_TYPE_HELPER = "labelTypeHelper";
180
181 private static final String QUERY_HELPER = "queryHelper";
182
183 private static final String SAMBA_HELPER = "sambaHelper";
184
185 private static final String VIEW_HELPER = "viewHelper";
186
187 private static final String SYSTEM_HELPER = "systemHelper";
188
189 private static final String CRAWLER_PROPERTIES = "systemProperties";
190
191 private static final String QUERY_RESPONSE_LIST = "queryResponseList";
192
193 private static final String JOB_EXECUTOR_SUFFIX = "JobExecutor";
194
195 private static final String KEY_MATCH_HELPER = "keyMatchHelper";
196
197 private static final String INDEXING_HELPER = "indexingHelper";
198
199 private static final String VIRTUAL_HOST_HELPER = "virtualHostHelper";
200
201 private static final String RELATED_CONTENT_HELPER = "relatedContentHelper";
202
203 private static final String RELATED_QUERY_HELPER = "relatedQueryHelper";
204
205 private static IndexingHelper indexingHelper;
206
207 private static CrawlingConfigHelper crawlingConfigHelper;
208
209 private static SystemHelper systemHelper;
210
211 private static FessConfig fessConfig;
212
213 private static List<Runnable> initProcesses = new ArrayList<>();
214
215 private ComponentUtil() {
216 }
217
218 public static void processAfterContainerInit(final Runnable process) {
219 if (available()) {
220 process.run();
221 } else {
222 initProcesses.add(process);
223 }
224 }
225
226 public static void doInitProcesses(final Consumer<? super Runnable> action) {
227 try {
228 initProcesses.forEach(action);
229 } finally {
230 initProcesses.clear();
231 }
232 }
233
234 public static CachedCipher getCipher(final String cipherName) {
235 return getComponent(cipherName);
236 }
237
238 public static QueryResponseList getQueryResponseList() {
239 return getComponent(QUERY_RESPONSE_LIST);
240 }
241
242 public static DynamicProperties getSystemProperties() {
243 return getComponent(CRAWLER_PROPERTIES);
244 }
245
246 public static SystemHelper getSystemHelper() {
247 if (systemHelper == null || HotdeployUtil.isHotdeploy()) {
248 systemHelper = getComponent(SYSTEM_HELPER);
249 }
250 return systemHelper;
251 }
252
253 public static ViewHelper getViewHelper() {
254 return getComponent(VIEW_HELPER);
255 }
256
257 public static SambaHelper getSambaHelper() {
258 return getComponent(SAMBA_HELPER);
259 }
260
261 public static QueryHelper getQueryHelper() {
262 return getComponent(QUERY_HELPER);
263 }
264
265 public static LabelTypeHelper getLabelTypeHelper() {
266 return getComponent(LABEL_TYPE_HELPER);
267 }
268
269 public static SearchLogHelper getSearchLogHelper() {
270 return getComponent(SEARCH_LOG_HELPER);
271 }
272
273 public static CrawlingConfigHelper getCrawlingConfigHelper() {
274 if (crawlingConfigHelper == null || HotdeployUtil.isHotdeploy()) {
275 crawlingConfigHelper = getComponent(CRAWLING_CONFIG_HELPER);
276 }
277 return crawlingConfigHelper;
278 }
279
280 public static CrawlingInfoHelper getCrawlingInfoHelper() {
281 return getComponent(CRAWLING_INFO_HELPER);
282 }
283
284 public static PopularWordHelper getPopularWordHelper() {
285 return getComponent(POPULAR_WORD_HELPER);
286 }
287
288 public static PathMappingHelper getPathMappingHelper() {
289 return getComponent(PATH_MAPPING_HELPER);
290 }
291
292 public static DuplicateHostHelper getDuplicateHostHelper() {
293 return getComponent(DUPLICATE_HOST_HELPER);
294 }
295
296 public static ProcessHelper getProcessHelper() {
297 return getComponent(PROCESS_HELPER);
298 }
299
300 public static JobHelper getJobHelper() {
301 return getComponent(JOB_HELPER);
302 }
303
304 public static WebApiManagerFactory getWebApiManagerFactory() {
305 return getComponent(WEB_API_MANAGER_FACTORY);
306 }
307
308 public static UserAgentHelper getUserAgentHelper() {
309 return getComponent(USER_AGENT_HELPER);
310 }
311
312 public static DataStoreFactory getDataStoreFactory() {
313 return getComponent(DATA_STORE_FACTORY);
314 }
315
316 public static IntervalControlHelper getIntervalControlHelper() {
317 return getComponent(INTERVAL_CONTROL_HELPER);
318 }
319
320 public static ExtractorFactory getExtractorFactory() {
321 return getComponent(EXTRACTOR_FACTORY);
322 }
323
324 public static JobExecutor getJobExecutor(final String name) {
325 if (name.endsWith(JOB_EXECUTOR_SUFFIX)) {
326 return getComponent(name);
327 }
328 return getComponent("script" + JOB_EXECUTOR_SUFFIX);
329 }
330
331 public static FileTypeHelper getFileTypeHelper() {
332 return getComponent(FILE_TYPE_HELPER);
333 }
334
335 public static IndexUpdater getIndexUpdater() {
336 return getComponent(INDEX_UPDATER);
337 }
338
339 public static KeyMatchHelper getKeyMatchHelper() {
340 return getComponent(KEY_MATCH_HELPER);
341 }
342
343 public static IndexingHelper getIndexingHelper() {
344 if (indexingHelper == null || HotdeployUtil.isHotdeploy()) {
345 indexingHelper = getComponent(INDEXING_HELPER);
346 }
347 return indexingHelper;
348 }
349
350 public static UserInfoHelper getUserInfoHelper() {
351 return getComponent(USER_INFO_HELPER);
352 }
353
354 public static MessageManager getMessageManager() {
355 return getComponent(MESSAGE_MANAGER);
356 }
357
358 public static DictionaryManager getDictionaryManager() {
359 return getComponent(DICTIONARY_MANAGER);
360 }
361
362 public static DataService<EsAccessResult> getDataService() {
363 return getComponent(DATA_SERVICE);
364 }
365
366 public static SearchEngineClient getSearchEngineClient() {
367 return getComponent(FESS_ES_CLIENT);
368 }
369
370 public static FessConfig getFessConfig() {
371 if (fessConfig != null) {
372 return fessConfig;
373 }
374 fessConfig = getComponent(FessConfig.class);
375 return fessConfig;
376 }
377
378 public static SuggestHelper getSuggestHelper() {
379 return getComponent(SUGGEST_HELPER);
380 }
381
382 public static RoleQueryHelper getRoleQueryHelper() {
383 return getComponent(ROLE_QUERY_HELPER);
384 }
385
386 public static LdapManager getLdapManager() {
387 return getComponent(LDAP_MANAGER);
388 }
389
390 public static ActivityHelper getActivityHelper() {
391 return getComponent(ACTIVITY_HELPER);
392 }
393
394 public static RequestManager getRequestManager() {
395 return getComponent(RequestManager.class);
396 }
397
398 public static ResponseManager getResponseManager() {
399 return getComponent(ResponseManager.class);
400 }
401
402 public static JobManager getJobManager() {
403 return getComponent(JobManager.class);
404 }
405
406 public static DocumentHelper getDocumentHelper() {
407 return getComponent(DOCUMENT_HELPER);
408 }
409
410 public static QueryParser getQueryParser() {
411 return getComponent(QUERY_PARSER);
412 }
413
414 public static PermissionHelper getPermissionHelper() {
415 return getComponent(PERMISSION_HELPER);
416 }
417
418 public static SsoManager getSsoManager() {
419 return getComponent(SSO_MANAGER);
420 }
421
422 public static ThumbnailManager getThumbnailManager() {
423 return getComponent(THUMBNAIL_MANAGER);
424 }
425
426 public static AuthenticationManager getAuthenticationManager() {
427 return getComponent(AUTHENTICATION_MANAGER);
428 }
429
430 public static PrimaryCipher getPrimaryCipher() {
431 return getComponent(PrimaryCipher.class);
432 }
433
434 public static CrawlerClientFactory getCrawlerClientFactory() {
435 return getComponent(CrawlerClientFactory.class);
436 }
437
438 public static CrawlerClientCreator getCrawlerClientCreator() {
439 return getComponent(CrawlerClientCreator.class);
440 }
441
442 public static RelatedQueryHelper getRelatedQueryHelper() {
443 return getComponent(RELATED_QUERY_HELPER);
444 }
445
446 public static RelatedContentHelper getRelatedContentHelper() {
447 return getComponent(RELATED_CONTENT_HELPER);
448 }
449
450 public static VirtualHostHelper getVirtualHostHelper() {
451 return getComponent(VIRTUAL_HOST_HELPER);
452 }
453
454 public static AccessTokenHelper getAccessTokenHelper() {
455 return getComponent(ACCESS_TOKEN_HELPER);
456 }
457
458 public static QueryStringBuilder getQueryStringBuilder() {
459 return getComponent(QUERY_STRING_BUILDER);
460 }
461
462 public static CurlHelper getCurlHelper() {
463 return getComponent(CURL_HELPER);
464 }
465
466 public static LanguageHelper getLanguageHelper() {
467 return getComponent(LANGUAGE_HELPER);
468 }
469
470 public static PluginHelper getPluginHelper() {
471 return getComponent(PLUGIN_HELPER);
472 }
473
474 public static ThemeHelper getThemeHelper() {
475 return getComponent(THEME_HELPER);
476 }
477
478 public static SearchHelper getSearchHelper() {
479 return getComponent(SEARCH_HELPER);
480 }
481
482 public static NotificationHelper getNotificationHelper() {
483 return getComponent(NOTIFICATION_HELPER);
484 }
485
486 public static IngestFactory getIngestFactory() {
487 return getComponent(INGEST_FACTORY);
488 }
489
490 public static ScriptEngineFactory getScriptEngineFactory() {
491 return getComponent(SCRIPT_ENGINE_FACTORY);
492 }
493
494 public static <T> T getComponent(final Class<T> clazz) {
495 try {
496 return SingletonLaContainer.getComponent(clazz);
497 } catch (final NullPointerException e) {
498 if (logger.isDebugEnabled()) {
499 throw new ContainerNotAvailableException(clazz.getCanonicalName(), e);
500 }
501 throw new ContainerNotAvailableException(clazz.getCanonicalName());
502 }
503 }
504
505 public static <T> T getComponent(final String componentName) {
506 try {
507 return SingletonLaContainer.getComponent(componentName);
508 } catch (final NullPointerException e) {
509 if (logger.isDebugEnabled()) {
510 throw new ContainerNotAvailableException(componentName, e);
511 }
512 throw new ContainerNotAvailableException(componentName);
513 } catch (final ComponentNotFoundException e) {
514 if (componentMap.containsKey(componentName)) {
515 @SuppressWarnings("unchecked")
516 final T c = (T) componentMap.get(componentName);
517 return c;
518 }
519 throw e;
520 }
521 }
522
523 public static boolean hasComponent(final String componentKey) {
524 return SingletonLaContainerFactory.getContainer().hasComponentDef(componentKey);
525 }
526
527 public static boolean hasViewHelper() {
528 return hasComponent(VIEW_HELPER);
529 }
530
531 public static boolean hasQueryHelper() {
532 return hasComponent(QUERY_HELPER);
533 }
534
535 public static boolean hasPopularWordHelper() {
536 return hasComponent(POPULAR_WORD_HELPER);
537 }
538
539 public static boolean hasRelatedQueryHelper() {
540 return hasComponent(RELATED_QUERY_HELPER);
541 }
542
543 public static boolean hasIngestFactory() {
544 return hasComponent(INGEST_FACTORY);
545 }
546
547 public static boolean available() {
548 try {
549 return SingletonLaContainer.getComponent(SYSTEM_HELPER) != null;
550 } catch (final Exception e) {
551
552 }
553 return false;
554 }
555
556
557
558
559
560
561 public static void setFessConfig(final FessConfig fessConfig) {
562 ComponentUtil.fessConfig = fessConfig;
563 if (fessConfig == null) {
564 FessProp.propMap.clear();
565 componentMap.clear();
566 }
567 }
568
569 public static void register(final Object instance, final String name) {
570 componentMap.put(name, instance);
571 }
572 }