blob: 76b2ac00527555bbb768871015b189593cc306b0 [file] [log] [blame]
package org.eclipse.jst.ws.jaxws.dom.runtime.validation.webservice;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.validation.IValidationContext;
import org.eclipse.jdt.core.IType;
import org.eclipse.jst.j2ee.model.IModelProvider;
import org.eclipse.jst.j2ee.model.ModelProviderManager;
import org.eclipse.jst.javaee.ejb.SessionBean;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.IWebService;
import org.eclipse.jst.ws.jaxws.dom.runtime.persistence.WSAnnotationFeatures;
import org.eclipse.jst.ws.jaxws.dom.runtime.util.Dom2ResourceMapper;
import org.eclipse.jst.ws.jaxws.dom.runtime.validation.AbstractValidationConstraint;
import org.eclipse.jst.ws.jaxws.dom.runtime.validation.messages.ValidationMessages;
import org.eclipse.jst.ws.jaxws.utils.facets.FacetUtils;
import org.eclipse.jst.ws.jaxws.utils.facets.IFacetUtils;
/**
* Constraint for validating whether a class in a EJB module annotated with the "@WebService" annotation is a session bean
*
* @author Danail Branekov
*/
public class EndpointIsSessionBeanConstraint extends AbstractValidationConstraint
{
public EndpointIsSessionBeanConstraint()
{
super(new WsConstraintDescriptor());
}
@Override
protected IStatus doValidate(final IValidationContext ctx) throws CoreException
{
final IWebService ws = (IWebService) ctx.getTarget();
final IType wsType = Dom2ResourceMapper.INSTANCE.findType(ws);
if (wsType == null || wsType.getResource() == null)
{
return createOkStatus(ws);
}
final IProject project = wsType.getResource().getProject();
if (!facetUtils().hasFacetWithVersion(project, IFacetUtils.EJB_30_FACET_VERSION, IFacetUtils.EJB_30_FACET_ID))
{
return createOkStatus(ws);
}
if (!isSessionBean(wsType))
{
return createStatus(ws, ValidationMessages.WsValidation_WsAnnotationOnNonSessionBean_Error, WSAnnotationFeatures.WS_ANNOTATION, null);
}
return createOkStatus(ws);
}
private IFacetUtils facetUtils()
{
return new FacetUtils();
}
@SuppressWarnings("unchecked")
private boolean isSessionBean(final IType endpointType)
{
final IModelProvider provider = ModelProviderManager.getModelProvider(endpointType.getResource().getProject());
final Object modelObject = provider.getModelObject();
final List<SessionBean> sessionBeans = ((org.eclipse.jst.javaee.ejb.EJBJar) modelObject).getEnterpriseBeans().getSessionBeans();
for (SessionBean bean : sessionBeans)
{
if (bean.getEjbClass().equals(endpointType.getFullyQualifiedName()))
{
return true;
}
}
return false;
}
}