001/**
002 * Copyright (c) 2014-2015 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
014import java.util.HashMap;
015
016/**
017 * Enumerates all the possible states of the discovery. Discovery status field 
018 * is part of the {@code TransmitStatusPacket} indicating the status of the 
019 * discovery when a packet is sent.
020 * 
021 * @see com.digi.xbee.api.packet.common.TransmitStatusPacket
022 */
023public enum XBeeDiscoveryStatus {
024
025        // Enumeration elements
026        DISCOVERY_STATUS_NO_DISCOVERY_OVERHEAD (0x00, "No discovery overhead"),
027        DISCOVERY_STATUS_ADDRESS_DISCOVERY (0x01, "Address discovery"),
028        DISCOVERY_STATUS_ROUTE_DISCOVERY (0x02, "Route discovery"),
029        DISCOVERY_STATUS_ADDRESS_AND_ROUTE (0x03, "Address and route"),
030        DISCOVERY_STATUS_EXTENDED_TIMEOUT_DISCOVERY (0x40, "Extended timeout discovery"),
031        DISCOVERY_STATUS_UNKNOWN (0xFF, "Unknown");
032        
033        // Variables
034        private final int id;
035        
036        private final String description;
037        
038        private static final HashMap<Integer, XBeeDiscoveryStatus> lookupTable = new HashMap<Integer, XBeeDiscoveryStatus>();
039        
040        static {
041                for (XBeeDiscoveryStatus at:values())
042                        lookupTable.put(at.getId(), at);
043        }
044        
045        /**
046         * Class constructor. Instantiates a new enumeration element of type 
047         * {@code XBeeDiscoveryStatus} with the given parameters.
048         * 
049         * @param id Discovery status ID.
050         * @param description Discovery status description.
051         */
052        private XBeeDiscoveryStatus(int id, String description) {
053                this.id = id;
054                this.description = description;
055        }
056        
057        /**
058         * Returns the discovery status ID.
059         * 
060         * @return The discovery status ID.
061         */
062        public int getId() {
063                return id;
064        }
065        
066        /**
067         * Returns the discovery status description.
068         * 
069         * @return Discovery status description.
070         */
071        public String getDescription() {
072                return description;
073        }
074        
075        /**
076         * Returns the {@code XBeeDiscoveryStatus} associated to the given ID.
077         * 
078         * @param id ID of the {@code XBeeDiscoveryStatus} to retrieve.
079         * 
080         * @return The {@code XBeeDiscoveryStatus} associated with the given ID.
081         */
082        public static XBeeDiscoveryStatus get(int id) {
083                XBeeDiscoveryStatus status = lookupTable.get(id);
084                if (status != null)
085                        return status;
086                return XBeeDiscoveryStatus.DISCOVERY_STATUS_UNKNOWN;
087        }
088        
089        /*
090         * (non-Javadoc)
091         * @see java.lang.Enum#toString()
092         */
093        @Override
094        public String toString() {
095                return description;
096        }
097}