Package com.eviware.soapui.impl.wsdl.teststeps.actions

Source Code of com.eviware.soapui.impl.wsdl.teststeps.actions.ShowMessageExchangeAction$MessageExchangeDesktopPanel

/*
*  soapUI, copyright (C) 2004-2011 eviware.com
*
*  soapUI is free software; you can redistribute it and/or modify it under the
*  terms of version 2.1 of the GNU Lesser General Public License as published by
*  the Free Software Foundation.
*
*  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
*  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*  See the GNU Lesser General Public License for more details at gnu.org.
*/

package com.eviware.soapui.impl.wsdl.teststeps.actions;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import org.jdesktop.swingx.JXTable;

import com.eviware.soapui.SoapUI;
import com.eviware.soapui.impl.wsdl.panels.request.StringToStringMapTableModel;
import com.eviware.soapui.impl.wsdl.support.MessageExchangeRequestMessageEditor;
import com.eviware.soapui.impl.wsdl.support.MessageExchangeResponseMessageEditor;
import com.eviware.soapui.model.ModelItem;
import com.eviware.soapui.model.iface.MessageExchange;
import com.eviware.soapui.model.support.ModelSupport;
import com.eviware.soapui.model.testsuite.AssertedXPath;
import com.eviware.soapui.model.testsuite.RequestAssertedMessageExchange;
import com.eviware.soapui.model.testsuite.ResponseAssertedMessageExchange;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.types.StringToStringMap;
import com.eviware.soapui.ui.desktop.DesktopPanel;
import com.eviware.soapui.ui.support.DefaultDesktopPanel;

/**
* Shows a desktop-panel with the TestStepResult for a WsdlTestRequestStepResult
*
* @author Ole.Matzura
*/

public class ShowMessageExchangeAction extends AbstractAction
{
  private DefaultDesktopPanel desktopPanel;
  private final MessageExchange messageExchange;
  private final String ownerName;
  private MessageExchangeResponseMessageEditor responseMessageEditor;
  private MessageExchangeRequestMessageEditor requestMessageEditor;

  public ShowMessageExchangeAction( MessageExchange messageExchange, String ownerName )
  {
    super( "Show Message Exchange" );
    this.ownerName = ownerName;
    this.messageExchange = messageExchange;
  }

  public void actionPerformed( ActionEvent e )
  {
    try
    {
      UISupport.showDesktopPanel( buildFrame() );
    }
    catch( Exception ex )
    {
      SoapUI.logError( ex );
    }
  }

  private DesktopPanel buildFrame()
  {
    if( desktopPanel == null )
    {
      desktopPanel = new MessageExchangeDesktopPanel( "Message Viewer", "Message for " + ownerName, buildContent() );
    }

    return desktopPanel;
  }

  private JComponent buildContent()
  {
    JTabbedPane messageTabs = new JTabbedPane();
    messageTabs.addTab( "Request Message", buildRequestTab() );
    messageTabs.addTab( "Response Message", buildResponseTab() );
    messageTabs.addTab( "Properties", buildPropertiesTab() );

    String[] messages = messageExchange.getMessages();
    if( messages != null && messages.length > 0 )
      messageTabs.addTab( "Messages", buildMessagesTab() );

    if( getAssertedXPaths().size() > 0 )
      messageTabs.addTab( "XPath Assertions", buildAssertionsTab() );

    messageTabs.setPreferredSize( new Dimension( 500, 400 ) );

    JPanel tabPanel = UISupport.createTabPanel( messageTabs, true );

    Component descriptionPanel = UISupport.buildDescription( "MessageExchange Results",
        "See the request/response message below", null );
    tabPanel.add( descriptionPanel, BorderLayout.NORTH );

    return tabPanel;
  }

  private Component buildAssertionsTab()
  {
    List<AssertedXPath> assertedXPaths = getAssertedXPaths();

    DefaultTableModel tm = new DefaultTableModel( assertedXPaths.size(), 2 );
    tm.setColumnIdentifiers( new String[] { "Label", "XPath" } );

    JXTable table = new JXTable( tm );
    table.setHorizontalScrollEnabled( true );
    table.getColumn( 0 ).setPreferredWidth( 100 );

    for( int c = 0; c < assertedXPaths.size(); c++ )
    {
      tm.setValueAt( assertedXPaths.get( c ).getLabel(), c, 0 );
      tm.setValueAt( assertedXPaths.get( c ).getPath(), c, 1 );
    }

    return new JScrollPane( table );
  }

  private List<AssertedXPath> getAssertedXPaths()
  {
    List<AssertedXPath> assertedXPaths = new ArrayList<AssertedXPath>();

    if( messageExchange instanceof RequestAssertedMessageExchange )
    {
      AssertedXPath[] xpaths = ( ( RequestAssertedMessageExchange )messageExchange ).getAssertedXPathsForRequest();
      if( xpaths != null && xpaths.length > 0 )
      {
        assertedXPaths.addAll( Arrays.asList( xpaths ) );
      }
    }

    if( messageExchange instanceof ResponseAssertedMessageExchange )
    {
      AssertedXPath[] xpaths = ( ( ResponseAssertedMessageExchange )messageExchange ).getAssertedXPathsForResponse();
      if( xpaths != null && xpaths.length > 0 )
      {
        assertedXPaths.addAll( Arrays.asList( xpaths ) );
      }
    }
    return assertedXPaths;
  }

  private Component buildPropertiesTab()
  {
    StringToStringMap properties = new StringToStringMap();
    if( messageExchange != null && messageExchange.getProperties() != null )
    {
      properties.putAll( messageExchange.getProperties() );

      // for( String name : messageExchange.getResponse().getPropertyNames())
      // {
      // properties.put( name, messageExchange.getResponse().getProperty(
      // name ) );
      // }

      properties.put( "Timestamp", new Date( messageExchange.getTimestamp() ).toString() );
      properties.put( "Time Taken", String.valueOf( messageExchange.getTimeTaken() ) );
    }
    JTable table = new JTable( new StringToStringMapTableModel( properties, "Name", "Value", false ) );
    return new JScrollPane( table );
  }

  private Component buildMessagesTab()
  {
    String[] messages = messageExchange.getMessages();
    return messages == null || messages.length == 0 ? new JLabel( "No messages to display" ) : new JScrollPane(
        new JList( messages ) );
  }

  private Component buildResponseTab()
  {
    responseMessageEditor = new MessageExchangeResponseMessageEditor( messageExchange );
    return responseMessageEditor;
  }

  private Component buildRequestTab()
  {
    requestMessageEditor = new MessageExchangeRequestMessageEditor( messageExchange );
    return requestMessageEditor;
  }

  private final class MessageExchangeDesktopPanel extends DefaultDesktopPanel
  {
    private MessageExchangeDesktopPanel( String title, String description, JComponent component )
    {
      super( title, description, component );
    }

    @Override
    public boolean onClose( boolean canCancel )
    {
      requestMessageEditor.release();
      responseMessageEditor.release();

      desktopPanel = null;

      return super.onClose( canCancel );
    }

    @Override
    public boolean dependsOn( ModelItem modelItem )
    {
      return ModelSupport.dependsOn( messageExchange.getModelItem(), modelItem );
    }
  }
}
TOP

Related Classes of com.eviware.soapui.impl.wsdl.teststeps.actions.ShowMessageExchangeAction$MessageExchangeDesktopPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.