blob: 3f298ffb5f5b165c206883a3453e7cf437e4f675 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.ws.internal.consumption.ui.wizard;
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.jst.ws.internal.common.ResourceUtils;
public class ClientProjectTypeRegistry
{
private static ClientProjectTypeRegistry instance_;
private IConfigurationElement[] configElements_;
private ClientProjectTypeRegistry()
{
init();
}
/**
* Returns a singleton instance of this class.
* @return A singleton ClientProjectTypeRegistry object.
*/
public static ClientProjectTypeRegistry getInstance()
{
if (instance_ == null)
instance_ = new ClientProjectTypeRegistry();
return instance_;
}
public void init()
{
IExtensionRegistry reg = Platform.getExtensionRegistry();
configElements_ = reg.getConfigurationElementsFor("org.eclipse.jst.ws.consumption.ui", "clientProjectType");
}
public IConfigurationElement getDefaultElement()
{
return getElementById("org.eclipse.jst.ws.consumption.ui.clientProjectType.Web");
}
public IConfigurationElement getElementById(String id)
{
return getElementByAttribute("id", id);
}
public IConfigurationElement getElementByLabel(String label)
{
return getElementByAttribute("label", label);
}
public IConfigurationElement getElementByProject(IProject project)
{
for (int i = 0; i < configElements_.length; i++)
if (include(project, configElements_[i].getAttribute("include")) && exclude(project, configElements_[i].getAttribute("exclude")))
return configElements_[i];
return null;
}
private IConfigurationElement getElementByAttribute(String name, String value)
{
for (int i = 0; i < configElements_.length; i++)
if (configElements_[i].getAttribute(name).equals(value))
return configElements_[i];
return null;
}
public IProject[] getProjects(String id)
{
Vector v = new Vector();
IConfigurationElement element = getElementById(id);
if (element != null)
{
IProject[] workspaceProjs = ResourcesPlugin.getWorkspace().getRoot().getProjects();
for (int i = 0; i < workspaceProjs.length; i++) {
// TODO: Needs to be refactored to work with project/module topology described in XP
//if (include(workspaceProjs[i], element.getAttribute("include")) && exclude(workspaceProjs[i], element.getAttribute("exclude")))
if (ResourceUtils.isWebProject(workspaceProjs[i]) || ResourceUtils.isEJBProject(workspaceProjs[i]))
{
v.add(workspaceProjs[i]);
}
}
}
IProject[] projects = new IProject[v.size()];
v.copyInto(projects);
return projects;
}
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;
}
}