blob: 161acf6efc375cbc38c1c452d3fdfa7d31bd78b1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2004 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
/*
* Created on Feb 9, 2004
*
* To change the template for this generated file go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
package org.eclipse.jst.j2ee.internal.webservices;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jem.util.emf.workbench.ProjectResourceSet;
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
import org.eclipse.jem.util.logger.proxy.Logger;
import org.eclipse.jst.j2ee.applicationclient.internal.creation.IApplicationClientNatureConstants;
import org.eclipse.jst.j2ee.client.ApplicationClient;
import org.eclipse.jst.j2ee.ejb.EJBJar;
import org.eclipse.jst.j2ee.ejb.EnterpriseBean;
import org.eclipse.jst.j2ee.internal.J2EEConstants;
import org.eclipse.jst.j2ee.internal.J2EEEditModel;
import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
import org.eclipse.jst.j2ee.internal.common.XMLResource;
import org.eclipse.jst.j2ee.internal.project.IEJBNatureConstants;
import org.eclipse.jst.j2ee.internal.project.IWebNatureConstants;
import org.eclipse.jst.j2ee.internal.project.J2EEModuleNature;
import org.eclipse.jst.j2ee.internal.project.J2EENature;
import org.eclipse.jst.j2ee.webapplication.WebApp;
import org.eclipse.jst.j2ee.webservice.wsclient.ComponentScopedRefs;
import org.eclipse.jst.j2ee.webservice.wsclient.ServiceRef;
import org.eclipse.jst.j2ee.webservice.wsclient.WebServicesClient;
import org.eclipse.jst.j2ee.webservice.wsclient.WebServicesResource;
import org.eclipse.jst.j2ee.webservice.wsclient.Webservice_clientFactory;
import org.eclipse.jst.j2ee.webservice.wsdd.PortComponent;
import org.eclipse.jst.j2ee.webservice.wsdd.ServiceImplBean;
import org.eclipse.jst.j2ee.webservice.wsdd.WebServiceDescription;
import org.eclipse.jst.j2ee.webservice.wsdd.WebServices;
import org.eclipse.jst.j2ee.webservice.wsdd.WsddResource;
import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelEvent;
import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelListener;
/**
* @author jlanuti
*
* To change the template for this generated type comment go to Window - Preferences - Java - Code
* Generation - Code and Comments
*/
public class WebServicesManager implements EditModelListener, IResourceChangeListener, IResourceDeltaVisitor {
private HashMap editModels;
private static WebServicesManager INSTANCE = null;
private List listeners;
private List removedListeners = new ArrayList();
private boolean isNotifing = false;
public static final String WSDL_EXT = "wsdl"; //$NON-NLS-1$
public static final String WSIL_EXT = "wsil"; //$NON-NLS-1$
public static WebServicesManager getInstance() {
if (INSTANCE == null)
INSTANCE = new WebServicesManager();
return INSTANCE;
}
/**
* Default Constructor
*/
public WebServicesManager() {
super();
init();
}
private void init() {
collectProjectEditModels();
ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
}
private void collectProjectEditModels() {
IProject[] projects = ProjectUtilities.getAllProjects();
for (int i = 0; i < projects.length; i++) {
IProject project = projects[i];
WebServiceEditModel editModel = getWebServiceEditModelForProject(project);
if (editModel != null) {
editModel.addListener(this);
getEditModels().put(project, editModel);
}
}
}
/**
* @return Returns the editModels.
*/
private HashMap getEditModels() {
if (editModels == null)
editModels = new HashMap();
return editModels;
}
private List getEditModelList() {
return new ArrayList(getEditModels().values());
}
private List getListeners() {
if (listeners == null)
listeners = new ArrayList();
return listeners;
}
/**
* Add aListener to the list of listeners.
*/
public void addListener(EditModelListener aListener) {
if (aListener != null && !getListeners().contains(aListener))
getListeners().add(aListener);
}
public WebServiceEditModel getWSEditModel(IProject project) {
List localEditModels = getEditModelList();
for (int i = 0; i < localEditModels.size(); i++) {
WebServiceEditModel wsEditModel = (WebServiceEditModel) localEditModels.get(i);
if (wsEditModel.getProject() == project)
return wsEditModel;
}
return null;
}
public J2EEModuleNature getWebServiceNature(IProject project) {
try {
if (project.hasNature(IEJBNatureConstants.NATURE_ID))
return (J2EEModuleNature) project.getNature(IEJBNatureConstants.NATURE_ID);
else if (project.hasNature(IApplicationClientNatureConstants.NATURE_ID))
return (J2EEModuleNature) project.getNature(IApplicationClientNatureConstants.NATURE_ID);
else if (project.hasNature(IWebNatureConstants.J2EE_NATURE_ID))
return (J2EEModuleNature) project.getNature(IWebNatureConstants.J2EE_NATURE_ID);
} catch (Exception e) {
//Ignore
}
return null;
}
private WebServiceEditModel getWebServiceEditModelForProject(IProject project) {
J2EEModuleNature nature = getWebServiceNature(project);
HashMap editModelMap = getEditModels();
WebServiceEditModel wsEditModel = (WebServiceEditModel) editModelMap.get(project);
if (wsEditModel == null && nature != null) {
wsEditModel = nature.getWebServiceEditModelForRead(this);
editModelMap.put(project, wsEditModel);
return wsEditModel;
}
return wsEditModel;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.common.internal.emfworkbench.integration.EditModelListener#editModelChanged(org.eclipse.wst.common.internal.emfworkbench.integration.EditModelEvent)
*/
public void editModelChanged(EditModelEvent anEvent) {
if (anEvent.getEventCode() == EditModelEvent.PRE_DISPOSE) {
EditModel editModel = anEvent.getEditModel();
getEditModels().remove(editModel.getProject());
editModel.removeListener(this);
editModel.releaseAccess(this);
}
notifyListeners(anEvent);
}
/**
* Notify listeners of
*
* @anEvent.
*/
protected void notifyListeners(EditModelEvent anEvent) {
if (listeners == null)
return;
synchronized (this) {
isNotifing = true;
}
try {
List list = getListeners();
for (int i = 0; i < list.size(); i++)
((EditModelListener) list.get(i)).editModelChanged(anEvent);
} finally {
synchronized (this) {
isNotifing = false;
if (removedListeners != null && !removedListeners.isEmpty()) {
for (int i = 0; i < removedListeners.size(); i++)
listeners.remove(removedListeners.get(i));
removedListeners.clear();
}
}
}
}
/**
* Remove aListener from the list of listeners.
*/
public synchronized boolean removeListener(EditModelListener aListener) {
if (aListener != null) {
if (isNotifing)
return removedListeners.add(aListener);
return getListeners().remove(aListener);
}
return false;
}
private void releaseEditModels() {
for (int i = 0; i < getEditModelList().size(); i++) {
WebServiceEditModel editModel = (WebServiceEditModel) getEditModelList().get(i);
editModel.removeListener(this);
editModel.releaseAccess(this);
}
getEditModels().clear();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
*/
public void resourceChanged(IResourceChangeEvent event) {
acceptDelta(event);
}
protected void acceptDelta(IResourceChangeEvent event) {
IResourceDelta delta = event.getDelta();
// search for changes to any projects using a visitor
if (delta != null) {
try {
delta.accept(this);
} catch (Exception e) {
Logger.getLogger().logError(e);
}
}
}
/**
* returns a list of internal web services descriptions in the workspace
*/
public List getInternalWebServicesDescriptions() {
List result = new ArrayList();
List webServices = getInternalWebServices();
for (int i = 0; i < webServices.size(); i++) {
WebServices webService = (WebServices) webServices.get(i);
if (webService != null)
result.addAll(webService.getWebServiceDescriptions());
}
return result;
}
/**
* @return all internal web services instances in workspace
*/
public List getInternalWebServices() {
List result = new ArrayList();
for (int i = 0; i < getEditModelList().size(); i++) {
WebServiceEditModel editModel = (WebServiceEditModel) getEditModelList().get(i);
if (editModel.getProject() != null) {
WebServices webServices = editModel.getWebServices();
if (webServices != null)
result.add(webServices);
}
}
return result;
}
/**
* returns a list of all the internal wsdl services in wsdl's pointed to by wsdd's
*/
public List getInternalWSDLServices() {
return getWSDLServicesFromWSDLResources(getInternalWSDLResources());
}
public List getInternalWSDLResources() {
List result = new ArrayList();
List wsddWebServices = getInternalWebServicesDescriptions();
for (int i = 0; i < wsddWebServices.size(); i++) {
WebServiceDescription webServices = (WebServiceDescription) wsddWebServices.get(i);
Resource wsdl = getWSDLResource(webServices);
if (wsdl != null && !result.contains(wsdl))
result.add(wsdl);
}
return result;
}
public List getExternalWSDLResources() {
//TODO fix up for basis off .wsil
List result = getWorkspaceWSDLResources();
result.removeAll(getInternalWSDLResources());
List serviceRefs = getAllWorkspaceServiceRefs();
for (int i=0; i<serviceRefs.size(); i++) {
ServiceRef ref = (ServiceRef) serviceRefs.get(i);
try {
Resource res = WorkbenchResourceHelperBase.getResource(URI.createURI(ref.getWsdlFile()), true);
if (res !=null && result.contains(res))
result.remove(res);
} catch (Exception e) {
//Ignore
}
}
return result;
}
public boolean isServiceInternal(EObject service) {
return getInternalWSDLResources().contains(getWSDLResource(service));
}
private List getWSDLServicesFromWSDLResources(List wsdlResources) {
List result = new ArrayList();
for (int i = 0; i < wsdlResources.size(); i++) {
Resource wsdl = (Resource) wsdlResources.get(i);
List services = getWSDLServices(wsdl);
if (wsdl != null && services != null && !services.isEmpty())
result.addAll(services);
}
return result;
}
public List getExternalWSDLServices() {
List result = getWsdlServicesFromWorkspaceWSILs();
result.removeAll(getInternalWSDLServices());
return result;
}
public List getWsdlServicesFromWorkspaceWSILs() {
List result = new ArrayList();
List wsilFiles = getWorkspaceWSILFiles();
for (int i = 0; i < wsilFiles.size(); i++) {
IFile wsil = (IFile) wsilFiles.get(i);
List services = getWsdlServicesFromWsilFile(wsil);
if (!services.isEmpty())
result.addAll(services);
}
return result;
}
public List getWsdlServicesFromWsilFile(IFile wsil) {
WSDLServiceHelper serviceHelper = WSDLServiceExtManager.getServiceHelper();
return serviceHelper.getWsdlServicesFromWsilFile(wsil);
}
/**
* Returns all WSDL Services, both internal and external
*/
public List getAllWSDLServices() {
List result = new ArrayList();
result.addAll(getInternalWSDLServices());
result.addAll(getExternalWSDLServices());
return result;
}
protected void dispose() {
ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
releaseEditModels();
INSTANCE = null;
}
public Resource getWSDLResource(WebServiceDescription webService) {
String wsdlFileName = webService.getWsdlFile();
Resource res = null;
String projName = ProjectUtilities.getProject(webService).getName();
for (int i = 0; i < getEditModelList().size(); i++) {
WebServiceEditModel editModel = (WebServiceEditModel) getEditModelList().get(i);
if (editModel.getProject() != null && editModel.getProject().getName().equals(projName)) {
res = editModel.getWsdlResource(wsdlFileName);
if (res != null)
break;
}
}
return res;
}
public List getWSDLServices(Resource wsdl) {
WSDLServiceHelper serviceHelper = WSDLServiceExtManager.getServiceHelper();
List result = new ArrayList();
Object def = serviceHelper.getWSDLDefinition(wsdl);
if (def == null)
return result;
result = new ArrayList(serviceHelper.getDefinitionServices(def).values());
return result;
}
public EObject getWSDLServiceForWebService(WebServiceDescription webService) {
EObject service = null;
WSDLServiceHelper serviceHelper = WSDLServiceExtManager.getServiceHelper();
Resource wsdl = getWSDLResource(webService);
if (wsdl == null) return service;
Object definition = serviceHelper.getWSDLDefinition(wsdl);
if (definition == null) return service;
Map services = serviceHelper.getDefinitionServices(definition);
if (services.isEmpty()) return service;
PortComponent portComp = null;
if (webService.getPortComponents()!=null && webService.getPortComponents().size()>0) {
portComp = (PortComponent) webService.getPortComponents().get(0);
return getService(portComp);
}
return service;
}
public Resource getWSDLResource(EObject wsdlService) {
return wsdlService.eResource();
}
public EObject getService(PortComponent port) {
List services = getInternalWSDLServices();
WSDLServiceHelper serviceHelper = WSDLServiceExtManager.getServiceHelper();
for (int i = 0; i < services.size(); i++) {
EObject service = (EObject)services.get(i);
if (serviceHelper.getServicePorts(service).size() == 1) {
Object wsdlPort = serviceHelper.getServicePorts(service).values().toArray()[0];
String qName = serviceHelper.getPortBindingNamespaceURI(wsdlPort);
if (port.getWsdlPort().getNamespaceURI().equals(qName))
return service;
}
}
return null;
}
public PortComponent getPortComponent(String qName) {
List wsDescs = getInternalWebServicesDescriptions();
for (int i = 0; i < wsDescs.size(); i++) {
WebServiceDescription wsDesc = (WebServiceDescription) wsDescs.get(i);
List ports = wsDesc.getPortComponents();
for (int j = 0; j < ports.size(); j++) {
PortComponent portComp = (PortComponent) ports.get(j);
if (portComp.getWsdlPort().getNamespaceURI().equals(qName))
return portComp;
}
}
return null;
}
public PortComponent getPortComponent(String qName, IProject project) {
List wsDescs = getInternalWebServicesDescriptions();
for (int i = 0; i < wsDescs.size(); i++) {
WebServiceDescription wsDesc = (WebServiceDescription) wsDescs.get(i);
List ports = wsDesc.getPortComponents();
for (int j = 0; j < ports.size(); j++) {
PortComponent portComp = (PortComponent) ports.get(j);
if (portComp.getWsdlPort().getNamespaceURI().equals(qName) && project == ProjectUtilities.getProject(portComp))
return portComp;
}
}
return null;
}
public PortComponent getPortComponent(EObject wsdlService) {
// If there is only one port in the wsdl service, find the matching port component
// otherwise if multiple ports return null because we need more information
WSDLServiceHelper serviceHelper = WSDLServiceExtManager.getServiceHelper();
if (wsdlService == null || serviceHelper.getServicePorts(wsdlService).isEmpty())
return null;
if (serviceHelper.getServicePorts(wsdlService).size() == 1) {
Object port = serviceHelper.getServicePorts(wsdlService).values().toArray()[0];
String qName = serviceHelper.getPortBindingNamespaceURI(port);
return getPortComponent(qName, ProjectUtilities.getProject(wsdlService));
}
return null;
}
public ServiceImplBean getServiceImplBean(EObject wsdlService) {
PortComponent port = getPortComponent(wsdlService);
if (port == null)
return null;
return port.getServiceImplBean();
}
public WsddResource getWsddResource(EObject wsdlService) {
PortComponent port = getPortComponent(wsdlService);
if (port == null)
return null;
return (WsddResource) port.eResource();
}
public String getServiceEndpointInterface(EObject wsdlService) {
PortComponent port = getPortComponent(wsdlService);
if (port == null)
return null;
return port.getServiceEndpointInterface();
}
public List getAllWorkspaceServiceRefs() {
List result = new ArrayList();
result.addAll(getWorkspace13ServiceRefs());
result.addAll(getWorkspace14ServiceRefs());
return result;
}
public List getWorkspace13ServiceRefs() {
List result = new ArrayList();
for (int i = 0; i < getEditModelList().size(); i++) {
WebServiceEditModel editModel = (WebServiceEditModel) getEditModelList().get(i);
if (editModel.getProject() != null) {
WebServicesResource res = editModel.get13WebServicesClientResource();
if (res != null && res.isLoaded() && res.getWebServicesClient() != null)
result.addAll(res.getWebServicesClient().getServiceRefs());
}
}
return result;
}
public List get13ServiceRefs(J2EEEditModel moduleEditModel) {
List result = new ArrayList();
WebServicesResource res = getWscddResource(moduleEditModel);
if (res != null && res.isLoaded() && res.getWebServicesClient() != null)
result.addAll(res.getWebServicesClient().getServiceRefs());
return result;
}
/**
* @param moduleEditModel
* @return
*/
private WebServicesResource getWscddResource(J2EEEditModel moduleEditModel) {
if (moduleEditModel.getJ2EENature().getNatureID().equals(IEJBNatureConstants.NATURE_ID))
return (WebServicesResource) moduleEditModel.getResource(J2EEConstants.WEB_SERVICES_CLIENT_META_INF_DD_URI_OBJ);
if (moduleEditModel.getJ2EENature().getNatureID().equals(IWebNatureConstants.J2EE_NATURE_ID))
return (WebServicesResource) moduleEditModel.getResource(J2EEConstants.WEB_SERVICES_CLIENT_WEB_INF_DD_URI_OBJ);
if (moduleEditModel.getJ2EENature().getNatureID().equals(IApplicationClientNatureConstants.NATURE_ID))
return (WebServicesResource) moduleEditModel.getResource(J2EEConstants.WEB_SERVICES_CLIENT_META_INF_DD_URI_OBJ);
return null;
}
public List getWorkspace14ServiceRefs() {
List result = new ArrayList();
for (int i = 0; i < getEditModelList().size(); i++) {
WebServiceEditModel editModel = (WebServiceEditModel) getEditModelList().get(i);
if (editModel.getProject() != null) {
J2EEEditModel j2eeEditModel = editModel.getJ2EEEditModel(this);
try {
EObject rootObject = j2eeEditModel.getPrimaryRootObject();
// handle EJB project case
if (rootObject instanceof EJBJar) {
List cmps = ((EJBJar) rootObject).getEnterpriseBeans();
for (int j = 0; j < cmps.size(); j++) {
EnterpriseBean bean = (EnterpriseBean) cmps.get(j);
if (bean.getServiceRefs() != null && !bean.getServiceRefs().isEmpty())
result.addAll(bean.getServiceRefs());
}
}
// handle Web Project
else if (rootObject instanceof WebApp) {
if (((WebApp) rootObject).getServiceRefs() != null && !((WebApp) rootObject).getServiceRefs().isEmpty())
result.addAll(((WebApp) rootObject).getServiceRefs());
}
// handle App clients
else if (rootObject instanceof ApplicationClient) {
if (((ApplicationClient) rootObject).getServiceRefs() != null && !((ApplicationClient) rootObject).getServiceRefs().isEmpty())
result.addAll(((ApplicationClient) rootObject).getServiceRefs());
}
} finally {
j2eeEditModel.releaseAccess(this);
}
}
}
return result;
}
public boolean isJ2EE14(ServiceRef ref) {
return !(ref.eContainer() instanceof WebServicesClient);
}
public List getWorkspaceWSILFiles() {
List result = new ArrayList();
for (int i = 0; i < getEditModelList().size(); i++) {
WebServiceEditModel editModel = (WebServiceEditModel) getEditModelList().get(i);
if (editModel.getProject() != null) {
List files = ProjectUtilities.getAllProjectFiles(editModel.getProject());
for (int j = 0; j < files.size(); j++) {
IFile file = (IFile) files.get(j);
if (file != null && WSIL_EXT.equals(file.getFileExtension()))
result.add(file);
}
}
}
return result;
}
public List getWorkspaceWSDLResources() {
List result = new ArrayList();
for (int i = 0; i < getEditModelList().size(); i++) {
WebServiceEditModel editModel = (WebServiceEditModel) getEditModelList().get(i);
if (editModel.getProject() != null) {
List wsdlResources = editModel.getWSDLResources();
if (wsdlResources != null && !wsdlResources.isEmpty()) {
for (int j = 0; j < wsdlResources.size(); j++) {
Resource wsdl = (Resource) wsdlResources.get(j);
if (!result.contains(wsdl))
result.add(wsdl);
}
}
}
}
return result;
}
public List getWSDLServices() {
List result = new ArrayList();
List internalWsdls = getInternalWSDLServices();
if (internalWsdls != null && !internalWsdls.isEmpty())
result.addAll(internalWsdls);
//TODO add externals
return result;
}
/**
* @param bean
* @return
*/
public Collection get13ServiceRefs(EnterpriseBean bean) {
IProject proj = ProjectUtilities.getProject(bean);
if (proj == null)
return Collections.EMPTY_LIST;
WebServicesResource res = getWebServicesClientResource(proj);
if (res != null && res.getWebServicesClient() != null) {
String ejbName = bean.getName();
List scopes = res.getWebServicesClient().getComponentScopedRefs();
for (Iterator iter = scopes.iterator(); iter.hasNext();) {
ComponentScopedRefs scope = (ComponentScopedRefs) iter.next();
if (scope.getComponentName().equals(ejbName))
return scope.getServiceRefs();
}
}
return Collections.EMPTY_LIST;
}
/**
* @param client
* @return
*/
public Collection get13ServiceRefs(ApplicationClient client) {
IProject proj = ((ProjectResourceSet) client.eResource().getResourceSet()).getProject();
WebServicesResource res = getWebServicesClientResource(proj);
if (res != null) {
WebServicesClient webClient = res.getWebServicesClient();
if (webClient != null)
return webClient.getServiceRefs();
}
return Collections.EMPTY_LIST;
}
/**
* @param webapp
* @return
*/
public Collection get13ServiceRefs(WebApp webapp) {
IProject proj = ((ProjectResourceSet) webapp.eResource().getResourceSet()).getProject();
WebServicesResource res = getWebServicesClientResource(proj);
if (res != null) {
WebServicesClient webClient = res.getWebServicesClient();
if (webClient != null)
return webClient.getServiceRefs();
}
return Collections.EMPTY_LIST;
}
public WebServicesResource getDefaultWebServicesResource(EObject proj, J2EEEditModel model) {
WebServicesResource res = getWebServicesClientResource(model.getProject());
if (res != null) {
if (res.getContents().isEmpty()) {
WebServicesClient wsc = Webservice_clientFactory.eINSTANCE.createWebServicesClient();
res.getContents().add(wsc);
}
return res;
}
if (proj instanceof WebApp)
res = (WebServicesResource) model.createResource(URI.createURI(WebServiceEditModel.WS_CLIENT_WEB_INF_PATH));
else
res = (WebServicesResource) model.createResource(URI.createURI(WebServiceEditModel.WS_CLIENT_META_INF_PATH));
WebServicesClient wsc = Webservice_clientFactory.eINSTANCE.createWebServicesClient();
res.getContents().add(wsc);
return res;
}
public WebServicesResource getWebServicesClientResource(IProject proj) {
J2EENature nature = (J2EENature.getRegisteredRuntime(proj));
WebServicesResource res = null;
try {
if (nature.getDeploymentDescriptorType() == XMLResource.WEB_APP_TYPE)
res = (WebServicesResource) nature.getResource(J2EEConstants.WEB_SERVICES_CLIENT_WEB_INF_DD_URI_OBJ);
else
res = (WebServicesResource) nature.getResource(J2EEConstants.WEB_SERVICES_CLIENT_META_INF_DD_URI_OBJ);
} catch (Exception e) {
//Ignore
}
return res;
}
public WsddResource getWebServicesResource(IProject proj) {
J2EENature nature = (J2EENature.getRegisteredRuntime(proj));
WsddResource res = null;
try {
if (nature.getDeploymentDescriptorType() == XMLResource.WEB_APP_TYPE)
res = (WsddResource) nature.getResource(J2EEConstants.WEB_SERVICES_WEB_INF_DD_URI_OBJ);
else
res = (WsddResource) nature.getResource(J2EEConstants.WEB_SERVICES_META_INF_DD_URI_OBJ);
} catch (Exception e) {
//Ignore
}
if (res != null && WorkbenchResourceHelper.getFile(res).exists())
return res;
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core.resources.IResourceDelta)
*/
public boolean visit(IResourceDelta delta) throws CoreException {
IResource resource = delta.getResource();
if (resource.getType() == IResource.PROJECT) {
IProject p = (IProject) resource;
// Handle project adds
if (delta.getKind() == IResourceDelta.ADDED) {
WebServiceEditModel editModel = getWebServiceEditModelForProject(p);
if (editModel !=null && !getEditModels().containsValue(editModel)) {
getEditModels().put(p,editModel);
editModel.addListener(this);
// forward an edit model event to manager's listeners
notifyListeners(new EditModelEvent(EditModelEvent.ADDED_RESOURCE,editModel));
return false;
}
}
// Handle project close events removals
else if (delta.getKind() == IResourceDelta.CHANGED) {
boolean projectOpenStateChanged = ((delta.getFlags() & IResourceDelta.OPEN) != 0);
if (projectOpenStateChanged) {
WebServiceEditModel editModel = (WebServiceEditModel)getEditModels().get(p);
if (editModel !=null) {
editModel.removeListener(this);
getEditModels().remove(p);
notifyListeners(new EditModelEvent(EditModelEvent.REMOVED_RESOURCE,editModel));
return false;
}
}
}
// Handle project delete events
else if (delta.getKind() == IResourceDelta.REMOVED) {
WebServiceEditModel editModel = (WebServiceEditModel)getEditModels().get(p);
if (editModel !=null) {
editModel.removeListener(this);
getEditModels().remove(p);
notifyListeners(new EditModelEvent(EditModelEvent.REMOVED_RESOURCE,editModel));
return false;
}
}
}
else if (resource.getType() == IResource.FILE && isInterrestedInFile((IFile) resource)) {
if ((delta.getKind() == IResourceDelta.ADDED) || ((delta.getFlags() & IResourceDelta.MOVED_TO) != 0))
if (resource.getFileExtension().equals(WSDL_EXT))
addedWsdl((IFile) resource);
else if (resource.getFileExtension().equals(WSIL_EXT))
addedWsil((IFile)resource);
return false;
}
return true;
}
protected void addedWsdl(IFile wsdl) {
if (!wsdl.exists())
return;
//Resource res = WorkbenchResourceHelperBase.getResource(wsdl, true);
IProject p = wsdl.getProject();
WebServiceEditModel editModel = getWebServiceEditModelForProject(p);
// forward an edit model event to manager's listeners
notifyListeners(new EditModelEvent(EditModelEvent.ADDED_RESOURCE, editModel));
}
protected void addedWsil(IFile wsil) {
if (!wsil.exists())
return;
//Resource res = WorkbenchResourceHelper.getResource(wsil,true);
IProject p = wsil.getProject();
WebServiceEditModel editModel = getWebServiceEditModelForProject(p);
// forward an edit model event to manager's listeners
notifyListeners(new EditModelEvent(EditModelEvent.ADDED_RESOURCE, editModel));
}
protected boolean isInterrestedInFile(IFile aFile) {
if (aFile != null && aFile.getFileExtension() != null) {
String extension = aFile.getFileExtension();
return extension.equals(WSDL_EXT) || extension.equals(WSIL_EXT);
}
return false;
}
/**
* @param object
* @return
*/
public Collection getServiceRefs(EJBJar jar) {
List list = new ArrayList();
List beans = jar.getEnterpriseBeans();
try {
for (int i = 0; i < beans.size(); i++) {
EnterpriseBean bean = (EnterpriseBean) beans.get(i);
list.addAll(getServiceRefs(bean));
}
} catch (Exception e) {
//Ignore
}
return list;
}
public Collection getServiceRefs(EnterpriseBean bean) {
List list = new ArrayList();
if (bean.getEjbJar().getJ2EEVersionID() >= J2EEVersionConstants.J2EE_1_4_ID)
list.addAll(bean.getServiceRefs());
else
list.addAll(get13ServiceRefs(bean));
return list;
}
public Collection getServiceRefs(WebApp webapp) {
List list = new ArrayList();
try {
if (webapp.getVersionID() >= J2EEVersionConstants.WEB_2_4_ID)
list.addAll(webapp.getServiceRefs());
else
list.addAll(get13ServiceRefs(webapp));
} catch (Exception e) {
//Ignore
}
return list;
}
public Collection getServiceRefs(ApplicationClient client) {
List list = new ArrayList();
try {
if (client.getJ2EEVersionID() >= J2EEVersionConstants.J2EE_1_4_ID)
list.addAll(client.getServiceRefs());
else
list.addAll(get13ServiceRefs(client));
} catch (Exception e) {
//Ignore
}
return list;
}
}