Package com.eviware.soapui.impl.wsdl.endpoint

Source Code of com.eviware.soapui.impl.wsdl.endpoint.DefaultEndpointStrategyConfigurationPanel$OutgoingWssCellEditor

/*
*  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.endpoint;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;

import com.eviware.soapui.config.EndpointConfig;
import com.eviware.soapui.impl.support.AbstractHttpRequest;
import com.eviware.soapui.impl.support.actions.ShowOnlineHelpAction;
import com.eviware.soapui.impl.support.http.HttpRequestTestStep;
import com.eviware.soapui.impl.wsdl.WsdlInterface;
import com.eviware.soapui.impl.wsdl.WsdlRequest;
import com.eviware.soapui.impl.wsdl.endpoint.DefaultEndpointStrategy.EndpointDefaults;
import com.eviware.soapui.impl.wsdl.support.HelpUrls;
import com.eviware.soapui.impl.wsdl.support.wss.WssContainer;
import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequest;
import com.eviware.soapui.model.iface.Interface;
import com.eviware.soapui.model.iface.Operation;
import com.eviware.soapui.model.testsuite.TestCase;
import com.eviware.soapui.model.testsuite.TestStep;
import com.eviware.soapui.model.testsuite.TestSuite;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.components.JXToolBar;
import com.eviware.soapui.support.components.MetricsPanel;

public class DefaultEndpointStrategyConfigurationPanel extends JPanel implements PropertyChangeListener
{
  private EndpointsTableModel tableModel;
  private JTable table;
  private JButton deleteButton;
  private JButton assignButton;
  private Interface iface;
  private final DefaultEndpointStrategy strategy;

  public DefaultEndpointStrategyConfigurationPanel( Interface iface, DefaultEndpointStrategy strategy )
  {
    super( new BorderLayout() );

    this.iface = iface;
    this.strategy = strategy;

    buildUI();

    enableButtons();
  }

  private void buildUI()
  {
    tableModel = iface instanceof WsdlInterface ? new WsdlEndpointsTableModel() : new RestEndpointsTableModel();
    table = new JTable( tableModel );
    table.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
    table.getSelectionModel().addListSelectionListener( new ListSelectionListener()
    {
      public void valueChanged( ListSelectionEvent e )
      {
        enableButtons();
      }
    } );

    for( int c = 0; c < table.getColumnCount(); c++ )
      table.getColumnModel().getColumn( c )
          .setHeaderRenderer( new MetricsPanel.InternalHeaderRenderer( getBackground() ) );

    table.getColumnModel().getColumn( 0 ).setPreferredWidth( 250 );

    if( iface instanceof WsdlInterface )
    {
      JComboBox wssTypeCombo = new JComboBox( new String[] { WsdlRequest.PW_TYPE_NONE, WsdlRequest.PW_TYPE_TEXT,
          WsdlRequest.PW_TYPE_DIGEST } );
      wssTypeCombo.setEditable( true );

      table.getColumnModel().getColumn( 4 ).setCellEditor( new DefaultCellEditor( wssTypeCombo ) );
      table.getColumnModel().getColumn( 6 )
          .setCellEditor( new OutgoingWssCellEditor( ( ( WsdlInterface )iface ).getProject().getWssContainer() ) );
      table.getColumnModel().getColumn( 7 )
          .setCellEditor( new IncomingWssCellEditor( ( ( WsdlInterface )iface ).getProject().getWssContainer() ) );
      table.getColumnModel()
          .getColumn( 8 )
          .setCellEditor(
              new DefaultCellEditor( new JComboBox( new String[] { EndpointConfig.Mode.OVERRIDE.toString(),
                  EndpointConfig.Mode.COMPLEMENT.toString(), EndpointConfig.Mode.COPY.toString() } ) ) );
    }
    else
    {
      table.getColumnModel()
          .getColumn( 4 )
          .setCellEditor(
              new DefaultCellEditor( new JComboBox( new String[] { EndpointConfig.Mode.OVERRIDE.toString(),
                  EndpointConfig.Mode.COMPLEMENT.toString(), EndpointConfig.Mode.COPY.toString() } ) ) );
    }

    table.getTableHeader().setReorderingAllowed( false );

    setBackground( Color.WHITE );
    setOpaque( true );

    JScrollPane scrollPane = new JScrollPane( table );
    scrollPane.setBorder( BorderFactory.createEmptyBorder( 5, 2, 5, 2 ) );
    scrollPane.setVerticalScrollBarPolicy( ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS );
    scrollPane.setBackground( Color.WHITE );

    add( scrollPane, BorderLayout.CENTER );
    add( createButtons(), BorderLayout.NORTH );

    iface.addPropertyChangeListener( "endpoints", this );
  }

  protected void enableButtons()
  {
    deleteButton.setEnabled( table.getSelectedRow() != -1 );
    assignButton.setEnabled( table.getSelectedRow() != -1 );
  }

  private Component createButtons()
  {
    JXToolBar toolbar = UISupport.createToolbar();

    toolbar.addFixed( UISupport.createToolbarButton( new AddAction() ) );
    deleteButton = UISupport.createToolbarButton( new DeleteAction() );
    toolbar.addFixed( deleteButton );
    toolbar.addRelatedGap();
    assignButton = new JButton( new AssignAction() );
    toolbar.addFixed( assignButton );

    toolbar.addGlue();
    ShowOnlineHelpAction showOnlineHelpAction = new ShowOnlineHelpAction( HelpUrls.ENDPOINTSEDITOR_HELP_URL );
    toolbar.addFixed( UISupport.createToolbarButton( showOnlineHelpAction ) );

    return toolbar;
  }

  private class AddAction extends AbstractAction
  {
    public AddAction()
    {
      putValue( SMALL_ICON, UISupport.createImageIcon( "/add_property.gif" ) );
      putValue( Action.SHORT_DESCRIPTION, "Adds a new endpoint to the list" );
    }

    public void actionPerformed( ActionEvent e )
    {
      String endpoint = UISupport.prompt( "Enter new endpoint URL", "Add Endpoint", "" );

      if( endpoint == null )
        return;

      tableModel.addEndpoint( endpoint );
    }
  }

  private class AssignAction extends AbstractAction
  {
    private static final String ALL_REQUESTS = "- All Requests -";
    private static final String ALL_TEST_REQUESTS = "- All Test Requests -";
    private static final String ALL_REQUESTS_AND_TEST_REQUESTS = "- All Requests and TestRequests -";
    private static final String ALL_REQUESTS_WITH_NO_ENDPOINT = "- All Requests with no endpoint -";

    public AssignAction()
    {
      super( "Assign" );
      putValue( Action.SHORT_DESCRIPTION,
          "Assigns the selected endpoint to Requests/TestRequests for this Interface" );
    }

    public void actionPerformed( ActionEvent e )
    {
      int selectedIndex = table.getSelectedRow();
      if( selectedIndex == -1 )
      {
        Toolkit.getDefaultToolkit().beep();
        return;
      }

      String selectedEndpoint = tableModel.getEndpointAt( selectedIndex );
      EndpointDefaults defaults = tableModel.getDefaultsAt( selectedIndex );

      List<String> list = new ArrayList<String>( Arrays.asList( iface.getEndpoints() ) );
      list.add( 0, ALL_REQUESTS );
      list.add( 1, ALL_TEST_REQUESTS );
      list.add( 2, ALL_REQUESTS_AND_TEST_REQUESTS );
      list.add( 3, ALL_REQUESTS_WITH_NO_ENDPOINT );

      Object endpoint = UISupport.prompt( "Assign selected endpoint and authorization to..", "Assign Endpoint",
          list.toArray(), ALL_REQUESTS_WITH_NO_ENDPOINT );

      if( endpoint == null )
        return;

      if( endpoint.equals( ALL_REQUESTS ) || endpoint.equals( ALL_REQUESTS_WITH_NO_ENDPOINT )
          || endpoint.equals( ALL_REQUESTS_AND_TEST_REQUESTS ) )
      {
        for( Operation operation : iface.getAllOperations() )
        {
          for( int i = 0; i < operation.getRequestCount(); i++ )
          {
            AbstractHttpRequest<?> request = ( AbstractHttpRequest<?> )operation.getRequestAt( i );
            String ep = request.getEndpoint();

            if( endpoint.equals( ALL_REQUESTS ) || endpoint.equals( ALL_REQUESTS_AND_TEST_REQUESTS )
                || ( endpoint.equals( ALL_REQUESTS_WITH_NO_ENDPOINT ) && ep == null )
                || ( ep.equals( endpoint ) ) )
            {
              request.setEndpoint( selectedEndpoint );

              request.setUsername( defaults.getUsername() );
              request.setPassword( defaults.getPassword() );
              request.setDomain( defaults.getDomain() );

              if( request instanceof WsdlRequest )
              {
                ( ( WsdlRequest )request ).setWssPasswordType( defaults.getWssType() );
                ( ( WsdlRequest )request ).setWssTimeToLive( defaults.getWssTimeToLive() );
                ( ( WsdlRequest )request ).setOutgoingWss( defaults.getOutgoingWss() );
                ( ( WsdlRequest )request ).setIncomingWss( defaults.getIncomingWss() );
              }
            }
          }
        }
      }

      if( endpoint.equals( ALL_REQUESTS_AND_TEST_REQUESTS ) || endpoint.equals( ALL_TEST_REQUESTS ) )
      {
        for( TestSuite testSuite : iface.getProject().getTestSuiteList() )
        {
          for( TestCase testCase : testSuite.getTestCaseList() )
          {
            for( TestStep testStep : testCase.getTestStepList() )
            {
              if( testStep instanceof HttpRequestTestStep )
              {
                AbstractHttpRequest<?> httpRequest = ( ( HttpRequestTestStep )testStep ).getHttpRequest();
                if( httpRequest.getOperation() != null && httpRequest.getOperation().getInterface() == iface )
                {
                  httpRequest.setEndpoint( selectedEndpoint );

                  httpRequest.setUsername( defaults.getUsername() );
                  httpRequest.setPassword( defaults.getPassword() );
                  httpRequest.setDomain( defaults.getDomain() );
                  if( httpRequest instanceof WsdlRequest )
                  {
                    WsdlTestRequest testRequest = ( WsdlTestRequest )httpRequest;
                    testRequest.setWssPasswordType( defaults.getWssType() );
                    testRequest.setWssTimeToLive( defaults.getWssTimeToLive() );
                    testRequest.setOutgoingWss( defaults.getOutgoingWss() );
                    testRequest.setIncomingWss( defaults.getIncomingWss() );
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  private class DeleteAction extends AbstractAction
  {
    public DeleteAction()
    {
      putValue( SMALL_ICON, UISupport.createImageIcon( "/remove_property.gif" ) );
      putValue( Action.SHORT_DESCRIPTION, "Deletes the selected endpoint from the list" );
    }

    public void actionPerformed( ActionEvent e )
    {
      int index = table.getSelectedRow();
      if( index == -1 )
      {
        Toolkit.getDefaultToolkit().beep();
        return;
      }

      if( UISupport.confirm( "Delete selected endpoint?", "Delete Endpoint" ) )
      {
        tableModel.removeEndpoint( index );
      }
    }
  }

  private abstract class EndpointsTableModel extends AbstractTableModel
  {
    public String getEndpointAt( int selectedIndex )
    {
      return iface.getEndpoints()[selectedIndex];
    }

    public EndpointDefaults getDefaultsAt( int selectedIndex )
    {
      String endpoint = getEndpointAt( selectedIndex );
      return strategy.getEndpointDefaults( endpoint );
    }

    public void addEndpoint( String endpoint )
    {
      int rowCount = getRowCount();
      iface.addEndpoint( endpoint );

      fireTableRowsInserted( rowCount, rowCount );
    }

    public void removeEndpoint( int index )
    {
      String ep = getEndpointAt( index );
      iface.removeEndpoint( ep );
      fireTableRowsDeleted( index, index );
    }

    public int getRowCount()
    {
      return iface == null ? 0 : iface.getEndpoints().length;
    }

    @Override
    public boolean isCellEditable( int rowIndex, int columnIndex )
    {
      return true;
    }

    public void refresh()
    {
      fireTableDataChanged();
    }
  }

  private class RestEndpointsTableModel extends EndpointsTableModel
  {
    public int getColumnCount()
    {
      return 5;
    }

    @Override
    public String getColumnName( int column )
    {
      switch( column )
      {
      case 0 :
        return "Endpoint";
      case 1 :
        return "Username";
      case 2 :
        return "Password";
      case 3 :
        return "Domain";
      case 4 :
        return "Mode";
      }

      return null;
    }

    public Object getValueAt( int rowIndex, int columnIndex )
    {
      String endpoint = getEndpointAt( rowIndex );
      EndpointDefaults defaults = strategy.getEndpointDefaults( endpoint );

      switch( columnIndex )
      {
      case 0 :
        return endpoint;
      case 1 :
        return defaults.getUsername();
      case 2 :
        return defaults.getPassword();
      case 3 :
        return defaults.getDomain();
      case 4 :
        return defaults.getMode();
      }

      return null;
    }

    @Override
    public void setValueAt( Object aValue, int rowIndex, int columnIndex )
    {
      String endpoint = getEndpointAt( rowIndex );
      EndpointDefaults defaults = strategy.getEndpointDefaults( endpoint );

      if( aValue == null )
        aValue = "";

      switch( columnIndex )
      {
      case 0 :
      {
        // strategy.changeEndpoint( endpoint, aValue.toString() );
        iface.changeEndpoint( endpoint, aValue.toString() );
        break;
      }
      case 1 :
      {
        defaults.setUsername( aValue.toString() );
        break;
      }
      case 2 :
      {
        defaults.setPassword( aValue.toString() );
        break;
      }
      case 3 :
      {
        defaults.setDomain( aValue.toString() );
        break;
      }
      case 4 :
      {
        defaults.setMode( EndpointConfig.Mode.Enum.forString( aValue.toString() ) );
        break;
      }
      }
    }
  }

  private class WsdlEndpointsTableModel extends EndpointsTableModel
  {
    public int getColumnCount()
    {
      return 9;
    }

    @Override
    public String getColumnName( int column )
    {
      switch( column )
      {
      case 0 :
        return "Endpoint";
      case 1 :
        return "Username";
      case 2 :
        return "Password";
      case 3 :
        return "Domain";
      case 4 :
        return "WSS-Type";
      case 5 :
        return "WSS-TimeToLive";
      case 6 :
        return "Outgoing WSS";
      case 7 :
        return "Incoming WSS";
      case 8 :
        return "Mode";
      }

      return null;
    }

    public Object getValueAt( int rowIndex, int columnIndex )
    {
      String endpoint = getEndpointAt( rowIndex );
      EndpointDefaults defaults = strategy.getEndpointDefaults( endpoint );

      switch( columnIndex )
      {
      case 0 :
        return endpoint;
      case 1 :
        return defaults.getUsername();
      case 2 :
        return defaults.getPassword();
      case 3 :
        return defaults.getDomain();
      case 4 :
        return defaults.getWssType();
      case 5 :
        return defaults.getWssTimeToLive();
      case 6 :
        return defaults.getOutgoingWss();
      case 7 :
        return defaults.getIncomingWss();
      case 8 :
        return defaults.getMode();
      }

      return null;
    }

    @Override
    public void setValueAt( Object aValue, int rowIndex, int columnIndex )
    {
      String endpoint = getEndpointAt( rowIndex );
      EndpointDefaults defaults = strategy.getEndpointDefaults( endpoint );

      if( aValue == null )
        aValue = "";

      switch( columnIndex )
      {
      case 0 :
      {
        // strategy.changeEndpoint( endpoint, aValue.toString() );
        iface.changeEndpoint( endpoint, aValue.toString() );
        break;
      }
      case 1 :
      {
        defaults.setUsername( aValue.toString() );
        break;
      }
      case 2 :
      {
        defaults.setPassword( aValue.toString() );
        break;
      }
      case 3 :
      {
        defaults.setDomain( aValue.toString() );
        break;
      }
      case 4 :
      {
        defaults.setWssType( aValue.toString() );
        break;
      }
      case 5 :
      {
        defaults.setWssTimeToLive( aValue.toString() );
        break;
      }
      case 6 :
      {
        defaults.setOutgoingWss( aValue.toString() );
        break;
      }
      case 7 :
      {
        defaults.setIncomingWss( aValue.toString() );
        break;
      }
      case 8 :
      {
        defaults.setMode( EndpointConfig.Mode.Enum.forString( aValue.toString() ) );
        break;
      }
      }
    }
  }

  private static class IncomingWssCellEditor extends DefaultCellEditor
  {
    private final WssContainer wssContainer;

    public IncomingWssCellEditor( WssContainer wssContainer )
    {
      super( new JComboBox() );
      this.wssContainer = wssContainer;
    }

    @Override
    public Component getTableCellEditorComponent( JTable table, Object value, boolean isSelected, int row, int column )
    {
      JComboBox comboBox = ( JComboBox )super.getTableCellEditorComponent( table, value, isSelected, row, column );

      DefaultComboBoxModel model = new DefaultComboBoxModel( wssContainer.getIncomingWssNames() );
      model.addElement( "" );

      comboBox.setModel( model );

      return comboBox;
    }
  }

  private static class OutgoingWssCellEditor extends DefaultCellEditor
  {
    private final WssContainer wssContainer;

    public OutgoingWssCellEditor( WssContainer wssContainer )
    {
      super( new JComboBox() );
      this.wssContainer = wssContainer;
    }

    @Override
    public Component getTableCellEditorComponent( JTable table, Object value, boolean isSelected, int row, int column )
    {
      JComboBox comboBox = ( JComboBox )super.getTableCellEditorComponent( table, value, isSelected, row, column );

      DefaultComboBoxModel model = new DefaultComboBoxModel( wssContainer.getOutgoingWssNames() );
      model.addElement( "" );

      comboBox.setModel( model );

      return comboBox;
    }
  }

  public void release()
  {
    iface.removePropertyChangeListener( "endpoints", this );
  }

  public void propertyChange( PropertyChangeEvent evt )
  {
    tableModel.refresh();
  }
}
TOP

Related Classes of com.eviware.soapui.impl.wsdl.endpoint.DefaultEndpointStrategyConfigurationPanel$OutgoingWssCellEditor

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.