    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.exceptions;
    013
    014import com.digi.xbee.api.models.ATCommandStatus;
    015
    016/**
    017 * This exception will be thrown when receiving a command response containing
    018 * a status different than {@code ATCommandStatus#OK} after sending an XBee
    019 * AT command.
    020 *
    021 * @see CommunicationException
    022 * @see com.digi.xbee.api.models.ATCommandStatus
    023 */
    024public class ATCommandException extends CommunicationException {
    025
    026        // Constants.
    027        private static final long serialVersionUID = 1L;
    028        private static final String DEFAULT_MESSAGE = "There was a problem sending the AT command packet.";
    029
    030        // Variables.
    031        private final ATCommandStatus atCommandStatus;
    032
    033        /**
    034         * Creates an {@code ATCommandException} with the provided
    035         * {@code ATCommandStatus} indicating the status of the AT command response
    036         * and {@value #DEFAULT_MESSAGE} as its error detail message.
    037         *
    038         * @param atCommandStatus The status of the AT command response.
    039         *
    040         * @see com.digi.xbee.api.models.ATCommandStatus
    041         */
    042        public ATCommandException(ATCommandStatus atCommandStatus) {
    043                super(DEFAULT_MESSAGE);
    044                this.atCommandStatus = atCommandStatus;
    045        }
    046
    047        /**
    048         * Creates an {@code ATCommandException} with the specified message and
    049         * {@code ATCommandStatus} indicating the status of the AT command response.
    050         *
    051         * @param message The associated message.
    052         * @param atCommandStatus The status of the AT command response.
    053         *
    054         * @see com.digi.xbee.api.models.ATCommandStatus
    055         */
    056        public ATCommandException(String message, ATCommandStatus atCommandStatus) {
    057                super(message);
    058                this.atCommandStatus = atCommandStatus;
    059        }
    060
    061        /**
    062         * Creates an {@code ATCommandException} with the specified message, cause
    063         * and {@code ATCommandStatus} indicating the status of the AT command
    064         * response.
    065         *
    066         * @param message The associated message.
    067         * @param cause The cause of this exception.
    068         * @param atCommandStatus The status of the AT command response.
    069         *
    070         * @see Throwable
    071         * @see com.digi.xbee.api.models.ATCommandStatus
    072         */
    073        public ATCommandException(String message, Throwable cause, ATCommandStatus atCommandStatus) {
    074                super(message, cause);
    075                this.atCommandStatus = atCommandStatus;
    076        }
    077
    078        /**
    079         * Returns the {@code ATCommandStatus} of the exception containing
    080         * information about the AT command response.
    081         *
    082         * @return The status of the AT command response.
    083         *
    084         * @see com.digi.xbee.api.models.ATCommandStatus
    085         */
    086        public ATCommandStatus getCommandStatus() {
    087                return atCommandStatus;
    088        }
    089
    090        /**
    091         * Returns the text containing the status of the AT command response
    092         * from the exception.
    093         *
    094         * @return The text with the status of the AT command response.
    095         */
    096        public String getCommandStatusMessage() {
    097                if (atCommandStatus != null)
    098                        return atCommandStatus.getDescription();
    099                return null;
    100        }
    101
    102        /*
    103         * (non-Javadoc)
    104         * @see java.lang.Throwable#getMessage()
    105         */
    106        @Override
    107        public String getMessage() {
    108                if (atCommandStatus != null)
    109                        return super.getMessage() + " > " + atCommandStatus.getDescription();
    110                return super.getMessage();
    111        }
    112}