001/** 002 * Copyright (c) 2014 Digi International Inc., 003 * All rights not expressly granted are reserved. 004 * 005 * This Source Code Form is subject to the terms of the Mozilla Public 006 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 007 * You can obtain one at http://mozilla.org/MPL/2.0/. 008 * 009 * Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343 010 * ======================================================================= 011 */ 012package com.digi.xbee.api.models; 013 014/** 015 * This class represents the hardware version number of an XBee device. 016 */ 017public class HardwareVersion { 018 019 // Constants. 020 private static final int HASH_SEED = 23; 021 022 // Variables. 023 private final int value; 024 025 private final String description; 026 027 /** 028 * Class constructor. Instantiates a new {@code HardwareVersion} object 029 * with the given parameters. 030 * 031 * @param value The hardware version numeric value. 032 * @param description The hardware version description. 033 * 034 * @throws IllegalArgumentException if {@code value < 0} or 035 * if {@code description.length() < 1}. 036 * @throws NullPointerException if {@code description == null}. 037 */ 038 private HardwareVersion(int value, String description) { 039 if (description == null) 040 throw new NullPointerException("Description cannot be null."); 041 if (value < 0) 042 throw new IllegalArgumentException("Value cannot be less than 0."); 043 if (description.length() < 1) 044 throw new IllegalArgumentException("Description cannot be empty."); 045 046 this.value = value; 047 this.description = description; 048 } 049 050 /** 051 * Returns the Hardware version numeric value. 052 * 053 * @return Hardware version numeric value. 054 */ 055 public int getValue() { 056 return value; 057 } 058 059 /** 060 * Returns the Hardware version description. 061 * 062 * @return Hardware version description. 063 */ 064 public String getDescription() { 065 return description; 066 } 067 068 /** 069 * Returns the {@code HardwareVersion} object associated to the given 070 * numeric value. 071 * 072 * @param value Numeric value of the {@code HardwareVersion} retrieve. 073 * 074 * @return The {@code HardwareVersion} associated to the given value, 075 * {@code null} if there is not any {@code HardwareVersion} with 076 * that value. 077 */ 078 public static HardwareVersion get(int value) { 079 HardwareVersionEnum hvEnum = HardwareVersionEnum.get(value); 080 if (hvEnum == null) 081 return new HardwareVersion(value, "Unknown"); 082 return new HardwareVersion(hvEnum.getValue(), hvEnum.getDescription()); 083 } 084 085 /** 086 * Returns the {@code HardwareVersion} object associated to the given 087 * numeric value and description. 088 * 089 * @param value Numeric value of the {@code HardwareVersion} retrieve. 090 * @param description Description of the {@code HardwareVersion} retrieve. 091 * 092 * @return The {@code HardwareVersion} associated to the given value and 093 * description, {@code null} if there is not any 094 * {@code HardwareVersion} associated to those values. 095 * 096 * @throws IllegalArgumentException if {@code value < 0} or 097 * if {@code description.length() < 1}. 098 * @throws NullPointerException if {@code description == null}. 099 */ 100 public static HardwareVersion get(int value, String description) { 101 return new HardwareVersion(value, description); 102 } 103 104 /* 105 * (non-Javadoc) 106 * @see java.lang.Object#equals(java.lang.Object) 107 */ 108 @Override 109 public boolean equals(Object obj) { 110 if (!(obj instanceof HardwareVersion)) 111 return false; 112 HardwareVersion hwVersion = (HardwareVersion)obj; 113 if (hwVersion.getValue() == getValue() 114 && hwVersion.getDescription().equals(getDescription())) 115 return true; 116 return false; 117 } 118 119 /* 120 * (non-Javadoc) 121 * @see java.lang.Object#hashCode() 122 */ 123 @Override 124 public int hashCode() { 125 int hash = HASH_SEED * (HASH_SEED + value); 126 return hash; 127 } 128 129 /* 130 * (non-Javadoc) 131 * @see java.lang.Object#toString() 132 */ 133 @Override 134 public String toString() { 135 return "" + value; 136 } 137}