You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2014/05/26 05:59:52 UTC

svn commit: r1597509 - /logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java

Author: mattsicker
Date: Mon May 26 03:59:52 2014
New Revision: 1597509

URL: http://svn.apache.org/r1597509
Log:
Add PluginVisitors registry class.

  - Registers the PluginAttribute visitor by default.
  - Will be adding other visitor implementations over time.

Added:
    logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java   (with props)

Added: logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java?rev=1597509&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java (added)
+++ logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java Mon May 26 03:59:52 2014
@@ -0,0 +1,81 @@
+/*
+ * 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 java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
+import org.apache.logging.log4j.status.StatusLogger;
+
+/**
+ * Registry for associating Plugin annotations with PluginVisitor implementations.
+ */
+public final class PluginVisitors {
+
+    private static final Logger LOGGER = StatusLogger.getLogger();
+
+    // map of annotation classes to their corresponding PluginVisitor classes
+    // generics are fun!
+    private static final Map<Class<? extends Annotation>, Class<? extends PluginVisitor<? extends Annotation>>> REGISTRY;
+
+    static {
+        // register the default PluginVisitor classes
+        REGISTRY = new ConcurrentHashMap<Class<? extends Annotation>, Class<? extends PluginVisitor<? extends Annotation>>>();
+        registerVisitor(PluginAttribute.class, PluginAttributeVisitor.class);
+    }
+
+    private PluginVisitors() {
+    }
+
+    /**
+     * Registers a PluginVisitor class associated to a specific annotation.
+     *
+     * @param annotation the Plugin annotation to associate with.
+     * @param helper     the PluginVisitor class to use for the annotation.
+     * @param <A>        the Plugin annotation type.
+     */
+    public static <A extends Annotation> void registerVisitor(final Class<A> annotation,
+                                                              final Class<? extends PluginVisitor<A>> helper) {
+        REGISTRY.put(annotation, helper);
+    }
+
+    /**
+     * Creates a PluginVisitor instance for the given annotation class. This instance must be further populated with
+     * data to be useful. Such data is passed through both the setters and the visit method.
+     *
+     * @param annotation the Plugin annotation class to find a PluginVisitor for.
+     * @param <A>        the Plugin annotation type.
+     * @return a PluginVisitor instance if one could be created, or {@code null} otherwise.
+     */
+    @SuppressWarnings("unchecked") // we're keeping track of types, thanks
+    public static <A extends Annotation> PluginVisitor<A> findVisitor(final Class<A> annotation) {
+        try {
+            final Class<PluginVisitor<A>> clazz = (Class<PluginVisitor<A>>) REGISTRY.get(annotation);
+            if (clazz == null) {
+                return null;
+            }
+            return clazz.newInstance();
+        } catch (final Exception e) {
+            LOGGER.debug("No PluginVisitor found for annotation: {}.", annotation);
+            return null;
+        }
+    }
+}

Propchange: logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java
------------------------------------------------------------------------------
    svn:eol-style = native



Re: svn commit: r1597509 - /logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java

Posted by Matt Sicker <bo...@gmail.com>.
I think you're right.


On 26 May 2014 18:45, Remko Popma <re...@gmail.com> wrote:

> Is PluginVisitorRegistry not a better name than PluginVisitors?
> The convention to append "s" after another class name has many meanings,
> like providing static util methods.
> I think calling it a ..Registry is clearer.
>
> Sent from my iPhone
>
> > On 2014/05/26, at 12:59, mattsicker@apache.org wrote:
> >
> > Author: mattsicker
> > Date: Mon May 26 03:59:52 2014
> > New Revision: 1597509
> >
> > URL: http://svn.apache.org/r1597509
> > Log:
> > Add PluginVisitors registry class.
> >
> >  - Registers the PluginAttribute visitor by default.
> >  - Will be adding other visitor implementations over time.
> >
> > Added:
> >
>  logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java
>   (with props)
> >
> > Added:
> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java
> > URL:
> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java?rev=1597509&view=auto
> >
> ==============================================================================
> > ---
> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java
> (added)
> > +++
> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java
> Mon May 26 03:59:52 2014
> > @@ -0,0 +1,81 @@
> > +/*
> > + * 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 java.util.concurrent.ConcurrentHashMap;
> > +
> > +import org.apache.logging.log4j.Logger;
> > +import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
> > +import org.apache.logging.log4j.status.StatusLogger;
> > +
> > +/**
> > + * Registry for associating Plugin annotations with PluginVisitor
> implementations.
> > + */
> > +public final class PluginVisitors {
> > +
> > +    private static final Logger LOGGER = StatusLogger.getLogger();
> > +
> > +    // map of annotation classes to their corresponding PluginVisitor
> classes
> > +    // generics are fun!
> > +    private static final Map<Class<? extends Annotation>, Class<?
> extends PluginVisitor<? extends Annotation>>> REGISTRY;
> > +
> > +    static {
> > +        // register the default PluginVisitor classes
> > +        REGISTRY = new ConcurrentHashMap<Class<? extends Annotation>,
> Class<? extends PluginVisitor<? extends Annotation>>>();
> > +        registerVisitor(PluginAttribute.class,
> PluginAttributeVisitor.class);
> > +    }
> > +
> > +    private PluginVisitors() {
> > +    }
> > +
> > +    /**
> > +     * Registers a PluginVisitor class associated to a specific
> annotation.
> > +     *
> > +     * @param annotation the Plugin annotation to associate with.
> > +     * @param helper     the PluginVisitor class to use for the
> annotation.
> > +     * @param <A>        the Plugin annotation type.
> > +     */
> > +    public static <A extends Annotation> void registerVisitor(final
> Class<A> annotation,
> > +                                                              final
> Class<? extends PluginVisitor<A>> helper) {
> > +        REGISTRY.put(annotation, helper);
> > +    }
> > +
> > +    /**
> > +     * Creates a PluginVisitor instance for the given annotation class.
> This instance must be further populated with
> > +     * data to be useful. Such data is passed through both the setters
> and the visit method.
> > +     *
> > +     * @param annotation the Plugin annotation class to find a
> PluginVisitor for.
> > +     * @param <A>        the Plugin annotation type.
> > +     * @return a PluginVisitor instance if one could be created, or
> {@code null} otherwise.
> > +     */
> > +    @SuppressWarnings("unchecked") // we're keeping track of types,
> thanks
> > +    public static <A extends Annotation> PluginVisitor<A>
> findVisitor(final Class<A> annotation) {
> > +        try {
> > +            final Class<PluginVisitor<A>> clazz =
> (Class<PluginVisitor<A>>) REGISTRY.get(annotation);
> > +            if (clazz == null) {
> > +                return null;
> > +            }
> > +            return clazz.newInstance();
> > +        } catch (final Exception e) {
> > +            LOGGER.debug("No PluginVisitor found for annotation: {}.",
> annotation);
> > +            return null;
> > +        }
> > +    }
> > +}
> >
> > Propchange:
> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java
> >
> ------------------------------------------------------------------------------
> >    svn:eol-style = native
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-dev-help@logging.apache.org
>
>


-- 
Matt Sicker <bo...@gmail.com>

Re: svn commit: r1597509 - /logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java

Posted by Remko Popma <re...@gmail.com>.
Is PluginVisitorRegistry not a better name than PluginVisitors?
The convention to append "s" after another class name has many meanings, like providing static util methods. 
I think calling it a ..Registry is clearer. 

Sent from my iPhone

> On 2014/05/26, at 12:59, mattsicker@apache.org wrote:
> 
> Author: mattsicker
> Date: Mon May 26 03:59:52 2014
> New Revision: 1597509
> 
> URL: http://svn.apache.org/r1597509
> Log:
> Add PluginVisitors registry class.
> 
>  - Registers the PluginAttribute visitor by default.
>  - Will be adding other visitor implementations over time.
> 
> Added:
>    logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java   (with props)
> 
> Added: logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java
> URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java?rev=1597509&view=auto
> ==============================================================================
> --- logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java (added)
> +++ logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java Mon May 26 03:59:52 2014
> @@ -0,0 +1,81 @@
> +/*
> + * 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 java.util.concurrent.ConcurrentHashMap;
> +
> +import org.apache.logging.log4j.Logger;
> +import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
> +import org.apache.logging.log4j.status.StatusLogger;
> +
> +/**
> + * Registry for associating Plugin annotations with PluginVisitor implementations.
> + */
> +public final class PluginVisitors {
> +
> +    private static final Logger LOGGER = StatusLogger.getLogger();
> +
> +    // map of annotation classes to their corresponding PluginVisitor classes
> +    // generics are fun!
> +    private static final Map<Class<? extends Annotation>, Class<? extends PluginVisitor<? extends Annotation>>> REGISTRY;
> +
> +    static {
> +        // register the default PluginVisitor classes
> +        REGISTRY = new ConcurrentHashMap<Class<? extends Annotation>, Class<? extends PluginVisitor<? extends Annotation>>>();
> +        registerVisitor(PluginAttribute.class, PluginAttributeVisitor.class);
> +    }
> +
> +    private PluginVisitors() {
> +    }
> +
> +    /**
> +     * Registers a PluginVisitor class associated to a specific annotation.
> +     *
> +     * @param annotation the Plugin annotation to associate with.
> +     * @param helper     the PluginVisitor class to use for the annotation.
> +     * @param <A>        the Plugin annotation type.
> +     */
> +    public static <A extends Annotation> void registerVisitor(final Class<A> annotation,
> +                                                              final Class<? extends PluginVisitor<A>> helper) {
> +        REGISTRY.put(annotation, helper);
> +    }
> +
> +    /**
> +     * Creates a PluginVisitor instance for the given annotation class. This instance must be further populated with
> +     * data to be useful. Such data is passed through both the setters and the visit method.
> +     *
> +     * @param annotation the Plugin annotation class to find a PluginVisitor for.
> +     * @param <A>        the Plugin annotation type.
> +     * @return a PluginVisitor instance if one could be created, or {@code null} otherwise.
> +     */
> +    @SuppressWarnings("unchecked") // we're keeping track of types, thanks
> +    public static <A extends Annotation> PluginVisitor<A> findVisitor(final Class<A> annotation) {
> +        try {
> +            final Class<PluginVisitor<A>> clazz = (Class<PluginVisitor<A>>) REGISTRY.get(annotation);
> +            if (clazz == null) {
> +                return null;
> +            }
> +            return clazz.newInstance();
> +        } catch (final Exception e) {
> +            LOGGER.debug("No PluginVisitor found for annotation: {}.", annotation);
> +            return null;
> +        }
> +    }
> +}
> 
> Propchange: logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org