Coverage Report - de.smartics.properties.api.config.domain.Property
 
Classes in this File Line Coverage Branch Coverage Complexity
Property
0%
0/29
0%
0/16
1.818
 
 1  
 /*
 2  
  * Copyright 2012-2013 smartics, Kronseder & Reiner GmbH
 3  
  *
 4  
  * Licensed under the Apache License, Version 2.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  *
 8  
  *     http://www.apache.org/licenses/LICENSE-2.0
 9  
  *
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  
  * See the License for the specific language governing permissions and
 14  
  * limitations under the License.
 15  
  */
 16  
 package de.smartics.properties.api.config.domain;
 17  
 
 18  
 import java.io.Serializable;
 19  
 
 20  
 import org.apache.commons.lang.ObjectUtils;
 21  
 
 22  
 import de.smartics.util.lang.Arg;
 23  
 
 24  
 /**
 25  
  * Stores information of a property.
 26  
  */
 27  0
 public class Property implements Serializable, Comparable<Property>
 28  
 {
 29  
   // ********************************* Fields *********************************
 30  
 
 31  
   // --- constants ------------------------------------------------------------
 32  
 
 33  
   /**
 34  
    * The class version identifier.
 35  
    */
 36  
   private static final long serialVersionUID = 1L;
 37  
 
 38  
   // --- members --------------------------------------------------------------
 39  
 
 40  
   /**
 41  
    * The optional source where the property value has been defined. This is an
 42  
    * arbitrary name that defines the origin in its context.
 43  
    *
 44  
    * @serial
 45  
    */
 46  
   private final PropertyLocation source;
 47  
 
 48  
   /**
 49  
    * The name of the property. Must not blank.
 50  
    *
 51  
    * @serial
 52  
    */
 53  
   private final String name;
 54  
 
 55  
   /**
 56  
    * The value of the property. May be <code>null</code>.
 57  
    *
 58  
    * @serial
 59  
    */
 60  
   private final String value;
 61  
 
 62  
   // ****************************** Initializer *******************************
 63  
 
 64  
   // ****************************** Constructors ******************************
 65  
 
 66  
   /**
 67  
    * Default constructor.
 68  
    *
 69  
    * @param source the optional source where the property value has been
 70  
    *          defined.
 71  
    * @param name the name of the property.
 72  
    * @param value the value of the property.
 73  
    * @throws NullPointerException if {@code source} is <code>null</code>.
 74  
    * @throws IllegalArgumentException if {@code name} is blank.
 75  
    */
 76  
   public Property(final PropertyLocation source, final String name,
 77  
       final String value) throws NullPointerException, IllegalArgumentException
 78  0
   {
 79  0
     this.source = Arg.checkNotNull("source", source);
 80  0
     this.name = Arg.checkNotBlank("name", name);
 81  0
     this.value = value;
 82  0
   }
 83  
 
 84  
   /**
 85  
    * Convenience constructor that translates the value to a String.
 86  
    *
 87  
    * @param source the optional source where the property value has been
 88  
    *          defined.
 89  
    * @param name the name of the property.
 90  
    * @param value the value of the property.
 91  
    * @throws IllegalArgumentException if {@code name} is blank.
 92  
    */
 93  
   public Property(final PropertyLocation source, final String name,
 94  
       final Object value) throws IllegalArgumentException
 95  
   {
 96  0
     this(source, name, ObjectUtils.toString(value, null));
 97  0
   }
 98  
 
 99  
   /**
 100  
    * Convenience constructor that translates the value to a String.
 101  
    *
 102  
    * @param source the optional source where the property value has been
 103  
    *          defined.
 104  
    * @param name the name of the property.
 105  
    * @param value the value of the property.
 106  
    * @throws IllegalArgumentException if {@code name} is blank.
 107  
    */
 108  
   public Property(final String source, final String name, final Object value)
 109  
     throws IllegalArgumentException
 110  
   {
 111  0
     this(new PropertyLocation(source), name, ObjectUtils.toString(value, null));
 112  0
   }
 113  
 
 114  
   /**
 115  
    * Copy-constructor.
 116  
    *
 117  
    * @param property the property to copy.
 118  
    */
 119  
   protected Property(final Property property)
 120  
   {
 121  0
     this(property.source, property.name, property.value);
 122  0
   }
 123  
 
 124  
   // ****************************** Inner Classes *****************************
 125  
 
 126  
   // ********************************* Methods ********************************
 127  
 
 128  
   // --- init -----------------------------------------------------------------
 129  
 
 130  
   // --- get&set --------------------------------------------------------------
 131  
 
 132  
   /**
 133  
    * Returns the optional source where the property value has been defined. This
 134  
    * is an arbitrary name that defines the origin in its context.
 135  
    *
 136  
    * @return the optional source where the property value has been defined.
 137  
    */
 138  
   public final PropertyLocation getSource()
 139  
   {
 140  0
     return source;
 141  
   }
 142  
 
 143  
   /**
 144  
    * Returns the name of the property. Must not blank.
 145  
    *
 146  
    * @return the name of the property.
 147  
    */
 148  
   public final String getName()
 149  
   {
 150  0
     return name;
 151  
   }
 152  
 
 153  
   /**
 154  
    * Returns the value of the property. May be <code>null</code>.
 155  
    *
 156  
    * @return the value of the property.
 157  
    */
 158  
   public final String getValue()
 159  
   {
 160  0
     return value;
 161  
   }
 162  
 
 163  
   // --- business -------------------------------------------------------------
 164  
 
 165  
   // --- object basics --------------------------------------------------------
 166  
 
 167  
   /**
 168  
    * {@inheritDoc}
 169  
    *
 170  
    * @see java.lang.Comparable#compareTo(java.lang.Object)
 171  
    */
 172  
   @Override
 173  
   public final int compareTo(final Property o)
 174  
   {
 175  0
     int result = name.compareTo(o.name);
 176  0
     if (result == 0)
 177  
     {
 178  0
       result =
 179  
           ObjectUtils.compare(ObjectUtils.toString(value, null),
 180  
               ObjectUtils.toString(o.value, null));
 181  0
       if (result == 0)
 182  
       {
 183  0
         result = ObjectUtils.compare(source, o.source);
 184  
       }
 185  
     }
 186  0
     return result;
 187  
   }
 188  
 
 189  
   /**
 190  
    * Returns the hash code of the object.
 191  
    *
 192  
    * @return the hash code.
 193  
    */
 194  
   @Override
 195  
   public final int hashCode()
 196  
   {
 197  0
     return name.hashCode();
 198  
   }
 199  
 
 200  
   /**
 201  
    * Returns <code>true</code> if the given object is semantically equal to the
 202  
    * given object, <code>false</code> otherwise.
 203  
    *
 204  
    * @param object the instance to compare to.
 205  
    * @return <code>true</code> if the given object is semantically equal to the
 206  
    *         given object, <code>false</code> otherwise.
 207  
    */
 208  
   @Override
 209  
   public final boolean equals(final Object object)
 210  
   {
 211  0
     if (this == object)
 212  
     {
 213  0
       return true;
 214  
     }
 215  0
     else if (object == null || getClass() != object.getClass())
 216  
     {
 217  0
       return false;
 218  
     }
 219  
 
 220  0
     final Property other = (Property) object;
 221  
 
 222  0
     return (name.equals(other.name) && ObjectUtils.equals(value, other.value) && ObjectUtils
 223  
         .equals(source, other.source));
 224  
   }
 225  
 
 226  
   /**
 227  
    * Returns the string representation of the object.
 228  
    *
 229  
    * @return the string representation of the object.
 230  
    */
 231  
   @Override
 232  
   public String toString()
 233  
   {
 234  0
     return name + '=' + value + " (" + source + ')';
 235  
   }
 236  
 }