/* * Copyright 2009-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.codehaus.groovy.eclipse.preferences; import org.codehaus.groovy.eclipse.GroovyPlugin; import org.codehaus.groovy.eclipse.core.GroovyCore; import org.codehaus.groovy.eclipse.core.builder.ConvertLegacyProject; import org.codehaus.groovy.eclipse.core.preferences.PreferenceConstants; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.RadioGroupFieldEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.List; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; public class GroovyPreferencePage extends FieldEditorOverlayPage implements IWorkbenchPreferencePage { private final class MonospaceFieldEditor extends BooleanFieldEditor { Label myLabel; private MonospaceFieldEditor() { super(PreferenceConstants.GROOVY_JUNIT_MONOSPACE_FONT, "&Use monospace font for JUnit (deprecated)", getFieldEditorParent()); setEnabled(true, getFieldEditorParent()); setPreferenceStore(getPreferenceStore()); } // override so we can set line wrap @Override public Label getLabelControl(Composite parent) { if (myLabel == null) { myLabel = new Label(parent, SWT.LEFT | SWT.WRAP); myLabel.setFont(parent.getFont()); String text = getLabelText(); if (text != null) { myLabel.setText(text); } myLabel.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent event) { myLabel = null; } }); } else { checkParent(myLabel, parent); } return myLabel; } @Override protected Label getLabelControl() { return myLabel; } } public GroovyPreferencePage() { super(GRID); setPreferenceStore(GroovyPlugin.getDefault().getPreferenceStore()); } public void init(IWorkbench workbench) { } @Override protected String getPageId() { return "org.codehaus.groovy.eclipse.preferences"; } @Override protected void createFieldEditors() { // JUnit Monospace addField(new MonospaceFieldEditor()); new Label(getFieldEditorParent(), SWT.LEFT | SWT.WRAP).setText( " This is particularly useful for testing with the assert keyword"); // default launch location for scripts addField(new RadioGroupFieldEditor(PreferenceConstants.GROOVY_SCRIPT_DEFAULT_WORKING_DIRECTORY, "\nDefault working directory for running Groovy scripts\n (will not change the working directory of existing scripts)", 1, new String[][] { { "Project home", PreferenceConstants.GROOVY_SCRIPT_PROJECT_HOME }, { "Script location", PreferenceConstants.GROOVY_SCRIPT_SCRIPT_LOC }, { "Eclipse home", PreferenceConstants.GROOVY_SCRIPT_ECLIPSE_HOME } }, getFieldEditorParent())); // legacy projects ConvertLegacyProject convert = new ConvertLegacyProject(); final IProject[] oldProjects = convert.getAllOldProjects(); if (oldProjects.length > 0) { Label l = new Label(getFieldEditorParent(), SWT.LEFT | SWT.WRAP); l.setText("The following legacy groovy projects exist in the workspace:\n"); final List oldProjectsList = new List(getFieldEditorParent(), SWT.MULTI | SWT.V_SCROLL); populateProjectsList(oldProjectsList, oldProjects); l = new Label(getFieldEditorParent(), SWT.LEFT | SWT.WRAP); l.setText("Select the projects to convert."); Button convertButton = new Button(getFieldEditorParent(), SWT.PUSH); convertButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); convertButton.setText("Convert"); convertButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { convertSelectedProjects(oldProjectsList.getSelection()); populateProjectsList(oldProjectsList, new ConvertLegacyProject().getAllOldProjects()); } }); } } //-------------------------------------------------------------------------- private void populateProjectsList(final List oldProjectsList, final IProject[] oldProjects) { final String[] projNames = new String[oldProjects.length]; for (int i = 0; i < oldProjects.length; i++) { projNames[i] = oldProjects[i].getName(); } oldProjectsList.setItems(projNames); } private void convertSelectedProjects(String[] selection) { if (selection.length == 0) { return; } IProject[] toConvert = new IProject[selection.length]; IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); for (int i = 0; i < toConvert.length; i++) { toConvert[i] = root.getProject(selection[i]); } try { new ConvertLegacyProject().convertProjects(toConvert); StringBuffer sb = new StringBuffer(); sb.append("The following projects have been converted:\n"); for (String projName : selection) { sb.append(projName + "\n"); } MessageDialog.openInformation(getShell(), "Successful conversion", sb.toString()); } catch (Exception e) { // some kind of failure GroovyCore.logException("Failure when converting legacy projects", e); MessageDialog.openError(getShell(), "Error converting projects", "There has been an error converting the projects. See the error log."); } } }