/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.wizards.toolintegration;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import de.rcenvironment.core.component.integration.ToolIntegrationConstants;
import de.rcenvironment.core.gui.utils.common.configuration.VariableNameVerifyListener;
/**
* A dialog for editing a single endpoint configuration.
*
* @author Sascha Zur
*/
public class WizardPropertyEditDialog extends Dialog {
private Text keyText;
private Text displayNameText;
private Map<String, String> config;
private String title;
private Text defaultValueText;
private List<String> allPropertyNames;
private String oldPropertyName;
private List<String> allPropertyDisplayNames;
private Object oldPropertyDisplayName;
public WizardPropertyEditDialog(Shell parentShell, String title, Map<String, String> config, List<String> allPropertyNames,
List<String> allPropertyDisplayNames) {
super(parentShell);
this.config = config;
oldPropertyName = config.get(ToolIntegrationConstants.KEY_PROPERTY_KEY);
oldPropertyDisplayName = config.get(ToolIntegrationConstants.KEY_PROPERTY_DISPLAYNAME);
this.title = title;
this.allPropertyNames = allPropertyNames;
this.allPropertyDisplayNames = allPropertyDisplayNames;
}
@Override
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText(title);
}
@Override
protected Control createDialogArea(Composite parent) {
Composite container = (Composite) super.createDialogArea(parent);
container.setLayout(new GridLayout(1, true));
GridData g = new GridData(GridData.FILL_BOTH);
g.grabExcessHorizontalSpace = true;
g.horizontalAlignment = GridData.CENTER;
container.setLayoutData(g);
createPropertySettings(container);
updateInitValues();
return container;
}
private void updateInitValues() {
if (config.get(PropertyConfigurationPage.KEY_PROPERTY_KEY) != null) {
keyText.setText(config.get(PropertyConfigurationPage.KEY_PROPERTY_KEY));
}
if (config.get(PropertyConfigurationPage.KEY_PROPERTY_DISPLAY_NAME) != null) {
displayNameText.setText(config.get(PropertyConfigurationPage.KEY_PROPERTY_DISPLAY_NAME));
}
if (config.get(PropertyConfigurationPage.KEY_PROPERTY_DEFAULT_VALUE) != null) {
defaultValueText.setText(config.get(PropertyConfigurationPage.KEY_PROPERTY_DEFAULT_VALUE));
}
}
protected void createPropertySettings(Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
container.setLayout(new GridLayout(1, true));
Composite propertyContainer = new Composite(container, SWT.None);
propertyContainer.setLayout(new GridLayout(2, true));
Label keyLabel = new Label(propertyContainer, SWT.NONE);
keyLabel.setText(Messages.keyColon);
keyText = new Text(propertyContainer, SWT.BORDER);
GridData textGridData = new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL);
keyText.setLayoutData(textGridData);
keyText.addListener(SWT.Verify, new VariableNameVerifyListener(false));
Label displayName = new Label(propertyContainer, SWT.NONE);
displayName.setText(Messages.displayNameColon);
displayNameText = new Text(propertyContainer, SWT.BORDER);
GridData displayGridData = new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL);
displayNameText.setLayoutData(displayGridData);
Label defaultValueLabel = new Label(propertyContainer, SWT.NONE);
defaultValueLabel.setText(Messages.defaultValueColon);
defaultValueText = new Text(propertyContainer, SWT.BORDER);
GridData defaultValueData = new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL);
defaultValueText.setLayoutData(defaultValueData);
}
private void saveAllConfig() {
config.put(PropertyConfigurationPage.KEY_PROPERTY_KEY, keyText.getText());
config.put(PropertyConfigurationPage.KEY_PROPERTY_DISPLAY_NAME, displayNameText.getText());
config.put(PropertyConfigurationPage.KEY_PROPERTY_DEFAULT_VALUE, defaultValueText.getText());
}
/**
* {@inheritDoc}
*/
@Override
public void create() {
super.create();
// dialog title
getShell().setText(title);
validateInput();
installListeners();
}
private void installListeners() {
ModifyListener ml = new ModifyListener() {
@Override
public void modifyText(ModifyEvent arg0) {
saveAllConfig();
validateInput();
}
};
keyText.addModifyListener(ml);
keyText.addListener(SWT.Verify, new VariableNameVerifyListener(true));
displayNameText.addModifyListener(ml);
defaultValueText.addModifyListener(ml);
}
protected void validateInput() {
boolean isValid = true;
if (keyText.getText() == null || keyText.getText().isEmpty()) {
isValid = false;
}
// filter if name is already in use (but remind that on edit it can have the same name)
if (allPropertyNames != null && allPropertyNames.contains(keyText.getText())) {
if (oldPropertyName == null || !oldPropertyName.equals(keyText.getText())) {
isValid = false;
}
}
if (allPropertyDisplayNames != null && allPropertyDisplayNames.contains(displayNameText.getText())) {
if (oldPropertyDisplayName == null || !oldPropertyDisplayName.equals(displayNameText.getText())) {
isValid = false;
}
}
if (displayNameText.getText() == null || displayNameText.getText().isEmpty()) {
isValid = false;
}
getButton(IDialogConstants.OK_ID).setEnabled(isValid);
}
public Map<String, String> getConfig() {
return config;
}
}