/*******************************************************************************
* Copyright (c) 2009 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.cdi.internal.core.impl;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.jboss.tools.cdi.core.CDIUtil;
import org.jboss.tools.cdi.core.IInterceptorBinding;
import org.jboss.tools.cdi.core.IInterceptorBindingDeclaration;
import org.jboss.tools.cdi.core.IScope;
import org.jboss.tools.cdi.core.IScopeDeclaration;
import org.jboss.tools.cdi.core.IStereotype;
import org.jboss.tools.cdi.core.IStereotypeDeclaration;
import org.jboss.tools.common.java.IAnnotationDeclaration;
import org.jboss.tools.common.java.IJavaSourceReference;
/**
*
* @author Viacheslav Kabanovich
*
*/
public class StereotypeElement extends CDIAnnotationElement implements IStereotype {
public StereotypeElement() {}
/*
* (non-Javadoc)
* @see org.jboss.tools.cdi.core.IStereotype#getAlternativeDeclaration()
*/
public AnnotationDeclaration getAlternativeDeclaration() {
return definition.getAlternativeAnnotation();
}
/*
* (non-Javadoc)
* @see org.jboss.tools.cdi.core.ICDINamedAnnotation#getNameDeclaration()
*/
public AnnotationDeclaration getNameDeclaration() {
return definition.getNamedAnnotation();
}
/*
* (non-Javadoc)
* @see org.jboss.tools.cdi.core.IInterceptorBinded#getInterceptorBindingDeclarations()
*/
public Collection<IInterceptorBindingDeclaration> getInterceptorBindingDeclarations(boolean includeInherited) {
return ClassBean.getInterceptorBindingDeclarations(definition);
}
/*
* (non-Javadoc)
* @see org.jboss.tools.cdi.core.IInterceptorBinded#getInterceptorBindings()
*/
public Collection<IInterceptorBinding> getInterceptorBindings() {
return CDIUtil.getAllInterceptorBindings(this);
}
/*
* (non-Javadoc)
* @see org.jboss.tools.cdi.core.IStereotype#getStereotypeDeclarations()
*/
public Collection<IStereotypeDeclaration> getStereotypeDeclarations() {
Collection<IStereotypeDeclaration> result = new ArrayList<IStereotypeDeclaration>();
for (IAnnotationDeclaration d: definition.getAnnotations()) {
if(d instanceof IStereotypeDeclaration) {
result.add((IStereotypeDeclaration)d);
}
}
return result;
}
/*
* (non-Javadoc)
* @see org.jboss.tools.cdi.core.IStereotype#isAlternative()
*/
public boolean isAlternative() {
if(getAlternativeDeclaration() != null) return true;
for (IStereotypeDeclaration d: getStereotypeDeclarations()) {
IStereotype s = d.getStereotype();
if(s != null && s.isAlternative()) return true;
}
return false;
}
/*
* (non-Javadoc)
* @see org.jboss.tools.cdi.core.IScoped#getScope()
*/
public IScope getScope() {
Collection<IScopeDeclaration> ss = getScopeDeclarations();
if(!ss.isEmpty()) {
return ss.iterator().next().getScope();
}
for (IStereotypeDeclaration d: getStereotypeDeclarations()) {
IStereotype s = d.getStereotype();
IScope result = s.getScope();
if(result != null) {
return result;
}
}
return null;
}
/*
* (non-Javadoc)
* @see org.jboss.tools.cdi.core.IScoped#getScopeDeclarations()
*/
public Collection<IScopeDeclaration> getScopeDeclarations() {
return ProducerField.getScopeDeclarations(getCDIProject().getNature(), definition.getAnnotations());
}
/*
* (non-Javadoc)
* @see org.jboss.tools.cdi.core.IAnnotated#getAnnotations()
*/
public List<IAnnotationDeclaration> getAnnotations() {
if(definition!=null) {
return definition.getAnnotations();
}
return Collections.emptyList();
}
/*
* (non-Javadoc)
* @see org.jboss.tools.cdi.core.IAnnotated#getAnnotation(java.lang.String)
*/
public IAnnotationDeclaration getAnnotation(String annotationTypeName) {
if(definition!=null) {
return definition.getAnnotation(annotationTypeName);
}
return null;
}
/*
* (non-Javadoc)
* @see org.jboss.tools.cdi.core.IAnnotated#getAnnotationPosition(java.lang.String)
*/
public IJavaSourceReference getAnnotationPosition(String annotationTypeName) {
return getAnnotation(annotationTypeName);
}
/*
* (non-Javadoc)
* @see org.jboss.tools.cdi.core.IAnnotated#isAnnotationPresent(java.lang.String)
*/
public boolean isAnnotationPresent(String annotationTypeName) {
return definition!=null && definition.isAnnotationPresent(annotationTypeName);
}
}