Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common')
-rw-r--r--core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/DefaultingUtils.java303
-rw-r--r--core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/FacetOperationDelegate.java346
-rw-r--r--core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/FinishFragment.java35
-rw-r--r--core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/HandlerDescriptionHelper.java67
-rw-r--r--core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/HandlerDescriptionHolder.java137
-rw-r--r--core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/HandlerServiceRefHelper.java72
-rw-r--r--core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/HandlerServiceRefHolder.java118
-rw-r--r--core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/IWebServiceOSGISupportExtension.java34
-rw-r--r--core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/LabelsAndIds.java65
-rw-r--r--core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ScenarioCleanupCommand.java52
-rw-r--r--core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ServerSelectionUtils.java133
-rw-r--r--core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ValidationUtils.java1155
12 files changed, 2517 insertions, 0 deletions
diff --git a/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/DefaultingUtils.java b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/DefaultingUtils.java
new file mode 100644
index 000000000..92526e58f
--- /dev/null
+++ b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/DefaultingUtils.java
@@ -0,0 +1,303 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2015 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
+ * yyyymmdd bug Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20060427 138058 joan@ca.ibm.com - Joan Haggarty
+ * 20070723 194434 kathy@ca.ibm.com - Kathy Chan, Check for non-existing EAR with content not deleted
+ * 20150311 461526 jgwest@ca.ibm.com - Jonathan West, Allow OSGi bundles to be selected in the Wizard
+ *******************************************************************************/
+package org.eclipse.jst.ws.internal.consumption.ui.common;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
+import org.eclipse.jst.ws.internal.common.J2EEUtils;
+import org.eclipse.jst.ws.internal.common.ResourceUtils;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+
+public class DefaultingUtils {
+
+ // Immutable map
+ private static final Map<String /*template id*/, IWebServiceOSGISupportExtension> osgiExtensions;
+
+ private static final String EXTENSION_POINT_WS_OSGI_SUPPORT = "webServiceOSGISupport";
+ private static final String OSGI_SUPPORT_ELEMENT = "webServiceOSGISupport";
+ private static final String OSGI_SUPPORT_CLASS_ATTR = "class";
+
+ private static final String OSGI_SUPPORT_TEMPLATES_ATTR = "applicableTemplates";
+
+ static {
+
+ Map<String, IWebServiceOSGISupportExtension> result = new HashMap<String, IWebServiceOSGISupportExtension>();
+
+ try {
+ IExtensionRegistry reg = Platform.getExtensionRegistry();
+
+ IConfigurationElement[] wsImplExts = reg.getConfigurationElementsFor(
+ "org.eclipse.jst.ws.consumption.ui", EXTENSION_POINT_WS_OSGI_SUPPORT);
+
+ for(int idx=0; idx<wsImplExts.length; idx++)
+ {
+ IConfigurationElement elem = wsImplExts[idx];
+ if (elem.getName().equals(OSGI_SUPPORT_ELEMENT))
+ {
+ try {
+ String applicableTemplatesStr = elem.getAttribute(OSGI_SUPPORT_TEMPLATES_ATTR);
+ if(applicableTemplatesStr != null) {
+
+ IWebServiceOSGISupportExtension provider = (IWebServiceOSGISupportExtension) elem.createExecutableExtension(OSGI_SUPPORT_CLASS_ATTR);
+
+ if(provider != null) {
+ // Split by all whitespace
+ String[] templates = applicableTemplatesStr.split("\\s+");
+ for(String template : templates) {
+ result.put(template.toLowerCase(), provider);
+ }
+ }
+ }
+
+ } catch (CoreException e) {
+ // Ignore issues with individual implementors
+ e.printStackTrace();
+ }
+
+ }
+ }
+ } finally {
+ osgiExtensions = Collections.unmodifiableMap(result);
+ }
+
+ }
+
+ public DefaultingUtils()
+ {
+
+ }
+
+ /**
+ *
+ * Uses the following steps to determine a valid default EAR project name:
+ *
+ * 1. If project does exist:
+ * a - look for an existing, referencing EAR component, if one exists return that EAR name
+ * b - look for an existing EAR component with the same J2EE version as the project
+ * 2. If can't find an appropriate existing EAR component or project does not exist in the
+ * workspace, return a new EAR name of form projectNameEAR
+ * 3. If project name is null or an empty string return the default EAR name
+ *
+ * @param projectName a string representing the name of the project for the service
+ * @return a string to be used as the default EAR project name for the project name provided
+ */
+ public static String getDefaultEARProjectName(String projectName)
+ {
+
+ if (projectName != null && projectName.length() > 0) {
+
+ if(isOSGIProject(projectName))
+ {
+ return getDefaultOSGIAppProjectName(projectName);
+ }
+
+ IProject proj = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+
+ if (proj.exists()) {
+
+ //Step 1a - return a referencing EAR project
+ IVirtualComponent[] ears = J2EEUtils.getReferencingEARComponents(proj);
+ if (ears != null && ears.length > 0) {
+ return ears[0].getName();
+ }
+
+ //Step 1b - return an appropriate existing EAR project
+ IVirtualComponent[] allEarComps = J2EEUtils.getAllEARComponents();
+
+ if (allEarComps.length > 0)
+ {
+ for (int i=0; i < allEarComps.length; i++)
+ {
+ IProject earProject = allEarComps[i].getProject();
+ boolean canAssociate = J2EEUtils.canAssociateProjectToEARWithoutWarning(proj, earProject);
+ if (canAssociate)
+ {
+ return allEarComps[i].getName();
+ }
+ }
+ }
+ }
+
+
+ String baseEARName = projectName + ResourceUtils.getDefaultEARExtension();
+ String earName = baseEARName;
+
+ boolean foundEAR = false;
+ int i = 1;
+
+ while (!foundEAR) {
+ // 194434 - Check for non-existing EAR with contents that's not deleted previously
+ IStatus canCreateEARStatus = J2EEUtils.canCreateEAR(ProjectUtilities.getProject(earName));
+ if (canCreateEARStatus.isOK()) {
+ foundEAR = true;
+ } else {
+ earName = baseEARName + i;
+ i++;
+ }
+ }
+
+
+ //Step 2 - return project name with EAR on the end
+ return earName;
+ }
+
+ //Step 3 - return the default EAR project name
+ return ResourceUtils.getDefaultServiceEARProjectName();
+ }
+
+ public static boolean isOSGITemplate(String name)
+ {
+ if(name == null) { return false; }
+
+ try {
+ if(osgiExtensions == null) { return false; }
+
+ for(String template : osgiExtensions.keySet())
+ {
+ if(name.equalsIgnoreCase(template.trim()))
+ {
+ return true;
+ }
+
+ }
+
+ } catch(Exception e)
+ {
+ // Ignore; first, do no harm.
+ e.printStackTrace();
+ }
+
+ return false;
+ }
+
+ private static IProject utilFindProjectWithName(String proj)
+ {
+ if(proj == null)
+ {
+ return null;
+ }
+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+
+ IProject project = root.getProject(proj);
+ return project;
+ }
+
+ public static boolean isOSGIProject(String proj)
+ {
+ try
+ {
+ IProject project = utilFindProjectWithName(proj);
+ if(project == null)
+ {
+ return false;
+ } else {
+ return isSupportedOSGIProject(project);
+ }
+ } catch(Exception e)
+ {
+ // First, do no harm.
+ e.printStackTrace();
+ return false;
+ }
+
+ }
+
+
+
+ public static boolean isSupportedOSGIProject(IProject project)
+ {
+ try {
+
+ if(osgiExtensions == null || project == null) { return false; }
+
+ for(Map.Entry<String, IWebServiceOSGISupportExtension> entry : osgiExtensions.entrySet())
+ {
+
+ if(entry.getValue().isSupportedOSGIProject(project))
+ {
+ return true;
+ }
+
+ }
+
+ return false;
+
+ } catch(Exception e) {
+ // First, do no harm.
+ e.printStackTrace();
+ return false;
+ }
+
+ }
+
+ /** Return the interface of the first extension that says it supports this project */
+ private static IWebServiceOSGISupportExtension getFirstSupportedExtension(String projectName)
+ {
+ IProject proj = utilFindProjectWithName(projectName);
+ if(proj == null) { return null; }
+
+ for(Map.Entry<String, IWebServiceOSGISupportExtension> entry : osgiExtensions.entrySet())
+ {
+
+ if(entry.getValue().isSupportedOSGIProject(proj))
+ {
+ return entry.getValue();
+ }
+
+ }
+
+ return null;
+
+ }
+
+ public static String getDefaultOSGIAppProjectName(String projectName)
+ {
+ try
+ {
+ if(osgiExtensions == null || projectName == null) { return null; }
+
+ IWebServiceOSGISupportExtension ext = getFirstSupportedExtension(projectName);
+
+ if(ext != null)
+ {
+ return ext.getDefaultOSGIAppProjectName(projectName);
+ }
+
+ } catch(Exception e)
+ {
+ // First, do no harm.
+ e.printStackTrace();
+ }
+
+
+ return projectName+".app";
+
+ }
+
+
+
+}
diff --git a/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/FacetOperationDelegate.java b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/FacetOperationDelegate.java
new file mode 100644
index 000000000..5abbc8cb6
--- /dev/null
+++ b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/FacetOperationDelegate.java
@@ -0,0 +1,346 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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
+ * yyyymmdd bug Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20090303 242635 mahutch@ca.ibm.com - Mark Hutchinson, Remove unnecessary UI dependencies from org.eclipse.jst.ws.consumption
+ * 20090819 286874 zina@ca.ibm.com - Zina Mostafia
+ *******************************************************************************/
+package org.eclipse.jst.ws.internal.consumption.ui.common;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jst.ws.internal.common.J2EEUtils;
+import org.eclipse.jst.ws.internal.consumption.ConsumptionMessages;
+import org.eclipse.jst.ws.internal.consumption.common.FacetUtils;
+import org.eclipse.jst.ws.internal.consumption.common.IFacetOperationDelegate;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.command.internal.env.core.common.StatusUtils;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
+import org.osgi.framework.Bundle;
+
+public class FacetOperationDelegate implements IFacetOperationDelegate {
+
+ public IStatus addFacetsToProject(final IFacetedProject fproject, final Set projectFacetVersions) {
+ final IStatus[] status = new IStatus[1];
+ status[0] = Status.OK_STATUS;
+ final Set actions = FacetUtils.getInstallActions(projectFacetVersions);
+
+ // Create a runnable that applies the install actions to the faceted project
+ IRunnableWithProgress runnable = new IRunnableWithProgress() {
+ public void run(IProgressMonitor shellMonitor) throws InvocationTargetException, InterruptedException {
+ try {
+ fproject.modify(actions, shellMonitor);
+ fixEJBClassPath(fproject);
+ } catch (CoreException e) {
+ status[0] = getErrorStatusForAddingFacets(fproject.getProject().getName(), projectFacetVersions, e);
+ }
+ }
+ };
+
+ // Run the runnable in another thread unless there is no UI thread (Ant scenarios)
+ if (displayPresent()) {
+ try {
+ PlatformUI.getWorkbench().getProgressService().run(true, false, runnable);
+ } catch (InvocationTargetException ite) {
+ status[0] = getErrorStatusForAddingFacets(fproject.getProject().getName(), projectFacetVersions, ite);
+ } catch (InterruptedException ie) {
+ status[0] = getErrorStatusForAddingFacets(fproject.getProject().getName(), projectFacetVersions, ie);
+ }
+ } else {
+ try {
+ fproject.modify(actions, null);
+ fixEJBClassPath(fproject);
+ } catch (CoreException e) {
+ status[0] = getErrorStatusForAddingFacets(fproject.getProject().getName(), projectFacetVersions, e);
+ }
+ }
+
+ return status[0];
+ }
+
+ private void fixEJBClassPath(IFacetedProject project) {
+ if (!J2EEUtils.isEJBComponent(project.getProject())) return;
+ IProject ejbProject = project.getProject();
+ IJavaProject javaProject = JavaCore.create(ejbProject);
+ Path projectRoot = new Path(Path.ROOT.append(new Path(ejbProject.getName())).toString());
+ IPath ejbModulePath = projectRoot.append("ejbModule");
+ try {
+ IClasspathEntry[] originalSet = javaProject.getRawClasspath();
+ boolean foundEJBModulEntry = false;
+ for (IClasspathEntry entry : originalSet) {
+ if (entry.getPath().equals(ejbModulePath))
+ foundEJBModulEntry = true;
+ }
+ if (!foundEJBModulEntry) {
+ IClasspathEntry[] newSet = new IClasspathEntry[originalSet.length + 1];
+ int i=0;
+
+ for (IClasspathEntry entry : originalSet) {
+ newSet[i++] = entry;
+ }
+ newSet[i] = JavaCore.newSourceEntry(ejbModulePath);
+ javaProject.setRawClasspath(newSet,null);
+ }
+ }
+ catch (Exception e) {
+ // TODO: handle exception
+ }
+
+ }
+
+ public IStatus createNewFacetedProject(final String projectName) {
+ final IStatus[] status = new IStatus[1];
+ status[0] = Status.OK_STATUS;
+ IProject project = ProjectUtilities.getProject(projectName);
+ if (!project.exists()) {
+ // Create a runnable that creates a new faceted project.
+ IRunnableWithProgress runnable = new IRunnableWithProgress() {
+ public void run(IProgressMonitor shellMonitor) throws InvocationTargetException, InterruptedException {
+ try {
+ IFacetedProject fProject = ProjectFacetsManager.create(projectName, null, shellMonitor);
+ if (fProject == null) {
+ status[0] = StatusUtils.errorStatus(NLS.bind(ConsumptionMessages.MSG_ERROR_PROJECT_CREATION, new String[] { projectName }));
+ }
+ } catch (CoreException e) {
+ status[0] = StatusUtils.errorStatus(NLS.bind(ConsumptionMessages.MSG_ERROR_PROJECT_CREATION, new String[] { projectName }), e);
+ }
+ }
+ };
+
+ // Run the runnable in another thread unless there is no UI thread (Ant scenarios)
+ try {
+ if (displayPresent()) {
+ PlatformUI.getWorkbench().getProgressService().run(true, false, runnable);
+ } else {
+ try {
+ IFacetedProject fProject = ProjectFacetsManager.create(projectName, null, null);
+ if (fProject == null) {
+ status[0] = StatusUtils.errorStatus(NLS.bind(ConsumptionMessages.MSG_ERROR_PROJECT_CREATION, new String[] { projectName }));
+ }
+ } catch (CoreException e) {
+ status[0] = StatusUtils.errorStatus(NLS.bind(ConsumptionMessages.MSG_ERROR_PROJECT_CREATION, new String[] { projectName }), e);
+ }
+ }
+ } catch (InvocationTargetException ite) {
+ status[0] = StatusUtils.errorStatus(NLS.bind(ConsumptionMessages.MSG_ERROR_PROJECT_CREATION, new String[] { projectName }), ite);
+ } catch (InterruptedException ie) {
+ status[0] = StatusUtils.errorStatus(NLS.bind(ConsumptionMessages.MSG_ERROR_PROJECT_CREATION, new String[] { projectName }), ie);
+ }
+ }
+
+ return status[0];
+ }
+
+ public IStatus setFacetRuntimeOnProject(final IFacetedProject fProject, final IRuntime fRuntime) {
+ final IStatus[] status = new IStatus[1];
+ status[0] = Status.OK_STATUS;
+
+ // Create a runnable that sets the facet runtime on the faceted project
+ IRunnableWithProgress runnable = new IRunnableWithProgress() {
+ public void run(IProgressMonitor shellMonitor) throws InvocationTargetException, InterruptedException {
+ try {
+ fProject.setTargetedRuntimes(Collections.singleton(fRuntime), shellMonitor);
+ } catch (CoreException e) {
+ status[0] = StatusUtils.errorStatus(NLS.bind(ConsumptionMessages.MSG_ERROR_SETTING_RUNTIME, new String[] { fProject.getProject().getName(), fRuntime.getName() }), e);
+ }
+ }
+ };
+
+ // Run the runnable in another thread unless there is no UI thread (Ant scenarios)
+ if (displayPresent()) {
+ try {
+ PlatformUI.getWorkbench().getProgressService().run(true, false, runnable);
+ } catch (InvocationTargetException ite) {
+ status[0] = StatusUtils.errorStatus(NLS.bind(ConsumptionMessages.MSG_ERROR_SETTING_RUNTIME, new String[] { fProject.getProject().getName(), fRuntime.getName() }), ite);
+ } catch (InterruptedException ie) {
+ status[0] = StatusUtils.errorStatus(NLS.bind(ConsumptionMessages.MSG_ERROR_SETTING_RUNTIME, new String[] { fProject.getProject().getName(), fRuntime.getName() }), ie);
+ }
+ } else {
+ try {
+ fProject.setTargetedRuntimes(Collections.singleton(fRuntime), null);
+
+ } catch (CoreException e) {
+ status[0] = StatusUtils.errorStatus(NLS.bind(ConsumptionMessages.MSG_ERROR_SETTING_RUNTIME, new String[] { fProject.getProject().getName(), fRuntime.getName() }), e);
+ }
+ }
+
+ return status[0];
+ }
+
+ public IStatus setFixedFacetsOnProject(final IFacetedProject fProject, final Set fixedFacets) {
+ final IStatus[] status = new IStatus[1];
+ status[0] = Status.OK_STATUS;
+
+ // Create a runnable that sets the fixed facets on the faceted project
+ IRunnableWithProgress runnable = new IRunnableWithProgress() {
+ public void run(IProgressMonitor shellMonitor) throws InvocationTargetException, InterruptedException {
+ try {
+ fProject.setFixedProjectFacets(fixedFacets);
+ } catch (CoreException e) {
+ status[0] = getErrorStatusForSettingFixedFacets(fProject.getProject().getName(), fixedFacets, e);
+ }
+ }
+ };
+
+ // Run the runnable in another thread unless there is no UI thread (Ant scenarios)
+ if (displayPresent()) {
+ try {
+ PlatformUI.getWorkbench().getProgressService().run(true, false, runnable);
+ } catch (InvocationTargetException ite) {
+ status[0] = getErrorStatusForSettingFixedFacets(fProject.getProject().getName(), fixedFacets, ite);
+ } catch (InterruptedException ie) {
+ status[0] = getErrorStatusForSettingFixedFacets(fProject.getProject().getName(), fixedFacets, ie);
+ }
+ } else {
+ try {
+ fProject.setFixedProjectFacets(fixedFacets);
+ } catch (CoreException e) {
+ status[0] = getErrorStatusForSettingFixedFacets(fProject.getProject().getName(), fixedFacets, e);
+ }
+ }
+
+ return status[0];
+ }
+
+ // Check to see if SWT is active and the Display is present or not
+ private static boolean displayPresent() {
+ Bundle b = Platform.getBundle("org.eclipse.swt");
+ if (b == null) {
+ return false;
+ }
+ if ((b.getState() != Bundle.RESOLVED && b.getState() != Bundle.ACTIVE)) {
+ return false;
+ }
+ try {
+ if (Display.getCurrent() == null) {
+ return false;
+ } else {
+ return true;
+ }
+ } catch (NoClassDefFoundError e1) {
+ return false;
+ } catch (Exception e) {
+ // if the Display class cannot be loaded for whatever reason
+ return false;
+
+ }
+ }
+
+ // the following private methods had to be copied from FacetUtils
+ /**
+ * Returns a translatable delimited list of facet labels derived from the
+ * provided set of facets
+ *
+ * @param facets
+ * a set containing elements of type {@link IProjectFacet}
+ * @return String a delimited list of facet labels
+ */
+ private static String getFacetListMessageString(Set facets) {
+ String facetListMessage = "";
+ int size = facets.size();
+ if (size > 0) {
+ Iterator itr = facets.iterator();
+ IProjectFacet firstProjectFacet = (IProjectFacet) itr.next();
+ facetListMessage = firstProjectFacet.getLabel();
+
+ // Continue appending to facetListMessage until all the facet labels
+ // are in the list.
+ while (itr.hasNext()) {
+ IProjectFacet projectFacet = (IProjectFacet) itr.next();
+ String pfLabel = projectFacet.getLabel();
+ facetListMessage = NLS.bind(ConsumptionMessages.MSG_FACETS, new String[] { facetListMessage, pfLabel });
+ }
+ }
+
+ return facetListMessage;
+ }
+
+ /**
+ * Returns an error status indicating that the facets could not be set as
+ * fixed facets on the faceted project
+ *
+ * @param projectName
+ * a project name to insert in the error message in the IStatus
+ * @param facets
+ * a set containing elements of type {@link IProjectFacet}. The
+ * facets in this set will be listed in the error message in the
+ * IStatus.
+ * @param t
+ * a Throwable which will be inserted in the IStatus
+ * @return an IStatus with severity IStatus.ERROR
+ */
+ private static IStatus getErrorStatusForSettingFixedFacets(String projectName, Set facets, Throwable t) {
+ IStatus status = Status.OK_STATUS;
+ int size = facets.size();
+ if (size > 0) {
+ String facetList = getFacetListMessageString(facets);
+ status = StatusUtils.errorStatus(NLS.bind(ConsumptionMessages.MSG_ERROR_FIXED_FACETS, new String[] { projectName, facetList }), t);
+ }
+
+ return status;
+ }
+
+ /**
+ * Returns an error status indicating that the facet versions could not be
+ * added to the faceted project
+ *
+ * @param projectName
+ * a project name to insert in the error message in the IStatus
+ * @param projectFacetVersions
+ * a set containing elements of type {@link IProjectFacetVersion}
+ * . The facets in this set will be listed in the error message
+ * in the IStatus.
+ * @param t
+ * a Throwable which will be inserted in the IStatus
+ * @return an IStatus with severity IStatus.ERROR
+ */
+ private static IStatus getErrorStatusForAddingFacets(String projectName, Set projectFacetVersions, Throwable t) {
+ IStatus status = Status.OK_STATUS;
+ int size = projectFacetVersions.size();
+ if (size > 0) {
+ Set facets = new HashSet();
+ // Iterate over projectFacetVersions to form a set of IProjectFacets
+ Iterator itr = projectFacetVersions.iterator();
+ while (itr.hasNext()) {
+ IProjectFacetVersion projectFacet = (IProjectFacetVersion) itr.next();
+ IProjectFacet facet = projectFacet.getProjectFacet();
+ facets.add(facet);
+ }
+ String facetList = getFacetListMessageString(facets);
+ status = StatusUtils.errorStatus(NLS.bind(ConsumptionMessages.MSG_ERROR_ADDING_FACETS_TO_PROJECT, new String[] { projectName, facetList }), t);
+ }
+
+ return status;
+ }
+
+}
diff --git a/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/FinishFragment.java b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/FinishFragment.java
new file mode 100644
index 000000000..cd8e70962
--- /dev/null
+++ b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/FinishFragment.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2005 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 May 4, 2004
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.eclipse.jst.ws.internal.consumption.ui.common;
+
+import org.eclipse.jst.ws.internal.consumption.ui.widgets.test.FinishTestFragment;
+import org.eclipse.wst.command.internal.env.core.fragment.SequenceFragment;
+
+
+/**
+ * @author gilberta
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class FinishFragment extends SequenceFragment
+{
+ public FinishFragment()
+ {
+ add(new FinishTestFragment() );
+ }
+}
diff --git a/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/HandlerDescriptionHelper.java b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/HandlerDescriptionHelper.java
new file mode 100644
index 000000000..de63bbbec
--- /dev/null
+++ b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/HandlerDescriptionHelper.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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
+ * yyyymmdd bug Email and other contact information
+ * 20060404 134913 sengpl@ca.ibm.com - Seng Phung-Lu
+ * -------- -------- -----------------------------------------------------------
+ */
+package org.eclipse.jst.ws.internal.consumption.ui.common;
+
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.jst.ws.internal.consumption.ui.widgets.object.HandlerTableItem;
+
+
+
+public class HandlerDescriptionHelper {
+
+ /**
+ * Helper method for getting the HandlerDescriptorHolder given the name
+ * @param hdhs
+ * @param descName
+ * @return
+ */
+ public static HandlerDescriptionHolder getForDescriptionName(HandlerDescriptionHolder[] hdhs, String descName){
+ for (int i=0;i<hdhs.length;i++){
+ String name = hdhs[i].getDescriptionName();
+ if (name!=null && name.equals(descName)){
+ return hdhs[i];
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Helper method for getting all description names
+ * @param hdhs
+ * @return
+ */
+ public static String[] getAllDescriptionNames(HandlerDescriptionHolder[] hdhs){
+ String[] names = new String[hdhs.length];
+ for(int i=0;i<hdhs.length;i++){
+ names[i]=hdhs[i].getDescriptionName();
+ }
+ return names;
+ }
+
+ public static String[] getAllHandlerClassNames(HandlerDescriptionHolder[] hdhs){
+ Vector v = new Vector();
+ for (int i=0;i<hdhs.length;i++){
+ List list = hdhs[i].getHandlerList();
+ if (list!=null && !list.isEmpty()){
+ for (int j=0;j<list.size();j++){
+ HandlerTableItem hti = (HandlerTableItem)list.get(j);
+ v.add(hti.getHandlerClassName());
+ }
+ }
+ }
+ return (String[])v.toArray(new String[0]);
+ }
+}
diff --git a/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/HandlerDescriptionHolder.java b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/HandlerDescriptionHolder.java
new file mode 100644
index 000000000..00cbadde2
--- /dev/null
+++ b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/HandlerDescriptionHolder.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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
+ * yyyymmdd bug Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20060404 134913 sengpl@ca.ibm.com - Seng Phung-Lu
+ * 20060518 142554 sengpl@ca.ibm.com - Seng Phung-Lu
+ *******************************************************************************/
+package org.eclipse.jst.ws.internal.consumption.ui.common;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
+import org.eclipse.jst.j2ee.webservice.wsdd.Handler;
+import org.eclipse.jst.j2ee.webservice.wsdd.PortComponent;
+import org.eclipse.jst.j2ee.webservice.wsdd.WebServiceDescription;
+import org.eclipse.jst.j2ee.webservice.wsdd.WsddFactory;
+import org.eclipse.jst.j2ee.webservice.wsdd.internal.impl.WsddFactoryImpl;
+import org.eclipse.jst.ws.internal.consumption.ui.widgets.object.HandlerTableItem;
+
+
+public class HandlerDescriptionHolder {
+
+ private String descriptionName;
+ private List handlerList;
+ private WebServiceDescription descriptionObject;
+ private IPath sourceOutputPath;
+
+
+ public IPath getSourceOutputPath() {
+ return sourceOutputPath;
+ }
+
+ public void setSourceOutputPath(IPath sourceOutputPath) {
+ this.sourceOutputPath = sourceOutputPath;
+ }
+
+ public IProject getProject(){
+ if (descriptionObject!=null)
+ return ProjectUtilities.getProject(descriptionObject);
+ else
+ return null;
+ }
+
+ /*
+ * get the WebServiceDescription object
+ */
+ public WebServiceDescription getDescriptionObject() {
+ return descriptionObject;
+ }
+
+ /**
+ * set WebServiceDescription object
+ * @param descriptionObject
+ */
+ public void setDescriptionObject(WebServiceDescription descriptionObject) {
+ this.descriptionObject = descriptionObject;
+ }
+
+ /**
+ * get Description name
+ * @return
+ */
+ public String getDescriptionName() {
+ return descriptionName;
+ }
+
+ /**
+ * set Description name
+ * @param descriptionName
+ */
+ public void setDescriptionName(String descriptionName) {
+ this.descriptionName = descriptionName;
+ }
+
+ /**
+ * get List of HandlerTableItem associated with this service description
+ * @return
+ */
+ public List getHandlerList() {
+ return handlerList;
+ }
+
+ /**
+ * set List of HandlerTableItem associated with this service description
+ * @param handlerList
+ */
+ public void setHandlerList(List handlerList) {
+ this.handlerList = handlerList;
+ }
+
+ public void addHandlerToAllPorts(){
+
+ if (handlerList!=null && !handlerList.isEmpty()){
+
+ for (int z=0;z<handlerList.size();z++){
+ HandlerTableItem hti = (HandlerTableItem)handlerList.get(z);
+ if (descriptionObject!=null) {
+ List portComponents = descriptionObject.getPortComponents();
+ for (int x=0;x<portComponents.size();x++){
+ PortComponent wsPort = (PortComponent) portComponents.get(x);
+ List wsHandlers = wsPort.getHandlers();
+ if (wsHandlers!=null){
+ boolean alreadyExists = false;
+ for (int y=0;y<wsHandlers.size();y++){
+ Handler handler = (Handler)wsHandlers.get(y);
+ if (handler.getHandlerClass().equals(hti.getHandlerClassName())){
+ alreadyExists = true;
+ }
+ }
+
+ if (!alreadyExists) {
+ //create it and add to the list
+ WsddFactory wsddFactory = new WsddFactoryImpl();
+ Handler newHandler = wsddFactory.createHandler();
+ newHandler.setHandlerName(hti.getHandlerName());
+ newHandler.setHandlerClass(hti.getHandlerClassName());
+ wsHandlers.add(newHandler);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ }
+
+
+}
diff --git a/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/HandlerServiceRefHelper.java b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/HandlerServiceRefHelper.java
new file mode 100644
index 000000000..3daff3bfd
--- /dev/null
+++ b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/HandlerServiceRefHelper.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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
+ * yyyymmdd bug Email and other contact information
+ * 20060404 134913 sengpl@ca.ibm.com - Seng Phung-Lu
+ * -------- -------- -----------------------------------------------------------
+ */
+package org.eclipse.jst.ws.internal.consumption.ui.common;
+
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.jst.ws.internal.consumption.ui.widgets.object.HandlerTableItem;
+
+
+public class HandlerServiceRefHelper {
+
+ /**
+ * Helper method for getting the HandlerServiceRefHolder given the name
+ * @param hsrh
+ * @param descName
+ * @return
+ */
+ public static HandlerServiceRefHolder getForServiceRefName(HandlerServiceRefHolder[] hsrh, String descName){
+ for (int i=0;i<hsrh.length;i++){
+ String name = hsrh[i].getServiceRefName();
+ if (name!=null && name.equals(descName)){
+ return hsrh[i];
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Gets all the handler Class names associated with each service ref
+ * @param hsrh
+ * @return
+ */
+ public static String[] getAllHandlerClassNames(HandlerServiceRefHolder[] hsrh){
+ Vector v = new Vector();
+ for (int i=0;i<hsrh.length;i++){
+ List list = hsrh[i].getHandlerList();
+ if (list!=null && !list.isEmpty()){
+ for (int j=0;j<list.size();j++){
+ HandlerTableItem hti = (HandlerTableItem)list.get(j);
+ v.add(hti.getHandlerClassName());
+ }
+ }
+ }
+ return (String[])v.toArray(new String[0]);
+ }
+
+ /**
+ * Get all the service Ref names
+ * @param hsrh
+ * @return
+ */
+ public static String[] getAllServiceRefNames(HandlerServiceRefHolder[] hsrh){
+ String[] names = new String[hsrh.length];
+ for(int i=0;i<hsrh.length;i++){
+ names[i]=hsrh[i].getServiceRefName();
+ }
+ return names;
+ }
+
+}
diff --git a/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/HandlerServiceRefHolder.java b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/HandlerServiceRefHolder.java
new file mode 100644
index 000000000..b1b004bdf
--- /dev/null
+++ b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/HandlerServiceRefHolder.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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
+ * yyyymmdd bug Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20060404 134913sengpl@ca.ibm.com - Seng Phung-Lu
+ * 20060517 142339 sengpl@ca.ibm.com - Seng Phung-Lu
+ *******************************************************************************/
+package org.eclipse.jst.ws.internal.consumption.ui.common;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jem.java.JavaClass;
+import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
+import org.eclipse.jst.j2ee.webservice.wsclient.Handler;
+import org.eclipse.jst.j2ee.webservice.wsclient.ServiceRef;
+import org.eclipse.jst.j2ee.webservice.wsclient.Webservice_clientFactory;
+import org.eclipse.jst.j2ee.webservice.wsclient.internal.impl.Webservice_clientFactoryImpl;
+import org.eclipse.jst.ws.internal.common.JavaMOFUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.widgets.object.HandlerTableItem;
+
+
+public class HandlerServiceRefHolder {
+
+ private String serviceRefName;
+ private List handlerList;
+ private ServiceRef serviceRef;
+ private IPath sourceOutputPath;
+
+ public IPath getSourceOutputPath() {
+ return sourceOutputPath;
+ }
+
+ public void setSourceOutputPath(IPath sourceOutputPath) {
+ this.sourceOutputPath = sourceOutputPath;
+ }
+
+ public IProject getProject() {
+ if (serviceRef!=null)
+ return ProjectUtilities.getProject(serviceRef);
+ else
+ return null;
+ }
+
+ public List getHandlerList() {
+ return handlerList;
+ }
+
+ public void setHandlerList(List handlerList) {
+ this.handlerList = handlerList;
+ }
+
+ public ServiceRef getServiceRef() {
+ return serviceRef;
+ }
+
+ public void setServiceRef(ServiceRef serviceRef) {
+ this.serviceRef = serviceRef;
+ }
+
+ public String getServiceRefName() {
+ return serviceRefName;
+ }
+
+ public void setServiceRefName(String serviceRefName) {
+ this.serviceRefName = serviceRefName;
+ }
+
+ public void addHandlerToServiceRef(){
+ if (handlerList!=null && !handlerList.isEmpty()){
+
+ for (int x=0;x<handlerList.size();x++){
+ HandlerTableItem hti = (HandlerTableItem)handlerList.get(x);
+ if (serviceRef!=null){
+ List existingHandlers = serviceRef.getHandlers();
+ boolean alreadyExists = false;
+ for (int i=0;i<existingHandlers.size();i++){
+ Handler handler = (Handler)existingHandlers.get(i);
+ if (handler.getHandlerClass().getJavaName().equals(hti.getHandlerClassName())){
+ alreadyExists = true;
+ }
+ }
+
+ if (!alreadyExists) {
+
+ Webservice_clientFactory wsClientFactory = new Webservice_clientFactoryImpl();
+ Handler newHandler = wsClientFactory.createHandler();
+ newHandler.setHandlerName(hti.getHandlerName());
+ try {
+ IProject project = ProjectUtilities.getProject(serviceRef);
+ if (project!=null) {
+ JavaClass javaClass = JavaMOFUtils.getJavaClass(hti.getHandlerClassName(), project);
+ if (javaClass != null) {
+ newHandler.setHandlerClass(javaClass);
+ }
+ existingHandlers.add(newHandler);
+ }
+ }
+ catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ }
+
+ }
+ }
+ }
+
+}
diff --git a/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/IWebServiceOSGISupportExtension.java b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/IWebServiceOSGISupportExtension.java
new file mode 100644
index 000000000..61f9e53cf
--- /dev/null
+++ b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/IWebServiceOSGISupportExtension.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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
+ */
+package org.eclipse.jst.ws.internal.consumption.ui.common;
+
+import org.eclipse.core.resources.IProject;
+
+/*
+ * Implementing consumers may consume the webServiceOSGISupport extension point, in order to allow OSGi bundles and applications to be supported by the Web Services Wizard.
+ *
+ * Implementing the extension point and this interface will alter the Web Service wizard language from EAR to OSGi when an OSGi supported project is detected.
+ * Likewise, the value of the OSGi App field will be stored in ServiceOsgiAppProjectName, rather than in ServiceEarProjectName.
+ */
+
+public interface IWebServiceOSGISupportExtension {
+
+ /**
+ * Return the default name of a composite OSGi app, given a bundle
+ * 'projectName', for example, MyWebProj would return MyWebProj.app; this is
+ * similar to DefaultingUtils.getDefaultEARProjectName(...)
+ */
+ public String getDefaultOSGIAppProjectName(String projectName);
+
+ /**
+ * Whether or not a given project is an OSGi project that is supported by
+ * this consuming extension.
+ */
+ public boolean isSupportedOSGIProject(IProject project);
+
+}
diff --git a/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/LabelsAndIds.java b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/LabelsAndIds.java
new file mode 100644
index 000000000..a4a6016e5
--- /dev/null
+++ b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/LabelsAndIds.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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
+ * yyyymmdd bug Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20080221 146023 gilberta@ca.ibm.com - Gilbert Andrews
+ * 20080425 221232 gilberta@ca.ibm.com - Gilbert Andrews
+ * 20080616 237298 gilberta@ca.ibm.com - Gilbert Andrews
+ * 20080619 237797 gilberta@ca.ibm.com - Gilbert Andrews
+ *******************************************************************************/
+/**
+ */
+package org.eclipse.jst.ws.internal.consumption.ui.common;
+
+import java.util.Vector;
+
+public class LabelsAndIds
+{
+ private Vector labels_ = new Vector();
+ private Vector ids_ = new Vector();
+
+
+ public void add(String id, String label){
+ ids_.add(id);
+ labels_.add(label);
+ }
+
+ public int size(){
+ return labels_.size();
+ }
+
+ public String getId(int index){
+ if (index < 0 || index + 1 > ids_.size()) return null;
+ return (String)ids_.get(index);
+ }
+
+ public void clear(){
+ labels_.clear();
+ ids_.clear();
+ }
+
+ /**
+ * @return Returns the ids_.
+ */
+ public String[] getIds()
+ {
+ String[] stringArray = new String[ids_.size()];
+ ids_.copyInto(stringArray);
+ return stringArray;
+ }
+
+ public String[] getLabels()
+ {
+ String[] stringArray = new String[ids_.size()];
+ labels_.copyInto(stringArray);
+ return stringArray;
+ }
+
+}
diff --git a/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ScenarioCleanupCommand.java b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ScenarioCleanupCommand.java
new file mode 100644
index 000000000..a9b44f6b5
--- /dev/null
+++ b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ScenarioCleanupCommand.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 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
+ * yyyymmdd bug Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20060825 155114 pmoogk@ca.ibm.com - Peter Moogk
+ *******************************************************************************/
+
+package org.eclipse.jst.ws.internal.consumption.ui.common;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jst.ws.internal.consumption.common.WSDLParserFactory;
+import org.eclipse.jst.ws.internal.consumption.ui.widgets.object.ObjectSelectionRegistry;
+import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
+
+/**
+ * This command is intended to clean up data after either the
+ * client or service wizards. Currently is just resets the
+ * parser factory.
+ *
+ */
+public class ScenarioCleanupCommand extends AbstractDataModelOperation
+{
+
+ public IStatus execute( IProgressMonitor monitor, IAdaptable adaptable )
+ {
+ WSDLParserFactory.killParser();
+ ObjectSelectionRegistry.getInstance().cleanup();
+
+ return Status.OK_STATUS;
+ }
+
+
+ public IStatus undo( IProgressMonitor monitor, IAdaptable adaptable )
+ {
+ // Even if the user cancels out of the wizard we want to
+ // kill the parser.
+ WSDLParserFactory.killParser();
+ ObjectSelectionRegistry.getInstance().cleanup();
+
+ return Status.OK_STATUS;
+ }
+}
diff --git a/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ServerSelectionUtils.java b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ServerSelectionUtils.java
new file mode 100644
index 000000000..2adfab0b8
--- /dev/null
+++ b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ServerSelectionUtils.java
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 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
+ * yyyymmdd bug Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20060324 116750 rsinha@ca.ibm.com - Rupam Kuehner
+ * 20070119 159458 mahutch@ca.ibm.com - Mark Hutchinson
+ *******************************************************************************/
+
+package org.eclipse.jst.ws.internal.consumption.ui.common;
+
+import java.util.ArrayList;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jst.ws.internal.consumption.common.IServerDefaulter;
+import org.eclipse.jst.ws.internal.consumption.common.ServerInfo;
+import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.IRuntimeType;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.ServerCore;
+
+
+public class ServerSelectionUtils
+{
+
+ public static IRuntime getRuntimeTarget(String projectName)
+ {
+ if( projectName != null && projectName.length() > 0 ){ //$NON-NLS-1$
+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+ if( project != null && project.exists() ){
+ return ServerCore.getProjectProperties(project).getRuntimeTarget();
+ }
+ }
+ return null;
+ }
+
+ public static IServer getFirstExistingServerFromFactoryId(String factoryId)
+ {
+ IServer[] servers = ServerCore.getServers();
+ if (servers==null || servers.length!=0)
+ return null;
+ else
+ {
+ for (int i=0; i<servers.length; i++)
+ {
+ IServer server = (IServer)servers[i];
+ if (server.getServerType().getId().equals(factoryId))
+ {
+ return server;
+ }
+ }
+ }
+ return null;
+ }
+
+ public static IServer[] getCompatibleExistingServers(IRuntime runtime)
+ {
+ if (runtime == null)
+ return null;
+
+ IServer[] servers = ServerCore.getServers();
+ if (servers==null || servers.length==0)
+ return null;
+
+ ArrayList compatibleServersList = new ArrayList();
+ IRuntimeType runtimeType = runtime.getRuntimeType();
+ if (runtimeType != null)
+ {
+ String runtimeId = runtimeType.getId();
+ for (int i=0; i<servers.length; i++)
+ {
+ IServer server = (IServer)servers[i];
+ IRuntimeType runtimeType2 = server.getRuntime().getRuntimeType();
+ if (runtimeType2 != null)
+ {
+ String serverRuntimeId = runtimeType2.getId();
+ if (serverRuntimeId.equals(runtimeId))
+ compatibleServersList.add(server);
+ }
+
+ }
+ }
+ if (compatibleServersList.size()<1)
+ return null;
+
+
+ Object[] compatibleServersArray = compatibleServersList.toArray();
+ IServer[] compatibleServers = new IServer[compatibleServersArray.length];
+ for (int j=0; j<compatibleServersArray.length; j++)
+ {
+ compatibleServers[j] = (IServer)compatibleServersArray[j];
+ }
+
+ return compatibleServers;
+ }
+
+ public static ServerInfo getExtenderRecommendation(IProject project)
+ {
+ try
+ {
+ IExtensionRegistry reg = Platform.getExtensionRegistry();
+ IConfigurationElement[] elements = reg.getConfigurationElementsFor("org.eclipse.jst.ws.consumption", "serverDefaulter");
+ for (int i=0; i<elements.length; i++)
+ {
+ Object serverDefaulterObject = elements[i].createExecutableExtension("class");
+ if (serverDefaulterObject instanceof IServerDefaulter)
+ {
+ IServerDefaulter serverDefaulter = (IServerDefaulter)serverDefaulterObject;
+ ServerInfo serverInfo = serverDefaulter.recommendDefaultServer(project);
+ if (serverInfo != null)
+ return serverInfo;
+ }
+
+ }
+ } catch (CoreException ce)
+ {
+ return null;
+ }
+
+ return null;
+ }
+}
diff --git a/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ValidationUtils.java b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ValidationUtils.java
new file mode 100644
index 000000000..7306baf18
--- /dev/null
+++ b/core/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/ValidationUtils.java
@@ -0,0 +1,1155 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2013 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
+ * yyyymmdd bug Email and other contact information
+ * -------- -------- -----------------------------------------------------------
+ * 20060222 115834 rsinha@ca.ibm.com - Rupam Kuehner
+ * 20060413 135581 rsinha@ca.ibm.com - Rupam Kuehner
+ * 20060420 136158 rsinha@ca.ibm.com - Rupam Kuehner
+ * 20060420 136705 rsinha@ca.ibm.com - Rupam Kuehner
+ * 20060421 136761 rsinha@ca.ibm.com - Rupam Kuehner
+ * 20060425 137831 rsinha@ca.ibm.com - Rupam Kuehner
+ * 20060427 126780 rsinha@ca.ibm.com - Rupam Kuehner
+ * 20060427 138058 joan@ca.ibm.com - Joan Haggarty
+ * 20060905 156230 kathy@ca.ibm.com - Kathy Chan, Handling projects with no target runtime
+ * 20070119 159458 mahutch@ca.ibm.com - Mark Hutchinson
+ * 20070723 194434 kathy@ca.ibm.com - Kathy Chan, Check for non-existing EAR with content not deleted
+ * 20071107 203826 kathy@ca.ibm.com - Kathy Chan
+ * 20071130 203826 kathy@ca.ibm.com - Kathy Chan
+ * 20080205 170141 kathy@ca.ibm.com - Kathy Chan
+ * 20080416 215084 gilberta@ca.ibm.com - Gilbert Andrews
+ * 20080417 227599 kathy@ca.ibm.com - Kathy Chan
+ * 20080717 241283 ericdp@ca.ibm.com - Eric D. Peters, Class version error when invoking sample JSP on Tomcat 5.5 when Java project is Java 6
+ * 20081001 243869 ericdp@ca.ibm.com - Eric D. Peters, Web Service tools allowing mixed J2EE levels
+ * 20090121 261730 zhang@ca.ibm.com - Allan Zhang, WebService client runtime id return null
+ * 20090302 249602 ericdp@ca.ibm.com - Eric D. Peters, PII- association warning message needs update
+ * 20090401 269994 ericdp@ca.ibm.com - Eric D. Peters, NLS- Validation messages unclear when servers don't support runtime/project combo
+ * 20100511 309395 mahutch@ca.ibm.com - Mark Hutchinson, WS Wizard Converting Java Project into Utility Project without any warning
+ * 20101207 332067 mahutch@ca.ibm.com - Mark Hutchinson, Consider server in web service wizard validation
+ *******************************************************************************/
+package org.eclipse.jst.ws.internal.consumption.ui.common;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.wsdl.Definition;
+import javax.wsdl.Port;
+import javax.wsdl.Service;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
+import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
+import org.eclipse.jst.common.project.facet.JavaFacetUtils;
+import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
+import org.eclipse.jst.j2ee.project.JavaEEProjectUtilities;
+import org.eclipse.jst.j2ee.webservice.internal.WebServiceConstants;
+import org.eclipse.jst.j2ee.webservice.wsdd.PortComponent;
+import org.eclipse.jst.j2ee.webservice.wsdd.WSDLPort;
+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.jst.server.core.FacetUtil;
+import org.eclipse.jst.ws.internal.common.J2EEUtils;
+import org.eclipse.jst.ws.internal.common.ResourceUtils;
+import org.eclipse.jst.ws.internal.common.ServerUtils;
+import org.eclipse.jst.ws.internal.consumption.common.FacetUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.ConsumptionUIMessages;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.RuntimeDescriptor;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
+import org.eclipse.jst.ws.internal.context.ScenarioContext;
+import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.command.internal.env.core.common.StatusUtils;
+import org.eclipse.wst.command.internal.env.core.selection.SelectionListChoices;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectTemplate;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.common.project.facet.core.VersionFormatException;
+import org.eclipse.wst.common.project.facet.core.internal.ProjectFacetVersion;
+import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.IRuntimeType;
+import org.eclipse.wst.server.core.IServerType;
+import org.eclipse.wst.server.core.ServerCore;
+import org.eclipse.wst.ws.internal.parser.wsil.WebServicesParser;
+import org.eclipse.wst.ws.internal.wsrt.IWebServiceRuntimeChecker;
+import org.eclipse.wst.ws.internal.wsrt.WebServiceScenario;
+
+/**
+ *
+ */
+public class ValidationUtils
+{
+ //Constants to help decide how much validation to do.
+ public static final int VALIDATE_NONE = 0;
+ public static final int VALIDATE_ALL = 1;
+ public static final int VALIDATE_SERVER_RUNTIME_CHANGES = 2;
+ public static final int VALIDATE_PROJECT_CHANGES = 3;
+ public static final int VALIDATE_SCALE_CHANGES = 4;
+
+ /**
+ *
+ */
+ public ValidationUtils()
+ {
+ }
+
+ /**
+ * Returns a new validation state based on the current validation state
+ * and the requested validation state. If the requested validation state
+ * does not cover all the validation covered by the current validation
+ * state, VALIDATE_ALL is returned. Otherwise, the requested validation
+ * state is returned.
+ *
+ * @param currentValidationState the validaton state at the time the caller's requests a change
+ * @param requestedValidationState the validation state being requested by the caller.
+ * @return Returns VALIDATE_ALL if the requested validation state
+ * does not cover all the validation covered by the current validation
+ * state. Returned requestedValidationState otherwise.
+ */
+ public int getNewValidationState(int currentValidationState, int requestedValidationState) {
+ int newValidationState;
+ if (currentValidationState == VALIDATE_NONE
+ || currentValidationState == requestedValidationState) {
+ newValidationState = requestedValidationState;
+ } else {
+ newValidationState = VALIDATE_ALL;
+ }
+
+ return newValidationState;
+
+ }
+
+ /**
+ * Returns IStatus resulting from checking for empty fields. Used for validation of page 1 of the
+ * Web service/client wizards.
+ * @param validationState one of VALIDATE_NONE, VALIDATE_ALL, VALIDATE_SERVER_RUNTIME_CHANGES, VALIDATE_PROJECT_CHANGES, VALIDATE_SCALE_CHANGES
+ * @param typeId Web service type id (isClient=false) or Web service client implementation type id (isClient=true)
+ * @param serviceImpl String representation of the object selection from page 1
+ * @param runtimeId Web service runtime id
+ * @param serverId server type id
+ * @param projectName name of project
+ * @param needEar boolean <code>true</code> if EAR is required, <code>false</code> if not.
+ * @param earProjectName name of EAR project
+ * @param projectTypeId template id
+ * @param isClient boolean <code>true</code> if the method is being called for client side validation,
+ * <code>false</code> for service side validation.
+ * @return IStatus with severity IStatus.OK if all mandatory fields are non-null and non-empty.
+ * IStatus with severity IStatus.ERROR otherwise.
+ */
+ public IStatus checkMissingFieldStatus(int validationState, String typeId, String serviceImpl, String runtimeId, String serverId,
+ String projectName, boolean needEar, String earProjectName, String projectTypeId,
+ boolean isClient)
+ {
+ // Object selection
+ if (validationState==VALIDATE_ALL && !isClient)
+ {
+ if (serviceImpl.length() == 0) {
+ int scenario = WebServiceRuntimeExtensionUtils2.getScenarioFromTypeId(typeId);
+ if (scenario == WebServiceScenario.BOTTOMUP)
+ {
+ return StatusUtils
+ .errorStatus(ConsumptionUIMessages.MSG_NO_OBJECT_SELECTION);
+ }
+ else
+ {
+ return StatusUtils
+ .errorStatus(ConsumptionUIMessages.MSG_NO_SERVICE_SELECTION);
+ }
+ }
+ }
+
+ // Web service runtime
+ if (validationState == VALIDATE_ALL || validationState == VALIDATE_SERVER_RUNTIME_CHANGES) {
+ if (runtimeId == null || runtimeId.length() == 0) {
+ if (isClient) {
+ return StatusUtils.errorStatus(NLS.bind(ConsumptionUIMessages.MSG_NO_RUNTIME,
+ new String[] { ConsumptionUIMessages.MSG_CLIENT_SUB }));
+ } else {
+ return StatusUtils.errorStatus(NLS.bind(ConsumptionUIMessages.MSG_NO_RUNTIME,
+ new String[] { ConsumptionUIMessages.MSG_SERVICE_SUB }));
+ }
+ }
+ }
+
+ if (validationState == VALIDATE_ALL || validationState == VALIDATE_PROJECT_CHANGES) {
+ // Project
+ if (projectName == null || projectName.length() == 0) {
+ if (isClient) {
+ return StatusUtils.errorStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_CLIENT_PROJECT_EMPTY, new String[] { "" }));
+ } else {
+ return StatusUtils.errorStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_SERVICE_PROJECT_EMPTY, new String[] { "" }));
+ }
+ }
+
+ // Project type (if project does not exist)
+ IProject project = ProjectUtilities.getProject(projectName);
+ if (!project.exists()) {
+ if (projectTypeId == null || projectTypeId.length() == 0) {
+
+ if (isClient) {
+ return StatusUtils
+ .errorStatus(ConsumptionUIMessages.MSG_CLIENT_PROJECT_TYPE_EMPTY);
+ } else {
+ return StatusUtils
+ .errorStatus(ConsumptionUIMessages.MSG_SERVICE_PROJECT_TYPE_EMPTY);
+ }
+ }
+ }
+
+ // Ear (if need ear)
+ if (needEar) {
+ if (earProjectName == null || earProjectName.length() == 0) {
+ if (isClient) {
+ return StatusUtils.errorStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_CLIENT_EAR_EMPTY, new String[] { "" }));
+ } else {
+ return StatusUtils.errorStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_SERVICE_EAR_EMPTY, new String[] { "" }));
+ }
+ }
+ }
+ }
+
+ // Server (if Web service runtime requires a server or project does not
+ // exist)
+ if (validationState == VALIDATE_ALL || validationState == VALIDATE_SERVER_RUNTIME_CHANGES
+ || validationState == VALIDATE_PROJECT_CHANGES) {
+ if (serverId == null || serverId.length() == 0) {
+ RuntimeDescriptor desc = WebServiceRuntimeExtensionUtils2.getRuntimeById(runtimeId);
+ if (desc.getServerRequired()) {
+ if (isClient) {
+ StatusUtils.errorStatus(NLS.bind(ConsumptionUIMessages.MSG_NO_SERVER,
+ new String[] { ConsumptionUIMessages.MSG_CLIENT_SUB }));
+ } else {
+ StatusUtils.errorStatus(NLS.bind(ConsumptionUIMessages.MSG_NO_SERVER,
+ new String[] { ConsumptionUIMessages.MSG_SERVICE_SUB }));
+ }
+ } else {
+ IProject project = ProjectUtilities.getProject(projectName);
+ if (!project.exists()) {
+ return StatusUtils.errorStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_PROJECT_MUST_EXIST,
+ new String[] { projectName }));
+
+ }
+ }
+ }
+ }
+
+ return Status.OK_STATUS;
+ }
+
+ /**
+ * Returns IStatus resulting from checking for errors. Used for validation of page 1 of the
+ * Web service/client wizards.
+ * @param validationState one of VALIDATE_NONE, VALIDATE_ALL, VALIDATE_SERVER_RUNTIME_CHANGES, VALIDATE_PROJECT_CHANGES, VALIDATE_SCALE_CHANGES
+ * @param typeRuntimeServer Web service runtime, type and server
+ * @param projectName name of project
+ * @param needEar boolean <code>true</code> if EAR is required, <code>false</code> if not.
+ * @param earProjectName name of EAR project
+ * @param projectTypeId template id
+ * @param isClient boolean <code>true</code> if the method is being called for client side validation,
+ * <code>false</code> for service side validation.
+ * @return IStatus with severity IStatus.OK if no errors are present,
+ * IStatus with severity IStatus.ERROR otherwise.
+ */
+ public IStatus checkErrorStatus(int validationState, TypeRuntimeServer typeRuntimeServer, String projectName, String initialProjectName, boolean needEar, String earProjectName, String projectTypeId,
+ boolean isClient) {
+
+ // Ensure server, Web service runtime, and Web service type are
+ // compatible
+
+ String typeId = typeRuntimeServer.getTypeId();
+ String runtimeId = typeRuntimeServer.getRuntimeId();
+ String serverId = typeRuntimeServer.getServerId();
+ String serverInstanceId = typeRuntimeServer.getServerInstanceId();
+
+ // Labels
+ String serverLabel = "";
+ if (serverId != null && serverId.length()>0)
+ {
+ serverLabel = WebServiceRuntimeExtensionUtils2.getServerLabelById(serverId);
+ }
+ String runtimeLabel = WebServiceRuntimeExtensionUtils2.getRuntimeLabelById(runtimeId);
+
+ if (validationState == VALIDATE_ALL || validationState == VALIDATE_SERVER_RUNTIME_CHANGES) {
+ if (serverId != null && serverId.length() > 0) {
+ if (isClient) {
+ if (!WebServiceRuntimeExtensionUtils2
+ .isServerClientRuntimeTypeSupported(serverId,
+ runtimeId, typeId)) {
+ return StatusUtils
+ .errorStatus(NLS
+ .bind(
+ ConsumptionUIMessages.MSG_INVALID_SRT_SELECTIONS,
+ new String[] { serverLabel,
+ runtimeLabel }));
+ }
+ } else {
+ if (!WebServiceRuntimeExtensionUtils2
+ .isServerRuntimeTypeSupported(serverId, runtimeId,
+ typeId)) {
+ return StatusUtils
+ .errorStatus(NLS
+ .bind(
+ ConsumptionUIMessages.MSG_INVALID_SRT_SELECTIONS,
+ new String[] { serverLabel,
+ runtimeLabel }));
+ }
+
+ if (initialProjectName != "" && serverId != null && !projectName.equals(initialProjectName) &&
+ (WebServiceRuntimeExtensionUtils2.getScenarioFromTypeId(typeId) == WebServiceScenario.BOTTOMUP) &&
+ J2EEUtils.isJavaComponent(ProjectUtilities.getProject(initialProjectName))){
+
+ if(!doesServerSupportProject(serverId,initialProjectName)){
+ return StatusUtils.errorStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_SERVICE_SERVER_DOES_NOT_SUPPORT_JAVAPROJECT,
+ new String[] { serverLabel, initialProjectName }));
+ }
+ }
+ }
+ }
+
+ }
+
+ // If the project exists, ensure it supports the Web service type, Web
+ // service runtime, and server. If the Ear also exists and the project
+ // and Ear are not already associated, ensure they can be.
+ // If the project does not exist, ensure the project type supports the
+ // Web service type, Web service runtime, and server
+ if (validationState == VALIDATE_ALL || validationState == VALIDATE_SERVER_RUNTIME_CHANGES
+ || validationState == VALIDATE_PROJECT_CHANGES) {
+ ValidationUtils valUtils = new ValidationUtils();
+ IProject project = ProjectUtilities.getProject(projectName);
+ if (project.exists()) {
+
+ if (isClient) {
+ // Check if the runtime supports it.
+ if (!WebServiceRuntimeExtensionUtils2.doesClientTypeAndRuntimeSupportProject(
+ typeId, runtimeId, projectName)) {
+ return StatusUtils.errorStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_CLIENT_RUNTIME_DOES_NOT_SUPPORT_PROJECT,
+ new String[] { runtimeLabel, serverLabel, projectName }));
+ }
+
+ // Check if the server supports it.
+ if (serverId != null && serverId.length() > 0) {
+
+ if (!valUtils.doesServerSupportProject(serverId, projectName)) {
+ // Server does not support the project...
+
+ boolean isJavaUtilProject = project != null ? FacetUtils.isJavaProject(project) : false ;
+
+ // If this error is due to differing Java facet versions on a Java utility project, display a specific error message
+ if(isJavaUtilProject && doesServerSupportClientProject(serverId, projectName, true)) {
+ return StatusUtils.errorStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_CLIENT_SERVER_DOES_NOT_SUPPORT_PROJECT_JAVA_UTIL_VERSION,
+ new String[] { serverLabel, projectName }));
+
+ } else {
+ // Otherwise display a general error
+ return StatusUtils.errorStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_CLIENT_SERVER_DOES_NOT_SUPPORT_PROJECT,
+ new String[] { serverLabel, projectName }));
+ }
+ }
+ }
+ } else {
+ // Check if the runtime supports it.
+ if (!WebServiceRuntimeExtensionUtils2.doesServiceTypeAndRuntimeSupportProject(
+ typeId, runtimeId, projectName)) {
+ return StatusUtils.errorStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_SERVICE_RUNTIME_DOES_NOT_SUPPORT_PROJECT,
+ new String[] { runtimeLabel, serverLabel, projectName }));
+ }
+
+ // Check if the server supports it.
+ if (serverId != null && serverId.length() > 0)
+ {
+ if (!valUtils.doesServerSupportProject(serverId, projectName)) {
+ return StatusUtils.errorStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_SERVICE_SERVER_DOES_NOT_SUPPORT_PROJECT,
+ new String[] { serverLabel, projectName }));
+ }
+ }
+ }
+ } else {
+ // Look at the project type to ensure that it is suitable for
+ // the
+ // selected runtime and server.
+ String templateId = projectTypeId;
+ String templateLabel = FacetUtils.getTemplateLabelById(templateId);
+
+ if (isClient) {
+ // Check if the runtime supports it.
+ if (!WebServiceRuntimeExtensionUtils2.doesClientTypeAndRuntimeSupportTemplate(
+ typeId, runtimeId, templateId, serverId)) {
+
+ return StatusUtils.errorStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_CLIENT_RUNTIME_DOES_NOT_SUPPORT_TEMPLATE,
+ new String[] { runtimeLabel, serverLabel, templateLabel }));
+ }
+
+ // Check if the server supports it.
+ if (serverId != null && serverId.length()>0)
+ {
+ if (!valUtils.doesServerSupportTemplate(serverId, templateId)) {
+ return StatusUtils.errorStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_CLIENT_SERVER_DOES_NOT_SUPPORT_TEMPLATE,
+ new String[] { serverLabel, templateLabel }));
+ }
+ }
+
+ if (WebServiceRuntimeExtensionUtils2.getClientRuntimeId(typeRuntimeServer, projectName, projectTypeId) == "")
+ {
+ return StatusUtils.errorStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_CLIENT_RUNTIME_DOES_NOT_SUPPORT_TEMPLATE,
+ new String[] { runtimeLabel, serverLabel, templateLabel }));
+ }
+
+ } else {
+ // Check if the runtime supports it.
+ if (!WebServiceRuntimeExtensionUtils2.doesServiceTypeAndRuntimeSupportTemplate(
+ typeId, runtimeId, templateId, serverId)) {
+ return StatusUtils
+ .errorStatus(NLS
+ .bind(
+ ConsumptionUIMessages.MSG_SERVICE_RUNTIME_DOES_NOT_SUPPORT_TEMPLATE,
+ new String[] { runtimeLabel, serverLabel, templateLabel }));
+ }
+
+ // Check if the server supports it.
+ if (serverId != null && serverId.length()>0)
+ {
+ if (!valUtils.doesServerSupportTemplate(serverId, templateId)) {
+ return StatusUtils.errorStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_SERVICE_SERVER_DOES_NOT_SUPPORT_TEMPLATE,
+ new String[] { serverLabel, templateLabel }));
+ }
+ }
+ }
+
+ }
+
+ }
+
+ if (validationState == VALIDATE_ALL || validationState == VALIDATE_PROJECT_CHANGES) {
+ // Check if project/EAR association is good.
+ if (needEar) {
+ IProject project = ProjectUtilities.getProject(projectName);
+ IProject ep = ProjectUtilities.getProject(earProjectName);
+
+ // 194434 - Check for non-existing EAR with contents that's not deleted previously
+ IStatus canCreateEARStatus = J2EEUtils.canCreateEAR(ep);
+ if (!canCreateEARStatus.isOK()) {
+ return canCreateEARStatus;
+ }
+
+ if (project.exists() && ep.exists()) {
+ if (!J2EEUtils.isComponentAssociated(ep, project)) {
+ boolean associateStatus = J2EEUtils.canAssociateProjectToEARWithoutWarning(project, ep);
+ if (!associateStatus) {
+ if (isClient) {
+ return StatusUtils.warningStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_CLIENT_CANNOT_ASSOCIATE,
+ new String[] { projectName, ep.getName()}));
+ } else {
+ return StatusUtils.warningStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_SERVICE_CANNOT_ASSOCIATE,
+ new String[] { projectName, ep.getName()}));
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Defect 203826 - Give extender a way to veto server, project, project type and EAR choices
+ if (validationState == VALIDATE_ALL || validationState == VALIDATE_SERVER_RUNTIME_CHANGES
+ || validationState == VALIDATE_PROJECT_CHANGES) {
+ TypeRuntimeServer trs = new TypeRuntimeServer();
+ trs.setTypeId(typeId);
+ trs.setRuntimeId(runtimeId);
+ trs.setServerId(serverId);
+ IWebServiceRuntimeChecker runtimeChecker = null;
+ if (isClient) {
+ String clientRuntimeId = WebServiceRuntimeExtensionUtils2.getClientRuntimeId(trs, projectName, projectTypeId);
+ runtimeChecker = WebServiceRuntimeExtensionUtils2.getClientRuntimeChecker(clientRuntimeId);
+
+ } else {
+ String serviceRuntimeId = WebServiceRuntimeExtensionUtils2.getServiceRuntimeId(trs, projectName, projectTypeId);
+ runtimeChecker = WebServiceRuntimeExtensionUtils2.getServiceRuntimeChecker(serviceRuntimeId);
+ }
+ if (runtimeChecker != null) {
+ return runtimeChecker.checkRuntimeCompatibility(serverId, serverInstanceId, projectName, projectTypeId, earProjectName);
+ }
+ }
+
+ return Status.OK_STATUS;
+
+ }
+
+ /**
+ * Returns IStatus resulting from checking for warnings. Used for validation of page 1 of the
+ * Web service/client wizards.
+ * @param validationState one of VALIDATE_NONE, VALIDATE_ALL, VALIDATE_SERVER_RUNTIME_CHANGES, VALIDATE_PROJECT_CHANGES, VALIDATE_SCALE_CHANGES
+ * @param scaleSetting one of <BR/>
+ * ScenarioContext.WS_TEST<BR/>
+ * ScenarioContext.WS_START<BR/>
+ * ScenarioContext.WS_INSTALL<BR/>
+ * ScenarioContext.WS_DEPLOY<BR/>
+ * ScenarioContext.WS_ASSEMBLE<BR/>
+ * ScenarioContext.WS_DEVELOP<BR/>
+ * ScenarioContext.WS_NONE
+ * @param serverId server type id
+ * @param serverId server instance id
+ * @param isClient boolean <code>true</code> if the method is being called for client side validation,
+ * <code>false</code> for service side validation.
+ * @return IStatus with severity IStatus.OK if no errors are present,
+ * IStatus with severity IStatus.WARNING otherwise.
+ */
+ public IStatus checkWarningStatus(int validationState, int scaleSetting, String serverId,
+ String serverInstanceId, boolean isClient) {
+ return checkWarningStatus(validationState, scaleSetting, serverId, serverInstanceId, isClient, null, null, null);
+ }
+
+ /**
+ * Returns IStatus resulting from checking for warnings. Used for validation of page 1 of the
+ * Web service/client wizards.
+ * @param validationState one of VALIDATE_NONE, VALIDATE_ALL, VALIDATE_SERVER_RUNTIME_CHANGES, VALIDATE_PROJECT_CHANGES, VALIDATE_SCALE_CHANGES
+ * @param scaleSetting one of <BR/>
+ * ScenarioContext.WS_TEST<BR/>
+ * ScenarioContext.WS_START<BR/>
+ * ScenarioContext.WS_INSTALL<BR/>
+ * ScenarioContext.WS_DEPLOY<BR/>
+ * ScenarioContext.WS_ASSEMBLE<BR/>
+ * ScenarioContext.WS_DEVELOP<BR/>
+ * ScenarioContext.WS_NONE
+ * @param serverId server type id
+ * @param serverId server instance id
+ * @param isClient boolean <code>true</code> if the method is being called for client side validation,
+ * <code>false</code> for service side validation.
+ * @return IStatus with severity IStatus.OK if no errors are present,
+ * IStatus with severity IStatus.WARNING otherwise.
+ */
+ public IStatus checkWarningStatus(int validationState, int scaleSetting, String serverId,
+ String serverInstanceId, boolean isClient, String projectName, IProject initialProject, String typeId) {
+ // Return a warning if there is no server selection and scale setting is
+ // anything beyond assemble.
+ if (validationState == VALIDATE_ALL || validationState == VALIDATE_SCALE_CHANGES
+ || validationState == VALIDATE_SERVER_RUNTIME_CHANGES) {
+ if (serverId == null || serverId.length() == 0) {
+ if (scaleSetting < ScenarioContext.WS_ASSEMBLE) {
+ if (isClient) {
+ return StatusUtils.warningStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_WARN_NO_CLIENT_SERVER, new String[0]));
+ } else {
+ return StatusUtils.warningStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_WARN_NO_SERVICE_SERVER, new String[0]));
+ }
+ }
+ } else {
+ // Return a warning if the selected server has only stub
+ // runtimes
+ // and the scale setting is anything beyond deploy.
+ IServerType serverType = ServerCore.findServerType(serverId);
+ if (serverType != null) {
+ // Find a Runtime which is not a stub
+ IRuntime nonStubRuntime = ServerUtils.getNonStubRuntime(serverId);
+ if ((scaleSetting < ScenarioContext.WS_DEPLOY) && nonStubRuntime == null && serverInstanceId == null) {
+ String servertypeLabel = WebServiceRuntimeExtensionUtils2
+ .getServerLabelById(serverId);
+ return StatusUtils.warningStatus(NLS.bind(
+ ConsumptionUIMessages.MSG_WARN_STUB_ONLY,
+ new String[] { servertypeLabel }));
+ }
+ }
+
+ }
+ }
+ //return a warning in bottom up scenarios where the intial project will be converted into a java utility project
+ if (initialProject != null && projectName != null && !projectName.equals(initialProject.getName()) && !JavaEEProjectUtilities.isUtilityProject(initialProject) && FacetUtils.isJavaProject(initialProject) &&
+ (WebServiceRuntimeExtensionUtils2.getScenarioFromTypeId(typeId) == WebServiceScenario.BOTTOMUP)){
+ return StatusUtils.warningStatus(NLS.bind(ConsumptionUIMessages.MSG_WARN_CONVERTED_TO_UTIL, initialProject.getName()));
+ }
+
+ return Status.OK_STATUS;
+
+ }
+
+
+ /**
+ * Returns whether or not the provided server type supports the facet versions on the provided client project
+ * @param serverFactoryId server type id
+ * @param projectName name of a project that may or may not exist.
+ * @param ignoreJavaVersionFacet Whether or not to ignore differences in java facet version
+ * @return boolean <code>true</code> if the server type supports the facet versions on the project (facets versions are inferred from a Java project),
+ * <code>false</code> if the server type does not support the facet versions or facet versions on the project cannot be determined. */
+ public boolean doesServerSupportClientProject(String serverFactoryId, String projectName, boolean ignoreJavaVersionFacet) {
+ Set facets = FacetUtils.getFacetsForProject(projectName);
+
+ if (ignoreJavaVersionFacet && facets != null) {
+
+ Set facetsCopy = new HashSet();
+ facetsCopy.addAll(facets);
+ for (Iterator it = facetsCopy.iterator(); it.hasNext();) {
+ ProjectFacetVersion pfv = (ProjectFacetVersion) it.next();
+ String facetId = pfv.getProjectFacet().getId();
+ if (facetId != null && facetId.equalsIgnoreCase(JavaFacetUtils.JAVA_FACET.getId())) {
+ it.remove();
+ }
+ }
+
+ facets = facetsCopy;
+
+ }
+
+ if (facets == null) {
+ return true;
+ } else {
+ return doesServerSupportFacets(serverFactoryId, facets);
+ }
+ }
+
+ /**
+ * Returns whether or not the provided server type supports the facet versions on the provided project
+ * @param serverFactoryId server type id
+ * @param projectName name of a project that may or may not exist.
+ * @return boolean <code>true</code> if the server type supports the facet versions on the project (facets versions are inferred from a Java project),
+ * <code>false</code> if the server type does not support the facet versions or facet versions on the project cannot be determined. */
+ public boolean doesServerSupportProject(String serverFactoryId, String projectName)
+ {
+ Set facets = FacetUtils.getFacetsForProject(projectName);
+ if (facets == null)
+ return true;
+ else
+ return doesServerSupportFacets(serverFactoryId, facets);
+ }
+
+ /**
+ * Returns whether or not the provided server type supports the facet versions in the provided set.
+ * @param serverFactoryId server type id
+ * @param facets set containing elements of type {@link IProjectFacetVersion}
+ * @return boolean <code>true</code> if the server type supports the facet versions in the provided set,
+ * <code>false</code> otherwise.
+ */
+ public boolean doesServerSupportFacets(String serverFactoryId, Set facets)
+ {
+ Set runtimes = FacetUtils.getRuntimes(new Set[]{facets});
+
+ Iterator itr = runtimes.iterator();
+ IServerType st = ServerCore.findServerType(serverFactoryId);
+ String runtimeTypeId = st.getRuntimeType().getId();
+ while (itr.hasNext())
+ {
+ org.eclipse.wst.common.project.facet.core.runtime.IRuntime fRuntime = (org.eclipse.wst.common.project.facet.core.runtime.IRuntime)itr.next();
+ IRuntime sRuntime = FacetUtil.getRuntime(fRuntime);
+ if (sRuntime != null)
+ {
+ IRuntimeType runtimeType = sRuntime.getRuntimeType();
+ if (runtimeType != null && runtimeTypeId.equals(runtimeType.getId()))
+ {
+ //found a match
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns whether or not the provided server type supports at least one version of
+ * each of the fixed facets on the provided template
+ * @param serverFactoryId server type id
+ * @param templateId id of a {@link IFacetedProjectTemplate}
+ * @return boolean <code>true</code> if the server type supports at least one version of
+ * each of the fixed facets on the provided template, <code>false</code> otherwise.
+ */
+ public boolean doesServerSupportTemplate(String serverFactoryId, String templateId)
+ {
+ IFacetedProjectTemplate template = ProjectFacetsManager.getTemplate(templateId);
+ Set templateFacets = template.getFixedProjectFacets();
+ Iterator templateFacetsItr = templateFacets.iterator();
+ while (templateFacetsItr.hasNext())
+ {
+ boolean serverSupportsThisOne = false;
+ IProjectFacet fixedFacet = (IProjectFacet)templateFacetsItr.next();
+ List versions = null;
+ try
+ {
+ versions = fixedFacet.getSortedVersions(true);
+ } catch (VersionFormatException e)
+ {
+ Set versionSet = fixedFacet.getVersions();
+ Iterator itr = versionSet.iterator();
+ versions = new ArrayList();
+ while (itr.hasNext())
+ {
+ versions.add(itr.next());
+ }
+ } catch (CoreException e)
+ {
+ Set versionSet = fixedFacet.getVersions();
+ Iterator itr = versionSet.iterator();
+ versions = new ArrayList();
+ while (itr.hasNext())
+ {
+ versions.add(itr.next());
+ }
+ }
+ Iterator versionsItr = versions.iterator();
+ while(versionsItr.hasNext())
+ {
+ IProjectFacetVersion pfv = (IProjectFacetVersion)versionsItr.next();
+ Set pfvs = new HashSet();
+ pfvs.add(pfv);
+ if (doesServerSupportFacets(serverFactoryId, pfvs))
+ {
+ serverSupportsThisOne = true;
+ break;
+ }
+ }
+
+ if (!serverSupportsThisOne)
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns whether or not the provided project or project type (if the project is null or does not exist)
+ * rules out the need for an EAR.
+ * @param projectName name of a project
+ * @param projectTypeId id of a {@link IFacetedProjectTemplate}. Must be non-empty if the project is null or
+ * does not exist.
+ * @return boolean <code>true</code> if the need for an EAR is not ruled out, <code>false</code> otherwise.
+ */
+ public boolean projectOrProjectTypeNeedsEar(String projectName, String projectTypeId)
+ {
+ // If the project is a simple Java project or the project type is
+ // Java utility return false.
+ if (projectName != null && projectName.length() > 0) {
+ IProject project = ResourceUtils.getWorkspaceRoot().getProject(projectName);
+ if (project.exists()) {
+ if (FacetUtils.isJavaProject(project)) {
+ return false;
+ }
+ }
+ }
+
+ // Project didn't rule out the need for an EAR
+ // so check the proect type
+ String templateId = projectTypeId;
+ if (templateId != null && templateId.length() > 0) {
+ if (FacetUtils.isUtilityTemplate(templateId)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns whether or not an J2EE 1.3 EAR project can be installed on a server of
+ * the provided server type.
+ * @param serverTypeId server type id
+ * @return boolean <code>true</code> if a J2EE 1.3 EAR project can be installed on a server of
+ * the provided server type, <code>false</code> otherwise.
+ */
+ public boolean serverNeedsEAR(String serverTypeId)
+ {
+ if (serverTypeId == null) {
+ return false;
+ }
+ if (serverTypeId.length() > 0) {
+ String targetId = ServerUtils.getRuntimeTargetIdFromFactoryId(serverTypeId);
+ if (targetId != null && targetId.length() > 0) {
+ if (!ServerUtils.isTargetValidForEAR(targetId, "13")) // rm j2ee
+ {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ public IStatus validateProjectTargetAndJ2EE(String projectName, String compName, String earName, String earCompName, String serverFactoryId, String j2eeLevel)
+ {
+ IProject p = ProjectUtilities.getProject(projectName);
+ IProject earP = null;
+ if (earName!=null && !earName.equalsIgnoreCase("")) {
+ earP = ProjectUtilities.getProject(earName);
+ }
+ IStatus targetStatus = doesProjectTargetMatchServerType(p, serverFactoryId);
+ if (earP!=null && targetStatus.getSeverity()==Status.OK)
+ {
+ //check the EAR
+ IStatus earTargetStatus = doesProjectTargetMatchServerType(earP, serverFactoryId);
+ if(earTargetStatus.getSeverity()==Status.ERROR)
+ {
+ return earTargetStatus;
+ }
+ }
+ else
+ {
+ return targetStatus;
+ }
+
+
+ //Validate service side J2EE level
+ IStatus j2eeStatus = doesProjectMatchJ2EELevel(p, compName, j2eeLevel);
+ if(earP!=null && j2eeStatus.getSeverity()==Status.OK)
+ {
+ IStatus earJ2EEStatus = doesProjectMatchJ2EELevel(earP, earCompName, j2eeLevel);
+ if(earJ2EEStatus.getSeverity()==Status.ERROR)
+ {
+ return earJ2EEStatus;
+ }
+ }
+ else
+ {
+ return j2eeStatus;
+ }
+
+ return Status.OK_STATUS;
+ }
+
+ //TODO: This method is obselete - should be removed.
+ private IStatus doesProjectTargetMatchServerType(IProject p, String serverFactoryId)
+ {
+ if (p!=null && p.exists())
+ {
+ IRuntime projectTarget = ServerSelectionUtils.getRuntimeTarget(p.getName());
+ if (projectTarget!=null)
+ {
+ String projectTargetId = projectTarget.getRuntimeType().getId();
+ String serverTargetId = ServerUtils.getRuntimeTargetIdFromFactoryId(serverFactoryId);
+ if (serverTargetId!=null && serverTargetId.length()>0)
+ {
+ if(!projectTargetId.equals(serverTargetId))
+ {
+ return StatusUtils.errorStatus( NLS.bind(ConsumptionUIMessages.MSG_SERVER_TARGET_MISMATCH,new String[]{p.getName()}) );
+ }
+ }
+ }
+ }
+ return Status.OK_STATUS;
+ }
+
+ //TODO: This method is obselete - should be removed.
+ private IStatus doesProjectMatchJ2EELevel(IProject p, String compName, String j2eeLevel)
+ {
+
+ try {
+ if (p!=null && p.exists())
+ {
+ int projectJ2EELevel = J2EEUtils.getJ2EEVersion(p);
+ if (projectJ2EELevel!=-1)
+ {
+ String projectJ2EELevelString = String.valueOf(projectJ2EELevel);
+ if (j2eeLevel!=null && j2eeLevel.length()>0)
+ {
+ if (!projectJ2EELevelString.equals(j2eeLevel))
+ {
+ return StatusUtils.errorStatus( NLS.bind(ConsumptionUIMessages.MSG_J2EE_MISMATCH,new String[]{p.getName()}) );
+ }
+ }
+ }
+ }
+ } catch(Exception e){
+
+ }
+
+ return Status.OK_STATUS;
+ }
+
+ //TODO: This method is obselete - should be removed.
+ public IStatus validateProjectType(String projectName, SelectionListChoices runtime2ClientTypes)
+ {
+ IStatus status = Status.OK_STATUS;
+ IProject p = ProjectUtilities.getProject(projectName);
+ if (p==null || !p.exists())
+ {
+ //Project does not exist which means a new project of the correct type will be created
+ //We're done. All is good.
+ return status;
+ }
+
+ //If the project exists, we should see it in the project list for the selected client
+ //project type.
+ String[] projectNames = runtime2ClientTypes.getChoice().getChoice().getList().getList();
+ for (int i=0; i<projectNames.length; i++)
+ {
+ if (projectName.equals(projectNames[i]))
+ {
+ //Found the project. All is good.
+ return status;
+ }
+ }
+
+ //Didn't find the project. Return an error.
+ //Get the label for the client type id
+ String clientTypeLabel = getClientTypeLabel(runtime2ClientTypes.getChoice().getList().getSelection());
+ String message = NLS.bind(ConsumptionUIMessages.MSG_WRONG_CLIENT_PROJECT_TYPE,new String[]{projectName, clientTypeLabel});
+ IStatus eStatus = StatusUtils.errorStatus( message );
+ return eStatus;
+
+ }
+
+ //TODO: This method is obselete - should be removed.
+ private String getClientTypeLabel( String type )
+ {
+ if (type.equals(IModuleConstants.JST_WEB_MODULE))
+ {
+ return ConsumptionUIMessages.LABEL_CLIENT_COMP_TYPE_WEB;
+ }
+ else if (type.equals(IModuleConstants.JST_EJB_MODULE))
+ {
+ return ConsumptionUIMessages.LABEL_CLIENT_COMP_TYPE_EJB;
+ }
+ else if (type.equals(IModuleConstants.JST_APPCLIENT_MODULE))
+ {
+ return ConsumptionUIMessages.LABEL_CLIENT_COMP_TYPE_APP_CLIENT;
+ }
+ else if (type.equals(IModuleConstants.JST_UTILITY_MODULE))
+ {
+ return ConsumptionUIMessages.LABEL_CLIENT_COMP_TYPE_CONTAINERLESS;
+ }
+ else
+ {
+ //No known label, return the typeId itself.
+ return type;
+ }
+ }
+
+ /**
+ * Returns whether or not this project is likely hosting any of the services
+ * in the provided WSDL as a J2EE Web service.
+ * @param p IProject in the workspace
+ * @param wsdlURL URL of a WSDL document
+ * @param parser
+ * @return boolean <code>true</code> if the project contains a webservices.xml
+ * deployment descriptor that points to at least one of the ports in the provided WSDL.
+ * Returns <code>false</code> otherwise.
+ */
+ public boolean isProjectServiceProject(IProject p, String wsdlURL, WebServicesParser parser)
+ {
+ if (p==null || wsdlURL==null || wsdlURL.length()==0 || parser==null)
+ return false;
+
+ IResource wsXML = getWebServcesXML(p);
+ if (wsXML==null)
+ return false;
+
+
+ //Make a list of all the wsdl-port's in webservices.xml
+ if (!(wsXML instanceof IFile))
+ {
+ return false;
+ }
+
+ Resource res = WorkbenchResourceHelperBase.getResource((IFile)wsXML, true);
+ WsddResource wsddRes = (WsddResource)res;
+ WebServices webServices = wsddRes.getWebServices();
+ Iterator wsDescs = webServices.getWebServiceDescriptions().iterator();
+ ArrayList wsdlPortList = new ArrayList();
+ while(wsDescs.hasNext())
+ {
+ WebServiceDescription wsDesc = (WebServiceDescription)wsDescs.next();
+ Iterator pcs = wsDesc.getPortComponents().iterator();
+ while(pcs.hasNext())
+ {
+ PortComponent pc = (PortComponent)pcs.next();
+ WSDLPort wsdlPort = pc.getWsdlPort();
+ wsdlPortList.add(new QualifiedName(wsdlPort.getNamespaceURI(), wsdlPort.getLocalPart()));
+ }
+ }
+
+ ArrayList portList = getPortNamesFromWsdl(wsdlURL, parser);
+
+ //If any of the QualifiedNames in portList equals any of the QualifiedNames
+ //in wsdlPortList, this is the service project. Return true.
+ Object[] ports = portList.toArray();
+ Object[] wsdlPorts = wsdlPortList.toArray();
+ for (int i = 0; i < ports.length; i++)
+ {
+ QualifiedName portName = (QualifiedName) ports[i];
+ for (int j = 0; j < wsdlPorts.length; j++)
+ {
+ QualifiedName wsdlPortName = (QualifiedName) wsdlPorts[j];
+ if (portName.equals(wsdlPortName))
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns the IResource corresponding to the webservices.xml in the provided project.
+ * @param p an IProject in the workspace.
+ * @return IResource corresponding to the webservices.xml in the provided project,
+ * null if there is no webservices.xml in the project.
+ */
+ private IResource getWebServcesXML(IProject p)
+ {
+ //Get the module root.
+ IResource moduleRoot = getModuleRoot(p);
+ if (!(moduleRoot instanceof IContainer))
+ return null;
+
+ IResource webServicesXML = null;
+ if (J2EEProjectUtilities.isDynamicWebProject(p))
+ {
+ StringBuffer wsPath = new StringBuffer();
+ wsPath.append("WEB-INF/");
+ wsPath.append(WebServiceConstants.WEBSERVICE_DD_SHORT_NAME);
+ webServicesXML = ((IContainer) moduleRoot).findMember(wsPath.toString());
+ }
+ else
+ {
+ StringBuffer wsPath = new StringBuffer();
+ wsPath.append("META-INF/");
+ wsPath.append(WebServiceConstants.WEBSERVICE_DD_SHORT_NAME);
+ webServicesXML = ((IContainer) moduleRoot).findMember(wsPath.toString());
+ }
+ return webServicesXML;
+ }
+
+ private IResource getModuleRoot(IProject p)
+ {
+ IPath modulePath = null;
+ try
+ {
+ IVirtualComponent vc = ComponentCore.createComponent(p);
+ if (vc != null)
+ {
+ modulePath = vc.getRootFolder().getWorkspaceRelativePath();
+ }
+ }
+ catch(Exception ex)
+ {
+
+ }
+
+ IResource res = ResourceUtils.findResource(modulePath);
+ return res;
+ }
+
+ /**
+ * Returns a list of WSDL ports in the provided WSDL
+ * @param wsdlURL URL of a WSDL document
+ * @param parser
+ * @return ArrayList containing elements of type {@link QualifiedName}
+ */
+ private ArrayList getPortNamesFromWsdl(String wsdlURL, WebServicesParser parser)
+ {
+ ArrayList portNameList = new ArrayList();
+ Definition def = parser.getWSDLDefinition(wsdlURL);
+ Map services = def.getServices();
+ Service service = null;
+ for (Iterator it = services.values().iterator(); it.hasNext();)
+ {
+ service = (Service)it.next();
+ String namespace = service.getQName().getNamespaceURI();
+ Map ports = service.getPorts();
+ for (Iterator it2 = ports.values().iterator(); it2.hasNext();)
+ {
+ Port port = (Port)it2.next();
+ portNameList.add(new QualifiedName(namespace, port.getName()));
+ }
+ }
+
+ return portNameList;
+
+ }
+
+ private class QualifiedName
+ {
+ String namespaceURI;
+
+ String localPart;
+
+ /**
+ * @param namespaceURI
+ * @param localPart
+ */
+ public QualifiedName(String namespaceURI, String localPart)
+ {
+ super();
+ this.namespaceURI = namespaceURI;
+ this.localPart = localPart;
+ }
+
+ /**
+ * @return Returns the localPart.
+ */
+ public String getLocalPart()
+ {
+ return localPart;
+ }
+
+ /**
+ * @param localPart
+ * The localPart to set.
+ */
+ public void setLocalPart(String localPart)
+ {
+ this.localPart = localPart;
+ }
+
+ /**
+ * @return Returns the namespaceURI.
+ */
+ public String getNamespaceURI()
+ {
+ return namespaceURI;
+ }
+
+ /**
+ * @param namespaceURI
+ * The namespaceURI to set.
+ */
+ public void setNamespaceURI(String namespaceURI)
+ {
+ this.namespaceURI = namespaceURI;
+ }
+
+ public boolean equals(QualifiedName qn)
+ {
+ return (qn.getNamespaceURI().equals(namespaceURI) && qn.getLocalPart()
+ .equals(localPart));
+ }
+ }
+}

Back to the top