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
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);
}
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; }
///////////////////////////////////////////////////////
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.*;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) { }
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);
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 += " ";
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);
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) {
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(); }
}
selesaiProses = false; thread = new Thread(this); thread.start(); } }
///////////////////////////////////////////////////////
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. Jika elemen sudah ditambahkan maka ukuran 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
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