[jbosstools-commits] JBoss Tools SVN: r23388 - in trunk/ws/plugins/org.jboss.tools.ws.ui: META-INF and 4 other directories.
jbosstools-commits at lists.jboss.org
jbosstools-commits at lists.jboss.org
Tue Jul 13 16:52:55 EDT 2010
Author: bfitzpat
Date: 2010-07-13 16:52:54 -0400 (Tue, 13 Jul 2010)
New Revision: 23388
Added:
trunk/ws/plugins/org.jboss.tools.ws.ui/JAXRSWSTestView2.java
trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/binary.gif
trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/properties.gif
trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/run.gif
trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/save_edit.gif
trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/web.gif
trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/wsdl.gif
trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/views/FormLayoutFactory.java
trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/views/JAXRSWSTestView2.java
Modified:
trunk/ws/plugins/org.jboss.tools.ws.ui/META-INF/MANIFEST.MF
trunk/ws/plugins/org.jboss.tools.ws.ui/plugin.xml
trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/messages/JBossWSUI.properties
trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/messages/JBossWSUIMessages.java
trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/utils/JAXWSTester2.java
trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/utils/WSTestUtils.java
trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/views/DelimitedStringList.java
Log:
[JBIDE-6579] Updated WS Tester to have cleaner, simpler look and feel using the Eclipse Forms Toolkit
Added: trunk/ws/plugins/org.jboss.tools.ws.ui/JAXRSWSTestView2.java
===================================================================
--- trunk/ws/plugins/org.jboss.tools.ws.ui/JAXRSWSTestView2.java (rev 0)
+++ trunk/ws/plugins/org.jboss.tools.ws.ui/JAXRSWSTestView2.java 2010-07-13 20:52:54 UTC (rev 23388)
@@ -0,0 +1,1249 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.ws.ui.views;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map.Entry;
+
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPEnvelope;
+
+import org.eclipse.core.resources.IStorage;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FillLayout;
+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.CoolBar;
+import org.eclipse.swt.widgets.CoolItem;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.eclipse.ui.IStorageEditorInput;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.events.ExpansionAdapter;
+import org.eclipse.ui.forms.events.ExpansionEvent;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.part.ViewPart;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.IMonitor;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.MonitorCore;
+import org.jboss.tools.ws.ui.JBossWSUIPlugin;
+import org.jboss.tools.ws.ui.messages.JBossWSUIMessages;
+import org.jboss.tools.ws.ui.utils.JAXRSTester;
+import org.jboss.tools.ws.ui.utils.JAXWSTester2;
+import org.jboss.tools.ws.ui.utils.ResultsXMLStorage;
+import org.jboss.tools.ws.ui.utils.ResultsXMLStorageInput;
+import org.jboss.tools.ws.ui.utils.WSTestUtils;
+
+/**
+ * View for testing web services (JAX-WS & JAX-RS)
+ * @author bfitzpat
+ *
+ */
+ at SuppressWarnings("restriction")
+public class JAXRSWSTestView2 extends ViewPart {
+
+ private static final String DEFAULT_TEXT_EDITOR_ID = "org.eclipse.ui.DefaultTextEditor"; //$NON-NLS-1$
+ private static final String XML_EDITOR_ID = "org.eclipse.wst.xml.ui.internal.tabletree.XMLMultiPageEditorPart"; //$NON-NLS-1$
+ private static final String TCPIP_VIEW_ID = "org.eclipse.wst.internet.monitor.view";//$NON-NLS-1$
+ private static final String DELETE = "DELETE";//$NON-NLS-1$
+ private static final String PUT = "PUT";//$NON-NLS-1$
+ private static final String POST = "POST";//$NON-NLS-1$
+ private static final String GET = "GET";//$NON-NLS-1$
+ private static final String JAX_WS = "JAX-WS"; //$NON-NLS-1$
+ private static final String JAX_RS = "JAX-RS"; //$NON-NLS-1$
+ private static final String EMPTY_STRING = ""; //$NON-NLS-1$
+ private static final String RESULT_HEADER_DELIMITER = "%";//$NON-NLS-1$
+
+ /**
+ * The ID of the view as specified by the extension.
+ */
+ public static final String ID = "org.jboss.tools.ws.ui.tester.views.TestWSView";//$NON-NLS-1$
+
+ /* UI controls */
+ private Button testButton = null;
+ private Button wsdlButton = null;
+ private Text actionText;
+ private Text resultsText;
+ private Combo urlCombo;
+ private DelimitedStringList dlsList;
+ private Combo methodCombo;
+ private Combo wsTypeCombo;
+ private Text bodyText;
+ private TabFolder tabGroup;
+ private TabItem bodyTab;
+ private TabItem headerTab;
+ private List resultHeadersList;
+ private TabItem resultHeadersTab;
+ private TabItem resultTab;
+ private TabFolder resultTabGroup;
+
+ private TabItem parmsTab;
+
+ private DelimitedStringList parmsList;
+ private Button openTCPIPMonitorButton;
+ private Button addTCPIPMonitorButton;
+
+ private SOAPEnvelope envelope;
+ private SOAPBody soapbody;
+ private MenuItem openInXMLEditorAction;
+ private MenuItem openResponseTagInXMLEditor;
+ private Menu resultsTextMenu;
+ private MenuItem copyMenuAction;
+ private Menu resultsHeaderMenu;
+ private MenuItem copyResultHeaderMenuAction;
+
+ private boolean showSampleButton = false;
+ private String[] serviceNSMessage = null;
+
+ private FormToolkit toolkit;
+ private ScrolledForm form;
+ private ImageRegistry mImageRegistry;
+
+ private static final String IMG_DESC_WSDL = "icons/obj16/wsdl.gif"; //$NON-NLS-1$
+ private static final String IMG_DESC_START = "icons/obj16/run.gif"; //$NON-NLS-1$
+ private static final String IMG_DESC_STOP = "icons/obj16/progress_stop.gif"; //$NON-NLS-1$
+
+ /**
+ * The constructor.
+ */
+ public JAXRSWSTestView2() {
+ }
+
+ private void getImages() {
+ mImageRegistry = new ImageRegistry();
+ mImageRegistry.put(IMG_DESC_WSDL, ImageDescriptor
+ .createFromURL(JBossWSUIPlugin.getDefault().getBundle()
+ .getEntry(IMG_DESC_WSDL)));
+ mImageRegistry.put(IMG_DESC_START, ImageDescriptor
+ .createFromURL(JBossWSUIPlugin.getDefault().getBundle()
+ .getEntry(IMG_DESC_START)));
+ mImageRegistry.put(IMG_DESC_STOP, ImageDescriptor
+ .createFromURL(JBossWSUIPlugin.getDefault().getBundle()
+ .getEntry(IMG_DESC_STOP)));
+ }
+
+ /**
+ * This is a callback that will allow us
+ * to create the viewer and initialize it.
+ */
+ public void createPartControl(Composite parent) {
+
+ getImages();
+
+ toolkit = new FormToolkit(parent.getDisplay());
+ form = toolkit.createScrolledForm(parent);
+
+ GridLayout layout = new GridLayout(2, false);
+ form.getBody().setLayout(layout);
+
+ urlCombo = new Combo(form.getBody(), SWT.BORDER | SWT.DROP_DOWN);
+ GridData gdURL = new GridData(SWT.FILL, SWT.NONE, true, false);
+ urlCombo.setLayoutData(gdURL);
+ toolkit.adapt(urlCombo);
+
+ Composite comp1 = toolkit.createComposite(form.getBody());
+ comp1.setLayout(new FillLayout());
+
+ CoolBar coolBar = new CoolBar(comp1,SWT.BORDER);
+ toolkit.adapt(coolBar);
+
+ CoolItem wsTypeCoolItem = new CoolItem(coolBar, SWT.PUSH);
+ wsTypeCombo = new Combo(coolBar, SWT.READ_ONLY | SWT.BORDER);
+ String[] items = {JAX_WS, JAX_RS};
+ wsTypeCombo.setItems(items);
+ wsTypeCombo.pack();
+ Point size = wsTypeCombo.computeSize (SWT.DEFAULT, SWT.DEFAULT);
+ wsTypeCoolItem.setPreferredSize (wsTypeCoolItem.computeSize (size.x, size.y));
+ wsTypeCoolItem.setControl(wsTypeCombo);
+ wsTypeCombo.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+ public void widgetSelected(SelectionEvent e) {
+ setControlsForWSType(wsTypeCombo.getText());
+ setControlsForMethodType(methodCombo.getText());
+ setControlsForSelectedURL();
+ }
+ });
+ toolkit.adapt(wsTypeCombo);
+
+ CoolItem wsMethodCoolItem = new CoolItem(coolBar, SWT.PUSH);
+ methodCombo = new Combo(coolBar, SWT.BORDER | SWT.READ_ONLY);
+ String[] methods = {GET, POST, PUT, DELETE};
+ methodCombo.setItems(methods);
+ methodCombo.pack();
+ size = methodCombo.computeSize (SWT.DEFAULT, SWT.DEFAULT);
+ wsMethodCoolItem.setPreferredSize (wsMethodCoolItem.computeSize (size.x, size.y));
+ wsMethodCoolItem.setControl(methodCombo);
+ methodCombo.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+ public void widgetSelected(SelectionEvent e) {
+ setControlsForMethodType(methodCombo.getText());
+ }
+ });
+ toolkit.adapt(methodCombo);
+
+ CoolItem topCoolItem = new CoolItem(coolBar, SWT.NONE);
+
+ ToolBar topToolBar = new ToolBar(coolBar,SWT.HORIZONTAL);
+ ToolItem openWSDLToolItem = new ToolItem(topToolBar, SWT.PUSH);
+ openWSDLToolItem.setImage(mImageRegistry.get(IMG_DESC_WSDL));
+ openWSDLToolItem.setToolTipText("Get from WSDL");
+
+ ToolItem startToolItem = new ToolItem(topToolBar, SWT.PUSH);
+ startToolItem.setImage(mImageRegistry.get(IMG_DESC_START));
+ startToolItem.setToolTipText("Go");
+
+ ToolItem stopToolItem = new ToolItem(topToolBar, SWT.PUSH);
+ stopToolItem.setImage(mImageRegistry.get(IMG_DESC_STOP));
+ stopToolItem.setToolTipText("Stop");
+ toolkit.adapt(coolBar);
+
+ topToolBar.pack();
+ size = topToolBar.getSize();
+ topCoolItem.setControl(topToolBar);
+ topCoolItem.setSize(topCoolItem.computeSize(size.x, size.y));
+
+ SashForm topBottomForm = new SashForm(form.getBody(), SWT.NONE);
+ topBottomForm.setOrientation(SWT.VERTICAL);
+ toolkit.adapt(topBottomForm);
+ topBottomForm.setLayout(new GridLayout());
+ GridData gd8 = new GridData(SWT.FILL, SWT.NONE, true, false);
+ gd8.horizontalSpan = 2;
+ topBottomForm.setLayoutData(gd8);
+
+ SashForm sashForm = new SashForm(topBottomForm, SWT.NONE);
+ sashForm.setOrientation(SWT.HORIZONTAL);
+ toolkit.adapt(sashForm);
+ GridLayout sashLayout = new GridLayout(2, false);
+ sashForm.setLayout(sashLayout);
+ GridData gd3 = new GridData(SWT.FILL, SWT.NONE, true, false);
+ gd3.horizontalSpan = 2;
+ sashForm.setLayoutData(gd3);
+
+ ExpandableComposite ec = toolkit.createExpandableComposite(sashForm,
+ ExpandableComposite.TWISTIE|
+ ExpandableComposite.CLIENT_INDENT);
+ ec.setText("Headers");
+ dlsList = new DelimitedStringList(ec, SWT.None);
+ ec.setClient(dlsList);
+ toolkit.adapt(dlsList);
+ GridData gd = new GridData(SWT.FILL, SWT.NONE, true, false);
+ ec.setLayoutData(gd);
+ ec.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ form.reflow(true);
+ }
+ });
+
+ ExpandableComposite ec2 = toolkit.createExpandableComposite(sashForm,
+ ExpandableComposite.TWISTIE|
+ ExpandableComposite.CLIENT_INDENT);
+ ec2.setText("Response Headers");
+ resultsText = toolkit.createText(ec2, "", SWT.BORDER | SWT.V_SCROLL | SWT.WRAP | SWT.READ_ONLY );
+ ec2.setClient(resultsText);
+ GridData gd2 = new GridData(SWT.FILL, SWT.FILL, true, false);
+ ec2.setLayoutData(gd2);
+ ec2.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ form.reflow(true);
+ }
+ });
+
+ SashForm sashForm2 = new SashForm(topBottomForm, SWT.NONE);
+ sashForm2.setOrientation(SWT.HORIZONTAL);
+ toolkit.adapt(sashForm);
+ GridLayout sashLayout2 = new GridLayout(2, false);
+ sashForm2.setLayout(sashLayout2);
+ GridData gd5 = new GridData(SWT.FILL, SWT.NONE, true, false);
+ gd5.horizontalSpan = 2;
+ sashForm2.setLayoutData(gd5);
+
+ ExpandableComposite ec3 = toolkit.createExpandableComposite(sashForm2,
+ ExpandableComposite.TWISTIE|
+ ExpandableComposite.CLIENT_INDENT);
+ ec3.setText("Parameters");
+ parmsList = new DelimitedStringList(ec3, SWT.None);
+ ec3.setClient(parmsList);
+ toolkit.adapt(parmsList);
+ GridData gd4 = new GridData(SWT.FILL, SWT.FILL, true, false);
+ ec3.setLayoutData(gd4);
+ ec3.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ form.reflow(true);
+ }
+ });
+
+ ExpandableComposite ec4 = toolkit.createExpandableComposite(sashForm2,
+ ExpandableComposite.TWISTIE|
+ ExpandableComposite.CLIENT_INDENT);
+ ec4.setText("Response Body");
+
+ Composite comp2 = toolkit.createComposite(ec4);
+ comp2.setLayout(new GridLayout());
+
+ Composite comp3 = toolkit.createComposite(comp2);
+ comp3.setLayout(new GridLayout(4, false));
+ comp3.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
+
+ Button saveBtn = toolkit.createButton(comp3, "Save", SWT.PUSH);
+ saveBtn.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
+ Button editorBtn = toolkit.createButton(comp3, "Open in Editor", SWT.PUSH);
+ editorBtn.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
+ Button rawBtn = toolkit.createButton(comp3, "Show Raw", SWT.PUSH);
+ rawBtn.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
+ Button browserBtn = toolkit.createButton(comp3, "Show in Browser", SWT.PUSH);
+ browserBtn.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
+
+ bodyText = new Text(comp2, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
+ GridData gd7 = new GridData(SWT.FILL, SWT.FILL, true, true);
+ bodyText.setLayoutData(gd7);
+
+ ec4.setClient(comp2);
+ GridData gd6 = new GridData(SWT.FILL, SWT.FILL, true, false);
+ ec4.setLayoutData(gd6);
+ ec4.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ form.reflow(true);
+ }
+ });
+
+ SashForm sashForm3 = new SashForm(topBottomForm, SWT.NONE);
+ sashForm3.setOrientation(SWT.HORIZONTAL);
+ toolkit.adapt(sashForm);
+ GridLayout sashLayout3 = new GridLayout(2, false);
+ sashForm3.setLayout(sashLayout3);
+ GridData gd10 = new GridData(SWT.FILL, SWT.NONE, true, false);
+// gd10.horizontalSpan = 1;
+ sashForm3.setLayoutData(gd10);
+
+ ExpandableComposite ec5 = toolkit.createExpandableComposite(sashForm3,
+ ExpandableComposite.TWISTIE|
+ ExpandableComposite.CLIENT_INDENT);
+ ec5.setText("Body Text");
+ bodyText = toolkit.createText(ec5, "", SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
+ ec5.setClient(bodyText);
+ GridData gd9 = new GridData(SWT.FILL, SWT.FILL, true, true);
+ ec5.setLayoutData(gd9);
+ ec5.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ form.reflow(true);
+ }
+ });
+
+// Label methodLabel = new Label(topHalf, SWT.NONE);
+// methodLabel.setText(JBossWSUIMessages.JAXRSWSTestView_HTTP_Method_Label);
+// methodLabel.setLayoutData(new GridData());
+//
+// methodCombo = new Combo(topHalf, SWT.DROP_DOWN | SWT.READ_ONLY);
+// methodCombo.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
+// methodCombo.add(GET);
+// methodCombo.add(POST);
+// methodCombo.add(PUT);
+// methodCombo.add(DELETE);
+// methodCombo.setText(GET);
+// methodCombo.addSelectionListener(new SelectionListener() {
+// public void widgetDefaultSelected(SelectionEvent e) {
+// widgetSelected(e);
+// }
+// public void widgetSelected(SelectionEvent e) {
+// setControlsForMethodType(methodCombo.getText());
+// }
+// });
+//
+// Label urlLabel = new Label(topHalf, SWT.NONE);
+// urlLabel.setText(JBossWSUIMessages.JAXRSWSTestView_Service_URL_Label);
+// urlLabel.setLayoutData(new GridData());
+//
+//
+// Label actionLabel = new Label(topHalf, SWT.NONE);
+// actionLabel.setText(JBossWSUIMessages.JAXRSWSTestView_Action_URL_Label);
+// actionLabel.setLayoutData(new GridData());
+//
+// actionText = new Text(topHalf, SWT.BORDER);
+// actionText.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
+//
+// tabGroup = new TabFolder(topHalf, SWT.BORDER);
+//
+// bodyTab = new TabItem(tabGroup, SWT.NONE, 0);
+// bodyTab.setText(JBossWSUIMessages.JAXRSWSTestView_Request_Body_Label);
+//
+// parmsTab = new TabItem(tabGroup, SWT.NONE, 1);
+// parmsTab.setText(JBossWSUIMessages.JAXRSWSTestView_Request_Parameters_Label);
+//
+// parmsList = new DelimitedStringList(tabGroup, SWT.None);
+// parmsTab.setControl(parmsList);
+// GridData parmsListGD = new GridData(SWT.FILL, SWT.FILL, true, true);
+// parmsListGD.horizontalSpan = 2;
+// parmsList.setLayoutData(parmsListGD);
+//
+// headerTab = new TabItem(tabGroup, SWT.NONE, 2);
+// bodyText = new Text(tabGroup, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
+// GridData btGridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+// bodyText.setLayoutData(btGridData);
+// bodyTab.setControl(bodyText);
+//
+// headerTab.setText(JBossWSUIMessages.JAXRSWSTestView_Request_Header_Label);
+// GridData hgGridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+// hgGridData.horizontalSpan = 2;
+// tabGroup.setLayoutData(hgGridData);
+//
+// dlsList = new DelimitedStringList(tabGroup, SWT.None);
+// headerTab.setControl(dlsList);
+// GridData dlsListGD = new GridData(SWT.FILL, SWT.FILL, true, true);
+// dlsListGD.horizontalSpan = 2;
+// dlsList.setLayoutData(dlsListGD);
+//
+// Composite buttonBar = new Composite ( topHalf, SWT.NONE);
+// GridData buttonBarGD = new GridData(SWT.FILL, SWT.NONE, true, false);
+// buttonBarGD.horizontalSpan = 2;
+// buttonBar.setLayoutData(buttonBarGD);
+// buttonBar.setLayout(new RowLayout());
+//
+// testButton = new Button (buttonBar, SWT.PUSH);
+// testButton.setText(JBossWSUIMessages.JAXRSWSTestView_Invoke_Label);
+//
+// testButton.addSelectionListener(new SelectionListener() {
+// public void widgetSelected(SelectionEvent e) {
+// handleTest(wsTypeCombo.getText());
+// }
+// public void widgetDefaultSelected(SelectionEvent e) {
+// widgetSelected(e);
+// }
+// });
+//
+// wsdlButton = new Button (buttonBar, SWT.PUSH);
+// wsdlButton.setText(JBossWSUIMessages.JAXRSWSTestView_Button_Get_From_WSDL);
+//
+// wsdlButton.addSelectionListener(new SelectionListener() {
+// public void widgetSelected(SelectionEvent e) {
+// WSDLBrowseDialog wbDialog = new WSDLBrowseDialog(getSite().getShell());
+// int rtnCode = wbDialog.open();
+// if (rtnCode == Window.OK){
+// serviceNSMessage = null;
+// Definition wsdlDef = wbDialog.getWSDLDefinition();
+// String output = TesterWSDLUtils.getSampleSOAPInputMessage(wsdlDef,
+// wbDialog.getServiceTextValue(),
+// wbDialog.getPortTextValue(),
+// wbDialog.getBindingValue(),
+// wbDialog.getOperationTextValue());
+// String endpointURL = TesterWSDLUtils.getEndpointURL(wsdlDef,
+// wbDialog.getServiceTextValue(),
+// wbDialog.getPortTextValue(),
+// wbDialog.getBindingValue(),
+// wbDialog.getOperationTextValue());
+// String actionURL = TesterWSDLUtils.getActionURL(wsdlDef,
+// wbDialog.getServiceTextValue(),
+// wbDialog.getPortTextValue(),
+// wbDialog.getBindingValue(),
+// wbDialog.getOperationTextValue());
+// serviceNSMessage = TesterWSDLUtils.getNSServiceNameAndMessageNameArray(wsdlDef,
+// wbDialog.getServiceTextValue(),
+// wbDialog.getPortTextValue(),
+// wbDialog.getBindingValue(),
+// wbDialog.getOperationTextValue());
+// String soapIn = generateSampleSOAP(output);
+// bodyText.setText(soapIn);
+// urlCombo.setText(endpointURL);
+// actionText.setText(actionURL);
+// setControlsForWSType(wsTypeCombo.getText());
+// setControlsForMethodType(methodCombo.getText());
+// setControlsForSelectedURL();
+// }
+// }
+// public void widgetDefaultSelected(SelectionEvent e) {
+// widgetSelected(e);
+// }
+// });
+//
+// addTCPIPMonitorButton = new Button(buttonBar, SWT.PUSH);
+// addTCPIPMonitorButton.setText(JBossWSUIMessages.JAXRSWSTestView_Configure_Monitor_Button);
+//
+// addTCPIPMonitorButton.addSelectionListener(new SelectionListener() {
+// public void widgetSelected(SelectionEvent e) {
+// configureMonitor();
+// }
+// public void widgetDefaultSelected(SelectionEvent e) {
+// widgetSelected(e);
+// }
+// });
+//
+// openTCPIPMonitorButton = new Button(buttonBar, SWT.PUSH);
+// openTCPIPMonitorButton.setText(JBossWSUIMessages.JAXRSWSTestView_Open_Monitor_Button);
+//
+// openTCPIPMonitorButton.addSelectionListener(new SelectionListener() {
+// public void widgetSelected(SelectionEvent e) {
+// openMonitor();
+// }
+// public void widgetDefaultSelected(SelectionEvent e) {
+// widgetSelected(e);
+// }
+// });
+//
+// Button sampleButton = new Button(buttonBar, SWT.PUSH);
+// sampleButton.setText(JBossWSUIMessages.JAXRSWSTestView_Set_Sample_Data_Label);
+// sampleButton.setVisible(showSampleButton);
+//
+// sampleButton.addSelectionListener(new SelectionListener() {
+// public void widgetSelected(SelectionEvent e) {
+// setupSample();
+// }
+// public void widgetDefaultSelected(SelectionEvent e) {
+// widgetSelected(e);
+// }
+// });
+//
+// Composite bottomHalf = new Composite (sashForm, SWT.NONE);
+// bottomHalf.setLayout(new GridLayout(2, false));
+//
+// resultTabGroup = new TabFolder(bottomHalf, SWT.BORDER);
+// GridData rtGridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+// rtGridData.horizontalSpan = 2;
+// resultTabGroup.setLayoutData(rtGridData);
+//
+// resultTab = new TabItem(resultTabGroup, SWT.NONE, 0);
+// resultTab.setText(JBossWSUIMessages.JAXRSWSTestView_Results_Body_Label);
+// resultsText = new Text(resultTabGroup, SWT.BORDER | SWT.V_SCROLL | SWT.WRAP | SWT.READ_ONLY );
+// resultsText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+//
+// resultsTextMenu = new Menu(resultsText.getShell(), SWT.POP_UP);
+//
+// copyMenuAction = new MenuItem(resultsTextMenu, SWT.PUSH);
+// copyMenuAction.setText(JBossWSUIMessages.JAXRSWSTestView_CopyResultsMenu);
+// copyMenuAction.setAccelerator(SWT.CTRL + 'C');
+// copyMenuAction.addSelectionListener(new SelectionListener(){
+//
+// public void widgetDefaultSelected(SelectionEvent arg0) {
+// if (resultsText.getSelectionCount() == 0)
+// resultsText.selectAll();
+// resultsText.copy();
+// }
+//
+// public void widgetSelected(SelectionEvent arg0) {
+// widgetDefaultSelected(arg0);
+// }
+// });
+// new MenuItem(resultsTextMenu, SWT.SEPARATOR);
+//
+// openInXMLEditorAction = new MenuItem(resultsTextMenu, SWT.PUSH);
+// openInXMLEditorAction.setText(JBossWSUIMessages.JAXRSWSTestView_Open_Result_in_XML_Editor);
+// openInXMLEditorAction.setAccelerator(SWT.CTRL + 'O');
+// openInXMLEditorAction.addSelectionListener(new SelectionListener() {
+//
+// public void widgetSelected(SelectionEvent arg0) {
+// String string = resultsText.getText();
+// openXMLEditor(string);
+// }
+//
+// public void widgetDefaultSelected(SelectionEvent arg0) {
+// widgetSelected(arg0);
+// }
+// });
+//
+// openResponseTagInXMLEditor = new MenuItem(resultsTextMenu, SWT.PUSH);
+// openResponseTagInXMLEditor.setText(JBossWSUIMessages.JAXRSWSTestView_Open_Response_Tag_Contents_in_XML_Editor);
+// openResponseTagInXMLEditor.setAccelerator(SWT.CTRL + 'R');
+// openResponseTagInXMLEditor.addSelectionListener(new SelectionListener() {
+//
+// public void widgetSelected(SelectionEvent arg0) {
+// String string = null;
+// try {
+// SOAPBody body = null;
+// if (envelope != null){
+// body = envelope.getBody();
+// } else if (soapbody != null) {
+// body = soapbody;
+// }
+//
+// NodeList list = body.getChildNodes();
+// for (int i = 0; i< list.getLength(); i++){
+// Node node = list.item(i);
+// if (node.getNodeName().contains("Response")){ //$NON-NLS-1$
+// NodeList list2 = node.getChildNodes();
+// for (int j = 0; j<list2.getLength(); j++){
+// Node node2 = list2.item(j);
+// if (node2.getNodeName().contains("Result")){ //$NON-NLS-1$
+// Node node3 = node2.getChildNodes().item(0);
+// if (node3.getNodeType() == Node.TEXT_NODE) {
+// string = node3.getNodeValue();
+// break;
+// } else if (node3.getNodeType() == Node.ELEMENT_NODE) {
+// Element element = (Element) node3;
+// string = XMLUtils.ElementToString(element);
+// break;
+// }
+// }
+// }
+// if (string != null) break;
+// }
+// }
+// if (string != null){
+// openXMLEditor(string);
+// }
+// } catch (SOAPException e) {
+// JBossWSUIPlugin.log(e);
+// }
+// }
+//
+// public void widgetDefaultSelected(SelectionEvent arg0) {
+// widgetSelected(arg0);
+// }
+// });
+//
+// resultsText.setMenu(resultsTextMenu);
+//
+// resultTab.setControl(resultsText);
+//
+// resultsText.addFocusListener(new FocusListener() {
+//
+// public void focusLost(FocusEvent arg0) {
+// }
+//
+// public void focusGained(FocusEvent arg0) {
+// setMenusForCurrentState();
+// }
+// });
+//
+// resultHeadersTab = new TabItem(resultTabGroup, SWT.NONE, 1);
+// resultHeadersTab.setText(JBossWSUIMessages.JAXRSWSTestView_Results_Header_Label);
+// resultHeadersList = new List(resultTabGroup, SWT.V_SCROLL);
+// resultHeadersTab.setControl(resultHeadersList);
+// GridData rdlsListGD = new GridData(SWT.FILL, SWT.FILL, true, true);
+// rdlsListGD.horizontalSpan = 2;
+// resultHeadersList.setLayoutData(dlsListGD);
+//
+// resultsHeaderMenu = new Menu(resultHeadersList.getShell(), SWT.POP_UP);
+//
+// copyResultHeaderMenuAction = new MenuItem(resultsHeaderMenu, SWT.PUSH);
+// copyResultHeaderMenuAction.setText(JBossWSUIMessages.JAXRSWSTestView_CopyResultMenu_Text);
+// copyResultHeaderMenuAction.setAccelerator(SWT.CTRL + 'C');
+// copyResultHeaderMenuAction.addSelectionListener(new SelectionListener(){
+//
+// public void widgetDefaultSelected(SelectionEvent arg0) {
+// if (resultHeadersList.getSelectionCount() == 0)
+// resultHeadersList.selectAll();
+// Display display = Display.getDefault();
+// final Clipboard cb = new Clipboard(display);
+// TextTransfer textTransfer = TextTransfer.getInstance();
+// cb.setContents(resultHeadersList.getSelection() ,
+// new Transfer[] { textTransfer });
+// }
+//
+// public void widgetSelected(SelectionEvent arg0) {
+// widgetDefaultSelected(arg0);
+// }
+// });
+//
+// resultHeadersList.setMenu(resultsHeaderMenu);
+//
+// resultHeadersList.addMouseListener(new MouseListener() {
+// public void mouseDoubleClick(MouseEvent arg0) {
+// }
+// public void mouseDown(MouseEvent arg0) {
+// setMenusForCurrentState();
+// }
+// public void mouseUp(MouseEvent arg0) {
+// }
+// });
+//
+// wsTypeCombo.setText(JAX_WS);
+// setControlsForWSType(wsTypeCombo.getText());
+// setControlsForMethodType(methodCombo.getText());
+// setControlsForSelectedURL();
+// setMenusForCurrentState();
+ }
+
+ @Override
+ public void dispose() {
+ toolkit.dispose();
+ mImageRegistry.dispose();
+ super.dispose();
+ }
+
+ private String generateSampleSOAP ( String innerText ) {
+ String soapIn = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\n" + //$NON-NLS-1$
+ "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" " + //$NON-NLS-1$
+ "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + //$NON-NLS-1$
+ "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " + //$NON-NLS-1$
+ ">\n" + //$NON-NLS-1$
+ "<soap:Body>\n";//$NON-NLS-1$
+ if (innerText != null)
+ soapIn = soapIn + innerText;
+ soapIn = soapIn +
+ "</soap:Body>\n" + //$NON-NLS-1$
+ "</soap:Envelope>"; //$NON-NLS-1$
+ return soapIn;
+ }
+
+ private void setMenusForCurrentState() {
+ if (resultsText!= null && !resultsText.isDisposed()){
+ boolean enabled = resultsText.getText().trim().length() > 0;
+ copyMenuAction.setEnabled(enabled);
+ openInXMLEditorAction.setEnabled(enabled);
+ if (wsTypeCombo.getText().equalsIgnoreCase(JAX_WS)) {
+ openResponseTagInXMLEditor.setEnabled(enabled);
+ } else if (wsTypeCombo.getText().equalsIgnoreCase(JAX_RS) ){
+ openResponseTagInXMLEditor.setEnabled(false);
+ }
+ }
+ if (resultHeadersList != null && !resultHeadersList.isDisposed()) {
+ boolean enabled = resultHeadersList.getItemCount() > 0;
+ copyResultHeaderMenuAction.setEnabled(enabled);
+ }
+ }
+
+ private void openXMLEditor (String text){
+ IWorkbenchWindow window = getSite().getWorkbenchWindow();
+ IStorage storage = new ResultsXMLStorage(text);
+ IStorageEditorInput input = new ResultsXMLStorageInput(storage);
+ IWorkbenchPage page = window.getActivePage();
+ if (page != null) {
+ try {
+ if (window.getWorkbench().getEditorRegistry().findEditor(XML_EDITOR_ID) != null) {
+ page.openEditor(input, XML_EDITOR_ID);
+ } else {
+ page.openEditor(input, DEFAULT_TEXT_EDITOR_ID);
+ }
+ } catch (PartInitException e) {
+ JBossWSUIPlugin.log(e);
+ }
+ }
+ }
+
+ private void setControlsForSelectedURL() {
+ if (urlCombo.getText().trim().length() > 0) {
+ String urlText = urlCombo.getText();
+ try {
+ new URL(urlText);
+ testButton.setEnabled(true);
+ addTCPIPMonitorButton.setEnabled(true);
+ } catch (MalformedURLException mue) {
+ testButton.setEnabled(false);
+ addTCPIPMonitorButton.setEnabled(false);
+
+ return;
+ }
+ } else {
+ testButton.setEnabled(false);
+ addTCPIPMonitorButton.setEnabled(false);
+ }
+ }
+
+ /*
+ * Open the TCP/IP Monitor View
+ */
+ private void openMonitor() {
+ try {
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().
+ getActivePage().showView(TCPIP_VIEW_ID);
+ } catch (PartInitException e) {
+ JBossWSUIPlugin.log(e);
+ }
+ }
+
+ private IMonitor findMonitor(String urlToCheck) {
+ IMonitor monitor = null;
+
+ IMonitor[] monitors = MonitorCore.getMonitors();
+ if (monitors != null && monitors.length > 0) {
+ for (int i= 0; i < monitors.length; i++) {
+ if (urlToCheck.contains(monitors[i].getRemoteHost())) {
+ monitor = monitors[i];
+ break;
+ }
+ }
+ }
+ return monitor;
+ }
+
+ /*
+ * Configure a TCP/IP Monitor entry so we can monitor it
+ */
+ private void configureMonitor() {
+ if (urlCombo.getText().trim().length() > 0) {
+ String oldUrl = urlCombo.getText();
+ IMonitor monitor = findMonitor(oldUrl);
+ if (monitor == null) {
+
+ URL tempURL = null;
+ try {
+ tempURL = new URL(oldUrl);
+ } catch (MalformedURLException e) {
+ // ignore
+ }
+ AddMonitorDialog dialog = new AddMonitorDialog(getSite().getShell());
+ if (tempURL != null) {
+ dialog.getMonitor().setRemoteHost(tempURL.getHost());
+ if (tempURL.getPort() > 0)
+ dialog.getMonitor().setRemotePort(tempURL.getPort());
+ }
+ if (dialog.open() == Window.CANCEL)
+ return;
+ monitor = dialog.getMonitor();
+ }
+
+ if (monitor != null) {
+ monitor = findMonitor(oldUrl);
+ if (monitor != null) {
+ if (!monitor.isRunning()) {
+ try {
+ monitor.start();
+ int port = monitor.getLocalPort();
+ int remotePort = monitor.getRemotePort();
+ String host = monitor.getRemoteHost();
+ String newUrl = null;
+ if (oldUrl.contains(host + ':' + remotePort)) {
+ newUrl = oldUrl.replace(host + ':' + remotePort, "localhost:" + port); //$NON-NLS-1$
+ } else if (oldUrl.contains(host + ':' + port)) {
+ // do nothing - host/port combo is already correct
+ newUrl = oldUrl;
+ } else {
+ newUrl = oldUrl.replace(host, "localhost:" + port); //$NON-NLS-1$
+ }
+ urlCombo.setText(newUrl);
+ } catch (CoreException e) {
+ // if we hit an error, open a dialog
+ ErrorDialog dialog = new ErrorDialog(this.getSite().getShell(),
+ JBossWSUIMessages.JAXRSWSTestView_Error_Title_Starting_Monitor,
+ JBossWSUIMessages.JAXRSWSTestView_Error_Msg_Starting_Monitor,
+ new Status(IStatus.ERROR, JBossWSUIPlugin.PLUGIN_ID,
+ e.getLocalizedMessage(), e), IStatus.ERROR);
+ dialog.open();
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /*
+ * Enable/disable controls based on the WS technology type
+ * and the method.
+ *
+ * @param methodType
+ */
+ private void setControlsForMethodType ( String methodType ) {
+ if (wsTypeCombo.getText().equalsIgnoreCase(JAX_RS) &&
+ methodType.equalsIgnoreCase(GET)) {
+ bodyText.setEnabled(false);
+ } else {
+ bodyText.setEnabled(true);
+ }
+ }
+
+ /*
+ * Enable/disable controls based on the WS technology type
+ * @param wsType
+ */
+ private void setControlsForWSType ( String wsType ) {
+ if (wsType.equalsIgnoreCase(JAX_WS)) {
+ actionText.setEnabled(true);
+ bodyText.setEnabled(true);
+ methodCombo.setEnabled(false);
+ parmsList.setEnabled(false);
+ parmsList.removeAll();
+ dlsList.setEnabled(false);
+ parmsTab.getControl().setEnabled(false);
+ headerTab.getControl().setEnabled(true);
+ methodCombo.setText(POST);
+
+ String emptySOAP = "<?xml version=\"1.0\" standalone=\"yes\" ?>" + //$NON-NLS-1$
+ "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" " + //$NON-NLS-1$
+ "xmlns:ns=\"INSERT_URL_HERE\">" + //$NON-NLS-1$
+ "<soap:Body>" + //$NON-NLS-1$
+ "</soap:Body>" + //$NON-NLS-1$
+ "</soap:Envelope>"; //$NON-NLS-1$
+ emptySOAP = WSTestUtils.addNLsToXML(emptySOAP);
+
+ if (bodyText.getText().trim().length() == 0) {
+ bodyText.setText(emptySOAP);
+ }
+ wsdlButton.setEnabled(true);
+ }
+ else if (wsType.equalsIgnoreCase(JAX_RS)) {
+ actionText.setEnabled(false);
+ bodyText.setEnabled(true);
+ methodCombo.setEnabled(true);
+ parmsList.setEnabled(true);
+ dlsList.setEnabled(true);
+ parmsTab.getControl().setEnabled(true);
+ headerTab.getControl().setEnabled(true);
+ methodCombo.setText(GET);
+ wsdlButton.setEnabled(false);
+
+ if (bodyText.getText().trim().length() > 0) {
+ bodyText.setText(""); //$NON-NLS-1$
+ }
+ }
+ setMenusForCurrentState();
+ }
+
+ /*
+ * Sets up the controls to call a public sample RESTful WS that does
+ * a postal code lookup or a JAX-WS service that does a
+ * Shakespeare lookup.
+ */
+ private void setupSample() {
+ // go to http://www.geonames.org/export/web-services.html for example
+ //http://ws.geonames.org/postalCodeSearch?postalcode=9011&maxRows=10
+ if (wsTypeCombo.getText().equalsIgnoreCase(JAX_RS)) {
+ urlCombo.setText("http://ws.geonames.org/postalCodeSearch?"); //$NON-NLS-1$
+ parmsList.setSelection("postalcode=80920,maxRows=10"); //$NON-NLS-1$
+ dlsList.setSelection("content-type=application/xml"); //$NON-NLS-1$
+ methodCombo.setText(GET);
+ tabGroup.setSelection(parmsTab);
+ bodyText.setText(EMPTY_STRING);
+ }
+ else if (wsTypeCombo.getText().equalsIgnoreCase(JAX_WS)) {
+ String soapIn = "<?xml version=\"1.0\" standalone=\"yes\" ?>" + //$NON-NLS-1$
+ "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" " + //$NON-NLS-1$
+ "xmlns:ns=\"http://xmlme.com/WebServices\">" + //$NON-NLS-1$
+ "<soap:Body>" + //$NON-NLS-1$
+ "<ns:GetSpeech>" + //$NON-NLS-1$
+ "<ns:Request>slings and arrows</ns:Request>"+ //$NON-NLS-1$
+ "</ns:GetSpeech>"+ //$NON-NLS-1$
+ "</soap:Body>" + //$NON-NLS-1$
+ "</soap:Envelope>"; //$NON-NLS-1$
+ soapIn = WSTestUtils.addNLsToXML(soapIn);
+
+ urlCombo.setText("http://www.xmlme.com/WSShakespeare.asmx"); //$NON-NLS-1$
+ actionText.setText("http://xmlme.com/WebServices/GetSpeech"); //$NON-NLS-1$
+ bodyText.setText(soapIn);
+ parmsList.setSelection(EMPTY_STRING);
+ dlsList.setSelection(EMPTY_STRING);
+ tabGroup.setSelection(bodyTab);
+ }
+ setControlsForWSType(wsTypeCombo.getText());
+ setControlsForMethodType(methodCombo.getText());
+ setControlsForSelectedURL();
+ }
+
+ /*
+ * Actually perform the test based on which type of activity it is
+ */
+ private void handleTest(final String wsTech) {
+
+ String urlText = urlCombo.getText();
+ try {
+ new URL(urlText);
+ } catch (MalformedURLException mue) {
+ // do nothing, but return since we don't have a working URL
+ return;
+ }
+
+ if (urlCombo.getItemCount() > 0) {
+ java.util.List<String> aList = Arrays.asList(urlCombo.getItems());
+ if (!aList.contains(urlCombo.getText())) {
+ urlCombo.add(urlCombo.getText());
+ }
+ } else {
+ urlCombo.add(urlCombo.getText());
+ }
+
+ final String url = urlCombo.getText();
+ final String action = actionText.getText();
+ final String body = bodyText.getText();
+ final String method = methodCombo.getText();
+ final String headers = dlsList.getSelection();
+ final String parms = parmsList.getSelection();
+
+ Job aJob = new Job(JBossWSUIMessages.JAXRSWSTestView_Invoking_WS_Status) {
+ protected IStatus run(IProgressMonitor monitor) {
+ IStatus status = Status.OK_STATUS;
+ // execute the task ...
+ if (wsTech.equalsIgnoreCase(JAX_RS)) {
+ status = handleRSTest(monitor, url, method, body, parms, headers);
+ }
+ else if (wsTech.equalsIgnoreCase(JAX_WS)) {
+ status = handleWSTest(monitor, url, action, body);
+ }
+ monitor.done();
+ return status;
+ }
+ };
+ // true to indicate that this job was initiated by a UI end user
+ aJob.setUser(true);
+ aJob.addJobChangeListener(new IJobChangeListener() {
+
+ public void sleeping(IJobChangeEvent event) {};
+ public void scheduled(IJobChangeEvent event) {};
+ public void running(IJobChangeEvent event) {};
+ public void done(final IJobChangeEvent event) {
+ if (event.getResult() instanceof WSTestStatus) {
+ final WSTestStatus status = (WSTestStatus) event.getResult();
+ PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
+ public void run() {
+ if (status.getResultsText() != null)
+ resultsText.setText(status.getResultsText());
+ else if (status.getMessage() != null)
+ resultsText.setText(status.getMessage());
+ resultHeadersList.removeAll();
+ String[] headers =
+ DelimitedStringList.parseString(status.getHeadersList(), RESULT_HEADER_DELIMITER);
+ if (headers != null && headers.length > 0) {
+ for (int i = 0; i < headers.length; i++) {
+ resultHeadersList.add(headers[i]);
+ }
+ }
+ }
+ });
+ }
+ }
+
+ public void awake(IJobChangeEvent event) {};
+ public void aboutToRun(IJobChangeEvent event) {};
+ });
+ aJob.schedule();
+
+ setMenusForCurrentState();
+ }
+
+ /*
+ * Actually call the WS and displays the result
+ */
+ private IStatus handleWSTest(final IProgressMonitor monitor, String url, String action, String body) {
+ try {
+
+ envelope = null;
+ soapbody = null;
+ monitor.worked(10);
+// JAXWSTester tester = new JAXWSTester();
+// tester.doTest(url, action, body);
+ JAXWSTester2 tester = new JAXWSTester2();
+ boolean itRan = false;
+ while (!monitor.isCanceled()) {
+ try {
+ if (!itRan && serviceNSMessage != null && serviceNSMessage.length == 3) {
+ itRan = true;
+ // call the service
+ tester.doTest(monitor, url, action, serviceNSMessage[0], serviceNSMessage[1], serviceNSMessage[2], body);
+ } else {
+ break;
+ }
+ } catch (InterruptedException ie) {
+ monitor.setCanceled(true);
+ }
+ }
+ if (monitor.isCanceled()) {
+ WSTestStatus status = new WSTestStatus(IStatus.OK,
+ JBossWSUIPlugin.PLUGIN_ID,
+ JBossWSUIMessages.JAXRSWSTestView_Message_Service_Invocation_Cancelled);
+ return status;
+ }
+ if (!itRan) {
+ WSTestStatus status = new WSTestStatus(IStatus.OK,
+ JBossWSUIPlugin.PLUGIN_ID,
+ JBossWSUIMessages.JAXRSWSTestView_Message_Unsuccessful_Test);
+ return status;
+ }
+// tester.doTest(url, action, serviceNSMessage[0], serviceNSMessage[1], serviceNSMessage[2], body);
+ monitor.worked(70);
+ String result = tester.getResultBody();
+ envelope = tester.getResultSOAP();
+ soapbody = tester.getResultSOAPBody();
+ String cleanedUp = WSTestUtils.addNLsToXML(result);
+
+ WSTestStatus status = new WSTestStatus(IStatus.OK,
+ JBossWSUIPlugin.PLUGIN_ID,
+ JBossWSUIMessages.JAXRSWSTestView_JAXWS_Success_Status);
+ status.setResultsText(cleanedUp);
+ monitor.worked(10);
+
+ String listText = EMPTY_STRING;
+ if (tester.getResultHeaders() != null) {
+ Iterator<?> iter = tester.getResultHeaders().entrySet().iterator();
+ while (iter.hasNext()) {
+ String text = EMPTY_STRING;
+ Entry<?, ?> entry = (Entry<?, ?>) iter.next();
+ if (entry.getKey() == null)
+ text = entry.getValue().toString();
+ else
+ text = text + entry.toString();
+ listText = listText + text;
+ if (iter.hasNext()) {
+ listText = listText + RESULT_HEADER_DELIMITER;
+ }
+ }
+ }
+ status.setHeadersList(listText);
+ monitor.worked(10);
+ return status;
+ } catch (Exception e) {
+ WSTestStatus status = new WSTestStatus(IStatus.OK,
+ JBossWSUIPlugin.PLUGIN_ID,
+ JBossWSUIMessages.JAXRSWSTestView_Exception_Status + e.getLocalizedMessage());
+ status.setResultsText(e.toString());
+ JBossWSUIPlugin.log(e);
+ return status;
+ }
+ }
+
+ /*
+ * Actually call the RESTful WS to test it
+ */
+ private IStatus handleRSTest(final IProgressMonitor monitor, String address, String method, String body, String parms, String headersStr) {
+
+ if (method.equalsIgnoreCase(GET))
+ body = EMPTY_STRING;
+
+ // if no actual text in the request body, set to null
+ if (body.trim().length() == 0) body = null;
+
+ monitor.worked(10);
+
+ // Process parameters for web service call
+ HashMap<String, String> parameters = new HashMap<String, String>();
+ if (parms != null && parms.length() > 0) {
+ String[] parsedList = DelimitedStringList.parseString(parms , ","); //$NON-NLS-1$
+ if (parsedList != null && parsedList.length > 0) {
+ for (int i = 0; i < parsedList.length; i++) {
+ String nameValuePair = parsedList[i];
+ String[] nameAndValue = DelimitedStringList.parseString(nameValuePair, "="); //$NON-NLS-1$
+ if (nameAndValue != null && nameAndValue.length == 2) {
+ parameters.put(nameAndValue[0], nameAndValue[1]);
+ }
+ }
+ }
+ }
+
+ monitor.worked(10);
+ // Process headers for web service call
+ HashMap<String, String> headers = new HashMap<String, String>();
+ if (headersStr != null && headersStr.length() > 0) {
+ String[] parsedList = DelimitedStringList.parseString(headersStr , ","); //$NON-NLS-1$
+ if (parsedList != null && parsedList.length > 0) {
+ for (int i = 0; i < parsedList.length; i++) {
+ String nameValuePair = parsedList[i];
+ String[] nameAndValue = DelimitedStringList.parseString(nameValuePair, "="); //$NON-NLS-1$
+ if (nameAndValue != null && nameAndValue.length == 2) {
+ headers.put(nameAndValue[0], nameAndValue[1]);
+ }
+ }
+ }
+ }
+
+ JAXRSTester tester = new JAXRSTester();
+
+ // now actually call it
+ try {
+
+ // call the service
+ tester.doTest(address, parameters, headers, method, body);
+
+ String result = tester.getResultBody();
+
+ // put the results in the result text field
+ String cleanedUp = WSTestUtils.addNLsToXML(result);
+
+ WSTestStatus status = new WSTestStatus(IStatus.OK,
+ JBossWSUIPlugin.PLUGIN_ID,
+ JBossWSUIMessages.JAXRSWSTestView_JAXRS_Success_Status);
+ status.setResultsText(cleanedUp);
+
+ String listText = EMPTY_STRING;
+ if (tester.getResultHeaders() != null) {
+ Iterator<?> iter = tester.getResultHeaders().entrySet().iterator();
+ while (iter.hasNext()) {
+ String text = EMPTY_STRING;
+ Entry<?, ?> entry = (Entry<?, ?>) iter.next();
+ if (entry.getKey() == null)
+ text = entry.getValue().toString();
+ else
+ text = text + entry.toString();
+ listText = listText + text;
+ if (iter.hasNext()) {
+ listText = listText + RESULT_HEADER_DELIMITER;
+ }
+ }
+ }
+
+ status.setHeadersList(listText);
+ monitor.worked(10);
+ return status;
+
+ } catch (Exception e) {
+ String result = tester.getResultBody();
+
+ // put the results in the result text field
+ String cleanedUp = WSTestUtils.addNLsToXML(result);
+
+ WSTestStatus status = new WSTestStatus(IStatus.OK,
+ JBossWSUIPlugin.PLUGIN_ID,
+ JBossWSUIMessages.JAXRSWSTestView_JAXRS_Success_Status);
+ status.setResultsText(cleanedUp);
+
+ String listText = EMPTY_STRING;
+ if (tester.getResultHeaders() != null) {
+ Iterator<?> iter = tester.getResultHeaders().entrySet().iterator();
+ while (iter.hasNext()) {
+ String text = EMPTY_STRING;
+ Entry<?, ?> entry = (Entry<?, ?>) iter.next();
+ if (entry.getKey() == null)
+ text = entry.getValue().toString();
+ else
+ text = text + entry.toString();
+ listText = listText + text;
+ if (iter.hasNext()) {
+ listText = listText + RESULT_HEADER_DELIMITER;
+ }
+ }
+ }
+
+ status.setHeadersList(listText);
+ monitor.worked(10);
+ return status;
+ }
+ }
+
+ /**
+ * Passing the focus request to the control.
+ */
+ public void setFocus() {
+ // set initial focus to the URL text combo
+// urlCombo.setFocus();
+ form.setFocus();
+ }
+
+}
\ No newline at end of file
Property changes on: trunk/ws/plugins/org.jboss.tools.ws.ui/JAXRSWSTestView2.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/ws/plugins/org.jboss.tools.ws.ui/META-INF/MANIFEST.MF
===================================================================
--- trunk/ws/plugins/org.jboss.tools.ws.ui/META-INF/MANIFEST.MF 2010-07-13 18:53:45 UTC (rev 23387)
+++ trunk/ws/plugins/org.jboss.tools.ws.ui/META-INF/MANIFEST.MF 2010-07-13 20:52:54 UTC (rev 23388)
@@ -30,7 +30,8 @@
org.eclipse.wst.internet.monitor.ui,
javax.wsdl;bundle-version="1.6.2",
org.jdom,
- javax.xml.ws
+ javax.xml.ws,
+ org.eclipse.ui.forms
Bundle-ActivationPolicy: lazy
Export-Package: org.jboss.tools.ws.ui,
org.jboss.tools.ws.ui.messages,
Added: trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/binary.gif
===================================================================
(Binary files differ)
Property changes on: trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/binary.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/properties.gif
===================================================================
(Binary files differ)
Property changes on: trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/properties.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/run.gif
===================================================================
(Binary files differ)
Property changes on: trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/run.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/save_edit.gif
===================================================================
(Binary files differ)
Property changes on: trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/save_edit.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/web.gif
===================================================================
(Binary files differ)
Property changes on: trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/web.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/wsdl.gif
===================================================================
(Binary files differ)
Property changes on: trunk/ws/plugins/org.jboss.tools.ws.ui/icons/obj16/wsdl.gif
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/ws/plugins/org.jboss.tools.ws.ui/plugin.xml
===================================================================
--- trunk/ws/plugins/org.jboss.tools.ws.ui/plugin.xml 2010-07-13 18:53:45 UTC (rev 23387)
+++ trunk/ws/plugins/org.jboss.tools.ws.ui/plugin.xml 2010-07-13 20:52:54 UTC (rev 23388)
@@ -74,7 +74,7 @@
</category>
<view
category="org.jboss.tools.ws.ui.tester"
- class="org.jboss.tools.ws.ui.views.JAXRSWSTestView"
+ class="org.jboss.tools.ws.ui.views.JAXRSWSTestView2"
icon="icons/obj16/ws_tester.gif"
id="org.jboss.tools.ws.ui.tester.views.TestWSView"
name="%test.view.name">
Modified: trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/messages/JBossWSUI.properties
===================================================================
--- trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/messages/JBossWSUI.properties 2010-07-13 18:53:45 UTC (rev 23387)
+++ trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/messages/JBossWSUI.properties 2010-07-13 20:52:54 UTC (rev 23388)
@@ -105,6 +105,20 @@
JAXRSWSTestView_Service_URL_Label=Service URL:
JAXRSWSTestView_Set_Sample_Data_Label=Set Sample Data
JAXRSWSTestView_Web_Service_Type_Label=Web Service Type:
+JAXRSWSTestView2_BodyText_Section=Body Text
+JAXRSWSTestView2_GetFromWSDL_Tooltip=Get from WSDL
+JAXRSWSTestView2_Go_Tooltip=Invoke
+JAXRSWSTestView2_Headers_Section=Headers
+JAXRSWSTestView2_OpenInEditor_Action=Open in Editor
+JAXRSWSTestView2_Parameters_Section=Parameters
+JAXRSWSTestView2_RequestDetails_Section=Request Details
+JAXRSWSTestView2_ResponseBody_Section=Response Body
+JAXRSWSTestView2_ResponseDetails_Section=Response Details
+JAXRSWSTestView2_ResponseHeaders_Section=Response Headers
+JAXRSWSTestView2_SaveResponseText_Error=Error Writing Response to File
+JAXRSWSTestView2_SaveResponseText_tooltip=Save to File
+JAXRSWSTestView2_ShowInBrowser_Tooltip=Show in Browser
+JAXRSWSTestView2_ShowRaw_Tooltip=Show Raw
ResultsXMLStorageInput_WS_Invocation_Results_Prefix=Web Service Invocation Results\:
WSDLBrowseDialog_Dialog_Title=Select WSDL
WSDLBrowseDialog_FS_Browse=File system...
@@ -124,6 +138,8 @@
WSDLBrowseDialog_WSDL_URI_Field=WSDL URI:
WSDLBrowseDialog_WSDL_URL_Dialog_Title=WSDL URL
WSDLBrowseDialog_WSDL_URL_Prompt=Type the URL for the WSDL:
+WSTestUtils_SaveResponseText_Error_Msg=Error encountered writing response text to file.
+WSTestUtils_SaveResponseText_Title=Save Response Text
DelimitedStringList_Msg_No_Btn=No
DelimitedStringList_Msg_Text_ParseByAmpersand=Should we parse the string to be added by ampersands '&&' and add each individual string?
DelimitedStringList_Msg_Text_ParseByComma=Should we parse the string to be added by commas ',' and add each individual string?
Modified: trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/messages/JBossWSUIMessages.java
===================================================================
--- trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/messages/JBossWSUIMessages.java 2010-07-13 18:53:45 UTC (rev 23387)
+++ trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/messages/JBossWSUIMessages.java 2010-07-13 20:52:54 UTC (rev 23388)
@@ -136,6 +136,20 @@
public static String JAXRSWSTestView_Service_URL_Label;
public static String JAXRSWSTestView_Set_Sample_Data_Label;
public static String JAXRSWSTestView_Web_Service_Type_Label;
+ public static String JAXRSWSTestView2_BodyText_Section;
+ public static String JAXRSWSTestView2_GetFromWSDL_Tooltip;
+ public static String JAXRSWSTestView2_Go_Tooltip;
+ public static String JAXRSWSTestView2_Headers_Section;
+ public static String JAXRSWSTestView2_OpenInEditor_Action;
+ public static String JAXRSWSTestView2_Parameters_Section;
+ public static String JAXRSWSTestView2_RequestDetails_Section;
+ public static String JAXRSWSTestView2_ResponseBody_Section;
+ public static String JAXRSWSTestView2_ResponseDetails_Section;
+ public static String JAXRSWSTestView2_ResponseHeaders_Section;
+ public static String JAXRSWSTestView2_SaveResponseText_Error;
+ public static String JAXRSWSTestView2_SaveResponseText_tooltip;
+ public static String JAXRSWSTestView2_ShowInBrowser_Tooltip;
+ public static String JAXRSWSTestView2_ShowRaw_Tooltip;
public static String ResultsXMLStorageInput_WS_Invocation_Results_Prefix;
public static String WSDLBrowseDialog_Dialog_Title;
@@ -157,6 +171,9 @@
public static String WSDLBrowseDialog_WSDL_URL_Dialog_Title;
public static String WSDLBrowseDialog_WSDL_URL_Prompt;
+ public static String WSTestUtils_SaveResponseText_Error_Msg;
+ public static String WSTestUtils_SaveResponseText_Title;
+
static {
NLS.initializeMessages(BUNDLE_NAME, JBossWSUIMessages.class);
}
Modified: trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/utils/JAXWSTester2.java
===================================================================
--- trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/utils/JAXWSTester2.java 2010-07-13 18:53:45 UTC (rev 23387)
+++ trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/utils/JAXWSTester2.java 2010-07-13 20:52:54 UTC (rev 23388)
@@ -120,8 +120,9 @@
this.resultBody = baos.toString();
this.resultSOAPBody = o.getSOAPBody();
- if (d.getResponseContext() != null) {
- Object responseHeaders = d.getResponseContext().get(MessageContext.HTTP_RESPONSE_HEADERS);
+ if (response.getContext() != null) {
+ Object responseHeaders =
+ response.getContext().get(MessageContext.HTTP_RESPONSE_HEADERS);
if ( responseHeaders != null && responseHeaders instanceof Map) {
this.resultHeaders = (Map<String, String>) responseHeaders;
}
Modified: trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/utils/WSTestUtils.java
===================================================================
--- trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/utils/WSTestUtils.java 2010-07-13 18:53:45 UTC (rev 23387)
+++ trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/utils/WSTestUtils.java 2010-07-13 20:52:54 UTC (rev 23388)
@@ -10,6 +10,25 @@
******************************************************************************/
package org.jboss.tools.ws.ui.utils;
+import java.io.ByteArrayInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.jboss.tools.ws.ui.JBossWSUIPlugin;
+import org.jboss.tools.ws.ui.messages.JBossWSUIMessages;
+import org.xml.sax.SAXException;
+
/**
* Static utility methods for testing JAX-RS and JAX-WS web services
* @author bfitzpat
@@ -36,4 +55,64 @@
}
return outgoing;
}
+
+ public static IStatus saveTextToFile ( String text ) {
+ FileDialog fd = new FileDialog(new Shell(Display.getCurrent()), SWT.SAVE);
+ fd.setText(JBossWSUIMessages.WSTestUtils_SaveResponseText_Title);
+ String[] filterExt = { "*.txt", "*.xml"}; //$NON-NLS-1$ //$NON-NLS-2$
+ fd.setFilterExtensions(filterExt);
+ String selected = fd.open();
+ if (selected != null) {
+ FileOutputStream out;
+ PrintStream p;
+
+ try
+ {
+ // Create a new file output stream for the file
+ out = new FileOutputStream(selected);
+
+ // Connect print stream to the output stream
+ p = new PrintStream( out );
+
+ // print to it and close
+ p.println (text);
+ p.close();
+
+ return Status.OK_STATUS;
+ }
+ catch (Exception e)
+ {
+ Status rtnStatus = new Status(IStatus.ERROR,
+ JBossWSUIPlugin.PLUGIN_ID,
+ JBossWSUIMessages.WSTestUtils_SaveResponseText_Error_Msg,
+ e);
+ return rtnStatus;
+ }
+ }
+ return Status.CANCEL_STATUS;
+ }
+
+ public static boolean isTextXML ( String text ) {
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ dbf.setValidating(false);
+ try {
+ //Using factory get an instance of document builder
+ DocumentBuilder db = dbf.newDocumentBuilder();
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(text.getBytes());
+
+ //parse using builder to get DOM representation of the XML file
+ db.parse(bais);
+
+ return true;
+
+ }catch(ParserConfigurationException pce) {
+ // ignore
+ }catch(SAXException se) {
+ // ignore
+ } catch (IOException e) {
+ // ignore
+ }
+ return false;
+ }
}
Modified: trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/views/DelimitedStringList.java
===================================================================
--- trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/views/DelimitedStringList.java 2010-07-13 18:53:45 UTC (rev 23387)
+++ trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/views/DelimitedStringList.java 2010-07-13 20:52:54 UTC (rev 23388)
@@ -55,6 +55,7 @@
private Text mAddText;
private boolean isReadOnly = false;
private Label mWarningLabel;
+ private boolean showUpDown = true;
// current delimiter
private String mDelimiter = DELIMITER;
@@ -86,7 +87,7 @@
* @param style
*/
public DelimitedStringList(Composite parent, int style) {
- this(parent, style, false);
+ this(parent, style, false, true);
}
/**
@@ -95,9 +96,10 @@
* @param parent
* @param style
*/
- public DelimitedStringList(Composite parent, int style, boolean isReadOnly) {
+ public DelimitedStringList(Composite parent, int style, boolean isReadOnly, boolean showUpDown) {
super(parent, style);
this.isReadOnly = isReadOnly;
+ this.showUpDown = showUpDown;
this.changeListeners = new ListenerList();
int additionalStyles = SWT.NONE;
@@ -116,6 +118,7 @@
wlGridData.horizontalSpan = 2;
this.mWarningLabel.setLayoutData(wlGridData);
this.mWarningLabel.setForeground(this.mWarningLabel.getDisplay().getSystemColor(SWT.COLOR_RED));
+ this.mWarningLabel.setBackground(parent.getBackground());
}
{
this.mAddText = new Text(this, SWT.BORDER | additionalStyles);
@@ -144,13 +147,17 @@
gridData.horizontalSpan = 2;
mSpacerComposite.setLayoutData(gridData);
mSpacerComposite.setLayout(new GridLayout());
+ mSpacerComposite.setBackground(parent.getBackground());
}
{
this.mPropsList = new List(this, SWT.BORDER | SWT.V_SCROLL);
final GridData gridData = new GridData(
GridData.HORIZONTAL_ALIGN_FILL
| GridData.VERTICAL_ALIGN_FILL);
- gridData.verticalSpan = 5;
+ if (getShowUpDown())
+ gridData.verticalSpan = 5;
+ else
+ gridData.verticalSpan = 3;
this.mPropsList.setLayoutData(gridData);
this.mPropsList.addSelectionListener(new SelectionAdapter() {
@@ -159,7 +166,7 @@
}
});
}
- {
+ if (getShowUpDown()) {
this.mUpButton = new Button(this, SWT.NONE);
this.mUpButton.setLayoutData(new GridData(
GridData.HORIZONTAL_ALIGN_FILL));
@@ -171,8 +178,7 @@
moveUpInList();
}
});
- }
- {
+
this.mDownButton = new Button(this, SWT.NONE);
this.mDownButton.setLayoutData(new GridData(
GridData.HORIZONTAL_ALIGN_FILL));
@@ -424,8 +430,10 @@
*/
public void updatePropertyButtons() {
if (!isReadOnly){
- this.mDownButton.setEnabled(false);
- this.mUpButton.setEnabled(false);
+ if (this.mUpButton != null) {
+ this.mUpButton.setEnabled(false);
+ this.mDownButton.setEnabled(false);
+ }
this.mRemoveButton.setEnabled(false);
this.mEditButton.setEnabled(false);
this.mClearAllButton.setEnabled(false);
@@ -440,11 +448,13 @@
this.mRemoveButton.setEnabled(true);
this.mEditButton.setEnabled(true);
- if (selection - 1 >= 0)
- this.mUpButton.setEnabled(true);
-
- if (selection + 1 < this.mPropsList.getItemCount())
- this.mDownButton.setEnabled(true);
+ if (this.mUpButton != null) {
+ if (selection - 1 >= 0)
+ this.mUpButton.setEnabled(true);
+
+ if (selection + 1 < this.mPropsList.getItemCount())
+ this.mDownButton.setEnabled(true);
+ }
}
}
@@ -585,13 +595,23 @@
mAddButton.setEnabled(enabled);
mAddText.setEnabled(enabled);
mClearAllButton.setEnabled(enabled);
- mDownButton.setEnabled(enabled);
+ if (this.mUpButton != null) {
+ mUpButton.setEnabled(enabled);
+ mDownButton.setEnabled(enabled);
+ }
mEditButton.setEnabled(enabled);
mPropsList.setEnabled(enabled);
mRemoveButton.setEnabled(enabled);
- mUpButton.setEnabled(enabled);
if (enabled)
updatePropertyButtons();
}
+
+ public void setShowUpDown ( boolean flag ) {
+ this.showUpDown = flag;
+ }
+
+ public boolean getShowUpDown() {
+ return this.showUpDown;
+ }
}
Added: trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/views/FormLayoutFactory.java
===================================================================
--- trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/views/FormLayoutFactory.java (rev 0)
+++ trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/views/FormLayoutFactory.java 2010-07-13 20:52:54 UTC (rev 23388)
@@ -0,0 +1,397 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.jboss.tools.ws.ui.views;
+
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+
+/**
+ * FormLayoutFactory
+ *
+ */
+public class FormLayoutFactory {
+
+ // Used in place of 0. If 0 is used, widget borders will appear clipped
+ // on some platforms (e.g. Windows XP Classic Theme).
+ // Form tool kit requires parent composites containing the widget to have
+ // at least 1 pixel border margins in order to paint the flat borders.
+ // The form toolkit paints flat borders on a given widget when native
+ // borders are not painted by SWT. See FormToolkit#paintBordersFor()
+ public static final int DEFAULT_CLEAR_MARGIN = 2;
+
+ // Required to allow space for field decorations
+ public static final int CONTROL_HORIZONTAL_INDENT = 3;
+
+ // UI Forms Standards
+
+ // FORM BODY
+ public static final int FORM_BODY_MARGIN_TOP = 12;
+ public static final int FORM_BODY_MARGIN_BOTTOM = 12;
+ public static final int FORM_BODY_MARGIN_LEFT = 6;
+ public static final int FORM_BODY_MARGIN_RIGHT = 6;
+ public static final int FORM_BODY_HORIZONTAL_SPACING = 20;
+ // Should be 20; but, we minus 3 because the section automatically pads the
+ // bottom margin by that amount
+ public static final int FORM_BODY_VERTICAL_SPACING = 17;
+ public static final int FORM_BODY_MARGIN_HEIGHT = 0;
+ public static final int FORM_BODY_MARGIN_WIDTH = 0;
+
+ // SECTION CLIENT
+ public static final int SECTION_CLIENT_MARGIN_TOP = 5;
+ public static final int SECTION_CLIENT_MARGIN_BOTTOM = 5;
+ // Should be 6; but, we minus 4 because the section automatically pads the
+ // left margin by that amount
+ public static final int SECTION_CLIENT_MARGIN_LEFT = 2;
+ // Should be 6; but, we minus 4 because the section automatically pads the
+ // right margin by that amount
+ public static final int SECTION_CLIENT_MARGIN_RIGHT = 2;
+ public static final int SECTION_CLIENT_HORIZONTAL_SPACING = 5;
+ public static final int SECTION_CLIENT_VERTICAL_SPACING = 5;
+ public static final int SECTION_CLIENT_MARGIN_HEIGHT = 0;
+ public static final int SECTION_CLIENT_MARGIN_WIDTH = 0;
+
+ public static final int SECTION_HEADER_VERTICAL_SPACING = 6;
+
+ // CLEAR
+ public static final int CLEAR_MARGIN_TOP = DEFAULT_CLEAR_MARGIN;
+ public static final int CLEAR_MARGIN_BOTTOM = DEFAULT_CLEAR_MARGIN;
+ public static final int CLEAR_MARGIN_LEFT = DEFAULT_CLEAR_MARGIN;
+ public static final int CLEAR_MARGIN_RIGHT = DEFAULT_CLEAR_MARGIN;
+ public static final int CLEAR_HORIZONTAL_SPACING = 0;
+ public static final int CLEAR_VERTICAL_SPACING = 0;
+ public static final int CLEAR_MARGIN_HEIGHT = 0;
+ public static final int CLEAR_MARGIN_WIDTH = 0;
+
+ // FORM PANE
+ public static final int FORM_PANE_MARGIN_TOP = 0;
+ public static final int FORM_PANE_MARGIN_BOTTOM = 0;
+ public static final int FORM_PANE_MARGIN_LEFT = 0;
+ public static final int FORM_PANE_MARGIN_RIGHT = 0;
+ public static final int FORM_PANE_HORIZONTAL_SPACING = FORM_BODY_HORIZONTAL_SPACING;
+ public static final int FORM_PANE_VERTICAL_SPACING = FORM_BODY_VERTICAL_SPACING;
+ public static final int FORM_PANE_MARGIN_HEIGHT = 0;
+ public static final int FORM_PANE_MARGIN_WIDTH = 0;
+
+ // MASTER DETAILS
+ public static final int MASTER_DETAILS_MARGIN_TOP = 0;
+ public static final int MASTER_DETAILS_MARGIN_BOTTOM = 0;
+ // Used only by masters part. Details part margin dynamically calculated
+ public static final int MASTER_DETAILS_MARGIN_LEFT = 0;
+ // Used only by details part. Masters part margin dynamically calcualated
+ public static final int MASTER_DETAILS_MARGIN_RIGHT = 1;
+ public static final int MASTER_DETAILS_HORIZONTAL_SPACING = FORM_BODY_HORIZONTAL_SPACING;
+ public static final int MASTER_DETAILS_VERTICAL_SPACING = FORM_BODY_VERTICAL_SPACING;
+ public static final int MASTER_DETAILS_MARGIN_HEIGHT = 0;
+ public static final int MASTER_DETAILS_MARGIN_WIDTH = 0;
+
+ /**
+ *
+ */
+ private FormLayoutFactory() {
+ // NO-OP
+ }
+
+ /**
+ * For form bodies.
+ * @param makeColumnsEqualWidth
+ * @param numColumns
+ * @return
+ */
+ public static GridLayout createFormGridLayout(boolean makeColumnsEqualWidth, int numColumns) {
+ GridLayout layout = new GridLayout();
+
+ layout.marginHeight = FORM_BODY_MARGIN_HEIGHT;
+ layout.marginWidth = FORM_BODY_MARGIN_WIDTH;
+
+ layout.marginTop = FORM_BODY_MARGIN_TOP;
+ layout.marginBottom = FORM_BODY_MARGIN_BOTTOM;
+ layout.marginLeft = FORM_BODY_MARGIN_LEFT;
+ layout.marginRight = FORM_BODY_MARGIN_RIGHT;
+
+ layout.horizontalSpacing = FORM_BODY_HORIZONTAL_SPACING;
+ layout.verticalSpacing = FORM_BODY_VERTICAL_SPACING;
+
+ layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
+ layout.numColumns = numColumns;
+
+ return layout;
+ }
+
+ /**
+ * For miscellaneous grouping composites.
+ * For sections (as a whole - header plus client).
+ * @param makeColumnsEqualWidth
+ * @param numColumns
+ * @return
+ */
+ public static GridLayout createClearGridLayout(boolean makeColumnsEqualWidth, int numColumns) {
+ GridLayout layout = new GridLayout();
+
+ layout.marginHeight = CLEAR_MARGIN_HEIGHT;
+ layout.marginWidth = CLEAR_MARGIN_WIDTH;
+
+ layout.marginTop = CLEAR_MARGIN_TOP;
+ layout.marginBottom = CLEAR_MARGIN_BOTTOM;
+ layout.marginLeft = CLEAR_MARGIN_LEFT;
+ layout.marginRight = CLEAR_MARGIN_RIGHT;
+
+ layout.horizontalSpacing = CLEAR_HORIZONTAL_SPACING;
+ layout.verticalSpacing = CLEAR_VERTICAL_SPACING;
+
+ layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
+ layout.numColumns = numColumns;
+
+ return layout;
+ }
+
+ /**
+ * For form bodies.
+ * @param makeColumnsEqualWidth
+ * @param numColumns
+ * @return
+ */
+ public static TableWrapLayout createFormTableWrapLayout(boolean makeColumnsEqualWidth, int numColumns) {
+ TableWrapLayout layout = new TableWrapLayout();
+
+ layout.topMargin = FORM_BODY_MARGIN_TOP;
+ layout.bottomMargin = FORM_BODY_MARGIN_BOTTOM;
+ layout.leftMargin = FORM_BODY_MARGIN_LEFT;
+ layout.rightMargin = FORM_BODY_MARGIN_RIGHT;
+
+ layout.horizontalSpacing = FORM_BODY_HORIZONTAL_SPACING;
+ layout.verticalSpacing = FORM_BODY_VERTICAL_SPACING;
+
+ layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
+ layout.numColumns = numColumns;
+
+ return layout;
+ }
+
+ /**
+ * For composites used to group sections in left and right panes.
+ * @param makeColumnsEqualWidth
+ * @param numColumns
+ * @return
+ */
+ public static TableWrapLayout createFormPaneTableWrapLayout(boolean makeColumnsEqualWidth, int numColumns) {
+ TableWrapLayout layout = new TableWrapLayout();
+
+ layout.topMargin = FORM_PANE_MARGIN_TOP;
+ layout.bottomMargin = FORM_PANE_MARGIN_BOTTOM;
+ layout.leftMargin = FORM_PANE_MARGIN_LEFT;
+ layout.rightMargin = FORM_PANE_MARGIN_RIGHT;
+
+ layout.horizontalSpacing = FORM_PANE_HORIZONTAL_SPACING;
+ layout.verticalSpacing = FORM_PANE_VERTICAL_SPACING;
+
+ layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
+ layout.numColumns = numColumns;
+
+ return layout;
+ }
+
+ /**
+ * For composites used to group sections in left and right panes.
+ * @param makeColumnsEqualWidth
+ * @param numColumns
+ * @return
+ */
+ public static GridLayout createFormPaneGridLayout(boolean makeColumnsEqualWidth, int numColumns) {
+ GridLayout layout = new GridLayout();
+
+ layout.marginHeight = FORM_PANE_MARGIN_HEIGHT;
+ layout.marginWidth = FORM_PANE_MARGIN_WIDTH;
+
+ layout.marginTop = FORM_PANE_MARGIN_TOP;
+ layout.marginBottom = FORM_PANE_MARGIN_BOTTOM;
+ layout.marginLeft = FORM_PANE_MARGIN_LEFT;
+ layout.marginRight = FORM_PANE_MARGIN_RIGHT;
+
+ layout.horizontalSpacing = FORM_PANE_HORIZONTAL_SPACING;
+ layout.verticalSpacing = FORM_PANE_VERTICAL_SPACING;
+
+ layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
+ layout.numColumns = numColumns;
+
+ return layout;
+ }
+
+ /**
+ * For miscellaneous grouping composites.
+ * For sections (as a whole - header plus client).
+ * @param makeColumnsEqualWidth
+ * @param numColumns
+ * @return
+ */
+ public static TableWrapLayout createClearTableWrapLayout(boolean makeColumnsEqualWidth, int numColumns) {
+ TableWrapLayout layout = new TableWrapLayout();
+
+ layout.topMargin = CLEAR_MARGIN_TOP;
+ layout.bottomMargin = CLEAR_MARGIN_BOTTOM;
+ layout.leftMargin = CLEAR_MARGIN_LEFT;
+ layout.rightMargin = CLEAR_MARGIN_RIGHT;
+
+ layout.horizontalSpacing = CLEAR_HORIZONTAL_SPACING;
+ layout.verticalSpacing = CLEAR_VERTICAL_SPACING;
+
+ layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
+ layout.numColumns = numColumns;
+
+ return layout;
+ }
+
+ /**
+ * For master sections belonging to a master details block.
+ * @param makeColumnsEqualWidth
+ * @param numColumns
+ * @return
+ */
+ public static GridLayout createMasterGridLayout(boolean makeColumnsEqualWidth, int numColumns) {
+ GridLayout layout = new GridLayout();
+
+ layout.marginHeight = MASTER_DETAILS_MARGIN_HEIGHT;
+ layout.marginWidth = MASTER_DETAILS_MARGIN_WIDTH;
+
+ layout.marginTop = MASTER_DETAILS_MARGIN_TOP;
+ layout.marginBottom = MASTER_DETAILS_MARGIN_BOTTOM;
+ layout.marginLeft = MASTER_DETAILS_MARGIN_LEFT;
+ // Cannot set layout on a sash form.
+ // In order to replicate the horizontal spacing between sections,
+ // divide the amount by 2 and set the master section right margin to
+ // half the amount and set the left details section margin to half
+ // the amount. The default sash width is currently set at 3.
+ // Minus 1 pixel from each half. Use the 1 left over pixel to separate
+ // the details section from the vertical scollbar.
+ int marginRight = MASTER_DETAILS_HORIZONTAL_SPACING;
+ if (marginRight > 0) {
+ marginRight = marginRight / 2;
+ if (marginRight > 0) {
+ marginRight--;
+ }
+ }
+ layout.marginRight = marginRight;
+
+ layout.horizontalSpacing = MASTER_DETAILS_HORIZONTAL_SPACING;
+ layout.verticalSpacing = MASTER_DETAILS_VERTICAL_SPACING;
+
+ layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
+ layout.numColumns = numColumns;
+
+ return layout;
+ }
+
+ /**
+ * For details sections belonging to a master details block.
+ * @param makeColumnsEqualWidth
+ * @param numColumns
+ * @return
+ */
+ public static GridLayout createDetailsGridLayout(boolean makeColumnsEqualWidth, int numColumns) {
+ GridLayout layout = new GridLayout();
+
+ layout.marginHeight = MASTER_DETAILS_MARGIN_HEIGHT;
+ layout.marginWidth = MASTER_DETAILS_MARGIN_WIDTH;
+
+ layout.marginTop = MASTER_DETAILS_MARGIN_TOP;
+ layout.marginBottom = MASTER_DETAILS_MARGIN_BOTTOM;
+ // Cannot set layout on a sash form.
+ // In order to replicate the horizontal spacing between sections,
+ // divide the amount by 2 and set the master section right margin to
+ // half the amount and set the left details section margin to half
+ // the amount. The default sash width is currently set at 3.
+ // Minus 1 pixel from each half. Use the 1 left over pixel to separate
+ // the details section from the vertical scollbar.
+ int marginLeft = MASTER_DETAILS_HORIZONTAL_SPACING;
+ if (marginLeft > 0) {
+ marginLeft = marginLeft / 2;
+ if (marginLeft > 0) {
+ marginLeft--;
+ }
+ }
+ layout.marginLeft = marginLeft;
+ layout.marginRight = MASTER_DETAILS_MARGIN_RIGHT;
+
+ layout.horizontalSpacing = MASTER_DETAILS_HORIZONTAL_SPACING;
+ layout.verticalSpacing = MASTER_DETAILS_VERTICAL_SPACING;
+
+ layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
+ layout.numColumns = numColumns;
+
+ return layout;
+ }
+
+ /**
+ * For composites set as section clients.
+ * For composites containg form text.
+ * @param makeColumnsEqualWidth
+ * @param numColumns
+ * @return
+ */
+ public static GridLayout createSectionClientGridLayout(boolean makeColumnsEqualWidth, int numColumns) {
+ GridLayout layout = new GridLayout();
+
+ layout.marginHeight = SECTION_CLIENT_MARGIN_HEIGHT;
+ layout.marginWidth = SECTION_CLIENT_MARGIN_WIDTH;
+
+ layout.marginTop = SECTION_CLIENT_MARGIN_TOP;
+ layout.marginBottom = SECTION_CLIENT_MARGIN_BOTTOM;
+ layout.marginLeft = SECTION_CLIENT_MARGIN_LEFT;
+ layout.marginRight = SECTION_CLIENT_MARGIN_RIGHT;
+
+ layout.horizontalSpacing = SECTION_CLIENT_HORIZONTAL_SPACING;
+ layout.verticalSpacing = SECTION_CLIENT_VERTICAL_SPACING;
+
+ layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
+ layout.numColumns = numColumns;
+
+ return layout;
+ }
+
+ /**
+ * For composites set as section clients.
+ * For composites containg form text.
+ * @param makeColumnsEqualWidth
+ * @param numColumns
+ * @return
+ */
+ public static TableWrapLayout createSectionClientTableWrapLayout(boolean makeColumnsEqualWidth, int numColumns) {
+ TableWrapLayout layout = new TableWrapLayout();
+
+ layout.topMargin = SECTION_CLIENT_MARGIN_TOP;
+ layout.bottomMargin = SECTION_CLIENT_MARGIN_BOTTOM;
+ layout.leftMargin = SECTION_CLIENT_MARGIN_LEFT;
+ layout.rightMargin = SECTION_CLIENT_MARGIN_RIGHT;
+
+ layout.horizontalSpacing = SECTION_CLIENT_HORIZONTAL_SPACING;
+ layout.verticalSpacing = SECTION_CLIENT_VERTICAL_SPACING;
+
+ layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
+ layout.numColumns = numColumns;
+
+ return layout;
+ }
+
+ /**
+ * Debug method.
+ *
+ * MAGENTA = 11
+ * CYAN = 13
+ * GREEN = 5
+ * @param container
+ * @param color
+ */
+ public static void visualizeLayoutArea(Composite container, int color) {
+ container.setBackground(Display.getCurrent().getSystemColor(color));
+ }
+}
Property changes on: trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/views/FormLayoutFactory.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/views/JAXRSWSTestView2.java
===================================================================
--- trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/views/JAXRSWSTestView2.java (rev 0)
+++ trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/views/JAXRSWSTestView2.java 2010-07-13 20:52:54 UTC (rev 23388)
@@ -0,0 +1,1139 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.ws.ui.views;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map.Entry;
+
+import javax.wsdl.Definition;
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPEnvelope;
+import javax.xml.soap.SOAPException;
+
+import org.apache.axis.utils.XMLUtils;
+import org.eclipse.core.resources.IStorage;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.CoolBar;
+import org.eclipse.swt.widgets.CoolItem;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.eclipse.ui.IStorageEditorInput;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.events.ExpansionAdapter;
+import org.eclipse.ui.forms.events.ExpansionEvent;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.forms.widgets.ScrolledPageBook;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.part.ViewPart;
+import org.jboss.tools.ws.ui.JBossWSUIPlugin;
+import org.jboss.tools.ws.ui.messages.JBossWSUIMessages;
+import org.jboss.tools.ws.ui.utils.JAXRSTester;
+import org.jboss.tools.ws.ui.utils.JAXWSTester2;
+import org.jboss.tools.ws.ui.utils.ResultsXMLStorage;
+import org.jboss.tools.ws.ui.utils.ResultsXMLStorageInput;
+import org.jboss.tools.ws.ui.utils.TesterWSDLUtils;
+import org.jboss.tools.ws.ui.utils.WSTestUtils;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * View for testing web services (JAX-WS & JAX-RS)
+ * @author bfitzpat
+ *
+ */
+public class JAXRSWSTestView2 extends ViewPart {
+
+ private static final String PAGE1_KEY = "page1"; //$NON-NLS-1$
+ private static final String PAGE2_KEY = "page2"; //$NON-NLS-1$
+ private static final String DEFAULT_TEXT_EDITOR_ID = "org.eclipse.ui.DefaultTextEditor"; //$NON-NLS-1$
+ private static final String XML_EDITOR_ID = "org.eclipse.wst.xml.ui.internal.tabletree.XMLMultiPageEditorPart"; //$NON-NLS-1$
+ private static final String DELETE = "DELETE";//$NON-NLS-1$
+ private static final String PUT = "PUT";//$NON-NLS-1$
+ private static final String POST = "POST";//$NON-NLS-1$
+ private static final String GET = "GET";//$NON-NLS-1$
+ private static final String JAX_WS = "JAX-WS"; //$NON-NLS-1$
+ private static final String JAX_RS = "JAX-RS"; //$NON-NLS-1$
+ private static final String EMPTY_STRING = ""; //$NON-NLS-1$
+ private static final String RESULT_HEADER_DELIMITER = "%";//$NON-NLS-1$
+
+ /**
+ * The ID of the view as specified by the extension.
+ */
+ public static final String ID = "org.jboss.tools.ws.ui.tester.views.TestWSView";//$NON-NLS-1$
+
+ /* UI controls */
+ private Text resultsText;
+ private Browser resultsBrowser;
+ private Combo urlCombo;
+ private DelimitedStringList dlsList;
+ private Combo methodCombo;
+ private Text bodyText;
+ private List resultHeadersList;
+
+ private DelimitedStringList parmsList;
+
+ private SOAPEnvelope envelope;
+ private SOAPBody soapbody;
+ private MenuItem openInXMLEditorAction;
+ private MenuItem openResponseTagInXMLEditor;
+ private Menu resultsTextMenu;
+ private MenuItem copyMenuAction;
+ private Menu resultsHeaderMenu;
+ private MenuItem copyResultHeaderMenuAction;
+
+ private String[] serviceNSMessage = null;
+ private String actionText = null;
+
+ private FormToolkit toolkit;
+ private ScrolledForm form;
+ private ImageRegistry mImageRegistry;
+
+ private static final String IMG_DESC_WSDL = "icons/obj16/wsdl.gif"; //$NON-NLS-1$
+ private static final String IMG_DESC_START = "icons/obj16/run.gif"; //$NON-NLS-1$
+
+ private static final String IMG_DESC_SHOWRAW = "icons/obj16/binary.gif"; //$NON-NLS-1$
+ private static final String IMG_DESC_SHOWWEB = "icons/obj16/web.gif"; //$NON-NLS-1$
+ private static final String IMG_DESC_SHOWEDITOR = "icons/obj16/properties.gif"; //$NON-NLS-1$
+ private static final String IMG_DESC_SAVE = "icons/obj16/save_edit.gif"; //$NON-NLS-1$
+
+ private ToolItem openWSDLToolItem;
+ private ToolItem startToolItem;
+ private ScrolledPageBook pageBook;
+ private ShowRawAction rawAction;
+ private ShowInBrowserAction browserAction;
+
+ /**
+ * The constructor.
+ */
+ public JAXRSWSTestView2() {
+ }
+
+ private void getImages() {
+ mImageRegistry = new ImageRegistry();
+ mImageRegistry.put(IMG_DESC_WSDL, ImageDescriptor
+ .createFromURL(JBossWSUIPlugin.getDefault().getBundle()
+ .getEntry(IMG_DESC_WSDL)));
+ mImageRegistry.put(IMG_DESC_START, ImageDescriptor
+ .createFromURL(JBossWSUIPlugin.getDefault().getBundle()
+ .getEntry(IMG_DESC_START)));
+ mImageRegistry.put(IMG_DESC_SHOWRAW, ImageDescriptor
+ .createFromURL(JBossWSUIPlugin.getDefault().getBundle()
+ .getEntry(IMG_DESC_SHOWRAW)));
+ mImageRegistry.put(IMG_DESC_SHOWWEB, ImageDescriptor
+ .createFromURL(JBossWSUIPlugin.getDefault().getBundle()
+ .getEntry(IMG_DESC_SHOWWEB)));
+ mImageRegistry.put(IMG_DESC_SHOWEDITOR, ImageDescriptor
+ .createFromURL(JBossWSUIPlugin.getDefault().getBundle()
+ .getEntry(IMG_DESC_SHOWEDITOR)));
+ mImageRegistry.put(IMG_DESC_SAVE, ImageDescriptor
+ .createFromURL(JBossWSUIPlugin.getDefault().getBundle()
+ .getEntry(IMG_DESC_SAVE)));
+ }
+
+ private void createResponseToolbar ( ExpandableComposite parent ) {
+
+ // create a couple of actions for toggling views
+ rawAction = new ShowRawAction();
+ rawAction.setChecked(true);
+ browserAction = new ShowInBrowserAction();
+
+ ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
+ ToolBar toolbar = toolBarManager.createControl(parent);
+
+ toolBarManager.add(new FileSaveAction());
+ toolBarManager.add(new OpenInXMLEditorAction());
+ toolBarManager.add(rawAction);
+ toolBarManager.add(browserAction);
+
+ toolBarManager.update(true);
+
+ parent.setTextClient(toolbar);
+ }
+
+ class FormExpansionAdapter extends ExpansionAdapter {
+ public void expansionStateChanged(ExpansionEvent e) {
+ form.setRedraw(false);
+ form.reflow(true);
+ form.layout(true, true);
+ form.setRedraw(true);
+ }
+ }
+
+ class OpenInXMLEditorAction extends Action {
+ @Override
+ public void run() {
+ openXMLEditor(resultsText.getText());
+ }
+ @Override
+ public String getToolTipText() {
+ return JBossWSUIMessages.JAXRSWSTestView2_OpenInEditor_Action;
+ }
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return mImageRegistry.getDescriptor(IMG_DESC_SHOWEDITOR);
+ }
+ }
+
+ class FileSaveAction extends Action {
+ @Override
+ public void run() {
+ IStatus status =
+ WSTestUtils.saveTextToFile(resultsText.getText());
+ if (status.getCode() == IStatus.ERROR) {
+ MessageDialog.openError(new Shell(Display.getCurrent()),
+ JBossWSUIMessages.JAXRSWSTestView2_SaveResponseText_Error,
+ status.getMessage());
+ }
+ }
+ @Override
+ public String getToolTipText() {
+ return JBossWSUIMessages.JAXRSWSTestView2_SaveResponseText_tooltip;
+ }
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return mImageRegistry.getDescriptor(IMG_DESC_SAVE);
+ }
+ }
+
+ class ToggleAction extends Action {
+ public ToggleAction ( ) {
+ super(null, IAction.AS_CHECK_BOX);
+ }
+ }
+
+ class ShowInBrowserAction extends ToggleAction {
+ public void run() {
+ if (rawAction.isChecked()) rawAction.setChecked(false);
+ if (JAXRSWSTestView2.this.resultsText.getText().length() > 0 ) {
+ JAXRSWSTestView2.this.resultsBrowser.setText
+ (JAXRSWSTestView2.this.resultsText.getText());
+ }
+ JAXRSWSTestView2.this.pageBook.showPage(PAGE2_KEY);
+ }
+ @Override
+ public String getToolTipText() {
+ return JBossWSUIMessages.JAXRSWSTestView2_ShowInBrowser_Tooltip;
+ }
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return mImageRegistry.getDescriptor(IMG_DESC_SHOWWEB);
+ }
+ }
+
+ class ShowRawAction extends ToggleAction {
+ public void run() {
+ if (browserAction.isChecked()) browserAction.setChecked(false);
+ JAXRSWSTestView2.this.pageBook.showPage(PAGE1_KEY);
+ }
+ @Override
+ public String getToolTipText() {
+ return JBossWSUIMessages.JAXRSWSTestView2_ShowRaw_Tooltip;
+ }
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return mImageRegistry.getDescriptor(IMG_DESC_SHOWRAW);
+ }
+ }
+
+ private String getCurrentTestType() {
+ if (methodCombo.getText().equalsIgnoreCase(JAX_WS))
+ return JAX_WS;
+ return JAX_RS;
+ }
+
+ private void createURLAndToolbar( ) {
+ urlCombo = new Combo(form.getBody(), SWT.BORDER | SWT.DROP_DOWN);
+ GridData gdURL = new GridData(SWT.FILL, SWT.NONE, true, false);
+ urlCombo.setLayoutData(gdURL);
+ toolkit.adapt(urlCombo);
+
+ urlCombo.addKeyListener(new KeyListener() {
+ public void keyPressed(KeyEvent e) {
+ }
+
+ public void keyReleased(KeyEvent e) {
+ setControlsForSelectedURL();
+ if (e.keyCode == SWT.CR && e.stateMask == SWT.CTRL) {
+ handleTest(getCurrentTestType());
+ }
+ }
+ });
+ urlCombo.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+ public void widgetSelected(SelectionEvent e) {
+ setControlsForSelectedURL();
+ }
+ });
+
+ Composite comp1 = toolkit.createComposite(form.getBody());
+ comp1.setLayoutData(new GridData(SWT.END, SWT.NONE, false, false));
+ comp1.setLayout(new FillLayout());
+
+ CoolBar coolBar = new CoolBar(comp1, SWT.FLAT);
+ coolBar.setLocked(true);
+ coolBar.setBackground(form.getBody().getBackground());
+
+ CoolItem wsMethodCoolItem = new CoolItem(coolBar, SWT.PUSH | SWT.FLAT);
+ methodCombo = new Combo(coolBar, SWT.BORDER | SWT.READ_ONLY);
+ methodCombo.setBackground(form.getBody().getBackground());
+ String[] methods = {JAX_WS, GET, POST, PUT, DELETE};
+ methodCombo.setItems(methods);
+ methodCombo.pack();
+ Point size = methodCombo.computeSize (SWT.DEFAULT, SWT.DEFAULT);
+ wsMethodCoolItem.setPreferredSize (wsMethodCoolItem.computeSize (size.x, size.y));
+ wsMethodCoolItem.setControl(methodCombo);
+ methodCombo.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+ public void widgetSelected(SelectionEvent e) {
+ setControlsForWSType(getCurrentTestType());
+ setControlsForMethodType(methodCombo.getText());
+ setControlsForSelectedURL();
+ }
+ });
+ toolkit.adapt(methodCombo);
+
+ CoolItem topCoolItem = new CoolItem(coolBar, SWT.FLAT);
+
+ ToolBar topToolBar = new ToolBar(coolBar,SWT.HORIZONTAL| SWT.FLAT);
+ topToolBar.setBackground(form.getBody().getBackground());
+ openWSDLToolItem = new ToolItem(topToolBar, SWT.PUSH);
+ openWSDLToolItem.setImage(mImageRegistry.get(IMG_DESC_WSDL));
+ openWSDLToolItem.setToolTipText(JBossWSUIMessages.JAXRSWSTestView2_GetFromWSDL_Tooltip);
+ openWSDLToolItem.addSelectionListener(new SelectionListener() {
+ public void widgetSelected(SelectionEvent e) {
+ WSDLBrowseDialog wbDialog = new WSDLBrowseDialog(getSite().getShell());
+ int rtnCode = wbDialog.open();
+ if (rtnCode == Window.OK){
+ serviceNSMessage = null;
+ actionText = null;
+ Definition wsdlDef = wbDialog.getWSDLDefinition();
+ String output = TesterWSDLUtils.getSampleSOAPInputMessage(wsdlDef,
+ wbDialog.getServiceTextValue(),
+ wbDialog.getPortTextValue(),
+ wbDialog.getBindingValue(),
+ wbDialog.getOperationTextValue());
+ String endpointURL = TesterWSDLUtils.getEndpointURL(wsdlDef,
+ wbDialog.getServiceTextValue(),
+ wbDialog.getPortTextValue(),
+ wbDialog.getBindingValue(),
+ wbDialog.getOperationTextValue());
+ String actionURL = TesterWSDLUtils.getActionURL(wsdlDef,
+ wbDialog.getServiceTextValue(),
+ wbDialog.getPortTextValue(),
+ wbDialog.getBindingValue(),
+ wbDialog.getOperationTextValue());
+ serviceNSMessage = TesterWSDLUtils.getNSServiceNameAndMessageNameArray(wsdlDef,
+ wbDialog.getServiceTextValue(),
+ wbDialog.getPortTextValue(),
+ wbDialog.getBindingValue(),
+ wbDialog.getOperationTextValue());
+ String soapIn = generateSampleSOAP(output);
+ bodyText.setText(soapIn);
+ urlCombo.setText(endpointURL);
+ actionText = actionURL;
+ setControlsForWSType(getCurrentTestType());
+ setControlsForMethodType(methodCombo.getText());
+ setControlsForSelectedURL();
+ }
+ }
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+ });
+
+ startToolItem = new ToolItem(topToolBar, SWT.PUSH| SWT.FLAT);
+ startToolItem.setImage(mImageRegistry.get(IMG_DESC_START));
+ startToolItem.setToolTipText(JBossWSUIMessages.JAXRSWSTestView2_Go_Tooltip);
+ startToolItem.addSelectionListener(new SelectionListener() {
+ public void widgetSelected(SelectionEvent e) {
+ handleTest(getCurrentTestType());
+ }
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+ });
+
+ topToolBar.pack();
+ size = topToolBar.getSize();
+ topCoolItem.setControl(topToolBar);
+ topCoolItem.setSize(topCoolItem.computeSize(size.x, size.y));
+ toolkit.adapt(coolBar);
+ }
+
+ private void createRequestSide( SashForm sashForm ) {
+ Section section = toolkit.createSection(sashForm,
+ Section.TITLE_BAR|
+ Section.TWISTIE|Section.EXPANDED);
+ section.setText(JBossWSUIMessages.JAXRSWSTestView2_RequestDetails_Section);
+
+ Composite sectionClient = toolkit.createComposite(section);
+ sectionClient.setLayout(new GridLayout());
+ sectionClient.setLayoutData(new GridData());
+
+ ExpandableComposite ec = toolkit.createExpandableComposite(sectionClient,
+ ExpandableComposite.TREE_NODE| ExpandableComposite.TITLE_BAR |
+ ExpandableComposite.CLIENT_INDENT);
+ ec.setText(JBossWSUIMessages.JAXRSWSTestView2_Headers_Section);
+ dlsList = new DelimitedStringList(ec, SWT.None, false, false);
+ ec.setClient(dlsList);
+ toolkit.adapt(dlsList);
+ GridData gd2 = new GridData(SWT.FILL, SWT.FILL, true, false);
+ ec.setLayoutData(gd2);
+ ec.addExpansionListener(new FormExpansionAdapter());
+
+ ExpandableComposite ec3 = toolkit.createExpandableComposite(sectionClient,
+ ExpandableComposite.TREE_NODE| ExpandableComposite.TITLE_BAR |
+ ExpandableComposite.CLIENT_INDENT);
+ ec3.setText(JBossWSUIMessages.JAXRSWSTestView2_Parameters_Section);
+ parmsList = new DelimitedStringList(ec3, SWT.None, false, false);
+ parmsList.setShowUpDown(false);
+ ec3.setClient(parmsList);
+ toolkit.adapt(parmsList);
+ GridData gd4 = new GridData(SWT.FILL, SWT.FILL, true, false);
+ ec3.setLayoutData(gd4);
+ ec3.addExpansionListener(new FormExpansionAdapter());
+
+ ExpandableComposite ec5 = toolkit.createExpandableComposite(sectionClient,
+ ExpandableComposite.TWISTIE|
+ ExpandableComposite.CLIENT_INDENT |
+ ExpandableComposite.EXPANDED);
+ ec5.setText(JBossWSUIMessages.JAXRSWSTestView2_BodyText_Section);
+ bodyText = toolkit.createText(ec5, EMPTY_STRING, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
+ ec5.setClient(bodyText);
+ GridData gd9 = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gd9.minimumHeight = 200;
+ ec5.setLayoutData(gd9);
+ ec5.addExpansionListener(new FormExpansionAdapter());
+
+ section.addExpansionListener(new FormExpansionAdapter());
+ section.setClient(sectionClient);
+ }
+
+ private void createResponseSide ( SashForm sashForm ) {
+ Section section2 = toolkit.createSection(sashForm,
+ Section.TITLE_BAR|
+ Section.TWISTIE|Section.EXPANDED);
+ section2.setText(JBossWSUIMessages.JAXRSWSTestView2_ResponseDetails_Section);
+
+ Composite sectionClient2 = toolkit.createComposite(section2);
+ sectionClient2.setLayout(new GridLayout());
+ sectionClient2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ ExpandableComposite ec2 = toolkit.createExpandableComposite(sectionClient2,
+ ExpandableComposite.TREE_NODE| ExpandableComposite.TITLE_BAR |
+ ExpandableComposite.CLIENT_INDENT );
+ ec2.setText(JBossWSUIMessages.JAXRSWSTestView2_ResponseHeaders_Section);
+ ec2.setLayout(new GridLayout());
+ resultHeadersList = new List(ec2, SWT.V_SCROLL | SWT.BORDER );
+ resultHeadersList.add(EMPTY_STRING);
+ resultHeadersList.add(EMPTY_STRING);
+ resultHeadersList.add(EMPTY_STRING);
+ resultHeadersList.add(EMPTY_STRING);
+ ec2.setClient(resultHeadersList);
+ resultsHeaderMenu = new Menu(resultHeadersList.getShell(), SWT.POP_UP);
+
+ copyResultHeaderMenuAction = new MenuItem(resultsHeaderMenu, SWT.PUSH);
+ copyResultHeaderMenuAction.setText(JBossWSUIMessages.JAXRSWSTestView_CopyResultMenu_Text);
+ copyResultHeaderMenuAction.setAccelerator(SWT.CTRL + 'C');
+ copyResultHeaderMenuAction.addSelectionListener(new SelectionListener(){
+
+ public void widgetDefaultSelected(SelectionEvent arg0) {
+ if (resultHeadersList.getSelectionCount() == 0)
+ resultHeadersList.selectAll();
+ Display display = Display.getDefault();
+ final Clipboard cb = new Clipboard(display);
+ TextTransfer textTransfer = TextTransfer.getInstance();
+ cb.setContents(resultHeadersList.getSelection() ,
+ new Transfer[] { textTransfer });
+ }
+
+ public void widgetSelected(SelectionEvent arg0) {
+ widgetDefaultSelected(arg0);
+ }
+ });
+
+ resultHeadersList.setMenu(resultsHeaderMenu);
+
+ resultHeadersList.addMouseListener(new MouseListener() {
+ public void mouseDoubleClick(MouseEvent arg0) {
+ }
+ public void mouseDown(MouseEvent arg0) {
+ setMenusForCurrentState();
+ }
+ public void mouseUp(MouseEvent arg0) {
+ }
+ });
+
+ GridData gd6 = new GridData(SWT.FILL, SWT.FILL, true, false);
+ gd6.heightHint = 1;
+ gd6.minimumHeight = 50;
+ ec2.setLayoutData(gd6);
+ ec2.addExpansionListener(new FormExpansionAdapter());
+
+ ExpandableComposite ec4 = toolkit.createExpandableComposite(sectionClient2,
+ ExpandableComposite.TWISTIE| ExpandableComposite.TITLE_BAR |
+ ExpandableComposite.CLIENT_INDENT |
+ ExpandableComposite.EXPANDED);
+ ec4.setText(JBossWSUIMessages.JAXRSWSTestView2_ResponseBody_Section);
+
+ createResponseToolbar(ec4);
+
+ pageBook = toolkit.createPageBook(ec4, SWT.NONE);
+
+ Composite page1 = pageBook.createPage(PAGE1_KEY);
+ page1.setLayout(new GridLayout());
+ resultsText = toolkit.createText(page1, EMPTY_STRING, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
+ GridData gd7 = new GridData(SWT.FILL, SWT.FILL, true, true);
+ // gd7.minimumHeight = 100;
+ gd7.heightHint = 1;
+ resultsText.setLayoutData(gd7);
+
+ pageBook.showPage(PAGE1_KEY);
+
+ Composite page2 = pageBook.createPage(PAGE2_KEY);
+ page2.setLayout(new GridLayout());
+ resultsBrowser = new Browser(page2, SWT.BORDER | SWT.WRAP );// | SWT.V_SCROLL);
+ GridData gd10 = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gd7.heightHint = 1;
+ // gd10.minimumHeight = 100;
+ toolkit.adapt(resultsBrowser);
+ resultsBrowser.setLayoutData(gd10);
+
+ pageBook.showPage(PAGE2_KEY);
+
+ GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); //GridData.FILL_HORIZONTAL);
+ gd.heightHint = 1;
+ gd.minimumHeight = 100;
+ pageBook.setLayoutData(gd);
+
+ pageBook.showPage(PAGE1_KEY);
+
+ resultsTextMenu = new Menu(resultsText.getShell(), SWT.POP_UP);
+
+ copyMenuAction = new MenuItem(resultsTextMenu, SWT.PUSH);
+ copyMenuAction.setText(JBossWSUIMessages.JAXRSWSTestView_CopyResultsMenu);
+ copyMenuAction.setAccelerator(SWT.CTRL + 'C');
+ copyMenuAction.addSelectionListener(new SelectionListener(){
+
+ public void widgetDefaultSelected(SelectionEvent arg0) {
+ if (resultsText.getSelectionCount() == 0)
+ resultsText.selectAll();
+ resultsText.copy();
+ }
+
+ public void widgetSelected(SelectionEvent arg0) {
+ widgetDefaultSelected(arg0);
+ }
+ });
+ new MenuItem(resultsTextMenu, SWT.SEPARATOR);
+
+ openInXMLEditorAction = new MenuItem(resultsTextMenu, SWT.PUSH);
+ openInXMLEditorAction.setText(JBossWSUIMessages.JAXRSWSTestView_Open_Result_in_XML_Editor);
+ openInXMLEditorAction.setAccelerator(SWT.CTRL + 'O');
+ openInXMLEditorAction.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent arg0) {
+ String string = resultsText.getText();
+ openXMLEditor(string);
+ }
+
+ public void widgetDefaultSelected(SelectionEvent arg0) {
+ widgetSelected(arg0);
+ }
+ });
+
+ openResponseTagInXMLEditor = new MenuItem(resultsTextMenu, SWT.PUSH);
+ openResponseTagInXMLEditor.setText(JBossWSUIMessages.JAXRSWSTestView_Open_Response_Tag_Contents_in_XML_Editor);
+ openResponseTagInXMLEditor.setAccelerator(SWT.CTRL + 'R');
+ openResponseTagInXMLEditor.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent arg0) {
+ String string = null;
+ try {
+ SOAPBody body = null;
+ if (envelope != null){
+ body = envelope.getBody();
+ } else if (soapbody != null) {
+ body = soapbody;
+ }
+
+ NodeList list = body.getChildNodes();
+ for (int i = 0; i< list.getLength(); i++){
+ Node node = list.item(i);
+ if (node.getNodeName().contains("Response")){ //$NON-NLS-1$
+ NodeList list2 = node.getChildNodes();
+ for (int j = 0; j<list2.getLength(); j++){
+ Node node2 = list2.item(j);
+ if (node2.getNodeName().contains("Result")){ //$NON-NLS-1$
+ Node node3 = node2.getChildNodes().item(0);
+ if (node3.getNodeType() == Node.TEXT_NODE) {
+ string = node3.getNodeValue();
+ break;
+ } else if (node3.getNodeType() == Node.ELEMENT_NODE) {
+ Element element = (Element) node3;
+ string = XMLUtils.ElementToString(element);
+ break;
+ }
+ }
+ }
+ if (string != null) break;
+ }
+ }
+ if (string != null){
+ openXMLEditor(string);
+ }
+ } catch (SOAPException e) {
+ JBossWSUIPlugin.log(e);
+ }
+ }
+
+ public void widgetDefaultSelected(SelectionEvent arg0) {
+ widgetSelected(arg0);
+ }
+ });
+
+ resultsText.setMenu(resultsTextMenu);
+
+ resultsText.addFocusListener(new FocusListener() {
+
+ public void focusLost(FocusEvent arg0) {
+ }
+
+ public void focusGained(FocusEvent arg0) {
+ setMenusForCurrentState();
+ }
+ });
+
+ ec4.setClient(pageBook);
+ GridData gd8 = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gd8.heightHint = 1;
+ ec4.setLayoutData(gd8);
+ ec4.addExpansionListener(new FormExpansionAdapter());
+
+ section2.addExpansionListener(new FormExpansionAdapter());
+ section2.setClient(sectionClient2);
+ }
+
+ /**
+ * This is a callback that will allow us
+ * to create the viewer and initialize it.
+ */
+ public void createPartControl(Composite parent) {
+
+ getImages();
+
+ toolkit = new FormToolkit(parent.getDisplay());
+ form = toolkit.createScrolledForm(parent);
+ form.addListener(SWT.Resize, new Listener() {
+ public void handleEvent(Event e) {
+ form.setRedraw(false);
+ form.reflow(true);
+ form.layout(true, true);
+ form.setRedraw(true);
+ }
+ });
+ GridLayout layout = new GridLayout(2, false);
+ layout.verticalSpacing = 1;
+ form.getBody().setLayout(layout);
+
+ createURLAndToolbar();
+
+ SashForm sashForm = new SashForm(form.getBody(), SWT.NONE);
+ sashForm.setOrientation(SWT.HORIZONTAL);
+ toolkit.adapt(sashForm);
+ GridLayout sashLayout = new GridLayout(2, false);
+ sashForm.setLayout(sashLayout);
+ GridData gd3 = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gd3.horizontalSpan = 2;
+ gd3.widthHint = 1;
+ sashForm.setLayoutData(gd3);
+
+ createRequestSide(sashForm);
+
+ createResponseSide(sashForm);
+
+ toolkit.paintBordersFor(form);
+ form.reflow(true);
+
+ methodCombo.setText(JAX_WS);
+ setControlsForWSType(getCurrentTestType());
+ setControlsForMethodType(methodCombo.getText());
+ setControlsForSelectedURL();
+ setMenusForCurrentState();
+ }
+
+ @Override
+ public void dispose() {
+ toolkit.dispose();
+ mImageRegistry.dispose();
+ super.dispose();
+ }
+
+ private String generateSampleSOAP ( String innerText ) {
+ String soapIn = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\n" + //$NON-NLS-1$
+ "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" " + //$NON-NLS-1$
+ "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + //$NON-NLS-1$
+ "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " + //$NON-NLS-1$
+ ">\n" + //$NON-NLS-1$
+ "<soap:Body>\n";//$NON-NLS-1$
+ if (innerText != null)
+ soapIn = soapIn + innerText;
+ soapIn = soapIn +
+ "</soap:Body>\n" + //$NON-NLS-1$
+ "</soap:Envelope>"; //$NON-NLS-1$
+ return soapIn;
+ }
+
+ private void setMenusForCurrentState() {
+ if (resultsText!= null && !resultsText.isDisposed()){
+ boolean enabled = resultsText.getText().trim().length() > 0;
+ copyMenuAction.setEnabled(enabled);
+ openInXMLEditorAction.setEnabled(enabled);
+ if (getCurrentTestType().equalsIgnoreCase(JAX_WS)) {
+ openResponseTagInXMLEditor.setEnabled(enabled);
+ } else if (getCurrentTestType().equalsIgnoreCase(JAX_RS) ){
+ openResponseTagInXMLEditor.setEnabled(false);
+ }
+ }
+ if (resultHeadersList != null && !resultHeadersList.isDisposed()) {
+ boolean enabled = resultHeadersList.getItemCount() > 0;
+ copyResultHeaderMenuAction.setEnabled(enabled);
+ }
+ }
+
+ private void openXMLEditor (String text){
+ IWorkbenchWindow window = getSite().getWorkbenchWindow();
+ IStorage storage = new ResultsXMLStorage(text);
+ IStorageEditorInput input = new ResultsXMLStorageInput(storage);
+ IWorkbenchPage page = window.getActivePage();
+ if (page != null) {
+ try {
+ if (WSTestUtils.isTextXML(text)) {
+ if (window.getWorkbench().getEditorRegistry().findEditor(XML_EDITOR_ID) != null) {
+ page.openEditor(input, XML_EDITOR_ID);
+ } else {
+ page.openEditor(input, DEFAULT_TEXT_EDITOR_ID);
+ }
+ } else {
+ page.openEditor(input, DEFAULT_TEXT_EDITOR_ID);
+ }
+ } catch (PartInitException e) {
+ JBossWSUIPlugin.log(e);
+ }
+ }
+ }
+
+ private void setControlsForSelectedURL() {
+ if (urlCombo.getText().trim().length() > 0) {
+ String urlText = urlCombo.getText();
+ try {
+ new URL(urlText);
+ startToolItem.setEnabled(true);
+ } catch (MalformedURLException mue) {
+ startToolItem.setEnabled(false);
+ return;
+ }
+ } else {
+ startToolItem.setEnabled(false);
+ }
+ }
+
+ /*
+ * Enable/disable controls based on the WS technology type
+ * and the method.
+ *
+ * @param methodType
+ */
+ private void setControlsForMethodType ( String methodType ) {
+ if (getCurrentTestType().equalsIgnoreCase(JAX_RS) &&
+ methodType.equalsIgnoreCase(GET)) {
+ bodyText.setEnabled(false);
+ } else {
+ bodyText.setEnabled(true);
+ }
+ }
+
+ /*
+ * Enable/disable controls based on the WS technology type
+ * @param wsType
+ */
+ private void setControlsForWSType ( String wsType ) {
+ if (wsType.equalsIgnoreCase(JAX_WS)) {
+ bodyText.setEnabled(true);
+ parmsList.setEnabled(false);
+ parmsList.removeAll();
+ dlsList.setEnabled(false);
+
+ String emptySOAP =
+ generateSampleSOAP(null);
+ emptySOAP = WSTestUtils.addNLsToXML(emptySOAP);
+
+ if (bodyText.getText().trim().length() == 0) {
+ bodyText.setText(emptySOAP);
+ }
+ openWSDLToolItem.setEnabled(true);
+ }
+ else if (wsType.equalsIgnoreCase(JAX_RS)) {
+ bodyText.setEnabled(true);
+ parmsList.setEnabled(true);
+ dlsList.setEnabled(true);
+ openWSDLToolItem.setEnabled(false);
+
+ if (bodyText.getText().trim().length() > 0) {
+ bodyText.setText(EMPTY_STRING);
+ }
+ }
+ setMenusForCurrentState();
+ }
+
+ /*
+ * Actually perform the test based on which type of activity it is
+ */
+ private void handleTest(final String wsTech) {
+
+ String urlText = urlCombo.getText();
+ try {
+ new URL(urlText);
+ } catch (MalformedURLException mue) {
+ // do nothing, but return since we don't have a working URL
+ return;
+ }
+
+ if (urlCombo.getItemCount() > 0) {
+ java.util.List<String> aList = Arrays.asList(urlCombo.getItems());
+ if (!aList.contains(urlCombo.getText())) {
+ urlCombo.add(urlCombo.getText());
+ }
+ } else {
+ urlCombo.add(urlCombo.getText());
+ }
+
+ final String url = urlCombo.getText();
+ final String action = actionText;
+ final String body = bodyText.getText();
+ final String method = methodCombo.getText();
+ final String headers = dlsList.getSelection();
+ final String parms = parmsList.getSelection();
+
+ Job aJob = new Job(JBossWSUIMessages.JAXRSWSTestView_Invoking_WS_Status) {
+ protected IStatus run(IProgressMonitor monitor) {
+ IStatus status = Status.OK_STATUS;
+ // execute the task ...
+ if (wsTech.equalsIgnoreCase(JAX_RS)) {
+ status = handleRSTest(monitor, url, method, body, parms, headers);
+ }
+ else if (wsTech.equalsIgnoreCase(JAX_WS)) {
+ status = handleWSTest(monitor, url, action, body);
+ }
+ monitor.done();
+ return status;
+ }
+ };
+ // true to indicate that this job was initiated by a UI end user
+ aJob.setUser(true);
+ aJob.addJobChangeListener(new IJobChangeListener() {
+
+ public void sleeping(IJobChangeEvent event) {};
+ public void scheduled(IJobChangeEvent event) {};
+ public void running(IJobChangeEvent event) {};
+ public void done(final IJobChangeEvent event) {
+ if (event.getResult() instanceof WSTestStatus) {
+ final WSTestStatus status = (WSTestStatus) event.getResult();
+ PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
+ public void run() {
+ if (status.getResultsText() != null) {
+ JAXRSWSTestView2.this.resultsText.setText(status.getResultsText());
+ JAXRSWSTestView2.this.resultsBrowser.setText(status.getResultsText());
+ JAXRSWSTestView2.this.form.reflow(true);
+ }
+ else if (status.getMessage() != null) {
+ JAXRSWSTestView2.this.resultsText.setText(status.getMessage());
+ JAXRSWSTestView2.this.resultsBrowser.setText(status.getMessage());
+ JAXRSWSTestView2.this.form.reflow(true);
+ }
+ resultHeadersList.removeAll();
+ String[] headers =
+ DelimitedStringList.parseString(status.getHeadersList(), RESULT_HEADER_DELIMITER);
+ if (headers != null && headers.length > 0) {
+ for (int i = 0; i < headers.length; i++) {
+ resultHeadersList.add(headers[i]);
+ }
+ }
+ }
+ });
+ }
+ }
+
+ public void awake(IJobChangeEvent event) {};
+ public void aboutToRun(IJobChangeEvent event) {};
+ });
+ aJob.schedule();
+
+ setMenusForCurrentState();
+ }
+
+ /*
+ * Actually call the WS and displays the result
+ */
+ private IStatus handleWSTest(final IProgressMonitor monitor, String url, String action, String body) {
+ try {
+
+ envelope = null;
+ soapbody = null;
+ monitor.worked(10);
+ JAXWSTester2 tester = new JAXWSTester2();
+ boolean itRan = false;
+ while (!monitor.isCanceled()) {
+ try {
+ if (!itRan && serviceNSMessage != null && serviceNSMessage.length == 3) {
+ itRan = true;
+ // call the service
+ tester.doTest(monitor, url, action, serviceNSMessage[0], serviceNSMessage[1], serviceNSMessage[2], body);
+ } else {
+ break;
+ }
+ } catch (InterruptedException ie) {
+ monitor.setCanceled(true);
+ }
+ }
+ if (monitor.isCanceled()) {
+ WSTestStatus status = new WSTestStatus(IStatus.OK,
+ JBossWSUIPlugin.PLUGIN_ID,
+ JBossWSUIMessages.JAXRSWSTestView_Message_Service_Invocation_Cancelled);
+ return status;
+ }
+ if (!itRan) {
+ WSTestStatus status = new WSTestStatus(IStatus.OK,
+ JBossWSUIPlugin.PLUGIN_ID,
+ JBossWSUIMessages.JAXRSWSTestView_Message_Unsuccessful_Test);
+ return status;
+ }
+ monitor.worked(70);
+ String result = tester.getResultBody();
+ envelope = tester.getResultSOAP();
+ soapbody = tester.getResultSOAPBody();
+ String cleanedUp = WSTestUtils.addNLsToXML(result);
+
+ WSTestStatus status = new WSTestStatus(IStatus.OK,
+ JBossWSUIPlugin.PLUGIN_ID,
+ JBossWSUIMessages.JAXRSWSTestView_JAXWS_Success_Status);
+ status.setResultsText(cleanedUp);
+ monitor.worked(10);
+
+ String listText = EMPTY_STRING;
+ if (tester.getResultHeaders() != null) {
+ Iterator<?> iter = tester.getResultHeaders().entrySet().iterator();
+ while (iter.hasNext()) {
+ String text = EMPTY_STRING;
+ Entry<?, ?> entry = (Entry<?, ?>) iter.next();
+ if (entry.getKey() == null)
+ text = entry.getValue().toString();
+ else
+ text = text + entry.toString();
+ listText = listText + text;
+ if (iter.hasNext()) {
+ listText = listText + RESULT_HEADER_DELIMITER;
+ }
+ }
+ }
+ status.setHeadersList(listText);
+ monitor.worked(10);
+ return status;
+ } catch (Exception e) {
+ WSTestStatus status = new WSTestStatus(IStatus.OK,
+ JBossWSUIPlugin.PLUGIN_ID,
+ JBossWSUIMessages.JAXRSWSTestView_Exception_Status + e.getLocalizedMessage());
+ status.setResultsText(e.toString());
+ JBossWSUIPlugin.log(e);
+ return status;
+ }
+ }
+
+ /*
+ * Actually call the RESTful WS to test it
+ */
+ private IStatus handleRSTest(final IProgressMonitor monitor, String address, String method, String body, String parms, String headersStr) {
+
+ if (method.equalsIgnoreCase(GET))
+ body = EMPTY_STRING;
+
+ // if no actual text in the request body, set to null
+ if (body.trim().length() == 0) body = null;
+
+ monitor.worked(10);
+
+ // Process parameters for web service call
+ HashMap<String, String> parameters = new HashMap<String, String>();
+ if (parms != null && parms.length() > 0) {
+ String[] parsedList = DelimitedStringList.parseString(parms , ","); //$NON-NLS-1$
+ if (parsedList != null && parsedList.length > 0) {
+ for (int i = 0; i < parsedList.length; i++) {
+ String nameValuePair = parsedList[i];
+ String[] nameAndValue = DelimitedStringList.parseString(nameValuePair, "="); //$NON-NLS-1$
+ if (nameAndValue != null && nameAndValue.length == 2) {
+ parameters.put(nameAndValue[0], nameAndValue[1]);
+ }
+ }
+ }
+ }
+
+ monitor.worked(10);
+ // Process headers for web service call
+ HashMap<String, String> headers = new HashMap<String, String>();
+ if (headersStr != null && headersStr.length() > 0) {
+ String[] parsedList = DelimitedStringList.parseString(headersStr , ","); //$NON-NLS-1$
+ if (parsedList != null && parsedList.length > 0) {
+ for (int i = 0; i < parsedList.length; i++) {
+ String nameValuePair = parsedList[i];
+ String[] nameAndValue = DelimitedStringList.parseString(nameValuePair, "="); //$NON-NLS-1$
+ if (nameAndValue != null && nameAndValue.length == 2) {
+ headers.put(nameAndValue[0], nameAndValue[1]);
+ }
+ }
+ }
+ }
+
+ JAXRSTester tester = new JAXRSTester();
+
+ // now actually call it
+ try {
+
+ // call the service
+ tester.doTest(address, parameters, headers, method, body);
+
+ String result = tester.getResultBody();
+
+ // put the results in the result text field
+ String cleanedUp = WSTestUtils.addNLsToXML(result);
+
+ WSTestStatus status = new WSTestStatus(IStatus.OK,
+ JBossWSUIPlugin.PLUGIN_ID,
+ JBossWSUIMessages.JAXRSWSTestView_JAXRS_Success_Status);
+ status.setResultsText(cleanedUp);
+
+ String listText = EMPTY_STRING;
+ if (tester.getResultHeaders() != null) {
+ Iterator<?> iter = tester.getResultHeaders().entrySet().iterator();
+ while (iter.hasNext()) {
+ String text = EMPTY_STRING;
+ Entry<?, ?> entry = (Entry<?, ?>) iter.next();
+ if (entry.getKey() == null)
+ text = entry.getValue().toString();
+ else
+ text = text + entry.toString();
+ listText = listText + text;
+ if (iter.hasNext()) {
+ listText = listText + RESULT_HEADER_DELIMITER;
+ }
+ }
+ }
+
+ status.setHeadersList(listText);
+ monitor.worked(10);
+ return status;
+
+ } catch (Exception e) {
+ String result = tester.getResultBody();
+
+ // put the results in the result text field
+ String cleanedUp = WSTestUtils.addNLsToXML(result);
+
+ WSTestStatus status = new WSTestStatus(IStatus.OK,
+ JBossWSUIPlugin.PLUGIN_ID,
+ JBossWSUIMessages.JAXRSWSTestView_JAXRS_Success_Status);
+ status.setResultsText(cleanedUp);
+
+ String listText = EMPTY_STRING;
+ if (tester.getResultHeaders() != null) {
+ Iterator<?> iter = tester.getResultHeaders().entrySet().iterator();
+ while (iter.hasNext()) {
+ String text = EMPTY_STRING;
+ Entry<?, ?> entry = (Entry<?, ?>) iter.next();
+ if (entry.getKey() == null)
+ text = entry.getValue().toString();
+ else
+ text = text + entry.toString();
+ listText = listText + text;
+ if (iter.hasNext()) {
+ listText = listText + RESULT_HEADER_DELIMITER;
+ }
+ }
+ }
+
+ status.setHeadersList(listText);
+ monitor.worked(10);
+ return status;
+ }
+ }
+
+ /**
+ * Passing the focus request to the control.
+ */
+ public void setFocus() {
+ // set initial focus to the URL text combo
+ urlCombo.setFocus();
+ }
+
+}
\ No newline at end of file
Property changes on: trunk/ws/plugins/org.jboss.tools.ws.ui/src/org/jboss/tools/ws/ui/views/JAXRSWSTestView2.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
More information about the jbosstools-commits
mailing list