/*******************************************************************************
* Copyright (c) 2014, 2016 Red Hat Inc. and others.
* 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:
* Red Hat - Initial Contribution
*******************************************************************************/
package org.eclipse.linuxtools.internal.docker.ui.preferences;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.preference.IntegerFieldEditor;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.preference.PreferenceStore;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.linuxtools.docker.ui.Activator;
import org.eclipse.linuxtools.internal.docker.core.DockerContainerRefreshManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
public class DockerPreferencePage extends PreferencePage implements
IWorkbenchPreferencePage {
private static final String REFRESH_TIME_MSG = "RefreshTime.label"; //$NON-NLS-1$
private static final String RESTART_WAIT_TIME_MSG = "RestartWaitTime.label"; //$NON-NLS-1$
private static final String INVALID_REFRESH_TIME_MSG = "RefreshTime.invalid.label"; //$NON-NLS-1$
private static final String INVALID_RESTART_WAIT_TIME_MSG = "RestartWaitTime.invalid.label"; //$NON-NLS-1$
private IntegerFieldEditor refreshTimeField;
private IntegerFieldEditor restartWaitTimeField;
public DockerPreferencePage() {
super();
setPreferenceStore(Activator.getDefault().getPreferenceStore());
}
@Override
public void init(final IWorkbench workbench) {
}
/**
* Saves the current values in the {@link PreferenceStore}.
*/
private void savePreferences() {
if (this.refreshTimeField != null) {
this.refreshTimeField.store();
}
if (this.restartWaitTimeField != null) {
this.restartWaitTimeField.store();
}
}
@Override
public boolean performOk() {
savePreferences();
return true;
}
@Override
protected void performApply() {
savePreferences();
super.performApply();
}
@Override
protected Control createContents(final Composite parent) {
final Composite container = new Composite(parent, SWT.NONE);
GridLayoutFactory.fillDefaults().numColumns(1).applyTo(container);
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).applyTo(container);
createContainerRefreshContainer(container);
return container;
}
/**
* Create a container for the refresh rate property
* @param parent the parent container
*/
private void createContainerRefreshContainer(Composite parent) {
final Composite container = new Composite(parent, SWT.NONE);
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).span(1, 1).grab(true, false).applyTo(container);
GridLayoutFactory.fillDefaults().margins(0, 0).spacing(10, 2).applyTo(container);
refreshTimeField = new IntegerFieldEditor(
PreferenceConstants.REFRESH_TIME,
PreferenceMessages.getString(REFRESH_TIME_MSG), container);
refreshTimeField.setPreferenceStore(getPreferenceStore());
refreshTimeField
.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE);
refreshTimeField.setValidRange(5, 200);
refreshTimeField.setPage(this);
refreshTimeField
.setErrorMessage(PreferenceMessages.getString(INVALID_REFRESH_TIME_MSG));
refreshTimeField.showErrorMessage();
refreshTimeField.load();
// If the preference changes, alert the Refresh Manager
refreshTimeField
.setPropertyChangeListener(event -> {
if (event.getSource().equals(refreshTimeField)) {
if (refreshTimeField.isValid()) {
DockerContainerRefreshManager.getInstance()
.setRefreshTime(
refreshTimeField.getIntValue());
setErrorMessage(null);
} else {
setErrorMessage(refreshTimeField.getErrorMessage());
}
setValid(refreshTimeField.isValid());
}
});
restartWaitTimeField = new IntegerFieldEditor(
PreferenceConstants.RESTART_WAIT_TIME,
PreferenceMessages.getString(RESTART_WAIT_TIME_MSG), container);
restartWaitTimeField.setPreferenceStore(getPreferenceStore());
restartWaitTimeField
.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE);
restartWaitTimeField.setValidRange(0, Integer.MAX_VALUE);
restartWaitTimeField.setPage(this);
restartWaitTimeField.setErrorMessage(
PreferenceMessages.getString(INVALID_RESTART_WAIT_TIME_MSG));
restartWaitTimeField.showErrorMessage();
restartWaitTimeField.load();
// If the preference changes, alert the Refresh Manager
restartWaitTimeField.setPropertyChangeListener(event -> {
if (event.getSource().equals(restartWaitTimeField)) {
if (restartWaitTimeField.isValid()) {
DockerContainerRefreshManager.getInstance()
.setRefreshTime(restartWaitTimeField.getIntValue());
setErrorMessage(null);
} else {
setErrorMessage(restartWaitTimeField.getErrorMessage());
}
setValid(restartWaitTimeField.isValid());
}
});
}
}