DAFTAR PUSTAKA [1] Patrick Naughton, Java Handbook, ANDI and McGraw-Hikk Co,Yogyakarta, 2002. [2] M.Shalahuddin, Rosa A.S., Pemrograman J2ME, Informatika, Bandung, 2006. [3] Hendrawan, Slide Kuliah ET-5014- Dictionary Techniques. [4] Hendrawan, Slide Kuliah ET-5014-Informasi dan Coding. [5]http://ebooks.ee.itb.ac.id/ComputerHardware/Compression_Algorithm/j eff-compression-tute.htm, 12 Juni 2007. [6]http://en.wikipedia.org/wiki/Short_Message_Service, 17 Juni 2007. [7]http://homepages.uel.ac.uk/D.Bowden, 10 Juli 2007 [8]Budi Raharjo, Imam Heryanto, Arif Haryono, Tuntunan Pemrograman Java untuk Handphone, Informatika, Bandung, 2007. 56
LAMPIRAN A Project SendSMS ParsingKata.java package src; public class ParsingKata public static short[] parser(string kalimat) String [] kata = new String [320]; String [] katabaru = new String[320]; int j = 0; int l = 0; int i; for (i = 0 ; i < kalimat.length() ; i++) //misahin kalo ada spasi if (kalimat.substring(i,i+1).equals(" ")) String tmp = ""; tmp = kalimat.substring(j,i+1); kata [i] = tmp.trim(); j = i+1; //buat objek buat nyimpen kata sebelum spasi if (i == kalimat.length()-1) kata[i] = kalimat.substring(j,i+1); //nge-short null for (int k = 0 ; k < kalimat.length() ; k++) if (kata[k]!= null) katabaru[l]= kata[k]; l++; short [] b = new short [2*i]; String temp; byte [] z = new byte [2*l]; for (int m = 0 ; m < l ; m++) temp = katabaru[m]; System.out.println(katabaru[m]); // ngeluarin parsing katanya System.out.println(""+ParsingHuruf.huruf(temp)); // ngeluarin dict ParsingHuruf.sisa = new StringBuffer(); b[2*m] = (byte)(parsinghuruf.huruf(temp) >>> 8); b[2*m+1] = (byte)(parsinghuruf.huruf(temp) - (b[2*m] << 8)); A- 1
short [] baru = new short [2*l]; for (int r = 0 ; r < 2*l ; r++) System.out.println(b[r]+","); baru [r] = b[r]; return baru; ParsingHuruf.java package src; import java.util.vector; import java.lang.stringbuffer; public class ParsingHuruf public static StringBuffer sisa; /** Creates a new instance of ParsingHuruf */ public static int huruf(string kata) boolean ketemu = false; int i; int j = 0; Vector dict = DictTable.getDict(); for (i = 0 ; i < kata.length() ; i++) String temp = kata.substring(i); sisa = new StringBuffer(kata.substring(0, i)); // nyimpen huruf yang ga ada di dict for (j = 0 ; j < dict.size() ; j++) String temp2 = (String)dict.elementAt(j); if (temp.equals(temp2)) // buat nyocokin ama dict ketemu = true; break; else String hasil=""; hasil = kata.substring(0, i+1); // nyimpen hasilnya if (ketemu == false) return 0; else return j; return -1; A- 2
SendSMS.java import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import src.*; public class SendSMS extends MIDlet implements CommandListener private Display display; private Command cmexit, cmok; private PhoneInput form; public TextBox tbclip; public SendSMS() display = Display.getDisplay(this); cmok = new Command("Lanjut", Command.OK, 1); cmexit = new Command("Keluar", Command.EXIT, 1); tbclip = new TextBox("Pesan", "",600, TextField.ANY); tbclip.addcommand(cmok); tbclip.addcommand(cmexit); tbclip.setcommandlistener(this); public void startapp() display.setcurrent(tbclip); public void pauseapp() public void destroyapp(boolean unconditional) public void commandaction(command c, Displayable s) if (c == cmok) String smsport = getappproperty("sms-port"); form = new PhoneInput(this, display, tbclip.getstring(), smsport); display.setcurrent(form); else if (c == cmexit) exitmidlet(); public void exitmidlet() destroyapp(false); notifydestroyed(); PhoneInput.java import javax.microedition.lcdui.*; A- 3
import javax.microedition.io.*; import javax.wireless.messaging.*; import java.io.ioexception; import src.*; class PhoneInput extends Form implements ItemCommandListener, ItemStateListener, CommandListener, Runnable private Display display; private Command cmsend, cmcancel, cmexit; private TextField tfphone; private SendSMS midlet; private String msg; private StringItem itemcancel, itemsend, itemexit; private Alert al; private String adr; private String smsport; public PhoneInput(SendSMS midlet, Display display, String msg, String smsport) super("nomor HP"); this.display = display; this.midlet = midlet; this.msg = msg; this.smsport = smsport; cmsend = new Command("Kirim", Command.OK, 1); cmcancel = new Command("Batal", Command.CANCEL, 1); cmexit = new Command("Keluar", Command.EXIT, 1); tfphone = new TextField("Nomor HP", "", 30,TextField.PHONENUMBER); this.append(tfphone); this.setcommandlistener(this); itemsend = new StringItem(null, "Kirim", Item.BUTTON); itemsend.setdefaultcommand(cmsend); itemsend.setitemcommandlistener(this); append(itemsend); itemcancel = new StringItem(null, "Batal", Item.BUTTON); itemcancel.setdefaultcommand(cmcancel); itemcancel.setitemcommandlistener(this); append(itemcancel); itemexit = new StringItem(null, "Keluar", Item.BUTTON); itemexit.setdefaultcommand(cmexit); itemexit.setitemcommandlistener(this); append(itemexit); setitemstatelistener(this); public void itemstatechanged(item item) A- 4
public void commandaction(command c, Item item) if (c == cmsend) if ((tfphone.size() == 0)) al = new Alert("Error", "Nomor HP Tidak Valid", null, AlertType.ERROR); al.settimeout(alert.forever); display.setcurrent(al); else this.adr = "sms://" + tfphone.getstring() + ":" + smsport; new Thread(this).start(); else if(c == cmcancel) display.setcurrent(midlet.tbclip); else if(c == cmexit) midlet.exitmidlet(); public void commandaction(command c, Displayable s) public void run() MessageConnection smsconn = null;; try smsconn = (MessageConnection)Connector.open(adr); TextMessage txtmessage = (TextMessage)smsconn.newMessage( MessageConnection.TEXT_MESSAGE); txtmessage.setaddress(adr); short [] m = ParsingKata.parser(msg); String s = ""; for (int i = 0 ; i < m.length ; i++) s = s + String.valueOf(m[i]) + ","; txtmessage.setpayloadtext(string.valueof(s)); //String m = ParsingKata.parser(msg); //txtmessage.setpayloadtext(string.valueof(m)); System.out.println(s); int persentase = ((s.length()*800)/(msg.length()*7)); System.out.println("Besarnya persentase kompresi = "+persentase+"%"); System.out.println("panjang sms = "+msg.length()); smsconn.send(txtmessage); Alert alert = new Alert("Info", "Pesan Terkirim", null, AlertType.INFO); alert.settimeout(alert.forever); A- 5
display.setcurrent(alert); catch (Throwable t) System.out.println("error : " + t.tostring()); Alert alert = new Alert("Error", "Pesan Gagal Terkirim", null, AlertType.ERROR); alert.settimeout(alert.forever); display.setcurrent(alert); if (smsconn!= null) try smsconn.close(); catch (IOException ioe) Project TerimaSMS Decompress.java package src; import java.util.*; public class Decompress public static String decompress(byte [] data) Vector dict = DictTable.getDict(); String str = ""; boolean ketemu; int temp; short [] hasil_decode = new short [80]; for (int i = 0; i < data.length/2 ; i++) hasil_decode[i] = (short)((short)(data[2*i] << 8) (short)(data[2*i+1])); temp=0; temp = dict.indexof(hasil_decode); if (hasil_decode[i]==temp) ketemu = true; break; str += dict.elementat((hasil_decode[i])); str += " "; A- 6
if (data[i]==-1) break; return str; TerimaSMS.java /*************************************************** Program 5.2. Menerima SMS ***************************************************/ package src; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.wireless.messaging.*; import javax.microedition.io.*; import java.io.ioexception; import src.*; public class TerimaSMS extends MIDlet implements CommandListener, Runnable, MessageListener private Display display; private Alert alert; private TextBox tfpesan; private Thread thread; private MessageConnection conn; private Message pesan; private String[] daftarkoneksi; private boolean selesaiproses; private String port; String [] karakter = new String [100]; String [] hilangkoma = new String [100]; int jumlahdata = 0; int temp = 0; private final Command cmdkeluar = new Command("Keluar", Command.EXIT, 1); public TerimaSMS() port = getappproperty("port-sms"); display = Display.getDisplay(this); alert = new Alert("Terima SMS"); alert.settimeout(alert.forever); alert.addcommand(cmdkeluar); A- 7
alert.setcommandlistener(this); tfpesan = new TextBox(null, null, 500, TextField.ANY); tfpesan.addcommand(cmdkeluar); tfpesan.setcommandlistener(this); public void startapp() String alamatkoneksi = "sms://:" + port; if (conn == null) try conn = (MessageConnection) Connector.open(alamatKoneksi); conn.setmessagelistener(this); catch (IOException ioe) ioe.printstacktrace(); daftarkoneksi = PushRegistry.listConnections(true); if (daftarkoneksi == null daftarkoneksi.length == 0) alert.setstring("menunggu SMS pada port " + port + "..."); startnewthread(); display.setcurrent(alert); public void pauseapp() selesaiproses = true; thread = null; public void destroyapp(boolean unconditional) selesaiproses = true; thread = null; if (conn!= null) try conn.close(); catch (IOException e) public void commandaction(command c, Displayable s) if (c == cmdkeluar c == Alert.DISMISS_COMMAND) destroyapp(false); notifydestroyed(); // method ini ada karena kita mengimplementasikan // interface Runnable public void run() try pesan = conn.receive(); if (pesan!= null) A- 8
String alamatpengirim = pesan.getaddress(); tfpesan.settitle("pesan dari: " + alamatpengirim.substring(6)); if (pesan instanceof TextMessage) TextMessage pesanteks = (TextMessage) pesan; String awal = pesanteks.getpayloadtext(); for (int i = 0; i < awal.length(); i++) karakter [i] = awal.substring(i,i+1); if(jumlahdata == 0) hilangkoma[jumlahdata] = awal.substring(0,i); jumlahdata++; temp = i; else hilangkoma[jumlahdata] = awal.substring(temp+1, i); jumlahdata++; temp = i; byte [] ubahkebyte = new byte [jumlahdata]; //String m = ""; for (int j = 0; j < jumlahdata ; j++) ubahkebyte [j] = Byte.parseByte(hilangkoma[j]); //m += ubahkebyte[j] + " "; String m = Decompress.decompress(ubahkebyte); tfpesan.setstring(m); display.setcurrent(tfpesan); catch (IOException ioe) ioe.printstacktrace(); // method ini ada karena kita mengimplementasikan // interface MessageListener public void notifyincomingmessage(messageconnection conn) if (thread == null) startnewthread(); public void startnewthread() A- 9
selesaiproses = false; thread = new Thread(this); thread.start(); A- 10
LAMPIRAN B Atribut dan Method Class Java Atribut dan method yang akan dijelaskan pada lampiran ini hanya atribut dan method pada class Java yang berkaitan dengan proses kompresi dan dekompresi, yaitu class ParsingKata.java, ParsingHuruf.java, DictTable.java, Decompress.java Tabel Lampiran - 1 Atribut Kompresi dan Dekompresi Deklarasi Fungsi String [] Menyediakan suatu variabel penampung dalam bentuk array of string short [ ] Menyediakan suatu variabel penampung dalam bentuk array of short byte [ ] Menyediakan variabel penampung dalam bentuk array of byte boolean Nilai kembalian dari atribut ini nilai true atau false Vector Menyediakan variabel penampung dalam bentuk kolom seperti vector getdict() dict.addelement public static string decompress() indexof elementat length() Tabel Lampiran - 2 Method Kompresi dan Dekompresi Deklarasi Fungsi Suatu cara untuk mendapatkan suatu nilai yang ada pada dictionary Menambahkan suatu eleman yang spesifik ke dalam dictionary. Jika elemen sudah ditambahkan maka ukuran vektor dari dictionary akan bertambah 1. Suatu metode untuk mengembalikan suatu hasil decoding menjadi kalimat semula Mencari nilai indeks dari suatu objek yang diberikan dengan menggunakan metode persamaan. Mengembalikan objek dari suatu nilai indeks yang diberikan Metode untuk mencari panjang dari suatu objek yang diberikan B- 1
public static short [ ] parser metode yang digunakan untuk memarsing kata dict.size() Metode untuk mengetahui ukuran dari suatu dictionary public static int huruf() Metode untuk memarsing huruf dan membandingkan dengan dictionary. Nilai kembalian dari metode ini adalah indeks dari dictionary substring() Nilai kembaliannya adalah suatu string baru yang merupakan substring dari string sebelumnya. Substring diawali dari suatu index string tertentu sampai dengan akhir kalimat B- 2