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

Source Code of com.eviware.soapui.impl.wsdl.teststeps.WsdlTestStepWithProperties

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

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.eviware.soapui.config.TestStepConfig;
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase;
import com.eviware.soapui.model.testsuite.TestProperty;
import com.eviware.soapui.model.testsuite.TestPropertyListener;

/**
* Base class for WSDL TestCase test steps.
*
* @author Ole.Matzura
*/

abstract public class WsdlTestStepWithProperties extends WsdlTestStep
{
  public static String RESPONSE_AS_XML = "ResponseAsXml";
  private Map<String, TestProperty> properties;
  private List<TestProperty> propertyList = new ArrayList<TestProperty>();
  private Map<String, Set<String>> normalizedPropertyNames = new HashMap<String, Set<String>>();
  private Set<TestPropertyListener> listeners = new HashSet<TestPropertyListener>();

  protected WsdlTestStepWithProperties( WsdlTestCase testCase, TestStepConfig config, boolean hasEditor,
      boolean forLoadTest )
  {
    super( testCase, config, hasEditor, forLoadTest );
  }

  @Override
  public String[] getPropertyNames()
  {
    if( properties == null )
      return new String[0];

    String[] result = new String[properties.size()];
    int ix = 0;
    for( TestProperty property : properties.values() )
      result[ix++ ] = property.getName();

    return result;
  }

  @Override
  public TestProperty getProperty( String name )
  {
    return properties == null || name == null ? null : properties.get( getPropertyKeyName( name ) );
  }

  @Override
  public String getPropertyValue( String name )
  {
    if( properties == null )
      return null;

    TestProperty testStepProperty = properties.get( getPropertyKeyName( name ) );
    return testStepProperty == null ? null : testStepProperty.getValue();
  }

  @Override
  public void setPropertyValue( String name, String value )
  {
    if( properties == null )
      return;

    TestProperty testStepProperty = properties.get( getPropertyKeyName( name ) );
    if( testStepProperty != null )
    {
      testStepProperty.setValue( value );
    }
  }

  protected void addProperty( TestProperty property )
  {
    addProperty( property, false );
  }

  protected void addProperty( TestProperty property, boolean notify )
  {
    if( properties == null )
      properties = new HashMap<String, TestProperty>();

    String name = property.getName();
    String upper = name.toUpperCase();

    if( !normalizedPropertyNames.containsKey( upper ) )
      normalizedPropertyNames.put( upper, new HashSet<String>() );

    normalizedPropertyNames.get( upper ).add( name );

    properties.put( name, property );
    propertyList.add( property );

    if( notify )
    {
      firePropertyAdded( name );
    }
  }

  private String getPropertyKeyName( String name )
  {
    if( properties.containsKey( name ) )
      return name;

    Set<String> props = normalizedPropertyNames.get( name.toUpperCase() );
    if( props != null && !props.isEmpty() )
    {
      return props.iterator().next();
    }
    return name;
  }

  protected TestProperty deleteProperty( String name, boolean notify )
  {
    if( properties != null )
    {
      name = getPropertyKeyName( name );
      TestProperty result = properties.remove( name );

      if( result != null )
      {
        normalizedPropertyNames.get( name.toUpperCase() ).remove( name );
        propertyList.remove( result );

        if( notify )
          firePropertyRemoved( name );

        return result;
      }
    }

    return null;
  }

  public void propertyRenamed( String oldName )
  {
    if( properties == null )
      return;

    oldName = getPropertyKeyName( oldName );
    String upper = oldName.toUpperCase();

    TestProperty testStepProperty = properties.get( oldName );
    if( testStepProperty == null )
      return;

    Set<String> props = normalizedPropertyNames.get( upper );
    properties.remove( oldName );
    props.remove( oldName );
    String newName = testStepProperty.getName();
    properties.put( newName, testStepProperty );

    upper = newName.toUpperCase();
    if( !normalizedPropertyNames.containsKey( upper ) )
      normalizedPropertyNames.put( upper, new HashSet<String>() );
    normalizedPropertyNames.get( upper ).add( newName );

    firePropertyRenamed( oldName, newName );
  }

  @Override
  public void addTestPropertyListener( TestPropertyListener listener )
  {
    listeners.add( listener );
  }

  @Override
  public void removeTestPropertyListener( TestPropertyListener listener )
  {
    listeners.remove( listener );
  }

  protected void firePropertyAdded( String name )
  {
    TestPropertyListener[] array = listeners.toArray( new TestPropertyListener[listeners.size()] );
    for( TestPropertyListener listener : array )
    {
      listener.propertyAdded( name );
    }
  }

  protected void firePropertyRemoved( String name )
  {
    TestPropertyListener[] array = listeners.toArray( new TestPropertyListener[listeners.size()] );
    for( TestPropertyListener listener : array )
    {
      listener.propertyRemoved( name );
    }
  }

  protected void firePropertyRenamed( String oldName, String newName )
  {
    TestPropertyListener[] array = listeners.toArray( new TestPropertyListener[listeners.size()] );
    for( TestPropertyListener listener : array )
    {
      listener.propertyRenamed( oldName, newName );
    }
  }

  public void firePropertyValueChanged( String name, String oldValue, String newValue )
  {
    if( oldValue == null && newValue == null )
      return;

    if( oldValue != null && oldValue.equals( newValue ) )
      return;

    if( newValue != null && newValue.equals( oldValue ) )
      return;

    TestPropertyListener[] array = listeners.toArray( new TestPropertyListener[listeners.size()] );
    for( TestPropertyListener listener : array )
    {
      listener.propertyValueChanged( name, oldValue, newValue );
    }
  }

  @Override
  public Map<String, TestProperty> getProperties()
  {
    Map<String, TestProperty> result = new HashMap<String, TestProperty>();

    if( properties != null )
    {
      for( String name : properties.keySet() )
        result.put( properties.get( name ).getName(), properties.get( name ) );
    }

    return result;
  }

  @Override
  public boolean hasProperty( String name )
  {
    return properties != null && properties.containsKey( getPropertyKeyName( name ) );
  }

  public boolean hasProperties()
  {
    return true;
  }

  @Override
  public TestProperty getPropertyAt( int index )
  {
    return propertyList.get( index );
  }

  @Override
  public int getPropertyCount()
  {
    return propertyList.size();
  }

  @Override
  public List<TestProperty> getPropertyList()
  {
    return Collections.unmodifiableList( propertyList );
  }

  protected void firePropertyMoved( String name, int oldIndex, int newIndex )
  {
    TestPropertyListener[] listenersArray = listeners.toArray( new TestPropertyListener[listeners.size()] );
    for( TestPropertyListener listener : listenersArray )
    {
      listener.propertyMoved( name, oldIndex, newIndex );
    }
  }

  public void moveProperty( String propertyName, int targetIndex )
  {
    TestProperty property = getProperty( propertyName );
    int ix = propertyList.indexOf( property );

    if( ix == targetIndex )
      return;

    if( targetIndex < 0 )
      targetIndex = 0;

    if( targetIndex < properties.size() )
      propertyList.add( targetIndex, propertyList.remove( ix ) );
    else
      propertyList.add( propertyList.remove( ix ) );

    if( targetIndex > properties.size() )
      targetIndex = properties.size();

    firePropertyMoved( propertyName, ix, targetIndex );

  }

}
TOP

Related Classes of com.eviware.soapui.impl.wsdl.teststeps.WsdlTestStepWithProperties

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.