Coverage Report - org.apache.tiles.request.collection.MapEntry
 
Classes in this File Line Coverage Branch Coverage Complexity
MapEntry
100%
18/18
90%
20/22
2.833
 
 1  
 /*
 2  
  * $Id: MapEntry.java 1049711 2010-12-15 21:12:00Z apetrelli $
 3  
  *
 4  
  * Licensed to the Apache Software Foundation (ASF) under one
 5  
  * or more contributor license agreements.  See the NOTICE file
 6  
  * distributed with this work for additional information
 7  
  * regarding copyright ownership.  The ASF licenses this file
 8  
  * to you under the Apache License, Version 2.0 (the
 9  
  * "License"); you may not use this file except in compliance
 10  
  * with the License.  You may obtain a copy of the License at
 11  
  *
 12  
  * http://www.apache.org/licenses/LICENSE-2.0
 13  
  *
 14  
  * Unless required by applicable law or agreed to in writing,
 15  
  * software distributed under the License is distributed on an
 16  
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 17  
  * KIND, either express or implied.  See the License for the
 18  
  * specific language governing permissions and limitations
 19  
  * under the License.
 20  
  */
 21  
 package org.apache.tiles.request.collection;
 22  
 
 23  
 
 24  
 import java.util.Map;
 25  
 
 26  
 
 27  
 /**
 28  
  * <p>Map.Entry implementation that can be constructed to either be read-only
 29  
  * or not.</p>
 30  
  *
 31  
  * @version $Rev: 1049711 $ $Date: 2010-12-16 08:12:00 +1100 (Thu, 16 Dec 2010) $
 32  
  * @param <K> The key type.
 33  
  * @param <V> The value type.
 34  
  */
 35  
 
 36  
 public class MapEntry<K, V> implements Map.Entry<K, V> {
 37  
 
 38  
 
 39  
     /**
 40  
      * <p>The entry key.</p>
 41  
      */
 42  
     private K key;
 43  
 
 44  
     /**
 45  
      * <p>The entry value.</p>
 46  
      */
 47  
     private V value;
 48  
 
 49  
     /**
 50  
      * <p>Whether the entry can be modified.</p>
 51  
      */
 52  60
     private boolean modifiable = false;
 53  
 
 54  
 
 55  
     /**
 56  
      * <p>Creates a map entry that can either allow modifications or not.</p>
 57  
      *
 58  
      * @param key        The entry key
 59  
      * @param value      The entry value
 60  
      * @param modifiable Whether the entry should allow modification or not
 61  
      */
 62  60
     public MapEntry(K key, V value, boolean modifiable) {
 63  60
         this.key = key;
 64  60
         this.value = value;
 65  60
         this.modifiable = modifiable;
 66  60
     }
 67  
 
 68  
 
 69  
     /**
 70  
      * <p>Gets the entry key.</p>
 71  
      *
 72  
      * @return The entry key
 73  
      */
 74  
     public K getKey() {
 75  99
         return key;
 76  
     }
 77  
 
 78  
 
 79  
     /**
 80  
      * <p>Gets the entry value.</p>
 81  
      *
 82  
      * @return The entry key
 83  
      */
 84  
     public V getValue() {
 85  75
         return value;
 86  
     }
 87  
 
 88  
 
 89  
     /**
 90  
      * <p>Sets the entry value if the entry can be modified.</p>
 91  
      *
 92  
      * @param val The new value
 93  
      * @return The old entry value
 94  
      * @throws UnsupportedOperationException If the entry cannot be modified
 95  
      */
 96  
     public V setValue(V val) {
 97  2
         if (modifiable) {
 98  1
             V oldVal = this.value;
 99  1
             this.value = val;
 100  1
             return oldVal;
 101  
         }
 102  1
         throw new UnsupportedOperationException("The map entry is not modifiable");
 103  
     }
 104  
 
 105  
 
 106  
     /**
 107  
      * <p>Determines if this entry is equal to the passed object.</p>
 108  
      *
 109  
      * @param o The object to test
 110  
      * @return True if equal, else false
 111  
      */
 112  
     @Override
 113  
     @SuppressWarnings("unchecked")
 114  
     public boolean equals(Object o) {
 115  17
         if (o != null && o instanceof Map.Entry) {
 116  15
             Map.Entry<K, V> entry = (Map.Entry<K, V>) o;
 117  15
             return (this.getKey() == null ? entry.getKey() == null : this
 118  
                     .getKey().equals(entry.getKey()))
 119  
                     && (this.getValue() == null ? entry.getValue() == null
 120  
                             : this.getValue().equals(entry.getValue()));
 121  
         }
 122  2
         return false;
 123  
     }
 124  
 
 125  
 
 126  
     /**
 127  
      * <p>Returns the hashcode for this entry.</p>
 128  
      *
 129  
      * @return The and'ed hashcode of the key and value
 130  
      */
 131  
     @Override
 132  
     public int hashCode() {
 133  4
         return (this.getKey() == null ? 0 : this.getKey().hashCode())
 134  
             ^ (this.getValue() == null ? 0 : this.getValue().hashCode());
 135  
     }
 136  
 }