/*
* 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.osgi.util.NLS;
import org.eclipse.swt.SWT;
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.teiid.designer.modelgenerator.wsdl.ui.Messages;
import org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap.AttributeInfo;
import org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap.ColumnInfo;
import org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap.OperationsDetailsPage;
import org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap.ProcedureInfo;
import org.teiid.designer.query.proc.wsdl.IWsdlAttributeInfo;
import org.teiid.designer.query.proc.wsdl.IWsdlConstants;
import org.teiid.designer.ui.common.util.WidgetFactory;
/**
* @since 8.0
*/
public class ElementsInfoPanel {
private ProcedureInfo procedureInfo;
private Button addButton, deleteButton, upButton, downButton;
EditElementsPanel editElementsPanel;
private int type = -1;
final OperationsDetailsPage detailsPage;
public ElementsInfoPanel(Composite parent, int style, int type, OperationsDetailsPage detailsPage) {
super();
this.type = type;
this.detailsPage = detailsPage;
init(parent);
}
public ProcedureInfo getProcedureInfo() {
return this.procedureInfo;
}
public void setProcedureInfo(ProcedureInfo info) {
this.procedureInfo = info;
editElementsPanel.setProcedureInfo(info);
editElementsPanel.refresh();
this.addButton.setEnabled(info != null);
}
public void refresh() {
this.editElementsPanel.refresh();
}
private void init(Composite parent) {
Group columnInfoGroup = WidgetFactory.createGroup(parent, Messages.ElementInfo, SWT.NONE, 2, 2);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 1;
columnInfoGroup.setLayoutData(gd);
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.Add);
addButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
addButton.setEnabled(false);
addButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
// Check Selection from tree
String[] names = detailsPage.createRequestColumn(type);
if (names != null && names.length > 0) {
StringBuilder sb = new StringBuilder();
int count = 1;
int max = names.length;
for( String name : names) {
sb.append(name);
if( count < max ) {
sb.append(", ");
count++;
}
}
boolean ok = MessageDialog.openQuestion(detailsPage.getShell(),
Messages.InvalidSelectedSchemaObject,
NLS.bind(Messages.InvalidSelectedSchemaObject_element_msg, names));
if( ok ) {
if( type == ProcedureInfo.TYPE_BODY ) {
for( String name : names) {
detailsPage.getProcedureGenerator().getRequestInfo().addBodyColumn(name, false, ColumnInfo.DEFAULT_DATATYPE, null, null, null);
}
} else {
for( String name : names) {
detailsPage.getProcedureGenerator().getRequestInfo().addHeaderColumn(name, false, ColumnInfo.DEFAULT_DATATYPE, null, null, null);
}
}
editElementsPanel.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) {
Object selectedObject = editElementsPanel.getSelectedObject();
if( selectedObject instanceof ColumnInfo) {
ColumnInfo info = (ColumnInfo)selectedObject;
if( type == IWsdlConstants.TYPE_BODY ) {
detailsPage.getProcedureGenerator().getRequestInfo().removeBodyColumn(info);
} else {
detailsPage.getProcedureGenerator().getRequestInfo().removeHeaderColumn(info);
}
deleteButton.setEnabled(false);
editElementsPanel.selectRow(-1);
editElementsPanel.refresh();
notifyColumnDataChanged();
} else if( selectedObject instanceof IWsdlAttributeInfo) {
AttributeInfo info = (AttributeInfo)selectedObject;
ColumnInfo parentColumnInfo = info.getColumnInfo();
parentColumnInfo.removeAttributeInfo(info);
deleteButton.setEnabled(false);
editElementsPanel.selectRow(-1);
editElementsPanel.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 = editElementsPanel.getSelectedColumn();
if (info != null) {
int selectedIndex = editElementsPanel.getSelectedIndex();
if( type == ProcedureInfo.TYPE_BODY ) {
detailsPage.getProcedureGenerator().getRequestInfo().moveBodyColumnUp(info);
downButton.setEnabled(detailsPage.getProcedureGenerator().getRequestInfo().canMoveBodyColumnDown(info));
upButton.setEnabled(detailsPage.getProcedureGenerator().getRequestInfo().canMoveBodyColumnUp(info));
} else {
detailsPage.getProcedureGenerator().getRequestInfo().moveHeaderColumnUp(info);
downButton.setEnabled(detailsPage.getProcedureGenerator().getRequestInfo().canMoveHeaderColumnDown(info));
upButton.setEnabled(detailsPage.getProcedureGenerator().getRequestInfo().canMoveHeaderColumnUp(info));
}
editElementsPanel.refresh();
notifyColumnDataChanged();
editElementsPanel.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 = editElementsPanel.getSelectedColumn();
if (info != null) {
int selectedIndex = editElementsPanel.getSelectedIndex();
if( type == ProcedureInfo.TYPE_BODY ) {
detailsPage.getProcedureGenerator().getRequestInfo().moveBodyColumnDown(info);
downButton.setEnabled(detailsPage.getProcedureGenerator().getRequestInfo().canMoveBodyColumnDown(info));
upButton.setEnabled(detailsPage.getProcedureGenerator().getRequestInfo().canMoveBodyColumnUp(info));
} else {
detailsPage.getProcedureGenerator().getRequestInfo().moveHeaderColumnDown(info);
downButton.setEnabled(detailsPage.getProcedureGenerator().getRequestInfo().canMoveHeaderColumnDown(info));
upButton.setEnabled(detailsPage.getProcedureGenerator().getRequestInfo().canMoveHeaderColumnUp(info));
}
editElementsPanel.refresh();
notifyColumnDataChanged();
editElementsPanel.selectRow(selectedIndex + 1);
}
}
});
editElementsPanel = new EditElementsPanel(columnInfoGroup, SWT.NONE, this.type, this.detailsPage);
editElementsPanel.addSelectionListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection sel = (IStructuredSelection) event.getSelection();
deleteButton.setEnabled(false);
upButton.setEnabled(false);
downButton.setEnabled(false);
if (! sel.isEmpty()) {
Object[] objs = sel.toArray();
if (objs[0] instanceof ColumnInfo) {
boolean enable = true;
ColumnInfo columnInfo = (ColumnInfo) objs[0];
deleteButton.setEnabled(true);
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));
}
}
} else if( objs[0] instanceof IWsdlAttributeInfo) {
deleteButton.setEnabled(true);
}
}
}
});
}
private void notifyColumnDataChanged() {
this.detailsPage.notifyColumnDataChanged();
}
public void disableButtons() {
deleteButton.setEnabled(false);
upButton.setEnabled(false);
downButton.setEnabled(false);
}
public void setEnabled(boolean enable ) {
addButton.setEnabled(enable);
disableButtons();
editElementsPanel.setEnabled(enable);
}
}