This is an automated email from the ASF dual-hosted git repository. tallison pushed a commit to branch tika-4545-delete-extension-configs in repository https://gitbox.apache.org/repos/asf/tika.git
commit 50246237f22600c93050c6a7ed85fb98357ff2af Author: tallison <[email protected]> AuthorDate: Wed Nov 26 19:21:29 2025 -0500 TIKA-4545 - rm ExtensionConfigs.java --- .../org/apache/tika/config/ConfigContainer.java | 15 ++++- .../tika/pipes/emitter/fs/FileSystemEmitter.java | 12 ++-- .../tika/pipes/fetcher/fs/FileSystemFetcher.java | 13 ++--- .../org/apache/tika/plugins/ExtensionConfigs.java | 66 ---------------------- 4 files changed, 26 insertions(+), 80 deletions(-) diff --git a/tika-core/src/main/java/org/apache/tika/config/ConfigContainer.java b/tika-core/src/main/java/org/apache/tika/config/ConfigContainer.java index 941726c2e..a424a63dd 100644 --- a/tika-core/src/main/java/org/apache/tika/config/ConfigContainer.java +++ b/tika-core/src/main/java/org/apache/tika/config/ConfigContainer.java @@ -27,6 +27,10 @@ import java.util.Set; * intervenes between the caller and the processor as in tika-pipes, and elsewhere. * * The goal of this is to delegate deserialization to the consumers/receivers. + * <p> + * Stores configuration as named JSON strings, allowing parsers, fetchers, emitters, + * and other components to look up their config by friendly name (e.g., "pdf-parser", + * "fs-fetcher-1") and deserialize it on-demand. */ public class ConfigContainer { @@ -34,12 +38,21 @@ public class ConfigContainer { public <T> void set(Class<T> key, String value) { if (value != null) { - configs.put(key.getName(), value); + String keyName = key.getName(); + if (configs.containsKey(keyName)) { + throw new IllegalArgumentException( + "Config key '" + keyName + "' already exists. Cannot overwrite existing configuration."); + } + configs.put(keyName, value); } } public void set(String name, String value) { if (value != null) { + if (configs.containsKey(name)) { + throw new IllegalArgumentException( + "Config key '" + name + "' already exists. Cannot overwrite existing configuration."); + } configs.put(name, value); } } diff --git a/tika-pipes/tika-pipes-plugins/tika-pipes-file-system/src/main/java/org/apache/tika/pipes/emitter/fs/FileSystemEmitter.java b/tika-pipes/tika-pipes-plugins/tika-pipes-file-system/src/main/java/org/apache/tika/pipes/emitter/fs/FileSystemEmitter.java index 77037a006..b9ac4edf2 100644 --- a/tika-pipes/tika-pipes-plugins/tika-pipes-file-system/src/main/java/org/apache/tika/pipes/emitter/fs/FileSystemEmitter.java +++ b/tika-pipes/tika-pipes-plugins/tika-pipes-file-system/src/main/java/org/apache/tika/pipes/emitter/fs/FileSystemEmitter.java @@ -31,13 +31,13 @@ import java.util.Optional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.apache.tika.config.ConfigContainer; import org.apache.tika.exception.TikaConfigException; import org.apache.tika.metadata.Metadata; import org.apache.tika.metadata.TikaCoreProperties; import org.apache.tika.parser.ParseContext; import org.apache.tika.pipes.api.emitter.AbstractStreamEmitter; import org.apache.tika.plugins.ExtensionConfig; -import org.apache.tika.plugins.ExtensionConfigs; import org.apache.tika.serialization.JsonMetadataList; import org.apache.tika.utils.StringUtils; @@ -154,12 +154,12 @@ public class FileSystemEmitter extends AbstractStreamEmitter { private FileSystemEmitterConfig getConfig(ParseContext parseContext) throws IOException { FileSystemEmitterConfig config = fileSystemEmitterConfig; - ExtensionConfigs extensionConfigs = parseContext.get(ExtensionConfigs.class); - if (extensionConfigs != null) { - Optional<ExtensionConfig> pluginConfigOpt = extensionConfigs.getById(getExtensionConfig().id()); - if (pluginConfigOpt.isPresent()) { + ConfigContainer configContainer = parseContext.get(ConfigContainer.class); + if (configContainer != null) { + Optional<String> configJson = configContainer.get(getExtensionConfig().id()); + if (configJson.isPresent()) { try { - config = FileSystemEmitterConfig.load(pluginConfigOpt.get().jsonConfig()); + config = FileSystemEmitterConfig.load(configJson.get()); } catch (TikaConfigException e) { throw new IOException("Failed to load config", e); } diff --git a/tika-pipes/tika-pipes-plugins/tika-pipes-file-system/src/main/java/org/apache/tika/pipes/fetcher/fs/FileSystemFetcher.java b/tika-pipes/tika-pipes-plugins/tika-pipes-file-system/src/main/java/org/apache/tika/pipes/fetcher/fs/FileSystemFetcher.java index a0e8ac07c..fb1ee0abd 100644 --- a/tika-pipes/tika-pipes-plugins/tika-pipes-file-system/src/main/java/org/apache/tika/pipes/fetcher/fs/FileSystemFetcher.java +++ b/tika-pipes/tika-pipes-plugins/tika-pipes-file-system/src/main/java/org/apache/tika/pipes/fetcher/fs/FileSystemFetcher.java @@ -30,6 +30,7 @@ import java.util.Optional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.apache.tika.config.ConfigContainer; import org.apache.tika.exception.TikaConfigException; import org.apache.tika.exception.TikaException; import org.apache.tika.io.TikaInputStream; @@ -41,7 +42,6 @@ import org.apache.tika.parser.ParseContext; import org.apache.tika.pipes.api.fetcher.Fetcher; import org.apache.tika.plugins.AbstractTikaExtension; import org.apache.tika.plugins.ExtensionConfig; -import org.apache.tika.plugins.ExtensionConfigs; import org.apache.tika.utils.StringUtils; /** @@ -76,12 +76,11 @@ public class FileSystemFetcher extends AbstractTikaExtension implements Fetcher "a file name with this character in it."); } FileSystemFetcherConfig config = defaultFileSystemFetcherConfig; - ExtensionConfigs pluginConfigManager = parseContext.get(ExtensionConfigs.class); - if (pluginConfigManager != null) { - Optional<ExtensionConfig> pluginConfigOpt = pluginConfigManager.getById(getExtensionConfig().id()); - if (pluginConfigOpt.isPresent()) { - ExtensionConfig pluginConfig = pluginConfigOpt.get(); - config = FileSystemFetcherConfig.load(pluginConfig.jsonConfig()); + ConfigContainer configContainer = parseContext.get(ConfigContainer.class); + if (configContainer != null) { + Optional<String> configJson = configContainer.get(getExtensionConfig().id()); + if (configJson.isPresent()) { + config = FileSystemFetcherConfig.load(configJson.get()); checkConfig(config); } } diff --git a/tika-plugins-core/src/main/java/org/apache/tika/plugins/ExtensionConfigs.java b/tika-plugins-core/src/main/java/org/apache/tika/plugins/ExtensionConfigs.java deleted file mode 100644 index b8dfb6405..000000000 --- a/tika-plugins-core/src/main/java/org/apache/tika/plugins/ExtensionConfigs.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.tika.plugins; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; - -public class ExtensionConfigs { - - Map<String, ExtensionConfig> idToConfig = new HashMap<>(); - Map<String, List<ExtensionConfig>> extensionIdsToConfig = new HashMap<>(); - - public ExtensionConfigs() { - - } - - public ExtensionConfigs(Map<String, ExtensionConfig> map) { - for (ExtensionConfig c : map.values()) { - add(c); - } - } - - public void add(ExtensionConfig extensionConfig) { - if (idToConfig.containsKey(extensionConfig.id())) { - throw new IllegalArgumentException("Can't overwrite existing extension config for extensionName: " + extensionConfig.name()); - } - idToConfig.put(extensionConfig.id(), extensionConfig); - extensionIdsToConfig - .computeIfAbsent(extensionConfig.name(), k -> new ArrayList<>()).add(extensionConfig); - } - - public Optional<ExtensionConfig> getById(String id) { - return Optional.ofNullable(idToConfig.get(id)); - } - - public List<ExtensionConfig> getByExtensionName(String extensionName) { - List<ExtensionConfig> configs = extensionIdsToConfig.get(extensionName); - if (configs == null) { - return List.of(); - } - return configs; - } - - public Set<String> ids() { - return idToConfig.keySet(); - } - -}
