| /******************************************************************************* |
| * 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 |
| *******************************************************************************/ |
| /* |
| * $RCSfile: PDEContributeClasspath.java,v $ |
| * $Revision: 1.3 $ $Date: 2005/02/15 22:53:46 $ |
| */ |
| package org.eclipse.jem.internal.proxy.core; |
| |
| import java.io.File; |
| import java.net.MalformedURLException; |
| import java.net.URL; |
| import java.util.*; |
| import java.util.logging.Level; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.jdt.core.JavaCore; |
| import org.eclipse.pde.core.plugin.*; |
| import org.eclipse.pde.internal.core.*; |
| |
| |
| |
| /** |
| * Contribute to classpath PDE entries that are needed for a launch. |
| * <p> |
| * This is a special class that should not be referenced directly from code. Reference it through the |
| * interface that it implements. |
| * |
| * @see org.eclipse.jem.internal.proxy.core.IPDEContributeClasspath |
| * @since 1.0.2 |
| */ |
| class PDEContributeClasspath implements IPDEContributeClasspath { |
| |
| /* |
| * (non-Javadoc) |
| * @see org.eclipse.jem.internal.proxy.remote.IPDEContributeClasspath#getPDEContributions(org.eclipse.core.resources.IProject) |
| */ |
| public void getPDEContributions(IConfigurationContributionController controller) throws CoreException { |
| Map plugins = new HashMap(); |
| ProxyPlugin.getPlugin().findPlugins(plugins, true, true, controller.getJavaProject()); |
| if (!plugins.isEmpty()) { |
| Collection pluginIds = plugins.keySet(); |
| PluginModelManager modelManager = PDECore.getDefault().getModelManager(); |
| IFragmentModel[] fragments = modelManager.getFragments(); |
| for (int i = 0; i < fragments.length; i++) { |
| IFragment fragment = fragments[i].getFragment(); |
| if (pluginIds.contains(fragment.getPluginId())) { |
| // We'll do a cheat for now and assume fragment is for same version of plugin. PDECore actually |
| // checks the version of the fragment against the version of the plugin to see they are for each |
| // other, but we'll just assume they are for now. Change this later if we actually do run into this case. |
| IResource resource = fragment.getModel().getUnderlyingResource(); |
| if (resource != null) { |
| IProject fragProject = resource.getProject(); |
| if (fragProject.hasNature(JavaCore.NATURE_ID)) { |
| controller.contributeProject(fragProject); |
| } |
| continue; |
| } |
| |
| IPluginLibrary[] libraries = fragment.getLibraries(); |
| for (int j = 0; j < libraries.length; j++) { |
| IPluginLibrary library = libraries[j]; |
| String name = library.getName(); |
| String expandedName = ClasspathUtilCore.expandLibraryName(name); |
| |
| IPluginModelBase model = library.getPluginModel(); |
| URL url = getPath(model, expandedName); |
| if (url != null) |
| controller.contributeClasspath(url, IConfigurationContributionController.APPEND_USER_CLASSPATH); |
| } |
| } |
| } |
| } |
| |
| return; |
| } |
| |
| private URL getPath(IPluginModelBase model, String libraryName) { |
| try { |
| IResource resource = model.getUnderlyingResource(); |
| if (resource != null) { |
| IResource jarFile = resource.getProject().findMember(libraryName); |
| if (jarFile != null) |
| return jarFile.getFullPath().toFile().toURL(); |
| } else { |
| File file = new File(model.getInstallLocation(), libraryName); |
| if (file.exists()) |
| return file.toURL(); |
| } |
| } catch (MalformedURLException e) { |
| ProxyPlugin.getPlugin().getLogger().log(e, Level.WARNING); |
| } |
| return null; |
| } |
| |
| |
| } |