    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
    014import com.digi.xbee.api.RemoteXBeeDevice;
    015
    016/**
    017 * This class represents an XBee message containing the remote XBee device the
    018 * message belongs to, the content (data) of the message and a flag indicating
    019 * if the message is a broadcast message (was received or is being sent via
    020 * broadcast).
    021 *
    022 * <p>This class is used within the XBee Java Library to read data sent by
    023 * remote devices.</p>
    024 */
    025public class XBeeMessage {
    026
    027        // Variables.
    028        private final RemoteXBeeDevice remoteXBeeDevice;
    029        private final byte[] data;
    030        private boolean isBroadcast;
    031
    032        /**
    033         * Class constructor. Instantiates a new object of type
    034         * {@code XBeeMessage} with the given parameters.
    035         *
    036         * @param remoteXBeeDevice The remote XBee device the message belongs to.
    037         * @param data Byte array containing the data of the message.
    038         *
    039         * @throws NullPointerException if {@code address == null} or
    040         *                              if {@code data == null}.
    041         *
    042         * @see com.digi.xbee.api.RemoteXBeeDevice
    043         */
    044        public XBeeMessage(RemoteXBeeDevice remoteXBeeDevice, byte[] data) {
    045                this(remoteXBeeDevice, data, false);
    046        }
    047
    048        /**
    049         * Class constructor. Instantiates a new object of type
    050         * {@code XBeeMessage} with the given parameters.
    051         *
    052         * @param remoteXBeeDevice The remote XBee device the message belongs to.
    053         * @param data Byte array containing the data of the message.
    054         * @param isBroadcast Indicates if the message was received via broadcast.
    055         *
    056         * @throws NullPointerException if {@code xbeeAddress == null} or
    057         *                              if {@code data == null}.
    058         *
    059         * @see com.digi.xbee.api.RemoteXBeeDevice
    060         */
    061        public XBeeMessage(RemoteXBeeDevice remoteXBeeDevice, byte[] data, boolean isBroadcast) {
    062                if (remoteXBeeDevice == null)
    063                        throw new NullPointerException("Remote XBee device cannot be null.");
    064                if (data == null)
    065                        throw new NullPointerException("Data cannot be null.");
    066
    067                this.remoteXBeeDevice = remoteXBeeDevice;
    068                this.data = data;
    069                this.isBroadcast = isBroadcast;
    070        }
    071
    072        /**
    073         * Returns the remote XBee device this message is associated to.
    074         *
    075         * @return The remote XBee device this message is associated to.
    076         *
    077         * @see com.digi.xbee.api.RemoteXBeeDevice
    078         */
    079        public RemoteXBeeDevice getDevice() {
    080                return remoteXBeeDevice;
    081        }
    082
    083        /**
    084         * Returns the a byte array containing the data of the message.
    085         *
    086         * @return A byte array containing the data of the message.
    087         */
    088        public byte[] getData() {
    089                return data;
    090        }
    091
    092        /**
    093         * Returns the data of the message in string format.
    094         *
    095         * @return The data of the message in string format.
    096         */
    097        public String getDataString() {
    098                return new String(data);
    099        }
    100
    101        /**
    102         * Returns whether or not the message was received via broadcast.
    103         *
    104         * @return {@code true} if the message was received via broadcast,
    105         *         {@code false} otherwise.
    106         */
    107        public boolean isBroadcast() {
    108                return isBroadcast;
    109        }
    110}