package org.teiid.designer.runtime.ui.connection.properties; import static org.teiid.designer.vdb.ui.VdbUiConstants.Images.RESTORE_DEFAULT_VALUE; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ColumnViewer; import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; 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.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Table; import org.eclipse.ui.ISharedImages; import org.teiid.core.designer.util.I18nUtil; import org.teiid.designer.core.translators.TranslatorOverrideProperty; import org.teiid.designer.runtime.ui.DqpUiConstants; import org.teiid.designer.runtime.ui.DqpUiPlugin; import org.teiid.designer.ui.common.UiPlugin; import org.teiid.designer.ui.common.util.WidgetFactory; import org.teiid.designer.ui.viewsupport.TranslatorOverridePropertyEditingSupport; import org.teiid.designer.ui.viewsupport.TranslatorPropertyLabelProvider; import org.teiid.designer.vdb.ui.VdbUiPlugin; public class EditTOPropertiesPanel { static final String PREFIX = I18nUtil.getPropertyPrefix(EditTOPropertiesPanel.class); private final TableViewer propertiesViewer; /** * @param parent * @param vdb */ public EditTOPropertiesPanel( Composite parent, final TranslatorOverride override ) { //ITeiidServer teiidServer, String translatorType, Properties overrideProperties) { Group mainPanel = WidgetFactory.createGroup(parent, DqpUiPlugin.UTIL.getString("EditTOPropertiesPanel.0_translatorProperties", override.getType().toUpperCase())); GridDataFactory.fillDefaults().grab(true, true).applyTo(mainPanel); { // right-side is an override description and table with the selected translator's properties Composite pnlOverrides = new Composite(mainPanel, SWT.FILL); pnlOverrides.setLayout(new GridLayout(2, false)); pnlOverrides.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); this.propertiesViewer = new TableViewer(pnlOverrides, (SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION | SWT.BORDER)); ColumnViewerToolTipSupport.enableFor(this.propertiesViewer); this.propertiesViewer.setContentProvider(new IStructuredContentProvider() { /** * {@inheritDoc} * * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ @Override public void dispose() { // nothing to do } /** * {@inheritDoc} * * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) */ @Override public Object[] getElements( Object inputElement ) { return override.getProperties(); } /** * {@inheritDoc} * * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, * java.lang.Object) */ @Override public void inputChanged( Viewer viewer, Object oldInput, Object newInput ) { // nothing to do } }); // sort the table rows by display name this.propertiesViewer.setComparator(new ViewerComparator() { /** * {@inheritDoc} * * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, * java.lang.Object) */ @Override public int compare( Viewer viewer, Object e1, Object e2 ) { TranslatorOverrideProperty prop1 = (TranslatorOverrideProperty)e1; TranslatorOverrideProperty prop2 = (TranslatorOverrideProperty)e2; return super.compare(viewer, prop1.getDefinition().getDisplayName(), prop2.getDefinition().getDisplayName()); } }); int visibleTableRows = 7; Table table = this.propertiesViewer.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.propertiesViewer, SWT.LEFT); column.getColumn().setText(DqpUiConstants.UTIL.getString(PREFIX + "propertyColumn.text")); //$NON-NLS-1$ column.setLabelProvider(new TranslatorPropertyLabelProvider(true)); // PropertyLabelProvider(false)); column.getColumn().setWidth(400); column = new TableViewerColumn(this.propertiesViewer, SWT.LEFT); column.getColumn().setText(DqpUiConstants.UTIL.getString(PREFIX + "valueColumn.text")); //$NON-NLS-1$ column.setLabelProvider(new TranslatorPropertyLabelProvider(false)); // PropertyLabelProvider(false)); column.setEditingSupport(new TOPropertyEditingSupport(this.propertiesViewer)); column.getColumn().setWidth(150); if( override.getProperties().length == 0 ) { ((GridData)table.getLayoutData()).heightHint = table.getItemHeight() * 4; } // // add note below the table // Composite toolbarPanel = WidgetFactory.createPanel(pnlOverrides, SWT.NONE, GridData.VERTICAL_ALIGN_BEGINNING, 1, 1); org.teiid.designer.ui.common.widget.Label noteLabel = WidgetFactory.createLabel(toolbarPanel, DqpUiConstants.UTIL.getString(PREFIX + "overridePropertiesNoteLabel")); //$NON-NLS-1$ noteLabel.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE)); GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER).applyTo(noteLabel); noteLabel.setToolTipText(DqpUiConstants.UTIL.getString(PREFIX + "overridePropertiesNoteTooltip")); //$NON-NLS-1$ } this.propertiesViewer.setInput(this); } private TranslatorOverrideProperty getSelectedProperty() { IStructuredSelection selection = (IStructuredSelection)this.propertiesViewer.getSelection(); if (selection.isEmpty()) { return null; } return (TranslatorOverrideProperty)selection.getFirstElement(); } void handleRestorePropertyDefaultValue() { assert (!this.propertiesViewer.getSelection().isEmpty()); TranslatorOverrideProperty prop = getSelectedProperty(); prop.setValue(null); // TODO this needs to dirty VDB this.propertiesViewer.refresh(prop); } /** * Public access to refresh the contents of this panel based on external changes to the translator override * properties */ public void refresh() { this.propertiesViewer.setInput(this); this.propertiesViewer.refresh(); } public boolean canFinish() { return true; // TODO: CALCULATE THIS!!! } class PropertyLabelProvider extends ColumnLabelProvider { private final boolean nameColumn; public PropertyLabelProvider( boolean nameColumn ) { this.nameColumn = nameColumn; } /**EditTranslatorOverrideDialog * {@inheritDoc} * * @see org.eclipse.jface.viewers.ColumnLabelProvider#getImage(java.lang.Object) */ @Override public Image getImage( Object element ) { TranslatorOverrideProperty property = (TranslatorOverrideProperty)element; String overridenValue = property.getOverriddenValue(); Image image = null; if (!this.nameColumn) { if (property.getDefinition().isValidValue(overridenValue) == null) { if (property.hasOverridenValue()) { if (!property.isCustom() || !property.getDefinition().getDefaultValue().equals(overridenValue)) { image = VdbUiPlugin.singleton.getImage(RESTORE_DEFAULT_VALUE); } } } else { image = UiPlugin.getDefault().getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK); } } return image; } /** * {@inheritDoc} * * @see org.eclipse.jface.viewers.ColumnLabelProvider#getText(java.lang.Object) */ @Override public String getText( Object element ) { TranslatorOverrideProperty property = (TranslatorOverrideProperty)element; if (this.nameColumn) { return property.getDefinition().getDisplayName(); } boolean masked = property.getDefinition().isMasked(); final String maskedValue = "*****"; //$NON-NLS-1$ // return override value if it exists if (property.hasOverridenValue()) { return (masked ? maskedValue : property.getOverriddenValue()); } // return default value return (masked ? maskedValue : property.getDefinition().getDefaultValue()); } /** * {@inheritDoc} * * @see org.eclipse.jface.viewers.CellLabelProvider#getToolTipText(java.lang.Object) */ @Override public String getToolTipText( Object element ) { TranslatorOverrideProperty property = (TranslatorOverrideProperty)element; if (this.nameColumn) { return property.getDefinition().getDescription(); } if (property.hasOverridenValue()) { if (!property.isCustom() || !property.getDefinition().getDefaultValue().equals(property.getOverriddenValue())) { return property.getDefinition().isValidValue(property.getOverriddenValue()); } } // default value is being used return "<USING DEFAULT PROPERTY VALUE>"; //Util.getString(TranslatorOverridesPanel.PREFIX + "usingPropertyDefaultValue"); //$NON-NLS-1$ } } class TOPropertyEditingSupport extends TranslatorOverridePropertyEditingSupport { public TOPropertyEditingSupport(ColumnViewer viewer) { super(viewer, null); // TODO Auto-generated constructor stub } @Override protected boolean canEdit(Object element) { // TODO Auto-generated method stub return true; } } }