package org.nodeclipse.enide.maven.preferences;
import java.net.MalformedURLException;
import java.net.URL;
import org.eclipse.core.runtime.Platform;
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.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Link;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.nodeclipse.enide.maven.Activator;
/**
* @author Paul Verest
*/
public class MavenPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
boolean isWindows = Platform.getOS().startsWith("win");
private DirectoryFieldEditor mavenHome;
private DirectoryFieldEditor mavenHomeToUse;
private DirectoryFieldEditor javaHomeToUse;
private StringFieldEditor mavenJvmOpts;
//private FileFieldEditor mavenPath;
private StringFieldEditor mavenOptions;
private StringFieldEditor mavenGoal1;
private StringFieldEditor mavenGoal2;
private BooleanFieldEditor mavenOptionShowVersion;
private BooleanFieldEditor mavenOptionDebug;
private BooleanFieldEditor mavenOptionQuiet;
private BooleanFieldEditor mavenOptionOffline;
private BooleanFieldEditor mavenOptionForcedDependenciesUpdate;
private BooleanFieldEditor mavenOptionTestSkip;
private FileFieldEditor mavenOptionAlternativeSettings;
private StringFieldEditor mavenOptionJettyPort;
private BooleanFieldEditor passAllEnvVars;
public MavenPreferencePage() {
super(GRID);
setPreferenceStore(Activator.getDefault().getPreferenceStore());
setImageDescriptor(Activator.getImageDescriptor("icons/feather-ma16.png"));
setDescription(
// VersionUtil.getLongString()+ //TODO make plugin to collect Eclipse utils
// "\n"+
"Maven requires to set JAVA_HOME (that Eclipse does not use) and MAVEN_HOME environment variable to use from shell.\n"
+"MAVEN_HOME is to be folder where you extracted downloaded Maven distribution,"
+" e.g. D:\\Progs\\Maven\\apache-maven-3.2.1\n"
+"Then it is easy to add mvn to Path like following string \"%JAVA_HOME%\\bin;%MAVEN_HOME%\\bin;\"."
);
}
@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 maven project page</A>", "http://www.nodeclipse.org/projects/maven/");
addLinkWidget(" and <A>maven.apache.org</A> for news and docs.", "http://maven.apache.org/");
addLinkWidget("<A>GitHub</A>", "https://github.com/Nodeclipse/nodeclipse-1/tree/master/org.nodeclipse.enide.maven");
mavenHome = new DirectoryFieldEditor(MavenConstants.MAVEN_HOME, "Maven home directory:", getFieldEditorParent());
mavenHome.setEnabled(false, getFieldEditorParent());
addField(mavenHome);
//TODO show maven version in this Preference Page
mavenHomeToUse = new DirectoryFieldEditor(MavenConstants.MAVEN_HOME_TO_USE, "Maven home to use:", getFieldEditorParent());
addField(mavenHomeToUse);
javaHomeToUse = new DirectoryFieldEditor(MavenConstants.MAVEN_JAVA_HOME_TO_USE, "alternative JAVA_HOME to use:", getFieldEditorParent());
addField(javaHomeToUse);
mavenJvmOpts = new StringFieldEditor(MavenConstants.MAVEN_OPTS, "JVM options MAVEN_OPTS:", getFieldEditorParent());
addField(mavenJvmOpts);
mavenOptions = new StringFieldEditor(MavenConstants.MAVEN_OPTIONS, "Maven options (mvn -h):", getFieldEditorParent());
addField(mavenOptions);
/*
mavenGoal1 = new StringFieldEditor(MavenConstants.MAVEN_GOAL1, "Maven goal1:", getFieldEditorParent());
addField(mavenGoal1);
mavenGoal2 = new StringFieldEditor(MavenConstants.MAVEN_GOAL2, "Maven goal2:", getFieldEditorParent());
addField(mavenGoal2);
*/
mavenOptionShowVersion = new BooleanFieldEditor(MavenConstants.MAVEN_OPTION_SHOW_VERSION,"-V, --show-version Display version information without stopping build", getFieldEditorParent());
addField(mavenOptionShowVersion);
mavenOptionDebug = new BooleanFieldEditor(MavenConstants.MAVEN_OPTION_DEBUG,"-X Debug (Produce execution debug output)", getFieldEditorParent());
addField(mavenOptionDebug);
mavenOptionQuiet = new BooleanFieldEditor(MavenConstants.MAVEN_OPTION_QUIET,"-q Quiet (Quiet output - only show errors)", getFieldEditorParent());
addField(mavenOptionQuiet);
mavenOptionForcedDependenciesUpdate = new BooleanFieldEditor(MavenConstants.MAVEN_OPTION_FORCED_DEPENDENCIES_UPDATE, "-U Forces a check for updated releases and snapshots on remote repositories", getFieldEditorParent());
addField(mavenOptionForcedDependenciesUpdate);
mavenOptionOffline = new BooleanFieldEditor(MavenConstants.MAVEN_OPTION_OFFLINE, "-o Offline (Work offline)", getFieldEditorParent());
addField(mavenOptionOffline);
mavenOptionTestSkip = new BooleanFieldEditor(MavenConstants.MAVEN_OPTION_TEST_SKIP,"-Dmaven.test.skip=true (skip unit testing)", getFieldEditorParent());
if (isWindows) mavenOptionTestSkip.setEnabled(false, getFieldEditorParent());
addField(mavenOptionTestSkip);
mavenOptionAlternativeSettings = new FileFieldEditor(MavenConstants.MAVEN_OPTION_ALTERNATIVE_SETTINGS, "-s Alternative settings.xml:", getFieldEditorParent());
addField(mavenOptionAlternativeSettings);
mavenOptionJettyPort = new StringFieldEditor(MavenConstants.MAVEN_OPTION_JETTY_PORT, "-Djetty.port=", getFieldEditorParent());
addField(mavenOptionJettyPort);
passAllEnvVars = new BooleanFieldEditor(MavenConstants.PASS_ALL_ENVIRONMENT_VARIABLES,
"pass all environment variables of Eclipse to launched app", getFieldEditorParent());
addField(passAllEnvVars);
}
}