/******************************************************************************* | |
* Copyright (c) 2009 Shane Clarke. | |
* 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: | |
* Shane Clarke - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.jst.ws.internal.jaxws.core.annotations.validation; | |
import static org.eclipse.jst.ws.internal.jaxws.core.utils.JAXWSUtils.NAME; | |
import static org.eclipse.jst.ws.internal.jaxws.core.utils.JAXWSUtils.TYPE; | |
import static org.eclipse.jst.ws.internal.jaxws.core.utils.JAXWSUtils.VALUE; | |
import java.util.Collection; | |
import java.util.List; | |
import javax.xml.ws.WebServiceRefs; | |
import org.eclipse.jst.ws.annotations.core.processor.AbstractAnnotationProcessor; | |
import org.eclipse.jst.ws.annotations.core.utils.AnnotationUtils; | |
import org.eclipse.jst.ws.internal.jaxws.core.JAXWSCoreMessages; | |
import com.sun.mirror.declaration.AnnotationMirror; | |
import com.sun.mirror.declaration.AnnotationTypeDeclaration; | |
import com.sun.mirror.declaration.AnnotationValue; | |
import com.sun.mirror.declaration.ClassDeclaration; | |
import com.sun.mirror.declaration.Declaration; | |
public class WebServiceRefsRules extends AbstractAnnotationProcessor { | |
@Override | |
public void process() { | |
AnnotationTypeDeclaration annotationTypeDeclaration = (AnnotationTypeDeclaration) environment | |
.getTypeDeclaration(WebServiceRefs.class.getName()); | |
Collection<Declaration> annotatedTypes = environment | |
.getDeclarationsAnnotatedWith(annotationTypeDeclaration); | |
for (Declaration declaration : annotatedTypes) { | |
AnnotationMirror webServiceRefs = AnnotationUtils | |
.getAnnotation(declaration, WebServiceRefs.class); | |
AnnotationValue webServiceRefsValue = AnnotationUtils.getAnnotationValue(webServiceRefs, VALUE); | |
if (webServiceRefsValue != null && webServiceRefsValue.getValue() instanceof List<?>) { | |
List<AnnotationValue> value = (List<AnnotationValue>) webServiceRefsValue.getValue(); | |
for (AnnotationValue annotationValue : value) { | |
if (annotationValue.getValue() instanceof AnnotationMirror) { | |
AnnotationMirror webServiceRef = (AnnotationMirror) annotationValue.getValue(); | |
String webServiceRefName = AnnotationUtils.getStringValue(webServiceRef, NAME); | |
if (webServiceRefName == null || webServiceRefName.trim().length() == 0) { | |
printError(webServiceRef.getPosition(), | |
JAXWSCoreMessages.WEBSERVICEREFS_NAME_REQUIRED); | |
} | |
AnnotationValue webServiceRefNameType = AnnotationUtils.getAnnotationValue( | |
webServiceRef, TYPE); | |
if (webServiceRefNameType != null && webServiceRefNameType instanceof AnnotationValue) { | |
AnnotationValue type = (AnnotationValue) webServiceRefNameType; | |
if (type.getValue() instanceof ClassDeclaration) { | |
ClassDeclaration classDeclaration = (ClassDeclaration) type.getValue(); | |
if (classDeclaration.getQualifiedName().equals( | |
java.lang.Object.class.getCanonicalName())) { | |
printError(webServiceRef.getPosition(), | |
JAXWSCoreMessages.WEBSERVICEREFS_TYPE_REQUIRED); | |
} | |
} | |
} else { | |
printError(webServiceRef.getPosition(), | |
JAXWSCoreMessages.WEBSERVICEREFS_TYPE_REQUIRED); | |
} | |
} | |
} | |
} | |
} | |
} | |
} |