Package com.eviware.soapui.impl.wsdl.support

Source Code of com.eviware.soapui.impl.wsdl.support.MapTestPropertyHolder$InternalTestProperty

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

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
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.Properties;
import java.util.Set;

import javax.xml.namespace.QName;

import org.apache.xmlbeans.SchemaType;
import org.apache.xmlbeans.XmlBeans;
import org.apache.xmlbeans.XmlString;

import com.eviware.soapui.SoapUI;
import com.eviware.soapui.impl.wsdl.MutableTestPropertyHolder;
import com.eviware.soapui.impl.wsdl.support.wsdl.UrlWsdlLoader;
import com.eviware.soapui.model.ModelItem;
import com.eviware.soapui.model.testsuite.TestProperty;
import com.eviware.soapui.model.testsuite.TestPropertyListener;
import com.eviware.soapui.support.types.StringList;

public class MapTestPropertyHolder implements MutableTestPropertyHolder
{
  private Map<String, TestProperty> propertyMap = new HashMap<String, TestProperty>();
  private Set<TestPropertyListener> listeners = new HashSet<TestPropertyListener>();
  private List<TestProperty> properties = new ArrayList<TestProperty>();
  public ModelItem modelItem;
  private String propertiesLabel = "Test Properties";

  public MapTestPropertyHolder( ModelItem modelItem )
  {
    this.modelItem = modelItem;
  }

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

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

  private 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 );
    }
  }

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

  private void firePropertyValueChanged( String name, String oldValue, String newValue )
  {
    TestPropertyListener[] listenersArray = listeners.toArray( new TestPropertyListener[listeners.size()] );
    for( TestPropertyListener listener : listenersArray )
    {
      listener.propertyValueChanged( name, oldValue, newValue );
    }
  }

  public TestProperty addProperty( String name )
  {
    TestProperty result = new InternalTestProperty( name, null );
    propertyMap.put( name.toUpperCase(), result );
    properties.add( result );
    firePropertyAdded( name );
    return result;
  }

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

  public TestProperty getProperty( String name )
  {
    return propertyMap.get( name.toUpperCase() );
  }

  public String[] getPropertyNames()
  {
    StringList result = new StringList();
    for( String name : propertyMap.keySet() )
      result.add( propertyMap.get( name ).getName() );

    return result.toStringArray();
  }

  public List<TestProperty> getPropertyList()
  {
    return Collections.unmodifiableList( properties );
  }

  public String getPropertyValue( String name )
  {
    TestProperty property = getProperty( name );
    return property == null ? null : property.getValue();
  }

  public TestProperty removeProperty( String propertyName )
  {
    TestProperty property = getProperty( propertyName );
    if( property != null )
    {
      properties.remove( property );
      propertyMap.remove( propertyName.toUpperCase() );
      firePropertyRemoved( propertyName );
    }

    return property;
  }

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

  public void setPropertyValue( String name, String value )
  {
    InternalTestProperty property = ( InternalTestProperty )getProperty( name );
    if( property != null )
      property.setValue( value );
  }

  public boolean renameProperty( String name, String newName )
  {
    if( getProperty( newName ) != null )
      return false;

    InternalTestProperty property = ( InternalTestProperty )getProperty( name );
    if( property == null )
      return false;

    property.setName( newName );
    return true;
  }

  /**
   * Internal property class
   *
   * @author ole
   */

  public class InternalTestProperty implements TestProperty
  {
    private String name;
    private String value;

    public InternalTestProperty( String name, String value )
    {
      this.name = name;
      this.value = value;
    }

    public String getName()
    {
      return name;
    }

    public void setName( String name )
    {
      String oldName = getName();

      propertyMap.remove( oldName.toUpperCase() );
      propertyMap.put( name.toUpperCase(), this );

      this.name = name;

      firePropertyRenamed( oldName, name );
    }

    public String getDescription()
    {
      return null;
    }

    public String getValue()
    {
      return value;
    }

    public void setValue( String value )
    {
      String oldValue = getValue();
      this.value = value;

      firePropertyValueChanged( getName(), oldValue, value );
    }

    public boolean isReadOnly()
    {
      return false;
    }

    public QName getType()
    {
      return XmlString.type.getName();
    }

    public ModelItem getModelItem()
    {
      return modelItem;
    }

    public String getDefaultValue()
    {
      // TODO Auto-generated method stub
      return null;
    }

    @Override
    public boolean isRequestPart()
    {
      return false;
    }

    @Override
    public SchemaType getSchemaType()
    {
      return XmlBeans.getBuiltinTypeSystem().findType( getType() );

    }
  }

  public void saveTo( Properties props )
  {
    int cnt = 0;
    for( TestProperty p : properties )
    {
      String name = p.getName();
      String value = p.getValue();
      if( value == null )
        value = "";

      props.setProperty( name, value );
      cnt++ ;
    }
  }

  public Map<String, TestProperty> getProperties()
  {
    Map<String, TestProperty> result = new HashMap<String, TestProperty>();
    for( String name : propertyMap.keySet() )
      result.put( name, propertyMap.get( name ) );

    return result;
  }

  public boolean hasProperty( String name )
  {
    return propertyMap.containsKey( name.toUpperCase() );
  }

  public int addPropertiesFromFile( String propFile )
  {
    try
    {
      InputStream input = null;

      File file = new File( propFile );
      if( file.exists() )
      {
        input = new FileInputStream( file );
      }
      else if( propFile.toLowerCase().startsWith( "http://" ) || propFile.toLowerCase().startsWith( "https://" ) )
      {
        UrlWsdlLoader loader = new UrlWsdlLoader( propFile, getModelItem() );
        loader.setUseWorker( false );
        input = loader.load();
      }

      Properties properties = new Properties();
      properties.load( input );

      for( Object key : properties.keySet() )
      {
        String name = key.toString();
        if( !hasProperty( name ) )
          addProperty( name ).setValue( properties.getProperty( name ) );
        else
          setPropertyValue( name, properties.getProperty( name ) );
      }

      return properties.size();
    }
    catch( Exception e )
    {
      SoapUI.logError( e );
    }

    return 0;
  }

  public ModelItem getModelItem()
  {
    return modelItem;
  }

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

    if( ix == targetIndex )
      return;

    if( targetIndex < 0 )
      targetIndex = 0;

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

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

    firePropertyMoved( propertyName, ix, targetIndex );
  }

  public TestProperty getPropertyAt( int index )
  {
    return properties.get( index );
  }

  public int getPropertyCount()
  {
    return properties.size();
  }

  public void setPropertiesLabel( String propertiesLabel )
  {
    this.propertiesLabel = propertiesLabel;
  }

  public String getPropertiesLabel()
  {
    return propertiesLabel;
  }
}
TOP

Related Classes of com.eviware.soapui.impl.wsdl.support.MapTestPropertyHolder$InternalTestProperty

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.