added web services back in
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/OpenExternalWSDLAction.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/OpenExternalWSDLAction.java new file mode 100644 index 0000000..f80437d --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/OpenExternalWSDLAction.java
@@ -0,0 +1,59 @@ +/******************************************************************************* + * 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 Apr 29, 2004 + * + * To change the template for this generated file go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +package org.eclipse.jst.internal.webservice; + +import java.net.URL; + +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jst.j2ee.internal.actions.AbstractOpenAction; +import org.eclipse.jst.j2ee.internal.plugin.J2EEUIPlugin; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.eclipse.wst.internet.webbrowser.WebBrowser; +import org.eclipse.wst.wsdl.internal.util.WSDLResourceImpl; + +/** + * @author jlanuti + * + * To change the template for this generated type comment go to Window - Preferences - Java - Code + * Generation - Code and Comments + */ +public class OpenExternalWSDLAction extends AbstractOpenAction { + + String uri = ""; //$NON-NLS-1$ + + /** + * @param text + */ + public OpenExternalWSDLAction(String text) { + super(text); + this.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(J2EEUIPlugin.PLUGIN_ID, "icons/web_type.gif")); //$NON-NLS-1$ + } + + public void run() { + try { + WebBrowser.openURL(new URL(uri), WebBrowser.SHOW_ALL | WebBrowser.FORCE_NEW_PAGE, null); + } catch (Exception e) { + } + } + + public boolean updateSelection(IStructuredSelection s) { + Object obj = s.getFirstElement(); + if (obj instanceof WSDLResourceImpl) + uri = ((WSDLResourceImpl) obj).getURI().toString(); + return super.updateSelection(s); + } +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceAdapterFactory.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceAdapterFactory.java new file mode 100644 index 0000000..3a98879 --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceAdapterFactory.java
@@ -0,0 +1,61 @@ +/******************************************************************************* + * 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 Mar 4, 2004 + * + * To change the template for this generated file go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +package org.eclipse.jst.internal.webservice; + +import org.eclipse.jst.j2ee.internal.webservices.WebServicesManager; +import org.eclipse.jst.j2ee.webservice.wsdd.WsddResource; +import org.eclipse.wst.common.internal.emfworkbench.EMFAdapterFactory; +import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper; +import org.eclipse.wst.wsdl.Service; + +import com.ibm.wtp.emf.workbench.ProjectUtilities; + +/** + * @author jlanuti + * + * To change the template for this generated type comment go to Window - Preferences - Java - Code + * Generation - Code and Comments + */ +public class WebServiceAdapterFactory extends EMFAdapterFactory { + + /** + * Default constructor + */ + public WebServiceAdapterFactory() { + super(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class) + */ + public Object getAdapter(Object adaptableObject, Class adapterType) { + WsddResource res = null; + if (adaptableObject instanceof Service) + res = WebServicesManager.getInstance().getWsddResource((Service) adaptableObject); + + if (res != null && adapterType == EMFAdapterFactory.IFILE_CLASS) + return WorkbenchResourceHelper.getFile(res); + else if (res != null && adapterType == EMFAdapterFactory.IRESOURCE_CLASS) + return WorkbenchResourceHelper.getFile(res); + else if (res != null && adapterType == EMFAdapterFactory.IPROJECT_CLASS) + return ProjectUtilities.getProject(res); + else + return super.getAdapter(adaptableObject, adapterType); + } +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceFilesContribution.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceFilesContribution.java new file mode 100644 index 0000000..cfae026 --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceFilesContribution.java
@@ -0,0 +1,77 @@ +/******************************************************************************* + * 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 Jan 23, 2004 + * + * To change the template for this generated file go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +package org.eclipse.jst.internal.webservice; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.jst.j2ee.webservice.wsdd.WebServiceDescription; + + +/** + * @author jlanuti + * + * To change the template for this generated type comment go to Window - Preferences - Java - Code + * Generation - Code and Comments + */ +public class WebServiceFilesContribution { + + protected WebServiceDescription webService; + protected List allFiles = null; + + /** + * Constructor + */ + public WebServiceFilesContribution(WebServiceDescription webService) { + super(); + this.webService = webService; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + public String toString() { + return WebServiceUIResourceHandler.getString("WebServiceFilesContribution_UI_0"); //$NON-NLS-1$ + } + + public String getWSDLFile() { + return webService.getWsdlFile(); + } + + public String getMappingFile() { + return webService.getJaxrpcMappingFile(); + } + + public List getAllFiles() { + if (allFiles == null) { + allFiles = new ArrayList(); + allFiles.add(getWSDLFile()); + allFiles.add(getMappingFile()); + } + return allFiles; + } + + /** + * @return Returns the webService. + */ + public WebServiceDescription getWebService() { + return webService; + } + +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceGroupContentExtension.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceGroupContentExtension.java new file mode 100644 index 0000000..ed7fb9c --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceGroupContentExtension.java
@@ -0,0 +1,197 @@ +/******************************************************************************* + * 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 Jan 19, 2004 + * + * To change the template for this generated file go to Window - Preferences - + * Java - Code Generation - Code and Comments + */ +package org.eclipse.jst.internal.webservice; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jst.j2ee.internal.actions.OpenJ2EEResourceAction; +import org.eclipse.jst.j2ee.internal.webservices.WebServicesManager; +import org.eclipse.jst.j2ee.webservice.wsdd.BeanLink; +import org.eclipse.jst.j2ee.webservice.wsdd.ServiceImplBean; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.activities.ActivityManagerEvent; +import org.eclipse.ui.activities.IActivityManagerListener; +import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper; +import org.eclipse.wst.common.internal.emfworkbench.integration.DynamicAdapterFactory; +import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelEvent; +import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelListener; +import org.eclipse.wst.common.navigator.internal.views.DefaultNavigatorContentExtension; +import org.eclipse.wst.common.navigator.internal.views.actions.CommonEditActionGroup; +import org.eclipse.wst.common.navigator.internal.views.actions.ICommonMenuConstants; +import org.eclipse.wst.common.navigator.internal.views.extensions.NavigatorActivityHelper; +import org.eclipse.wst.common.navigator.views.INavigatorContentProvider; +import org.eclipse.wst.wsdl.internal.util.WSDLResourceImpl; + +/** + * + * To change the template for this generated type comment go to Window - Preferences - Java - Code + * Generation - Code and Comments + */ +public class WebServiceGroupContentExtension extends DefaultNavigatorContentExtension implements EditModelListener, IActivityManagerListener { + private final static String VIEWER_ID = "org.eclipse.wst.navigator.ui.WTPCommonNavigator";//$NON-NLS-1$ + private INavigatorContentProvider contentProvider = null; + private ILabelProvider labelProvider = null; + private OpenJ2EEResourceAction openAction = new OpenJ2EEResourceAction(); + private OpenExternalWSDLAction openExternalWSDLAction = new OpenExternalWSDLAction(WebServiceUIResourceHandler.getString("WebServiceGroupContentExtension_UI_1")); //$NON-NLS-1$ + + public WebServiceGroupContentExtension() { + super(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.navigator.internal.views.navigator.DefaultNavigatorContentExtension#doInit() + */ + public void doInit() { + WebServicesManager.getInstance().addListener(this); + PlatformUI.getWorkbench().getActivitySupport().getActivityManager().addActivityManagerListener(this); + + // create the default synchronizer for any web service editor to use with view due + // to the usage of seperate edit models. + WebServicesNavigatorSynchronizer.createInstance(createAdapterFactory(), this); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.navigator.internal.views.navigator.INavigatorContentExtension#getDescription(org.eclipse.jface.viewers.IStructuredSelection) + */ + public String getDescription(IStructuredSelection selection) { + return ""; //$NON-NLS-1$ + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.navigator.internal.views.navigator.INavigatorContentExtension#getContentProvider() + */ + public INavigatorContentProvider getContentProvider() { + if (contentProvider == null) + contentProvider = new WebServicesNavigatorContentProvider(createAdapterFactory(), this); + return contentProvider; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.navigator.internal.views.navigator.INavigatorContentExtension#getLabelProvider() + */ + public ILabelProvider getLabelProvider() { + if (labelProvider == null) { + labelProvider = new WebServicesNavigatorLabelProvider(createAdapterFactory()); + } + return labelProvider; + } + + /* + * (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) { + this.getExtensionSite().notifyElementReplaced(this, ((WebServicesNavigatorContentProvider) getContentProvider()).getNavigatorGroup()); + } + + /** + * Configure and return a composite adapter factory for our contents + */ + public AdapterFactory createAdapterFactory() { + return new DynamicAdapterFactory(VIEWER_ID); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.navigator.internal.views.navigator.INavigatorContentExtension#dispose() + */ + public void dispose() { + super.dispose(); + WebServicesManager.getInstance().removeListener(this); + PlatformUI.getWorkbench().getActivitySupport().getActivityManager().removeActivityManagerListener(this); + + // dispose current instance of web service editor/explorer synchronizer + WebServicesNavigatorSynchronizer.disposeInstance(); + + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.navigator.internal.views.navigator.INavigatorContentExtension#getEditActionGroup() + */ + public CommonEditActionGroup getEditActionGroup() { + return new CommonEditActionGroup(getExtensionSite()) { + public void fillOpenWithMenu(IMenuManager menu) { + if ((getExtensionSite().getSelection().getFirstElement() instanceof BeanLink)) { + openAction.selectionChanged(getExtensionSite().getSelection()); + menu.insertAfter(ICommonMenuConstants.COMMON_MENU_TOP, openAction); + } else if ((getExtensionSite().getSelection().getFirstElement() instanceof WSDLResourceImpl)) { + WSDLResourceImpl wsdl = (WSDLResourceImpl) getExtensionSite().getSelection().getFirstElement(); + IFile wsdlFile = WorkbenchResourceHelper.getFile(wsdl); + if (wsdlFile == null || !wsdlFile.exists()) { + openExternalWSDLAction.selectionChanged(getExtensionSite().getSelection()); + menu.insertAfter(ICommonMenuConstants.COMMON_MENU_TOP, openExternalWSDLAction); + } + } + } + + public void runDefaultAction(IStructuredSelection element) { + if (element.getFirstElement() instanceof ServiceImplBean) + return; + if ((getExtensionSite().getSelection().getFirstElement() instanceof BeanLink)) { + openAction.selectionChanged(element); + openAction.run(); + return; + } else if ((getExtensionSite().getSelection().getFirstElement() instanceof WSDLResourceImpl)) { + WSDLResourceImpl wsdl = (WSDLResourceImpl) getExtensionSite().getSelection().getFirstElement(); + IFile wsdlFile = WorkbenchResourceHelper.getFile(wsdl); + if (wsdlFile == null || !wsdlFile.exists()) { + openExternalWSDLAction.selectionChanged(element); + openExternalWSDLAction.run(); + return; + } + } + + openAction.selectionChanged(element); + openAction.run(); + + } + }; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.activities.IActivityManagerListener#activityManagerChanged(org.eclipse.ui.activities.ActivityManagerEvent) + */ + public void activityManagerChanged(ActivityManagerEvent activityManagerEvent) { + WebServicesNavigatorContentProvider provider = (WebServicesNavigatorContentProvider) getContentProvider(); + boolean webServicesEnabled = NavigatorActivityHelper.isActivityEnabled(this); + Object[] obj = new Object[]{provider.getNavigatorGroup()}; + if (webServicesEnabled) { + Object root = ResourcesPlugin.getWorkspace().getRoot(); + getExtensionSite().notifyElementsAdded(this, root, obj); + } else { + getExtensionSite().notifyElementsRemoved(this, obj); + } + } +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceNavigatorGroup.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceNavigatorGroup.java new file mode 100644 index 0000000..94eb7a1 --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceNavigatorGroup.java
@@ -0,0 +1,63 @@ +/******************************************************************************* + * 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 Jan 20, 2004 + * + * To change the template for this generated file go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +package org.eclipse.jst.internal.webservice; + +import org.eclipse.core.internal.resources.WorkspaceRoot; + + +/** + * @author jlanuti + * + * To change the template for this generated type comment go to Window - Preferences - Java - Code + * Generation - Code and Comments + */ +public class WebServiceNavigatorGroup { + + private String label = WebServiceUIResourceHandler.getString("WebServiceNavigatorGroup_UI_0"); //$NON-NLS-1$ + private WorkspaceRoot root; + + /** + * Default constructor + */ + public WebServiceNavigatorGroup(WorkspaceRoot wsRoot) { + super(); + root = wsRoot; + } + + /** + * @see java.lang.Object#toString() + */ + public String toString() { + return label; + } + + /** + * @return Returns the root. + */ + public WorkspaceRoot getRoot() { + return root; + } + + /** + * @param root + * The root to set. + */ + public void setRoot(WorkspaceRoot root) { + this.root = root; + } + +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceNavigatorGroupType.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceNavigatorGroupType.java new file mode 100644 index 0000000..73eb9d0 --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceNavigatorGroupType.java
@@ -0,0 +1,133 @@ +/******************************************************************************* + * 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 25, 2004 + * + * To change the template for this generated file go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +package org.eclipse.jst.internal.webservice; + +import org.eclipse.jst.j2ee.webservice.wsclient.ServiceRef; +import org.eclipse.ui.IActionFilter; +import org.eclipse.wst.wsdl.Service; + +/** + * @author jlanuti + * + * To change the template for this generated type comment go to Window - Preferences - Java - Code + * Generation - Code and Comments + */ +public class WebServiceNavigatorGroupType implements IActionFilter { + + public static final int SERVICES = 0; + public static final int CLIENTS = 2; + public static final int HANDLERS = 3; + + public static final String SERVICES_UI = WebServiceUIResourceHandler.getString("WebServiceNavigatorGroupType_UI_0"); //$NON-NLS-1$ + public static final String CLIENTS_UI = WebServiceUIResourceHandler.getString("WebServiceNavigatorGroupType_UI_1"); //$NON-NLS-1$ + public static final String HANDLERS_UI = WebServiceUIResourceHandler.getString("WebServiceNavigatorGroupType_UI_2"); //$NON-NLS-1$ + + private int TYPE; + private Service wsdlService = null; + private ServiceRef serviceRef = null; + + /** + * Create a specific type of web service navigator grouping + */ + public WebServiceNavigatorGroupType(int groupType) { + super(); + TYPE = groupType; + } + + /** + * Create a specific type of web service navigator grouping + */ + public WebServiceNavigatorGroupType(int groupType, Service wsdlService) { + super(); + TYPE = groupType; + this.wsdlService = wsdlService; + } + + /** + * Create a specific type of web service navigator grouping + */ + public WebServiceNavigatorGroupType(int groupType, ServiceRef serviceRef) { + super(); + TYPE = groupType; + this.serviceRef = serviceRef; + } + + /** + * @return Returns the TYPE. + */ + public int getGroupType() { + return TYPE; + } + + public boolean isServices() { + return getGroupType() == SERVICES; + } + + public boolean isClients() { + return getGroupType() == CLIENTS; + } + + public boolean isHandlers() { + return getGroupType() == HANDLERS; + } + + public Service getWsdlService() { + return wsdlService; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + public String toString() { + if (isServices()) + return SERVICES_UI; + else if (isClients()) + return CLIENTS_UI; + else if (isHandlers()) + return HANDLERS_UI; + else + return super.toString(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IActionFilter#testAttribute(java.lang.Object, java.lang.String, + * java.lang.String) + */ + public boolean testAttribute(Object target, String name, String value) { + if (target != null && target instanceof WebServiceNavigatorGroupType && value != null) { + WebServiceNavigatorGroupType group = (WebServiceNavigatorGroupType) target; + if (group.isClients() && value.equals(CLIENTS_UI)) + return true; + else if (group.isServices() && value.equals(SERVICES_UI)) + return true; + else if (group.isHandlers() && value.equals(HANDLERS_UI)) + return true; + } + return false; + } + + /** + * @return Returns the serviceRef. + */ + public ServiceRef getServiceRef() { + return serviceRef; + } +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceUIResourceHandler.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceUIResourceHandler.java new file mode 100644 index 0000000..bafd32b --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServiceUIResourceHandler.java
@@ -0,0 +1,65 @@ +/******************************************************************************* + * 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 27, 2004 + * + * To change the template for this generated file go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +package org.eclipse.jst.internal.webservice; + +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +/** + * @author jialin + * + * To change the template for this generated type comment go to Window - Preferences - Java - Code + * Generation - Code and Comments + */ +public class WebServiceUIResourceHandler { + + private static ResourceBundle fgResourceBundle; + + /** + * Returns the resource bundle used by all classes in this Project + */ + public static ResourceBundle getResourceBundle() { + try { + return ResourceBundle.getBundle("webserviceui");//$NON-NLS-1$ + } catch (MissingResourceException e) { + // does nothing - this method will return null and + // getString(String, String) will return the key + // it was called with + } + return null; + } + + public static String getString(String key) { + if (fgResourceBundle == null) { + fgResourceBundle = getResourceBundle(); + } + + if (fgResourceBundle != null) { + try { + return fgResourceBundle.getString(key); + } catch (MissingResourceException e) { + return "!" + key + "!";//$NON-NLS-2$//$NON-NLS-1$ + } + } + return "!" + key + "!";//$NON-NLS-2$//$NON-NLS-1$ + } + + public static void nlsConcatenationFinder() { + // used to tag methods which have concatenated strings + } + +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServicesNavigatorContentProvider.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServicesNavigatorContentProvider.java new file mode 100644 index 0000000..c8ac851 --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServicesNavigatorContentProvider.java
@@ -0,0 +1,247 @@ +/******************************************************************************* + * 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 Jan 19, 2004 + * + * To change the template for this generated file go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +package org.eclipse.jst.internal.webservice; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; + +import org.eclipse.core.internal.resources.WorkspaceRoot; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jst.common.navigator.internal.providers.CommonAdapterFactoryContentProvider; +import org.eclipse.jst.j2ee.internal.webservices.WebServicesManager; +import org.eclipse.jst.j2ee.webservice.wsclient.ServiceRef; +import org.eclipse.jst.j2ee.webservice.wsdd.Handler; +import org.eclipse.jst.j2ee.webservice.wsdd.PortComponent; +import org.eclipse.wst.common.navigator.internal.views.extensions.NavigatorActivityHelper; +import org.eclipse.wst.common.navigator.views.INavigatorContentExtension; +import org.eclipse.wst.common.navigator.views.INavigatorContentProvider; +import org.eclipse.wst.wsdl.Service; +import org.eclipse.wst.wsdl.internal.util.WSDLResourceImpl; + +/** + * @author jlanuti + * + * To change the template for this generated type comment go to Window - Preferences - Java - Code + * Generation - Code and Comments + */ +public class WebServicesNavigatorContentProvider extends CommonAdapterFactoryContentProvider implements INavigatorContentProvider { + + private WebServicesManager webServicesManager = null; + private boolean activityEnabled = false; + private WebServiceNavigatorGroup webServiceNavigatorGroup; + private WebServiceNavigatorGroupType SERVICES = null; + private WebServiceNavigatorGroupType CLIENTS = null; + private HashMap HANDLERS = new HashMap(); + + public WebServicesNavigatorContentProvider(AdapterFactory factory, INavigatorContentExtension containingExtension) { + super(factory, containingExtension); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.navigator.internal.views.navigator.INavigatorContentProvider#getChildren(java.lang.Object) + */ + public Object[] getChildren(Object parentElement) { + if (!NavigatorActivityHelper.isActivityEnabled(getContainingExtension())) { + activityEnabled = false; + return super.getChildren(parentElement); + } + activityEnabled = true; + + if (parentElement instanceof WorkspaceRoot) { + return new Object[]{getWebServicesNavigatorGroup(parentElement)}; + } else if (parentElement instanceof WebServiceNavigatorGroup) { + return new Object[]{getServicesGroup(), getClientsGroup()}; + } else if (parentElement instanceof WebServiceNavigatorGroupType && ((WebServiceNavigatorGroupType) parentElement).isServices()) { + List result = new ArrayList(); + result.addAll(getWebServicesManager().getInternalWSDLServices()); + result.addAll(getWebServicesManager().getExternalWSDLServices()); + return result.toArray(); + } else if (parentElement instanceof WebServiceNavigatorGroupType && ((WebServiceNavigatorGroupType) parentElement).isClients()) { + return getWebServicesManager().getAllWorkspaceServiceRefs().toArray(); + } else if (parentElement instanceof Service) { + return getServiceLevelNodes(parentElement).toArray(); + } else if (parentElement instanceof WebServiceNavigatorGroupType && ((WebServiceNavigatorGroupType) parentElement).isHandlers()) { + return getHandlerChildren(parentElement).toArray(); + } else if (parentElement instanceof ServiceRef) { + Collection result = new ArrayList(); + result.add(getHandlersGroup(parentElement)); + return result.toArray(); + } else if (parentElement instanceof Handler) { + return new ArrayList().toArray(); + } else if (parentElement instanceof WSDLResourceImpl) + return new ArrayList().toArray(); + else + return super.getChildren(parentElement); + } + + private List getServiceLevelNodes(Object parentElement) { + List result = new ArrayList(); + // add service classes + if (getWebServicesManager().isServiceInternal((Service) parentElement) && getWebServicesManager().getServiceImplBean((Service) parentElement) != null) + result.add(getWebServicesManager().getServiceImplBean((Service) parentElement)); + // Add handlers + if (getWebServicesManager().isServiceInternal((Service) parentElement)) + result.add(getHandlersGroup(parentElement)); + //add wsdl file + WSDLResourceImpl wsdl = getWebServicesManager().getWSDLResource((Service) parentElement); + if (wsdl != null) + result.add(wsdl); + return result; + } + + private List getHandlerChildren(Object parentElement) { + List result = new ArrayList(); + WebServiceNavigatorGroupType handlersGroup = (WebServiceNavigatorGroupType) parentElement; + // handle web service handlers case + if (handlersGroup.getWsdlService() != null) { + PortComponent port = WebServicesManager.getInstance().getPortComponent(handlersGroup.getWsdlService()); + if (port != null && port.getHandlers() != null && !port.getHandlers().isEmpty()) + result.addAll(port.getHandlers()); + } + // handle service ref case + else if (handlersGroup.getServiceRef() != null) { + result.addAll(handlersGroup.getServiceRef().getHandlers()); + } + return result; + } + + /** + * @param parentElement + * @return + */ + protected WebServiceNavigatorGroup getWebServicesNavigatorGroup(Object parentElement) { + if (webServiceNavigatorGroup == null) + webServiceNavigatorGroup = new WebServiceNavigatorGroup((WorkspaceRoot) parentElement); + return webServiceNavigatorGroup; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.navigator.internal.views.navigator.INavigatorContentProvider#getParent(java.lang.Object) + */ + public Object getParent(Object element) { + if (element instanceof WorkspaceRoot) + return null; + else if (element instanceof WebServiceNavigatorGroup) + return ((WebServiceNavigatorGroup) element).getRoot(); + else + return super.getParent(element); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.navigator.internal.views.navigator.INavigatorContentProvider#hasChildren(java.lang.Object) + */ + public boolean hasChildren(Object element) { + // always returning true should prevent children from being calculated til expanded + + // if (element instanceof EJBLink || element instanceof ServletLink || element instanceof + // WSDLPort + // || element instanceof String || element instanceof WSDLResourceImpl || element instanceof + // ServiceRef + // || element instanceof Handler) + // return false; + return true; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.navigator.internal.views.navigator.INavigatorContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, + * java.lang.Object, java.lang.Object) + */ + public void inputChanged(Viewer aViewer, Object oldInput, Object newInput) { + // TODO handle change events + + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.viewers.IContentProvider#dispose() + */ + public void dispose() { + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) + */ + public Object[] getElements(Object inputElement) { + return getChildren(inputElement); + } + + /** + * @return Returns the navigatorGroup. + */ + public WebServiceNavigatorGroup getNavigatorGroup() { + if (null == webServiceNavigatorGroup) { + webServiceNavigatorGroup = new WebServiceNavigatorGroup((WorkspaceRoot) ResourcesPlugin.getWorkspace().getRoot()); + } + return webServiceNavigatorGroup; + } + + protected WebServicesManager getWebServicesManager() { + if (webServicesManager == null) + webServicesManager = WebServicesManager.getInstance(); + return webServicesManager; + } + + /** + * @return Returns the activityEnabled. + */ + public boolean isActivityEnabled() { + return activityEnabled; + } + + private WebServiceNavigatorGroupType getServicesGroup() { + if (SERVICES == null) + SERVICES = new WebServiceNavigatorGroupType(WebServiceNavigatorGroupType.SERVICES); + return SERVICES; + } + + private WebServiceNavigatorGroupType getClientsGroup() { + if (CLIENTS == null) + CLIENTS = new WebServiceNavigatorGroupType(WebServiceNavigatorGroupType.CLIENTS); + return CLIENTS; + } + + private WebServiceNavigatorGroupType getHandlersGroup(Object key) { + if (key == null) + return null; + WebServiceNavigatorGroupType handler = null; + handler = (WebServiceNavigatorGroupType) HANDLERS.get(key); + if (handler == null) { + if (key instanceof Service) + handler = new WebServiceNavigatorGroupType(WebServiceNavigatorGroupType.HANDLERS, (Service) key); + else if (key instanceof ServiceRef) + handler = new WebServiceNavigatorGroupType(WebServiceNavigatorGroupType.HANDLERS, (ServiceRef) key); + if (handler != null) + HANDLERS.put(key, handler); + } + return handler; + } +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServicesNavigatorLabelProvider.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServicesNavigatorLabelProvider.java new file mode 100644 index 0000000..5a4043b --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServicesNavigatorLabelProvider.java
@@ -0,0 +1,177 @@ +/******************************************************************************* + * 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 Jan 19, 2004 + * + * To change the template for this generated file go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +package org.eclipse.jst.internal.webservice; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.ILabelProviderListener; +import org.eclipse.jst.j2ee.ejb.Session; +import org.eclipse.jst.j2ee.internal.plugin.J2EEUIPlugin; +import org.eclipse.jst.j2ee.internal.webservices.WebServicesManager; +import org.eclipse.jst.j2ee.webservice.wsclient.ServiceRef; +import org.eclipse.jst.j2ee.webservice.wsdd.EJBLink; +import org.eclipse.jst.j2ee.webservice.wsdd.Handler; +import org.eclipse.jst.j2ee.webservice.wsdd.PortComponent; +import org.eclipse.jst.j2ee.webservice.wsdd.ServiceImplBean; +import org.eclipse.jst.j2ee.webservice.wsdd.ServletLink; +import org.eclipse.jst.j2ee.webservice.wsdd.WSDLPort; +import org.eclipse.jst.j2ee.webservice.wsdd.WebServiceDescription; +import org.eclipse.swt.graphics.Image; +import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper; +import org.eclipse.wst.wsdl.Service; +import org.eclipse.wst.wsdl.internal.util.WSDLResourceImpl; + +import com.ibm.wtp.emf.workbench.ProjectUtilities; + +/** + * @author jlanuti + * + * To change the template for this generated type comment go to Window - Preferences - Java - Code + * Generation - Code and Comments + */ +public class WebServicesNavigatorLabelProvider extends AdapterFactoryLabelProvider implements ILabelProvider { + + public WebServicesNavigatorLabelProvider(AdapterFactory factory) { + super(factory); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object) + */ + public Image getImage(Object element) { + if (element instanceof WebServiceNavigatorGroup) + return J2EEUIPlugin.getDefault().getImage("webServicesFolder_obj"); //$NON-NLS-1$ + else if (element instanceof String) + return J2EEUIPlugin.getDefault().getImage("wsdl"); //$NON-NLS-1$ + else if (element instanceof WebServiceNavigatorGroupType) + return J2EEUIPlugin.getDefault().getImage("folder"); //$NON-NLS-1$ + else if (element instanceof Service) { + if (WebServicesManager.getInstance().isServiceInternal((Service) element)) + return J2EEUIPlugin.getDefault().getImage("webServiceItemProvider_obj"); //$NON-NLS-1$ + return J2EEUIPlugin.getDefault().getImage("extwebserviceitemprovider_obj"); //$NON-NLS-1$ + } else if (element instanceof WSDLResourceImpl) + return J2EEUIPlugin.getDefault().getImage("wsdl"); //$NON-NLS-1$ + else + return super.getImage(element); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object) + */ + public String getText(Object element) { + String space = " "; //$NON-NLS-1$ + if (element instanceof WebServiceDescription) + return getWebServiceDescriptionText((WebServiceDescription) element); + else if (element instanceof PortComponent) + return WebServiceUIResourceHandler.getString("PORT_UI_") + space + super.getText(element); //$NON-NLS-1$ + else if (element instanceof Handler) + return WebServiceUIResourceHandler.getString("HANDLER_UI_") + space + super.getText(element); //$NON-NLS-1$ + else if (element instanceof WSDLPort) + return WebServiceUIResourceHandler.getString("WSDL_PORT_UI_") + space + super.getText(element); //$NON-NLS-1$ + else if (element instanceof ServiceImplBean) + return WebServiceUIResourceHandler.getString("SERVICE_CLASSES_UI_"); //$NON-NLS-1$ + else if (element instanceof EJBLink) + return WebServiceUIResourceHandler.getString("SERVICE_IMPL_UI_") + space + super.getText(element); //$NON-NLS-1$ + else if (element instanceof ServletLink) + return WebServiceUIResourceHandler.getString("SERVICE_IMPL_UI_") + space + super.getText(element); //$NON-NLS-1$ + else if (element instanceof Service) + return ((Service) element).getQName().getLocalPart(); + else if (element instanceof WSDLResourceImpl) { + String result = ""; //$NON-NLS-1$ + IFile file = WorkbenchResourceHelper.getFile((WSDLResourceImpl) element); + if (file != null && file.exists()) + result = file.getFullPath().toString(); + else + result = ((WSDLResourceImpl) element).getURI().toString(); + return WebServiceUIResourceHandler.getString("WSDL_UI_") + space + result; //$NON-NLS-1$ + } else if (element instanceof ServiceRef) { + String beanName14 = ""; //$NON-NLS-1$ + if (WebServicesManager.getInstance().isJ2EE14((ServiceRef) element)) { + if (((ServiceRef) element).eContainer() instanceof Session) + beanName14 = ((Session) ((ServiceRef) element).eContainer()).getName() + ": "; //$NON-NLS-1$ + } + + return ProjectUtilities.getProject((ServiceRef) element).getName() + ": " + beanName14 //$NON-NLS-1$ + + ((ServiceRef) element).getServiceRefName(); + } else + return super.getText(element); + } + + /** + * get text for web service + */ + private String getWebServiceDescriptionText(WebServiceDescription description) { + Resource res = description.eResource(); + IProject project = null; + String projString = ""; //$NON-NLS-1$ + if (res != null) + project = WorkbenchResourceHelper.getProject(res); + if (project != null) + projString = project.getName() + ": "; //$NON-NLS-1$ + return projString + super.getText(description); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener) + */ + public void addListener(ILabelProviderListener listener) { + // TODO add any listeners? + + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose() + */ + public void dispose() { + // TODO handle dispose + + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, + * java.lang.String) + */ + public boolean isLabelProperty(Object element, String property) { + // TODO do something smart here? + return false; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener) + */ + public void removeListener(ILabelProviderListener listener) { + // TODO how do we remove listeners? + + } + +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServicesNavigatorSynchronizer.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServicesNavigatorSynchronizer.java new file mode 100644 index 0000000..6043cd5 --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WebServicesNavigatorSynchronizer.java
@@ -0,0 +1,111 @@ +/******************************************************************************* + * 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 Jun 10, 2004 + */ +package org.eclipse.jst.internal.webservice; + +import org.eclipse.emf.common.notify.Adapter; +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.Notifier; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.jst.common.navigator.internal.providers.CommonAdapterFactoryContentProvider; +import org.eclipse.jst.j2ee.internal.webservices.WebServicesManager; +import org.eclipse.jst.j2ee.webservice.wsclient.ServiceRef; +import org.eclipse.jst.j2ee.webservice.wsdd.WebServiceDescription; +import org.eclipse.jst.j2ee.webservice.wsdd.WebServices; +import org.eclipse.wst.common.navigator.views.INavigatorContentExtension; +import org.eclipse.wst.common.navigator.views.INavigatorExtensionSite; +import org.eclipse.wst.wsdl.Service; + +/** + * @author jlanuti + */ +public class WebServicesNavigatorSynchronizer extends CommonAdapterFactoryContentProvider implements Adapter { + + + private static WebServicesNavigatorSynchronizer INSTANCE = null; + protected Notifier target = null; + + /** + * Constructor + */ + public WebServicesNavigatorSynchronizer(AdapterFactory adapterFactory, INavigatorContentExtension containingExtension) { + super(adapterFactory, containingExtension); + } + + public static WebServicesNavigatorSynchronizer getInstance() { + return INSTANCE; + } + + public static WebServicesNavigatorSynchronizer createInstance(AdapterFactory adapterFactory, INavigatorContentExtension containingExtension) { + INSTANCE = new WebServicesNavigatorSynchronizer(adapterFactory, containingExtension); + return INSTANCE; + } + + public static void disposeInstance() { + INSTANCE = null; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.emf.common.notify.Adapter#getTarget() + */ + public Notifier getTarget() { + return target; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.emf.common.notify.Adapter#isAdapterForType(java.lang.Object) + */ + public boolean isAdapterForType(Object type) { + return true; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.emf.common.notify.Adapter#setTarget(org.eclipse.emf.common.notify.Notifier) + */ + public void setTarget(Notifier newTarget) { + target = newTarget; + } + + public void notifyChanged(final Notification notification) { + INavigatorExtensionSite site = getContainingExtension().getExtensionSite(); + EObject notifier = (EObject) notification.getNotifier(); + + if (notifier instanceof WebServices) + return; + + if (notifier instanceof ServiceRef) { + site.notifyElementReplaced(getContainingExtension(), notifier); + return; + } + + while (!(notifier instanceof WebServiceDescription) && notifier != null) + notifier = notifier.eContainer(); + + if (notifier == null) { + site.notifyElementReplaced(getContainingExtension(), null); + return; + } + + Service wsdl = WebServicesManager.getInstance().getWSDLServiceForWebService((WebServiceDescription) notifier); + site.notifyElementReplaced(getContainingExtension(), wsdl); + + super.notifyChanged(notification); + } +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WsdlResourceAdapterFactory.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WsdlResourceAdapterFactory.java new file mode 100644 index 0000000..e04d88d --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/internal/webservice/WsdlResourceAdapterFactory.java
@@ -0,0 +1,59 @@ +/******************************************************************************* + * 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 Mar 5, 2004 + * + * To change the template for this generated file go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +package org.eclipse.jst.internal.webservice; + +import org.eclipse.wst.common.internal.emfworkbench.EMFAdapterFactory; +import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper; +import org.eclipse.wst.wsdl.internal.util.WSDLResourceImpl; + +import com.ibm.wtp.emf.workbench.ProjectUtilities; + +/** + * @author jlanuti + * + * To change the template for this generated type comment go to Window - Preferences - Java - Code + * Generation - Code and Comments + */ +public class WsdlResourceAdapterFactory extends EMFAdapterFactory { + + /** + * Default constructor + */ + public WsdlResourceAdapterFactory() { + super(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class) + */ + public Object getAdapter(Object adaptableObject, Class adapterType) { + WSDLResourceImpl res = null; + if (adaptableObject instanceof WSDLResourceImpl) + res = (WSDLResourceImpl) adaptableObject; + + if (res != null && adapterType == EMFAdapterFactory.IFILE_CLASS) + return WorkbenchResourceHelper.getFile(res) != null ? WorkbenchResourceHelper.getFile(res) : null; + else if (res != null && adapterType == EMFAdapterFactory.IRESOURCE_CLASS) + return WorkbenchResourceHelper.getFile(res); + else if (res != null && adapterType == EMFAdapterFactory.IPROJECT_CLASS) + return ProjectUtilities.getProject(res); + else + return super.getAdapter(adaptableObject, adapterType); + } +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/OpenJ2EEResourceAction.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/OpenJ2EEResourceAction.java index 0979f23..918242c 100644 --- a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/OpenJ2EEResourceAction.java +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/OpenJ2EEResourceAction.java
@@ -44,7 +44,9 @@ import org.eclipse.jst.j2ee.webservice.wsclient.WebServicesClient; import org.eclipse.jst.j2ee.webservice.wsdd.BeanLink; import org.eclipse.jst.j2ee.webservice.wsdd.EJBLink; +import org.eclipse.jst.j2ee.webservice.wsdd.Handler; import org.eclipse.jst.j2ee.webservice.wsdd.ServletLink; +import org.eclipse.jst.j2ee.webservice.wsdd.WebServices; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPage; @@ -53,6 +55,9 @@ import org.eclipse.ui.part.ISetSelectionTarget; import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper; import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel; +import org.eclipse.wst.wsdl.Definition; +import org.eclipse.wst.wsdl.Service; +import org.eclipse.wst.wsdl.internal.util.WSDLResourceImpl; import com.ibm.wtp.emf.workbench.ProjectUtilities; @@ -176,19 +181,17 @@ } // Handle wsdl case, non emf object - // TODO WebServices for M3 -// if (srcObject instanceof WSDLResourceImpl || isWsdlInstance(srcObject)) { -// openWsdlEditor(); -// return; -// } + if (srcObject instanceof WSDLResourceImpl || isWsdlInstance(srcObject)) { + openWsdlEditor(); + return; + } EObject ro = (EObject) srcObject; IProject p = ProjectUtilities.getProject(ro); J2EENature nature = J2EENature.getRegisteredRuntime(p); - // TODO WebServices for M3 -// if (ro instanceof Definition || ro instanceof Service || ro instanceof Handler) -// r = getWebService(p); else + if (ro instanceof Definition || ro instanceof Service || ro instanceof Handler) + r = getWebService(p); else if (ro instanceof BeanLink) { openBeanLinkInJavaEditor((BeanLink) ro, p); return; @@ -200,18 +203,17 @@ openAppropriateEditor(r); } - // TODO WebServices for M3 -// private void openWsdlEditor() { -// WSDLResourceImpl wsdl = null; -// if (srcObject instanceof WSDLResourceImpl) -// wsdl = (WSDLResourceImpl) srcObject; -// else if (srcObject instanceof Service) -// wsdl = (WSDLResourceImpl) ((Service) srcObject).eResource(); -// if (wsdl != null) { -// IResource r = WorkbenchResourceHelper.getFile(wsdl); -// openAppropriateEditor(r); -// } -// } + private void openWsdlEditor() { + WSDLResourceImpl wsdl = null; + if (srcObject instanceof WSDLResourceImpl) + wsdl = (WSDLResourceImpl) srcObject; + else if (srcObject instanceof Service) + wsdl = (WSDLResourceImpl) ((Service) srcObject).eResource(); + if (wsdl != null) { + IResource r = WorkbenchResourceHelper.getFile(wsdl); + openAppropriateEditor(r); + } + } /** * Get file from the J2EE EditModel for root object @@ -341,11 +343,10 @@ // currentDescriptor = getEjbMapEditorDescriptor(); else if (obj instanceof BeanLink) currentDescriptor = getBaseJavaEditorDescriptor(); - // TODO WebServices for M3 -// else if (isWsdlInstance(obj)) -// currentDescriptor = getWsdlDescriptor(); -// else if (isWebserviceInstance(obj)) -// currentDescriptor = getWebServiceDescriptor(); + else if (isWsdlInstance(obj)) + currentDescriptor = getWsdlDescriptor(); + else if (isWebserviceInstance(obj)) + currentDescriptor = getWebServiceDescriptor(); else { currentDescriptor = null; return false; @@ -393,19 +394,17 @@ * @param Object * obj - The object to check instanceof. */ - // TODO WebServices for M3 -// protected boolean isWebserviceInstance(Object obj) { -// EObject root = getRootObject(obj); -// return (root instanceof Definition || root instanceof WebServices); -// } + protected boolean isWebserviceInstance(Object obj) { + EObject root = getRootObject(obj); + return (root instanceof Definition || root instanceof WebServices); + } - // TODO WebServices for M3 -// protected boolean isWsdlInstance(Object obj) { -// EObject root = getRootObject(obj); -// IProject p = ProjectUtilities.getProject(root); -// Object ws = getWebService(p); -// return (obj instanceof WSDLResourceImpl) || (root instanceof Definition && ws == null); -// } + protected boolean isWsdlInstance(Object obj) { + EObject root = getRootObject(obj); + IProject p = ProjectUtilities.getProject(root); + Object ws = getWebService(p); + return (obj instanceof WSDLResourceImpl) || (root instanceof Definition && ws == null); + } protected boolean is13ServiceRefForNature(String natureId, EObject root) { try {
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/war/ui/util/J2EEWebAppItemProvider.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/war/ui/util/J2EEWebAppItemProvider.java index c2d83d3..3b89e57 100644 --- a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/war/ui/util/J2EEWebAppItemProvider.java +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/war/ui/util/J2EEWebAppItemProvider.java
@@ -23,9 +23,18 @@ import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationWrapper; +import org.eclipse.emf.common.notify.impl.AdapterImpl; import org.eclipse.jst.j2ee.internal.web.providers.WebAppItemProvider; +import org.eclipse.jst.j2ee.internal.webservices.WebServiceEditModel; +import org.eclipse.jst.j2ee.internal.webservices.WebServicesManager; import org.eclipse.jst.j2ee.webapplication.WebApp; import org.eclipse.jst.j2ee.webapplication.WebapplicationPackage; +import org.eclipse.jst.j2ee.webservice.wsclient.WebServicesClient; +import org.eclipse.jst.j2ee.webservice.wsclient.Webservice_clientPackage; +import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelEvent; +import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelListener; + +import com.ibm.wtp.emf.workbench.ProjectUtilities; /** * @author jlanuti @@ -42,77 +51,75 @@ private WebFilterMappingGroupItemProvider webFilterMappingGroup; private WebReferencesGroupItemProvider webRefsGroup; private WebSecurityGroupItemProvider webSecurityGroup; - // TODO WebServices for M3 -// private J2EEWebServiceClientDDManager clientMgr; + private J2EEWebServiceClientDDManager clientMgr; private WebListenerGroupItemProvider webListenerGroup; /** * Listen and fire updates for 1.3 web service clients */ - // TODO WebServices for M3 -// private class J2EEWebServiceClientDDManager extends AdapterImpl implements EditModelListener { -// private WebApp webApp; -// private WebServicesManager webServiceMgr = WebServicesManager.getInstance(); -// WebServiceEditModel editModel; -// WebServicesClient client; -// -// public J2EEWebServiceClientDDManager(WebApp webApp) { -// this.webApp = webApp; -// init(); -// } -// -// public void setWebApp(WebApp webApp) { -// this.webApp = webApp; -// } -// -// public void init() { -// editModel = webServiceMgr.getWSEditModel(ProjectUtilities.getProject(webApp)); -// if (editModel != null) { -// editModel.addListener(this); -// if (editModel.get13WebServicesClientResource() != null) { -// client = editModel.get13WebServicesClientResource().getWebServicesClient(); -// if (client != null) -// client.eAdapters().add(this); -// } -// } -// } -// -// /* -// * (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 (editModel == null) -// init(); -// } -// -// /* -// * (non-Javadoc) -// * -// * @see org.eclipse.emf.common.notify.Adapter#notifyChanged(org.eclipse.emf.common.notify.Notification) -// */ -// public void notifyChanged(Notification notification) { -// if (notification.getEventType() == Notification.ADD || notification.getEventType() == Notification.ADD_MANY || notification.getEventType() == Notification.REMOVE || notification.getEventType() == Notification.REMOVE_MANY) { -// if (notification.getFeatureID(WebServicesClient.class) == Webservice_clientPackage.WEB_SERVICES_CLIENT__SERVICE_REFS) { -// NotificationWrapper notificationWrapper = new NotificationWrapper(webRefsGroup, notification); -// fireNotifyChanged(notificationWrapper); -// } -// } -// super.notifyChanged(notification); -// } -// -// public void dispose() { -// if (editModel != null) { -// editModel.removeListener(this); -// if (editModel.get13WebServicesClientResource() != null) { -// client = editModel.get13WebServicesClientResource().getWebServicesClient(); -// if (client != null) -// client.eAdapters().remove(this); -// } -// } -// } -// } + private class J2EEWebServiceClientDDManager extends AdapterImpl implements EditModelListener { + private WebApp webApp; + private WebServicesManager webServiceMgr = WebServicesManager.getInstance(); + WebServiceEditModel editModel; + WebServicesClient client; + + public J2EEWebServiceClientDDManager(WebApp webApp) { + this.webApp = webApp; + init(); + } + + public void setWebApp(WebApp webApp) { + this.webApp = webApp; + } + + public void init() { + editModel = webServiceMgr.getWSEditModel(ProjectUtilities.getProject(webApp)); + if (editModel != null) { + editModel.addListener(this); + if (editModel.get13WebServicesClientResource() != null) { + client = editModel.get13WebServicesClientResource().getWebServicesClient(); + if (client != null) + client.eAdapters().add(this); + } + } + } + + /* + * (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 (editModel == null) + init(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.emf.common.notify.Adapter#notifyChanged(org.eclipse.emf.common.notify.Notification) + */ + public void notifyChanged(Notification notification) { + if (notification.getEventType() == Notification.ADD || notification.getEventType() == Notification.ADD_MANY || notification.getEventType() == Notification.REMOVE || notification.getEventType() == Notification.REMOVE_MANY) { + if (notification.getFeatureID(WebServicesClient.class) == Webservice_clientPackage.WEB_SERVICES_CLIENT__SERVICE_REFS) { + NotificationWrapper notificationWrapper = new NotificationWrapper(webRefsGroup, notification); + fireNotifyChanged(notificationWrapper); + } + } + super.notifyChanged(notification); + } + + public void dispose() { + if (editModel != null) { + editModel.removeListener(this); + if (editModel.get13WebServicesClientResource() != null) { + client = editModel.get13WebServicesClientResource().getWebServicesClient(); + if (client != null) + client.eAdapters().remove(this); + } + } + } + } /** * Default constructor @@ -125,9 +132,8 @@ * initilaize list of children */ private void initChildren(WebApp webApp) { - // TODO WebServices for M3 -// if (clientMgr == null) -// clientMgr = new J2EEWebServiceClientDDManager(webApp); + if (clientMgr == null) + clientMgr = new J2EEWebServiceClientDDManager(webApp); children.add(webServletGroup = new WebServletGroupItemProvider(adapterFactory, webApp)); children.add(webServletMappingGroup = new WebServletMappingGroupItemProvider(adapterFactory, webApp)); children.add(webFiltersGroup = new WebFiltersGroupItemProvider(adapterFactory, webApp)); @@ -162,9 +168,8 @@ provider.setWebApp(app); } } - // TODO WebServices for M3 -// if (clientMgr != null) -// clientMgr.setWebApp(app); + if (clientMgr != null) + clientMgr.setWebApp(app); } /* @@ -228,9 +233,8 @@ * @see org.eclipse.emf.edit.provider.IDisposable#dispose() */ public void dispose() { - // TODO WebServices for M3 -// if (clientMgr != null) -// clientMgr.dispose(); + if (clientMgr != null) + clientMgr.dispose(); super.dispose(); } } \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/war/ui/util/WebReferencesGroupItemProvider.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/war/ui/util/WebReferencesGroupItemProvider.java index 9ab09e6..5347332 100644 --- a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/war/ui/util/WebReferencesGroupItemProvider.java +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/war/ui/util/WebReferencesGroupItemProvider.java
@@ -18,11 +18,13 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin; import org.eclipse.jst.j2ee.internal.web.providers.WebAppEditResourceHandler; +import org.eclipse.jst.j2ee.internal.webservices.WebServicesManager; import org.eclipse.jst.j2ee.webapplication.WebApp; /** @@ -67,16 +69,15 @@ if (!webApp.getMessageDestinationRefs().isEmpty()) result.addAll(webApp.getMessageDestinationRefs()); - // TODO WebServices for M3 -// Collection serviceRefs = null; -// try { -// serviceRefs = WebServicesManager.getInstance().getServiceRefs(webApp); -// } catch (RuntimeException re) { -// serviceRefs = Collections.EMPTY_LIST; -// } -// -// if (!serviceRefs.isEmpty()) -// result.addAll(serviceRefs); + Collection serviceRefs = null; + try { + serviceRefs = WebServicesManager.getInstance().getServiceRefs(webApp); + } catch (RuntimeException re) { + serviceRefs = Collections.EMPTY_LIST; + } + + if (!serviceRefs.isEmpty()) + result.addAll(serviceRefs); return result; }
diff --git a/plugins/org.eclipse.jst.j2ee.ui/plugin.xml b/plugins/org.eclipse.jst.j2ee.ui/plugin.xml index ed13739..481387a 100644 --- a/plugins/org.eclipse.jst.j2ee.ui/plugin.xml +++ b/plugins/org.eclipse.jst.j2ee.ui/plugin.xml
@@ -47,6 +47,7 @@ <import plugin="org.eclipse.jst.common.navigator.java"/> <import plugin="org.eclipse.wst.web"/> <import plugin="org.eclipse.wst.common.navigator.workbench"/> + <import plugin="org.eclipse.wst.wsdl"/> </requires> @@ -336,8 +337,7 @@ </view> </adapterFactory> </extension> - -<!-- TODO WebServices for M3 + <extension point="org.eclipse.wst.common.navigator.views.navigatorContent"> <navigatorContent @@ -359,18 +359,16 @@ </enables> </navigatorContent> </extension> - --> <!-- J2EE View Web Services contribution --> - <!-- TODO WebServices for M3 --> -<!-- <extension + <extension point="org.eclipse.wst.common.navigator.views.navigatorViewer"> <navigatorViewer - rootContentExtensionId="org.eclipse.wst.common.frameworks.navigator.webservice" - viewerId="com.ibm.wtp.ui.ProjectNavigator"> + rootContentExtensionId="org.eclipse.wst.common.frameworks.internal.navigator.webservice" + viewerId="org.eclipse.wst.navigator.ui.WTPCommonNavigator"> </navigatorViewer> </extension> - --> + <!-- Navigator Object Contributions --> <!-- EAR Group Contributions --> <extension
diff --git a/plugins/org.eclipse.jst.j2ee.web/webedit/org/eclipse/jst/j2ee/internal/web/providers/WebAppItemProvider.java b/plugins/org.eclipse.jst.j2ee.web/webedit/org/eclipse/jst/j2ee/internal/web/providers/WebAppItemProvider.java index c2a257e..5c3cd07 100644 --- a/plugins/org.eclipse.jst.j2ee.web/webedit/org/eclipse/jst/j2ee/internal/web/providers/WebAppItemProvider.java +++ b/plugins/org.eclipse.jst.j2ee.web/webedit/org/eclipse/jst/j2ee/internal/web/providers/WebAppItemProvider.java
@@ -33,6 +33,7 @@ import org.eclipse.jst.j2ee.internal.J2EEVersionConstants; import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin; import org.eclipse.jst.j2ee.internal.web.plugin.WebPlugin; +import org.eclipse.jst.j2ee.internal.webservices.WebServicesManager; import org.eclipse.jst.j2ee.jsp.JspFactory; import org.eclipse.jst.j2ee.webapplication.ContextParam; import org.eclipse.jst.j2ee.webapplication.WebApp; @@ -72,9 +73,8 @@ public Collection getChildren(Object object) { WebApp webApp = (WebApp) object; Collection myChildren = super.getChildren(object); - // TODO WebServices for M3 - //if (webApp.getVersionID() <= J2EEVersionConstants.WEB_2_3_ID) - // myChildren.addAll(WebServicesManager.getInstance().get13ServiceRefs(webApp)); + if (webApp.getVersionID() <= J2EEVersionConstants.WEB_2_3_ID) + myChildren.addAll(WebServicesManager.getInstance().get13ServiceRefs(webApp)); return myChildren; }
diff --git a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WTProjectLoadStrategyImpl.java b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WTProjectLoadStrategyImpl.java index 060edcc..12a5242 100644 --- a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WTProjectLoadStrategyImpl.java +++ b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WTProjectLoadStrategyImpl.java
@@ -37,13 +37,11 @@ import org.eclipse.wst.web.internal.operation.IBaseWebNature; import org.eclipse.wst.web.internal.operation.ILibModule; -import com.ibm.wtp.emf.workbench.ProjectUtilities; import com.ibm.wtp.emf.workbench.WorkbenchURIConverter; import com.ibm.wtp.emf.workbench.WorkbenchURIConverterImpl; public class WTProjectLoadStrategyImpl extends org.eclipse.jst.j2ee.internal.archive.operations.J2EELoadStrategyImpl { private final static String SOURCE_DIR = "source"; //$NON-NLS-1$ - private final static String CLASSES_DIR = "classes"; //$NON-NLS-1$ public static final String WEBSETTINGS_FILE_URI = ".j2ee"; //$NON-NLS-1$ @@ -92,70 +90,93 @@ * @see com.ibm.etools.archive.LoadStrategy */ public java.util.List getFiles() { + filesList.clear(); + try { // Determine if loose libs exist and set flag for meta files - if (areLooseLibJarsIncluded()) { + if (areLooseLibJarsIncluded()) setIncludeProjectMetaFiles(true); - } + // First go through all of the files under the webApplication // directory, omitting the ones that are imported classes jars. - List webAppFiles = new ArrayList(Arrays.asList(getModuleContainer().members())); - if (shouldIncludeProjectMetaFiles()) { - webAppFiles.add(getProject().getFile(PROJECT_FILE_URI)); - webAppFiles.add(getProject().getFile(CLASSPATH_FILE_URI)); - webAppFiles.add(getProject().getFile(WEBSETTINGS_FILE_URI)); - } - IContainer outputContainer = ProjectUtilities.getJavaProjectOutputContainer(getProject()); - webAppFiles.addAll(Arrays.asList(outputContainer.members())); + List webAppFiles = null; // if the user has chosen not to export compiled JSP files, then we need to make sure // that // the compiled class files are excluded from the /WEB-INF/classes directory if (isExcludeCompiledJspFiles()) { + webAppFiles = new ArrayList(Arrays.asList(getModuleContainer().members())); + try { - // IBaseWebNature wnr = J2EEWebNatureRuntimeUtilities.getRuntime(project); - IPath outputPath = outputContainer.getProjectRelativePath(); - // if (wnr != null) { - // IPath modulePath = wnr.getWebModulePath(); - // IPath outputPath = - // J2EEWebNatureRuntimeUtilities.getWebOutputFolderPath(modulePath.toString()); - // remove the WEB-INF folder from the list... we will get files from that - // directory - // after all others, in order to calculate which output files may exist, - // according - // to the JSPs in all other directories - // IPath webInf = modulePath.append(IWebNatureConstants.INFO_DIRECTORY); - // IResource outputDirResource = null; - // int len = webAppFiles.size(); - // boolean found = false; - // for (int i = 0; !found && i < len; i++) { - // IResource res = (IResource) webAppFiles.get(i); - // if (res.getFullPath().equals(outputPath)) { - // outputDirResource = (IResource) webAppFiles.remove(i); - // found = true; - // } - // } - // collect all the files (excluding those in /WEB-INF) and mark all of the - // JSPs' compiled files (.class,.java) to be excluded from the - webAppFiles = getFilesExcludeCompiledJsps(webAppFiles, outputPath); - // now collect the files from the /WEB-INF directory. All of the compiled - // JSP - // output files should not be picked up now, as they were placed into the - // visitedURIs - // list - ArrayList webInfList = new ArrayList(1); - webInfList.add(outputContainer); - webInfList = getFiles(webInfList); - webAppFiles.addAll(webInfList); - // } else { - // webAppFiles = getFiles(webAppFiles); - // } + IBaseWebNature wnr = J2EEWebNatureRuntimeUtilities.getRuntime(project); + if (wnr != null) { + + IPath modulePath = wnr.getWebModulePath(); + IPath outputPath = J2EEWebNatureRuntimeUtilities.getWebOutputFolderPath(modulePath.toString()); + + // remove the WEB-INF folder from the list... we will get files from that + // directory + // after all others, in order to calculate which output files may exist, + // according + // to the JSPs in all other directories + IPath webInf = modulePath.append(IWebNatureConstants.INFO_DIRECTORY); + IResource outputDirResource = null; + int len = webAppFiles.size(); + boolean found = false; + for (int i = 0; !found && i < len; i++) { + IResource res = (IResource) webAppFiles.get(i); + if (res.getFullPath().equals(webInf)) { + outputDirResource = (IResource) webAppFiles.remove(i); + found = true; + } + } + + if (shouldIncludeProjectMetaFiles()) { + webAppFiles.add(getProject().getFile(PROJECT_FILE_URI)); + webAppFiles.add(getProject().getFile(CLASSPATH_FILE_URI)); + webAppFiles.add(getProject().getFile(WEBSETTINGS_FILE_URI)); + } + + // collect all the files (excluding those in /WEB-INF) and mark all of the + // JSPs' compiled files (.class,.java) to be excluded from the + webAppFiles = getFilesExcludeCompiledJsps(webAppFiles, outputPath); + + // now collect the files from the /WEB-INF directory. All of the compiled + // JSP + // output files should not be picked up now, as they were placed into the + // visitedURIs + // list + ArrayList webInfList = new ArrayList(1); + webInfList.add(outputDirResource); + webInfList = getFiles(webInfList); + webAppFiles.addAll(webInfList); + } else { + webAppFiles = new ArrayList(Arrays.asList(getModuleContainer().members())); + + if (shouldIncludeProjectMetaFiles()) { + webAppFiles.add(getProject().getFile(PROJECT_FILE_URI)); + webAppFiles.add(getProject().getFile(CLASSPATH_FILE_URI)); + webAppFiles.add(getProject().getFile(WEBSETTINGS_FILE_URI)); + } + webAppFiles = getFiles(webAppFiles); + } + } catch (Exception e) { throw new ArchiveRuntimeException(e.getMessage(), e); } + } else { + webAppFiles = new ArrayList(Arrays.asList(getModuleContainer().members())); + + if (shouldIncludeProjectMetaFiles()) { + webAppFiles.add(getProject().getFile(PROJECT_FILE_URI)); + webAppFiles.add(getProject().getFile(CLASSPATH_FILE_URI)); + webAppFiles.add(getProject().getFile(WEBSETTINGS_FILE_URI)); + } + //HashSet addedURIs = new HashSet(); webAppFiles = getFiles(webAppFiles); + } HashSet addedURIs = new HashSet(); @@ -449,14 +470,6 @@ } } - // If this is in an output folder, stick it in 'WEB-INF/classes - IPath outputPath = ProjectUtilities.getJavaProjectOutputContainer(getProject()).getProjectRelativePath(); - if (aPath.segmentCount() > outputPath.segmentCount() && aPath.removeLastSegments(aPath.segmentCount() - outputPath.segmentCount()).equals(outputPath)) { - IPath retPath = new Path(J2EEConstants.WEB_INF); - retPath = retPath.append(CLASSES_DIR); - return retPath.append(aPath.removeFirstSegments(outputPath.segmentCount())); - } - return aPath; }
diff --git a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/operations/J2EEWebNatureRuntime.java b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/operations/J2EEWebNatureRuntime.java index ba6ad4f..710f89f 100644 --- a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/operations/J2EEWebNatureRuntime.java +++ b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/operations/J2EEWebNatureRuntime.java
@@ -7,6 +7,7 @@ */ import java.io.ByteArrayInputStream; import java.io.InputStream; +import java.util.Map; import org.eclipse.core.resources.ICommand; import org.eclipse.core.resources.IContainer; @@ -41,6 +42,7 @@ import org.eclipse.jst.j2ee.internal.project.J2EEModuleNature; import org.eclipse.jst.j2ee.internal.web.archive.operations.WTProjectLoadStrategyImpl; import org.eclipse.jst.j2ee.internal.web.plugin.WebPlugin; +import org.eclipse.jst.j2ee.internal.webservices.WebServiceEditModel; import org.eclipse.jst.j2ee.web.taglib.ITaglibRegistry; import org.eclipse.jst.j2ee.webapplication.WebApp; import org.eclipse.jst.j2ee.webapplication.WebAppResource; @@ -1023,18 +1025,16 @@ * increments the use count of this model. When you are done accessing the model, call * releaseAccess()! */ - // TODO WebServices for M3 -// public WebServiceEditModel getWebServiceEditModelForRead(Object accessorKey, Map params) { -// return (WebServiceEditModel) getEditModelForRead(WEB_SERVICE_EDIT_MODEL_ID, accessorKey, params); -// } + public WebServiceEditModel getWebServiceEditModelForRead(Object accessorKey, Map params) { + return (WebServiceEditModel) getEditModelForRead(WEB_SERVICE_EDIT_MODEL_ID, accessorKey, params); + } /** * Return an editing model used to edit web service resources. Important!!! Calling this method * increments the use count of this model. When you are done accessing the model, call * releaseAccess()! */ - // TODO WebServices for M3 -// public WebServiceEditModel getWebServiceEditModelForWrite(Object accessorKey, Map params) { -// return (WebServiceEditModel) getEditModelForWrite(WEB_SERVICE_EDIT_MODEL_ID, accessorKey, params); -// } + public WebServiceEditModel getWebServiceEditModelForWrite(Object accessorKey, Map params) { + return (WebServiceEditModel) getEditModelForWrite(WEB_SERVICE_EDIT_MODEL_ID, accessorKey, params); + } } \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/applicationclient/creation/ApplicationClientNatureRuntime.java b/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/applicationclient/creation/ApplicationClientNatureRuntime.java index 1777415..0e09443 100644 --- a/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/applicationclient/creation/ApplicationClientNatureRuntime.java +++ b/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/applicationclient/creation/ApplicationClientNatureRuntime.java
@@ -33,6 +33,7 @@ import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin; import org.eclipse.jst.j2ee.internal.project.J2EEModuleNature; import org.eclipse.jst.j2ee.internal.project.J2EEModuleWorkbenchURIConverterImpl; +import org.eclipse.jst.j2ee.internal.webservices.WebServiceEditModel; import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel; import com.ibm.wtp.emf.workbench.ProjectUtilities; @@ -272,10 +273,9 @@ * increments the use count of this model. When you are done accessing the model, call * releaseAccess()! */ - // TODO WebServices for M3 -// public WebServiceEditModel getWebServiceEditModelForRead(Object accessorKey, Map params) { -// return (WebServiceEditModel) getEditModelForRead(WEB_SERVICE_EDIT_MODEL_ID, accessorKey, params); -// } + public WebServiceEditModel getWebServiceEditModelForRead(Object accessorKey, Map params) { + return (WebServiceEditModel) getEditModelForRead(WEB_SERVICE_EDIT_MODEL_ID, accessorKey, params); + } /** @@ -283,10 +283,9 @@ * increments the use count of this model. When you are done accessing the model, call * releaseAccess()! */ - // TODO WebServices for M3 -// public WebServiceEditModel getWebServiceEditModelForWrite(Object accessorKey, Map params) { -// return (WebServiceEditModel) getEditModelForWrite(WEB_SERVICE_EDIT_MODEL_ID, accessorKey, params); -// } + public WebServiceEditModel getWebServiceEditModelForWrite(Object accessorKey, Map params) { + return (WebServiceEditModel) getEditModelForWrite(WEB_SERVICE_EDIT_MODEL_ID, accessorKey, params); + } } \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee/applicationedit/org/eclipse/jst/j2ee/internal/provider/ApplicationClientItemProvider.java b/plugins/org.eclipse.jst.j2ee/applicationedit/org/eclipse/jst/j2ee/internal/provider/ApplicationClientItemProvider.java index 405cf90..4c0a5e4 100644 --- a/plugins/org.eclipse.jst.j2ee/applicationedit/org/eclipse/jst/j2ee/internal/provider/ApplicationClientItemProvider.java +++ b/plugins/org.eclipse.jst.j2ee/applicationedit/org/eclipse/jst/j2ee/internal/provider/ApplicationClientItemProvider.java
@@ -38,6 +38,7 @@ import org.eclipse.jst.j2ee.internal.J2EEVersionConstants; import org.eclipse.jst.j2ee.internal.application.provider.ApplicationProvidersResourceHandler; import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin; +import org.eclipse.jst.j2ee.internal.webservices.WebServicesManager; import org.eclipse.jst.j2ee.webservice.wsclient.Webservice_clientFactory; import com.ibm.wtp.emf.workbench.ProjectUtilities; @@ -257,9 +258,8 @@ ApplicationClient client = (ApplicationClient) object; Collection myChildren = super.getChildren(object); - // TODO WebServices for M3 -// if (client.getVersionID() <= J2EEVersionConstants.J2EE_1_3_ID) -// myChildren.addAll(WebServicesManager.getInstance().get13ServiceRefs(client)); + if (client.getVersionID() <= J2EEVersionConstants.J2EE_1_3_ID) + myChildren.addAll(WebServicesManager.getInstance().get13ServiceRefs(client)); return myChildren; } } \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/AppClientProjectWebServiceEditModelFactory.java b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/AppClientProjectWebServiceEditModelFactory.java new file mode 100644 index 0000000..fb94c44 --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/AppClientProjectWebServiceEditModelFactory.java
@@ -0,0 +1,52 @@ +/******************************************************************************* + * 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 3, 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.Map; + +import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext; +import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel; + + +/** + * @author jlanuti + * + * To change the template for this generated type comment go to Window - Preferences - Java - Code + * Generation - Code and Comments + */ +public class AppClientProjectWebServiceEditModelFactory extends WebServiceEditModelFactory { + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.internal.emfworkbench.integration.EditModelFactory#createEditModelForRead(java.lang.Object, + * org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext) + */ + public EditModel createEditModelForRead(String editModelID, EMFWorkbenchContext context, Map params) { + return super.createEditModelForRead(editModelID, context, params, WebServiceEditModel.APPCLIENT_PROJECT_WEBSERVICE); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.internal.emfworkbench.integration.EditModelFactory#createEditModelForWrite(java.lang.Object, + * org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext) + */ + public EditModel createEditModelForWrite(String editModelID, EMFWorkbenchContext context, Map params) { + return super.createEditModelForWrite(editModelID, context, params, WebServiceEditModel.APPCLIENT_PROJECT_WEBSERVICE); + } +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/EjbProjectWebServiceEditModelFactory.java b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/EjbProjectWebServiceEditModelFactory.java new file mode 100644 index 0000000..6ce4e36 --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/EjbProjectWebServiceEditModelFactory.java
@@ -0,0 +1,52 @@ +/******************************************************************************* + * 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 3, 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.Map; + +import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext; +import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel; + + +/** + * @author jlanuti + * + * To change the template for this generated type comment go to Window - Preferences - Java - Code + * Generation - Code and Comments + */ +public class EjbProjectWebServiceEditModelFactory extends WebServiceEditModelFactory { + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.internal.emfworkbench.integration.EditModelFactory#createEditModelForRead(java.lang.Object, + * org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext) + */ + public EditModel createEditModelForRead(String editModelID, EMFWorkbenchContext context, Map params) { + return super.createEditModelForRead(editModelID, context, params, WebServiceEditModel.EJB_PROJECT_WEBSERVICE); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.internal.emfworkbench.integration.EditModelFactory#createEditModelForWrite(java.lang.Object, + * org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext) + */ + public EditModel createEditModelForWrite(String editModelID, EMFWorkbenchContext context, Map params) { + return super.createEditModelForWrite(editModelID, context, params, WebServiceEditModel.EJB_PROJECT_WEBSERVICE); + } +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WSDLHelper.java b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WSDLHelper.java new file mode 100644 index 0000000..1002d3e --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WSDLHelper.java
@@ -0,0 +1,364 @@ +/******************************************************************************* + * 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 + *******************************************************************************/ + +package org.eclipse.jst.j2ee.internal.webservices; + +import java.net.MalformedURLException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Map; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.emf.common.util.URI; +import org.eclipse.jst.j2ee.common.QName; +import org.eclipse.jst.j2ee.internal.project.J2EENature; +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.wst.common.internal.emfworkbench.WorkbenchResourceHelper; +import org.eclipse.wst.wsdl.Definition; +import org.eclipse.wst.wsdl.Port; +import org.eclipse.wst.wsdl.Service; +import org.eclipse.wst.wsdl.internal.util.WSDLResourceImpl; + +/** + * This class contains methods to help navigate WSDL files provided in various JSR-109 descriptors + */ +public class WSDLHelper { + + private IProject project_; + + public WSDLHelper(IProject p) { + project_ = p; + } + + /** + * This method returns the list of wsdl:port@name's contained in the WSDL file referred to by + * the specified <service-ref> + * + * @param serviceRefName + * The name of the <service-ref> + * @param compScopedRefName + * The name of the <component-scoped-refs> + * @param wsc + * The root object of the webservicesclient.xml descriptor + * @param exclude + * port names to exclude in the returned array + * @return String[] An array of wsdl:port@names's. null is returned if there are any problems + * with navigating the webservicesclient.xml or the WSDL. + */ + public String[] getPortNames(String serviceRefName, String compScopedRefName, WebServicesClient wsc, String[] exclude) { + ServiceRef sr = getServiceRef(serviceRefName, compScopedRefName, wsc); + if (sr == null) + return null; + + String wsdlURL = getWSDLFileURL(sr); + if (wsdlURL.length() == 0) + return null; + + String serviceLocalName = getServiceQname(sr); + String[] portNames = getPortNames(wsdlURL, serviceLocalName); + portNames = trim(portNames, exclude); + return portNames; + + } + + /** + * This method returns the namespace of the wsdl:service in WSDL file referred to by the + * specified <service-ref> + * + * @param serviceRefName + * The name of the <service-ref> + * @param compScopedRefName + * The name of the <component-scoped-refs> + * @param wsc + * The root object of the webservicesclient.xml descriptor + * @param exclude + * port names to exclude in the returned array + * @return String The namespace of the wsdl:service. null is returned if there are any problems + * with navigating the webservicesclient.xml or the WSDL. + */ + public String getPortNamespace(String serviceRefName, String compScopedRefName, WebServicesClient wsc) { + ServiceRef sr = getServiceRef(serviceRefName, compScopedRefName, wsc); + if (sr == null) + return null; + + String wsdlURL = getWSDLFileURL(sr); + if (wsdlURL.length() == 0) + return ""; //$NON-NLS-1$ + + String serviceLocalName = getServiceQname(sr); + String namespace = getPortNamespace(wsdlURL, serviceLocalName); + return namespace; + } + + /** + * This method returns the list of wsdl:port@name's contained in the specified wsdl:service in + * the specified WSDL file. + * + * @param wsdlURL + * The URL of the WSDL file. + * @param serviceLocalName + * The local name of the wsdl:service to look in. + * @return String[] An array of wsdl:port@name's. Null is returned a wsdl:service with the + * specified local name could not be found. + */ + private String[] getPortNames(String wsdlURL, String serviceLocalName) { + Service targetService = getTargetService(wsdlURL, serviceLocalName); + + if (targetService == null) { + //System.out.println("getPortNames ... targetService null."); + return null; + } + + Map ports = targetService.getPorts(); + int numberOfPorts = ports.size(); + String[] portNames = new String[numberOfPorts]; + Iterator k = ports.values().iterator(); + for (int m = 0; m < numberOfPorts; m++) { + Port port = (Port) k.next(); + portNames[m] = port.getName(); + } + + return portNames; + } + + /** + * This method returns the namespace of the specified wsdl:service in the specified WSDL file. + * + * @param wsdlURL + * The URL of the WSDL file. + * @param serviceLocalName + * The local name of the wsdl:service to look in. + * @return String[] An array of wsdl:port@name's. An empty String is returned if a wsdl:service + * with the specified local name could not be found. + */ + private String getPortNamespace(String wsdlURL, String serviceLocalName) { + Service targetService = getTargetService(wsdlURL, serviceLocalName); + + if (targetService == null) { + //System.out.println("getPortNamespace ... targetService null."); + return ""; //$NON-NLS-1$ + } + + return targetService.getQName().getNamespaceURI(); + } + + private Service getTargetService(String wsdlURL, String serviceLocalName) { + Definition definition = getWSDLDefinition(wsdlURL); + if (definition == null) { + return null; + } + + Service targetService = null; + Map services = definition.getServices(); + if (!services.isEmpty()) { + if ((serviceLocalName == null || serviceLocalName.length() == 0) && services.size() > 1) //Multiple + // services + // without + // one + // designated + // is + // an + // error + { + return null; + } + + if ((serviceLocalName == null || serviceLocalName.length() == 0) && services.size() == 1) { + //Return the port names in the one service + Iterator i = services.values().iterator(); + targetService = (Service) i.next(); + } else //There are multiple services but one is designated + { + Iterator j = services.values().iterator(); + while (j.hasNext()) { + Service service = (Service) j.next(); + String serviceName = service.getQName().getLocalPart(); + if (serviceName.equals(serviceLocalName)) { + targetService = service; + break; //Found a match. Break out of loop. We must be assuming unique names + // on services. + } + } + } + } + + return targetService; + + } + + + private Definition getWSDLDefinition(String wsdlURL) { + try { + WSDLResourceImpl res = (WSDLResourceImpl) WorkbenchResourceHelper.getResource(URI.createURI(wsdlURL), true); + if (res == null) + return null; + return res.getDefinition(); + } catch (Exception wsdle) { + return null; + } + } + + /** + * Returns the file URL of the <wsdl-file>specified in the given <service-ref>. Returns a blank + * String if <wsdl-file>is not specified in the provided <service-ref> + */ + private String getWSDLFileURL(ServiceRef sr) { + String wsdlFileRelPath = sr.getWsdlFile(); + if (wsdlFileRelPath == null || wsdlFileRelPath.length() == 0) + return ""; //$NON-NLS-1$ + + // Get a handle on the WSDL file. + J2EENature nature = J2EENature.getRegisteredRuntime(project_); + if (nature != null) { + IResource moduleRoot = nature.getModuleServerRoot(); + if (moduleRoot instanceof IFolder) { + IFolder moduleRootFolder = (IFolder) moduleRoot; + IFile wsdlFile = moduleRootFolder.getFile(wsdlFileRelPath); + if (!wsdlFile.exists()) { + return ""; //$NON-NLS-1$ + } + + //Get the fileURL from wsdlFile + String wsdlURL; + try { + wsdlURL = wsdlFile.getLocation().toFile().toURL().toString(); + } catch (MalformedURLException murle) { + return ""; //$NON-NLS-1$ + } + + if (wsdlURL == null || wsdlURL.length() == 0) + return ""; //$NON-NLS-1$ + + return wsdlURL; + + } + return ""; //$NON-NLS-1$ + } + return ""; //$NON-NLS-1$ + } + + /** + * Returns the local part of the <service-qname>specified in the given <service-ref>. Returns a + * blank String if <service-qname>is not specified in the provided <service-ref> + */ + private String getServiceQname(ServiceRef sr) { + QName serviceQname = sr.getServiceQname(); + if (serviceQname == null) + return ""; //$NON-NLS-1$ + + String serviceLocalName = serviceQname.getLocalPart(); + if (serviceLocalName == null) + return ""; //$NON-NLS-1$ + + return serviceLocalName; + } + + /* If compScopedRefName is empty or null, we may have to check all of them. */ + public ServiceRef getServiceRef(String name, String compScopedRefName, WebServicesClient wsc) { + Iterator serviceRefs; + if (compScopedRefName != null && compScopedRefName.length() > 0) { + ComponentScopedRefs csr = getCompScopedRef(compScopedRefName, wsc); + serviceRefs = csr.getServiceRefs().iterator(); + } else { + serviceRefs = wsc.getServiceRefs().iterator(); + //If there are no service refs ... check all component-scoped-refs for the service-ref + if (!serviceRefs.hasNext()) { + Iterator csRefs = wsc.getComponentScopedRefs().iterator(); + + while (csRefs.hasNext()) { + ComponentScopedRefs csr = (ComponentScopedRefs) csRefs.next(); + Iterator srs = csr.getServiceRefs().iterator(); + while (srs.hasNext()) { + ServiceRef sr = (ServiceRef) srs.next(); + String thisName = sr.getServiceRefName(); + if (thisName.equals(name)) { + return sr; + } + } + } + + return null; //Could not find it in any of the component-scoped-refs + } + + } + + while (serviceRefs.hasNext()) { + ServiceRef serviceRef = (ServiceRef) serviceRefs.next(); + String serviceRefName = serviceRef.getServiceRefName(); + if (serviceRefName.equals(name)) + return serviceRef; + } + return null; + } + + + private ComponentScopedRefs getCompScopedRef(String name, WebServicesClient wsc) { + Iterator compScopedRefs = wsc.getComponentScopedRefs().iterator(); + while (compScopedRefs.hasNext()) { + ComponentScopedRefs compScopedRef = (ComponentScopedRefs) compScopedRefs.next(); + String compScopedRefName = compScopedRef.getComponentName(); + if (compScopedRefName.equals(name)) + return compScopedRef; + } + return null; + + } + + + private String[] trim(String[] values, String[] exclude) { + if (values == null || values.length == 0 || exclude == null || exclude.length == 0) //no + // change + // required. + // return + // as + // is. + return values; + + String[] finalValues; + ArrayList finalList = new ArrayList(); + for (int i = 0; i < values.length; i++) { + if (!contains(exclude, values[i])) { + finalList.add(values[i]); + } + } + + int finalSize = finalList.size(); + finalValues = new String[finalSize]; + Object[] finalArray = finalList.toArray(); + for (int j = 0; j < finalSize; j++) { + finalValues[j] = (String) (finalArray[j]); + } + + return finalValues; + + } + + /** + * Returns true if the array of String's contains the specified String. False otherwise. + */ + private boolean contains(String[] values, String s) { + if (values == null) + return false; + + for (int i = 0; i < values.length; i++) { + if (values[i].equals(s)) + return true; + } + + return false; + } + +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebProjectWebServiceEditModelFactory.java b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebProjectWebServiceEditModelFactory.java new file mode 100644 index 0000000..18912a4 --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebProjectWebServiceEditModelFactory.java
@@ -0,0 +1,52 @@ +/******************************************************************************* + * 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 3, 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.Map; + +import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext; +import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel; + + +/** + * @author jlanuti + * + * To change the template for this generated type comment go to Window - Preferences - Java - Code + * Generation - Code and Comments + */ +public class WebProjectWebServiceEditModelFactory extends WebServiceEditModelFactory { + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.internal.emfworkbench.integration.EditModelFactory#createEditModelForRead(java.lang.Object, + * org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext) + */ + public EditModel createEditModelForRead(String editModelID, EMFWorkbenchContext context, Map params) { + return super.createEditModelForRead(editModelID, context, params, WebServiceEditModel.WEB_PROJECT_WEBSERVICE); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.internal.emfworkbench.integration.EditModelFactory#createEditModelForWrite(java.lang.Object, + * org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext) + */ + public EditModel createEditModelForWrite(String editModelID, EMFWorkbenchContext context, Map params) { + return super.createEditModelForWrite(editModelID, context, params, WebServiceEditModel.WEB_PROJECT_WEBSERVICE); + } +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServiceClientGenerator.java b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServiceClientGenerator.java new file mode 100644 index 0000000..5d0d07f --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServiceClientGenerator.java
@@ -0,0 +1,56 @@ +/******************************************************************************* + * 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 Apr 28, 2004 + */ +package org.eclipse.jst.j2ee.internal.webservices; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.jst.j2ee.internal.common.J2EECommonMessages; + + +/** + * Extension for generating web service clients + */ +public abstract class WebServiceClientGenerator { + + public static final String GENERIC_J2EE_CONTAINER = J2EECommonMessages.getResourceString("WebServiceClientGenerator_UI_0"); //$NON-NLS-1$ + + private List runtime = null; + + /** + * Generates Web service client artifacts based on information obatined from the dataModel + * (wsdlURL, serviceQName, outputWSDLFilePathName, projectName, shouldDeploy) After generating + * the Web service client artifacts, sets the following on the dataModel: serviceInterfaceName, + * serviceEndpointInterfaceName, didGenDescriptors + * + * @return Status for results + */ + public abstract IStatus genWebServiceClientArtifacts(WebServicesClientDataHelper dataModel); + + public void setRuntime(List serverTargets) { + runtime = serverTargets; + } + + public List getServerTargets() { + if (runtime == null) + runtime = new ArrayList(); + return runtime; + } + + public boolean isRuntimeSupported(String serverTargetID) { + return getServerTargets().contains(serverTargetID); + } + +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServiceEditModel.java b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServiceEditModel.java new file mode 100644 index 0000000..bfdbffa --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServiceEditModel.java
@@ -0,0 +1,169 @@ +/******************************************************************************* + * 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 3, 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.List; + +import org.eclipse.core.resources.IFile; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.jst.j2ee.applicationclient.creation.IApplicationClientNatureConstants; +import org.eclipse.jst.j2ee.internal.J2EEConstants; +import org.eclipse.jst.j2ee.internal.J2EEEditModel; +import org.eclipse.jst.j2ee.internal.project.IEJBNatureConstants; +import org.eclipse.jst.j2ee.internal.project.IWebNatureConstants; +import org.eclipse.jst.j2ee.internal.project.J2EENature; +import org.eclipse.jst.j2ee.webservice.wsclient.WebServicesResource; +import org.eclipse.jst.j2ee.webservice.wsdd.WebServices; +import org.eclipse.jst.j2ee.webservice.wsdd.WsddResource; +import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext; +import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper; +import org.eclipse.wst.wsdl.internal.util.WSDLResourceImpl; + +import com.ibm.wtp.emf.workbench.ProjectUtilities; + +/** + * @author jlanuti + * + * To change the template for this generated type comment go to Window - Preferences - Java - Code + * Generation - Code and Comments + */ +public class WebServiceEditModel extends J2EEEditModel { + + public static final int WEB_PROJECT_WEBSERVICE = 0; + public static final int EJB_PROJECT_WEBSERVICE = 1; + public static final int APPCLIENT_PROJECT_WEBSERVICE = 2; + + private static final String WEB_SERVICES_FILE = "webservices.xml"; //$NON-NLS-1$ + private static final String WEB_SERVICES_CLIENT_FILE = "webservicesclient.xml"; //$NON-NLS-1$ + public static final String WS_META_INF_PATH = "META-INF/" + WEB_SERVICES_FILE; //$NON-NLS-1$ + public static final String WS_WEB_INF_PATH = "WEB-INF/" + WEB_SERVICES_FILE; //$NON-NLS-1$ + public static final String WS_CLIENT_META_INF_PATH = "META-INF/" + WEB_SERVICES_CLIENT_FILE; //$NON-NLS-1$ + public static final String WS_CLIENT_WEB_INF_PATH = "WEB-INF/" + WEB_SERVICES_CLIENT_FILE; //$NON-NLS-1$ + public static final String WSIL_FILE_EXT = "wsil"; //$NON-NLS-1$ + public static final String WSDL_FILE_EXT = "wsdl"; //$NON-NLS-1$ + + protected int projectType; + + /** + * constructor + */ + public WebServiceEditModel(String editModelID, EMFWorkbenchContext context, boolean readOnly, int projectType) { + super(editModelID, context, readOnly); + this.projectType = projectType; + } + + /** + * constructor + */ + public WebServiceEditModel(String editModelID, EMFWorkbenchContext context, boolean readOnly, boolean accessUnkownResourcesAsReadOnly, int projectType) { + super(editModelID, context, readOnly, accessUnkownResourcesAsReadOnly); + this.projectType = projectType; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jst.j2ee.internal.internal.workbench.J2EEEditModel#getRootObject() + */ + public Object getRootObject() { + return getWebServices(); + } + + public WebServices getWebServices() { + Resource dd = getWebServicesXmlResource(); + if (dd != null) { + Object webServices = getRoot(dd); + if (webServices instanceof WebServices) + return (WebServices) webServices; + } + return null; + } + + public List getWSILResources() { + return getResources(WSIL_FILE_EXT); + } + + public List getWSDLResources() { + return getResources(WSDL_FILE_EXT); + } + + public List getResources(String ext) { + List files = ProjectUtilities.getAllProjectFiles(getProject()); + List result = new ArrayList(); + for (int i = 0; i < files.size(); i++) { + IFile file = (IFile) files.get(i); + if (file != null && file.getFileExtension() != null && file.getFileExtension().equals(ext)) { + Resource res = WorkbenchResourceHelper.getResource(file, true); + if (res != null) + result.add(res); + } + } + return result; + } + + public WsddResource getWebServicesXmlResource() { + return (WsddResource) getResource(getWebServicesXmlResourceURI()); + } + + public URI getWebServicesXmlResourceURI() { + URI resourceURI = J2EEConstants.WEB_SERVICES_WEB_INF_DD_URI_OBJ; + if (projectType == APPCLIENT_PROJECT_WEBSERVICE || projectType == EJB_PROJECT_WEBSERVICE) + resourceURI = J2EEConstants.WEB_SERVICES_META_INF_DD_URI_OBJ; + return resourceURI; + } + + /** + * return the WSDLResource if it exists, otherwise return null + */ + public WSDLResourceImpl getWsdlResource(String path) { + if (path == null || path.equals(""))return null; //$NON-NLS-1$ + Resource res = null; + try { + res = getResource(URI.createURI(path)); + } catch (Exception e) { + } + if (res != null && res.isLoaded() && res instanceof WSDLResourceImpl) + return (WSDLResourceImpl) res; + return null; + + } + + public J2EEEditModel getJ2EEEditModel(Object accessorKey) { + J2EEEditModel editModel = null; + switch (projectType) { + case WEB_PROJECT_WEBSERVICE : + editModel = J2EENature.getRuntime(getProject(), IWebNatureConstants.J2EE_NATURE_ID).getJ2EEEditModelForRead(accessorKey); + break; + case EJB_PROJECT_WEBSERVICE : + editModel = J2EENature.getRuntime(getProject(), IEJBNatureConstants.NATURE_ID).getJ2EEEditModelForRead(accessorKey); + break; + case APPCLIENT_PROJECT_WEBSERVICE : + editModel = J2EENature.getRuntime(getProject(), IApplicationClientNatureConstants.NATURE_ID).getJ2EEEditModelForRead(accessorKey); + break; + } + return editModel; + } + + public WebServicesResource get13WebServicesClientResource() { + String resourcePath = WS_CLIENT_WEB_INF_PATH; + if (projectType == APPCLIENT_PROJECT_WEBSERVICE || projectType == EJB_PROJECT_WEBSERVICE) + resourcePath = WS_CLIENT_META_INF_PATH; + return (WebServicesResource) getResource(URI.createURI(resourcePath)); + } +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServiceEditModelFactory.java b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServiceEditModelFactory.java new file mode 100644 index 0000000..93c9974 --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServiceEditModelFactory.java
@@ -0,0 +1,55 @@ +/******************************************************************************* + * 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 3, 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.Map; + +import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext; +import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel; +import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelFactory; + + +/** + * @author jlanuti + * + * To change the template for this generated type comment go to Window - Preferences - Java - Code + * Generation - Code and Comments + */ +public abstract class WebServiceEditModelFactory extends EditModelFactory { + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.internal.emfworkbench.integration.EditModelFactory#createEditModelForRead(java.lang.Object, + * org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext) + */ + protected EditModel createEditModelForRead(String editModelID, EMFWorkbenchContext context, Map params, int projectType) { + return new WebServiceEditModel(editModelID, context, true, isLoadKnownResourcesAsReadOnly(), projectType); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.wst.common.internal.emfworkbench.integration.EditModelFactory#createEditModelForWrite(java.lang.Object, + * org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext) + */ + protected EditModel createEditModelForWrite(String editModelID, EMFWorkbenchContext context, Map params, int projectType) { + return new WebServiceEditModel(editModelID, context, false, isLoadKnownResourcesAsReadOnly(), projectType); + } + + +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServicesClientDataHelper.java b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServicesClientDataHelper.java new file mode 100644 index 0000000..23162f4 --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServicesClientDataHelper.java
@@ -0,0 +1,78 @@ +/******************************************************************************* + * 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 Apr 26, 2004 + */ +package org.eclipse.jst.j2ee.internal.webservices; + + +/** + * WebServicesClientDataHelper Interface Extension - For use in generating Web Service Clients by + * sharing data between J2EE operations and web services operations + */ +public interface WebServicesClientDataHelper { + + /** + * @return the URL for the associated original WSDL file referenced by the client + */ + public String getWSDLUrl(); + + /** + * @return the QName of form http://someNamespace:someLocalPart for the associated web service + * for the client + */ + public String getServiceQName(); + + /** + * @return the name of the target project for the web service client + */ + public String getProjectName(); + + /** + * @return the URI for the fileName path for the copied WSDL file into the client project + */ + public String getOutputWSDLFileName(); + + /** + * @return the qualified classname of the generated Service Interface + */ + public String getServiceInterfaceName(); + + /** + * @return the qualified classname of the generated Service Endpoint Interface + */ + public String[] getServiceEndpointInterfaceNames(); + + /** + * @return should generate code for deployment? + */ + public boolean shouldDeploy(); + + /** + * @return whether the extension generated the descriptors or not + */ + public boolean shouldGenDescriptors(); + + /** + * Set the SEI classname for the web service client + */ + public void setServiceInterfaceName(String name); + + /** + * Set the SI classname for the web service client + */ + public void setServiceEndpointInterfaceNames(String[] names); + + /** + * Set whether descriptors were generated + */ + public void setDidGenDescriptors(boolean b); +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServicesClientDataRegistry.java b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServicesClientDataRegistry.java new file mode 100644 index 0000000..7b8e1a9 --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServicesClientDataRegistry.java
@@ -0,0 +1,87 @@ +/******************************************************************************* + * 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 Apr 26, 2004 + */ +package org.eclipse.jst.j2ee.internal.webservices; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin; + +import com.ibm.wtp.common.RegistryReader; + +/** + * Read the WebServicesClientDataExtensions + */ +public class WebServicesClientDataRegistry extends RegistryReader { + + private static WebServicesClientDataRegistry INSTANCE = null; + public static final String WS_CLIENT_EXTENSION_POINT = "WebServiceClientGenerator"; //$NON-NLS-1$ + public static final String GENERATOR = "generator"; //$NON-NLS-1$ + public static final String CLASS_NAME = "className"; //$NON-NLS-1$ + public static final String SERVER_TARGET = "serverTarget"; //$NON-NLS-1$ + public static final String RUNTIME = "runtime"; //$NON-NLS-1$ + private List wsClientDataExtensions = null; + + /** + * Default constructor + */ + public WebServicesClientDataRegistry() { + super(J2EEPlugin.PLUGIN_ID, WS_CLIENT_EXTENSION_POINT); + } + + public static WebServicesClientDataRegistry getInstance() { + if (INSTANCE == null) { + INSTANCE = new WebServicesClientDataRegistry(); + INSTANCE.readRegistry(); + } + return INSTANCE; + } + + /** + * @see org.eclipse.wst.common.frameworks.internal.RegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement) + */ + public boolean readElement(IConfigurationElement element) { + if (!element.getName().equals(GENERATOR)) + return false; + // Get the class specified in the extension point + WebServiceClientGenerator helper = null; + try { + helper = (WebServiceClientGenerator) element.createExecutableExtension(CLASS_NAME); + // get server target runtimes + IConfigurationElement[] runtimes = element.getChildren(RUNTIME); + List runtimeList = new ArrayList(); + for (int i = 0; i < runtimes.length; i++) { + IConfigurationElement runtime = runtimes[i]; + String serverTarget = runtime.getAttribute(SERVER_TARGET); + runtimeList.add(serverTarget); + } + helper.setRuntime(runtimeList); + } catch (Exception e) { + e.printStackTrace(); + } + // Add data helper class to registry extensions list + if (helper != null) { + getWSClientGeneratorExtensions().add(helper); + return true; + } + return false; + } + + public List getWSClientGeneratorExtensions() { + if (wsClientDataExtensions == null) + wsClientDataExtensions = new ArrayList(); + return wsClientDataExtensions; + } +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServicesManager.java b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServicesManager.java new file mode 100644 index 0000000..bbb4142 --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/webservices/WebServicesManager.java
@@ -0,0 +1,894 @@ +/******************************************************************************* + * 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.jst.j2ee.applicationclient.creation.IApplicationClientNatureConstants; +import org.eclipse.jst.j2ee.client.ApplicationClient; +import org.eclipse.jst.j2ee.common.XMLResource; +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.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; +import org.eclipse.wst.ws.parser.wsil.WebServiceEntity; +import org.eclipse.wst.ws.parser.wsil.WebServicesParser; +import org.eclipse.wst.wsdl.Definition; +import org.eclipse.wst.wsdl.Port; +import org.eclipse.wst.wsdl.Service; +import org.eclipse.wst.wsdl.internal.util.WSDLResourceImpl; + +import com.ibm.wtp.common.logger.proxy.Logger; +import com.ibm.wtp.emf.workbench.ProjectResourceSet; +import com.ibm.wtp.emf.workbench.ProjectUtilities; + +/** + * @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) { + } + 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); + WSDLResourceImpl 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 = WorkbenchResourceHelper.getResource(URI.createURI(ref.getWsdlFile()), true); + if (res !=null && result.contains(res)) + result.remove(res); + } catch (Exception e) {} + } + return result; + } + + public boolean isServiceInternal(Service service) { + return getInternalWSDLResources().contains(getWSDLResource(service)); + } + + private List getWSDLServicesFromWSDLResources(List wsdlResources) { + List result = new ArrayList(); + for (int i = 0; i < wsdlResources.size(); i++) { + WSDLResourceImpl wsdl = (WSDLResourceImpl) 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) { + List result = new ArrayList(); + WebServiceEntity entity = parseWsilFile(wsil); + if (entity != null && entity.getType() == WebServiceEntity.TYPE_WSIL) { + // get all the WSDL references from the WSIL entity + List wsdlList = entity.getChildren(); + for (Iterator it = wsdlList.iterator(); it.hasNext();) { + Object item = it.next(); + if (item != null && item instanceof WebServiceEntity) { + if (((WebServiceEntity) item).getModel() != null && ((WebServiceEntity) item).getModel() instanceof Definition) { + Definition def = (Definition) ((WebServiceEntity) item).getModel(); + if (def != null && !def.getServices().isEmpty()) + result.addAll(def.getServices().values()); + } + } + } + } + return result; + } + + public WebServiceEntity parseWsilFile(IFile wsil) { + WebServicesParser parser = null; + String url = null; + // verify proper input + if (wsil == null || !wsil.getFileExtension().equals(WSIL_EXT)) + return null; + // Parse wsil file to get wsdl services + try { + url = wsil.getLocation().toFile().toURL().toString(); + parser = new WebServicesParser(url); + parser.parse(WebServicesParser.PARSE_WSIL | WebServicesParser.PARSE_WSDL); + } catch (Exception e) { + } + if (parser == null) + return null; + return parser.getWebServiceEntityByURI(url); + } + + /** + * 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 WSDLResourceImpl getWSDLResource(WebServiceDescription webService) { + String wsdlFileName = webService.getWsdlFile(); + WSDLResourceImpl 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(WSDLResourceImpl wsdl) { + List result = new ArrayList(); + Definition def = wsdl.getDefinition(); + if (def == null) + return result; + result = new ArrayList(def.getServices().values()); + return result; + } + + public Service getWSDLServiceForWebService(WebServiceDescription webService) { + Service service = null; + WSDLResourceImpl wsdl = getWSDLResource(webService); + if (wsdl == null) + return service; + Definition definition = wsdl.getDefinition(); + if (definition == null) + return service; + Map services = definition.getServices(); + if (services.isEmpty()) + return service; + PortComponent portComp = (PortComponent) webService.getPortComponents().get(0); + return getService(portComp); + } + + public WSDLResourceImpl getWSDLResource(Service wsdlService) { + return (WSDLResourceImpl) wsdlService.eResource(); + } + + public Service getService(PortComponent port) { + List services = getInternalWSDLServices(); + for (int i = 0; i < services.size(); i++) { + Service service = (Service) services.get(i); + if (service.getPorts().size() == 1) { + Port wsdlPort = (Port) service.getPorts().values().toArray()[0]; + String qName = wsdlPort.getBinding().getQName().getNamespaceURI(); + 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(Service 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 + if (wsdlService == null || wsdlService.getPorts().isEmpty()) + return null; + if (wsdlService.getPorts().size() == 1) { + Port port = (Port) wsdlService.getPorts().values().toArray()[0]; + String qName = port.getBinding().getQName().getNamespaceURI(); + return getPortComponent(qName, ProjectUtilities.getProject(wsdlService)); + } + return null; + } + + public ServiceImplBean getServiceImplBean(Service wsdlService) { + PortComponent port = getPortComponent(wsdlService); + if (port == null) + return null; + return port.getServiceImplBean(); + } + + public WsddResource getWsddResource(Service wsdlService) { + PortComponent port = getPortComponent(wsdlService); + if (port == null) + return null; + return (WsddResource) port.eResource(); + } + + public String getServiceEndpointInterface(Service 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++) { + WSDLResourceImpl wsdl = (WSDLResourceImpl) 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) { + } + 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) { + } + + 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 removals + 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; + WSDLResourceImpl res = (WSDLResourceImpl) WorkbenchResourceHelper.getResource(wsdl, true); + IProject p = ProjectUtilities.getProject(res); + 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 = ProjectUtilities.getProject(wsil); + 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) { + } + 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) { + } + 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) { + } + return list; + } +} \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/operations/J2EEArtifactImportDataModel.java b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/operations/J2EEArtifactImportDataModel.java index 15e911b..04e8ad0 100644 --- a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/operations/J2EEArtifactImportDataModel.java +++ b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/operations/J2EEArtifactImportDataModel.java
@@ -251,11 +251,8 @@ if (null != archiveFile && getBooleanProperty(DEFAULT_PROJECT_NAME)) { Path path = new Path(archiveFile.getURI()); String defaultProjectName = path.segment(path.segmentCount() - 1); - if (defaultProjectName.indexOf('.') > 0) { - defaultProjectName = defaultProjectName.substring(0, defaultProjectName.lastIndexOf('.')); - if (defaultProjectName.indexOf('.') > 0) { - defaultProjectName = defaultProjectName.replace('.', '_'); - } + if (defaultProjectName.indexOf(".") > 0) { //$NON-NLS-1$ + defaultProjectName = defaultProjectName.substring(0, defaultProjectName.indexOf(".")); //$NON-NLS-1$ } if (!getBooleanProperty(OVERWRITE_PROJECT)) { String baseName = defaultProjectName;
diff --git a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/project/J2EEModuleNature.java b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/project/J2EEModuleNature.java index 217d416..cb2dd2a 100644 --- a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/project/J2EEModuleNature.java +++ b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/project/J2EEModuleNature.java
@@ -39,6 +39,7 @@ import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory; import org.eclipse.jst.j2ee.internal.earcreation.EARNatureRuntime; import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin; +import org.eclipse.jst.j2ee.internal.webservices.WebServiceEditModel; import com.ibm.wtp.emf.workbench.ProjectResourceSet; import com.ibm.wtp.emf.workbench.ProjectUtilities; @@ -305,39 +306,35 @@ * increments the use count of this model. When you are done accessing the model, call * releaseAccess()! */ - // TODO WebServices for M3 -// public WebServiceEditModel getWebServiceEditModelForRead(Object accessorKey) { -// return getWebServiceEditModelForRead(accessorKey, null); -// } + public WebServiceEditModel getWebServiceEditModelForRead(Object accessorKey) { + return getWebServiceEditModelForRead(accessorKey, null); + } /** * Return an editing model used to read web service resources. Important!!! Calling this method * increments the use count of this model. When you are done accessing the model, call * releaseAccess()! */ - // TODO WebServices for M3 -// public WebServiceEditModel getWebServiceEditModelForRead(Object accessorKey, Map params) { -// return null; -// } + public WebServiceEditModel getWebServiceEditModelForRead(Object accessorKey, Map params) { + return null; + } /** * Return an editing model used to edit web service resources. Important!!! Calling this method * increments the use count of this model. When you are done accessing the model, call * releaseAccess()! */ - // TODO WebServices for M3 -// public WebServiceEditModel getWebServiceEditModelForWrite(Object accessorKey) { -// return getWebServiceEditModelForWrite(accessorKey, null); -// } + public WebServiceEditModel getWebServiceEditModelForWrite(Object accessorKey) { + return getWebServiceEditModelForWrite(accessorKey, null); + } /** * Return an editing model used to edit web service resources. Important!!! Calling this method * increments the use count of this model. When you are done accessing the model, call * releaseAccess()! */ - // TODO Webservices for M3 -// public WebServiceEditModel getWebServiceEditModelForWrite(Object accessorKey, Map params) { -// return null; -// } + public WebServiceEditModel getWebServiceEditModelForWrite(Object accessorKey, Map params) { + return null; + } } \ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/reference/ReferenceDataModel.java b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/reference/ReferenceDataModel.java index ec6ec41..40318d6 100644 --- a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/reference/ReferenceDataModel.java +++ b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/reference/ReferenceDataModel.java
@@ -28,6 +28,7 @@ import org.eclipse.jst.j2ee.internal.J2EEVersionConstants; import org.eclipse.jst.j2ee.internal.common.operations.J2EEModelModifierOperationDataModel; import org.eclipse.jst.j2ee.internal.project.J2EECreationResourceHandler; +import org.eclipse.jst.j2ee.internal.webservices.WebServicesManager; import org.eclipse.jst.j2ee.webapplication.WebApp; import org.eclipse.jst.j2ee.webservice.wsclient.ServiceRef; import org.eclispe.wst.common.frameworks.internal.plugin.WTPCommonPlugin; @@ -237,12 +238,11 @@ if (checkMessageDestRefExists(bean.getMessageDestinationRefs(), nameValue)) return false; } - // TODO WebServices for M3 -// else { -// Collection temp = WebServicesManager.getInstance().get13ServiceRefs(bean); -// if (temp != null && !temp.isEmpty() && checkServiceRefExists((List) temp, nameValue)) -// return false; -// } + else { + Collection temp = WebServicesManager.getInstance().get13ServiceRefs(bean); + if (temp != null && !temp.isEmpty() && checkServiceRefExists((List) temp, nameValue)) + return false; + } } else if (ownerType == APP_CLIENT_TYPE) { ApplicationClient appClient = (ApplicationClient) getProperty(ReferenceDataModel.OWNER); if (checkResourceRefExists(appClient.getResourceRefs(), nameValue)) @@ -257,12 +257,11 @@ if (checkMessageDestRefExists(appClient.getMessageDestinationRefs(), nameValue)) return false; } - // TODO WebServices for M3 -// else { -// Collection temp = WebServicesManager.getInstance().get13ServiceRefs(appClient); -// if (temp != null && !temp.isEmpty() && checkServiceRefExists((List) temp, nameValue)) -// return false; -// } + else { + Collection temp = WebServicesManager.getInstance().get13ServiceRefs(appClient); + if (temp != null && !temp.isEmpty() && checkServiceRefExists((List) temp, nameValue)) + return false; + } } else if (ownerType == WEB_TYPE) { WebApp webApp = (WebApp) getProperty(ReferenceDataModel.OWNER); if (checkResourceRefExists(webApp.getResourceRefs(), nameValue)) @@ -279,12 +278,11 @@ if (checkMessageDestRefExists(webApp.getMessageDestinationRefs(), nameValue)) return false; } - // TODO WebServices for M3 -// else { -// Collection temp = WebServicesManager.getInstance().get13ServiceRefs(webApp); -// if (temp != null && !temp.isEmpty() && checkServiceRefExists((List) temp, nameValue)) -// return false; -// } + else { + Collection temp = WebServicesManager.getInstance().get13ServiceRefs(webApp); + if (temp != null && !temp.isEmpty() && checkServiceRefExists((List) temp, nameValue)) + return false; + } } return true; }
diff --git a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/reference/ServiceReferenceCreationOperation.java b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/reference/ServiceReferenceCreationOperation.java new file mode 100644 index 0000000..1d15ed3 --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/reference/ServiceReferenceCreationOperation.java
@@ -0,0 +1,250 @@ +/* + * Created on Feb 6, 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.reference; + +import java.util.List; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.jem.java.JavaClass; +import org.eclipse.jem.java.JavaRefFactory; +import org.eclipse.jst.j2ee.client.ApplicationClient; +import org.eclipse.jst.j2ee.client.impl.ClientFactoryImpl; +import org.eclipse.jst.j2ee.common.CommonFactory; +import org.eclipse.jst.j2ee.common.CommonPackage; +import org.eclipse.jst.j2ee.common.Description; +import org.eclipse.jst.j2ee.common.QName; +import org.eclipse.jst.j2ee.common.XMLResource; +import org.eclipse.jst.j2ee.ejb.EnterpriseBean; +import org.eclipse.jst.j2ee.internal.J2EEEditModel; +import org.eclipse.jst.j2ee.internal.J2EEVersionConstants; +import org.eclipse.jst.j2ee.internal.webservices.WebServiceClientGenerator; +import org.eclipse.jst.j2ee.internal.webservices.WebServicesClientDataRegistry; +import org.eclipse.jst.j2ee.internal.webservices.WebServicesManager; +import org.eclipse.jst.j2ee.webapplication.WebApp; +import org.eclipse.jst.j2ee.webservice.wsclient.ComponentScopedRefs; +import org.eclipse.jst.j2ee.webservice.wsclient.PortComponentRef; +import org.eclipse.jst.j2ee.webservice.wsclient.ServiceRef; +import org.eclipse.jst.j2ee.webservice.wsclient.WebServicesClient; +import org.eclipse.jst.j2ee.webservice.wsclient.Webservice_clientFactory; +import org.eclipse.jst.j2ee.webservice.wsclient.Webservice_clientPackage; +import org.eclipse.wst.common.internal.emfworkbench.integration.ModifierHelper; +import org.eclipse.wst.common.internal.emfworkbench.operation.ModelModifierOperation; +import org.eclipse.wst.server.core.IRuntime; +import org.eclipse.wst.server.core.ServerCore; + + +/** + * @author dfholttp + * + * To change the template for this generated type comment go to Window - Preferences - Java - Code + * Generation - Code and Comments + */ +public class ServiceReferenceCreationOperation extends ModelModifierOperation { + ServiceReferenceDataModel dataModel; + ServiceRef ref; + private int j2eeVersion = J2EEVersionConstants.J2EE_1_4_ID; + + /** + * @param dataModel + */ + public ServiceReferenceCreationOperation(ServiceReferenceDataModel dataModel) { + super(dataModel); + this.dataModel = dataModel; + } + + /* + * (non-Javadoc) + * + * @see com.ibm.wtp.emf.workbench.operation.ModelModifierOperation#addHelpers() + */ + protected void addHelpers() { + WebServiceClientGenerator actualGen = getWebServiceClientGenerator(); + if (actualGen != null) + actualGen.genWebServiceClientArtifacts(dataModel); + if (!dataModel.didGenDescriptors()) + modifier.addHelper(createHelpers()); + + if (actualGen != null) + createPortCompRefHelpers(); + } + + protected WebServiceClientGenerator getWebServiceClientGenerator() { + List generators = WebServicesClientDataRegistry.getInstance().getWSClientGeneratorExtensions(); + WebServiceClientGenerator actualGen = null; + + IRuntime runtime = ServerCore.getProjectProperties(dataModel.getTargetProject()).getRuntimeTarget(); + if (runtime == null) + return null; + String serverTargetID = runtime.getRuntimeType().getId(); + + for (int i = 0; i < generators.size(); i++) { + WebServiceClientGenerator gen = (WebServiceClientGenerator) generators.get(i); + if (gen.isRuntimeSupported(serverTargetID)) { + if (serverTargetID.equals(WebServiceClientGenerator.GENERIC_J2EE_CONTAINER)) { + // AXIS is only supported for web projects + if (dataModel.getDeploymentDescriptorType() != XMLResource.WEB_APP_TYPE) + break; + } + actualGen = gen; + break; + } + } + return actualGen; + } + + /* + * @see SimpleCommandWizardPage#createCommandHelper() + */ + public ModifierHelper createHelpers() { + ModifierHelper helper = null; + ref = Webservice_clientFactory.eINSTANCE.createServiceRef(); + + if (dataModel != null) { + helper = new ModifierHelper(); + EObject owner = (EObject) dataModel.getProperty(ServiceReferenceDataModel.OWNER); + switch (dataModel.getDeploymentDescriptorType()) { + case XMLResource.APP_CLIENT_TYPE : + if (((ApplicationClient) owner).getVersionID() == J2EEVersionConstants.J2EE_1_4_ID) { + helper.setFeature(ClientFactoryImpl.getPackage().getApplicationClient_ServiceRefs()); + helper.setOwner(owner); + Description descriptionObj = CommonFactory.eINSTANCE.createDescription(); + descriptionObj.setValue(dataModel.getStringProperty(ServiceReferenceDataModel.DESCRIPTION).trim()); + ref.getDescriptions().add(descriptionObj); + ref.setDescription(dataModel.getStringProperty(ServiceReferenceDataModel.DESCRIPTION).trim()); + } else { + helper.setFeature(Webservice_clientPackage.eINSTANCE.getWebServicesClient_ServiceRefs()); + helper.setOwner(WebServicesManager.getInstance().getDefaultWebServicesResource(owner, (J2EEEditModel) editModel).getWebServicesClient()); + ref.setDescription(dataModel.getStringProperty(ServiceReferenceDataModel.DESCRIPTION).trim()); + j2eeVersion = J2EEVersionConstants.J2EE_1_3_ID; + } + break; + case XMLResource.EJB_TYPE : + if (((EnterpriseBean) owner).getVersionID() == J2EEVersionConstants.EJB_2_1_ID) { + helper.setFeature(CommonPackage.eINSTANCE.getJNDIEnvRefsGroup_ServiceRefs()); + helper.setOwner(owner); + Description descriptionObj = CommonFactory.eINSTANCE.createDescription(); + descriptionObj.setValue(dataModel.getStringProperty(ServiceReferenceDataModel.DESCRIPTION).trim()); + ref.getDescriptions().add(descriptionObj); + ref.setDescription(dataModel.getStringProperty(ServiceReferenceDataModel.DESCRIPTION).trim()); + } else { + j2eeVersion = J2EEVersionConstants.J2EE_1_3_ID; + return createEJB13Helper(owner, helper); + } + break; + case XMLResource.WEB_APP_TYPE : + if (((WebApp) owner).getVersionID() == J2EEVersionConstants.WEB_2_4_ID) { + helper.setFeature(CommonPackage.eINSTANCE.getJNDIEnvRefsGroup_ServiceRefs()); + helper.setOwner(owner); + Description descriptionObj = CommonFactory.eINSTANCE.createDescription(); + descriptionObj.setValue(dataModel.getStringProperty(ServiceReferenceDataModel.DESCRIPTION).trim()); + ref.getDescriptions().add(descriptionObj); + ref.setDescription(dataModel.getStringProperty(ServiceReferenceDataModel.DESCRIPTION).trim()); + } else { + helper.setFeature(Webservice_clientPackage.eINSTANCE.getWebServicesClient_ServiceRefs()); + helper.setOwner(WebServicesManager.getInstance().getDefaultWebServicesResource(owner, (J2EEEditModel) editModel).getWebServicesClient()); + ref.setDescription(dataModel.getStringProperty(ServiceReferenceDataModel.DESCRIPTION).trim()); + j2eeVersion = J2EEVersionConstants.J2EE_1_3_ID; + } + break; + } + } + + ref.setServiceRefName(dataModel.getStringProperty(ServiceReferenceDataModel.REF_NAME).trim()); + String serviceInterfaceName = dataModel.getServiceInterfaceName(); + ref.setServiceInterface((JavaClass) JavaRefFactory.eINSTANCE.reflectType(serviceInterfaceName, (EObject) dataModel.getProperty(ServiceReferenceDataModel.OWNER))); + ref.setWsdlFile(dataModel.getStringProperty(ServiceReferenceDataModel.WSDL_FILE).trim()); + if (dataModel.getStringProperty(ServiceReferenceDataModel.JAX_RPC_MAPPING_FILE) != null && !dataModel.getStringProperty(ServiceReferenceDataModel.JAX_RPC_MAPPING_FILE).equals("")) //$NON-NLS-1$ + ref.setJaxrpcMappingFile(dataModel.getStringProperty(ServiceReferenceDataModel.JAX_RPC_MAPPING_FILE).trim()); + QName qName = ((CommonPackage) EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI)).getCommonFactory().createQName(); + + if (j2eeVersion == J2EEVersionConstants.J2EE_1_3_ID) { + qName.setLocalPart(dataModel.getStringProperty(ServiceReferenceDataModel.QNAME_lOCAL_PART)); + qName.setNamespaceURI(dataModel.getStringProperty(ServiceReferenceDataModel.QNAME_NAMESPACE_URI)); + } else { + qName.setValues("prefix", dataModel.getStringProperty(ServiceReferenceDataModel.QNAME_NAMESPACE_URI), dataModel.getStringProperty(ServiceReferenceDataModel.QNAME_lOCAL_PART)); //$NON-NLS-1$ + } + ref.setServiceQname(qName); + ref.setDescription(dataModel.getStringProperty(ServiceReferenceDataModel.DESCRIPTION).trim()); + helper.setValue(ref); + return helper; + } + + /* + * @see SimpleCommandWizardPage#createCommandHelper() + */ + public void createPortCompRefHelpers() { + ModifierHelper helper = null; + if (dataModel != null) { + helper = new ModifierHelper(); + String[] serEndpoints = dataModel.getServiceEndpointInterfaceNames(); + if (serEndpoints == null || serEndpoints.length == 0) + return; + String serviceEndpointInterface; + for (int i = 0; i < serEndpoints.length; i++) { + PortComponentRef portCompRef = Webservice_clientFactory.eINSTANCE.createPortComponentRef(); + helper.setOwner(ref); + serviceEndpointInterface = serEndpoints[i]; + portCompRef.setServiceEndpointInterface((JavaClass) JavaRefFactory.eINSTANCE.reflectType(serviceEndpointInterface, (EObject) dataModel.getProperty(ServiceReferenceDataModel.OWNER))); + helper.setFeature(Webservice_clientPackage.eINSTANCE.getServiceRef_PortComponentRefs()); + helper.setValue(portCompRef); + modifier.addHelper(helper); + } + } + } + + /** + * @return + */ + private ModifierHelper createEJB13Helper(EObject ownerEJB, ModifierHelper helper) { + ref = Webservice_clientFactory.eINSTANCE.createServiceRef(); + WebServicesClient webServiceClient = WebServicesManager.getInstance().getDefaultWebServicesResource(ownerEJB, (J2EEEditModel) editModel).getWebServicesClient(); + + ref.setServiceRefName(dataModel.getStringProperty(ServiceReferenceDataModel.REF_NAME).trim()); + String serviceInterfaceName = dataModel.getServiceInterfaceName(); + ref.setServiceInterface((JavaClass) JavaRefFactory.eINSTANCE.reflectType(serviceInterfaceName, (EObject) dataModel.getProperty(ServiceReferenceDataModel.OWNER))); + ref.setWsdlFile(dataModel.getStringProperty(ServiceReferenceDataModel.WSDL_FILE).trim()); + if (dataModel.getStringProperty(ServiceReferenceDataModel.JAX_RPC_MAPPING_FILE) != null && !dataModel.getStringProperty(ServiceReferenceDataModel.JAX_RPC_MAPPING_FILE).equals("")) //$NON-NLS-1$ + ref.setJaxrpcMappingFile(dataModel.getStringProperty(ServiceReferenceDataModel.JAX_RPC_MAPPING_FILE).trim()); + QName qName = ((CommonPackage) EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI)).getCommonFactory().createQName(); + qName.setLocalPart(dataModel.getStringProperty(ServiceReferenceDataModel.QNAME_lOCAL_PART)); + qName.setNamespaceURI(dataModel.getStringProperty(ServiceReferenceDataModel.QNAME_NAMESPACE_URI)); + ref.setServiceQname(qName); + ref.setDescription(dataModel.getStringProperty(ServiceReferenceDataModel.DESCRIPTION).trim()); + + ComponentScopedRefs compScopedRef = getComponentScopedRef((EnterpriseBean) ownerEJB, webServiceClient); + if (compScopedRef == null) { + compScopedRef = Webservice_clientFactory.eINSTANCE.createComponentScopedRefs(); + compScopedRef.setComponentName(((EnterpriseBean) ownerEJB).getName()); + helper.setOwner(webServiceClient); + helper.setFeature(Webservice_clientPackage.eINSTANCE.getWebServicesClient_ComponentScopedRefs()); + compScopedRef.getServiceRefs().add(ref); + helper.setValue(compScopedRef); + } else { + helper.setOwner(compScopedRef); + helper.setFeature(Webservice_clientPackage.eINSTANCE.getComponentScopedRefs_ServiceRefs()); + helper.setValue(ref); + } + return helper; + } + + /** + * @param webServiceRes + * @return + */ + private ComponentScopedRefs getComponentScopedRef(EnterpriseBean ownerEJB, WebServicesClient webServiceClient) { + List existingRefs = webServiceClient.getComponentScopedRefs(); + if (existingRefs != null) { + for (int i = 0; i < existingRefs.size(); i++) { + if (((ComponentScopedRefs) existingRefs.get(i)).getComponentName().equals(ownerEJB.getName())) { + return (ComponentScopedRefs) existingRefs.get(i); + } + } + } + return null; + } +}
diff --git a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/reference/ServiceReferenceDataModel.java b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/reference/ServiceReferenceDataModel.java new file mode 100644 index 0000000..d6725d6 --- /dev/null +++ b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/reference/ServiceReferenceDataModel.java
@@ -0,0 +1,318 @@ +package org.eclipse.jst.j2ee.internal.reference; + +import org.eclipse.wst.wsdl.Service; +import javax.xml.namespace.QName; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Path; +import org.eclipse.emf.common.util.URI; +import org.eclipse.jst.j2ee.common.XMLResource; +import org.eclipse.jst.j2ee.internal.project.J2EECreationResourceHandler; +import org.eclipse.jst.j2ee.internal.webservices.WebServicesClientDataHelper; +import org.eclipse.wst.common.frameworks.internal.operations.WTPOperation; +import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper; +import org.eclispe.wst.common.frameworks.internal.plugin.WTPCommonPlugin; + +import com.ibm.wtp.emf.workbench.ProjectUtilities; + +public class ServiceReferenceDataModel extends ReferenceDataModel implements WebServicesClientDataHelper { + /** + * Required, type String + */ + public static final String TARGET_WEB_SERVICE = "ServiceReferenceDataModel.TARGET_WEB_SERVICE"; //$NON-NLS-1$ + /** + * Required, type String + */ + public static final String WSDL_FILE = "ServiceReferenceDataModel.WSDL_FILE"; //$NON-NLS-1$ + /** + * Required, type String + */ + public static final String JAX_RPC_MAPPING_FILE = "ServiceReferenceDataModel.JAX_RPC_MAPPING_FILE"; //$NON-NLS-1$ + /** + * Required, type String + */ + public static final String QNAME_NAMESPACE_URI = "ServiceReferenceDataModel.QNAME_NAMESPACE_URI"; //$NON-NLS-1$ + /** + * Required, type String + */ + public static final String QNAME_lOCAL_PART = "ServiceReferenceDataModel.QNAME_lOCAL_PART"; //$NON-NLS-1$ + /** + * Required, type String + */ + public static final String WSDL_URL = "ServiceReferenceDataModel.WSDL_URL"; //$NON-NLS-1$ + /** + * Required, type String + */ + public static final String QNAME = "ServiceReferenceDataModel.QNAME"; //$NON-NLS-1$ + /** + * Required, type String + */ + public static final String LINKS = "ServiceReferenceDataModel.LINK"; //$NON-NLS-1$ + + private String[] serviceEndpointInterfaceNames = null; + private String serviceInterfaceName = null; + private boolean didGenDescriptor = false; + + /* + * (non-Javadoc) + * + * @see com.ibm.wtp.emf.workbench.operation.EditModelOperationDataModel#initValidBaseProperties() + */ + protected void initValidBaseProperties() { + addValidBaseProperty(TARGET_WEB_SERVICE); + addValidBaseProperty(WSDL_FILE); + addValidBaseProperty(JAX_RPC_MAPPING_FILE); + addValidBaseProperty(QNAME_NAMESPACE_URI); + addValidBaseProperty(QNAME_lOCAL_PART); + addValidBaseProperty(WSDL_URL); + addValidBaseProperty(QNAME); + addValidBaseProperty(LINKS); + super.initValidBaseProperties(); + } + + /* + * (non-Javadoc) + * + * @see com.ibm.etools.j2ee.reference.ReferenceDataModel#doSetProperty(java.lang.String, + * java.lang.Object) + */ + protected boolean doSetProperty(String propertyName, Object propertyValue) { + boolean doSet = super.doSetProperty(propertyName, propertyValue); + if (propertyName.equals(TARGET_WEB_SERVICE)) { + notifyDefaultChange(REF_NAME); + notifyDefaultChange(WSDL_FILE); + notifyDefaultChange(WSDL_URL); + notifyDefaultChange(QNAME); + notifyDefaultChange(QNAME_NAMESPACE_URI); + notifyDefaultChange(QNAME_lOCAL_PART); + } + return doSet; + } + + protected Object getLocationForServiceFromWSIL(Service wsdl) { + // Fix to get "external" workspace wsdl file because wsilparser uses generic resource set + if (wsdl.eResource() == null) + return wsdl.getEnclosingDefinition().getLocation(); + URI uri = wsdl.eResource().getURI(); + IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); + IPath rootPath = root.getLocation(); + IPath wsdlPath = new Path(uri.toFileString()); + if (wsdlPath.matchingFirstSegments(rootPath) == rootPath.segmentCount()) { + IFile wsdlFile = root.getFile(wsdlPath.removeFirstSegments(rootPath.segmentCount())); + if (wsdlFile.exists()) { + return wsdlFile.getProjectRelativePath().removeFirstSegments(1).toString(); + } + } + return null; + } + + protected Object getDefaultProperty(String propertyName) { + if (propertyName.equals(REF_NAME)) { + Service wsdl = (Service) getProperty(TARGET_WEB_SERVICE); + if (wsdl != null) + return "service/" + wsdl.getQName().getLocalPart(); //$NON-NLS-1$ + } else if (propertyName.equals(WSDL_FILE)) { + Service wsdl = (Service) getProperty(TARGET_WEB_SERVICE); + if (wsdl != null) { + boolean isInternal = WorkbenchResourceHelper.getFile(wsdl) != null && WorkbenchResourceHelper.getFile(wsdl).exists(); + if (isInternal) + return WorkbenchResourceHelper.getFile(wsdl).getProjectRelativePath().removeFirstSegments(1).toString(); + + Object location = getLocationForServiceFromWSIL(wsdl); + if (location != null) + return location; + } + } else if (propertyName.equals(WSDL_URL)) { + Service wsdl = (Service) getProperty(TARGET_WEB_SERVICE); + if (wsdl != null) { + boolean isInternal = WorkbenchResourceHelper.getFile(wsdl) != null && WorkbenchResourceHelper.getFile(wsdl).exists(); + if (isInternal) + return "file:/" + WorkbenchResourceHelper.getFile(wsdl).getRawLocation().toString(); //$NON-NLS-1$ + return wsdl.getEnclosingDefinition().getLocation(); + } + } else if (propertyName.equals(QNAME)) { + Service wsdl = (Service) getProperty(TARGET_WEB_SERVICE); + if (wsdl != null) + return wsdl.getQName(); + } else if (propertyName.equals(QNAME_NAMESPACE_URI)) { + Service wsdl = (Service) getProperty(TARGET_WEB_SERVICE); + if (wsdl != null) { + QName qName = wsdl.getQName(); + if (qName != null) + return qName.getNamespaceURI(); + } + } else if (propertyName.equals(QNAME_lOCAL_PART)) { + Service wsdl = (Service) getProperty(TARGET_WEB_SERVICE); + if (wsdl != null) { + QName qName = wsdl.getQName(); + if (qName != null) + return qName.getLocalPart(); + } + } + return super.getDefaultProperty(propertyName); + } + + /* + * (non-Javadoc) + * + * @see com.ibm.etools.j2ee.reference.ReferenceDataModel#doValidateProperty(java.lang.String) + */ + protected IStatus doValidateProperty(String propertyName) { + IStatus stat = super.doValidateProperty(propertyName); + if (!(getProperty(TARGET_WEB_SERVICE) instanceof Service)) { + return WTPCommonPlugin.createErrorStatus(J2EECreationResourceHandler.getString("ServiceReferenceDataModel_ERROR_8")); //$NON-NLS-1$ + } + return stat; + } + + /* + * (non-Javadoc) + * + * @see com.ibm.wtp.common.operation.WTPOperationDataModel#getDefaultOperation() + */ + public WTPOperation getDefaultOperation() { + return new ServiceReferenceCreationOperation(this); + } + + /* + * (non-Javadoc) + * + * @see com.ibm.wtp.j2ee.webservices.WebServicesClientDataHelper#getWSDLUrl() + */ + public String getWSDLUrl() { + return getStringProperty(WSDL_URL); + } + + /* + * (non-Javadoc) + * + * @see com.ibm.wtp.j2ee.webservices.WebServicesClientDataHelper#getServiceQName() + */ + public String getServiceQName() { + return getStringProperty(QNAME_NAMESPACE_URI) + ":" + getStringProperty(QNAME_lOCAL_PART); //$NON-NLS-1$ + } + + /* + * (non-Javadoc) + * + * @see com.ibm.wtp.j2ee.webservices.WebServicesClientDataHelper#getServiceInterfaceName() + */ + public String getServiceInterfaceName() { + return serviceInterfaceName; + } + + /* + * (non-Javadoc) + * + * @see com.ibm.wtp.j2ee.webservices.WebServicesClientDataHelper#getServiceEndpointInterfaceNames() + */ + public String[] getServiceEndpointInterfaceNames() { + return serviceEndpointInterfaceNames; + } + + + /* + * (non-Javadoc) + * + * @see com.ibm.wtp.j2ee.webservices.WebServicesClientDataHelper#setServiceInterfaceName(java.lang.String) + */ + public void setServiceInterfaceName(String name) { + serviceInterfaceName = name; + } + + /* + * (non-Javadoc) + * + * @see com.ibm.wtp.j2ee.webservices.WebServicesClientDataHelper#setServiceEndpointInterfaceNames(java.lang.String[]) + */ + public void setServiceEndpointInterfaceNames(String[] names) { + serviceEndpointInterfaceNames = names; + } + + /* + * (non-Javadoc) + * + * @see com.ibm.wtp.j2ee.webservices.WebServicesClientDataHelper#getProjectName() + */ + public String getProjectName() { + Object owner = getProperty(OWNER); + String name = ProjectUtilities.getProject(owner).getName(); + return name; + } + + /* + * (non-Javadoc) + * + * @see com.ibm.wtp.j2ee.webservices.WebServicesClientDataHelper#getOutputWSDLFileName() + */ + public String getOutputWSDLFileName() { + Object owner = getProperty(OWNER); + String outputLocation = null; + IProject project; + switch (getDeploymentDescriptorType()) { + case XMLResource.APP_CLIENT_TYPE : + project = ProjectUtilities.getProject(owner); + outputLocation = project.getFullPath().toString() + "\\appClientModule\\META-INF\\"; //$NON-NLS-1$ + break; + case XMLResource.EJB_TYPE : + project = ProjectUtilities.getProject(owner); + outputLocation = project.getFullPath().toString() + "\\ejbModule\\META-INF\\"; //$NON-NLS-1$ + break; + case XMLResource.WEB_APP_TYPE : + project = ProjectUtilities.getProject(owner); + outputLocation = project.getFullPath().toString() + "\\Web Content\\WEB-INF\\"; //$NON-NLS-1$ + break; + } + if (getProperty(TARGET_WEB_SERVICE) == null) + return ""; //$NON-NLS-1$ + return outputLocation + ((Service) getProperty(TARGET_WEB_SERVICE)).getQName().getLocalPart() + ".wsdl"; //$NON-NLS-1$ + } + + /* + * (non-Javadoc) + * + * @see com.ibm.wtp.j2ee.webservices.WebServicesClientDataHelper#shouldDeploy() + */ + public boolean shouldDeploy() { + return false; + } + + /* + * (non-Javadoc) + * + * @see com.ibm.wtp.j2ee.webservices.WebServicesClientDataHelper#shouldGenDescriptors() + */ + public boolean shouldGenDescriptors() { + return false; + } + + /* + * (non-Javadoc) + * + * @see com.ibm.wtp.j2ee.webservices.WebServicesClientDataHelper#setDidGenDescriptors(boolean) + */ + public void setDidGenDescriptors(boolean b) { + didGenDescriptor = b; + } + + public boolean didGenDescriptors() { + return didGenDescriptor; + } + + /* + * (non-Javadoc) + * + * @see com.ibm.wtp.common.operation.WTPOperationDataModel#isResultProperty(java.lang.String) + */ + protected boolean isResultProperty(String propertyName) { + if (propertyName.equals(JAX_RPC_MAPPING_FILE)) + return true; + return super.isResultProperty(propertyName); + } + +}
diff --git a/plugins/org.eclipse.jst.j2ee/plugin.xml b/plugins/org.eclipse.jst.j2ee/plugin.xml index efd5d60..2d9ef3f 100644 --- a/plugins/org.eclipse.jst.j2ee/plugin.xml +++ b/plugins/org.eclipse.jst.j2ee/plugin.xml
@@ -42,6 +42,8 @@ <import plugin="org.eclipse.jdt.launching"/> <import plugin="org.eclipse.jface"/> <import plugin="org.eclipse.jst.common.frameworks"/> + <import plugin="org.eclipse.wst.wsdl"/> + <import plugin="org.eclipse.wst.ws.parser"/> </requires>