/* * 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.panels; import org.eclipse.jface.dialogs.MessageDialog; 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.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.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.Shell; import org.eclipse.swt.widgets.Text; import org.teiid.core.designer.util.StringConstants; import org.teiid.designer.modelgenerator.wsdl.ui.Messages; import org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap.ColumnInfo; import org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap.EditColumnDialog; import org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap.OperationsDetailsPage; import org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap.ProcedureInfo; import org.teiid.designer.ui.common.util.WidgetFactory; import org.teiid.designer.ui.common.viewsupport.UiBusyIndicator; /** * @since 8.0 */ public class ColumnsInfoPanel { private ProcedureInfo procedureInfo; private Button addButton, deleteButton, upButton, downButton, editButton; private Text rootPathText; private Shell shell; TreeViewer schemaTreeViewer; EditColumnsPanel editColumnsPanel; private int type = -1; final OperationsDetailsPage detailsPage; boolean initializing = false; public ColumnsInfoPanel(Composite parent, int style, int type, OperationsDetailsPage detailsPage) { super(); this.type = type; this.detailsPage = detailsPage; this.shell = parent.getShell(); init(parent); } public ProcedureInfo getProcedureInfo() { return this.procedureInfo; } public void setProcedureInfo(ProcedureInfo info) { initializing = true; this.procedureInfo = info; editColumnsPanel.setProcedureInfo(info); editColumnsPanel.refresh(); this.addButton.setEnabled(info != null); String rootPath = StringConstants.EMPTY_STRING; if( this.getProcedureInfo().getRootPath() != null ) { rootPath = this.getProcedureInfo().getRootPath(); } this.rootPathText.setText(rootPath); initializing = false; } public void refresh() { this.editColumnsPanel.refresh(); } public Shell getShell() { return shell; } public void setShell(Shell shell) { this.shell = shell; } public Text getRootPathText() { return rootPathText; } private void init(Composite parent) { Group columnInfoGroup = WidgetFactory.createGroup(parent, Messages.ColumnInfo, SWT.NONE, 3, 3); GridData gd = new GridData(GridData.FILL_BOTH); gd.horizontalSpan = 3; gd.grabExcessVerticalSpace=true; columnInfoGroup.setLayoutData(gd); Label prefixLabel = new Label(columnInfoGroup, SWT.NONE); prefixLabel.setText(Messages.RootPath); rootPathText = WidgetFactory.createTextField(columnInfoGroup, SWT.NONE); gd = new GridData(GridData.FILL_HORIZONTAL); gd.minimumWidth = 50; gd.horizontalSpan=3; gd.grabExcessHorizontalSpace = true; rootPathText.setLayoutData(gd); rootPathText.addModifyListener(new ModifyListener() { @Override public void modifyText(final ModifyEvent event) { notifyColumnDataChanged(); } }); Composite leftToolbarPanel = new Composite(columnInfoGroup, SWT.NONE); GridLayout tbGL = new GridLayout(); tbGL.numColumns = 1; 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.Add); addButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); addButton.setEnabled(false); addButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { UiBusyIndicator.showWhile(addButton.getDisplay(), new Runnable() { @Override public void run() { String[] names = null; try { /* * Stop the rootPathText modify listener * from firing since it is notifying the * panels to refresh which is done anyway. */ initializing = true; names = detailsPage .createResponseColumn(type); } finally { initializing = false; } if (names == null || names.length == 0) { return; } boolean ok = MessageDialog.openQuestion( detailsPage.getShell(), Messages.InvalidSelectedSchemaObject, NLS.bind( Messages.InvalidSelectedSchemaObject_column_msg, names)); if (!ok) { return; } if (type == ProcedureInfo.TYPE_BODY) { for( String name : names) { detailsPage .getProcedureGenerator() .getResponseInfo() .addBodyColumn( name, false, ColumnInfo.DEFAULT_DATATYPE, null, null, null); } } else { for( String name : names) { detailsPage .getProcedureGenerator() .getResponseInfo() .addHeaderColumn( name, false, ColumnInfo.DEFAULT_DATATYPE, null, null, null); } } editColumnsPanel.refresh(); notifyColumnDataChanged(); } }); } }); deleteButton = new Button(leftToolbarPanel, SWT.PUSH); deleteButton.setText(Messages.Delete); deleteButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); deleteButton.setEnabled(false); deleteButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { ColumnInfo info = editColumnsPanel.getSelectedColumn(); if( info != null ) { if( type == ProcedureInfo.TYPE_BODY ) { detailsPage.getProcedureGenerator().getResponseInfo().removeBodyColumn(info); } else { detailsPage.getProcedureGenerator().getResponseInfo().removeHeaderColumn(info); } deleteButton.setEnabled(false); editColumnsPanel.selectRow(-1); editColumnsPanel.refresh(); 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) { ColumnInfo info = editColumnsPanel.getSelectedColumn(); if( info != null ) { EditColumnDialog dialog = new EditColumnDialog(getShell(), editColumnsPanel.getSelectedColumn()); dialog.open(); }else{ } editButton.setEnabled(true); editColumnsPanel.refresh(); notifyColumnDataChanged(); } }); upButton = new Button(leftToolbarPanel, SWT.PUSH); upButton.setText(Messages.Up); upButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); upButton.setEnabled(false); upButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { ColumnInfo info = editColumnsPanel.getSelectedColumn(); if( info != null ) { int selectedIndex = editColumnsPanel.getSelectedIndex(); if( type == ProcedureInfo.TYPE_BODY ) { detailsPage.getProcedureGenerator().getResponseInfo().moveBodyColumnUp(info); downButton.setEnabled(detailsPage.getProcedureGenerator().getResponseInfo().canMoveBodyColumnDown(info)); upButton.setEnabled(detailsPage.getProcedureGenerator().getResponseInfo().canMoveBodyColumnUp(info)); } else { detailsPage.getProcedureGenerator().getResponseInfo().moveHeaderColumnUp(info); downButton.setEnabled(detailsPage.getProcedureGenerator().getResponseInfo().canMoveHeaderColumnDown(info)); upButton.setEnabled(detailsPage.getProcedureGenerator().getResponseInfo().canMoveHeaderColumnUp(info)); } editColumnsPanel.refresh(); notifyColumnDataChanged(); editColumnsPanel.selectRow(selectedIndex-1); } } }); downButton = new Button(leftToolbarPanel, SWT.PUSH); downButton.setText(Messages.Down); downButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); downButton.setEnabled(false); downButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { ColumnInfo info = editColumnsPanel.getSelectedColumn(); if( info != null ) { int selectedIndex = editColumnsPanel.getSelectedIndex(); if( type == ProcedureInfo.TYPE_BODY ) { detailsPage.getProcedureGenerator().getResponseInfo().moveBodyColumnDown(info); downButton.setEnabled(detailsPage.getProcedureGenerator().getResponseInfo().canMoveBodyColumnDown(info)); upButton.setEnabled(detailsPage.getProcedureGenerator().getResponseInfo().canMoveBodyColumnUp(info)); } else { detailsPage.getProcedureGenerator().getResponseInfo().moveHeaderColumnDown(info); downButton.setEnabled(detailsPage.getProcedureGenerator().getResponseInfo().canMoveHeaderColumnDown(info)); upButton.setEnabled(detailsPage.getProcedureGenerator().getResponseInfo().canMoveHeaderColumnUp(info)); } editColumnsPanel.refresh(); notifyColumnDataChanged(); editColumnsPanel.selectRow(selectedIndex+1); } } }); editColumnsPanel = new EditColumnsPanel(columnInfoGroup, SWT.NONE, this.type, this.detailsPage); 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(); ColumnInfo columnInfo = null; for( Object obj : objs) { if( !(obj instanceof ColumnInfo)) { enable = false; break; } else { columnInfo = (ColumnInfo)obj; } } if( objs.length == 0 ) { enable = false; } deleteButton.setEnabled(enable); editButton.setEnabled(enable); if( enable ) { if( type == ProcedureInfo.TYPE_BODY ) { upButton.setEnabled(procedureInfo.canMoveBodyColumnUp(columnInfo)); downButton.setEnabled(procedureInfo.canMoveBodyColumnDown(columnInfo)); } else { upButton.setEnabled(procedureInfo.canMoveHeaderColumnUp(columnInfo)); downButton.setEnabled(procedureInfo.canMoveHeaderColumnDown(columnInfo)); } } } } }); } private void notifyColumnDataChanged() { if( ! initializing ) { this.detailsPage.notifyColumnDataChanged(); } } public void disableButtons() { deleteButton.setEnabled(false); upButton.setEnabled(false); downButton.setEnabled(false); } public void setEnabled(boolean enable ) { addButton.setEnabled(enable); disableButtons(); rootPathText.setEnabled(enable); editColumnsPanel.setEnabled(enable); } }