This is an automated email from the ASF dual-hosted git repository.

tallison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tika.git


The following commit(s) were added to refs/heads/main by this push:
     new a869e6544 TIKA-4545 - rm ExtensionConfigs.java (#2408)
a869e6544 is described below

commit a869e6544e5969f5354bde770a18141cab48359f
Author: Tim Allison <[email protected]>
AuthorDate: Fri Nov 28 09:51:55 2025 -0500

    TIKA-4545 - rm ExtensionConfigs.java (#2408)
---
 .../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();
-    }
-
-}

Reply via email to