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 response of an AT Command sent by the connected 
016 * XBee device or by a remote device after executing an AT Command.
017 * 
018 * <p>Among the executed command, this object contains the response data and 
019 * the command status.</p>
020 * 
021 * @see ATCommand
022 * @see ATCommandStatus
023 */
024public class ATCommandResponse {
025        
026        // Variables
027        private final ATCommand command;
028        
029        private final byte[] response;
030        
031        private final ATCommandStatus status;
032        
033        /**
034         * Class constructor. Instantiates a new object of type 
035         * {@code ATCommandResponse} with the given parameters.
036         * 
037         * @param command The {@code ATCommand} that generated the response.
038         * 
039         * @throws NullPointerException if {@code command == null}.
040         * 
041         * @see ATCommand
042         */
043        public ATCommandResponse(ATCommand command) {
044                this(command, null, ATCommandStatus.OK);
045        }
046        
047        /**
048         * Class constructor. Instantiates a new object of type 
049         * {@code ATCommandResponse} with the given parameters.
050         * 
051         * @param command The {@code ATCommand} that generated the response.
052         * @param status The {@code ATCommandStatus} containing the response 
053         *               status.
054         * 
055         * @throws NullPointerException if {@code command == null} or 
056         *                              if {@code status == null}.
057         * @see ATCommand
058         * @see ATCommandStatus
059         */
060        public ATCommandResponse(ATCommand command, ATCommandStatus status) {
061                this(command, null, status);
062        }
063        
064        /**
065         * Class constructor. Instantiates a new object of type 
066         * {@code ATCommandResponse} with the given parameters.
067         * 
068         * @param command The {@code ATCommand} that generated the response.
069         * @param response The command response in byte array format.
070         * 
071         * @throws NullPointerException if {@code command == null} or 
072         *                              if {@code response == null}.
073         * 
074         * @see ATCommand
075         */
076        public ATCommandResponse(ATCommand command, byte[] response) {
077                this(command, response, ATCommandStatus.OK);
078        }
079        
080        /**
081         * Class constructor. Instantiates a new object of type 
082         * {@code ATCommandResponse} with the given parameters.
083         * 
084         * @param command The {@code ATCommand} that generated the response.
085         * @param response The command response in byte array format.
086         * @param status The {@code ATCommandStatus} containing the response 
087         *               status.
088         * 
089         * @throws NullPointerException if {@code command == null} or 
090         *                              if {@code status == null}.
091         * 
092         * @see ATCommand
093         * @see ATCommandStatus
094         */
095        public ATCommandResponse(ATCommand command, byte[] response, ATCommandStatus status) {
096                if (command == null)
097                        throw new NullPointerException("Command cannot be null.");
098                if (status == null)
099                        throw new NullPointerException("Status cannot be null.");
100                
101                this.command = command;
102                this.response = response;
103                this.status = status;
104        }
105        
106        /**
107         * Returns the AT command that generated the response.
108         * 
109         * @return The AT command that generated the response.
110         * 
111         * @see ATCommand
112         */
113        public ATCommand getCommand() {
114                return command;
115        }
116        
117        /**
118         * Returns the AT command response data in byte array format if any.
119         * 
120         * @return The AT command response data in byte array format, 
121         *         {@code null} if there is not response data.
122         */
123        public byte[] getResponse() {
124                return response;
125        }
126        
127        /**
128         * Returns the AT command response data as string if any.
129         * 
130         * @return The AT command response data as string, {@code null} if there 
131         *         is not response data.
132         */
133        public String getResponseString() {
134                if (response == null)
135                        return null;
136                return new String(response);
137        }
138        
139        /**
140         * Returns the AT command response status.
141         * 
142         * @return The AT command response status.
143         * 
144         * @see ATCommandStatus
145         */
146        public ATCommandStatus getResponseStatus() {
147                return status;
148        }
149}