1 /*******************************************************************************
2 * Copyright (c) 2000, 2011 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * IBM Corporation - initial API and implementation
10 * Konstantin Komissarchik <konstantin.komissarchik@oracle.com> - [build path] editing user library properties drops classpath entry attributes - http://bugs.eclipse.org/311603
11 *******************************************************************************/
12 package org.eclipse.jdt.internal.ui.wizards.buildpaths;
14 import java.util.Collections;
15 import java.util.HashMap;
16 import java.util.HashSet;
17 import java.util.List;
20 import org.eclipse.swt.widgets.Composite;
22 import org.eclipse.core.runtime.IPath;
23 import org.eclipse.core.runtime.IStatus;
25 import org.eclipse.core.resources.IProject;
26 import org.eclipse.core.resources.IWorkspaceRoot;
27 import org.eclipse.core.resources.ResourcesPlugin;
29 import org.eclipse.ui.dialogs.PreferencesUtil;
31 import org.eclipse.jdt.core.IClasspathEntry;
32 import org.eclipse.jdt.core.IJavaProject;
33 import org.eclipse.jdt.core.JavaCore;
35 import org.eclipse.jdt.ui.wizards.IClasspathContainerPage;
36 import org.eclipse.jdt.ui.wizards.IClasspathContainerPageExtension;
37 import org.eclipse.jdt.ui.wizards.IClasspathContainerPageExtension2;
38 import org.eclipse.jdt.ui.wizards.NewElementWizardPage;
40 import org.eclipse.jdt.internal.ui.JavaPluginImages;
41 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
42 import org.eclipse.jdt.internal.ui.preferences.UserLibraryPreferencePage;
43 import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
44 import org.eclipse.jdt.internal.ui.wizards.dialogfields.CheckedListDialogField;
45 import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
46 import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
47 import org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter;
48 import org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField;
53 public class UserLibraryWizardPage extends NewElementWizardPage implements IClasspathContainerPage, IClasspathContainerPageExtension, IClasspathContainerPageExtension2 {
55 public CheckedListDialogField<CPUserLibraryElement> fLibrarySelector;
56 public CPUserLibraryElement fEditResult;
57 public Set<IPath> fUsedPaths;
58 public boolean fIsEditMode;
59 public IJavaProject fProject;
60 IClasspathEntry fOldClasspathEntry;
62 public UserLibraryWizardPage() {
63 super("UserLibraryWizardPage"); //$NON-NLS-1$
64 setTitle(NewWizardMessages.UserLibraryWizardPage_title);
65 setImageDescriptor(JavaPluginImages.DESC_WIZBAN_ADD_LIBRARY);
66 updateDescription(null);
67 fUsedPaths= new HashSet<IPath>();
68 fProject= createPlaceholderProject();
70 LibraryListAdapter adapter= new LibraryListAdapter();
71 String[] buttonLabels= new String[] {
72 NewWizardMessages.UserLibraryWizardPage_list_config_button
74 adapter.generated_2169316697622006592(this, buttonLabels);
76 updateStatus(validateSetting(Collections.<CPUserLibraryElement>emptyList()));
79 private static IJavaProject createPlaceholderProject() {
80 String name= "####internal"; //$NON-NLS-1$
81 IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
83 IProject project= root.getProject(name);
84 if (!project.exists()) {
85 return JavaCore.create(project);
91 public void updateDescription(IClasspathEntry containerEntry) {
92 if (containerEntry == null || containerEntry.getPath().segmentCount() != 2) {
93 setDescription(NewWizardMessages.UserLibraryWizardPage_description_new);
95 setDescription(NewWizardMessages.UserLibraryWizardPage_description_edit);
99 public List<CPUserLibraryElement> updateLibraryList() {
100 HashSet<String> oldNames= new HashSet<String>();
101 HashSet<String> oldCheckedNames= new HashSet<String>();
102 return fLibrarySelector.generated_9040104941374947180(this, oldNames, oldCheckedNames);
105 private void doDialogFieldChanged(DialogField field) {
106 if (field == fLibrarySelector) {
107 List<CPUserLibraryElement> list= fLibrarySelector.generated_2265980569471148265(this);
108 updateStatus(validateSetting(list));
112 private IStatus validateSetting(List<CPUserLibraryElement> selected) {
113 int nSelected= selected.size();
114 if (nSelected == 0) {
115 return new StatusInfo(IStatus.ERROR, NewWizardMessages.UserLibraryWizardPage_error_selectentry);
116 } else if (fIsEditMode && nSelected > 1) {
117 return new StatusInfo(IStatus.ERROR, NewWizardMessages.UserLibraryWizardPage_error_selectonlyone);
119 for (int i= 0; i < selected.size(); i++) {
120 CPUserLibraryElement curr= selected.get(i);
121 if (fUsedPaths.contains(curr.getPath())) {
122 return new StatusInfo(IStatus.ERROR, NewWizardMessages.UserLibraryWizardPage_error_alreadyoncp);
125 return new StatusInfo();
128 private void doButtonPressed(int index) {
130 HashMap<String, String> data= new HashMap<String, String>(3);
131 if (fEditResult != null) {
132 data.put(UserLibraryPreferencePage.DATA_LIBRARY_TO_SELECT, fEditResult.getName());
134 String id= UserLibraryPreferencePage.ID;
135 PreferencesUtil.createPreferenceDialogOn(getShell(), id, new String[] { id }, data).open();
137 List<CPUserLibraryElement> newEntries= updateLibraryList();
138 if (newEntries.size() > 0) {
140 fLibrarySelector.setChecked(newEntries.get(0), true);
142 fLibrarySelector.setCheckedElements(newEntries);
146 fLibrarySelector.generated_74378875948725174();
150 private void doDoubleClicked(ListDialogField<CPUserLibraryElement> field) {
151 if (field == fLibrarySelector) {
152 fLibrarySelector.generated_8759598669159381343(this);
157 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
159 public void createControl(Composite parent) {
160 Composite composite= fLibrarySelector.generated_6675190191439284582(parent);
161 setControl(composite);
165 * @see org.eclipse.jdt.ui.wizards.NewElementWizardPage#setVisible(boolean)
169 public void setVisible(boolean visible) {
170 super.setVisible(visible);
172 fLibrarySelector.setFocus();
177 * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPage#finish()
179 public boolean finish() {
184 * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPage#getSelection()
186 public IClasspathEntry getSelection() {
187 if (fEditResult != null) {
188 return fEditResult.generated_5770402405348747195(this);
194 * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPageExtension2#getNewContainers()
196 public IClasspathEntry[] getNewContainers() {
197 List<CPUserLibraryElement> selected= fLibrarySelector.getCheckedElements();
198 IClasspathEntry[] res= new IClasspathEntry[selected.size()];
199 for (int i= 0; i < res.length; i++) {
200 CPUserLibraryElement curr= selected.get(i);
201 res[i]= JavaCore.newContainerEntry(curr.getPath(), false);
207 * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPage#setSelection(org.eclipse.jdt.core.IClasspathEntry)
209 public void setSelection(IClasspathEntry containerEntry) {
210 fOldClasspathEntry= containerEntry;
212 fLibrarySelector.generated_8660812889687355297(this, containerEntry);
215 class LibraryListAdapter implements IListAdapter<CPUserLibraryElement>, IDialogFieldListener {
217 public LibraryListAdapter() {
220 public void dialogFieldChanged(DialogField field) {
221 doDialogFieldChanged(field);
224 public void customButtonPressed(ListDialogField<CPUserLibraryElement> field, int index) {
225 doButtonPressed(index);
228 public void selectionChanged(ListDialogField<CPUserLibraryElement> field) {
231 public void doubleClicked(ListDialogField<CPUserLibraryElement> field) {
232 doDoubleClicked(field);
235 public void generated_2169316697622006592(UserLibraryWizardPage userlibrarywizardpage, String[] buttonLabels) {
236 userlibrarywizardpage.fLibrarySelector= new CheckedListDialogField<CPUserLibraryElement>(this, buttonLabels, new CPListLabelProvider());
237 userlibrarywizardpage.fLibrarySelector.setDialogFieldListener(this);
238 userlibrarywizardpage.fLibrarySelector.setLabelText(NewWizardMessages.UserLibraryWizardPage_list_label);
243 * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPageExtension#initialize(org.eclipse.jdt.core.IJavaProject, org.eclipse.jdt.core.IClasspathEntry[])
245 public void initialize(IJavaProject project, IClasspathEntry[] currentEntries) {
246 for (int i= 0; i < currentEntries.length; i++) {
247 IClasspathEntry curr= currentEntries[i];
248 if (curr.getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
249 fUsedPaths.add(curr.getPath());