package org.kie.eclipse.navigator.preferences;
import java.io.File;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.DirectoryFieldEditor;
import org.eclipse.jface.preference.IntegerFieldEditor;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.wst.server.core.IServer;
import org.kie.eclipse.IKieConstants;
import org.kie.eclipse.server.IKieResourceHandler;
import org.kie.eclipse.server.KieServerHandler;
import org.kie.eclipse.utils.PreferencesUtils;
public class ServerPropertyPage extends AbstractKiePropertyPage {
private MyDirectoryFieldEditor gitPathEditor;
private BooleanFieldEditor useDefaultGitPathEditor;
public ServerPropertyPage() {
super(GRID);
}
@Override
protected void createFieldEditors() {
IServer server = getResourceHandler().getServer();
addField(new ReadonlyStringFieldEditor("Server Name:", server.getName(), getFieldEditorParent()));
addField(new ReadonlyStringFieldEditor("Host Name:", server.getHost(), getFieldEditorParent()));
StringFieldEditor stringEditor;
PasswordFieldEditor passwordEditor;
IntegerFieldEditor intEditor;
BooleanFieldEditor boolEditor;
stringEditor = new StringFieldEditor(IKieConstants.PREF_SERVER_USERNAME, "Username:", getFieldEditorParent());
addField(stringEditor);
passwordEditor = new PasswordFieldEditor(IKieConstants.PREF_SERVER_PASSWORD, "Password:", getFieldEditorParent());
addField(passwordEditor);
boolEditor = new MessageDialogToggleFieldEditor(IKieConstants.PREF_SERVER_TRUSTED_CONNECTION, "Trust connections to this Server", getFieldEditorParent());
addField(boolEditor);
stringEditor = new StringFieldEditor(IKieConstants.PREF_SERVER_KIE_APPLICATION_NAME, "KIE Application Name:", getFieldEditorParent());
addField(stringEditor);
intEditor = new IntegerFieldEditor(IKieConstants.PREF_SERVER_HTTP_PORT, "HTTP Port:", getFieldEditorParent());
addField(intEditor);
intEditor = new IntegerFieldEditor(IKieConstants.PREF_SERVER_GIT_PORT, "Git Port:", getFieldEditorParent());
addField(intEditor);
useDefaultGitPathEditor = new BooleanFieldEditor(IKieConstants.PREF_USE_DEFAULT_GIT_PATH, "Use default Git Repository Path", getFieldEditorParent());
addField(useDefaultGitPathEditor);
gitPathEditor = new MyDirectoryFieldEditor(IKieConstants.PREF_GIT_REPO_PATH, "Git Repository Path", getFieldEditorParent());
gitPathEditor.setErrorMessage("Git Repository Path must be an existing directory");
addField(gitPathEditor);
}
private void updateControls() {
setErrorMessage(null);
Button checkBox = (Button) useDefaultGitPathEditor.getDescriptionControl(getFieldEditorParent());
boolean checked = checkBox.getSelection();
gitPathEditor.setEnabled(!checked, getFieldEditorParent());
gitPathEditor.setEmptyStringAllowed(checked);
if (!checked && gitPathEditor.getStringValue().isEmpty()) {
String defaultRepoPath = PreferencesUtils.getDefaultRepositoryDir();
String repoPath = getResourceHandler().getPreferenceName(null).replace(IKieConstants.PREF_PATH_SEPARATOR.charAt(0), File.separator.charAt(0));
if (defaultRepoPath!=null)
defaultRepoPath += File.separator + repoPath;
else
defaultRepoPath = File.separator + repoPath;
gitPathEditor.setStringValue(defaultRepoPath);
}
gitPathEditor.refreshValidState();
checkState();
}
@Override
protected void initialize() {
super.initialize();
updateControls();
final Button checkBox = (Button) useDefaultGitPathEditor.getDescriptionControl(getFieldEditorParent());
checkBox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateControls();
}
});
}
@Override
protected Class<? extends IKieResourceHandler> getResourceHandlerType() {
return KieServerHandler.class;
}
private class MyDirectoryFieldEditor extends DirectoryFieldEditor {
public MyDirectoryFieldEditor(String prefGitRepoPath, String string, Composite fieldEditorParent) {
super(prefGitRepoPath, string, fieldEditorParent);
}
@Override
protected void createControl(Composite parent) {
setValidateStrategy(VALIDATE_ON_KEY_STROKE);
super.createControl(parent);
}
@Override
public void refreshValidState() {
super.refreshValidState();
}
@Override
protected boolean checkState() {
if (useDefaultGitPathEditor.getBooleanValue())
return true;
return super.checkState();
}
}
private static class MessageDialogToggleFieldEditor extends BooleanFieldEditor {
private Composite parent;
public MessageDialogToggleFieldEditor(String name, String label, Composite parent) {
super(name, label, parent);
this.parent = parent;
}
@Override
protected void doLoad() {
Button checkBox = getChangeControl(parent);
if (checkBox != null) {
String value = getPreferenceStore().getString(getPreferenceName());
checkBox.setSelection(MessageDialogWithToggle.ALWAYS.equals(value));
}
}
/*
* (non-Javadoc) Method declared on FieldEditor. Loads the default value
* from the preference store and sets it to the check box.
*/
@Override
protected void doLoadDefault() {
Button checkBox = getChangeControl(parent);
if (checkBox != null) {
String value = getPreferenceStore().getDefaultString(getPreferenceName());
checkBox.setSelection(MessageDialogWithToggle.ALWAYS.equals(value));
}
}
/*
* (non-Javadoc) Method declared on FieldEditor.
*/
@Override
protected void doStore() {
Button checkBox = getChangeControl(parent);
getPreferenceStore().setValue(
getPreferenceName(),
checkBox.getSelection() ? MessageDialogWithToggle.ALWAYS : MessageDialogWithToggle.NEVER);
}
}
}