/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.viewers.ColumnLabelProvider;
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.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.teiid.core.designer.ModelerCoreException;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.core.types.DatatypeManager;
import org.teiid.designer.modelgenerator.wsdl.ui.Messages;
import org.teiid.designer.transformation.ui.UiConstants;
import org.teiid.designer.transformation.ui.UiPlugin;
import org.teiid.designer.type.IDataTypeManagerService;
import org.teiid.designer.ui.common.util.WidgetFactory;
/**
*
*/
public class EditColumnDialog extends TitleAreaDialog {
private static final String EMPTY_STRING = ""; //$NON-NLS-1$
// =============================================================
// Instance variables
// =============================================================
ColumnInfo columnInfo;
// =============================================================
// Constructors
// =============================================================
/**
*
* @param parent
* the parent shell
* @param columnInfo
* the columnInfo table object
*/
public EditColumnDialog(Shell parent, ColumnInfo columnInfo) {
super(parent);
this.columnInfo = columnInfo;
}
@Override
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText(Messages.EditColumnTitle);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.window.Window#setShellStyle(int)
*/
@Override
protected void setShellStyle(int newShellStyle) {
super.setShellStyle(newShellStyle | SWT.RESIZE | SWT.MAX);
}
// =============================================================
// Instance methods
// =============================================================
@Override
protected Control createDialogArea(Composite parent) {
setTitle(Messages.EditColumnTitle);
setMessage(NLS.bind(Messages.EditingColumnInformation, columnInfo.getName()), IMessageProvider.INFORMATION);
Composite dialogComposite = (Composite) super.createDialogArea(parent);
Composite composite = WidgetFactory.createPanel(dialogComposite);
// ------------------------------
// Set layout for the Composite
// ------------------------------
GridLayout gridLayout = new GridLayout();
composite.setLayout(gridLayout);
gridLayout.numColumns = 2;
GridData gridData = new GridData(GridData.FILL_BOTH);
gridData.grabExcessHorizontalSpace = true;
gridData.widthHint = 500;
composite.setLayoutData(gridData);
GridData gd = new GridData();
gd.grabExcessHorizontalSpace = true;
gd.horizontalAlignment = GridData.FILL;
// ------------------------------
// Column Name
// ------------------------------
Label label = new Label(composite, SWT.NONE | SWT.SINGLE);
label.setText(Messages.Name);
label.setLayoutData(new GridData());
final Text columnNameText = new Text(composite, SWT.BORDER | SWT.NONE);
columnNameText.setText(columnInfo.getName());
columnNameText.setForeground(Display.getCurrent().getSystemColor(
SWT.COLOR_DARK_BLUE));
columnNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
columnNameText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(final ModifyEvent event) {
String value = columnNameText.getText();
if (value == null) {
value = EMPTY_STRING;
}
columnInfo.setName(value);
validate();
}
});
// ------------------------------
// Default value
// ------------------------------
Label label1 = new Label(composite, SWT.NONE | SWT.SINGLE);
label1.setText(Messages.DefaultValue);
label1.setLayoutData(new GridData());
final Text defaultValueText = new Text(composite, SWT.BORDER | SWT.NONE);
defaultValueText.setText(columnInfo.getDefaultValue());
defaultValueText.setForeground(Display.getCurrent().getSystemColor(
SWT.COLOR_DARK_BLUE));
defaultValueText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
defaultValueText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(final ModifyEvent event) {
String value = defaultValueText.getText();
if (value == null) {
value = EMPTY_STRING;
}
columnInfo.setDefaultValue(value);
validate();
}
});
// ------------------------------
// Path
// ------------------------------
Label pathLabel = new Label(composite, SWT.NONE | SWT.SINGLE);
pathLabel.setText(Messages.Path);
pathLabel.setLayoutData(new GridData());
final Text pathText = new Text(composite, SWT.BORDER | SWT.NONE);
pathText.setText(columnInfo.getRelativePath());
pathText.setForeground(Display.getCurrent().getSystemColor(
SWT.COLOR_DARK_BLUE));
pathText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
pathText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(final ModifyEvent event) {
String value = pathText.getText();
if (value == null) {
value = EMPTY_STRING;
}
columnInfo.setRelativePath(value);
validate();
}
});
// ------------------------------
// Data type dropdown
// ------------------------------
Label datatype = new Label(composite, SWT.BORDER | SWT.NONE);
datatype.setText(Messages.DataType);
datatype.setLayoutData(new GridData());
final Combo datatypeCombo = new Combo(composite,
SWT.NONE);
datatypeCombo.setForeground(Display.getCurrent().getSystemColor(
SWT.COLOR_DARK_BLUE));
datatypeCombo.setLayoutData(new GridData(SWT.LEFT, SWT.LEFT, true, true));
IDataTypeManagerService service = ModelerCore.getTeiidDataTypeManagerService();
Set<String> unsortedDatatypes = service.getAllDataTypeNames();
Collection<String> dTypes = new ArrayList<String>();
String[] sortedStrings = unsortedDatatypes.toArray(new String[unsortedDatatypes.size()]);
Arrays.sort(sortedStrings);
for( String dType : sortedStrings ) {
if (dType.equals(ColumnInfo.INTEGER_DATATYPE)){
//skip
}else{
dTypes.add(dType);
}
}
String[] datatypes = dTypes.toArray(new String[dTypes.size()]);
datatypeCombo.setItems(datatypes);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(datatypeCombo);
datatypeCombo.setText(columnInfo.getDatatype());
datatypeCombo.redraw();
datatypeCombo.addModifyListener(new ModifyListener() {
@Override
public void modifyText(final ModifyEvent event) {
columnInfo.setDatatype(datatypeCombo.getText());
validate();
}
});
// ------------------------------
// Ordinality checkbox
// ------------------------------
Label ordinality = new Label(composite, SWT.BORDER | SWT.NONE);
ordinality.setText(Messages.Ordinality);
ordinality.setLayoutData(new GridData());
final Button ordinalityCb = new Button(composite, SWT.CHECK | SWT.LEFT);
ordinalityCb.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
ordinalityCb.setSelection(columnInfo.getOrdinality());
ordinalityCb.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(final SelectionEvent event) {
columnInfo.setOrdinality(ordinalityCb.getSelection());
}
});
return composite;
}
private void validate() {
boolean enable = true;
getButton(IDialogConstants.OK_ID).setEnabled(enable);
}
@Override
public void create() {
super.create();
getButton(IDialogConstants.OK_ID).setEnabled(true);
}
@Override
protected void okPressed() {
super.okPressed();
}
// class DatatypeCombo extends Combo {
//
// private String[] datatypes;
//
// protected void checkSubclass() {
// }
//
// public DatatypeCombo(Composite parent, int style) {
// super(parent, style);
// IDataTypeManagerService service = ModelerCore
// .getTeiidDataTypeManagerService();
// Set<String> unsortedDatatypes = service.getAllDataTypeNames();
// Collection<String> dTypes = new ArrayList<String>();
//
// String[] sortedStrings = unsortedDatatypes
// .toArray(new String[unsortedDatatypes.size()]);
// Arrays.sort(sortedStrings);
// for (String dType : sortedStrings) {
// dTypes.add(dType);
// }
//
// datatypes = dTypes.toArray(new String[dTypes.size()]);
// this.setItems(datatypes);
// }
//
// protected String getElementValue(Object element) {
// return ((ITeiidXmlColumnInfo) element).getDatatype();
// }
//
// protected String[] refreshItems(Object element) {
// return datatypes;
// }
//
// protected void setElementValue(Object element, String newValue) {
// if (!((ITeiidXmlColumnInfo) element).getOrdinality()) {
// ((TeiidXmlColumnInfo) element).setDatatype(newValue);
// }
// }
// }
class ColumnDataLabelProvider extends ColumnLabelProvider {
private final int columnNumber;
public ColumnDataLabelProvider(int columnNumber) {
this.columnNumber = columnNumber;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.jface.viewers.ColumnLabelProvider#getText(java.lang.Object)
*/
@Override
public String getText(Object element) {
if (element instanceof ColumnInfo) {
switch (this.columnNumber) {
case 0: {
return ((ColumnInfo) element).getName();
}
case 1: {
return Boolean.toString(((ColumnInfo) element)
.getOrdinality());
}
case 2: {
return ((ColumnInfo) element).getDatatype();
}
case 3: {
return (((ColumnInfo) element).getRelativePath());
}
}
}
return EMPTY_STRING;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.jface.viewers.CellLabelProvider#getToolTipText(java.lang.Object)
*/
@Override
public String getToolTipText(Object element) {
switch (this.columnNumber) {
case 0: {
return "Tooltip 1"; //getString("columnNameColumnTooltip"); //$NON-NLS-1$
}
case 1: {
return "Tooltip 2"; //getString("datatypeColumnTooltip"); //$NON-NLS-1$
}
}
return "unknown tooltip"; //$NON-NLS-1$
}
@Override
public Image getImage(Object element) {
if (this.columnNumber == 0) {
return UiPlugin.getDefault().getImage(
UiConstants.Images.COLUMN_ICON);
}
return null;
}
}
}