| /******************************************************************************* |
| * Copyright (c) 2000, 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.ext; |
| |
| import java.util.Hashtable; |
| import java.util.Vector; |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.jst.ws.internal.data.LabelsAndIds; |
| |
| |
| /** |
| * This is a generic registry which sets up general code in handling |
| * IConfigElements for an extension |
| */ |
| public abstract class WebServiceExtensionRegistryImpl implements WebServiceExtensionRegistry |
| { |
| // Copyright |
| public static final String copyright = "(c) Copyright IBM Corporation 2000, 2002."; |
| |
| private Hashtable nameExtensionTable_; |
| private Vector id_; |
| private Vector label_; |
| private LabelsAndIds labelsandids_; |
| |
| public WebServiceExtensionRegistryImpl() |
| { |
| nameExtensionTable_ = new Hashtable(); |
| label_ = new Vector(); |
| id_ = new Vector(); |
| loadExtensions(); |
| } |
| |
| /** |
| * Children registries will have different extension types |
| * @return WebserviceExtension holds a config elem |
| * for that extension capable of creating an executable file |
| */ |
| public abstract WebServiceExtension createWebServiceExtension(IConfigurationElement configElement); |
| |
| /** |
| * Children must implement how they get the IConfigurationElement[] |
| * @return IConfigurationElement[] an array of elements particular to that |
| * extension |
| */ |
| public abstract IConfigurationElement[] getConfigElements(); |
| |
| /* |
| * Loads WebServiceExtensions for WebServiceClientTest into this registry. |
| * This is done by querying the plugin registry for all extensions |
| * that extend webServiceClientTest |
| */ |
| private void loadExtensions () |
| { |
| IConfigurationElement[] config = getConfigElements(); |
| |
| for(int idx=0; idx<config.length; idx++) |
| { |
| IConfigurationElement elem = config[idx]; |
| String label = elem.getAttribute( "label" ); |
| String id = elem.getAttribute( "id" ); |
| WebServiceExtension webServiceExtension = createWebServiceExtension(elem); |
| nameExtensionTable_.put(label,webServiceExtension); |
| label_.add(label); |
| id_.add(id); |
| } |
| } |
| |
| /** |
| * Returns the names of all registered extensions |
| * @return The names of all registered extensions. |
| */ |
| public String[] getWebServiceExtensionNames () |
| { |
| return (String[])nameExtensionTable_.keySet().toArray( new String[0] ); |
| } |
| |
| /** |
| * Return the names and Ids |
| */ |
| public LabelsAndIds getLabelsAndIDs() |
| { |
| labelsandids_ = new LabelsAndIds(); |
| labelsandids_.setLabels_((String[])label_.toArray( new String[0] )); |
| labelsandids_.setIds_((String[])id_.toArray( new String[0] )); |
| return labelsandids_; |
| } |
| |
| /** |
| * Returns the extension object of the given name |
| * @return WebServiceExtension object |
| */ |
| public WebServiceExtension getWebServiceExtensionsByName( String name) |
| { |
| return (WebServiceExtension)nameExtensionTable_.get(name); |
| } |
| |
| /** |
| * Returns All extention objects in this registry |
| *@return WebServiceExtension objects |
| */ |
| public WebServiceExtension[] getWebServiceExtensions() |
| { |
| return (WebServiceExtension[])nameExtensionTable_.values().toArray( new WebServiceExtension[0] ); |
| } |
| |
| } |