/******************************************************************************* * Copyright (c) 2000, 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * Alex Blewitt - Bug 133277 Allow Sort Members to be performed on package and project levels *******************************************************************************/ package org.eclipse.wst.jsdt.internal.ui.actions; import java.util.Hashtable; import org.eclipse.jface.window.Window; import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.PlatformUI; import org.eclipse.wst.jsdt.core.IJavaScriptUnit; import org.eclipse.wst.jsdt.core.IJavaScriptElement; import org.eclipse.wst.jsdt.core.IParent; import org.eclipse.wst.jsdt.core.JavaScriptModelException; import org.eclipse.wst.jsdt.internal.corext.fix.CleanUpConstants; import org.eclipse.wst.jsdt.internal.ui.IJavaHelpContextIds; import org.eclipse.wst.jsdt.internal.ui.JavaScriptPlugin; import org.eclipse.wst.jsdt.internal.ui.dialogs.SortMembersMessageDialog; import org.eclipse.wst.jsdt.internal.ui.fix.ICleanUp; import org.eclipse.wst.jsdt.internal.ui.fix.SortMembersCleanUp; import org.eclipse.wst.jsdt.internal.ui.javaeditor.JavaEditor; public class MultiSortMembersAction extends CleanUpAction { public MultiSortMembersAction(IWorkbenchSite site) { super(site); setText(ActionMessages.SortMembersAction_label); setDescription(ActionMessages.SortMembersAction_description); setToolTipText(ActionMessages.SortMembersAction_tooltip); PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.SORT_MEMBERS_ACTION); } public MultiSortMembersAction(JavaEditor editor) { super(editor); setText(ActionMessages.SortMembersAction_label); setDescription(ActionMessages.SortMembersAction_description); setToolTipText(ActionMessages.SortMembersAction_tooltip); PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.SORT_MEMBERS_ACTION); } /** * {@inheritDoc} */ protected ICleanUp[] createCleanUps(IJavaScriptUnit[] units) { try { if (!hasMembersToSort(units)) return null; } catch (JavaScriptModelException e) { JavaScriptPlugin.log(e); return null; } SortMembersMessageDialog dialog= new SortMembersMessageDialog(getShell()); if (dialog.open() != Window.OK) return null; Hashtable settings= new Hashtable(); settings.put(CleanUpConstants.SORT_MEMBERS, CleanUpConstants.TRUE); settings.put(CleanUpConstants.SORT_MEMBERS_ALL, !dialog.isNotSortingFieldsEnabled() ? CleanUpConstants.TRUE : CleanUpConstants.FALSE); return new ICleanUp[] { new SortMembersCleanUp(settings) }; } /** * {@inheritDoc} */ protected String getActionName() { return ActionMessages.SortMembersAction_dialog_title; } private boolean hasMembersToSort(IJavaScriptUnit[] units) throws JavaScriptModelException { for (int i= 0; i < units.length; i++) { if (hasMembersToSort(units[i].getChildren())) return true; } return false; } private boolean hasMembersToSort(IJavaScriptElement[] members) throws JavaScriptModelException { if (members.length > 1) return true; if (members.length == 0) return false; IJavaScriptElement elem= members[0]; if (!(elem instanceof IParent)) return false; return hasMembersToSort(((IParent)elem).getChildren()); } }