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) else return j; } return -1;
return 0;
} }
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", AlertType.INFO); alert.setTimeout(Alert.FOREVER);
A-5
"Pesan
Terkirim",
null,
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 Tabel Lampiran - 2 Method Kompresi dan Dekompresi Deklarasi Fungsi getDict()
Suatu cara untuk mendapatkan suatu nilai yang ada pada dictionary
dict.addElement
Menambahkan suatu eleman yang spesifik ke dalam
dictionary.
ditambahkan
maka
Jika
elemen
ukuran
sudah
vektor
dari
dictionary akan bertambah 1. public static string decompress()
Suatu metode untuk mengembalikan suatu hasil decoding menjadi kalimat semula
indexOf
Mencari nilai indeks dari suatu objek yang diberikan
dengan
menggunakan
metode
persamaan. elementAt
Mengembalikan objek dari suatu nilai indeks yang diberikan
length()
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
membandingkan
memarsing dengan
huruf
dan
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