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

org.eclipse.jetty.plus.annotation.InjectionCollection Maven / Gradle / Ivy

There is a newer version: 1.0-rc5
Show newest version
// ========================================================================
// Copyright (c) 2006-2009 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at 
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses. 
// ========================================================================

package org.eclipse.jetty.plus.annotation;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.eclipse.jetty.util.log.Log;

/**
 * InjectionCollection
 *
 *
 */
public class InjectionCollection
{ 
    public static final String INJECTION_COLLECTION = "org.eclipse.jetty.injectionCollection";

    private HashMap> _injectionMap = new HashMap>();//map of classname to injections
    
    
    public void add (Injection injection)
    {
        if ((injection==null) || injection.getTargetClass()==null) 
            return;
        
        if (Log.isDebugEnabled())
            Log.debug("Adding injection for class="+(injection.getTargetClass()+ " on a "+(injection.getTarget().getName())));
   
        
        List injections = (List)_injectionMap.get(injection.getTargetClass().getCanonicalName());
        if (injections==null)
        {
            injections = new ArrayList();
            _injectionMap.put(injection.getTargetClass().getCanonicalName(), injections);
        }
        injections.add(injection);
    }

 
    public List  getInjections (String className)
    {
        if (className==null)
            return null;

        return _injectionMap.get(className);
    }
  
    
    
    public Injection getInjection (String jndiName, Class clazz, Field field)
    {
        if (field == null || clazz == null)
            return null;
        
        List injections = getInjections(clazz.getCanonicalName());
        if (injections == null)
            return null;
        Iterator itor = injections.iterator();
        Injection injection = null;
        while (itor.hasNext() && injection == null)
        {
            Injection i = itor.next();
            if (i.isField() && field.getName().equals(i.getTarget().getName()))
                injection = i;
        }
        
        return injection;
    }
    
    public Injection getInjection (String jndiName, Class clazz, Method method, Class paramClass)
    {
        if (clazz == null || method == null || paramClass == null)
            return null;
        
        List injections = getInjections(clazz.getCanonicalName());
        if (injections == null)
            return null;
        Iterator itor = injections.iterator();
        Injection injection = null;
        while (itor.hasNext() && injection == null)
        {
            Injection i = itor.next();
            if (i.isMethod() && i.getTarget().getName().equals(method.getName()) && paramClass.equals(i.getParamClass()))
                injection = i;
        }
        
        return injection;
    }
    
    
    public void inject (Object injectable)
    {
        if (injectable==null)
            return;
        
        //Get all injections pertinent to the Object by
        //looking at it's class hierarchy
        Class clazz = injectable.getClass();
        
        while (clazz != null)
        {
            List injections = _injectionMap.get(clazz.getCanonicalName());
            if (injections != null)
            {
                for (Injection i : injections)
                    i.inject(injectable);
            }
            
            clazz = clazz.getSuperclass();
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy