blob: 5d3b5a3f3af46a9c968d076711e5925fb8b72f75 [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 java.util.Arrays;
import java.util.Set;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.Expression;
import org.eclipse.jdt.core.dom.MemberValuePair;
import org.eclipse.jdt.core.dom.Name;
import org.eclipse.jdt.core.dom.NormalAnnotation;
import org.eclipse.jdt.core.dom.SimpleName;
import org.eclipse.jst.ws.jaxws.utils.annotations.IAnnotation;
import org.eclipse.jst.ws.jaxws.utils.annotations.IParamValuePair;
/**
* An implementation of {@link IAnnotation}
*
* @author Plamen Pavlov
*/
public class AnnotationImpl<T extends IJavaElement> extends AnnotationBaseImpl<T> implements IAnnotation<T>
{
/**
* @see org.eclipse.jst.ws.jaxws.utils.annotations.IAnnotation#getPropertyValue(java.lang.String)
*/
public String getPropertyValue(String param)
{
for (IParamValuePair pair : getParamValuePairs())
{
if (param.equals(pair.getParam()))
{
return pair.getValue()!=null ? pair.getValue().toString() : null;
}
}
return null;
}
private Set<IParamValuePair> paramValuePairs;
/**
* Constructor
*
* @param annotationName -
* the name of annotation
* @param paramValuePairs -
* the param=value paris
*/
public AnnotationImpl(String annotationName, Set<IParamValuePair> paramValuePairs)
{
super(annotationName);
this.paramValuePairs = paramValuePairs;
}
public Set<IParamValuePair> getParamValuePairs()
{
return paramValuePairs;
}
public void setParamValuePairs(Set<IParamValuePair> paramValuePairs)
{
this.paramValuePairs = paramValuePairs;
}
@SuppressWarnings("unchecked")
@Override
public Expression getExpression(CompilationUnit unit, AST ast)
{
NormalAnnotation annot = ast.newNormalAnnotation();
boolean wasAdded = addImports(ast, unit, getAnnotationName());
if (wasAdded)
{
((SimpleName) annot.getTypeName()).setIdentifier(getSimpleAnnotationName());
} else
{
Name name = ast.newName(getAnnotationName());
annot.setTypeName(name);
}
for (IParamValuePair paramValuePair : paramValuePairs)
{
MemberValuePair pair = ast.newMemberValuePair();
pair.getName().setIdentifier(paramValuePair.getParam());
pair.setValue(((ValueImpl) paramValuePair.getValue()).getExpression(unit, ast));
annot.values().add(pair);
}
return annot;
}
@Override
public int hashCode()
{
if(paramValuePairs == null || paramValuePairs.size() < 1)
{
return 31 * super.hashCode();
}
return 31 * super.hashCode() + Arrays.hashCode(paramValuePairs.toArray(new IParamValuePair[paramValuePairs.size()]));
}
@Override
public boolean equals(Object obj)
{
if (!super.equals(obj))
{
return false;
}
final AnnotationImpl<?> other = (AnnotationImpl<?>) obj;
return (Arrays.equals(paramValuePairs.toArray(new IParamValuePair[paramValuePairs.size()]), other.paramValuePairs.toArray(new IParamValuePair[paramValuePairs.size()])));
}
public T getAppliedElement()
{
return this.javaElement;
}
}