Search in sources :

Example 6 with ExecutionContext

use of org.apache.aries.blueprint.di.ExecutionContext in project aries by apache.

the class GenericType method parse.

public static GenericType parse(String rawType, final Object loader) throws ClassNotFoundException, IllegalArgumentException {
    final String type = rawType.trim();
    // Check if this is an array
    if (type.endsWith("[]")) {
        GenericType t = parse(type.substring(0, type.length() - 2), loader);
        return new GenericType(Array.newInstance(t.getRawClass(), 0).getClass(), t);
    }
    // Check if this is a generic
    int genericIndex = type.indexOf('<');
    if (genericIndex > 0) {
        if (!type.endsWith(">")) {
            throw new IllegalArgumentException("Can not load type: " + type);
        }
        GenericType base = parse(type.substring(0, genericIndex), loader);
        String[] params = type.substring(genericIndex + 1, type.length() - 1).split(",");
        GenericType[] types = new GenericType[params.length];
        for (int i = 0; i < params.length; i++) {
            types[i] = parse(params[i], loader);
        }
        return new GenericType(base.getRawClass(), types);
    }
    // Primitive
    if (primitiveClasses.containsKey(type)) {
        return new GenericType(primitiveClasses.get(type));
    }
    // Extends
    if (type.startsWith("? extends ")) {
        String raw = type.substring("? extends ".length());
        return new GenericType(((ClassLoader) loader).loadClass(raw), BoundType.Extends);
    }
    // Super
    if (type.startsWith("? super ")) {
        String raw = type.substring("? extends ".length());
        return new GenericType(((ClassLoader) loader).loadClass(raw), BoundType.Super);
    }
    // Class
    if (loader instanceof ClassLoader) {
        return new GenericType(((ClassLoader) loader).loadClass(type));
    } else if (loader instanceof Bundle) {
        try {
            return AccessController.doPrivileged(new PrivilegedExceptionAction<GenericType>() {

                public GenericType run() throws ClassNotFoundException {
                    return new GenericType(((Bundle) loader).loadClass(type));
                }
            });
        } catch (PrivilegedActionException pae) {
            Exception e = pae.getException();
            if (e instanceof ClassNotFoundException)
                throw (ClassNotFoundException) e;
            else
                throw (RuntimeException) e;
        }
    } else if (loader instanceof ExecutionContext) {
        return new GenericType(((ExecutionContext) loader).loadClass(type));
    } else if (loader instanceof ExtendedBlueprintContainer) {
        return new GenericType(((ExtendedBlueprintContainer) loader).loadClass(type));
    } else {
        throw new IllegalArgumentException("Unsupported loader: " + loader);
    }
}
Also used : PrivilegedActionException(java.security.PrivilegedActionException) Bundle(org.osgi.framework.Bundle) PrivilegedExceptionAction(java.security.PrivilegedExceptionAction) PrivilegedActionException(java.security.PrivilegedActionException) ExecutionContext(org.apache.aries.blueprint.di.ExecutionContext) ExtendedBlueprintContainer(org.apache.aries.blueprint.services.ExtendedBlueprintContainer)

Example 7 with ExecutionContext

use of org.apache.aries.blueprint.di.ExecutionContext in project aries by apache.

the class BlueprintRepository method createAll.

public Map<String, Object> createAll(Collection<String> names, Collection<Class<?>> proxyInterfaces) throws ComponentDefinitionException {
    ExecutionContext oldContext = ExecutionContext.Holder.setContext(this);
    try {
        Map<String, Object> instances = createInstances(names);
        for (String name : instances.keySet()) {
            Object obj = instances.get(name);
            if (obj instanceof UnwrapperedBeanHolder)
                obj = BeanRecipe.wrap((UnwrapperedBeanHolder) obj, proxyInterfaces);
            instances.put(name, convert(name, obj));
        }
        return instances;
    } finally {
        ExecutionContext.Holder.setContext(oldContext);
    }
}
Also used : ExecutionContext(org.apache.aries.blueprint.di.ExecutionContext) UnwrapperedBeanHolder(org.apache.aries.blueprint.container.BeanRecipe.UnwrapperedBeanHolder)

Aggregations

ExecutionContext (org.apache.aries.blueprint.di.ExecutionContext)7 Recipe (org.apache.aries.blueprint.di.Recipe)3 Collection (java.util.Collection)2 UnwrapperedBeanHolder (org.apache.aries.blueprint.container.BeanRecipe.UnwrapperedBeanHolder)2 ExtendedBlueprintContainer (org.apache.aries.blueprint.services.ExtendedBlueprintContainer)2 ComponentDefinitionException (org.osgi.service.blueprint.container.ComponentDefinitionException)2 ReifiedType (org.osgi.service.blueprint.container.ReifiedType)2 PrivilegedActionException (java.security.PrivilegedActionException)1 PrivilegedExceptionAction (java.security.PrivilegedExceptionAction)1 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 Future (java.util.concurrent.Future)1 Convertible (org.apache.aries.blueprint.container.AggregateConverter.Convertible)1 CircularDependencyException (org.apache.aries.blueprint.di.CircularDependencyException)1 CollectionRecipe (org.apache.aries.blueprint.di.CollectionRecipe)1 IdRefRecipe (org.apache.aries.blueprint.di.IdRefRecipe)1 RefRecipe (org.apache.aries.blueprint.di.RefRecipe)1 ServiceListener (org.apache.aries.blueprint.utils.ServiceListener)1