Home | History | Annotate | Download | only in jbosh
      1 /*
      2  * Copyright 2009 Mike Cumings
      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 
     17  package com.kenai.jbosh;
     18 
     19 /**
     20  * Abstract base class for creating BOSH attribute classes.  Concrete
     21  * implementations of this class will naturally inherit the underlying
     22  * type's behavior for {@code equals()}, {@code hashCode()},
     23  * {@code toString()}, and {@code compareTo()}, allowing for the easy
     24  * creation of objects which extend existing trivial types.  This was done
     25  * to comply with the prefactoring rule declaring, "when you are being
     26  * abstract, be abstract all the way".
     27  *
     28  * @param <T> type of the extension object
     29  */
     30 abstract class AbstractAttr<T extends Comparable>
     31     implements Comparable {
     32 
     33     /**
     34      * Captured value.
     35      */
     36     private final T value;
     37 
     38     /**
     39      * Creates a new encapsulated object instance.
     40      *
     41      * @param aValue encapsulated getValue
     42      */
     43     protected AbstractAttr(final T aValue) {
     44         value = aValue;
     45     }
     46 
     47     /**
     48      * Gets the encapsulated data value.
     49      *
     50      * @return data value
     51      */
     52     public final T getValue() {
     53         return value;
     54     }
     55 
     56     ///////////////////////////////////////////////////////////////////////////
     57     // Object method overrides:
     58 
     59     /**
     60      * {@inheritDoc}
     61      *
     62      * @param otherObj object to compare to
     63      * @return true if the objects are equal, false otherwise
     64      */
     65     @Override
     66     public boolean equals(final Object otherObj) {
     67         if (otherObj == null) {
     68             return false;
     69         } else if (otherObj instanceof AbstractAttr) {
     70             AbstractAttr other =
     71                     (AbstractAttr) otherObj;
     72             return value.equals(other.value);
     73         } else {
     74             return false;
     75         }
     76     }
     77 
     78     /**
     79      * {@inheritDoc}
     80      *
     81      * @return hashCode of the encapsulated object
     82      */
     83     @Override
     84     public int hashCode() {
     85         return value.hashCode();
     86     }
     87 
     88     /**
     89      * {@inheritDoc}
     90      *
     91      * @return string representation of the encapsulated object
     92      */
     93     @Override
     94     public String toString() {
     95         return value.toString();
     96     }
     97 
     98     ///////////////////////////////////////////////////////////////////////////
     99     // Comparable interface:
    100 
    101     /**
    102      * {@inheritDoc}
    103      *
    104      * @param otherObj object to compare to
    105      * @return -1, 0, or 1
    106      */
    107     @SuppressWarnings("unchecked")
    108     public int compareTo(final Object otherObj) {
    109         if (otherObj == null) {
    110             return 1;
    111         } else {
    112             return value.compareTo(otherObj);
    113         }
    114     }
    115 
    116 }
    117