All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.kafka.common.config.AbstractConfig Maven / Gradle / Ivy

The newest version!
/**
 * 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.kafka.common.config;

import java.util.*;

import org.apache.kafka.common.Configurable;
import org.apache.kafka.common.KafkaException;
import org.apache.kafka.common.utils.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * A convenient base class for configurations to extend.
 * 

* This class holds both the original configuration that was provided as well as the parsed */ public class AbstractConfig { private final Logger log = LoggerFactory.getLogger(getClass()); /* configs for which values have been requested, used to detect unused configs */ private final Set used; /* the original values passed in by the user */ private final Map originals; /* the parsed values */ private final Map values; @SuppressWarnings("unchecked") public AbstractConfig(ConfigDef definition, Map originals) { /* check that all the keys are really strings */ for (Object key : originals.keySet()) if (!(key instanceof String)) throw new ConfigException(key.toString(), originals.get(key), "Key must be a string."); this.originals = (Map) originals; this.values = definition.parse(this.originals); this.used = Collections.synchronizedSet(new HashSet()); logAll(); } protected Object get(String key) { if (!values.containsKey(key)) throw new ConfigException(String.format("Unknown configuration '%s'", key)); used.add(key); return values.get(key); } public int getInt(String key) { return (Integer) get(key); } public long getLong(String key) { return (Long) get(key); } public double getDouble(String key) { return (Double) get(key); } @SuppressWarnings("unchecked") public List getList(String key) { return (List) get(key); } public boolean getBoolean(String key) { return (Boolean) get(key); } public String getString(String key) { return (String) get(key); } public Class getClass(String key) { return (Class) get(key); } public Set unused() { Set keys = new HashSet(originals.keySet()); keys.removeAll(used); return keys; } public Map originals() { Map copy = new HashMap(); copy.putAll(originals); return copy; } private void logAll() { StringBuilder b = new StringBuilder(); b.append(getClass().getSimpleName()); b.append(" values: "); b.append(Utils.NL); for (Map.Entry entry : this.values.entrySet()) { b.append('\t'); b.append(entry.getKey()); b.append(" = "); b.append(entry.getValue()); b.append(Utils.NL); } log.info(b.toString()); } /** * Log warnings for any unused configurations */ public void logUnused() { for (String key : unused()) log.warn("The configuration {} = {} was supplied but isn't a known config.", key, this.values.get(key)); } /** * Get a configured instance of the give class specified by the given configuration key. If the object implements * Configurable configure it using the configuration. * * @param key The configuration key for the class * @param t The interface the class should implement * @return A configured instance of the class */ public T getConfiguredInstance(String key, Class t) { Class c = getClass(key); if (c == null) return null; Object o = Utils.newInstance(c); if (!t.isInstance(o)) throw new KafkaException(c.getName() + " is not an instance of " + t.getName()); if (o instanceof Configurable) ((Configurable) o).configure(this.originals); return t.cast(o); } public List getConfiguredInstances(String key, Class t) { List klasses = getList(key); List objects = new ArrayList(); for (String klass : klasses) { Class c; try { c = Class.forName(klass); } catch (ClassNotFoundException e) { throw new ConfigException(key, klass, "Class " + klass + " could not be found."); } if (c == null) return null; Object o = Utils.newInstance(c); if (!t.isInstance(o)) throw new KafkaException(c.getName() + " is not an instance of " + t.getName()); if (o instanceof Configurable) ((Configurable) o).configure(this.originals); objects.add(t.cast(o)); } return objects; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy