001: /*
002: *
003: *
004: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026:
027: package com.sun.midp.io.j2me.sms;
028:
029: import java.io.*;
030: import java.util.Date;
031: import javax.wireless.messaging.*;
032: import javax.microedition.io.*;
033: import com.sun.midp.io.j2me.sms.*;
034:
035: /**
036: * Implements a SMS message for the SMS message connection.
037: * <p>
038: * This class contains methods for manipulating message objects and their
039: * contents. Messages can be composed of data and an address.
040: * <code>MessageObject</code> contains methods that can get and set the data and
041: * the address parts of a message separately. The data part can be either text
042: * or binary format. The address part has the format:
043: * <p>
044: * <code>sms://[<em>phone_number</em>:][<em>port_number</em>]</code>
045: * <p>
046: * and represents the address of a port that can accept or receive SMS messages.
047: * <p>
048: * Port numbers are used to designate a specific application or communication
049: * channel for messages. When the port number is omitted from the address, then
050: * the message is targeted at the end user and their normal mailbox handling
051: * application. In this case, the JSR120 <code>MessageConnection</code> cannot
052: * be used to receive an inbound message to the user mailbox.
053: * <p>
054: * A well-written application would always check the number of segments that
055: * would be used before sending a message, since the user is
056: * paying for each SMS message transferred and not just the fixed rate per
057: * high-level message sent.</p>
058: * <h2>Instantiating and Freeing MessageObjects</h2>
059: * <p>
060: * <code>MessageObject</code>s are instantiated when they are received from the
061: * {@link javax.wireless.messaging.MessageConnection MessageConnection}
062: * or by using the
063: * {@link MessageConnection#newMessage(String type)
064: * MessageConnection.newMessage}
065: * message factory. Instances are freed when they are garbage collected or
066: * when they go out of scope.
067: */
068: public class MessageObject implements Message {
069:
070: /** High level message type. */
071: String messtype;
072:
073: /** High level message address. */
074: String messaddr;
075:
076: /** Timestamp when the message was sent. */
077: long sentAt;
078:
079: /**
080: * Creates a <code>Message</code> object without a buffer.
081: * @param type text or binary message type.
082: * @param addr the destination address of the message.
083: *
084: */
085: public MessageObject(String type, String addr) {
086: messtype = type;
087: messaddr = addr;
088:
089: }
090:
091: /**
092: * Gets the address from the message object as a <code>String</code>. If no
093: * address is found in the message, this method returns
094: * <code>null</code>. If the method
095: * is applied to an inbound message, the source address is returned.
096: * If it is applied to an outbound message, the destination addess
097: * is returned.
098: * <p>
099: * The following code sample retrieves the address from a received
100: * message.
101: * <pre>
102: * ...
103: * Message msg = conn.receive();
104: * String addr = msg.getAddress();
105: * ...
106: * </pre>
107: * @return the address in string form, or <code>null</code> if no
108: * address was set
109: *
110: * @see #setAddress
111: */
112: public String getAddress() {
113: return messaddr;
114: }
115:
116: /**
117: * Sets the address part of the message object. The address is a
118: * <code>String</code> and should be in the format:
119: * <p>
120: * <code>sms://[<em>phone_number</em>:][<em>port</em>]</code>
121: * <p>
122: * The following code sample assigns an SMS URL address to the
123: * <code>Message</code> object.</p>
124: * <pre>
125: * ...
126: * String addr = "sms://+358401234567";
127: * Message msg = newMessage(TEXT_MESSAGE);
128: * msg.setAddress(addr);
129: * ...
130: * </pre>
131: * <p>
132: * @param addr the address of the target device
133: *
134: * @see #getAddress
135: */
136: public void setAddress(String addr) {
137:
138: messaddr = addr;
139: }
140:
141: /**
142: * Returns the timestamp indicating when this message has been
143: * sent.
144: *
145: * @return the date indicating the timestamp in the message or
146: * <code>null</code> if the timestamp is not set
147: * @see #setTimeStamp
148: */
149: public java.util.Date getTimestamp() {
150: if (sentAt == 0) {
151: return null;
152: }
153: return new Date(sentAt);
154: }
155:
156: /**
157: * Sets the timestamp for inbound SMS messages.
158: *
159: * @param timestamp the date indicating the timestamp in the message
160: * @see #getTimestamp
161: */
162: public void setTimeStamp(long timestamp) {
163: sentAt = timestamp;
164: }
165:
166: }
|