Package com.eviware.soapui.model.propertyexpansion.resolvers

Source Code of com.eviware.soapui.model.propertyexpansion.resolvers.GlobalPropertyResolver

/*
*  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.model.propertyexpansion.resolvers;

import java.util.ArrayList;
import java.util.HashMap;
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.model.ModelItem;
import com.eviware.soapui.model.TestPropertyHolder;
import com.eviware.soapui.model.propertyexpansion.PropertyExpansion;
import com.eviware.soapui.model.propertyexpansion.PropertyExpansionContext;
import com.eviware.soapui.model.propertyexpansion.PropertyExpansionUtils;
import com.eviware.soapui.model.testsuite.TestProperty;
import com.eviware.soapui.model.testsuite.TestPropertyListener;
import com.eviware.soapui.support.types.StringList;

public class GlobalPropertyResolver implements PropertyResolver
{
  public class EnvironmentPropertyHolder implements TestPropertyHolder
  {
    public void addTestPropertyListener( TestPropertyListener listener )
    {
    }

    public ModelItem getModelItem()
    {
      return null;
    }

    public Map<String, TestProperty> getProperties()
    {
      Map<String, String> properties = System.getenv();
      Map<String, TestProperty> result = new HashMap<String, TestProperty>();

      for( Object key : properties.keySet() )
      {
        result.put( key.toString(), new EnviromentTestProperty( key ) );
      }

      return result;
    }

    public List<TestProperty> getPropertyList()
    {
      List<TestProperty> result = new ArrayList<TestProperty>();

      for( TestProperty property : getProperties().values() )
        result.add( property );

      return result;
    }

    public String getPropertiesLabel()
    {
      return "Environment Properties";
    }

    public TestProperty getProperty( String name )
    {
      Map<String, String> properties = System.getenv();
      return properties.containsKey( name ) ? new EnviromentTestProperty( name ) : null;
    }

    public TestProperty getPropertyAt( int index )
    {
      return getProperty( getPropertyNames()[index] );
    }

    public int getPropertyCount()
    {
      return System.getenv().size();
    }

    public String[] getPropertyNames()
    {
      Set<String> keys = System.getenv().keySet();
      StringList result = new StringList();
      for( Object key : keys )
        result.add( key.toString() );
      return result.toStringArray();
    }

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

    public boolean hasProperty( String name )
    {
      return System.getenv().containsKey( name );
    }

    public void removeTestPropertyListener( TestPropertyListener listener )
    {
    }

    public void setPropertyValue( String name, String value )
    {
    }

    private class EnviromentTestProperty implements TestProperty
    {
      private final Object key;

      public EnviromentTestProperty( Object key )
      {
        this.key = key;
      }

      public String getDefaultValue()
      {
        return null;
      }

      public String getDescription()
      {
        return null;
      }

      public ModelItem getModelItem()
      {
        return null;
      }

      public String getName()
      {
        return key.toString();
      }

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

      public String getValue()
      {
        return System.getenv( key.toString() );
      }

      public boolean isReadOnly()
      {
        return true;
      }

      public void setValue( String value )
      {
      }

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

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

    }
  }

  public class SystemPropertyHolder implements TestPropertyHolder
  {
    public void addTestPropertyListener( TestPropertyListener listener )
    {
    }

    public ModelItem getModelItem()
    {
      return null;
    }

    public Map<String, TestProperty> getProperties()
    {
      Properties properties = System.getProperties();
      Map<String, TestProperty> result = new HashMap<String, TestProperty>();

      for( Object key : properties.keySet() )
      {
        result.put( key.toString(), new SystemTestProperty( key ) );
      }

      return result;
    }

    public String getPropertiesLabel()
    {
      return "System Properties";
    }

    public TestProperty getProperty( String name )
    {
      Properties properties = System.getProperties();
      return properties.containsKey( name ) ? new SystemTestProperty( name ) : null;
    }

    public TestProperty getPropertyAt( int index )
    {
      return getProperty( getPropertyNames()[index] );
    }

    public int getPropertyCount()
    {
      return System.getProperties().size();
    }

    public List<TestProperty> getPropertyList()
    {
      List<TestProperty> result = new ArrayList<TestProperty>();

      for( TestProperty property : getProperties().values() )
        result.add( property );

      return result;
    }

    public String[] getPropertyNames()
    {
      Set<Object> keys = System.getProperties().keySet();
      StringList result = new StringList();
      for( Object key : keys )
        result.add( key.toString() );
      return result.toStringArray();
    }

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

    public boolean hasProperty( String name )
    {
      return System.getProperties().containsKey( name );
    }

    public void removeTestPropertyListener( TestPropertyListener listener )
    {
    }

    public void setPropertyValue( String name, String value )
    {
      System.setProperty( name, value );
    }

    private class SystemTestProperty implements TestProperty
    {
      private final Object key;

      public SystemTestProperty( Object key )
      {
        this.key = key;
      }

      public String getDefaultValue()
      {
        return null;
      }

      public String getDescription()
      {
        return null;
      }

      public ModelItem getModelItem()
      {
        return null;
      }

      public String getName()
      {
        return key.toString();
      }

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

      public String getValue()
      {
        return System.getProperty( key.toString() );
      }

      public boolean isReadOnly()
      {
        return false;
      }

      public void setValue( String value )
      {
        System.setProperty( key.toString(), value );
      }

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

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

    }
  }

  private SystemPropertyHolder systemPropertyHolder;
  private EnvironmentPropertyHolder environmentPropertyHolder;

  public GlobalPropertyResolver()
  {
    systemPropertyHolder = new SystemPropertyHolder();
    environmentPropertyHolder = new EnvironmentPropertyHolder();
  }

  public String resolveProperty( PropertyExpansionContext context, String name, boolean globalOverride )
  {
    String result = ResolverUtils.checkForExplicitReference( name, PropertyExpansion.GLOBAL_REFERENCE,
        PropertyExpansionUtils.getGlobalProperties(), context, false );
    if( result != null )
      return result;

    result = ResolverUtils.checkForExplicitReference( name, PropertyExpansion.SYSTEM_REFERENCE, systemPropertyHolder,
        context, globalOverride );
    if( result != null )
      return result;

    result = ResolverUtils.checkForExplicitReference( name, PropertyExpansion.ENV_REFERENCE,
        environmentPropertyHolder, context, globalOverride );
    if( result != null )
      return result;

    // if not, check for explicit global property (stupid 1.7.6 syntax that
    // should be removed..)
    if( name.length() > 2 && name.charAt( 0 ) == PropertyExpansion.PROPERTY_SEPARATOR
        && name.charAt( 1 ) == PropertyExpansion.PROPERTY_SEPARATOR )
      return PropertyExpansionUtils.getGlobalProperty( name.substring( 2 ) );
    else
      return PropertyExpansionUtils.getGlobalProperty( name );

  }
}
TOP

Related Classes of com.eviware.soapui.model.propertyexpansion.resolvers.GlobalPropertyResolver

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.