/*
* ============================================================================
* GNU Lesser General Public License
* ============================================================================
*
* Beanlet - JSE Application Container.
* Copyright (C) 2006 Leon van Zantvoort
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* Leon van Zantvoort
* 243 Acalanes Drive #11
* Sunnyvale, CA 94086
* USA
*
* zantvoort@users.sourceforge.net
* http://beanlet.org
*/
package org.beanlet.annotation;
import java.lang.annotation.Annotation;
import java.util.List;
/**
*
* @author Leon van Zantvoort
*/
public interface AnnotationDomain {
/**
* Returns all {@code ElementAnnotation}s represented by this
* {@code AnnotationDomain}.
*/
List<ElementAnnotation> getElements();
/**
* Returns all {@code ElementAnnotation}s represented by this
* {@code AnnotationDomain}.
*/
List<ElementAnnotation> getElements(Class<?> cls);
/**
* Returns all {@code AnnotationDeclaration}s for this domain.
*/
List<AnnotationDeclaration> getDeclarations();
/**
* Returns all {@code AnnotationDeclaration}s matching the specified
* {@code annotationClass} for this domain.
*/
<T extends Annotation> AnnotationDeclaration<T> getDeclaration(
Class<T> annotationClass);
/**
* Returns all {@code ElementAnnotation}s matching the specified
* {@code elementClass} for this domain.
*/
<E extends Element> List<ElementAnnotation<E, Annotation>> getTypedElements(
Class<E> elementClass);
/**
* Returns all {@code ElementAnnotation}s matching the specified
* {@code elementClass} for this domain.
*/
<E extends Element> List<ElementAnnotation<E, Annotation>> getTypedElements(
Class<E> elementClass, Class<?> cls);
/**
* Returns all annotations for the specified {@code element}.
*/
List<Annotation> getAnnotations(Element element);
/**
* Returns all declared annotations for the specified {@code element}.
*/
List<Annotation> getDeclaredAnnotations(Element element);
}