Never mind, I saw the commit.

On Wed, May 28, 2014 at 12:46 AM, Remko Popma <[email protected]> wrote:

> Sorry, I have trouble visualizing what you have in mind...
>
>
> On Tue, May 27, 2014 at 10:52 PM, Matt Sicker <[email protected]> wrote:
>
>> I actually had a better idea how to handle this on the train this
>> morning. Instead of having a registry for the plugin visitors, I thought it
>> might be easier to just use a meta-annotation that contains the FQCN of the
>> visitor method. That way we can use the ClassLoader on the annotation
>> itself to load the visitor class and therefore make it instantly
>> OSGi-friendly.
>>
>> I'm just running the unit tests right now before I commit anything of
>> course, but I think it's a bit more elegant. With that in mind, I think
>> renaming it back to PluginVisitors now makes sense as all it would contain
>> is a utility method regarding PluginVisitor classes.
>>
>>
>> On 26 May 2014 23:16, Gary Gregory <[email protected]> wrote:
>>
>>> Clearer is better here. +1 to "registry".
>>>
>>> Gary
>>>
>>>
>>> -------- Original message --------
>>> From: Matt Sicker
>>> Date:05/26/2014 19:49 (GMT-05:00)
>>> To: Log4J Developers List
>>> Subject: Re: svn commit: r1597509 -
>>> /logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.java
>>>
>>>
>>> I think you're right.
>>>
>>>
>>> On 26 May 2014 18:45, Remko Popma <[email protected]> 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, [email protected] 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: [email protected]
>>>> For additional commands, e-mail: [email protected]
>>>>
>>>>
>>>
>>>
>>> --
>>> Matt Sicker <[email protected]>
>>>
>>
>>
>>
>> --
>> Matt Sicker <[email protected]>
>>
>
>

Reply via email to