/* * 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; import java.util.ArrayList; import java.util.List; import java.util.Properties; import org.eclipse.core.runtime.IStatus; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.TextViewer; import org.eclipse.jface.text.source.VerticalRuler; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.custom.StackLayout; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.Text; import org.eclipse.xsd.XSDSchema; import org.eclipse.xsd.provider.XSDSemanticItemProviderAdapterFactory; import org.teiid.core.designer.event.IChangeListener; import org.teiid.core.designer.event.IChangeNotifier; import org.teiid.core.designer.util.CoreStringUtil; import org.teiid.designer.modelgenerator.wsdl.model.Operation; import org.teiid.designer.modelgenerator.wsdl.ui.Messages; import org.teiid.designer.modelgenerator.wsdl.ui.ModelGeneratorWsdlUiConstants; import org.teiid.designer.modelgenerator.wsdl.ui.util.ModelGeneratorWsdlUiUtil; import org.teiid.designer.modelgenerator.wsdl.ui.wizards.WSDLImportWizardManager; import org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap.SchemaTreeModel.SchemaNode; import org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap.panels.ColumnsInfoPanel; import org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap.panels.ElementsInfoPanel; import org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap.panels.RequestSchemaContentsGroup; import org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap.panels.ResponseSchemaContentsGroup; import org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap.panels.WrapperProcedurePanel; import org.teiid.designer.query.proc.wsdl.IWsdlConstants.ProcedureType; import org.teiid.designer.transformation.ui.editors.sqleditor.SqlTextViewer; import org.teiid.designer.ui.common.graphics.ColorManager; import org.teiid.designer.ui.common.util.WidgetFactory; import org.teiid.designer.ui.common.util.WidgetUtil; import org.teiid.designer.ui.common.util.WizardUtil; import org.teiid.designer.ui.common.widget.DefaultScrolledComposite; import org.teiid.designer.ui.common.wizard.AbstractWizardPage; /** * @since 8.0 */ public class OperationsDetailsPage extends AbstractWizardPage implements IChangeListener, ModelGeneratorWsdlUiConstants { /** <code>IDialogSetting</code>s key for saved dialog height. */ private static final String DIALOG_HEIGHT = "dialogHeight"; //$NON-NLS-1$ /** <code>IDialogSetting</code>s key for saved dialog width. */ private static final String DIALOG_WIDTH = "dialogWidth"; //$NON-NLS-1$ /** <code>IDialogSetting</code>s key for saved dialog X position. */ private static final String DIALOG_X = "dialogX"; //$NON-NLS-1$ /** <code>IDialogSetting</code>s key for saved dialog Y position. */ private static final String DIALOG_Y = "dialogY"; //$NON-NLS-1$ /** The import manager. */ WSDLImportWizardManager importManager; // ========== UI COMPONENTS ========================= /** The Operations Combo Selector */ Combo operationsCombo; private XSDSemanticItemProviderAdapterFactory semanticAdapterFactory; private AdapterFactoryLabelProvider schemaLabelProvider; private SchemaTreeContentProvider schemaContentProvider; /** This keeps track of the root object of the model. */ protected XSDSchema xsdSchema; // protected XSD xsdSchema1; TabFolder tabFolder; TabItem requestTab; Text requestProcedureNameText; TextViewer requestSqlTextViewer; IDocument requestSqlDocument; RequestSchemaContentsGroup requestBodySchemaContentsGroup; ElementsInfoPanel requestBodyElementsInfoPanel; RequestSchemaContentsGroup requestHeaderSchemaContentsGroup; ElementsInfoPanel requestHeaderElementsInfoPanel; TabItem requestHeaderTab; Composite requestHeaderStackPanel; StackLayout requestHeaderStackLayout; Composite disabledRequestHeaderPanel; SashForm requestHeaderSplitter; TabItem responseTab; Text responseProcedureNameText; TextViewer responseSqlTextViewer; IDocument responseSqlDocument; ResponseSchemaContentsGroup responseBodySchemaContentsGroup; ColumnsInfoPanel responseBodyColumnsInfoPanel; ResponseSchemaContentsGroup responseHeaderSchemaContentsGroup; ColumnsInfoPanel responseHeaderColumnsInfoPanel; TabItem responseHeaderTab; Composite responseHeaderStackPanel; StackLayout responseHeaderStackLayout; Composite disabledResponseHeaderPanel; SashForm responseHeaderSplitter; TabFolder wrapperTab; WrapperProcedurePanel wrapperPanel; Button overwriteExistingCB; private ProcedureGenerator procedureGenerator; ImportWsdlSchemaHandler schemaHandler; // ================================================== public OperationsDetailsPage(WSDLImportWizardManager theImportManager) { super(OperationsDetailsPage.class.getSimpleName(), Messages.ProcedureDefinition); this.importManager = theImportManager; this.importManager.setSelectedOperations(new ArrayList<Operation>()); setImageDescriptor(ModelGeneratorWsdlUiUtil.getImageDescriptor(Images.NEW_MODEL_BANNER)); semanticAdapterFactory = new XSDSemanticItemProviderAdapterFactory(); schemaLabelProvider = new SchemaTreeLabelProvider(semanticAdapterFactory); schemaContentProvider = new SchemaTreeContentProvider(semanticAdapterFactory); schemaHandler = new ImportWsdlSchemaHandler(theImportManager, this); this.importManager.addChangeListener(this); } public ProcedureGenerator getProcedureGenerator() { return this.procedureGenerator; } private void notifyOperationChanged(Operation operation) { this.procedureGenerator = importManager.getProcedureGenerator(operation); this.wrapperPanel.notifyOperationChanged(operation); this.requestProcedureNameText.setText(this.procedureGenerator.getRequestProcedureName()); this.responseProcedureNameText.setText(this.procedureGenerator.getResponseProcedureName()); // Now update the column info panels this.requestBodyElementsInfoPanel.setProcedureInfo(this.procedureGenerator.getRequestInfo()); this.responseBodyColumnsInfoPanel.setProcedureInfo(this.procedureGenerator.getResponseInfo()); this.requestHeaderElementsInfoPanel.setProcedureInfo(this.procedureGenerator.getRequestInfo()); this.responseHeaderColumnsInfoPanel.setProcedureInfo(this.procedureGenerator.getResponseInfo()); this.overwriteExistingCB.setSelection(this.procedureGenerator.doOverwriteExistingProcedures()); this.overwriteExistingCB.setEnabled(this.importManager.viewModelExists()); updateSqlText(ProcedureType.BOTH); updateSchemaTree(ProcedureType.BOTH); updateStatus(); } public void notifyColumnDataChanged() { if (!responseBodyColumnsInfoPanel.getRootPathText().getText().equals("")) { //$NON-NLS-1$ this.schemaHandler.getResponseSchemaTreeModel().setRootPath( responseBodyColumnsInfoPanel.getRootPathText().getText()); this.getProcedureGenerator().getResponseInfo().setRootPath(responseBodyColumnsInfoPanel.getRootPathText().getText()); } this.requestBodyElementsInfoPanel.refresh(); this.requestHeaderElementsInfoPanel.refresh(); this.responseBodyColumnsInfoPanel.refresh(); this.responseHeaderColumnsInfoPanel.refresh(); updateSqlText(ProcedureType.BOTH); this.wrapperPanel.notifyOperationChanged(this.getProcedureGenerator().getOperation()); updateStatus(); } public void notifyRootTextColumnDataChanged() { this.schemaHandler.getResponseSchemaTreeModel().setRootPath( responseBodyColumnsInfoPanel.getRootPathText().getText()); updateStatus(); } public void updateStatus() { this.importManager.notifyChanged(); // setPageStatus(); } public WSDLImportWizardManager getImportManager() { return this.importManager; } public IContentProvider getSchemaContentProvider() { return this.schemaContentProvider; } public ILabelProvider getSchemaLabelProvider() { return this.schemaLabelProvider; } public ImportWsdlSchemaHandler getSchemaHandler() { return this.schemaHandler; } /** * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) * @since 4.2 */ @Override public void createControl(Composite theParent) { final Composite hostPanel = new Composite(theParent, SWT.NONE); hostPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); hostPanel.setLayout(new GridLayout(1, false)); // Create page DefaultScrolledComposite scrolledComposite = new DefaultScrolledComposite(hostPanel, SWT.H_SCROLL | SWT.V_SCROLL); scrolledComposite.setExpandHorizontal(true); scrolledComposite.setExpandVertical(true); GridLayoutFactory.fillDefaults().equalWidth(false).applyTo(scrolledComposite); GridDataFactory.fillDefaults().grab(true, false); final Composite pnlMain = scrolledComposite.getPanel(); //new Composite(scrolledComposite, SWT.NONE); pnlMain.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); pnlMain.setLayout(new GridLayout(2, false)); ((GridData)pnlMain.getLayoutData()).widthHint = 400; createOperationsSelectionPanel(pnlMain); createTabbedDetailsPanel(pnlMain); scrolledComposite.sizeScrolledPanel(); setControl(hostPanel); } @SuppressWarnings("unused") private void createOperationsSelectionPanel(Composite parent) { Group operationsGroup = WidgetFactory.createGroup(parent, Messages.Operations, GridData.FILL_BOTH, 2, 2); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; operationsGroup.setLayoutData(gd); ((GridData)operationsGroup.getLayoutData()).widthHint = 400; ACTION_COMBO: { operationsCombo = new Combo(operationsGroup, SWT.NONE | SWT.READ_ONLY); operationsCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); gd.horizontalSpan = 2; operationsCombo.setLayoutData(gd); operationsCombo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent ev) { selectComboItem(operationsCombo.getSelectionIndex()); } }); } overwriteExistingCB = new Button(operationsGroup, SWT.CHECK); overwriteExistingCB.setText(Messages.OverwriteExistingProcedures); gd.horizontalSpan = 2; overwriteExistingCB.setLayoutData(gd); overwriteExistingCB.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { handleOverwriteSelected(); } @Override public void widgetDefaultSelected(SelectionEvent e) { } }); this.overwriteExistingCB.setEnabled(this.importManager.viewModelExists()); } private List<String> getOperationsNameList() { List<String> nameList = new ArrayList<String>(); for (Operation op : this.importManager.getSelectedOperations()) { nameList.add(op.getName()); } return nameList; } private void createTabbedDetailsPanel(Composite parent) { tabFolder = new TabFolder(parent, SWT.TOP | SWT.BORDER); tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH)); ((GridData)tabFolder.getLayoutData()).widthHint = 400; createRequestTab(tabFolder); createResponseTab(tabFolder); createWrapperTab(tabFolder); } private void createRequestTab(TabFolder tabFolder) { Composite panel = WidgetFactory.createPanel(tabFolder); this.requestTab = new TabItem(tabFolder, SWT.NONE); this.requestTab.setControl(panel); this.requestTab.setText(Messages.Request); panel.setLayout(new GridLayout(2, false)); Composite namePanel = WidgetFactory.createPanel(panel); namePanel.setLayout(new GridLayout(2, false)); GridData namePanelGD = new GridData(GridData.FILL_HORIZONTAL); namePanelGD.horizontalSpan = 2; namePanel.setLayoutData(namePanelGD); Label procedureNameLabel = new Label(namePanel, SWT.NONE); procedureNameLabel.setText(Messages.GeneratedProcedureName); requestProcedureNameText = new Text(namePanel, SWT.BORDER | SWT.SINGLE); WidgetUtil.colorizeWidget(requestProcedureNameText, WidgetUtil.TEXT_COLOR_BLUE, true); requestProcedureNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); requestProcedureNameText.setEditable(false); createTabbedRequestPanel(panel); createRequestSqlGroup(panel); } private void createRequestBodySplitter(Composite parent) { SashForm splitter = new SashForm(parent, SWT.HORIZONTAL); GridData gid = new GridData(); gid.grabExcessHorizontalSpace = gid.grabExcessVerticalSpace = true; gid.horizontalAlignment = gid.verticalAlignment = GridData.FILL; splitter.setLayoutData(gid); requestBodySchemaContentsGroup = new RequestSchemaContentsGroup(splitter, ProcedureInfo.TYPE_BODY, this); requestBodyElementsInfoPanel = new ElementsInfoPanel(splitter, SWT.NONE,ProcedureInfo.TYPE_BODY, this); requestBodySchemaContentsGroup.setElementsInfoPanel(requestBodyElementsInfoPanel); splitter.setWeights(new int[] { 60, 40 }); } private void createTabbedRequestPanel(Composite parent) { TabFolder requestTabFolder = new TabFolder(parent, SWT.LEFT | SWT.BORDER); requestTabFolder.setLayoutData(new GridData(GridData.FILL_BOTH)); createRequestBodyTab(requestTabFolder); createRequestHeaderTab(requestTabFolder); } private void createRequestBodyTab(TabFolder tabFolder) { Composite panel = WidgetFactory.createPanel(tabFolder); TabItem requestBodyTab = new TabItem(tabFolder, SWT.NONE); requestBodyTab.setControl(panel); requestBodyTab.setText(Messages.Body_upper_case); createRequestBodySplitter(panel); } private void createRequestHeaderTab(TabFolder tabFolder) { Composite panel = WidgetFactory.createPanel(tabFolder); requestHeaderTab = new TabItem(tabFolder, SWT.NONE); requestHeaderTab.setControl(panel); requestHeaderTab.setText(Messages.Header_upper_case); requestHeaderStackPanel = new Composite(panel, SWT.NONE | SWT.FILL); requestHeaderStackLayout = new StackLayout(); requestHeaderStackLayout.marginWidth = 0; requestHeaderStackLayout.marginHeight = 0; requestHeaderStackPanel.setLayout(requestHeaderStackLayout); requestHeaderStackPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); createRequestHeaderSplitter(requestHeaderStackPanel); createRequestHeaderDisabledPanel(requestHeaderStackPanel); this.requestHeaderStackLayout.topControl = requestHeaderStackPanel; } private void createRequestHeaderDisabledPanel(Composite parent) { disabledRequestHeaderPanel = WidgetFactory.createPanel(parent, SWT.NONE); disabledRequestHeaderPanel.setLayout(new GridLayout(1, false)); GridData gd = new GridData(GridData.FILL_BOTH); gd.horizontalSpan = 2; disabledRequestHeaderPanel.setLayoutData(gd); Label label = new Label(disabledRequestHeaderPanel, SWT.NONE); label.setText(Messages.NoHeaderMessage); } private void createRequestHeaderSplitter(Composite parent) { requestHeaderSplitter = new SashForm(parent, SWT.HORIZONTAL); GridData gid = new GridData(); gid.grabExcessHorizontalSpace = gid.grabExcessVerticalSpace = true; gid.horizontalAlignment = gid.verticalAlignment = GridData.FILL; requestHeaderSplitter.setLayoutData(gid); requestHeaderSchemaContentsGroup = new RequestSchemaContentsGroup(requestHeaderSplitter, ProcedureInfo.TYPE_HEADER, this); requestHeaderElementsInfoPanel = new ElementsInfoPanel(requestHeaderSplitter, SWT.NONE,ProcedureInfo.TYPE_HEADER, this); requestHeaderSchemaContentsGroup.setElementsInfoPanel(requestHeaderElementsInfoPanel); requestHeaderSplitter.setWeights(new int[] { 60, 40 }); } private void createRequestSqlGroup(Composite parent) { Group group = WidgetFactory.createGroup(parent,Messages.GeneratedSQLStatement, SWT.NONE, 2); GridData gd = new GridData(GridData.FILL_BOTH); gd.horizontalSpan = 2; group.setLayoutData(gd); ColorManager colorManager = new ColorManager(); int styles = SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.FULL_SELECTION; requestSqlTextViewer = new SqlTextViewer(group, new VerticalRuler(0), styles, colorManager); requestSqlDocument = new Document(); requestSqlTextViewer.setInput(requestSqlDocument); requestSqlTextViewer.setEditable(false); WidgetUtil.colorizeWidget(requestSqlTextViewer.getTextWidget(), WidgetUtil.TEXT_COLOR_DEFAULT, true); requestSqlDocument.set(CoreStringUtil.Constants.EMPTY_STRING); requestSqlTextViewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH)); } private void createResponseTab(TabFolder tabFolder) { Composite panel = WidgetFactory.createPanel(tabFolder); this.responseTab = new TabItem(tabFolder, SWT.NONE); this.responseTab.setControl(panel); this.responseTab.setText(Messages.Response); panel.setLayout(new GridLayout(2, false)); Composite namePanel = WidgetFactory.createPanel(panel); namePanel.setLayout(new GridLayout(3, false)); GridData namePanelGD = new GridData(GridData.FILL_HORIZONTAL); namePanelGD.horizontalSpan = 3; namePanel.setLayoutData(namePanelGD); Label procedureNameLabel = new Label(namePanel, SWT.NONE); procedureNameLabel.setText(Messages.GeneratedProcedureName); responseProcedureNameText = new Text(namePanel, SWT.BORDER | SWT.SINGLE); WidgetUtil.colorizeWidget(responseProcedureNameText, WidgetUtil.TEXT_COLOR_BLUE, true); responseProcedureNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); responseProcedureNameText.setEditable(false); createTabbedReponsePanel(panel); createResponseSqlGroup(panel); } private void createResponseBodySplitter(Composite parent) { SashForm splitter = new SashForm(parent, SWT.HORIZONTAL); GridData gid = new GridData(); gid.grabExcessHorizontalSpace = gid.grabExcessVerticalSpace = true; gid.horizontalAlignment = gid.verticalAlignment = GridData.FILL; splitter.setLayoutData(gid); responseBodySchemaContentsGroup = new ResponseSchemaContentsGroup(splitter, ProcedureInfo.TYPE_BODY, this); responseBodyColumnsInfoPanel = new ColumnsInfoPanel(splitter, SWT.NONE, ProcedureInfo.TYPE_BODY, this); responseBodySchemaContentsGroup.setColumnsInfoPanel(responseBodyColumnsInfoPanel); splitter.setWeights(new int[] { 40, 60 }); } private void createResponseHeaderSplitter(Composite parent) { responseHeaderSplitter = new SashForm(parent, SWT.HORIZONTAL); GridData gid = new GridData(); gid.grabExcessHorizontalSpace = gid.grabExcessVerticalSpace = true; gid.horizontalAlignment = gid.verticalAlignment = GridData.FILL; responseHeaderSplitter.setLayoutData(gid); responseHeaderSchemaContentsGroup = new ResponseSchemaContentsGroup(responseHeaderSplitter, ProcedureInfo.TYPE_HEADER, this); responseHeaderColumnsInfoPanel = new ColumnsInfoPanel(responseHeaderSplitter, SWT.NONE, ProcedureInfo.TYPE_HEADER, this); responseHeaderSchemaContentsGroup.setColumnsInfoPanel(responseHeaderColumnsInfoPanel); responseHeaderSplitter.setWeights(new int[] { 40, 60 }); } private void createTabbedReponsePanel(Composite parent) { TabFolder responseTabFolder = new TabFolder(parent, SWT.LEFT | SWT.BORDER); responseTabFolder.setLayoutData(new GridData(GridData.FILL_BOTH)); createResponseBodyTab(responseTabFolder); createResponseHeaderTab(responseTabFolder); } private void createResponseBodyTab(TabFolder tabFolder) { Composite panel = WidgetFactory.createPanel(tabFolder); TabItem requestBodyTab = new TabItem(tabFolder, SWT.NONE); requestBodyTab.setControl(panel); requestBodyTab.setText(Messages.Body_upper_case); createResponseBodySplitter(panel); } private void createResponseHeaderTab(TabFolder tabFolder) { Composite panel = WidgetFactory.createPanel(tabFolder); responseHeaderTab = new TabItem(tabFolder, SWT.NONE); responseHeaderTab.setControl(panel); responseHeaderTab.setText(Messages.Header_upper_case); responseHeaderStackPanel = new Composite(panel, SWT.NONE | SWT.FILL); responseHeaderStackLayout = new StackLayout(); responseHeaderStackLayout.marginWidth = 0; responseHeaderStackLayout.marginHeight = 0; responseHeaderStackPanel.setLayout(responseHeaderStackLayout); responseHeaderStackPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); createResponseHeaderSplitter(responseHeaderStackPanel); createResponseHeaderDisabledPanel(responseHeaderStackPanel); this.responseHeaderStackLayout.topControl = responseHeaderStackPanel; } private void createResponseHeaderDisabledPanel(Composite parent) { disabledResponseHeaderPanel = WidgetFactory.createPanel(parent, SWT.NONE); disabledResponseHeaderPanel.setLayout(new GridLayout(1, false)); GridData gd = new GridData(GridData.FILL_BOTH); gd.horizontalSpan = 2; disabledResponseHeaderPanel.setLayoutData(gd); Label label = new Label(disabledResponseHeaderPanel, SWT.NONE); label.setText(Messages.NoHeaderMessage); } private void createResponseSqlGroup(Composite parent) { Group group = WidgetFactory.createGroup(parent, Messages.GeneratedSQLStatement, SWT.NONE, 2); GridData gd = new GridData(GridData.FILL_BOTH); gd.horizontalSpan = 2; group.setLayoutData(gd); ColorManager colorManager = new ColorManager(); int styles = SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.FULL_SELECTION; responseSqlTextViewer = new SqlTextViewer(group, new VerticalRuler(0), styles, colorManager); responseSqlDocument = new Document(); responseSqlTextViewer.setInput(responseSqlDocument); responseSqlTextViewer.setEditable(false); responseSqlTextViewer.getTextWidget().setBackground( Display.getCurrent().getSystemColor( SWT.COLOR_WIDGET_LIGHT_SHADOW)); responseSqlDocument.set(CoreStringUtil.Constants.EMPTY_STRING); responseSqlTextViewer.getControl().setLayoutData( new GridData(GridData.FILL_BOTH)); } private void createWrapperTab(TabFolder tabFolder) { Composite panel = WidgetFactory.createPanel(tabFolder); this.responseTab = new TabItem(tabFolder, SWT.NONE); this.responseTab.setControl(panel); this.responseTab.setText(Messages.WrapperProcedure); panel.setLayout(new GridLayout(1, false)); wrapperPanel = new WrapperProcedurePanel(panel, this); } private void selectComboItem(int selectionIndex) { if (selectionIndex >= 0) { operationsCombo.select(selectionIndex); String operationName = operationsCombo.getItem(selectionIndex); for (Operation op : this.importManager.getSelectedOperations()) { if (op.getName().equalsIgnoreCase(operationName)) { notifyOperationChanged(op); break; } } } } private void handleOverwriteSelected() { // For the selected operation, set the procedure generator's value if( this.getProcedureGenerator() != null ) { this.getProcedureGenerator().setOverwriteExistingProcedures(this.overwriteExistingCB.getSelection()); notifyOperationChanged(this.getProcedureGenerator().getOperation()); } } void updateSqlText(ProcedureType type) { if (this.procedureGenerator != null) { switch (type) { case REQUEST: requestSqlTextViewer.getDocument().set(this.procedureGenerator.getRequestInfo().getSqlString(new Properties())); break; case RESPONSE: responseSqlTextViewer.getDocument().set(this.procedureGenerator.getResponseInfo().getSqlString(new Properties())); break; case BOTH: requestSqlTextViewer.getDocument().set(this.procedureGenerator.getRequestInfo().getSqlString(new Properties())); responseSqlTextViewer.getDocument().set(this.procedureGenerator.getResponseInfo().getSqlString(new Properties())); } } } void updateSchemaTree(ProcedureType type) { SchemaNodeWrapper nodeInput; switch (type) { case REQUEST: nodeInput = new SchemaNodeWrapper(getSchemaForSelectedOperation(ProcedureType.REQUEST)); requestBodySchemaContentsGroup.setInput(nodeInput); requestHeaderSchemaContentsGroup.setInput(nodeInput); break; case RESPONSE: nodeInput = new SchemaNodeWrapper(getSchemaForSelectedOperation(ProcedureType.RESPONSE)); responseBodySchemaContentsGroup.setInput(nodeInput); responseHeaderSchemaContentsGroup.setInput(nodeInput); break; case BOTH: nodeInput = new SchemaNodeWrapper(getSchemaForSelectedOperation(ProcedureType.REQUEST)); requestBodySchemaContentsGroup.setInput(nodeInput); requestHeaderSchemaContentsGroup.setInput(nodeInput); nodeInput = new SchemaNodeWrapper(getSchemaForSelectedOperation(ProcedureType.RESPONSE)); responseBodySchemaContentsGroup.setInput(nodeInput); responseHeaderSchemaContentsGroup.setInput(nodeInput); } } private List<SchemaNode> getSchemaForSelectedOperation(ProcedureType type) { return this.schemaHandler.getSchemaForSelectedOperation(type, this.procedureGenerator); } /** * @see org.eclipse.jface.dialogs.IDialogPage#dispose() * @since 4.2 */ @Override public void dispose() { saveState(); } /** * Override to replace the NewModelWizard settings with the section devoted * to the Web Service Model Wizard. * * @see org.eclipse.jface.wizard.WizardPage#getDialogSettings() * @since 4.2 */ @Override protected IDialogSettings getDialogSettings() { IDialogSettings settings = super.getDialogSettings(); if (settings != null) { // get the right section of the NewModelWizard settings IDialogSettings temp = settings.getSection(DIALOG_SETTINGS_SECTION); if (temp == null) { settings = settings.addNewSection(DIALOG_SETTINGS_SECTION); } else { settings = temp; } } return settings; } /** * Persists dialog size and position. * * @since 4.2 */ private void saveState() { IDialogSettings settings = getDialogSettings(); if (settings != null) { Shell shell = getContainer().getShell(); if (shell != null) { Rectangle r = shell.getBounds(); settings.put(DIALOG_X, r.x); settings.put(DIALOG_Y, r.y); settings.put(DIALOG_WIDTH, r.width); settings.put(DIALOG_HEIGHT, r.height); } } } /** * Sets the wizard page status message. * * @since 4.2 */ void setPageStatus() { IStatus generatorStatus = this.importManager.getValidator().getProcedureStatus(this.procedureGenerator); if( generatorStatus == null ) { return; } if (generatorStatus.isOK() || generatorStatus.getSeverity() < IStatus.ERROR) { this.setErrorMessage(null); WizardUtil.setPageComplete(this); // NOW CHECK THE REMAINING OPERATIONS IStatus operationsStatus = this.importManager.getValidator().getOperationsStatus(); String finalMessage = this.importManager.getValidator().getPrimaryMessage(operationsStatus); if( operationsStatus.getSeverity() > IStatus.WARNING ) { WizardUtil.setPageComplete(this, finalMessage, WizardUtil.getMessageSeverity(operationsStatus.getSeverity())); this.setErrorMessage(finalMessage); this.setPageComplete(false); } else if( operationsStatus.getSeverity() == IStatus.WARNING ) { this.setMessage(finalMessage, WizardUtil.getMessageSeverity(IStatus.WARNING)); } } else { String finalMessage = this.importManager.getValidator().getPrimaryMessage(generatorStatus); WizardUtil.setPageComplete(this, finalMessage, WizardUtil.getMessageSeverity(generatorStatus.getSeverity())); this.setErrorMessage(finalMessage); this.setPageComplete(false); } getContainer().updateButtons(); } @Override public void setVisible(boolean isVisible) { super.setVisible(isVisible); if (isVisible) { WidgetUtil.setComboItems(operationsCombo, getOperationsNameList(), null, true); selectComboItem(0); this.wrapperPanel.setVisible(); this.overwriteExistingCB.setEnabled(this.importManager.viewModelExists()); boolean includeHeader = this.importManager.isMessageServiceMode(); if( includeHeader ) { this.requestHeaderStackLayout.topControl = requestHeaderSplitter; this.responseHeaderStackLayout.topControl = responseHeaderSplitter; } else { this.requestHeaderStackLayout.topControl = disabledRequestHeaderPanel; this.responseHeaderStackLayout.topControl = disabledResponseHeaderPanel; } this.requestHeaderStackPanel.layout(); this.responseHeaderStackPanel.layout(); this.requestHeaderTab.getControl().setEnabled(includeHeader); this.responseHeaderTab.getControl().setEnabled(includeHeader); } setPageStatus(); } public void updateDesignerProperties() { } /* (non-Javadoc) * @see com.metamatrix.core.event.IChangeListener#stateChanged(com.metamatrix.core.event.IChangeNotifier) */ @Override public void stateChanged(IChangeNotifier theSource) { setPageStatus(); } Object[] getNodeChildren(Object element) { return new Object[0]; } boolean getNodeHasChildren(Object element) { return false; } Image getNodeImage(Object element) { return null; } String getNodeName(Object element) { return "<name>"; //$NON-NLS-1$ } Object getNodeParent(Object element) { return null; } public String[] createRequestColumn(int requestType) { if( requestType == ProcedureInfo.TYPE_BODY ) { return this.requestBodySchemaContentsGroup.createRequestColumn(); } return this.requestHeaderSchemaContentsGroup.createRequestColumn(); } public String[] createResponseColumn(int responseType) { if( responseType == ProcedureInfo.TYPE_BODY ) { return this.responseBodySchemaContentsGroup.createResponseColumn(); } return this.responseHeaderSchemaContentsGroup.createResponseColumn(); } class OperationsListProvider extends LabelProvider implements ITreeContentProvider { private final Image OPERATION_ICON_IMG = ModelGeneratorWsdlUiUtil .getImage(Images.OPERATION_ICON); @Override public void dispose() { } @Override public Object[] getChildren(final Object node) { if (node instanceof ArrayList) { ArrayList<?> theList = ((ArrayList<?>) node); return theList.toArray(); } return CoreStringUtil.Constants.EMPTY_STRING_ARRAY; } @Override public Object[] getElements(final Object inputElement) { return getChildren(inputElement); } @Override public Object getParent(final Object node) { return null; } @Override public boolean hasChildren(final Object node) { return false; } @Override public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) { } @Override public Image getImage(final Object node) { if (node instanceof Operation) { return OPERATION_ICON_IMG; } return null; } @Override public String getText(final Object node) { if (node instanceof Operation) { return ((Operation) node).getName(); } return "unknownElement"; //$NON-NLS-1$ } } }