blob: 32eda2bf33886b9dfa3ccd24affd59cc5eb6a222 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 by SAP AG, Walldorf.
* All rights reserved. This program and the accompanying materials
* are 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:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.ws.jaxws.utils.internal.annotations.impl;
import org.eclipse.jdt.core.IField;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.ITypeParameter;
import org.eclipse.jst.ws.jaxws.utils.annotations.IAnnotationBase;
/**
* Base {@link IAnnotationBase} implementation
*
* @author Plamen Pavlov
*/
public abstract class AnnotationBaseImpl<T extends IJavaElement> extends ValueImpl
{
private String annotationName;// Container for Annotation Name;
protected T javaElement; // Conatiner for the parent IJavaElement;
//private String annotationStringValue;//Conatiner to current String representation of this annotation
private static final String DOT = "."; //$NON-NLS-1$
/**
* Constructor.
*
* @param annotationName
*
* @throws NullPointerException in case <code>annotationName</code> is null.
* @throws IllegalArgumentException in case <code>annotationName</code> is empty String.
*/
public AnnotationBaseImpl(String annotationName)
{
this.annotationName = annotationName;
}
/**
* Extracts only the Annotation name in case it is in fully qualified form.
*
* @return the simple Annotation name.
*/
public String getSimpleAnnotationName()
{
int lastDotIndex = annotationName.lastIndexOf(DOT);
if (lastDotIndex == -1)
{
return annotationName;
}
return annotationName.substring(lastDotIndex + 1);
}
public String getAnnotationName()
{
return annotationName;
}
/**
* Adds Annotation to specific IJavaElement.
*
* @param javaElement
*
* @throws NullPointerException if <tt>javaElement</tt> is null.
* @throws IllegalArgumentException in case <code>javaElement</code> is not of the correct type. Supported types are: IType, IMethod, IField, ITypeParameter.
*/
public void setAppliedElementWithoutSave(T javaElement)
{
setJavaElement(javaElement);
}
public void setJavaElement(T javaElement)
{
if (javaElement == null)
{
throw new NullPointerException("javaElement should not be null!"); //$NON-NLS-1$
}
if(!(javaElement instanceof IType) && !(javaElement instanceof IMethod) && !(javaElement instanceof IField) && !(javaElement instanceof ITypeParameter))
{
throw new IllegalArgumentException("javaElement is not of correct type!"); //$NON-NLS-1$
}
this.javaElement = javaElement;
}
@Override
public int hashCode()
{
return annotationName.hashCode();
}
@SuppressWarnings("unchecked")
@Override
public boolean equals(Object obj)
{
if (this == obj)
{
return true;
}
if (obj == null)
{
return false;
}
if (getClass() != obj.getClass())
{
return false;
}
final AnnotationBaseImpl<T> other = (AnnotationBaseImpl<T>)obj;
return annotationName.equals(other.annotationName);
}
}