/*
* 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.transformation.ui.wizards.xmlfile.panels;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
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.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.teiid.core.designer.util.StringUtilities;
import org.teiid.designer.query.proc.ITeiidXmlColumnInfo;
import org.teiid.designer.transformation.ui.Messages;
import org.teiid.designer.transformation.ui.wizards.EditColumnDialog;
import org.teiid.designer.transformation.ui.wizards.xmlfile.TeiidXmlColumnInfo;
import org.teiid.designer.transformation.ui.wizards.xmlfile.TeiidXmlFileInfo;
import org.teiid.designer.transformation.ui.wizards.xmlfile.TeiidXmlImportXmlConfigurationPage;
import org.teiid.designer.ui.common.util.WidgetFactory;
/**
* @since 8.0
*/
public class ColumnsInfoPanel {
private Button addButton, deleteButton, upButton, downButton, editButton;
private Text rootPathText;
TreeViewer schemaTreeViewer;
EditColumnsPanel editColumnsPanel;
final TeiidXmlImportXmlConfigurationPage configPage;
boolean refreshing = false;
public ColumnsInfoPanel(Composite parent,
TeiidXmlImportXmlConfigurationPage configPage) {
super();
this.configPage = configPage;
init(parent);
}
public TeiidXmlFileInfo getFileInfo() {
return this.configPage.getFileInfo();
}
public void refresh() {
refreshing = true;
this.editColumnsPanel.refresh();
this.rootPathText.setText(this.getFileInfo().getRootPath());
refreshing = false;
}
public Text getRootPathText() {
return rootPathText;
}
private void init(final Composite parent) {
Group columnInfoGroup = WidgetFactory.createGroup(parent, Messages.ColumnInfo, SWT.NONE, 1, 2);
Label prefixLabel = new Label(columnInfoGroup, SWT.NONE);
prefixLabel.setText(Messages.RootPath);
prefixLabel.setToolTipText(Messages.RootPathTooltip);
rootPathText = WidgetFactory.createTextField(columnInfoGroup, SWT.NONE);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.minimumWidth = 50;
gd.horizontalSpan = 1;
gd.grabExcessHorizontalSpace = true;
rootPathText.setLayoutData(gd);
rootPathText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(final ModifyEvent event) {
handleRootPathChanged();
}
});
rootPathText.setToolTipText(Messages.RootPathTooltip);
Composite leftToolbarPanel = new Composite(columnInfoGroup, SWT.NONE);
GridLayout tbGL = new GridLayout();
tbGL.marginHeight = 0;
tbGL.marginWidth = 0;
tbGL.verticalSpacing = 2;
leftToolbarPanel.setLayout(tbGL);
GridData ltpGD = new GridData(GridData.FILL_VERTICAL);
ltpGD.heightHint = 120;
leftToolbarPanel.setLayoutData(ltpGD);
addButton = new Button(leftToolbarPanel, SWT.PUSH);
addButton.setText(Messages.addLabel);
addButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
addButton.setEnabled(true);
addButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
configPage.createColumn();
editColumnsPanel.refresh();
notifyColumnDataChanged();
}
});
deleteButton = new Button(leftToolbarPanel, SWT.PUSH);
deleteButton.setText(Messages.deleteLabel);
deleteButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
deleteButton.setEnabled(false);
deleteButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
ITeiidXmlColumnInfo info = editColumnsPanel.getSelectedColumn();
if( info != null ) {
getFileInfo().removeColumn(info);
deleteButton.setEnabled(false);
editColumnsPanel.selectRow(-1);
notifyColumnDataChanged();
}
}
});
editButton = new Button(leftToolbarPanel, SWT.PUSH);
editButton.setText(Messages.Edit);
editButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
editButton.setEnabled(false);
editButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
ITeiidXmlColumnInfo info = editColumnsPanel.getSelectedColumn();
if( info != null ) {
EditColumnDialog dialog = new EditColumnDialog(parent.getShell(), editColumnsPanel.getSelectedColumn());
dialog.open();
}else{
}
editButton.setEnabled(true);
editColumnsPanel.refresh();
notifyColumnDataChanged();
}
});
upButton = new Button(leftToolbarPanel, SWT.PUSH);
upButton.setText(Messages.moveUpLabel);
upButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
upButton.setEnabled(false);
upButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
TeiidXmlColumnInfo info = editColumnsPanel.getSelectedColumn();
if (info != null) {
int selectedIndex = editColumnsPanel.getSelectedIndex();
getFileInfo().moveColumnUp(info);
downButton.setEnabled(getFileInfo().canMoveDown(info));
upButton.setEnabled(getFileInfo().canMoveUp(info));
editColumnsPanel.refresh();
notifyColumnDataChanged();
editColumnsPanel.selectRow(selectedIndex - 1);
}
}
});
downButton = new Button(leftToolbarPanel, SWT.PUSH);
downButton.setText(Messages.moveDownLabel);
downButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
downButton.setEnabled(false);
downButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
TeiidXmlColumnInfo info = editColumnsPanel.getSelectedColumn();
if (info != null) {
int selectedIndex = editColumnsPanel.getSelectedIndex();
getFileInfo().moveColumnDown(info);
downButton.setEnabled(getFileInfo().canMoveDown(info));
upButton.setEnabled(getFileInfo().canMoveUp(info));
editColumnsPanel.refresh();
notifyColumnDataChanged();
editColumnsPanel.selectRow(selectedIndex + 1);
}
}
});
editColumnsPanel = new EditColumnsPanel(columnInfoGroup, this.configPage);
editColumnsPanel.addSelectionListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection sel = (IStructuredSelection)event.getSelection();
if( sel.isEmpty()) {
deleteButton.setEnabled(false);
editButton.setEnabled(false);
upButton.setEnabled(false);
downButton.setEnabled(false);
} else {
boolean enable = true;
Object[] objs = sel.toArray();
ITeiidXmlColumnInfo columnInfo = null;
for( Object obj : objs) {
if( !(obj instanceof ITeiidXmlColumnInfo)) {
enable = false;
break;
} else {
columnInfo = (ITeiidXmlColumnInfo)obj;
}
}
if( objs.length == 0 ) {
enable = false;
}
deleteButton.setEnabled(enable);
editButton.setEnabled(true);
if( enable ) {
upButton.setEnabled(getFileInfo().canMoveUp(columnInfo));
downButton.setEnabled(getFileInfo().canMoveDown(columnInfo));
}
}
}
});
}
private void handleRootPathChanged() {
String currentRootPath = this.getFileInfo().getRootPath();
if( !StringUtilities.equals(currentRootPath, this.rootPathText.getText())) {
this.getFileInfo().setRootPath(this.rootPathText.getText());
}
}
private void notifyColumnDataChanged() {
if (!refreshing) {
this.configPage.handleInfoChanged(false);
}
}
public void disableButtons() {
deleteButton.setEnabled(false);
editButton.setEnabled(false);
upButton.setEnabled(false);
downButton.setEnabled(false);
}
public void setEnabled(boolean enable) {
addButton.setEnabled(enable);
disableButtons();
rootPathText.setEnabled(enable);
refresh();
//editColumnsPanel.setEnabled(enable);
}
public void notifySelection(boolean selected) {
addButton.setEnabled(selected);
}
}