You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2004/02/21 23:03:09 UTC

cvs commit: jakarta-jmeter/src/core/org/apache/jmeter/testelement/property AbstractProperty.java

sebb        2004/02/21 14:03:09

  Modified:    src/core/org/apache/jmeter/testelement/property
                        AbstractProperty.java
  Log:
  Prevent creation of properties with a null name;
  re-implement equals to take account of name as well as value;
  add suitable hashCode() method
  
  Revision  Changes    Path
  1.16      +45 -11    jakarta-jmeter/src/core/org/apache/jmeter/testelement/property/AbstractProperty.java
  
  Index: AbstractProperty.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/testelement/property/AbstractProperty.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- AbstractProperty.java	13 Feb 2004 02:21:38 -0000	1.15
  +++ AbstractProperty.java	21 Feb 2004 22:03:09 -0000	1.16
  @@ -55,6 +55,8 @@
   
       public AbstractProperty(String name)
       {
  +        if (name == null) 
  +            throw new IllegalArgumentException("Name cannot be null");
           this.name = name;
       }
   
  @@ -93,6 +95,8 @@
   
       public void setName(String name)
       {
  +        if (name == null) 
  +            throw new IllegalArgumentException("Name cannot be null");
           this.name = name;
       }
   
  @@ -232,12 +236,38 @@
           return Boolean.valueOf(val).booleanValue();
       }
   
  -    public boolean equals(Object o) //TODO probably ought to provide hashCode() as well
  -    {
  -        return compareTo(o) == 0;
  +    /**
  +     * Determines if the two objects are equal by comparing names and values
  +     *
  +     * @return true if names are equal and values are equal (or both null)
  +     */
  +    public boolean equals(Object o)
  +    {
  +    	if (!(o instanceof JMeterProperty)) return false;
  +    	if (this == o) return true;
  +    	JMeterProperty jpo = (JMeterProperty) o;
  +    	if (!name.equals(jpo.getName())) return false; 
  +    	String s1 = getStringValue(); 
  +    	String s2 = jpo.getStringValue();
  +		return s1 == null ? s2 == null : s1.equals(s2);
       }
  +    
  +	public int hashCode()
  +	{
  +		int result = 17;
  +		result = result * 37 + name.hashCode();// name cannot be null 
  +		String s = getStringValue();
  +		result = result * 37 + (s == null ? 0 : s.hashCode()); 
  +		return result;
  +	}
   
  -    /* (non-Javadoc)
  +    /**
  +     * Compares two JMeterProperty object values.
  +     * N.B. Does not compare names
  +     * 
  +     * @param arg0 JMeterProperty to compare against
  +     * @return 0 if equal values or both values null;
  +     * -1 otherwise
        * @seeComparable#compareTo(Object)
        */
       public int compareTo(Object arg0)
  @@ -249,12 +279,13 @@
               // any other value.  Log a warning so we can try to find the root
               // cause of the null value.
               String val = getStringValue();
  +            String val2 = ((JMeterProperty)arg0).getStringValue();
               if (val == null)
               {
                   log.warn(
                       "Warning: Unexpected null value for property: " + name);
                   
  -                if (((JMeterProperty)arg0).getStringValue() == null)
  +                if (val2 == null)
                   {
                       // Two null values -- return equal
                       return 0;
  @@ -264,9 +295,7 @@
                       return -1;
                   }
               }
  -            
  -            return getStringValue().compareTo(
  -                ((JMeterProperty) arg0).getStringValue());
  +            return val.compareTo(val2);
           }
           else
           {
  @@ -397,6 +426,11 @@
           }
       }
   
  +    /**
  +     * Provides a string representation of the property.
  +     * 
  +     * @return a string consisting of the name and its value
  +     */
       public String toString()
       {
           return getStringValue();
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org


Re: cvs commit: jakarta-jmeter/src/core/org/apache/jmeter/testelement/property AbstractProperty.java

Posted by se...@apache.org.
It's possible that this change will break something (though the JUnit tests pass), but it seemed illogical to consider the following
as equal:
StringProperty("abcd","xyz")
StringProperty("defg","xyz")
i.e. to only consider the value, and not the name.
However, I left the compareTo() method as it was - this does only compare values.

S.
----- Original Message ----- 
From: <se...@apache.org>
To: <ja...@apache.org>
Sent: Saturday, February 21, 2004 10:03 PM
Subject: cvs commit: jakarta-jmeter/src/core/org/apache/jmeter/testelement/property AbstractProperty.java


sebb        2004/02/21 14:03:09

  Modified:    src/core/org/apache/jmeter/testelement/property
                        AbstractProperty.java
  Log:
  Prevent creation of properties with a null name;
  re-implement equals to take account of name as well as value;
  add suitable hashCode() method

  Revision  Changes    Path
  1.16      +45 -11    jakarta-jmeter/src/core/org/apache/jmeter/testelement/property/AbstractProperty.java

  Index: AbstractProperty.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/testelement/property/AbstractProperty.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- AbstractProperty.java 13 Feb 2004 02:21:38 -0000 1.15
  +++ AbstractProperty.java 21 Feb 2004 22:03:09 -0000 1.16
  @@ -55,6 +55,8 @@

       public AbstractProperty(String name)
       {
  +        if (name == null)
  +            throw new IllegalArgumentException("Name cannot be null");
           this.name = name;
       }

  @@ -93,6 +95,8 @@

       public void setName(String name)
       {
  +        if (name == null)
  +            throw new IllegalArgumentException("Name cannot be null");
           this.name = name;
       }

  @@ -232,12 +236,38 @@
           return Boolean.valueOf(val).booleanValue();
       }

  -    public boolean equals(Object o) //TODO probably ought to provide hashCode() as well
  -    {
  -        return compareTo(o) == 0;
  +    /**
  +     * Determines if the two objects are equal by comparing names and values
  +     *
  +     * @return true if names are equal and values are equal (or both null)
  +     */
  +    public boolean equals(Object o)
  +    {
  +    if (!(o instanceof JMeterProperty)) return false;
  +    if (this == o) return true;
  +    JMeterProperty jpo = (JMeterProperty) o;
  +    if (!name.equals(jpo.getName())) return false;
  +    String s1 = getStringValue();
  +    String s2 = jpo.getStringValue();
  + return s1 == null ? s2 == null : s1.equals(s2);
       }
  +
  + public int hashCode()
  + {
  + int result = 17;
  + result = result * 37 + name.hashCode();// name cannot be null
  + String s = getStringValue();
  + result = result * 37 + (s == null ? 0 : s.hashCode());
  + return result;
  + }

  -    /* (non-Javadoc)
  +    /**
  +     * Compares two JMeterProperty object values.
  +     * N.B. Does not compare names
  +     *
  +     * @param arg0 JMeterProperty to compare against
  +     * @return 0 if equal values or both values null;
  +     * -1 otherwise
        * @seeComparable#compareTo(Object)
        */
       public int compareTo(Object arg0)
  @@ -249,12 +279,13 @@
               // any other value.  Log a warning so we can try to find the root
               // cause of the null value.
               String val = getStringValue();
  +            String val2 = ((JMeterProperty)arg0).getStringValue();
               if (val == null)
               {
                   log.warn(
                       "Warning: Unexpected null value for property: " + name);

  -                if (((JMeterProperty)arg0).getStringValue() == null)
  +                if (val2 == null)
                   {
                       // Two null values -- return equal
                       return 0;
  @@ -264,9 +295,7 @@
                       return -1;
                   }
               }
  -
  -            return getStringValue().compareTo(
  -                ((JMeterProperty) arg0).getStringValue());
  +            return val.compareTo(val2);
           }
           else
           {
  @@ -397,6 +426,11 @@
           }
       }

  +    /**
  +     * Provides a string representation of the property.
  +     *
  +     * @return a string consisting of the name and its value
  +     */
       public String toString()
       {
           return getStringValue();



---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org