blob: 340aab3c8e8a3ead08262173b055313f534aeb88 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.ws.internal.consumption.ui.wizard;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.StringTokenizer;
import java.util.Vector;
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.jface.viewers.IStructuredSelection;
import org.eclipse.jst.j2ee.internal.project.IEJBNatureConstants;
import org.eclipse.jst.ws.internal.common.ResourceUtils;
import org.eclipse.jst.ws.internal.consumption.fragments.ServicePreAssemblyFragment;
import org.eclipse.jst.ws.internal.consumption.fragments.ServicePreDeployFragment;
import org.eclipse.jst.ws.internal.consumption.fragments.ServicePreDevelopFragment;
import org.eclipse.jst.ws.internal.consumption.fragments.ServicePreInstallFragment;
import org.eclipse.jst.ws.internal.data.LabelsAndIds;
import org.eclipse.wst.command.internal.env.core.fragment.CommandFragmentFactoryFactory;
import org.eclipse.wst.command.internal.env.core.registry.CommandRegistry;
import org.eclipse.wst.command.internal.env.eclipse.EclipseLog;
import org.eclipse.wst.command.internal.env.ui.widgets.CanFinishRegistry;
import org.eclipse.wst.command.internal.env.ui.widgets.CommandWidgetBinding;
import org.eclipse.wst.command.internal.env.ui.widgets.CommandWidgetBindingList;
import org.eclipse.wst.command.internal.env.ui.widgets.WidgetRegistry;
import org.eclipse.wst.command.internal.provisional.env.core.common.Log;
import org.eclipse.wst.command.internal.provisional.env.core.data.DataMappingRegistry;
import org.eclipse.wst.command.internal.provisional.env.core.selection.SelectionList;
import org.eclipse.wst.command.internal.provisional.env.core.selection.SelectionListChoices;
import org.eclipse.wst.server.core.IServerType;
import org.eclipse.wst.server.core.ServerCore;
public class WebServiceServerRuntimeTypeRegistry implements CommandRegistry
{
private static WebServiceServerRuntimeTypeRegistry instance_;
private IConfigurationElement[] indexedConfigElems_;
private HashMap webServiceServers;
private HashMap webServiceRuntimes;
private HashMap webServiceTypes;
private HashMap webServiceServerRuntimeTypes;
private Hashtable runtimesByType_;
private Hashtable runtimeLabelById_;
private Hashtable runtimeIdByLabel_;
private Hashtable serversByType_;
private Hashtable serverLabelByFactoryId_;
private Hashtable serverFactoryIdByLabel_;
private Hashtable configElemsById_;
private DataMappingRegistry dataMappingRegistry_;
private WidgetRegistry widgetRegistry_;
private CanFinishRegistry canFinishRegistry_;
private HashMap factoryCache_;
private SelectionListChoices serverToRuntimeToJ2EE_;
private Log log_;
public WebServiceServerRuntimeTypeRegistry() {
log_ = new EclipseLog();
}
//
// Loads WebServiceServerRuntimeType objects into this registry.
// This is done by querying the plugin registry for all extensions
// hanging on the WebServiceServerRuntimeType extension point. Extensions
// must implement the org.eclipse.jst.ws.ui.wizard.WebServiceServerRuntimeType
// interface.
//
private void loadTypes ()
{
IExtensionRegistry reg = Platform.getExtensionRegistry();
IConfigurationElement[] config = reg.getConfigurationElementsFor(
"org.eclipse.jst.ws.consumption.ui",
"webServiceServerRuntimeType");
for(int idx=0; idx<config.length; idx++)
{
IConfigurationElement elem = config[idx];
try
{
if (elem.getName().equals("webServiceServer"))
{
WebServiceServer wss = new WebServiceServer(elem);
webServiceServers.put(elem.getAttribute("id"), wss);
String serverLabel = wss.getLabel();
if (serverLabel != null && serverLabel.length()>0)
{
if (!serverLabelByFactoryId_.containsKey(wss.getFactoryId()));
serverLabelByFactoryId_.put(wss.getFactoryId(), serverLabel);
if (!serverFactoryIdByLabel_.containsKey(serverLabel));
serverFactoryIdByLabel_.put(serverLabel, wss.getFactoryId());
}
}
else if (elem.getName().equals("webServiceRuntime"))
{
WebServiceRuntime rt = new WebServiceRuntime(elem);
webServiceRuntimes.put(elem.getAttribute("id"), rt);
if(!runtimeLabelById_.containsKey(rt.getId()))
runtimeLabelById_.put(rt.getId(), rt.getLabel());
if(!runtimeIdByLabel_.containsKey(rt.getLabel()))
runtimeIdByLabel_.put(rt.getLabel(), rt.getId());
}
else if (elem.getName().equals("webServiceType"))
{
WebServiceTypeImpl wst = new WebServiceTypeImpl(elem);
webServiceTypes.put(elem.getAttribute("id"), wst);
}
else if (elem.getName().equals("webServiceServerRuntimeType"))
{
configElemsById_.put(elem.getAttribute("id"), elem);
String typeId = elem.getAttribute("type");
String serverId = elem.getAttribute("server");
String runtimeId = elem.getAttribute("runtime");
WebServiceServerRuntimeType_ wssrt = new WebServiceServerRuntimeType_(serverId, runtimeId, typeId, elem);
webServiceServerRuntimeTypes.put(elem.getAttribute("id"), wssrt);
setRuntimesByType(typeId,runtimeId);
setServersByType(typeId, serverId);
}
}
catch (Exception e)
{
log_.log(Log.ERROR, 5058, this, "loadTypes", e);
}
}
}
/**
* Sets the Web service runtimes and type from each extension
* in a Hashtable. The type is the key, and value is a Vector containing
* each runtime supported in that Web service type.
* @param runtime name
* @param type name
*/
private void setRuntimesByType(String typeId, String runtime)
{
if(runtimesByType_.get(typeId)!=null)
{
Vector v = (Vector)runtimesByType_.get(typeId);
if (!v.contains(runtime.trim())) {
v.add(runtime.trim());
}
}
else
{
Vector vect = new Vector();
vect.add(runtime.trim());
runtimesByType_.put(typeId,vect);
}
}
public WebServiceRuntime getRuntimeById( String id )
{
return (WebServiceRuntime)webServiceRuntimes.get( id );
}
/**
* Gets the Web sevice runtimes vector given a type
* @param Web service type
* @return array of runtime labels
*/
public String[] getRuntimesByType(String webServiceType)
{
String[] runtimes;
if (runtimesByType_.containsKey(webServiceType))
{
Vector vect =(Vector)runtimesByType_.get(webServiceType);
runtimes = new String[vect.size()];
for (int i=0; i<vect.size(); i++)
{
String runtimeId = (String)vect.elementAt(i);
WebServiceRuntime wsr = (WebServiceRuntime)webServiceRuntimes.get(runtimeId);
if (wsr!=null) {
runtimes[i] = (String)wsr.getId();
}
}
return runtimes;
}
else
{
log_.log(Log.ERROR, 5059, this, "getRuntimesByType", "runtimes not found for Web service type "+webServiceType);
return null;
}
}
public boolean isRuntimeSupportedForType(String webServiceTypeId, String runtimeId)
{
String[] runtimes = getRuntimesByType(webServiceTypeId);
for(int i=0;i<runtimes.length;i++)
{
if (runtimes[i].equals(runtimeId))
return true;
}
return false;
}
public boolean doesRuntimeSupportJ2EELevel(String j2eeVersionId, String runtimeId)
{
IWebServiceRuntime wsr = (IWebServiceRuntime)webServiceRuntimes.get(runtimeId);
String[] j2eeVersions = wsr.getJ2EEVersions();
if (j2eeVersions==null || j2eeVersions.length==0)
return true;
for(int i=0; i<j2eeVersions.length; i++)
{
if (j2eeVersions[i].equals(j2eeVersionId))
{
return true;
}
}
return false;
}
public boolean doesRuntimeSupportServerTarget(String serverTargetId, String runtimeId)
{
Iterator it = webServiceServerRuntimeTypes.values().iterator();
while (it.hasNext())
{
WebServiceServerRuntimeType_ wssrt = (WebServiceServerRuntimeType_)it.next();
if (wssrt!=null) {
if (wssrt.runtimeId_.equals(runtimeId))
{
IWebServiceServer wsserver = getWebServiceServerById(wssrt.serverId_);
String thisFactoryId = wsserver.getFactoryId();
IServerType serverType = ServerCore.findServerType(thisFactoryId);
if (serverType == null)
continue;
String thisServerTargetId = serverType.getRuntimeType().getId();
if (thisServerTargetId.equals(serverTargetId))
return true;
}
}
}
return false;
}
/**
* Gets the server factoryIDs of all web service server runtime type
* with an runtime ID equals to the input
* @param runtime ID
* @return array of factory IDs
*/
public String[] getServerFactoryIDByRuntimeID(String runtimeID) {
Vector v = new Vector();
Iterator it = webServiceServerRuntimeTypes.values().iterator();
while (it.hasNext()) {
WebServiceServerRuntimeType_ wssrt = (WebServiceServerRuntimeType_)it.next();
if (wssrt!=null) {
if (wssrt.runtimeId_.equals(runtimeID))
v.add(getWebServiceServerById(wssrt.serverId_).getFactoryId());
}
}
String[] serverFactoryIDs = new String[v.size()];
for (int i = 0; i < v.size(); i++) {
serverFactoryIDs[i] = (String)v.get(i);
}
return serverFactoryIDs;
}
/**
* Gets the runtime IDs of all web service server runtime type
* with an server factory ID equals to the input
* @param server factory ID
* @return array of runtime IDs
*/
public String[] getRuntimeIDsByServerFactoryID(String serverFactoryID) {
Vector v = new Vector();
Iterator it = webServiceServerRuntimeTypes.values().iterator();
while (it.hasNext()) {
WebServiceServerRuntimeType_ wssrt = (WebServiceServerRuntimeType_)it.next();
if (wssrt!=null) {
IWebServiceServer wss = getWebServiceServerById(wssrt.serverId_);
String wssfId = wss.getFactoryId();
if (wssfId.equals(serverFactoryID))
{
if (!v.contains(wssrt.runtimeId_))
{
v.add(wssrt.runtimeId_);
}
}
/*if (getWebServiceServerById(wssrt.serverId_).getFactoryId().equals(serverFactoryID))
v.add(getWebServiceRuntimeById(wssrt.runtimeId_).getId());*/
}
}
String[] runtimeIDs = new String[v.size()];
for (int i = 0; i < v.size(); i++) {
runtimeIDs[i] = (String)v.get(i);
}
return runtimeIDs;
}
/**
* Sets the Web service servers and type from each extension
* in a Hashtable. The type is the key, and value is a Vector containing
* each runtime supported in that Web service type.
* @param server name
* @param type name
*/
private void setServersByType(String typeId, String server)
{
if(serversByType_.get(typeId)!=null)
{
Vector v = (Vector)serversByType_.get(typeId);
if (!v.contains(server.trim()))
{
v.add(server.trim());
}
}
else
{
Vector vect = new Vector();
vect.add(server.trim());
serversByType_.put(typeId, vect);
}
}
/**
* Gets the Web service servers vector given a type
* @param Web service type
* @return array of server factory Ids
*/
public String[] getServerFactoryIdsByType(String webServiceType)
{
String[] servers;
if (serversByType_.containsKey(webServiceType))
{
Vector vect = (Vector)serversByType_.get(webServiceType);
servers = new String[vect.size()];
for (int i=0; i<vect.size(); i++)
{
String serverId = (String)vect.elementAt(i);
WebServiceServer wss = (WebServiceServer)webServiceServers.get(serverId);
if (wss!=null) {
servers[i] = (String)wss.getFactoryId(); //Note: returning server factory Ids
}
}
return servers;
}
else
{
log_.log(Log.ERROR, 5060, this, "getServerByType", "Web service server not found for Web service type "+webServiceType);
return null;
}
}
public IWebServiceRuntime getWebServiceRuntimeByLabel(String runtimeLabel)
{
Iterator iter = webServiceRuntimes.values().iterator();
while (iter.hasNext())
{
WebServiceRuntime wsr = (WebServiceRuntime)iter.next();
if (wsr!=null) {
if (runtimeLabel.equals(wsr.getLabel()))
return wsr;
}
}
return null;
}
public IWebServiceRuntime getWebServiceRuntimeById(String runtimeId)
{
return (IWebServiceRuntime)webServiceRuntimes.get(runtimeId);
}
public IWebServiceServer getWebServiceServerByFactoryId(String serverFactoryId)
{
if (serverFactoryId==null)
return null;
Iterator iter = webServiceServers.values().iterator();
while (iter.hasNext())
{
WebServiceServer wss = (WebServiceServer)iter.next();
if (wss!=null && wss.getFactoryId()!=null) {
if (serverFactoryId.equals(wss.getFactoryId())) {
return wss;
}
}
}
return null;
}
public IWebServiceServer getWebServiceServerByLabel(String serverLabel)
{
if (serverLabel==null)
return null;
Iterator iter = webServiceServers.values().iterator();
while (iter.hasNext())
{
WebServiceServer wss = (WebServiceServer)iter.next();
if (wss!=null) {
if (serverLabel.equals(wss.getLabel()))
return wss;
}
}
return null;
}
public IWebServiceServer getWebServiceServerById(String serverId)
{
return (IWebServiceServer)webServiceServers.get(serverId);
}
public IWebServiceType getWebServiceTypeByLabel(String typeLabel)
{
Iterator iter = webServiceTypes.values().iterator();
while (iter.hasNext())
{
WebServiceTypeImpl wst = (WebServiceTypeImpl)iter.next();
if (wst!=null) {
if (typeLabel.equals(wst.getLabel()))
return wst;
}
}
return null;
}
public IWebServiceType getWebServiceTypeById(String typeId)
{
if (webServiceTypes.get(typeId)!= null)
return (WebServiceTypeImpl)webServiceTypes.get(typeId);
return null;
}
/**
* Returns true if an EJB project is needed to host a Web service
* of the type identified by typeId. If multiple natureIds are specified in the
* "includeNatures" attribute, only the first one is checked. If no natureIds are specified,
* false is returned.
*
* @deprecated
* Should be refactored in future
*/
public boolean requiresEJBProject(String typeId)
{
IWebServiceType wst = WebServiceServerRuntimeTypeRegistry.getInstance().getWebServiceTypeById(typeId);
if (wst != null)
{
IConfigurationElement elem = wst.getConfigurationElement();
String includedNatures = elem.getAttribute("includeNatures");
if (includedNatures==null || includedNatures.length()==0)
{
return false;
}
else
{
StringTokenizer st = new StringTokenizer(includedNatures);
if(st.hasMoreTokens())
{
String firstIncludedNature = st.nextToken();
if (firstIncludedNature.equals(IEJBNatureConstants.NATURE_ID))
return true;
}
}
}
return false;
}
/**
* Returns a list of valid projects for the Web service type with an id of typeId.
* In the case where the Web service type extension does not specify which project
* natures are included, a array of all Web and EJB projects in the workspace will
* be returned.
* @param typeId
* @return IProject[] an array of valid projects
*/
public IProject[] getProjectsByWebServiceType(String typeId)
{
IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
ArrayList validProjects = new ArrayList();
// IWebServiceType wst = WebServiceServerRuntimeTypeRegistry.getInstance().getWebServiceTypeById(typeId);
// if (wst != null)
// {
//TODO: This section needs to be refactored to filter ArtifactEdits
// and uphold project topology described in the extension
// IConfigurationElement elem = wst.getConfigurationElement();
// String includedNatures = elem.getAttribute("includeNatures");
// String excludedNatures = elem.getAttribute("excludeNatures");
// if (includedNatures!=null && includedNatures.length()>0)
// {
// for (int i = 0; i < projects.length; i++)
// {
// if (include(projects[i], includedNatures) && exclude(projects[i], excludedNatures))
// validProjects.add(projects[i]);
// }
// return (IProject[])validProjects.toArray(new IProject[0]);
// }
// }
//If wst was null or the extension didn't specify which project natures are
// to be included, revert to the old behaviour
for (int j = 0; j < projects.length; j++)
{
if (ResourceUtils.isWebProject(projects[j]) || ResourceUtils.isEJBProject(projects[j]))
validProjects.add(projects[j]);
}
return (IProject[])validProjects.toArray(new IProject[0]);
}
private boolean include(IProject project, String include)
{
StringTokenizer st = new StringTokenizer(include);
while(st.hasMoreTokens())
{
try
{
if (project.hasNature(st.nextToken()))
return true;
}
catch (CoreException ce)
{
}
}
return false;
}
private boolean exclude(IProject project, String exclude)
{
StringTokenizer st = new StringTokenizer(exclude);
while(st.hasMoreTokens())
{
try
{
if (project.hasNature(st.nextToken()))
return false;
}
catch (CoreException ce)
{
}
}
return true;
}
//
// Loads WebServiceServerRuntimeType objects into this registry.
// See method getInstance().
//
private void load ()
{
runtimesByType_ = new Hashtable();
serversByType_ = new Hashtable();
configElemsById_ = new Hashtable();
runtimeIdByLabel_ = new Hashtable();
runtimeLabelById_ = new Hashtable();
serverFactoryIdByLabel_ = new Hashtable();
serverLabelByFactoryId_ = new Hashtable();
webServiceServers = new HashMap();
webServiceRuntimes = new HashMap();
webServiceTypes = new HashMap();
webServiceServerRuntimeTypes = new HashMap();
loadTypes();
}
/**
* Returns a singleton instance of this class.
* @return A singleton WebServiceServerRuntimeTypeRegistry object.
*/
public static WebServiceServerRuntimeTypeRegistry getInstance ()
{
if (instance_ == null)
{
instance_ = new WebServiceServerRuntimeTypeRegistry();
instance_.load();
}
return instance_;
}
/**
* Returns the Web Service type names of all registered <code>WebServiceServerRuntimeType</code>
* objects.
* @return The Web Service type names of all registered <code>WebServiceServerRuntimeType</code>
* objects.
*/
public String[] getWebServiceTypeNames()
{
String[] types = new String[webServiceTypes.size()];
int i=0;
Iterator iter = webServiceTypes.values().iterator();
while (iter.hasNext())
{
WebServiceTypeImpl wst = (WebServiceTypeImpl)iter.next();
if (wst!=null) {
types[i] = wst.getLabel();
i++;
}
}
return types;
}
public LabelsAndIds getServiceTypeLabels()
{
LabelsAndIds labelIds = new LabelsAndIds();
Iterator iterator = webServiceTypes.values().iterator();
int size = webServiceTypes.size();
String[] labels = new String[size];
String[] ids = new String[size];
int index = 0;
labelIds.setLabels_( labels );
labelIds.setIds_( ids );
while( iterator.hasNext() )
{
WebServiceTypeImpl type = (WebServiceTypeImpl)iterator.next();
ids[index] = type.getId();
labels[index] = type.getLabel();
index++;
}
return labelIds;
}
/**
* Returns the IConfigurationElement given the server, runtime, and type attributes
* The benefit of getting the IConfigurationElement is that the corresponding class
* file and plugin are not loaded immediately.
* @param server label
* @param runtime label
* @param type label
* @return IConfiguration element
*/
public IConfigurationElement getConfigurationElementFor(String serverId, String runtimeId, String typeId)
{
if (serverId==null || runtimeId==null || typeId==null)
return null;
Iterator iter = webServiceServerRuntimeTypes.values().iterator();
while (iter.hasNext())
{
WebServiceServerRuntimeType_ wssrt = (WebServiceServerRuntimeType_)iter.next();
if (wssrt!=null ) {
if (wssrt.getConfigurationElementFor(serverId, runtimeId, typeId)!=null)
return wssrt.getConfigurationElementFor(serverId, runtimeId,typeId);
}
}
return null;
}
public IConfigurationElement getConfigElementFor(String factoryId, String runtimeId, String typeId)
{
Iterator iter = webServiceServerRuntimeTypes.values().iterator();
while (iter.hasNext())
{
WebServiceServerRuntimeType_ wssrt = (WebServiceServerRuntimeType_)iter.next();
if (wssrt.hasConfigElementFor(factoryId, runtimeId, typeId)) {
return wssrt.element_;
}
}
return null;
}
public boolean requiresWebModuleFor(String server, String runtime, String type)
{
IConfigurationElement elem = getConfigurationElementFor(server, runtime, type);
if (elem==null)
{
return false; // report error here instead
}
return Boolean.valueOf(elem.getAttribute("requireWebModule")).booleanValue();
}
public boolean requiresEJBModuleFor(String server, String runtime, String type)
{
IConfigurationElement elem = getConfigurationElementFor(server, runtime, type);
if (elem==null)
{
return false;
}
return Boolean.valueOf(elem.getAttribute("requireEJBModule")).booleanValue();
}
/**
* Returns the id of the <code>WebServiceServerRuntimeType</code> corresponding to the Server,
* Runtime, and Web Service Type.
*/
public boolean webServiceServerRuntimeTypeExists(String serverID, String runtimeID, String typeID)
{
return (getConfigurationElementFor(serverID, runtimeID, typeID) != null);
}
/**
* Returns the id of the <code>WebServiceServerRuntimeType</code> corresponding to the Server,
* Runtime, and Web Service Type.
*/
public String getWebServiceServerRuntimeTypeName(String server, String runtime, String type)
{
IConfigurationElement elem = (IConfigurationElement)getConfigurationElementFor(server, runtime, type);
return (elem==null ? null : elem.getAttribute("id"));
}
/**
* Returns the <code>WebServiceServerRuntimeType</code> corresponding to the Server,
* Runtime, and Web Service type. This will return the <code>WebServiceServerRuntimeType</code>
* object and set the properties found in the manifest file. i.e. isWebModuleRequired, isEJBModuleRequired
* @param server label
* @param runtime label
* @param Web service type
* @return WebServiceServerRuntimeType object
*/
public WebServiceServerRuntimeType getWebServiceServerRuntimeType(String server, String runtime, String type)
{
WebServiceServerRuntimeType wssrt = null;
String serverId = getWebServiceServerByFactoryId(server).getId();
IConfigurationElement elem = getConfigurationElementFor(server, runtime, type);
if( elem == null )
{
// We couldn't find the server and runtime specified so we will
// find the default server and runtime.
server = getDefaultServerValueFor(type);
runtime = getDefaultRuntimeValueFor(type);
elem = getConfigurationElementFor(server, runtime, type);
}
return wssrt;
}
/**
* Returns the <code>WebServiceServerRuntimeType</code> given the type name.
* @param type name
* @retrun WebServiceServerRuntimeType object
*/
public WebServiceServerRuntimeType getWebServiceServerRuntimeTypeById(String id)
{
WebServiceServerRuntimeType wssrt = null;
if (configElemsById_.containsKey(id))
{
try {
IConfigurationElement elem = (IConfigurationElement)configElemsById_.get(id);
Object webServiceType = elem.createExecutableExtension("class");
if (webServiceType instanceof WebServiceServerRuntimeType)
{
wssrt = (WebServiceServerRuntimeType)webServiceType;
wssrt.setServerLabel(elem.getAttribute("server"));
wssrt.setRuntimeLabel(elem.getAttribute("runtime"));
wssrt.setWebModuleRequired( Boolean.valueOf(elem.getAttribute("requireWebModule")).booleanValue() );
wssrt.setEJBModuleRequired( Boolean.valueOf(elem.getAttribute("requireEJBModule")).booleanValue() );
}
else
{
String implementedInterface = "org.eclipse.jst.ws.ui.wizard.WebServiceServerRuntimeType ";
String errMsg = "Extensions of the WebServiceServerRuntimeTypes extension point must implement the ";
errMsg = errMsg + implementedInterface + "interface.";
log_.log(Log.ERROR, 5061, this, "getWebServiceServerRuntimeTypeById", errMsg);
}
}
catch (CoreException ce)
{
log_.log(Log.ERROR, 5062, this, "getWebServiceServerRuntimeTypeById", ce);
}
}
return wssrt;
}
public String[] getWebServiceTypeBySelection(IStructuredSelection selection)
{
TypeSelectionFilter tsf = new TypeSelectionFilter();
String[] wst = tsf.getWebServiceTypeByInitialSelection(selection, webServiceTypes);
return wst == null ? null : wst;
}
public IWebServiceType getWebServiceTypeByTypeLabel(String webServiceTypeLabel)
{
Iterator iter = webServiceTypes.values().iterator();
while (iter.hasNext())
{
WebServiceTypeImpl wst = (WebServiceTypeImpl)iter.next();
if (wst!=null) {
if (wst.getLabel().equals(webServiceTypeLabel)) {
return wst;
}
}
}
return null;
}
public boolean isInitialSelectionValidForChosenType(IStructuredSelection selection, String typeName)
{
String[] supportedTypes = getWebServiceTypeBySelection(selection);
if (supportedTypes!=null)
{
for (int i=0; i<supportedTypes.length; i++)
{
if (supportedTypes[i].equals(typeName))
return true;
}
}
return false;
}
public boolean isServerSupportedForChosenType(String typeId, String serverID)
{
if (serversByType_.containsKey(typeId))
{
Vector vect = (Vector)serversByType_.get(typeId);
for (int i=0; i<vect.size(); i++)
{
WebServiceServer wss = (WebServiceServer)webServiceServers.get((String)vect.elementAt(i));
if (serverID!=null) {
if (serverID.equalsIgnoreCase(wss.getFactoryId()))
return true;
}
}
}
return false;
}
public boolean isServerRuntimeTypeSupported(String server, String runtime, String type) {
WebServiceServerRuntimeType wssrt = null;
IConfigurationElement elem = getConfigurationElementFor(server, runtime, type);
return elem == null ? false : true;
}
public String getDefaultServerValueFor(String typeId)
{
String[] servers;
if (serversByType_.containsKey(typeId))
{
Vector vect = (Vector)serversByType_.get(typeId);
servers = new String[vect.size()];
for (int i=0; i<vect.size(); i++)
{
String serverId = (String)vect.elementAt(i);
WebServiceServer wss = (WebServiceServer)webServiceServers.get(serverId);
servers[i] = (String)wss.getId();
}
return servers[0];
}
else
{
log_.log(Log.ERROR, 5063, this, "getServerByType", "Unable to find default server for "+typeId);
return null;
}
}
public String getDefaultRuntimeValueFor(String typeId)
{
String[] runtimeName = getRuntimesByType(typeId);
for (int i=0; i<runtimeName.length; i++)
{
WebServiceRuntime wsr = (WebServiceRuntime)webServiceRuntimes.get(runtimeName[i]);
if (wsr.getIsDefault())
return runtimeName[i];
}
return runtimeName[0];
}
public String getServerIdForFactoryId(String factoryId) {
Iterator iter = webServiceServers.values().iterator();
while (iter.hasNext()) {
WebServiceServer wss = (WebServiceServer)iter.next();
if (wss.getFactoryId().equals(factoryId)) {
return wss.getId();
}
}
return null;
}
public final class WebServiceServerRuntimeType_
{
public String typeId_;
public String serverId_;
public String runtimeId_;
public IConfigurationElement element_;
public WebServiceServerRuntimeType_(String serverId, String runtimeId,String typeId, IConfigurationElement elem)
{
this.typeId_ = typeId;
this.serverId_ = serverId;
this.runtimeId_ = runtimeId;
this.element_ = elem;
}
public IConfigurationElement getConfigurationElementFor(String serverID, String runtimeID, String typeID)
{
if (this.typeId_.equals(typeID) && this.serverId_.equals(serverID) && this.runtimeId_.equals(runtimeID))
return this.element_;
return null;
}
public boolean hasConfigElementFor(String factoryID, String runtimeID, String typeID)
{
String serverID = getServerIdForFactoryId( factoryID );
if (typeId_.equalsIgnoreCase(typeID) &&
serverId_.equalsIgnoreCase(serverID) &&
runtimeId_.equalsIgnoreCase(runtimeID))
{
return true;
}
return false;
}
}
public CommandFragmentFactoryFactory getFactoryFactory( String[] ids )
{
String hashKey = ids[2] + "#" + ids[1] + "#" + ids[0];
CommandWidgetBinding binding = (CommandWidgetBinding)factoryCache_.get( hashKey );
if( binding == null )
{
IConfigurationElement element = getConfigElementFor( ids[2], ids[1], ids[0] );
if( element == null ) return null;
binding = createBinding( element );
factoryCache_.put( hashKey, binding );
binding.registerDataMappings( dataMappingRegistry_ );
if( widgetRegistry_ != null )
{
binding.registerWidgetMappings( widgetRegistry_ );
binding.registerCanFinish( canFinishRegistry_ );
}
}
return binding;
}
private CommandWidgetBinding createBinding(IConfigurationElement element )
{
Vector bindings = new Vector(4);
Vector fragments = new Vector(4);
addBinding( element, "developBinding", bindings );
addBinding( element, "assemblyBinding", bindings );
addBinding( element, "deployBinding", bindings );
addBinding( element, "installBinding", bindings );
fragments.add( new ServicePreDevelopFragment() );
fragments.add( new ServicePreAssemblyFragment() );
fragments.add( new ServicePreDeployFragment() );
fragments.add( new ServicePreInstallFragment() );
return new CommandWidgetBindingList( bindings, fragments );
}
private void addBinding( IConfigurationElement element, String bindingName, Vector list )
{
Object binding = null;
if( element.getAttribute( bindingName ) != null )
{
try
{
binding = element.createExecutableExtension( bindingName );
}
catch( CoreException exc )
{
}
}
list.add( binding );
}
public void setDataMappingRegistry( DataMappingRegistry registry )
{
dataMappingRegistry_ = registry;
// We need to rebuild the factory cache each time we start the server
// wizard.
factoryCache_ = new HashMap();
}
public void setWidgetRegistry( WidgetRegistry registry )
{
widgetRegistry_ = registry;;
}
public void setCanFinishRegistry( CanFinishRegistry registry )
{
canFinishRegistry_ = registry;
}
public String[] getAllServerFactoryIds()
{
Object[] servers = webServiceServers.values().toArray();
String[] factoryIds = new String[servers.length];
for (int i=0; i<servers.length; i++)
{
WebServiceServer wss = (WebServiceServer)servers[i];
factoryIds[i] = wss.getFactoryId();
}
return factoryIds;
}
public String getServerFactoryIdFromServerId(String serverId)
{
Object[] servers = webServiceServers.values().toArray();
for (int i=0; i<servers.length; i++)
{
WebServiceServer wss = (WebServiceServer)servers[i];
if (serverId == wss.getId())
{
return wss.getFactoryId();
}
}
return null;
}
/*
* Returns a cascading list of valid choices for server, runtime, and J2EE levels.
* This is an intersection of what is available for service and client.
*/
public SelectionListChoices getServerToRuntimeToJ2EE()
{
if (serverToRuntimeToJ2EE_!=null)
{
return serverToRuntimeToJ2EE_;
}
String[] servers = getStringArrayIntersection(getAllServerFactoryIds(), WebServiceClientTypeRegistry.getInstance().getAllClientServerFactoryIds());
SelectionList serversList = new SelectionList(servers, 0);
Vector choices = new Vector();
for (int i=0; i<servers.length; i++)
{
choices.add(getRuntimeChoices(servers[i]));
}
serverToRuntimeToJ2EE_ = new SelectionListChoices(serversList, choices);
return serverToRuntimeToJ2EE_;
}
private SelectionListChoices getRuntimeChoices(String serverFactoryId)
{
String[] serviceRuntimes = getRuntimeIDsByServerFactoryID(serverFactoryId);
String[] clientRuntimes = WebServiceClientTypeRegistry.getInstance().getRuntimeIdsByServerFactoryId(serverFactoryId);
String[] runtimes = getStringArrayIntersection(serviceRuntimes, clientRuntimes);
SelectionList runtimesList = new SelectionList(runtimes, 0);
Vector choices = new Vector();
for (int i=0; i<runtimes.length; i++)
{
choices.add(getJ2EEChoices(runtimes[i]));
}
return new SelectionListChoices(runtimesList, choices);
}
private SelectionListChoices getJ2EEChoices(String runtimeId)
{
String[] serviceJ2EEVersions = getWebServiceRuntimeById(runtimeId).getJ2EEVersions();
String[] clientJ2EEVersions = WebServiceClientTypeRegistry.getInstance().getWebServiceRuntimeById(runtimeId).getJ2EEVersions();
String[] j2eeVersions = getStringArrayIntersection(serviceJ2EEVersions, clientJ2EEVersions);
SelectionList j2eeVersionsList = new SelectionList(j2eeVersions, 0);
return new SelectionListChoices(j2eeVersionsList, null);
}
public String getServerLabel(String factoryId)
{
if (factoryId==null || factoryId.length()==0)
return null;
if (serverLabelByFactoryId_.containsKey(factoryId))
{
return (String)serverLabelByFactoryId_.get(factoryId);
}
else
{
return null;
}
}
public String getServerFactoryId(String label)
{
if (label==null || label.length()==0)
return null;
if (serverFactoryIdByLabel_.containsKey(label))
{
return (String)serverFactoryIdByLabel_.get(label);
}
else
{
return null;
}
}
public String getRuntimeLabel(String id)
{
if (id==null || id.length()==0)
return null;
return (String) runtimeLabelById_.get(id);
}
public String getRuntimeId(String label)
{
if (label==null || label.length()==0)
return null;
return (String)runtimeIdByLabel_.get(label);
}
private String[] getStringArrayIntersection(String[] a1, String[] a2)
{
Vector vf = new Vector();
if (a1==null || a2==null)
{
return convertToStringArray(vf.toArray());
}
for (int i=0; i<a1.length; i++)
{
for (int j=0; j<a2.length; j++)
{
if (a1[i].equals(a2[j]))
{
vf.add(a1[i]);
break;
}
}
}
return convertToStringArray(vf.toArray());
}
private String[] convertToStringArray(Object[] a)
{
if (a==null) return new String[0];
int length = a.length;
String[] sa = new String[length];
for (int i=0; i<length; i++)
{
Object obj = a[i];
if (obj instanceof String)
{
sa[i] = (String)obj;
}
}
return sa;
}
}