]> git.uio.no Git - ifi-stolz-refaktor.git/blobdiff - case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/fix/CleanUpSaveParticipantPreferenceConfiguration.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / ui / org / eclipse / jdt / internal / ui / fix / CleanUpSaveParticipantPreferenceConfiguration.java
diff --git a/case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/fix/CleanUpSaveParticipantPreferenceConfiguration.java b/case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/fix/CleanUpSaveParticipantPreferenceConfiguration.java
new file mode 100644 (file)
index 0000000..eeb47b9
--- /dev/null
@@ -0,0 +1,410 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2011 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
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.fix;
+
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.Shell;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ProjectScope;
+
+import org.eclipse.jface.dialogs.ControlEnableState;
+import org.eclipse.jface.layout.PixelConverter;
+import org.eclipse.jface.preference.IPreferencePageContainer;
+import org.eclipse.jface.window.Window;
+
+import org.eclipse.ui.dialogs.PreferencesUtil;
+import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
+
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+
+import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
+import org.eclipse.jdt.internal.corext.fix.CleanUpPostSaveListener;
+import org.eclipse.jdt.internal.corext.fix.CleanUpPreferenceUtil;
+
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jdt.ui.cleanup.CleanUpOptions;
+import org.eclipse.jdt.ui.cleanup.ICleanUp;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.saveparticipant.AbstractSaveParticipantPreferenceConfiguration;
+import org.eclipse.jdt.internal.ui.preferences.BulletListBlock;
+import org.eclipse.jdt.internal.ui.preferences.CodeFormatterPreferencePage;
+import org.eclipse.jdt.internal.ui.preferences.ImportOrganizePreferencePage;
+
+
+/**
+ * Preference configuration UI for the clean up save participant.
+ *
+ * @since 3.3
+ */
+public class CleanUpSaveParticipantPreferenceConfiguration extends AbstractSaveParticipantPreferenceConfiguration {
+
+       private static final int INDENT= 10;
+
+       private IScopeContext fContext;
+       public Map<String, String> fSettings;
+       public BulletListBlock fSelectedActionsText;
+       private Button fFormatCodeButton;
+       public Button fFormatChangedOnlyButton;
+       public Button fOrganizeImportsButton;
+       private Shell fShell;
+       public Link fFormatConfigLink;
+       public Link fOrganizeImportsConfigLink;
+       private IPreferencePageContainer fContainer;
+       public Button fAdditionalActionButton;
+       public Button fConfigureButton;
+       public Button fFormatAllButton;
+
+       private Composite fCleanUpOptionsComposite;
+       private ControlEnableState fControlEnableState;
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public void createConfigControl(final Composite parent, IPreferencePageContainer container) {
+               fContainer= container;
+               fShell= parent.getShell();
+
+               fCleanUpOptionsComposite= new Composite(parent, SWT.NONE);
+               GridData gridData= new GridData(SWT.FILL, SWT.FILL, true, true);
+               gridData.horizontalIndent= INDENT;
+               fCleanUpOptionsComposite.setLayoutData(gridData);
+               GridLayout gridLayout= new GridLayout(1, false);
+               gridLayout.marginHeight= 0;
+               gridLayout.marginWidth= 0;
+               fCleanUpOptionsComposite.setLayout(gridLayout);
+
+               fFormatCodeButton= new Button(fCleanUpOptionsComposite, SWT.CHECK);
+               fFormatCodeButton.setText(SaveParticipantMessages.CleanUpSaveParticipantPreferenceConfiguration_SaveActionPreferencePage_FormatSource_Checkbox);
+               fFormatCodeButton.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+               fFormatCodeButton.addSelectionListener(new SelectionAdapter() {
+                       /**
+                        * {@inheritDoc}
+                        */
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               changeSettingsValue(CleanUpConstants.FORMAT_SOURCE_CODE, fFormatCodeButton.getSelection());
+                       }
+               });
+
+               Composite regionFormatingCombo= new Composite(fCleanUpOptionsComposite, SWT.NONE);
+               gridData= new GridData(SWT.FILL, SWT.TOP, true, false);
+               gridData.horizontalIndent= 20;
+               regionFormatingCombo.setLayoutData(gridData);
+               gridLayout= new GridLayout(1, false);
+               gridLayout.marginHeight= 0;
+               gridLayout.marginWidth= 0;
+               regionFormatingCombo.setLayout(gridLayout);
+
+               fFormatAllButton= new Button(regionFormatingCombo, SWT.RADIO);
+               fFormatAllButton.setText(SaveParticipantMessages.CleanUpSaveParticipantPreferenceConfiguration_SaveActionPreferencePAge_FormatAllLines_Radio);
+               gridData= new GridData(SWT.FILL, SWT.TOP, true, false);
+               fFormatAllButton.setLayoutData(gridData);
+               fFormatAllButton.addSelectionListener(new SelectionAdapter() {
+                       /**
+                        * {@inheritDoc}
+                        */
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               changeSettingsValue(CleanUpConstants.FORMAT_SOURCE_CODE_CHANGES_ONLY, !fFormatAllButton.getSelection());
+                       }
+               });
+
+               fFormatChangedOnlyButton= new Button(regionFormatingCombo, SWT.RADIO);
+               fFormatChangedOnlyButton.setText(SaveParticipantMessages.CleanUpSaveParticipantPreferenceConfiguration_SaveActionPreferencePage_FormatOnlyChangedRegions_Radio);
+               gridData= new GridData(SWT.FILL, SWT.TOP, true, false);
+               fFormatChangedOnlyButton.setLayoutData(gridData);
+               fFormatChangedOnlyButton.addSelectionListener(new SelectionAdapter() {
+                       /**
+                        * {@inheritDoc}
+                        */
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               changeSettingsValue(CleanUpConstants.FORMAT_SOURCE_CODE_CHANGES_ONLY, fFormatChangedOnlyButton.getSelection());
+                       }
+               });
+
+               PixelConverter pixelConverter= new PixelConverter(parent);
+               int heightOneHalf= (int)Math.round(pixelConverter.convertHeightInCharsToPixels(1) * 1.5);
+
+               fFormatConfigLink= new Link(fCleanUpOptionsComposite, SWT.NONE);
+               fFormatConfigLink.setText(SaveParticipantMessages.CleanUpSaveParticipantPreferenceConfiguration_ConfigureFormatter_Link);
+               GridData gridData2= new GridData(SWT.LEFT, SWT.TOP, false, false);
+               gridData2.horizontalIndent= 20;
+               gridData2.minimumHeight= heightOneHalf;
+               fFormatConfigLink.setLayoutData(gridData2);
+
+               fOrganizeImportsButton= new Button(fCleanUpOptionsComposite, SWT.CHECK);
+               fOrganizeImportsButton.setText(SaveParticipantMessages.CleanUpSaveParticipantPreferenceConfiguration_SaveActionPreferencePage_OrganizeImports_Checkbox);
+               fOrganizeImportsButton.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+               fOrganizeImportsButton.addSelectionListener(new SelectionAdapter() {
+                       /**
+                        * {@inheritDoc}
+                        */
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               changeSettingsValue(CleanUpConstants.ORGANIZE_IMPORTS, fOrganizeImportsButton.getSelection());
+                       }
+               });
+
+               fOrganizeImportsConfigLink= new Link(fCleanUpOptionsComposite, SWT.NONE);
+               fOrganizeImportsConfigLink.setText(SaveParticipantMessages.CleanUpSaveParticipantPreferenceConfiguration_ConfigureImports_Link);
+               GridData gridData3= new GridData(SWT.LEFT, SWT.TOP, false, false);
+               gridData3.horizontalIndent= 20;
+               gridData3.minimumHeight= heightOneHalf;
+               fOrganizeImportsConfigLink.setLayoutData(gridData3);
+
+               fAdditionalActionButton= new Button(fCleanUpOptionsComposite, SWT.CHECK);
+               fAdditionalActionButton.setText(SaveParticipantMessages.CleanUpSaveParticipantPreferenceConfiguration_AdditionalActions_Checkbox);
+
+               createAdvancedComposite(fCleanUpOptionsComposite);
+               fAdditionalActionButton.addSelectionListener(new SelectionAdapter() {
+                       /**
+                        * {@inheritDoc}
+                        */
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               changeSettingsValue(CleanUpConstants.CLEANUP_ON_SAVE_ADDITIONAL_OPTIONS, fAdditionalActionButton.getSelection());
+                       }
+               });
+       }
+
+       private Composite createAdvancedComposite(final Composite parent) {
+               Composite composite= new Composite(parent, SWT.NONE);
+               GridData gridData= new GridData(SWT.FILL, SWT.FILL, true, true);
+               gridData.horizontalIndent= INDENT;
+               composite.setLayoutData(gridData);
+               GridLayout layout= new GridLayout(2, false);
+               layout.marginHeight= 0;
+               layout.marginWidth= 0;
+               composite.setLayout(layout);
+
+               fSelectedActionsText= new BulletListBlock(composite, SWT.NONE);
+               gridData= new GridData(SWT.FILL, SWT.FILL, true, true);
+               gridData.heightHint= new PixelConverter(composite).convertHeightInCharsToPixels(8);
+               fSelectedActionsText.setLayoutData(gridData);
+
+               fConfigureButton= new Button(composite, SWT.NONE);
+               fConfigureButton.setText(SaveParticipantMessages.CleanUpSaveParticipantPreferenceConfiguration_Configure_Button);
+               fConfigureButton.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
+               fConfigureButton.addSelectionListener(new SelectionAdapter() {
+                       /**
+                        * {@inheritDoc}
+                        */
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               Hashtable<String, String> workingValues= new Hashtable<String, String>(fSettings);
+                               SaveActionSelectionDialog dialog= new SaveActionSelectionDialog(parent.getShell(), workingValues);
+                               if (dialog.open() == Window.OK) {
+                                       fSettings= workingValues;
+                                       settingsChanged();
+                               }
+                       }
+
+               });
+
+               return composite;
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public void initialize(final IScopeContext context, IAdaptable element) {
+               fContext= context;
+               fSettings= CleanUpPreferenceUtil.loadSaveParticipantOptions(context);
+
+               settingsChanged();
+
+               IJavaProject javaProject= null;
+               if (element != null) {
+                       IProject project= (IProject)element.getAdapter(IProject.class);
+                       if (project != null) {
+                               IJavaProject jProject= JavaCore.create(project);
+                               if (jProject != null && jProject.exists()) {
+                                       javaProject= jProject;
+                               }
+                       }
+               }
+
+               configurePreferenceLink(fFormatConfigLink, javaProject, CodeFormatterPreferencePage.PREF_ID, CodeFormatterPreferencePage.PROP_ID);
+               configurePreferenceLink(fOrganizeImportsConfigLink, javaProject, ImportOrganizePreferencePage.PREF_ID, ImportOrganizePreferencePage.PROP_ID);
+
+               super.initialize(context, element);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public void performDefaults() {
+               if (ProjectScope.SCOPE.equals(fContext.getName()) && !hasSettingsInScope(fContext))
+                       return;
+
+               enabled(true);
+
+               if (ProjectScope.SCOPE.equals(fContext.getName())) {
+                       fSettings= CleanUpPreferenceUtil.loadSaveParticipantOptions(InstanceScope.INSTANCE);
+               } else {
+                       fSettings= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getMap();
+               }
+               settingsChanged();
+
+               super.performDefaults();
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public void performOk() {
+               super.performOk();
+
+               if (!ProjectScope.SCOPE.equals(fContext.getName()) || hasSettingsInScope(fContext))
+                       CleanUpPreferenceUtil.saveSaveParticipantOptions(fContext, fSettings);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public void enableProjectSettings() {
+               super.enableProjectSettings();
+
+               CleanUpPreferenceUtil.saveSaveParticipantOptions(fContext, fSettings);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public void disableProjectSettings() {
+               super.disableProjectSettings();
+
+               IEclipsePreferences node= fContext.getNode(JavaUI.ID_PLUGIN);
+
+               Set<String> keys= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getKeys();
+               for (Iterator<String> iterator= keys.iterator(); iterator.hasNext();) {
+                       String key= iterator.next();
+                       node.remove(CleanUpPreferenceUtil.SAVE_PARTICIPANT_KEY_PREFIX + key);
+               }
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       protected String getPostSaveListenerId() {
+               return CleanUpPostSaveListener.POSTSAVELISTENER_ID;
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       protected String getPostSaveListenerName() {
+               return SaveParticipantMessages.CleanUpSaveParticipantPreferenceConfiguration_CleanUpActionsTopNodeName_Checkbox;
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       protected void enabled(boolean isEnabled) {
+               if (isEnabled) {
+                       if (fControlEnableState == null)
+                               return;
+
+                       fControlEnableState.restore();
+                       fControlEnableState= null;
+               } else {
+                       if (fControlEnableState != null)
+                               return;
+
+                       fControlEnableState= ControlEnableState.disable(fCleanUpOptionsComposite);
+               }
+       }
+
+       private void settingsChanged() {
+               fFormatCodeButton.setSelection(CleanUpOptions.TRUE.equals(fSettings.get(CleanUpConstants.FORMAT_SOURCE_CODE)));
+               boolean isFormatting= fFormatCodeButton.getSelection();
+               fSelectedActionsText.generated_3604379449122961324(this, isFormatting);
+       }
+
+       public String getSelectedCleanUpsText(CleanUpOptions options) {
+               StringBuffer buf= new StringBuffer();
+
+               final ICleanUp[] cleanUps= JavaPlugin.getDefault().getCleanUpRegistry().createCleanUps();
+               for (int i= 0; i < cleanUps.length; i++) {
+                       cleanUps[i].setOptions(options);
+                       String[] descriptions= cleanUps[i].getStepDescriptions();
+                       if (descriptions != null) {
+                               for (int j= 0; j < descriptions.length; j++) {
+                                       if (buf.length() > 0) {
+                                               buf.append('\n');
+                                       }
+                                       buf.append(descriptions[j]);
+                               }
+               }
+        }
+               String string= buf.toString();
+               return string;
+       }
+
+       private void configurePreferenceLink(Link link, final IJavaProject javaProject, final String preferenceId, final String propertyId) {
+               link.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               if (fContainer instanceof IWorkbenchPreferenceContainer) {
+                                       IWorkbenchPreferenceContainer container= (IWorkbenchPreferenceContainer)fContainer;
+                                       if (javaProject != null) {
+                                               container.openPage(propertyId, null);
+                                       } else {
+                                               container.openPage(preferenceId, null);
+                                       }
+                               } else {
+                                       PreferencesUtil.createPreferenceDialogOn(fShell, preferenceId, null, null);
+                               }
+                       }
+               });
+       }
+
+       private void changeSettingsValue(String key, boolean enabled) {
+               String value;
+               if (enabled) {
+                       value= CleanUpOptions.TRUE;
+               } else {
+                       value= CleanUpOptions.FALSE;
+               }
+               fSettings.put(key, value);
+               settingsChanged();
+       }
+}
\ No newline at end of file