package org.nodeclipse.enide.gradle.preferences; import java.net.MalformedURLException; import java.net.URL; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.DirectoryFieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.FileFieldEditor; import org.eclipse.jface.preference.StringFieldEditor; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.nodeclipse.enide.gradle.Activator; import org.eclipse.swt.SWT; //+ import org.eclipse.swt.widgets.Link; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionAdapter; /** * @author Paul Verest */ public class GradlePreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { private DirectoryFieldEditor gradleHome; private DirectoryFieldEditor gradleHomeToUse; private BooleanFieldEditor gradleUseWrapper; private DirectoryFieldEditor javaHomeToUse; private StringFieldEditor gradleJvmOpts; private StringFieldEditor gradleOptions; private StringFieldEditor gradleTask1; private StringFieldEditor gradleTask2; private BooleanFieldEditor gradleOptionDebug; private BooleanFieldEditor gradleOptionInfo; private BooleanFieldEditor gradleOptionQuiet; private BooleanFieldEditor gradleOptionOffline; private BooleanFieldEditor gradleOptionSkipTest; private BooleanFieldEditor gradleOptionDaemon; private DirectoryFieldEditor gradleEnvVarAlternativeAndroidHome; private BooleanFieldEditor passAndroidSigningEnvVars; private FileFieldEditor gradleEnvVarAlternativeKeystoreFile; private StringFieldEditor gradleEnvVarAlternativeKeystorePassword; private StringFieldEditor gradleEnvVarAlternativeKeyAlias; private StringFieldEditor gradleEnvVarAlternativeKeyPassword; private BooleanFieldEditor passAllEnvVars; public GradlePreferencePage() { super(GRID); setPreferenceStore(Activator.getDefault().getPreferenceStore()); setImageDescriptor(Activator.getImageDescriptor("icons/gradle-icon-16x16_bottom_right_corner_run_half_size.png")); setDescription( // VersionUtil.getLongString()+ //TODO make plugin to collect Eclipse utils // "\n"+ "From getting-started.html:\n" +"For running Gradle, create GRADLE_HOME environment variable pointing to folder with unpacked Gradle distribution" + "and add GRADLE_HOME/bin to your PATH environment variable. Usually, this is sufficient to run Gradle.\n" +"Gradle uses whichever JDK it finds in your path (to check, use java -version)." +" Alternatively, you can set the JAVA_HOME environment variable to point to the install directory of the desired JDK.\n" +"\nFor this plugin specifying Gradle home to use will be enough." +" (This lets you easily experiment with different versions.)"); } @Override public void init(IWorkbench workbench) { } private void addLinkWidget(String text, final String urlString){ // http://stackoverflow.com/questions/22424993/eclipse-plugin-dev-how-to-add-hyperlink-on-fieldeditorpreferencepage Link link = new Link(getFieldEditorParent(), SWT.NONE); link.setText(text); link.addSelectionListener(new SelectionAdapter() { public void widgetSelected(final SelectionEvent event) { try { URL url = new URL(urlString); try { PlatformUI.getWorkbench().getBrowserSupport().getExternalBrowser().openURL(url ); } catch (PartInitException e) { } } catch (MalformedURLException e) { } } }); } @Override protected void createFieldEditors() { addLinkWidget("Visit <A>Nodeclipse gradle project page</A>", "http://www.nodeclipse.org/projects/gradle/"); addLinkWidget(" and <A>www.gradle.org</A> for news and docs.", "http://www.gradle.org/"); addLinkWidget("<A>GitHub</A>", "https://github.com/Nodeclipse/nodeclipse-1/tree/master/org.nodeclipse.enide.gradle"); gradleHome = new DirectoryFieldEditor(GradleConstants.GRADLE_HOME, "Gradle home directory:", getFieldEditorParent()); gradleHome.setEnabled(false, getFieldEditorParent()); addField(gradleHome); //TODO show version in this Preference Page gradleHomeToUse = new DirectoryFieldEditor(GradleConstants.GRADLE_HOME_TO_USE, "Gradle home to use:", getFieldEditorParent()); addField(gradleHomeToUse); gradleUseWrapper = new BooleanFieldEditor(GradleConstants.GRADLE_USE_WRAPPER, "use wrapper if `gradlew[.bat]` is present (appears after `gradle wrapper`)", getFieldEditorParent()); addField(gradleUseWrapper); javaHomeToUse = new DirectoryFieldEditor(GradleConstants.GRADLE_JAVA_HOME_TO_USE, "alternative JAVA_HOME to use:", getFieldEditorParent()); addField(javaHomeToUse); gradleJvmOpts = new StringFieldEditor(GradleConstants.GRADLE_OPTS, "JVM options GRADLE_OPTS:", getFieldEditorParent()); addField(gradleJvmOpts); gradleOptions = new StringFieldEditor(GradleConstants.GRADLE_OPTIONS, "Gradle options (gradle -h):", getFieldEditorParent()); addField(gradleOptions); /* gradleTask1 = new StringFieldEditor(GradleConstants.GRADLE_TASK1, "Gradle task1:", getFieldEditorParent()); addField(gradleTask1); gradleTask2 = new StringFieldEditor(GradleConstants.GRADLE_TASK2, "Gradle task2:", getFieldEditorParent()); addField(gradleTask2); */ gradleOptionDebug = new BooleanFieldEditor(GradleConstants.GRADLE_OPTION_DEBUG,"-d, --debug Log in debug mode (includes normal stacktrace).", getFieldEditorParent()); addField(gradleOptionDebug); gradleOptionInfo = new BooleanFieldEditor(GradleConstants.GRADLE_OPTION_INFO,"-i, --info Set log level to info.", getFieldEditorParent()); addField(gradleOptionInfo); gradleOptionQuiet = new BooleanFieldEditor(GradleConstants.GRADLE_OPTION_QUIET,"-q, --quiet Log errors only.", getFieldEditorParent()); addField(gradleOptionQuiet); gradleOptionOffline = new BooleanFieldEditor(GradleConstants.GRADLE_OPTION_OFFLINE, "--offline The build should operate without accessing network resources.", getFieldEditorParent()); addField(gradleOptionOffline); gradleOptionSkipTest = new BooleanFieldEditor(GradleConstants.GRADLE_OPTION_TEST_SKIP, "-x test (--exclude-task test) or use `gradle assemble`", getFieldEditorParent()); addField(gradleOptionSkipTest); gradleOptionDaemon = new BooleanFieldEditor(GradleConstants.GRADLE_OPTION_DAEMON, "--daemon Uses the Gradle daemon to run the build. Starts the daemon if not running.", getFieldEditorParent()); addField(gradleOptionDaemon); gradleEnvVarAlternativeAndroidHome = new DirectoryFieldEditor(GradleConstants.GRADLE_ENVVAR_ALTERNATIVE_ANDROID_HOME, "alternative ANDROID_HOME:", getFieldEditorParent()); addField(gradleEnvVarAlternativeAndroidHome); passAllEnvVars = new BooleanFieldEditor(GradleConstants.PASS_ALL_ENVIRONMENT_VARIABLES, "pass all environment variables of Eclipse to launched app // incompatible with #129", getFieldEditorParent()); addField(passAllEnvVars); passAndroidSigningEnvVars = new BooleanFieldEditor(GradleConstants.PASS_ANDROID_SIGNING_ENVIRONMENT_VARIABLES, "pass Android signing environment variables (4) // experimental, see #129", getFieldEditorParent()); addField(passAndroidSigningEnvVars); gradleEnvVarAlternativeKeystoreFile = new FileFieldEditor(GradleConstants.GRADLE_ENVVAR_ALTERNATIVE_ANDROID_KEYSTORE_FILE, "alternative KEYSTORE file:", getFieldEditorParent()); addField(gradleEnvVarAlternativeKeystoreFile); gradleEnvVarAlternativeKeystorePassword = new StringFieldEditor(GradleConstants.GRADLE_ENVVAR_ALTERNATIVE_ANDROID_KEYSTORE_PASSWORD, "alternative KEYSTORE_PASSWORD:", getFieldEditorParent()); addField(gradleEnvVarAlternativeKeystorePassword); gradleEnvVarAlternativeKeyAlias = new StringFieldEditor(GradleConstants.GRADLE_ENVVAR_ALTERNATIVE_ANDROID_KEY_ALIAS, "alternative KEY_ALIAS:", getFieldEditorParent()); addField(gradleEnvVarAlternativeKeyAlias); gradleEnvVarAlternativeKeyPassword = new StringFieldEditor(GradleConstants.GRADLE_ENVVAR_ALTERNATIVE_ANDROID_KEY_PASSWORD, "alternative KEY_PASSWORD:", getFieldEditorParent()); addField(gradleEnvVarAlternativeKeyPassword); } }