Search in sources :

Example 1 with HierarchyDiscovery

use of org.apache.deltaspike.core.util.HierarchyDiscovery in project deltaspike by apache.

the class HandlerMethodStorageImpl method getHandlersForException.

@Override
public Collection<HandlerMethod<? extends Throwable>> getHandlersForException(Type exceptionClass, BeanManager bm, Set<Annotation> handlerQualifiers, boolean isBefore) {
    final Collection<HandlerMethod<? extends Throwable>> returningHandlers = new TreeSet<HandlerMethod<? extends Throwable>>(new ExceptionHandlerComparator());
    final HierarchyDiscovery h = new HierarchyDiscovery(exceptionClass);
    final Set<Type> closure = h.getTypeClosure();
    for (Type hierarchyType : closure) {
        if (allHandlers.get(hierarchyType) != null) {
            for (HandlerMethod<?> handler : allHandlers.get(hierarchyType)) {
                if (handler.isBeforeHandler() && isBefore) {
                    if (handler.getQualifiers().contains(new AnyLiteral())) {
                        returningHandlers.add(handler);
                    } else {
                        if (!handlerQualifiers.isEmpty() && handlerQualifiers.equals(handler.getQualifiers())) {
                            returningHandlers.add(handler);
                        }
                    }
                } else if (!handler.isBeforeHandler() && !isBefore) {
                    if (handler.getQualifiers().contains(new AnyLiteral())) {
                        returningHandlers.add(handler);
                    } else {
                        if (!handlerQualifiers.isEmpty() && handlerQualifiers.equals(handler.getQualifiers())) {
                            returningHandlers.add(handler);
                        }
                    }
                }
            }
        }
    }
    log.fine(String.format("Found handlers %s for exception type %s, qualifiers %s", returningHandlers, exceptionClass, handlerQualifiers));
    return Collections.unmodifiableCollection(returningHandlers);
}
Also used : Type(java.lang.reflect.Type) TreeSet(java.util.TreeSet) AnyLiteral(org.apache.deltaspike.core.api.literal.AnyLiteral) HierarchyDiscovery(org.apache.deltaspike.core.util.HierarchyDiscovery) HandlerMethod(org.apache.deltaspike.core.api.exception.control.HandlerMethod)

Example 2 with HierarchyDiscovery

use of org.apache.deltaspike.core.util.HierarchyDiscovery in project deltaspike by apache.

the class ExceptionHandlerComparator method compareHierarchies.

private int compareHierarchies(Type lhsExceptionType, Type rhsExceptionType) {
    HierarchyDiscovery lhsHierarchy = new HierarchyDiscovery(lhsExceptionType);
    Set<Type> lhsTypeclosure = lhsHierarchy.getTypeClosure();
    if (lhsTypeclosure.contains(rhsExceptionType)) {
        final int indexOfLhsType = new ArrayList<Type>(lhsTypeclosure).indexOf(lhsExceptionType);
        final int indexOfRhsType = new ArrayList<Type>(lhsTypeclosure).indexOf(rhsExceptionType);
        if (indexOfLhsType > indexOfRhsType) {
            return 1;
        }
    }
    return -1;
}
Also used : Type(java.lang.reflect.Type) HierarchyDiscovery(org.apache.deltaspike.core.util.HierarchyDiscovery)

Aggregations

Type (java.lang.reflect.Type)2 HierarchyDiscovery (org.apache.deltaspike.core.util.HierarchyDiscovery)2 TreeSet (java.util.TreeSet)1 HandlerMethod (org.apache.deltaspike.core.api.exception.control.HandlerMethod)1 AnyLiteral (org.apache.deltaspike.core.api.literal.AnyLiteral)1