### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.ui Index: ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.java,v retrieving revision 1.32 diff -u -r1.32 MultiFixMessages.java --- ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.java 13 Oct 2006 13:40:55 -0000 1.32 +++ ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.java 16 Oct 2006 10:45:17 -0000 @@ -22,8 +22,13 @@ public static String CleanUpRefactoringWizard_CleanUpConfigurationPage_link; public static String CleanUpRefactoringWizard_CleanUpConfigurationPage_linkToolTip; public static String CleanUpRefactoringWizard_CleanUpConfigurationPage_message; - public static String CleanUpRefactoringWizard_CleanUpConfigurationPage_SettingsForProjectX; public static String CleanUpRefactoringWizard_CleanUpConfigurationPage_title; + public static String CleanUpRefactoringWizard_Configure_Button; + public static String CleanUpRefactoringWizard_ConfiguredProfiles_Label; + public static String CleanUpRefactoringWizard_configureProjectSettings_link; + public static String CleanUpRefactoringWizard_Profile_TableHeader; + public static String CleanUpRefactoringWizard_Project_TableHeader; + public static String CleanUpRefactoringWizard_unknownProfile_Name; public static String StringMultiFix_AddMissingNonNls_description; public static String StringMultiFix_RemoveUnnecessaryNonNls_description; public static String StringCleanUp_RemoveNLSTag_label; Index: ui/org/eclipse/jdt/internal/ui/fix/CleanUpRefactoringWizard.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/CleanUpRefactoringWizard.java,v retrieving revision 1.53 diff -u -r1.53 CleanUpRefactoringWizard.java --- ui/org/eclipse/jdt/internal/ui/fix/CleanUpRefactoringWizard.java 13 Oct 2006 13:40:55 -0000 1.53 +++ ui/org/eclipse/jdt/internal/ui/fix/CleanUpRefactoringWizard.java 16 Oct 2006 10:45:17 -0000 @@ -10,17 +10,31 @@ *******************************************************************************/ package org.eclipse.jdt.internal.ui.fix; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.preferences.IEclipsePreferences; +import org.eclipse.core.runtime.preferences.InstanceScope; + +import org.eclipse.core.resources.ProjectScope; + import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Link; -import org.eclipse.swt.widgets.Text; +import org.eclipse.swt.widgets.Shell; -import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.viewers.ColumnLayoutData; +import org.eclipse.jface.viewers.ColumnWeightData; +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.ui.dialogs.PreferencesUtil; @@ -29,16 +43,150 @@ import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.internal.corext.fix.CleanUpConstants; import org.eclipse.jdt.internal.corext.fix.CleanUpRefactoring; -import org.eclipse.jdt.internal.corext.util.Messages; +import org.eclipse.jdt.ui.JavaUI; + +import org.eclipse.jdt.internal.ui.JavaPlugin; import org.eclipse.jdt.internal.ui.JavaPluginImages; import org.eclipse.jdt.internal.ui.preferences.CleanUpPreferencePage; +import org.eclipse.jdt.internal.ui.preferences.cleanup.CleanUpProfileManager; +import org.eclipse.jdt.internal.ui.preferences.cleanup.CleanUpProfileVersioner; +import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileStore; +import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.Profile; +import org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter; +import org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField; public class CleanUpRefactoringWizard extends RefactoringWizard { + private static class ProjectProfileLableProvider extends LabelProvider implements ITableLabelProvider { + + private Hashtable fProfileIdsTable; + + /** + * {@inheritDoc} + */ + public Image getColumnImage(Object element, int columnIndex) { + return null; + } + + /** + * {@inheritDoc} + */ + public String getColumnText(Object element, int columnIndex) { + if (columnIndex == 0) { + return ((IJavaProject)element).getProject().getName(); + } else if (columnIndex == 1) { + + if (fProfileIdsTable == null) + fProfileIdsTable= loadProfiles(); + + InstanceScope instanceScope= new InstanceScope(); + IEclipsePreferences instancePreferences= instanceScope.getNode(JavaUI.ID_PLUGIN); + + final String workbenchProfileId; + if (instancePreferences.get(CleanUpProfileManager.PROFILE_KEY, null) != null) { + workbenchProfileId= instancePreferences.get(CleanUpProfileManager.PROFILE_KEY, null); + } else { + workbenchProfileId= CleanUpProfileManager.DEFAULT_PROFILE; + } + + return getProjectProfileName((IJavaProject)element, fProfileIdsTable, workbenchProfileId); + } + return null; + } + + private Hashtable loadProfiles() { + InstanceScope instanceScope= new InstanceScope(); + + CleanUpProfileVersioner versioner= new CleanUpProfileVersioner(); + ProfileStore profileStore= new ProfileStore(CleanUpConstants.CLEANUP_PROFILES, versioner); + + List list= null; + try { + list= profileStore.readProfiles(instanceScope); + } catch (CoreException e1) { + JavaPlugin.log(e1); + } + if (list == null) + list= new ArrayList(); + + CleanUpProfileManager.addBuiltInProfiles(list, versioner); + + Hashtable profileIdsTable= new Hashtable(); + for (Iterator iterator= list.iterator(); iterator.hasNext();) { + Profile profile= (Profile)iterator.next(); + profileIdsTable.put(profile.getID(), profile); + } + + return profileIdsTable; + } + + private Profile getProjectProfile(final IJavaProject project, Hashtable profileIdsTable) { + ProjectScope projectScope= new ProjectScope(project.getProject()); + IEclipsePreferences node= projectScope.getNode(JavaUI.ID_PLUGIN); + if (node.get(CleanUpProfileManager.PROFILE_KEY, null) == null) + return null; + + String id= node.get(CleanUpProfileManager.PROFILE_KEY, null); + return (Profile)profileIdsTable.get(id); + } + + private String getProjectProfileName(final IJavaProject project, Hashtable profileIdsTable, String workbenchProfileId) { + Profile profile= getProjectProfile(project, profileIdsTable); + if (profile == null) + profile= (Profile)profileIdsTable.get(workbenchProfileId); + + String profileName; + if (profile != null) { + profileName= profile.getName(); + } else { + profileName= MultiFixMessages.CleanUpRefactoringWizard_unknownProfile_Name; + } + return profileName; + } + + public void reset() { + fProfileIdsTable= null; + } + } + private static class CleanUpConfigurationPage extends UserInputWizardPage { + private static final class ProfileTableAdapter implements IListAdapter { + private final ProjectProfileLableProvider fProvider; + private final Shell fShell; + + private ProfileTableAdapter(ProjectProfileLableProvider provider, Shell shell) { + fProvider= provider; + fShell= shell; + } + + public void customButtonPressed(ListDialogField field, int index) { + openPropertyDialog(field); + } + + public void doubleClicked(ListDialogField field) { + openPropertyDialog(field); + } + + private void openPropertyDialog(ListDialogField field) { + IJavaProject project= (IJavaProject)field.getSelectedElements().get(0); + PreferencesUtil.createPropertyDialogOn(fShell, project, CleanUpPreferencePage.PROP_ID, null, null).open(); + fProvider.reset(); + field.refresh(); + } + + public void selectionChanged(ListDialogField field) { + if (field.getSelectedElements().size() != 1) { + field.enableButton(0, false); + } else { + field.enableButton(0, true); + } + } + } + private final CleanUpRefactoring fCleanUpRefactoring; public CleanUpConfigurationPage(CleanUpRefactoring refactoring) { @@ -55,19 +203,38 @@ composite.setLayout(new GridLayout(1, true)); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - Link link= new Link(composite, SWT.WRAP | SWT.RIGHT); - link.setText(MultiFixMessages.CleanUpRefactoringWizard_CleanUpConfigurationPage_link); - link.setToolTipText(MultiFixMessages.CleanUpRefactoringWizard_CleanUpConfigurationPage_linkToolTip); - GridData gridData= new GridData(GridData.FILL, GridData.CENTER, true, false); - gridData.widthHint= convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH); - link.setLayoutData(gridData); - link.setFont(composite.getFont()); - - final Label label = new Label(composite, SWT.WRAP); - label.setFont(composite.getFont()); - label.setText(MultiFixMessages.CleanUpRefactoringWizard_CleanUpConfigurationPage_detaileTitle); - label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); - + Label label= new Label(composite, SWT.NONE); + label.setText(MultiFixMessages.CleanUpRefactoringWizard_ConfiguredProfiles_Label); + + Composite tableComposite= new Composite(composite, SWT.NONE); + tableComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + tableComposite.setLayout(new GridLayout(3, false)); + + ProjectProfileLableProvider tableLabelProvider= new ProjectProfileLableProvider(); + IListAdapter listAdapter= new ProfileTableAdapter(tableLabelProvider, getShell()); + String[] buttons= new String[] { + MultiFixMessages.CleanUpRefactoringWizard_Configure_Button + }; + ListDialogField settingsField= new ListDialogField(listAdapter, buttons, tableLabelProvider); + + String[] headerNames= new String[] { + MultiFixMessages.CleanUpRefactoringWizard_Project_TableHeader, + MultiFixMessages.CleanUpRefactoringWizard_Profile_TableHeader + }; + ColumnLayoutData[] columns = new ColumnLayoutData[] { + new ColumnWeightData(1, 100, true), + new ColumnWeightData(2, 20, true) + }; + settingsField.setTableColumns(new ListDialogField.ColumnsDescription(columns , headerNames, true)); + settingsField.setViewerComparator(new ViewerComparator()); + + settingsField.doFillIntoGrid(tableComposite, 3); + GridData data= (GridData)settingsField.getListControl(null).getLayoutData(); + data.grabExcessHorizontalSpace= true; + + settingsField.setElements(Arrays.asList(fCleanUpRefactoring.getProjects())); + settingsField.selectFirstElement(); + final Text detailField= new Text(composite, SWT.BORDER | SWT.FLAT | SWT.MULTI | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL); detailField.setText(getCleanUpsInfo()); final GridData data= new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL); @@ -85,10 +252,10 @@ detailField.setText(getCleanUpsInfo()); } }); - + setControl(composite); } - + private String getCleanUpsInfo() { StringBuffer result= new StringBuffer(); Index: ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties,v retrieving revision 1.49 diff -u -r1.49 MultiFixMessages.properties --- ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties 13 Oct 2006 13:40:55 -0000 1.49 +++ ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties 16 Oct 2006 10:45:17 -0000 @@ -75,10 +75,15 @@ CleanUpRefactoringWizard_Annotations_sectionName=Annotations CleanUpRefactoringWizard_UnnecessaryCode_tabLabel=&Unnecessary Code CleanUpRefactoringWizard_removeThis_checkBoxLabel=&Only if necessary +CleanUpRefactoringWizard_ConfiguredProfiles_Label=Configured profiles: CleanUpRefactoringWizard_UnnecessaryCode_section=Unnecessary code CleanUpRefactoringWizard_DisableAllButton_label=&Deselect All CleanUpRefactoringWizard_Remove_sectionTitle=Remove +CleanUpRefactoringWizard_unknownProfile_Name=Unknown +CleanUpRefactoringWizard_Project_TableHeader=Project +CleanUpRefactoringWizard_Profile_TableHeader=Profile CleanUpRefactoringWizard_previewLabel_text=Pre&view: +CleanUpRefactoringWizard_Configure_Button=Configure... CleanUpRefactoringWizard_MissingCode_tabLabel=&Missing Code CleanUpRefactoringWizard_EnableAllButton_label=S&elect All CleanUpRefactoringWizard_SelectCompilationUnitsPage_name=Select Compilation Units Page @@ -125,9 +130,9 @@ CleanUpRefactoringWizard_CleanUpConfigurationPage_linkToolTip=Shows the clean up preference page CleanUpRefactoringWizard_CleanUpConfigurationPage_detaileTitle=Details: CleanUpRefactoringWizard_CleanUpConfigurationPage_title=Clean Up Configuration -CleanUpRefactoringWizard_CleanUpConfigurationPage_SettingsForProjectX=Settings for Project ''{0}'': CleanUpRefactoringWizard_CleanUpConfigurationPage_message=The clean up configurations CleanUpRefactoringWizard_CleanUpConfigurationPage_link=The Clean Up settings can be changed on the Clean Up preference page. +CleanUpRefactoringWizard_configureProjectSettings_link=Using profile ''{0}'' for files in project ''{1}''. (Configure...) CommentFormatFix_description=Format comment Index: ui/org/eclipse/jdt/internal/ui/fix/AbstractCleanUp.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AbstractCleanUp.java,v retrieving revision 1.20 diff -u -r1.20 AbstractCleanUp.java --- ui/org/eclipse/jdt/internal/ui/fix/AbstractCleanUp.java 15 Sep 2006 12:16:27 -0000 1.20 +++ ui/org/eclipse/jdt/internal/ui/fix/AbstractCleanUp.java 16 Oct 2006 10:45:17 -0000 @@ -164,10 +164,7 @@ protected abstract int createFlag(Map options); - /** - * @param project - */ - public void loadSettings(IJavaProject project) { + private void loadSettings(IJavaProject project) { IScopeContext context; if (project != null) { Index: core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java,v retrieving revision 1.4 diff -u -r1.4 CleanUpConstants.java --- core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java 13 Oct 2006 13:40:55 -0000 1.4 +++ core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java 16 Oct 2006 10:45:16 -0000 @@ -734,6 +734,17 @@ * @since 3.3 */ public static final String SHOW_CLEAN_UP_WIZARD= "cleanup.showwizard"; //$NON-NLS-1$ + + /** + * A key to a serialized string in the InstanceScope containing all the + * profiles.
+ * Following code snippet can load the profiles: + *

+	 * List profiles= new ProfileStore(CLEANUP_PROFILES, new CleanUpVersioner()).readProfiles(new InstanceScope());
+	 * 
+ * @since 3.3 + */ + public static final String CLEANUP_PROFILES= "org.eclipse.jdt.ui.cleanupprofiles"; //$NON-NLS-1$ public static Map getEclipseDefaultSettings() { HashMap result= new HashMap(); Index: ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpProfileManager.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpProfileManager.java,v retrieving revision 1.2 diff -u -r1.2 CleanUpProfileManager.java --- ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpProfileManager.java 20 Sep 2006 09:48:46 -0000 1.2 +++ ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpProfileManager.java 16 Oct 2006 10:45:17 -0000 @@ -40,7 +40,7 @@ super(addBuiltInProfiles(profiles, profileVersioner), context, preferencesAccess, profileVersioner, KEY_SETS, PROFILE_KEY, FORMATTER_SETTINGS_VERSION); } - private static List addBuiltInProfiles(List profiles, IProfileVersioner profileVersioner) { + public static List addBuiltInProfiles(List profiles, IProfileVersioner profileVersioner) { final Profile eclipseProfile= new BuiltInProfile(ECLIPSE_PROFILE, CleanUpMessages.CleanUpProfileManager_ProfileName_EclipseBuildIn, getEclipseSettings(), 2, profileVersioner.getCurrentVersion(), profileVersioner.getProfileKind()); profiles.add(eclipseProfile); return profiles; Index: ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpConfigurationBlock.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpConfigurationBlock.java,v retrieving revision 1.5 diff -u -r1.5 CleanUpConfigurationBlock.java --- ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpConfigurationBlock.java 13 Oct 2006 13:40:55 -0000 1.5 +++ ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpConfigurationBlock.java 16 Oct 2006 10:45:17 -0000 @@ -64,7 +64,6 @@ public class CleanUpConfigurationBlock extends ProfileConfigurationBlock { private static final String CLEANUP_PAGE_SETTINGS_KEY= "cleanup_page"; //$NON-NLS-1$ - private static final String CLEANUP_PROFILES_PREFERENCE_KEY= "org.eclipse.jdt.ui.cleanupprofiles"; //$NON-NLS-1$ private static final String DIALOGSTORE_LASTSAVELOADPATH= JavaUI.ID_PLUGIN + ".cleanup"; //$NON-NLS-1$ private final IScopeContext fCurrContext; @@ -85,7 +84,7 @@ } protected ProfileStore createProfileStore(IProfileVersioner versioner) { - return new ProfileStore(CLEANUP_PROFILES_PREFERENCE_KEY, versioner); + return new ProfileStore(CleanUpConstants.CLEANUP_PROFILES, versioner); } protected ProfileManager createProfileManager(List profiles, IScopeContext context, PreferencesAccess access, IProfileVersioner profileVersioner) {