Author: hibou Date: Mon May 4 20:40:14 2009 New Revision: 771432 URL: http://svn.apache.org/viewvc?rev=771432&view=rev Log: IVYDE-164: - now the "Add Library" will open the wizard with pre-filled fields - the uniqueness of a container in a project is by configuration and ivy.xml Added: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/NewIvyDEContainerWizard.java (with props) Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/CHANGES.txt ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/plugin.xml ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvydeContainerPage.java ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/actions/CreateContainerAction.java Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/CHANGES.txt URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/CHANGES.txt?rev=771432&r1=771431&r2=771432&view=diff ============================================================================== --- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/CHANGES.txt (original) +++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/CHANGES.txt Mon May 4 20:40:14 2009 @@ -33,6 +33,7 @@ - FIX: ResolveAllAction does not resolve multiple IvyDE containers in a single project (IVYDE-175) - FIX: The sources/javadocs are not added for dependencies which don't have a fixed revision (IVYDE-174) - FIX: Refresh action is detaching javadoc and sources (IVYDE-176) +- FIX: Add Ivy Library command adds classpath container even though it already exists (IVYDE-164) version 2.0.0 beta1 ========================== Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/plugin.xml URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/plugin.xml?rev=771432&r1=771431&r2=771432&view=diff ============================================================================== --- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/plugin.xml (original) +++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/plugin.xml Mon May 4 20:40:14 2009 @@ -106,7 +106,7 @@ nameFilter="*.xml"> Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java?rev=771432&r1=771431&r2=771432&view=diff ============================================================================== --- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java (original) +++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathUtil.java Mon May 4 20:40:14 2009 @@ -20,16 +20,13 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.apache.ivyde.eclipse.IvyPlugin; import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.IClasspathAttribute; import org.eclipse.jdt.core.IClasspathContainer; import org.eclipse.jdt.core.IClasspathEntry; @@ -46,37 +43,6 @@ } /** - * Adds an Ivy classpath container to the list of existing classpath entries in the given - * project. - * - * @param project - * the project to which the classpath container should be added - * @param projectRelativePath - * the path relative to the project of the module descriptor file to use for the - * classpath container - * @param confs - * the configurations to use in the classpath container. - */ - public static void addCPContainer(IJavaProject project, IPath projectRelativePath, String confs) { - try { - IClasspathEntry newEntry = JavaCore.newContainerEntry(new Path( - IvyClasspathContainer.CONTAINER_ID).append(projectRelativePath).append(confs)); - - IClasspathEntry[] entries = project.getRawClasspath(); - - List newEntries = new ArrayList(Arrays.asList(entries)); - newEntries.add(newEntry); - entries = (IClasspathEntry[]) newEntries - .toArray(new IClasspathEntry[newEntries.size()]); - - project.setRawClasspath(entries, project.getOutputLocation(), null); - } catch (CoreException e) { - // unless there are issues with the JDT, this should never happen - IvyPlugin.log(e); - } - } - - /** * Get the Ivy classpath container from the selection in the Java package view * * @param selection Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvydeContainerPage.java URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvydeContainerPage.java?rev=771432&r1=771431&r2=771432&view=diff ============================================================================== --- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvydeContainerPage.java (original) +++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvydeContainerPage.java Mon May 4 20:40:14 2009 @@ -17,7 +17,10 @@ */ package org.apache.ivyde.eclipse.cpcontainer; +import java.util.ArrayList; import java.util.Collections; +import java.util.Iterator; +import java.util.List; import org.apache.ivy.core.module.descriptor.ModuleDescriptor; import org.apache.ivyde.eclipse.IvyDEException; @@ -108,6 +111,31 @@ error = "Choose an ivy file"; } else { error = null; + // check that the chosen configuration doesn't already exist + // the uniqueness is for xmlivyPath + conf + List/* */containers = IvyClasspathUtil + .getIvyClasspathContainers(project); + if (containers != null) { + Iterator/* */itContainers = containers.iterator(); + while (error == null && itContainers.hasNext()) { + IvyClasspathContainer ivycp = (IvyClasspathContainer) itContainers.next(); + IvyClasspathContainerConfiguration cpc = ivycp.getConf(); + if (cpc.ivyXmlPath.equals(ivyFilePathText.getIvyFilePath())) { + List/* */selecteds = confTableViewer.getSelectedConfigurations(); + if (selecteds.isEmpty() || cpc.confs.contains("*")) { + error = "A container already exists for the selected conf of " + + "the module descriptor"; + } else { + ArrayList list = new ArrayList(cpc.confs); + list.retainAll(selecteds); + if (!list.isEmpty()) { + error = "A container already exists for the selected conf of " + + "the module descriptor"; + } + } + } + } + } } setErrorMessage(error); setPageComplete(error == null); @@ -178,6 +206,10 @@ return true; } + public IJavaProject getProject() { + return project; + } + public IClasspathEntry getSelection() { return entry; } @@ -259,6 +291,7 @@ Label horizontalLine = new Label(headerComposite, SWT.SEPARATOR | SWT.HORIZONTAL); horizontalLine.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, 2, 1)); + //CheckStyle:MagicNumber| OFF Composite configComposite = new Composite(composite, SWT.NONE); configComposite.setLayout(new GridLayout(3, false)); configComposite.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true)); @@ -274,7 +307,8 @@ horizontalLine = new Label(configComposite, SWT.SEPARATOR | SWT.HORIZONTAL); horizontalLine.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, 3, 1)); - + //CheckStyle:MagicNumber| OFN + // Label for ivy file field Label pathLabel = new Label(configComposite, SWT.NONE); pathLabel.setText("Ivy File"); Added: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/NewIvyDEContainerWizard.java URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/NewIvyDEContainerWizard.java?rev=771432&view=auto ============================================================================== --- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/NewIvyDEContainerWizard.java (added) +++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/NewIvyDEContainerWizard.java Mon May 4 20:40:14 2009 @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.ivyde.eclipse.ui; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.apache.ivyde.eclipse.IvyPlugin; +import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathContainer; +import org.apache.ivyde.eclipse.cpcontainer.IvydeContainerPage; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.jdt.core.IClasspathContainer; +import org.eclipse.jdt.core.IClasspathEntry; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jdt.core.JavaModelException; +import org.eclipse.jface.wizard.Wizard; + +public class NewIvyDEContainerWizard extends Wizard { + + private IvydeContainerPage containerPage; + + public NewIvyDEContainerWizard(IJavaProject project, IClasspathEntry entry) { + containerPage = new IvydeContainerPage(); + containerPage.initialize(project, null); + containerPage.setSelection(entry); + } + + public void addPages() { + addPage(containerPage); + } + + public boolean performFinish() { + containerPage.finish(); + IClasspathEntry newEntry = containerPage.getSelection(); + IPath path = newEntry.getPath(); + IJavaProject project = containerPage.getProject(); + try { + IvyClasspathContainer ivycp = new IvyClasspathContainer(project, path, + new IClasspathEntry[0]); + JavaCore.setClasspathContainer(path, new IJavaProject[] {project}, + new IClasspathContainer[] {ivycp}, null); + IClasspathEntry[] entries = project.getRawClasspath(); + List newEntries = new ArrayList(Arrays.asList(entries)); + newEntries.add(newEntry); + entries = (IClasspathEntry[]) newEntries + .toArray(new IClasspathEntry[newEntries.size()]); + project.setRawClasspath(entries, project.getOutputLocation(), null); + ivycp.launchResolve(false, true, null); + } catch (JavaModelException e) { + IvyPlugin.log(e); + return false; + } catch (IOException e) { + IvyPlugin.log(IStatus.ERROR, "", e); + return false; + } + return true; + } + +} Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/NewIvyDEContainerWizard.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/NewIvyDEContainerWizard.java ------------------------------------------------------------------------------ svn:keywords = Date Revision Author HeadURL Id Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/NewIvyDEContainerWizard.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/actions/CreateContainerAction.java URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/actions/CreateContainerAction.java?rev=771432&r1=771431&r2=771432&view=diff ============================================================================== --- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/actions/CreateContainerAction.java (original) +++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/actions/CreateContainerAction.java Mon May 4 20:40:14 2009 @@ -17,14 +17,17 @@ */ package org.apache.ivyde.eclipse.ui.actions; -import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathUtil; +import org.apache.ivyde.eclipse.IvyPlugin; +import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathContainerConfiguration; +import org.apache.ivyde.eclipse.ui.NewIvyDEContainerWizard; import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.IPath; +import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.IWorkbenchWindowActionDelegate; import org.eclipse.ui.PlatformUI; @@ -38,12 +41,6 @@ public CreateContainerAction() { } - /** - * The action has been activated. The argument of the method represents the 'real' action - * sitting in the workbench UI. - * - * @see IWorkbenchWindowActionDelegate#run - */ public void run(IAction action) { ISelection sel = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService() .getSelection(); @@ -52,39 +49,25 @@ Object o = s.getFirstElement(); if (o instanceof IFile) { IFile f = (IFile) o; - - addCPContainer(JavaCore.create(f.getProject()), f.getProjectRelativePath(), "*"); + IJavaProject javaProject = JavaCore.create(f.getProject()); + IvyClasspathContainerConfiguration conf = new IvyClasspathContainerConfiguration( + javaProject, f.getProjectRelativePath().toString(), false); + IClasspathEntry entry = JavaCore.newContainerEntry(conf.getPath()); + WizardDialog dialog = new WizardDialog(IvyPlugin.getActiveWorkbenchShell(), + new NewIvyDEContainerWizard(javaProject, entry)); + dialog.open(); } } } - private void addCPContainer(IJavaProject project, IPath projectRelativePath, String confs) { - IvyClasspathUtil.addCPContainer(project, projectRelativePath, confs); - } - - /** - * Selection in the workbench has been changed. We can change the state of the 'real' action - * here if we want, but this can only happen after the delegate has been created. - * - * @see IWorkbenchWindowActionDelegate#selectionChanged - */ public void selectionChanged(IAction action, ISelection selection) { + // nothing to change } - /** - * We can use this method to dispose of any system resources we previously allocated. - * - * @see IWorkbenchWindowActionDelegate#dispose - */ public void dispose() { + // nothing to dispose } - /** - * We will cache window object in order to be able to provide parent shell for the message - * dialog. - * - * @see IWorkbenchWindowActionDelegate#init - */ public void init(IWorkbenchWindow window) { this.window = window; }