/*
* 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.vdb.ui.editor;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
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.Group;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.teiid.core.designer.util.I18nUtil;
import org.teiid.designer.ui.common.table.ComboBoxEditingSupport;
import org.teiid.designer.ui.common.util.WidgetFactory;
import org.teiid.designer.ui.common.widget.Dialog;
import org.teiid.designer.vdb.Vdb;
import org.teiid.designer.vdb.VdbImportVdbEntry;
import org.teiid.designer.vdb.ui.VdbUiConstants;
import org.teiid.designer.vdb.ui.VdbUiPlugin;
/**
* @since 8.0
*
*/
public class ShowImportVdbsDialog extends Dialog {
private static final String I18N_PREFIX = I18nUtil.getPropertyPrefix(ShowImportVdbsDialog.class);
private static final String TITLE =getString("title"); //$NON-NLS-1$
private static final String EMPTY_STRING = ""; //$NON-NLS-1$
static String[] TRUE_FALSE_ARRAY = {"true", "false"}; //$NON-NLS-1$ //$NON-NLS-2$
private static String getString(final String id) {
return VdbUiConstants.Util.getString(I18N_PREFIX + id);
}
private Vdb vdb;
TableViewer importVdbViewer;
/**
*
* @param parent
* @param vdb the VDB
*/
public ShowImportVdbsDialog( Shell parent, Vdb vdb) {
super(parent, TITLE);
this.vdb = vdb;
}
/**
* @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createDialogArea( Composite parent ) {
Composite mainPanel = (Composite)super.createDialogArea(parent);
GridLayout gridLayout = new GridLayout();
mainPanel.setLayout(gridLayout);
gridLayout.numColumns = 1;
Group theGroup = WidgetFactory.createGroup(mainPanel, getString("vdbNames"), SWT.NONE, 1, 4); //$NON-NLS-1$
GridData groupGD = new GridData(GridData.FILL_BOTH);
groupGD.heightHint = 160;
groupGD.widthHint = 400;
theGroup.setLayoutData(groupGD);
this.importVdbViewer = new TableViewer(theGroup, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
GridData data = new GridData(GridData.FILL_BOTH);
data.horizontalSpan=4;
this.importVdbViewer.getControl().setLayoutData(data);
int visibleTableRows = 4;
Table table = this.importVdbViewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
((GridData)table.getLayoutData()).horizontalSpan = 2;
((GridData)table.getLayoutData()).heightHint = table.getItemHeight() * visibleTableRows;
// create columns
TableViewerColumn column = new TableViewerColumn(this.importVdbViewer, SWT.LEFT);
column.getColumn().setText(getString("name")); //$NON-NLS-1$
column.setLabelProvider(new ImportVdbLabelProvider(0));
column.getColumn().setWidth(200);
column = new TableViewerColumn(this.importVdbViewer, SWT.LEFT);
column.getColumn().setText(getString("version")); //$NON-NLS-1$
column.setLabelProvider(new ImportVdbLabelProvider(1));
column.setEditingSupport(new VdbVersionEditingSupport(importVdbViewer));
column.getColumn().setWidth(60);
column = new TableViewerColumn(this.importVdbViewer, SWT.LEFT);
column.getColumn().setText(getString("importDataPolicies")); //$NON-NLS-1$
column.setLabelProvider(new ImportVdbLabelProvider(2));
column.setEditingSupport(new ImportDataPoliciesEditingSupport(importVdbViewer));
column.getColumn().setWidth(60);
if( this.vdb != null ) {
for( VdbImportVdbEntry row : this.vdb.getImports() ) {
if( row != null ) {
this.importVdbViewer.add(row);
}
}
}
return mainPanel;
}
class ImportVdbLabelProvider extends ColumnLabelProvider {
private final int columnNumber;
public ImportVdbLabelProvider(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 VdbImportVdbEntry ) {
switch (this.columnNumber) {
case 0: {
return ((VdbImportVdbEntry)element).getName();
}
case 1: {
return ((VdbImportVdbEntry)element).getVersion();
}
case 2: {
return Boolean.toString(((VdbImportVdbEntry)element).isImportDataPolicies());
}
}
}
return EMPTY_STRING;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.jface.viewers.CellLabelProvider#getToolTipText(java.lang.Object)
*/
@Override
public String getToolTipText(Object element) {
return "unknown tooltip"; //$NON-NLS-1$
}
@Override
public Image getImage(Object element) {
if( element instanceof VdbImportVdbEntry) {
switch (this.columnNumber) {
case 0: {
return VdbUiPlugin.singleton.getImage(VdbUiConstants.Images.VDB_ICON);
}
case 1: {
return null;
}
}
return null;
}
return null;
}
}
class VdbVersionEditingSupport extends EditingSupport {
private TextCellEditor editor;
/**
* Create a new instance of the receiver.
*
* @param viewer the column viewer
*/
public VdbVersionEditingSupport(ColumnViewer viewer) {
super(viewer);
this.editor = new TextCellEditor((Composite) viewer.getControl());
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.EditingSupport#canEdit(java.lang.Object)
*/
@Override
protected boolean canEdit(Object element) {
return true;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.EditingSupport#getCellEditor(java.lang.Object)
*/
@Override
protected CellEditor getCellEditor(Object element) {
return editor;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.EditingSupport#getValue(java.lang.Object)
*/
@Override
protected Object getValue(Object element) {
if( element instanceof VdbImportVdbEntry ) {
return ((VdbImportVdbEntry)element).getVersion();
}
return 0;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.EditingSupport#setValue(java.lang.Object,
* java.lang.Object)
*/
@Override
protected void setValue(Object element, Object value) {
if( element instanceof VdbImportVdbEntry ) {
String oldValue = ((VdbImportVdbEntry)element).getVersion();
String newValue = oldValue;
newValue = (String)value;
if( !newValue.equals(oldValue) ) {
((VdbImportVdbEntry)element).setVersion(newValue);
importVdbViewer.refresh(element);
}
}
}
}
class ImportDataPoliciesEditingSupport extends ComboBoxEditingSupport {
public ImportDataPoliciesEditingSupport(ColumnViewer viewer) {
super(viewer);
}
@Override
protected String getElementValue( Object element ) {
return Boolean.toString(((VdbImportVdbEntry)element).isImportDataPolicies());
}
@Override
protected String[] refreshItems( Object element ) {
return TRUE_FALSE_ARRAY;
}
@Override
protected void setElementValue(Object element, String newValue) {
if( element instanceof VdbImportVdbEntry) {
VdbImportVdbEntry info = (VdbImportVdbEntry)element;
if(info.isImportDataPolicies() ) {
info.setImportDataPolicies(false);
importVdbViewer.refresh(element);
} else {
info.setImportDataPolicies(true);
importVdbViewer.refresh(element);
}
}
}
}
}