org.eclipse.jetty.plus.annotation.InjectionCollection Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of testatoo-container-jetty-full Show documentation
Show all versions of testatoo-container-jetty-full Show documentation
Testatoo Jetty Container with JSP support
// ========================================================================
// 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();
}
}
}