001: /*******************************************************************************
002: * Copyright (c) 2000, 2007 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: * Alex Blewitt - Bug 133277 Allow Sort Members to be performed on package and project levels
011: *******************************************************************************/package org.eclipse.jdt.internal.ui.actions;
012:
013: import java.util.Hashtable;
014:
015: import org.eclipse.jface.window.Window;
016:
017: import org.eclipse.ui.IWorkbenchSite;
018: import org.eclipse.ui.PlatformUI;
019:
020: import org.eclipse.jdt.core.ICompilationUnit;
021: import org.eclipse.jdt.core.IJavaElement;
022: import org.eclipse.jdt.core.IParent;
023: import org.eclipse.jdt.core.JavaModelException;
024:
025: import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
026:
027: import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
028: import org.eclipse.jdt.internal.ui.JavaPlugin;
029: import org.eclipse.jdt.internal.ui.dialogs.SortMembersMessageDialog;
030: import org.eclipse.jdt.internal.ui.fix.ICleanUp;
031: import org.eclipse.jdt.internal.ui.fix.SortMembersCleanUp;
032: import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
033:
034: public class MultiSortMembersAction extends CleanUpAction {
035:
036: public MultiSortMembersAction(IWorkbenchSite site) {
037: super (site);
038:
039: setText(ActionMessages.SortMembersAction_label);
040: setDescription(ActionMessages.SortMembersAction_description);
041: setToolTipText(ActionMessages.SortMembersAction_tooltip);
042:
043: PlatformUI.getWorkbench().getHelpSystem().setHelp(this ,
044: IJavaHelpContextIds.SORT_MEMBERS_ACTION);
045: }
046:
047: public MultiSortMembersAction(JavaEditor editor) {
048: super (editor);
049:
050: setText(ActionMessages.SortMembersAction_label);
051: setDescription(ActionMessages.SortMembersAction_description);
052: setToolTipText(ActionMessages.SortMembersAction_tooltip);
053:
054: PlatformUI.getWorkbench().getHelpSystem().setHelp(this ,
055: IJavaHelpContextIds.SORT_MEMBERS_ACTION);
056: }
057:
058: /**
059: * {@inheritDoc}
060: */
061: protected ICleanUp[] createCleanUps(ICompilationUnit[] units) {
062: try {
063: if (!hasMembersToSort(units))
064: return null;
065: } catch (JavaModelException e) {
066: JavaPlugin.log(e);
067: return null;
068: }
069:
070: SortMembersMessageDialog dialog = new SortMembersMessageDialog(
071: getShell());
072: if (dialog.open() != Window.OK)
073: return null;
074:
075: Hashtable settings = new Hashtable();
076: settings.put(CleanUpConstants.SORT_MEMBERS,
077: CleanUpConstants.TRUE);
078: settings.put(CleanUpConstants.SORT_MEMBERS_ALL, !dialog
079: .isNotSortingFieldsEnabled() ? CleanUpConstants.TRUE
080: : CleanUpConstants.FALSE);
081:
082: return new ICleanUp[] { new SortMembersCleanUp(settings) };
083: }
084:
085: /**
086: * {@inheritDoc}
087: */
088: protected String getActionName() {
089: return ActionMessages.SortMembersAction_dialog_title;
090: }
091:
092: private boolean hasMembersToSort(ICompilationUnit[] units)
093: throws JavaModelException {
094: for (int i = 0; i < units.length; i++) {
095: if (hasMembersToSort(units[i].getTypes()))
096: return true;
097: }
098:
099: return false;
100: }
101:
102: private boolean hasMembersToSort(IJavaElement[] members)
103: throws JavaModelException {
104: if (members.length > 1)
105: return true;
106:
107: if (members.length == 0)
108: return false;
109:
110: IJavaElement elem = members[0];
111: if (!(elem instanceof IParent))
112: return false;
113:
114: return hasMembersToSort(((IParent) elem).getChildren());
115: }
116:
117: }
|