/**
* Copyright (c) 2013-2016 Angelo ZERR.
* 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:
* Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
*/
package tern.eclipse.ide.server.nodejs.ui.debugger.preferences;
import org.eclipse.jface.preference.ComboFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import tern.eclipse.ide.server.nodejs.core.INodejsInstall;
import tern.eclipse.ide.server.nodejs.core.TernNodejsCorePlugin;
import tern.eclipse.ide.server.nodejs.internal.ui.preferences.DebuggerFieldEditor;
import tern.eclipse.ide.server.nodejs.internal.ui.preferences.NodeJSConfigEditor;
import tern.eclipse.ide.ui.preferences.FileComboFieldEditor;
import tern.eclipse.ide.ui.preferences.WorkspaceFileFieldEditor;
import tern.utils.StringUtils;
/**
* Abstract node.js preferences page.
*
*/
public abstract class AbstractNodejsCliFilePreferencesPage extends FieldEditorPreferencePage
implements IWorkbenchPreferencePage {
private WorkspaceFileFieldEditor defaultCliFileField;
private DebuggerFieldEditor debuggerField;
private NodeJSConfigEditor nodeJSConfigEditor;
public AbstractNodejsCliFilePreferencesPage(int style) {
super(style);
}
@Override
protected void createFieldEditors() {
Composite parent = getFieldEditorParent();
createCliFileContent(parent);
createSeparator(parent);
createDebuggerContent(parent);
createSeparator(parent);
createNodeInstallContent(parent);
}
@Override
protected void initialize() {
super.initialize();
// Update enable/disable of the nodejs path field.
nodeJSConfigEditor.updateNodePath(getNodejsInstall(false), false, getFieldEditorParent());
}
@Override
protected void performDefaults() {
super.performDefaults();
nodeJSConfigEditor.updateNodePath(getNodejsInstall(true), false, getFieldEditorParent());
}
protected void createCliFileContent(Composite parent) {
defaultCliFileField = new WorkspaceFileFieldEditor(getCliFilePreferenceName(), getCliFileLabel(), parent);
addField(defaultCliFileField);
}
protected void createDebuggerContent(Composite parent) {
// Debugger setup
debuggerField = new DebuggerFieldEditor(getDebuggerPreferenceName(), getDebuggerLabel(), parent);
addField(debuggerField);
// debugger wiki
Link debuggerWikiLink = debuggerField.createWikiLink(parent, SWT.NONE);
GridData gd = new GridData(SWT.FILL, SWT.FILL, false, false, 5, 1);
gd.horizontalIndent = 25;
debuggerWikiLink.setLayoutData(gd);
}
protected void createNodeInstallContent(Composite parent) {
// Node configuration panel
nodeJSConfigEditor = new NodeJSConfigEditor(parent, getNodeJSInstallPreferenceName(),
getNodeJSPathPreferenceName());
ComboFieldEditor nodeJSInstallField = nodeJSConfigEditor.getNodeJSInstallField();
addField(nodeJSInstallField);
FileComboFieldEditor nativeNodePath = nodeJSConfigEditor.getNativeNodePath();
addField(nativeNodePath);
}
private void createSeparator(Composite parent) {
Label separator = new Label(parent, SWT.HORIZONTAL | SWT.SEPARATOR);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 4;
separator.setLayoutData(gd);
}
@Override
public void init(IWorkbench workbench) {
}
private INodejsInstall getNodejsInstall(boolean defaultValue) {
INodejsInstall install = null;
String installId = defaultValue ? super.getPreferenceStore().getDefaultString(getNodeJSInstallPreferenceName())
: super.getPreferenceStore().getString(getNodeJSInstallPreferenceName());
if (!StringUtils.isEmpty(installId)) {
install = TernNodejsCorePlugin.getNodejsInstallManager().findNodejsInstall(installId);
}
return install;
}
protected abstract String getCliFilePreferenceName();
protected abstract String getCliFileLabel();
protected abstract String getDebuggerPreferenceName();
protected abstract String getDebuggerLabel();
protected abstract String getNodeJSInstallPreferenceName();
protected abstract String getNodeJSPathPreferenceName();
}