blob: a0895a74e352f9573ba03d698679f18d03f5e5a1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2012 Red Hat, Inc.
* All rights reserved.
* This program is 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, Inc. - initial API and implementation
*
* @author Bob Brodt
******************************************************************************/
package org.eclipse.bpmn2.modeler.ui.property.dialogs;
import java.util.Map;
import org.eclipse.emf.common.util.URI;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.osgi.util.NLS;
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.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;
/**
* @author Bob Brodt
*
*/
public class NamespacesEditingDialog extends InputDialog {
Text namespaceText;
String namespace;
Text namespaceErrorText;
Map<String,String> map;
public NamespacesEditingDialog(Shell shell, String title, final Map<String,String> map, final String prefix, String namespace) {
super(
shell,
title,
Messages.NamespacesEditingDialog_Prefix,
prefix,
new IInputValidator() {
@Override
public String isValid(String newText) {
if (newText==null || newText.isEmpty())
return Messages.NamespacesEditingDialog_Invalid_Empty_Prefix;
if (newText.equals(prefix))
return null;
if (map.containsKey(newText))
return NLS.bind(Messages.NamespacesEditingDialog_Invalid_Duplicate_Prefix,newText);
return null;
}
}
);
this.namespace = namespace;
this.map = map;
}
@Override
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite)super.createDialogArea(parent);
composite.getChildren();
if (namespace!=null) {
Label label = new Label(composite, SWT.WRAP);
label.setText(Messages.NamespacesEditingDialog_Namespace);
GridData data = new GridData(GridData.GRAB_HORIZONTAL
| GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL
| GridData.VERTICAL_ALIGN_CENTER);
data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
label.setLayoutData(data);
label.setFont(parent.getFont());
namespaceText = new Text(composite, getInputTextStyle());
namespaceText.setText(namespace);
namespaceText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
| GridData.HORIZONTAL_ALIGN_FILL));
namespaceText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
validateInput();
}
});
namespaceErrorText = new Text(composite, SWT.READ_ONLY | SWT.WRAP);
namespaceErrorText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
| GridData.HORIZONTAL_ALIGN_FILL));
namespaceErrorText.setBackground(namespaceErrorText.getDisplay()
.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
}
return composite;
}
protected void validateInput() {
super.validateInput();
if (namespaceText!=null) {
String msg = null;
String ns = namespaceText.getText();
if (ns==null || ns.isEmpty())
msg = Messages.NamespacesEditingDialog_Invalid_Empty_Namespace;
try {
URI uri = URI.createURI(ns);
}
catch (Exception e) {
msg = Messages.NamespacesEditingDialog_Invalid_Namespace_URI;
}
namespaceErrorText.setText(msg == null ? "" : msg); //$NON-NLS-1$
Control button = getButton(IDialogConstants.OK_ID);
if (button != null) {
if (button.isEnabled())
button.setEnabled(msg == null);
}
}
}
@Override
protected void buttonPressed(int buttonId) {
if (buttonId == IDialogConstants.OK_ID) {
namespace = namespaceText.getText();
} else {
namespace = null;
}
super.buttonPressed(buttonId);
}
public String getPrefix() {
return getValue();
}
public String getNamespace() {
return namespace;
}
}