Author: mattsicker
Date: Mon May 26 03:57:32 2014
New Revision: 1597507
URL: http://svn.apache.org/r1597507
Log:
Add base class for PluginVisitor implementations.
- Provides a couple convenience methods for future implementing
classes.
Added:
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/AbstractPluginVisitor.java
(with props)
Added:
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/AbstractPluginVisitor.java
URL:
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/AbstractPluginVisitor.java?rev=1597507&view=auto
==============================================================================
---
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/AbstractPluginVisitor.java
(added)
+++
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/AbstractPluginVisitor.java
Mon May 26 03:57:32 2014
@@ -0,0 +1,123 @@
+/*
+ * 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.logging.log4j.core.config.plugins.visitors;
+
+import java.lang.annotation.Annotation;
+import java.util.Map;
+
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.config.plugins.util.TypeConverters;
+import org.apache.logging.log4j.core.lookup.StrSubstitutor;
+import org.apache.logging.log4j.core.util.Assert;
+import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.util.Strings;
+
+/**
+ * Base class for PluginVisitor implementations. Provides convenience methods
as well as all method implementations
+ * other than the {@code visit} method.
+ *
+ * @param <A> the Plugin annotation type.
+ */
+public abstract class AbstractPluginVisitor<A extends Annotation> implements
PluginVisitor<A> {
+
+ protected static final Logger LOGGER = StatusLogger.getLogger();
+
+ protected final Class<A> clazz;
+ protected A annotation;
+ protected String[] aliases;
+ protected Class<?> conversionType;
+ protected StrSubstitutor substitutor;
+
+ /**
+ * This constructor must be overridden by implementation classes as a
no-arg constructor.
+ *
+ * @param clazz the annotation class this PluginVisitor is for.
+ */
+ protected AbstractPluginVisitor(final Class<A> clazz) {
+ this.clazz = clazz;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public PluginVisitor<A> setAnnotation(final Annotation annotation) {
+ final Annotation a = Assert.requireNonNull(annotation, "No annotation
was provided");
+ if (this.clazz.isInstance(annotation)) {
+ this.annotation = (A) annotation;
+ }
+ return this;
+ }
+
+ @Override
+ public PluginVisitor<A> setAliases(final String... aliases) {
+ this.aliases = aliases;
+ return this;
+ }
+
+ @Override
+ public PluginVisitor<A> setConversionType(final Class<?> conversionType) {
+ this.conversionType = Assert.requireNonNull(conversionType, "No
conversion type class was provided");
+ return this;
+ }
+
+ @Override
+ public PluginVisitor<A> setStrSubstitutor(StrSubstitutor substitutor) {
+ this.substitutor = Assert.requireNonNull(substitutor, "No
StrSubstitutor was provided");
+ return this;
+ }
+
+ /**
+ * Removes an Entry from a given Map using a key name and aliases for that
key. Keys are case-insensitive.
+ *
+ * @param attributes the Map to remove an Entry from.
+ * @param name the key name to look up.
+ * @param aliases optional aliases of the key name to look up.
+ * @return the value corresponding to the given key or {@code null} if
nonexistent.
+ */
+ protected static String removeAttributeValue(final Map<String, String>
attributes,
+ final String name,
+ final String... aliases) {
+ for (final Map.Entry<String, String> entry : attributes.entrySet()) {
+ final String key = entry.getKey();
+ final String value = entry.getValue();
+ if (key.equalsIgnoreCase(name)) {
+ attributes.remove(key);
+ return value;
+ }
+ if (aliases != null) {
+ for (final String alias : aliases) {
+ if (key.equalsIgnoreCase(alias)) {
+ attributes.remove(key);
+ return value;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Converts the given value into the configured type falling back to the
provided default value.
+ *
+ * @param value the value to convert.
+ * @param defaultValue the fallback value to use in case of no value or an
error.
+ * @return the converted value whether that be based on the given value or
the default value.
+ */
+ protected Object convert(final String value, final String defaultValue) {
+ return TypeConverters.convert(value, this.conversionType,
Strings.trimToNull(defaultValue));
+ }
+}
Propchange:
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/AbstractPluginVisitor.java
------------------------------------------------------------------------------
svn:eol-style = native