]> git.uio.no Git - ifi-stolz-refaktor.git/blob - case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/UserLibraryWizardPage.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / ui / org / eclipse / jdt / internal / ui / wizards / buildpaths / UserLibraryWizardPage.java
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
7  *
8  * Contributors:
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;
13
14 import java.util.Collections;
15 import java.util.HashMap;
16 import java.util.HashSet;
17 import java.util.List;
18 import java.util.Set;
19
20 import org.eclipse.swt.widgets.Composite;
21
22 import org.eclipse.core.runtime.IPath;
23 import org.eclipse.core.runtime.IStatus;
24
25 import org.eclipse.core.resources.IProject;
26 import org.eclipse.core.resources.IWorkspaceRoot;
27 import org.eclipse.core.resources.ResourcesPlugin;
28
29 import org.eclipse.ui.dialogs.PreferencesUtil;
30
31 import org.eclipse.jdt.core.IClasspathEntry;
32 import org.eclipse.jdt.core.IJavaProject;
33 import org.eclipse.jdt.core.JavaCore;
34
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;
39
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;
49
50 /**
51  *
52  */
53 public class UserLibraryWizardPage extends NewElementWizardPage implements IClasspathContainerPage, IClasspathContainerPageExtension, IClasspathContainerPageExtension2  {
54
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;
61
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();
69
70                 LibraryListAdapter adapter= new LibraryListAdapter();
71                 String[] buttonLabels= new String[] {
72                                 NewWizardMessages.UserLibraryWizardPage_list_config_button
73                 };
74                 adapter.generated_2169316697622006592(this, buttonLabels);
75                 fEditResult= null;
76                 updateStatus(validateSetting(Collections.<CPUserLibraryElement>emptyList()));
77         }
78
79         private static IJavaProject createPlaceholderProject() {
80         String name= "####internal"; //$NON-NLS-1$
81         IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
82         while (true) {
83             IProject project= root.getProject(name);
84             if (!project.exists()) {
85                 return JavaCore.create(project);
86             }
87             name += '1';
88         }
89     }
90
91         public void updateDescription(IClasspathEntry containerEntry) {
92                 if (containerEntry == null || containerEntry.getPath().segmentCount() != 2) {
93                         setDescription(NewWizardMessages.UserLibraryWizardPage_description_new);
94                 } else {
95                         setDescription(NewWizardMessages.UserLibraryWizardPage_description_edit);
96                 }
97         }
98
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);
103         }
104
105         private void doDialogFieldChanged(DialogField field) {
106                 if (field == fLibrarySelector) {
107                         List<CPUserLibraryElement> list= fLibrarySelector.generated_2265980569471148265(this);
108                         updateStatus(validateSetting(list));
109                 }
110         }
111
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);
118                 }
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);
123                         }
124                 }
125                 return new StatusInfo();
126         }
127
128         private void doButtonPressed(int index) {
129                 if (index == 0) {
130                         HashMap<String, String> data= new HashMap<String, String>(3);
131                         if (fEditResult != null) {
132                                 data.put(UserLibraryPreferencePage.DATA_LIBRARY_TO_SELECT, fEditResult.getName());
133                         }
134                         String id= UserLibraryPreferencePage.ID;
135                         PreferencesUtil.createPreferenceDialogOn(getShell(), id, new String[] { id }, data).open();
136
137                         List<CPUserLibraryElement> newEntries= updateLibraryList();
138                         if (newEntries.size() > 0) {
139                                 if (fIsEditMode) {
140                                         fLibrarySelector.setChecked(newEntries.get(0), true);
141                                 } else {
142                                         fLibrarySelector.setCheckedElements(newEntries);
143                                 }
144                         }
145                 } else {
146                         fLibrarySelector.generated_74378875948725174();
147                 }
148         }
149
150         private void doDoubleClicked(ListDialogField<CPUserLibraryElement> field) {
151                 if (field == fLibrarySelector) {
152                         fLibrarySelector.generated_8759598669159381343(this);
153                 }
154         }
155
156         /* (non-Javadoc)
157          * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
158          */
159         public void createControl(Composite parent) {
160                 Composite composite= fLibrarySelector.generated_6675190191439284582(parent);
161                 setControl(composite);
162         }
163
164         /*
165          * @see org.eclipse.jdt.ui.wizards.NewElementWizardPage#setVisible(boolean)
166          * @since 3.7
167          */
168         @Override
169         public void setVisible(boolean visible) {
170                 super.setVisible(visible);
171                 if (visible) {
172                         fLibrarySelector.setFocus();
173                 }
174         }
175         
176         /* (non-Javadoc)
177          * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPage#finish()
178          */
179         public boolean finish() {
180                 return true;
181         }
182
183         /* (non-Javadoc)
184          * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPage#getSelection()
185          */
186         public IClasspathEntry getSelection() {
187                 if (fEditResult != null) {
188                         return fEditResult.generated_5770402405348747195(this);
189                 }
190                 return null;
191         }
192
193         /* (non-Javadoc)
194          * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPageExtension2#getNewContainers()
195          */
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);
202                 }
203                 return res;
204         }
205
206         /* (non-Javadoc)
207          * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPage#setSelection(org.eclipse.jdt.core.IClasspathEntry)
208          */
209         public void setSelection(IClasspathEntry containerEntry) {
210                 fOldClasspathEntry= containerEntry;
211
212                 fLibrarySelector.generated_8660812889687355297(this, containerEntry);
213         }
214
215         class LibraryListAdapter implements IListAdapter<CPUserLibraryElement>, IDialogFieldListener {
216
217                 public LibraryListAdapter() {
218                 }
219
220                 public void dialogFieldChanged(DialogField field) {
221                         doDialogFieldChanged(field);
222                 }
223
224                 public void customButtonPressed(ListDialogField<CPUserLibraryElement> field, int index) {
225                         doButtonPressed(index);
226                 }
227
228                 public void selectionChanged(ListDialogField<CPUserLibraryElement> field) {
229                 }
230
231                 public void doubleClicked(ListDialogField<CPUserLibraryElement> field) {
232                         doDoubleClicked(field);
233                 }
234
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);
239                 }
240         }
241
242         /* (non-Javadoc)
243          * @see org.eclipse.jdt.ui.wizards.IClasspathContainerPageExtension#initialize(org.eclipse.jdt.core.IJavaProject, org.eclipse.jdt.core.IClasspathEntry[])
244          */
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());
250                         }
251                 }
252         }
253 }