]> git.uio.no Git - ifi-stolz-refaktor.git/blob - case-study/jdt-before/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteAction.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-before / ui refactoring / org / eclipse / jdt / internal / ui / refactoring / reorg / DeleteAction.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  *******************************************************************************/
11 package org.eclipse.jdt.internal.ui.refactoring.reorg;
12
13 import java.util.ArrayList;
14 import java.util.Arrays;
15 import java.util.Collections;
16 import java.util.Iterator;
17 import java.util.List;
18
19 import com.ibm.icu.text.MessageFormat;
20
21 import org.eclipse.swt.widgets.Button;
22 import org.eclipse.swt.widgets.Composite;
23
24 import org.eclipse.core.runtime.CoreException;
25
26 import org.eclipse.jface.action.IAction;
27 import org.eclipse.jface.dialogs.IDialogConstants;
28 import org.eclipse.jface.dialogs.MessageDialog;
29 import org.eclipse.jface.viewers.IStructuredSelection;
30
31 import org.eclipse.ui.ISharedImages;
32 import org.eclipse.ui.IWorkbenchPage;
33 import org.eclipse.ui.IWorkbenchPart;
34 import org.eclipse.ui.IWorkbenchSite;
35 import org.eclipse.ui.IWorkingSet;
36 import org.eclipse.ui.IWorkingSetManager;
37 import org.eclipse.ui.PlatformUI;
38 import org.eclipse.ui.actions.DeleteResourceAction;
39
40 import org.eclipse.jdt.internal.corext.refactoring.RefactoringAvailabilityTester;
41 import org.eclipse.jdt.internal.corext.refactoring.RefactoringExecutionStarter;
42 import org.eclipse.jdt.internal.corext.refactoring.reorg.ReorgUtils;
43
44 import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
45
46 import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
47 import org.eclipse.jdt.internal.ui.JavaPlugin;
48 import org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart;
49 import org.eclipse.jdt.internal.ui.refactoring.RefactoringMessages;
50 import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
51 import org.eclipse.jdt.internal.ui.util.SelectionUtil;
52 import org.eclipse.jdt.internal.ui.workingsets.IWorkingSetIDs;
53 import org.eclipse.jdt.internal.ui.workingsets.WorkingSetModel;
54
55
56 public class DeleteAction extends SelectionDispatchAction {
57
58         /**
59          * 'Hide' button index.
60          * 
61          * @since 3.5
62          */
63         private static final int HIDE_BUTTON= 0;
64
65         /**
66          * 'Remove' button index.
67          * 
68          * @since 3.5
69          */
70         private static final int REMOVE_BUTTON= 1;
71
72
73         public DeleteAction(IWorkbenchSite site) {
74                 super(site);
75                 setText(ReorgMessages.DeleteAction_3);
76                 setDescription(ReorgMessages.DeleteAction_4);
77                 ISharedImages workbenchImages= JavaPlugin.getDefault().getWorkbench().getSharedImages();
78                 setDisabledImageDescriptor(workbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_DELETE_DISABLED));
79                 setImageDescriptor(workbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_DELETE));
80                 setHoverImageDescriptor(workbenchImages.getImageDescriptor(ISharedImages.IMG_TOOL_DELETE));
81
82                 PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.DELETE_ACTION);
83         }
84
85         /*
86          * @see SelectionDispatchAction#selectionChanged(IStructuredSelection)
87          */
88         @Override
89         public void selectionChanged(IStructuredSelection selection) {
90                 if (ReorgUtils.containsOnlyProjects(selection.toList())) {
91                         setEnabled(createWorkbenchAction(selection).isEnabled());
92                         return;
93                 }
94                 setEnabled(RefactoringAvailabilityTester.isDeleteAvailable(selection.toArray()));
95         }
96
97         private IAction createWorkbenchAction(IStructuredSelection selection) {
98                 DeleteResourceAction action= new DeleteResourceAction(getSite());
99                 action.selectionChanged(selection);
100                 return action;
101         }
102
103         /**
104          * Removes or hides the selected working sets.
105          * 
106          * @param selection the selected working sets
107          * @since 3.5
108          */
109         private void deleteWorkingSets(IStructuredSelection selection) {
110                 MessageDialog dialog;
111                 if (selection.size() == 1) {
112                         IWorkingSet workingSet= (IWorkingSet)selection.getFirstElement();
113                         final String workingSetID= workingSet.getId();
114                         String dialogMessage;
115                         if (isDefaultWorkingSet(workingSetID))
116                                 dialogMessage= MessageFormat.format(ReorgMessages.DeleteWorkingSet_hideworkingset_single, new Object[] { workingSet.getLabel() });
117                         else
118                                 dialogMessage= MessageFormat.format(ReorgMessages.DeleteWorkingSet_removeorhideworkingset_single, new Object[] { workingSet.getLabel() });
119                         
120                         dialog= new MessageDialog(getShell(), ReorgMessages.DeleteWorkingSet_single, null, dialogMessage, MessageDialog.QUESTION, new String[] { ReorgMessages.DeleteWorkingSet_Hide,
121                                         ReorgMessages.DeleteWorkingSet_Remove,
122                                         IDialogConstants.CANCEL_LABEL }, 0) {
123                                 /*
124                                  * @see org.eclipse.jface.dialogs.MessageDialog#createButton(org.eclipse.swt.widgets.Composite, int, java.lang.String, boolean)
125                                  * @since 3.5
126                                  */
127                                 @Override
128                                 protected Button createButton(Composite parent, int id, String label, boolean defaultButton) {
129                                         Button button= super.createButton(parent, id, label, defaultButton);
130                                         if (id == REMOVE_BUTTON && IWorkingSetIDs.OTHERS.equals(workingSetID))
131                                                 button.setEnabled(false);
132                                         return button;
133                                 }
134                         };
135                 } else {
136                         dialog= new MessageDialog(getShell(), ReorgMessages.DeleteWorkingSet_multiple, null, MessageFormat.format(ReorgMessages.DeleteWorkingSet_removeorhideworkingset_multiple,
137                                         new Object[] { new Integer(selection.size()) }),
138                                         MessageDialog.QUESTION, new String[] { ReorgMessages.DeleteWorkingSet_Hide, ReorgMessages.DeleteWorkingSet_Remove,
139                                                         IDialogConstants.CANCEL_LABEL }, 0);
140                 }
141
142                 int dialogResponse= dialog.open();
143                 if (dialogResponse == REMOVE_BUTTON) {
144                         Iterator<?> iter= selection.iterator();
145                         IWorkingSetManager manager= PlatformUI.getWorkbench().getWorkingSetManager();
146                         while (iter.hasNext()) {
147                                 IWorkingSet workingSet= (IWorkingSet) iter.next();
148                                 if (isDefaultWorkingSet(workingSet.getId()))
149                                         hideWorkingSets(Collections.singletonList(workingSet));
150                                 else
151                                         manager.removeWorkingSet(workingSet);
152                         }
153                 } else if (dialogResponse == HIDE_BUTTON) {
154                         hideWorkingSets((List<IWorkingSet>) SelectionUtil.toList(selection));
155                 }
156         }
157
158         /**
159          * Hides all the working sets in the list from the Package Explorer.
160          * 
161          * @param selection the selection of working sets 
162          * @since 3.8
163          */
164         private void hideWorkingSets(List<IWorkingSet> selection) {
165                 IWorkbenchPage page= JavaPlugin.getActivePage();
166                 if (page != null) {
167                         IWorkbenchPart activePart= page.getActivePart();
168                         if (activePart instanceof PackageExplorerPart) {
169                                 PackageExplorerPart packagePart= (PackageExplorerPart) activePart;
170                                 WorkingSetModel model= packagePart.getWorkingSetModel();
171                                 List<IWorkingSet> activeWorkingSets= new ArrayList<IWorkingSet>(Arrays.asList(model.getActiveWorkingSets()));
172                                 activeWorkingSets.removeAll(selection);
173                                 model.setActiveWorkingSets(activeWorkingSets.toArray(new IWorkingSet[activeWorkingSets.size()]));
174                         }
175                 }
176         }
177
178         /**
179          * Checks if the working set is the default working set.
180          * 
181          * @param workingSetID the working set id, can be <code>null</code>
182          * @return <code>true</code> if default working set, <code>false</code> otherwise 
183          * @since 3.8
184          */
185         private boolean isDefaultWorkingSet(String workingSetID) {
186                 return IWorkingSetIDs.OTHERS.equals(workingSetID);
187         }
188
189         /* (non-Javadoc)
190          * @see org.eclipse.jdt.ui.actions.SelectionDispatchAction#run(org.eclipse.jface.viewers.IStructuredSelection)
191          */
192         @Override
193         public void run(IStructuredSelection selection) {
194                 if (ReorgUtils.containsOnlyProjects(selection.toList())) {
195                         createWorkbenchAction(selection).run();
196                         return;
197                 }
198                 if (ReorgUtils.containsOnlyWorkingSets(selection.toList())){
199                         deleteWorkingSets(selection);
200                         return;
201                 }
202                 try {
203                         RefactoringExecutionStarter.startDeleteRefactoring(selection.toArray(), getShell());
204                 } catch (CoreException e) {
205                         ExceptionHandler.handle(e, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringMessages.OpenRefactoringWizardAction_exception);
206                 }
207         }
208 }