Package com.eviware.soapui.impl.support

Source Code of com.eviware.soapui.impl.support.EndpointsComboBoxModel

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

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import javax.swing.ComboBoxModel;
import javax.swing.SwingUtilities;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;

import com.eviware.soapui.impl.wsdl.WsdlInterface;
import com.eviware.soapui.support.UISupport;

/**
* ComboBox model for a request endpoint
*
* @author Ole.Matzura
*/

public class EndpointsComboBoxModel implements ComboBoxModel, PropertyChangeListener
{
  private static final String ADD_NEW_ENDPOINT = "[add new endpoint..]";
  private static final String EDIT_ENDPOINT = "[edit current..]";
  private static final String DELETE_ENDPOINT = "[delete current]";

  private Set<ListDataListener> listeners = new HashSet<ListDataListener>();
  private String[] endpoints;
  private AbstractHttpRequestInterface<?> request;

  public EndpointsComboBoxModel( AbstractHttpRequestInterface<?> request )
  {
    this.request = request;
    initEndpoints();
    request.addPropertyChangeListener( this );
    if( request.getOperation() != null )
      request.getOperation().getInterface().addPropertyChangeListener( this );
  }

  public void setSelectedItem( Object anItem )
  {
    final String endpoint = request.getEndpoint();
    if( anItem != null && anItem.equals( ADD_NEW_ENDPOINT ) )
    {
      SwingUtilities.invokeLater( new Runnable()
      {
        public void run()
        {
          String value = UISupport.prompt( "Add new endpoint for interface ["
              + request.getOperation().getInterface().getName() + "]", "Add new endpoint", endpoint );

          if( value != null )
          {
            if( request.getOperation() != null )
              request.getOperation().getInterface().addEndpoint( value );
            request.setEndpoint( value );
          }

        }
      } );

    }
    else if( anItem != null && anItem.equals( EDIT_ENDPOINT ) )
    {
      SwingUtilities.invokeLater( new Runnable()
      {
        public void run()
        {
          String value = UISupport.prompt( "Edit endpoint for interface ["
              + request.getOperation().getInterface().getName() + "]", "Edit endpoint", endpoint );

          if( value != null )
          {
            if( request.getOperation() != null )
              request.getOperation().getInterface().changeEndpoint( endpoint, value );
            request.setEndpoint( value );
          }
        }
      } );
    }
    else if( anItem != null && anItem.equals( DELETE_ENDPOINT ) )
    {
      SwingUtilities.invokeLater( new Runnable()
      {
        public void run()
        {
          if( UISupport.confirm( "Delete endpoint [" + endpoint + "]", "Delete endpoint" ) )
          {
            if( request.getOperation() != null )
              request.getOperation().getInterface().removeEndpoint( endpoint );
            request.setEndpoint( null );
          }
        }
      } );
    }
    else
    {
      request.setEndpoint( ( String )anItem );
    }

    notifyContentsChanged();
  }

  public void refresh()
  {
    initEndpoints();
    notifyContentsChanged();
  }

  private void initEndpoints()
  {
    if( request.getOperation() != null )
      endpoints = request.getOperation().getInterface().getEndpoints();
    else
      endpoints = new String[0];
  }

  private void notifyContentsChanged()
  {
    Iterator<ListDataListener> iterator = listeners.iterator();
    ListDataEvent e = new ListDataEvent( this, ListDataEvent.CONTENTS_CHANGED, 0, getSize() );
    while( iterator.hasNext() )
    {
      iterator.next().contentsChanged( e );
    }
  }

  public Object getSelectedItem()
  {
    String endpoint = request.getEndpoint();
    return endpoint == null ? "- no endpoint set -" : endpoint;
  }

  public int getSize()
  {
    return endpoints.length + 3;
  }

  public Object getElementAt( int index )
  {
    if( index == endpoints.length )
      return EndpointsComboBoxModel.EDIT_ENDPOINT;
    else if( index == endpoints.length + 1 )
      return EndpointsComboBoxModel.ADD_NEW_ENDPOINT;
    else if( index == endpoints.length + 2 )
      return EndpointsComboBoxModel.DELETE_ENDPOINT;
    else
      return endpoints[index];
  }

  public void addListDataListener( ListDataListener l )
  {
    listeners.add( l );
  }

  public void removeListDataListener( ListDataListener l )
  {
    listeners.remove( l );
  }

  public void propertyChange( PropertyChangeEvent evt )
  {
    String propertyName = evt.getPropertyName();

    if( propertyName.equals( AbstractHttpRequest.ENDPOINT_PROPERTY ) )
    {
      notifyContentsChanged();
    }
    else if( propertyName.equals( WsdlInterface.ENDPOINT_PROPERTY ) )
    {
      refresh();
    }
  }

  public void release()
  {
    request.removePropertyChangeListener( this );
    if( request.getOperation() != null )
      request.getOperation().getInterface().removePropertyChangeListener( this );
  }
}
TOP

Related Classes of com.eviware.soapui.impl.support.EndpointsComboBoxModel

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.