|
The example below create an event and send it to a destination number.
It also imports event into its native database.
import java.io.*;
import java.util.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.pim.*;
import javax.wireless.messaging.*;
public class CreateEventMIDlet extends MIDlet implements MessageListener {
private final static int DEFAULT_PORT = 6553;
private final static String SMS_PREFIX = "sms://:";
private final EventCreationScreen mainScreen;
private MessageConnection conn;
private Message nextMessage;
private OperationsQueue queue = new OperationsQueue();
private final Display display;
Alert alert;
public CreateEventMIDlet() {
mainScreen = new EventCreationScreen(this, DEFAULT_PORT);
display = Display.getDisplay(this);
}
void sendMessage(String number, byte[] text) {
if (conn != null) {
try {
BinaryMessage requestSMS = (BinaryMessage) conn.newMessage(
MessageConnection.BINARY_MESSAGE);
String address = new StringBuffer("sms://")
.append(number).append(":").append(DEFAULT_PORT).toString();
requestSMS.setAddress(address);
requestSMS.setPayloadData(text);
conn.send(requestSMS);
} catch (IOException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
}
}
public void startApp() {
Displayable current = Display.getDisplay(this).getCurrent();
if (current == null) {
// check that the API is available
boolean isAPIAvailable =(
System.getProperty("microedition.pim.version") != null);
StringBuffer sbuf = new StringBuffer(
getAppProperty("MIDlet-Name"));
sbuf.append("\n").append(
getAppProperty("MIDlet-Vendor")).
append(isAPIAvailable?"":"\nPIM API not available");
Alert alertScreen = new Alert(null,sbuf.toString(),null,
AlertType.INFO);
alertScreen.setTimeout(3000);
if (!isAPIAvailable) {
display.setCurrent(alertScreen, mainScreen);
} else {
display.setCurrent(alertScreen, mainScreen);
// List connections from PushRegistry
String smsConnections[] = PushRegistry.listConnections(true);
// Chech the connections.
// We'll assume only one is of interest
for (int i = 0; i < smsConnections.length; i++) {
if (smsConnections[i].startsWith(SMS_PREFIX)) {
try {
conn =(MessageConnection)
Connector.open(smsConnections[i]);
BinaryMessage incomingMessage =
(BinaryMessage) conn.receive();
showIncomingMessage(incomingMessage);
conn.close();
} catch (IOException e) {
e.printStachTrace();
} catch (SecurityException e) {
e.printStachTrace();
}
}
}
// Build the connection string
String connection = SMS_PREFIX + DEFAULT_PORT;
try {
// Initiate the connection and add listener
conn = (MessageConnection) Connector.open(connection);
conn.setMessageListener(this);
} catch (IOException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
}
} else {
Display.getDisplay(this).setCurrent(current);
}
}
public void pauseApp() { }
public void destroyApp(boolean unconditional) {
try {
// Close the connection on exit
if (conn != null) {
conn.close();
}
} catch (IOException e) {
}
queue.abort();
}
// Asynchronous callback for inbound message.
public void notifyIncomingMessage(MessageConnection conn) {
if (conn == this.conn && conn != null) {
try {
// Create a ReceiveScreen upon message removal
BinaryMessage incomingMessage =
(BinaryMessage) conn.receive();
showIncomingMessage(incomingMessage);
} catch (IOException e) {
e.printStachTrace();
} catch (SecurityException e) {
e.printStachTrace();
}
}
}
void showIncomingMessage(BinaryMessage msg) {
display.setCurrent(new IncomingEventForm(this, msg));
}
void showMessage(String message) {
showError(message, mainScreen);
}
void showMessage(String message, Displayable mainScreen) {
showError(message, mainScreen);
}
void showError(String message, Displayable next) {
if(alert == null) {
alert = new Alert("");
}
alert.setTitle("Error");
alert.setString(message);
display.setCurrent(alert, next);
}
// adds an operation the queue
void enqueueOperation(Operation operation) {
queue.enqueueOperation(operation);
}
// shows the main screen
void showMain() {
display.setCurrent(mainScreen);
}
}
import java.io.*;
import java.util.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.pim.*;
import javax.wireless.messaging.*;
class EventCreationScreen extends Form implements CommandListener {
private final Command sendCommand, exitCommand;
private final TextField number, duration, topic;
private final DateField dateTime;
private final CreateEventMIDlet parent;
private final int port;
public EventCreationScreen(CreateEventMIDlet parent, int port) {
super("Create an event");
this.parent = parent;
this.port = port;
sendCommand = new Command("Send", Command.OK, 1);
exitCommand = new Command("Exit", Command.EXIT, 1);
number = new TextField("Dest. number","",20,TextField.PHONENUMBER);
dateTime = new DateField("Date", DateField.DATE_TIME,
TimeZone.getDefault());
dateTime.setDate(new Date());
duration = new TextField("Duration (min)","30",24,TextField.NUMERIC);
topic = new TextField("Subject","",24,TextField.ANY);
append(number);
append(dateTime);
append(duration);
append(topic);
addCommand(sendCommand);
addCommand(exitCommand);
setCommandListener(this);
}
public void commandAction(Command cmd, Displayable displayable) {
if (cmd == sendCommand) {
parent.enqueueOperation(new
SendEvent(number.getString(),
dateTime.getDate(),
duration.getString(),
topic.getString()));
} else if (cmd == exitCommand) {
parent.notifyDestroyed();
}
}
private class SendEvent implements Operation {
private final String number, duration, topic;
private final Date date;
SendEvent(String number,Date date,
String duration,String topic) {
this.number = number;
this.date = date;
this.duration = duration;
this.topic = topic;
}
public void dotask() {
int length = 0;
try {
length = Integer.parseInt(duration);
} catch (NumberFormatException e) {
return;
}
if (length <= 0) {
parent.showMessage("Duration needs to be positive",
EventCreationScreen.this);
} else if (number == null || number.length() == 0) {
parent.showMessage("Number not entered",
EventCreationScreen.this);
} else if (topic == null || topic.length() == 0) {
parent.showMessage("Subject not entered",
EventCreationScreen.this);
} else {
ByteArrayOutputStream out = new ByteArrayOutputStream();
EventList eventList = null;
try {
PIM pim = PIM.getInstance();
String listNames[] = pim.listPIMLists(PIM.EVENT_LIST);
if (listNames.length > 0) {
eventList = (EventList) pim.openPIMList(
PIM.EVENT_LIST,
PIM.READ_WRITE, listNames[0]);
Event newEvent = eventList.createEvent();
if (eventList.isSupportedField(Event.SUMMARY)) {
newEvent.addString(Event.SUMMARY,
PIMItem.ATTR_NONE,topic);
}
if (eventList.isSupportedField(Event.START)) {
newEvent.addDate(Event.START,PIMItem.ATTR_NONE,
date.getTime());
}
if (eventList.isSupportedField(Event.END)) {
newEvent.addDate(Event.END,PIMItem.ATTR_NONE,
date.getTime() + 60 * 1000 * length);
}
// let's check that VCALENDAR/1.0 is supported
String supportedFormats[] =
PIM.getInstance().supportedSerialFormats(
PIM.EVENT_LIST);
for (int i=0;i<supportedFormats.length;i++) {
if (supportedFormats[i].equals(
"VCALENDAR/1.0")) {
PIM.getInstance().toSerialFormat(newEvent,
out, "UTF-8","VCALENDAR/1.0");
break;
}
}
if (out.size() == 0) {
parent.showMessage("VCALENDAR/1.0 not supported",
EventCreationScreen.this);
}
eventList.importEvent(newEvent);
newEvent.commit();
} else {
parent.showMessage("No Event list available",
EventCreationScreen.this);
}
} catch (PIMException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
} finally {
try {
if (eventList != null) {
eventList.close();
}
} catch (PIMException e) {
}
}
if (out.size() > 0) {
parent.sendMessage(number, out.toByteArray());
}
}
}
}
}
import java.io.*;
import java.util.*;
import javax.microedition.lcdui.*;
import javax.microedition.pim.*;
import javax.wireless.messaging.*;
class IncomingEventForm extends Form implements CommandListener {
private Command acceptCommand, exitCommand, backCommand;
private TextField number, duration, topic;
private DateField dateTime;
private final CreateEventMIDlet parent;
private Event event;
IncomingEventForm(CreateEventMIDlet parent, BinaryMessage msg) {
super("Event Received");
this.parent = parent;
backCommand = new Command("Back", Command.BACK, 2);
exitCommand = new Command("Exit", Command.EXIT, 2);
addCommand(backCommand);
addCommand(exitCommand);
setCommandListener(this);
parent.enqueueOperation(new LoadEvent(msg));
}
public void commandAction(Command cmd, Displayable displayable) {
if (cmd == acceptCommand) {
parent.enqueueOperation(new InsertEvent());
} else if (cmd == exitCommand) {
parent.notifyDestroyed();
} else if (cmd == backCommand) {
parent.showMain();
}
}
private String findName(String number) {
String[] allLists = PIM.getInstance().listPIMLists(PIM.CONTACT_LIST);
if (allLists.length > 0) {
String results[] = new String[allLists.length];
for (int i = 0; i < allLists.length; i++) {
results[i] = findNameInList(number, allLists[i]);
}
for (int i = 0; i < allLists.length; i++) {
if (results[i] != null) {
return results[i];
}
}
}
return null;
}
private String findNameInList(String number, String list) {
ContactList contactList = null;
try {
contactList = (ContactList) PIM.getInstance()
.openPIMList(PIM.CONTACT_LIST, PIM.READ_ONLY, list);
if (contactList.isSupportedField(Contact.TEL)
&& contactList.isSupportedField(Contact.FORMATTED_NAME)) {
Contact pattern = contactList.createContact();
pattern.addString(Contact.TEL, PIMItem.ATTR_NONE, number);
Enumeration matching = contactList.items(pattern);
if (matching.hasMoreElements()) {
Contact ci = (Contact) matching.nextElement();
// FORMATTED_NAME is mandatory
return ci.getString(Contact.FORMATTED_NAME, 0);
}
}
} catch (PIMException e) {} catch (SecurityException e){}
finally {
if (contactList != null) {
try {
contactList.close();
} catch (PIMException e) {
}
}
}
return null;
}
private class InsertEvent implements Operation {
public void dotask() {
EventList eventList = null;
try {
PIM pim = PIM.getInstance();
String listNames[] = pim.listPIMLists(PIM.EVENT_LIST);
if (listNames.length>0) {
eventList = (EventList) pim.openPIMList(PIM.EVENT_LIST,
PIM.READ_WRITE,
listNames[0]);
// Check that the fields are supported
if (eventList.isSupportedField(Event.SUMMARY) &&
eventList.isSupportedField(Event.START) &&
eventList.isSupportedField(Event.END)) {
// event cannot be null at this stage
eventList.importEvent(event).commit();
parent.showMessage(
"Event inserted in the local database");
}
} else {
parent.showMessage("No Event list found");
}
} cat | |