Documente Academic
Documente Profesional
Documente Cultură
//SmartyPhonebook.java
//importing some java package
//////////////////////////
import javax.microedition.rms.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;
/////////////
//SmartyPhonebook extending abstract MIDlet class with CommandListener
/////////////
public class SmartyPhonebook extends MIDlet implements CommandListener
{
//declaring some displayable class
private Display display;
private Alert alert;
private Form mainform, newcontact, viewform, editform;
private List list;
//declaring RMS
private RecordStore recordstore = null;
private RecordEnumeration recordEnumeration = null;
private Filter filter = null;
//Commands
Command exit = new Command("Exit", Command.EXIT, 1);
//textbox
TextBox Find = new TextBox("Search Contact:\n", "", 20, TextField.ANY);
/////////////
//Constructor
/////////////
public SmartyPhonebook()
{
///Main Form
mainform = new Form("Smarty Phonebook");
try
{
Image img = Image.createImage("/headerImage.png");
ImageItem image = new ImageItem("\n\n\n\n", img, Item.LAYOUT_CENTER,
"Smarty Phonebook");
mainform.append(image);
}
catch (Exception e){e.printStackTrace();}
mainform.addCommand(viewList);
mainform.addCommand(exit);
mainform.setCommandListener(this);
}
public void startApp()
{
if (display == null){
display = Display.getDisplay(this);
display.setCurrent(mainform);
}
}
public void pauseApp()
{
}
public void destroyApp( boolean unconditional )
{
}
///////////////////////////////////////////////////////////////////////////
//commandAction which works with commandLister, the command event handling
///////////////////////////////////////////////////////////////////////////
public void commandAction(Command command, Displayable displayable)
{
//trying to open a RecordStore if existing, and if not create it
try
{
recordstore = RecordStore.openRecordStore("phonebookRS", true);
}
//for searching
if (command == search)
{
keyword=Find.getString();
try
{
list = new List("Smarty Phonebook", List.IMPLICIT);
list.addCommand(newContact);
list.addCommand(find);
list.addCommand(cancel);
list.setCommandListener(this);
currentTask=1;
String inputlname, inputfname, inputphonenum = null;
byte[] byteInputData = new byte[300];
ByteArrayInputStream inputStream = new
ByteArrayInputStream(byteInputData);
DataInputStream inputDataStream = new DataInputStream(inputStream);
if (recordstore.getNumRecords() > 0)
{
filter = new Filter(keyword);
recordEnumeration = recordstore.enumerateRecords(filter, null, false);
while (recordEnumeration.hasNextElement())
{
recordstore.getRecord(recordEnumeration.nextRecordId(),byteInputData, 0);
inputlname = inputDataStream.readUTF();
inputfname = inputDataStream.readUTF();
inputphonenum = inputDataStream.readUTF();
list.append(inputlname+", "+inputfname+"
"+inputphonenum,null);
inputStream.reset();
}
}
display.setCurrent(list);
inputStream.close();
}
catch (Exception error)
{
alert = new Alert("Error Reading",
error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
}
try
{
String outputLName=lname.getString();
String outputFName=fname.getString();
String outputPhonenum=phonenum.getString();
String outputemail=email.getString();
String outputaddress=address.getString();
byte[] outputRecord;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
DataOutputStream outputDataStream = new
DataOutputStream(outputStream);
outputDataStream.writeUTF(outputLName);
outputDataStream.writeUTF(outputFName);
outputDataStream.writeUTF(outputPhonenum);
outputDataStream.writeUTF(outputemail);
outputDataStream.writeUTF(outputaddress);
outputDataStream.flush();
outputRecord = outputStream.toByteArray();
recordstore.addRecord(outputRecord, 0, outputRecord.length);
outputStream.reset();
outputStream.close();
outputDataStream.close();
display.setCurrent(mainform);
}
catch ( Exception error)
{
display.setCurrent(alert);
}
}
editform.append(phonenumber);
inputStream.reset();
}
}
display.setCurrent(editform);
inputStream.close();
}
catch (Exception error)
{
alert = new Alert("Error Reading", error.toString(),
null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
}
viewform.setCommandListener(this);
byte[] byteInputData = new byte[300];
String inputlname, inputfname, inputphonenum,inputemail, inputaddress =
null;
ByteArrayInputStream inputStream = new
ByteArrayInputStream(byteInputData);
DataInputStream inputDataStream = new DataInputStream(inputStream);
if(currentTask==1)
{
filter = new Filter(keyword);
recordEnumeration = recordstore.enumerateRecords(filter, null, false);
}
if(currentTask==2)
{
Comparator comparator = new Comparator();
recordEnumeration = recordstore.enumerateRecords(null, comparator,
false);
}
for (int i = 1; i <= recordEnumeration.numRecords(); i++)
{
int datapointer=recordEnumeration.nextRecordId();
if(i==index)
{
recordstore.getRecord(datapointer,byteInputData, 0);
recID=datapointer;
inputlname = inputDataStream.readUTF();
inputfname = inputDataStream.readUTF();
inputphonenum = inputDataStream.readUTF();
inputemail = inputDataStream.readUTF();
inputaddress = inputDataStream.readUTF();
StringItem stringfname=new StringItem("Firstname: ", inputfname ,
Item.PLAIN);
StringItem stringlname=new StringItem("Lastname: ", inputlname ,
Item.PLAIN);
StringItem stringphonenum=new StringItem("Phone #: ",
inputphonenum , Item.PLAIN);
StringItem stringemail=new StringItem("Email: ", inputemail ,
Item.PLAIN);
StringItem stringaddress=new StringItem("Address: ", inputaddress ,
Item.PLAIN);
viewform.append(stringfname);
viewform.append(stringlname);
viewform.append(stringphonenum);
viewform.append(stringemail);
viewform.append(stringaddress);
inputStream.reset();
}
}
display.setCurrent(viewform);
inputStream.close();
}
catch (Exception error)
{
alert = new Alert("Error Reading", error.toString(),
null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
}
if (command == delete)
{
int index = 1+list.getSelectedIndex();
try
{
if(currentTask==1)
{
filter = new Filter(keyword);
recordEnumeration = recordstore.enumerateRecords(filter, null, false);
}
if(currentTask==2)
{
Comparator comparator = new Comparator();
recordEnumeration = recordstore.enumerateRecords(null, comparator,
false);
}
for (int i = 1; i <= recordEnumeration.numRecords(); i++)
{
int datapointer=recordEnumeration.nextRecordId();
if(i==index)
{
recordstore.deleteRecord(datapointer);
}
}
display.setCurrent(mainform);
}
catch (Exception error)
{
alert = new Alert("Error Reading", error.toString(),
null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
}
if (command == viewList)
{
try
{
list = new List("Smarty Phonebook", List.IMPLICIT);
list.addCommand(newContact);
list.addCommand(find);
list.addCommand(cancel);
list.setCommandListener(this);
currentTask=2;
byte[] byteInputData = new byte[300];
String inputlname,inputfname, inputphonenum, inputaddress, inputemail =
null;
ByteArrayInputStream inputStream = new
ByteArrayInputStream(byteInputData);
DataInputStream inputDataStream = new DataInputStream(inputStream);
{
recordstore.closeRecordStore();
}
catch (Exception error)
{
alert = new Alert("Error Closing", error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
}
}
////////////////////////////////////
//Implementation of RecordComparator
////////////////////////////////////
class Comparator implements RecordComparator
{
//Declaration of variables
private byte[] comparatorInputData = new byte[300];
private ByteArrayInputStream comparatorInputStream = null;
private DataInputStream comparatorInputDataType = null;
public int compare(byte[] record1, byte[] record4)
{
//Declaration of variables
int record1int, record4int;
try
{
comparatorInputStream = new ByteArrayInputStream(record1);
comparatorInputDataType =new DataInputStream(comparatorInputStream);
String data1=comparatorInputDataType.readUTF();
comparatorInputStream = new ByteArrayInputStream(record4);
comparatorInputDataType = new DataInputStream(comparatorInputStream);
String data2=comparatorInputDataType.readUTF();
int comparison = data1.compareTo(data2);
if (comparison == 0)
{
return RecordComparator.EQUIVALENT;
}
else if (comparison < 0)
{
return RecordComparator.PRECEDES;
}
else
{
return RecordComparator.FOLLOWS;
}
}
catch (Exception error)
{
return RecordComparator.EQUIVALENT;
}
}
////////////////////////////////
//Implementation of RecordFilter
////////////////////////////////
class Filter implements RecordFilter
{
private String search = null;
private ByteArrayInputStream inputstream = null;