### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.ui Index: ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java,v retrieving revision 1.143 diff -u -r1.143 PreferencesMessages.java --- ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java 27 Apr 2011 07:51:27 -0000 1.143 +++ ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java 15 Jun 2011 06:51:35 -0000 @@ -621,6 +621,7 @@ public static String UserLibraryPreferencePage_libraries_new_button; public static String UserLibraryPreferencePage_libraries_edit_button; public static String UserLibraryPreferencePage_libraries_addjar_button; + public static String UserLibraryPreferencePage_libraries_addexternaljar_button; public static String UserLibraryPreferencePage_libraries_remove_button; public static String UserLibraryPreferencePage_libraries_load_button; public static String UserLibraryPreferencePage_libraries_save_button; Index: ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties,v retrieving revision 1.529 diff -u -r1.529 PreferencesMessages.properties --- ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties 15 Apr 2011 14:09:07 -0000 1.529 +++ ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties 15 Jun 2011 06:51:36 -0000 @@ -714,6 +714,7 @@ UserLibraryPreferencePage_libraries_new_button=&New... UserLibraryPreferencePage_libraries_edit_button=&Edit... UserLibraryPreferencePage_libraries_addjar_button=Add &JARs... +UserLibraryPreferencePage_libraries_addexternaljar_button=Add E&xternal JARs... UserLibraryPreferencePage_libraries_remove_button=&Remove UserLibraryPreferencePage_libraries_load_button=I&mport... UserLibraryPreferencePage_libraries_save_button=E&xport... Index: ui/org/eclipse/jdt/internal/ui/preferences/UserLibraryPreferencePage.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/UserLibraryPreferencePage.java,v retrieving revision 1.56 diff -u -r1.56 UserLibraryPreferencePage.java --- ui/org/eclipse/jdt/internal/ui/preferences/UserLibraryPreferencePage.java 1 Mar 2011 11:50:45 -0000 1.56 +++ ui/org/eclipse/jdt/internal/ui/preferences/UserLibraryPreferencePage.java 15 Jun 2011 06:51:37 -0000 @@ -766,11 +766,12 @@ private static final int IDX_NEW= 0; private static final int IDX_EDIT= 1; private static final int IDX_ADD= 2; - private static final int IDX_REMOVE= 3; - private static final int IDX_UP= 5; - private static final int IDX_DOWN= 6; - private static final int IDX_LOAD= 8; - private static final int IDX_SAVE= 9; + private static final int IDX_ADD_EXTERNAL= 3; + private static final int IDX_REMOVE= 4; + private static final int IDX_UP= 6; + private static final int IDX_DOWN= 7; + private static final int IDX_LOAD= 9; + private static final int IDX_SAVE= 10; /** * Constructor for ClasspathVariablesPreferencePage @@ -793,6 +794,7 @@ PreferencesMessages.UserLibraryPreferencePage_libraries_new_button, PreferencesMessages.UserLibraryPreferencePage_libraries_edit_button, PreferencesMessages.UserLibraryPreferencePage_libraries_addjar_button, + PreferencesMessages.UserLibraryPreferencePage_libraries_addexternaljar_button, PreferencesMessages.UserLibraryPreferencePage_libraries_remove_button, null, PreferencesMessages.UserLibraryPreferencePage_UserLibraryPreferencePage_libraries_up_button, @@ -1032,6 +1034,7 @@ field.enableButton(IDX_REMOVE, canRemove(list)); field.enableButton(IDX_EDIT, canEdit(list)); field.enableButton(IDX_ADD, canAdd(list)); + field.enableButton(IDX_ADD_EXTERNAL, canAdd(list)); field.enableButton(IDX_UP, canMoveUp(list)); field.enableButton(IDX_DOWN, canMoveDown(list)); field.enableButton(IDX_SAVE, field.getSize() > 0); @@ -1042,6 +1045,8 @@ editUserLibraryElement(null); } else if (index == IDX_ADD) { doAdd(field.getSelectedElements()); + } else if (index == IDX_ADD_EXTERNAL) { + doAddExternal(field.getSelectedElements()); } else if (index == IDX_REMOVE) { doRemove(field.getSelectedElements()); } else if (index == IDX_EDIT) { @@ -1103,7 +1108,7 @@ } private void editArchiveElement(CPListElement existingElement, CPUserLibraryElement parent) { - CPListElement[] elements= openExtJarFileDialog(existingElement, parent); + CPListElement[] elements= openJarFileDialog(existingElement, parent); if (elements != null) { for (int i= 0; i < elements.length; i++) { if (existingElement != null) { @@ -1169,6 +1174,32 @@ private void doAdd(List list) { if (canAdd(list)) { + CPUserLibraryElement parentLibrary = getSingleSelectedLibrary(list); + //editArchiveElement(null, element); + + IPath selectedPaths[] = BuildPathDialogAccess.chooseJAREntries(this.getShell(), null, new IPath[0]); + + if (selectedPaths != null) { + List elements = new ArrayList(); + for (int i= 0; i < selectedPaths.length; i++) { + CPListElement cpElement = new CPListElement(parentLibrary, fDummyProject, IClasspathEntry.CPE_LIBRARY, selectedPaths[i], null); + cpElement.setAttribute(CPListElement.SOURCEATTACHMENT, BuildPathSupport.guessSourceAttachment(cpElement)); + cpElement.setAttribute(CPListElement.JAVADOC, BuildPathSupport.guessJavadocLocation(cpElement)); + + elements.add(cpElement); + + parentLibrary.add(cpElement); + } + fLibraryList.refresh(parentLibrary); + fLibraryList.selectElements(new StructuredSelection(elements)); + fLibraryList.expandElement(parentLibrary, 2); + } + + } + } + + private void doAddExternal(List list) { + if (canAdd(list)) { CPUserLibraryElement element= getSingleSelectedLibrary(list); editArchiveElement(null, element); } @@ -1331,9 +1362,43 @@ } return false; } + + private CPListElement[] openJarFileDialog(CPListElement existing, Object parent) { + if (existing == null) { + return doOpenExternalJarFileDialog(existing, parent); + } + else { + IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot(); + IPath path = existing.getPath(); + + if (root.exists(path)) { + return doOpenInternalJarFileDialog(existing, parent); + } + else { + return doOpenExternalJarFileDialog(existing, parent); + } + } + } - - private CPListElement[] openExtJarFileDialog(CPListElement existing, Object parent) { + private CPListElement[] doOpenInternalJarFileDialog(CPListElement existing, Object parent) { + IPath path = existing.getPath(); + IPath selectedPaths[] = BuildPathDialogAccess.chooseJAREntries(this.getShell(), path, new IPath[0]); + + if (selectedPaths != null) { + List elements = new ArrayList(); + for (int i= 0; i < selectedPaths.length; i++) { + CPListElement cpElement = new CPListElement(parent, fDummyProject, IClasspathEntry.CPE_LIBRARY, selectedPaths[i], null); + cpElement.setAttribute(CPListElement.SOURCEATTACHMENT, BuildPathSupport.guessSourceAttachment(cpElement)); + cpElement.setAttribute(CPListElement.JAVADOC, BuildPathSupport.guessJavadocLocation(cpElement)); + + elements.add(cpElement); + } + return elements.toArray(new CPListElement[0]); + } + return null; + } + + private CPListElement[] doOpenExternalJarFileDialog(CPListElement existing, Object parent) { String lastUsedPath; if (existing != null) { lastUsedPath= existing.getPath().removeLastSegments(1).toOSString();