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