/* * 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.webservice.ui.wizard; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ViewForm; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.core.designer.util.I18nUtil; import org.teiid.designer.ui.common.util.WidgetFactory; import org.teiid.designer.ui.common.widget.Dialog; import org.teiid.designer.webservice.IWebServiceModelBuilder; import org.teiid.designer.webservice.IWebServiceResource; import org.teiid.designer.webservice.ui.IInternalUiConstants; import org.teiid.designer.webservice.ui.util.WebServiceUiUtil; /** * The <code>ShowDependenciesDialog</code> shows a table identifying for each file their dependencies. * * @since 8.0 */ public final class ShowDependenciesDialog extends Dialog implements IInternalUiConstants { /** Properties key prefix. */ static final String PREFIX = I18nUtil.getPropertyPrefix(ShowDependenciesDialog.class); /** Column headers for the table. */ private static final String[] TBL_HDRS; /** Index of the referencer column in the table. */ static final int NAMESPACE_COLUMN; /** Index of the references column in the table. */ static final int USES_COLUMN; /** Setup for constants used in creating and referencing the table. */ static { // set column indexes NAMESPACE_COLUMN = 0; USES_COLUMN = 1; // set column headers TBL_HDRS = new String[2]; TBL_HDRS[NAMESPACE_COLUMN] = getString("tableColumn.namespace"); //$NON-NLS-1$ TBL_HDRS[USES_COLUMN] = getString("tableColumn.uses"); //$NON-NLS-1$ } /** The model builder. */ private IWebServiceModelBuilder builder; /** * Constructs a <code>ShowDependenciesDialog</code>. * * @param theShell the dialog's parent * @param theBuilder the model builder */ public ShowDependenciesDialog( Shell theShell, IWebServiceModelBuilder theBuilder ) { super(theShell, getString("title")); //$NON-NLS-1$ setDefaultImage(WebServiceUiUtil.getImage(Images.SHOW_DEPENDENCIES)); setCenterOnDisplay(true); this.builder = theBuilder; } /** * Overriden so that the cancel button is not displayed. * * @see org.eclipse.jface.dialogs.Dialog#createButton(org.eclipse.swt.widgets.Composite, int, java.lang.String, boolean) * @since 4.2 */ @Override protected Button createButton( Composite theParent, int theId, String theLabel, boolean theDefaultButton ) { // don't include the cancel button return (theId == IDialogConstants.CANCEL_ID) ? null : super.createButton(theParent, theId, theLabel, theDefaultButton); } /** * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) * @since 4.2 */ @Override protected Control createDialogArea( Composite theParent ) { ViewForm viewForm = WidgetFactory.createViewForm(theParent, SWT.BORDER, GridData.FILL_BOTH, 1); viewForm.setTopLeft(WidgetFactory.createLabel(viewForm, getString("label.tableViewForm"))); //$NON-NLS-1$ Composite pnl = WidgetFactory.createPanel(viewForm); viewForm.setContent(pnl); int style = SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION; TableViewer viewer = WidgetFactory.createTableViewer(pnl, style); viewer.setContentProvider(new TableContentProvider()); viewer.setLabelProvider(new TableLabelProvider()); Table tbl = viewer.getTable(); tbl.setHeaderVisible(true); tbl.setLinesVisible(true); // create columns for (int i = 0; i < TBL_HDRS.length; i++) { TableColumn col = new TableColumn(tbl, SWT.LEFT); col.setText(TBL_HDRS[i]); } // populate the table viewer.setInput(this.builder); // pack columns for (int i = 0; i < TBL_HDRS.length; i++) { viewer.getTable().getColumn(i).pack(); } return viewForm.getContent(); } /** * Convenience method to access model builder from inside inner classes. * * @return the model builder * @since 4.2 */ IWebServiceModelBuilder getBuilder() { return this.builder; } /** * Convenience method to retrieve localized text. * * @param theKey the properties key whose localized value is being requested * @return the localized value * @since 4.2 */ private static String getString( String theKey ) { return UTIL.getString(new StringBuffer().append(PREFIX).append(theKey).toString()); } /** The table content provider. */ class TableContentProvider implements IStructuredContentProvider { /** * @see org.eclipse.jface.viewers.IContentProvider#dispose() * @since 4.1 */ @Override public void dispose() { } /** * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) * @since 4.1 */ @Override public Object[] getElements( Object theInputElement ) { List result = new ArrayList(); IWebServiceModelBuilder builder = getBuilder(); Iterator itr = builder.getResources().iterator(); while (itr.hasNext()) { IWebServiceResource resource = (IWebServiceResource)itr.next(); Collection references = resource.getReferencedResources(); if ((references != null) && !references.isEmpty()) { Iterator itrRefs = references.iterator(); while (itrRefs.hasNext()) { result.add(new TableRow(resource, (IWebServiceResource)itrRefs.next())); } } } return result.toArray(); } /** * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, * java.lang.Object) * @since 4.1 */ @Override public void inputChanged( Viewer theViewer, Object theOldInput, Object theNewInput ) { } } class TableLabelProvider extends LabelProvider implements ITableLabelProvider { /** * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int) * @since 4.1 */ @Override public Image getColumnImage( Object theElement, int theIndex ) { Image result = null; if (theElement instanceof TableRow) { TableRow row = (TableRow)theElement; if (theIndex == NAMESPACE_COLUMN) { if (!row.namespace.isResolved()) { result = WebServiceUiUtil.getStatusImage(row.namespace.getStatus()); } } else if (theIndex == USES_COLUMN) { if (!row.uses.isResolved()) { result = WebServiceUiUtil.getStatusImage(row.uses.getStatus()); } } else { // should not happen CoreArgCheck.isTrue(false, UTIL.getString(PREFIX + "msg.unknownTableColumn", //$NON-NLS-1$ new Object[] {Integer.toString(theIndex)})); } } else { // should not happen CoreArgCheck.isTrue(false, UTIL.getString(PREFIX + "msg.unknownObjectType", //$NON-NLS-1$ new Object[] {theElement.getClass().getName()})); } return result; } /** * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int) * @since 4.1 */ @Override public String getColumnText( Object theElement, int theIndex ) { String result = null; if (theElement instanceof TableRow) { if (theIndex == NAMESPACE_COLUMN) { result = WebServiceUiUtil.getText(((TableRow)theElement).namespace); } else if (theIndex == USES_COLUMN) { result = WebServiceUiUtil.getText(((TableRow)theElement).uses); } else { // should not happen CoreArgCheck.isTrue(false, UTIL.getString(PREFIX + "msg.unknownTableColumn", //$NON-NLS-1$ new Object[] {Integer.toString(theIndex)})); } } else { // should not happen CoreArgCheck.isTrue(false, UTIL.getString(PREFIX + "msg.unknownObjectType", //$NON-NLS-1$ new Object[] {theElement.getClass().getName()})); } return result; } } /** * The <code>TableRow</code> class is used for the table row model object. * * @since 4.2 */ private class TableRow { // // FIELDS // public IWebServiceResource namespace; public IWebServiceResource uses; // // CONSTRUCTORS // public TableRow( IWebServiceResource theNamespace, IWebServiceResource theUses ) { this.namespace = theNamespace; this.uses = theUses; } } }