/******************************************************************************* * Copyright (c) 2000, 2011 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.jdt.internal.debug.ui.sourcelookup; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.sourcelookup.ISourceContainer; import org.eclipse.debug.core.sourcelookup.ISourceLookupDirector; import org.eclipse.debug.ui.sourcelookup.AbstractSourceContainerBrowser; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.launching.JavaRuntime; import org.eclipse.jdt.launching.sourcelookup.containers.ClasspathContainerSourceContainer; import org.eclipse.jdt.ui.wizards.BuildPathDialogAccess; import org.eclipse.swt.widgets.Shell; /** * Used to choose a classpath container. * * @since 3.0 */ public class ClasspathContainerSourceContainerBrowser extends AbstractSourceContainerBrowser { /* (non-Javadoc) * @see org.eclipse.debug.internal.ui.sourcelookup.ISourceContainerBrowser#createSourceContainers(org.eclipse.swt.widgets.Shell, org.eclipse.debug.core.ILaunchConfiguration) */ @Override public ISourceContainer[] addSourceContainers(Shell shell, ISourceLookupDirector director) { return editLibraries(shell, director, null); // SourceLookupMessages.getString("ClasspathContainerSourceContainerBrowser.0") } /* (non-Javadoc) * @see org.eclipse.debug.ui.sourcelookup.ISourceContainerBrowser#canEditSourceContainers(org.eclipse.debug.core.sourcelookup.ISourceLookupDirector, org.eclipse.debug.core.sourcelookup.ISourceContainer[]) */ @Override public boolean canEditSourceContainers(ISourceLookupDirector director, ISourceContainer[] containers) { return containers.length == 1; } /* (non-Javadoc) * @see org.eclipse.debug.ui.sourcelookup.ISourceContainerBrowser#editSourceContainers(org.eclipse.swt.widgets.Shell, org.eclipse.debug.core.sourcelookup.ISourceLookupDirector, org.eclipse.debug.core.sourcelookup.ISourceContainer[]) */ @Override public ISourceContainer[] editSourceContainers(Shell shell, ISourceLookupDirector director, ISourceContainer[] containers) { ClasspathContainerSourceContainer sourceContainer = (ClasspathContainerSourceContainer)containers[0]; IPath containerPath = (sourceContainer).getPath(); IClasspathEntry classpathEntry = JavaCore.newContainerEntry(containerPath); return editLibraries(shell, director, classpathEntry); //, SourceLookupMessages.getString("ClasspathContainerSourceContainerBrowser.1") } /** * Create or edit a container classpath entry. * * @param shell shell to open dialog on * @param director source lookup director * @param classpathEntry entry to edit, or <code>null</code> if creating * @param title dialog title * @return new or replacement source containers */ private ISourceContainer[] editLibraries(Shell shell, ISourceLookupDirector director, IClasspathEntry classpathEntry) { IJavaProject project = null; ILaunchConfiguration configuration = director.getLaunchConfiguration(); if (configuration != null) { try { project = JavaRuntime.getJavaProject(configuration); } catch (CoreException e) { } } IClasspathEntry[] edits = null; IClasspathEntry[] created = null; if (classpathEntry == null) { edits = new IClasspathEntry[0]; created = BuildPathDialogAccess.chooseContainerEntries(shell, project, edits); } else { edits = new IClasspathEntry[]{classpathEntry}; IClasspathEntry edit = BuildPathDialogAccess.configureContainerEntry(shell, classpathEntry, project, edits); if (edit != null) { created = new IClasspathEntry[]{edit}; } } if (created != null) { ISourceContainer[] newContainers = new ISourceContainer[created.length]; for (int i = 0; i < created.length; i++) { IClasspathEntry entry = created[i]; ClasspathContainerSourceContainer container = new ClasspathContainerSourceContainer(entry.getPath()); container.init(director); newContainers[i] = container; } return newContainers; } return new ISourceContainer[0]; } }