SMS GATEWAY
By : BlackOnta
http://onta-programing.blogspot.com
Desember 2009
1 | http://onta-programing.blogspot.com/
Yang akan di bahas:
Sepintas tentang SMS Gateway Persiapan
Yang dibutuhkan
Persiapan Hadware
Persiapan Library
Instalasi Library
Persiapan Project
Pengembangan 1. Database 2. Project Utama
Error dan Penanganannya
Tanya Jawab
Breaktime
2 | http://onta-programing.blogspot.com/
Pembukaan
Gak usah lama-lama baca pembukaan segala langsung ke halaman selanjutnya
3 | http://onta-programing.blogspot.com/
SEPINTAS TENTANG SMS GATEWAY Cari Aja yah di Google hehe PERSIAPAN
Yang dibutuhkan Untuk membuat SMS Gateway ini ada beberapa hal yang harus dipersiapka, antara lain: Hardware: 1. Komputer (Disaran kan yang High End ) 2. HP sebagai modem. Adapun spesifikasi HP yang bias digunakan ada pada bagian akhir tutorial. 3. Konekstor Hp. Konektor digunakan untuk menghubungkan HP dengan Komputer.
Software: 1. SUN JDK 1.5 atau yang terbaru Download aja di situsnya SUN. 2. Netbeans, saya gunakan Netbeans 6.1 3. Driver Modem/HP 4. Library-Library. Lebih detail tentang Library, akan dibahas pada sub berikutnya.
Persiapan Hardware Persiapkan HP yang akan kita gunakan sebagai Modem (Jenis-jenis HP yang bisa digunakan ada pada bagian akhir tutorial). Sambungkan HP Ke Komputer, melalui konektor, kemudian Jika Diminta Driver Instalkan Drivernya. Slesai.
Persiapan Library Kalau kita ikuti referensi dari Developer SMSLib, maka akan banyak banget library yang kita harus persiapkan , tp tenang dengan blackonta selalu ada jalan yang mudah untuk membuat seuatu program , karena memang setelah beberapa kali membuat program
4 | http://onta-programing.blogspot.com/
SMS Gateway, ternyata hanya beberapa Library aja yang kita perlukan. Ok library-library tersebut adalah sebagai berikut: 1. SMSLib 2. Java Communications Library 3. Simple logging facade for Java (slf4j) 4. MySQL Server 5. dan untuk databasenya kita membutukkan MySQL Driver (Sudah ada di netbeans).
Instalasi Library Ok, selanjutnya kita akan melakukan Konfigurasi Librari-Library diatas. Langkah ini
sangat penting
untuk dillakukan dengan benar,
supaya tidak terjadi kesalahan-kesalahan yang tidak perlu. 1. Tidak Ada Perlakuan Khusus untuk SMSLib, kita tinggal Extract lalu masukan di Project (dibahas pada bagian persiapan Project). 2. Java Communications Library Java Communications Library terdiri dari dua library, yaitu java comm, dan RxTx.
Kita mulai dengan konfigurasi Java Comm, Temen-temen bisa
Download
Library
terbaru
ini
di
http://code.google.com/p/smslib/downloads/list. Atau temen-temen bisa menggunakan yang ada dalam source code yang disertakan di tutorial ini. Download sesuai Sistem Operasi yang temen-temen gunakan, karena saya menggunakan Windows maka saya mendownload untuk yang windows. Sejanjutnya ikuti langkah2 berikut: a. Extract File yang telah didownload. Maka temen-temen akan melihat file file sebagai berikut (Tergantung lib yang didownload linux or Windows):
5 | http://onta-programing.blogspot.com/
b. Perhatikan saja file file ini (Sekali lagi saya gunakan library java comm. Untuk windows):
File
comm.jar,
Copykan
file
ini
ke
DIR_INSTALASI_JDK/jre/lib/ext/
File
javax.comm.properties,
Copykan
file
ini
ke
DIR_INSTALASI_JDK /jre/lib/
File
win32com.dll
Copykan
file
ini
ke
DIR_INSTALASI_JDK/jre/bin/
c. Selesai untuk konfigurasi java comm..
Untuk Mendownload library RxTx temen2 bisa mampir di http://rxtx.qbang.org/pub/rxtx/rxtx-2.1-7-bins-r2.zip. Kalau sudah bisa ikuti langkah2 mudah berikut: a. Extract File yang telah didownload. Maka temen-temen akan melihat file file sebagai berikut (Tergantung lib yang didownload linux or Windows):
6 | http://onta-programing.blogspot.com/
b. Yang akan kita gunakan hanya dua file yaitu RXTXComm,jar dan file yang sesuai dengan Sistem Operasi Kita (Saya Pilih Windows). c. Copykan file RXTXComm,jar
ke DIR_INSTALASI_JDK
/jre/lib/ext/ d. Copykan
file
rxtxParallel.dll
dan
rxtxSerial.dll
ke
DIR_INSTALASI_JDK/jre/bin/. (rxtxParallel.dll untuk modem parallel, dan rxtxSerial.dll untuk Modem yang Serial) e. Selesai.
3. Simple logging facade for Java (slf4j) Untuk Simple logging facade for Java (slf4j) juga tidak ada perlakuan khusus hanya tinggal di extract saja, temen2 bisa mendownload Library ini di http://www.slf4j.org/download.html, namun ada beberapa hal yang harus diperhatikan. a. Ketika selesai di extract, Maka kita akam mendapatkan banyak file:
b. Wah buanyak bener ya hehe , tenang, dari file2 yang banyak itu kita hanya memerlukan dua file koq, yaitu slf4j-api-1.5.6, dan slf4j-simple-1.5.6. Kita tinggal masukan dua library itu ke Project (dibahas pada bagian persiapan Project). (Library library yang diperlukan sudah ada dalam source code)
Persiapan Project
7 | http://onta-programing.blogspot.com/
1. Buat Sebuah Project Baru di Netbeans. 2. Masukan Library2 yang kita perlukan, caranya, dalam Tree Project ada Folder Libray.
3. Klik Kanan, Kemudian Add Jar/Folder
4. Tambahkan Library SMSLib, dan Simple logging facade for Java (slf4j). 5. Ingat Cuma Library SMSLib, dan Simple logging facade for Java (slf4j). untuk Java Comm, dan RxTx nya gak usah, (Kan udah di Copy-in ke Folder JRE). 6. Untuk Mempermudah saya sudah jadikan satu Library SMSLib, dan Simple logging facade for Java (slf4j) yang diperlukan di folder core_library. 7. Tambahkan juga library Mysql Connector, dengan cara Klik Kanan Folder Library -> Add Library -> MySQL JDBC Driver.
Fyuh, Akhirnya selesai juga proses persiapan, Are You Ready to Rock? hehehe PENGEMBANGAN 1. Database Banyak jalan menuju Mekah , Pembuatan database pun bisa dilakukan dengan banyak cara. Bisa Langsung dari MySQL Console,
8 | http://onta-programing.blogspot.com/
Pake PhpMyAdmin, Pake SQLTools, Ataupun Pake Netbeans. Supaya gak terlalu banyak tools, saya tunjukan saja pake Netbeans Aja OK.
Pastikan dalam Kompie kita udah terinstall MySQL Server.
Pada Bagian Kiri Atas Pilih Bagian Service
Kemudian Pilih MsSQL (Connector/J driver) Kemudian Klik kanan dan pilih Connect Using.
Maka Akan Muncul Kotak Dialog Ini:
9 | http://onta-programing.blogspot.com/
Isikan Keterangan yang dimaksud, untuk password isikan sesuai dengan password MySQL Temen2
Jika sudah dilakukan maka akan ada tambahan pada panel service. Klik Kanan Kemudian pilih Connect.
Setelah terkoneksi, Klok Kanan Kembali Kemudian Pilih Execute Command
10 | http://onta-programing.blogspot.com/
Setelah Itu Akan Muncul Sebuah Jendela Editor, Kemudian Copy Patekan Kode Berikut (Atau ada dalam source Code): CREATE DATABASE sms_center; use sms_center; CREATE TABLE IF NOT EXISTS `sms_masuk` ( `id_pesan` int(10) unsigned NOT NULL auto_increment, `isi_pesan` varchar(255) NOT NULL, `no_pengirim` varchar(15) NOT NULL, `pdu_pesan` varchar(255) NOT NULL, `encoding` varchar(20) NOT NULL, `id_gateway` varchar(20) NOT NULL, `tanggal_masuk` date NOT NULL, PRIMARY KEY
(`id_pesan`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ; --- Dumping data for table `sms_masuk` -INSERT
INTO
`no_pengirim`,
`sms_masuk` `pdu_pesan`,
(`id_pesan`,
`isi_pesan`,
`encoding`,
`id_gateway`,
`tanggal_masuk`) VALUES (1,
'Test
pesan
1',
'+0',
'D4F29C0E8297E761372806',
'ENC7BIT', 'Motorola.COM3', '2009-12-11'), (4,
'Test
pesan
2',
'+0',
'D4F29C0E8297E761374806',
'ENC7BIT', 'Motorola.COM3', '2009-12-11');
Kemudian Tekan Tombol Run SQL
11 | http://onta-programing.blogspot.com/
Yup Database Telah Selesai Dibuat dengan nama smscenter dan telah dibuat pula table sms_masuk.
Ok Selesai Sudah Persiapan Database, sekarang kita bisa buat Project Utama.
Minum Dulu Kopinya, Makan Cemilannya, lalu siap membuat Project Utamannya .
2. Project Utama Kembali pada project yang telah kita buat pada persiapan project. Sekarang buat buat 4 buah package, berikut package yang saya buat: a. ovq.smsgateway.image Package ini berfungsi untuk menampung image yang akan kita gunakan.
b. ovq.smsgateway.obj Package ini digunakan untuk menampung Class-Class Beans (Class yang mempunya method setter dan getter).
c. ovq.smsgateway.service Package ini digunakan untuk menampung Class-Class Service SMS.
d. ovq.smsgateway.ui Package ini digunakan untuk menampung Class-Class User Interface.
Setelah dibuat project kita akan terlihat kurang lebih seperti ini:
12 | http://onta-programing.blogspot.com/
Ok, setelah Package kita buat, masukan image-image yang akan kita gunakan (Ada pada Folder Image di source code).
Setelah itu buat Sebuah Class pada package ovq.smsgateway.obj, kemudian beri nama Status. Lalu Ketikan Kode di bawah ini: package ovq.smsgateway.obj; /** * * @author taopik ridwan */ public class Status { private String manufacture; private String model; private String serialNo; private String simImsi; private int signal; private int baterai; public int getBaterai() { return baterai; } public void setBaterai(int baterai) { this.baterai = baterai; } public String getManufacture() { return manufacture; } public void setManufacture(String manufacture) {
13 | http://onta-programing.blogspot.com/
this.manufacture = manufacture; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public String getSerialNo() { return serialNo; } public void setSerialNo(String serialNo) { this.serialNo = serialNo; } public int getSignal() { return signal; } public void setSignal(int signal) { this.signal = signal; } public String getSimImsi() { return simImsi; } public void setSimImsi(String simImsi) { this.simImsi = simImsi; } }
Clas ini merupakan Beans untuk status dari HP/Modem yang kita gunakan.
Selanjutnya
buat
sebuah
Class
pada
package
ovq.smsgateway.service. Kemudian Beri nama MYSQLConnection. Dari namanya kita bisa mengetahui bahwa fungsi dari Class ini adala untuk membuat koneksi ke database. Kemudian Ketikan Kode berkut: package ovq.smsgateway.service; import java.sql.Connection; import java.sql.DriverManager; /** * * @author taopik ridwan */
14 | http://onta-programing.blogspot.com/
public class MYSQLConnection { public static Connection buatKoneksi() throws Exception{ String url = "jdbc:mysql://localhost/sms_center"; String user = "root"; String pass = "*"; Connection koneksi = null; Class.forName("com.mysql.jdbc.Driver").newInstance(); koneksi = DriverManager.getConnection(url, user, pass); return koneksi; } }
Untuk username dan passwordnya sesuaikan dengan konfigurasi MySQLnya masing2.
Setelah itu, kita buat sebuah Class yang paling penting dari keseluruhan Program ini. Karena semua aktifitas yang berhubungan dengan Aktifitas SMS Gateway di kerjakan Oleh Class Ini.
Buat Class pada package ovq.smsgateway.service, kemudian beri nama SMSReadService. Kemudian Ketikan Kode Berikut: package ovq.smsgateway.service; import import import import import import import import import import import import import import import
java.sql.Connection; java.sql.PreparedStatement; java.sql.SQLException; javax.swing.JTextArea; org.smslib.AGateway.GatewayStatuses; org.smslib.AGateway.Protocols; org.smslib.ICallNotification; org.smslib.IGatewayStatusNotification; org.smslib.IInboundMessageNotification; org.smslib.InboundMessage; org.smslib.Message.MessageTypes; org.smslib.Service; org.smslib.modem.ModemGateway.IPProtocols; org.smslib.modem.SerialModemGateway; ovq.smsgateway.obj.Status;
/** * * @author taopik ridwan */ public class SMSReadService { //panel status private Status status = null; private JTextArea textArea;
15 | http://onta-programing.blogspot.com/
Service service; private Connection koneksi; public SMSReadService( Connection koneksi, JTextArea textArea) { this.koneksi = koneksi; this.textArea = textArea; } public void setStatus(Status status) { this.status = status; } public void startService() throws Exception { PesanMasukHandler pesanMasuk = new PesanMasukHandler(); PanggilanMasukHandler panggilanMasuk = new PanggilanMasukHandler(); GatewayStatusHandler statusGateway = new GatewayStatusHandler(); this.service = new Service(); SerialModemGateway gateway = new SerialModemGateway ( "Motorola.COM3", //nama GAteway "COM3", //Port yang digunakan 57600, //baudrate "Motorola", //merk HP "C380");//Tipe HP gateway.setIpProtocol(IPProtocols.BINARY); gateway.setProtocol(Protocols.PDU); gateway.setInbound(true); gateway.setOutbound(true); gateway.setSimPin("0000"); this.service.setInboundMessageNotification(pesanMasuk); this.service.setCallNotification(panggilanMasuk); this.service.setGatewayStatusNotification(statusGateway); this.service.addGateway(gateway); this.service.startService(); if(status != null ) { this.status.setManufacture(gateway.getManufacturer()); this.status.setModel(gateway.getModel()); this.status.setSerialNo(gateway.getSerialNo()); this.status.setSimImsi(gateway.getImsi()); this.status.setSignal(gateway.getSignalLevel());
16 | http://onta-programing.blogspot.com/
this.status.setBaterai(gateway.getBatteryLevel()); } } class PesanMasukHandler implements IInboundMessageNotification { public void process( String idGateway, MessageTypes tipePesan, InboundMessage pesanMasuk) { if(tipePesan == MessageTypes.STATUSREPORT) return; try { String sql = "INSERT INTO sms_masuk VALUES (NULL,?,?,?,?,?,?)"; PreparedStatement prepare = koneksi.prepareStatement(sql); prepare.setString(1, pesanMasuk.getText()); prepare.setString(2, "+"+pesanMasuk.getMpRefNo()); prepare.setString(3, pesanMasuk.getPduUserData()); prepare.setString(4, pesanMasuk.getEncoding().name()); prepare.setString(5, pesanMasuk.getGatewayId()); prepare.setDate(6, new java.sql.Date(pesanMasuk.getDate().getTime())); prepare.executeUpdate(); } catch (SQLException ex) { System.out.println("Pesan Gagal Disimpan"); System.out.println(ex.getMessage()); } textArea.append("\nPesan Diterima:\n"+ pesanMasuk.getSmscNumber() +"\n"+ pesanMasuk.getText()); textArea.append("\n-----------------------------"); try { SMSReadService.this.service.deleteMessage(pesanMasu k); } catch (Exception e){ } } } class PanggilanMasukHandler implements ICallNotification { public void process( String idGateway, String noHP) { } } class GatewayStatusHandler implements
17 | http://onta-programing.blogspot.com/
IGatewayStatusNotification { public void process( String idGateway, GatewayStatuses statusLama, GatewayStatuses statusBaru) { } } }
Penjelasan: Kita mulai dari Konstruktor Class SMSReadService public SMSReadService( Connection koneksi, JTextArea textArea) { this.koneksi = koneksi; this.textArea = textArea; }
Konstuktor dari Class SMSReadService membutuhkan dua parameter, yaitu Connection, yang nantinya dibutuhkan ketika menyimpan SMS kedalam Database, kemudian JTextArea, yang dibutuhkan nanti ketika kita menampilkan Log SMS.
Kemudian Method startService(). Method ini merfungsi untuk memulai Service, sehingga program kita akan mulai memonitor sms yang masuk. PesanMasukHandler pesanMasuk = new PesanMasukHandler(); PesanMasukHandler Class ini adalah Class yang nantinya di jalankan
ketika ada SMS yang masuk. Jadi jika ada pesan/SMS masuk. Maka PesanMasukHandler
akan
dijalankan.
Adapun
isi
dari
Class
PesanMasukHandler adalah: class PesanMasukHandler implements IInboundMessageNotification { public void process( String idGateway, MessageTypes tipePesan, InboundMessage pesanMasuk) { if(tipePesan == MessageTypes.STATUSREPORT) return; try { String sql (NULL,?,?,?,?,?,?)";
=
"INSERT
18 | http://onta-programing.blogspot.com/
INTO
sms_masuk
VALUES
PreparedStatement prepare = koneksi.prepareStatement(sql); prepare.setString(1, pesanMasuk.getText()); prepare.setString(2, "+"+pesanMasuk.getMpRefNo()); prepare.setString(3, pesanMasuk.getPduUserData()); prepare.setString(4 pesanMasuk.getEncoding().name()); prepare.setString(5, pesanMasuk.getGatewayId()); prepare.setDate(6, new java.sql.Date(pesanMasuk.getDate().getTime())); prepare.executeUpdate(); } catch (SQLException ex) { System.out.println("Pesan Gagal Disimpan"); System.out.println(ex.getMessage()); } textArea.append("\nPesan Diterima:\n"+ pesanMasuk.getSmscNumber() +"\n"+ pesanMasuk.getText()); textArea.append("\n-----------------------------"); try { SMSReadService.this.service.deleteMessage(pesanMasuk); } catch (Exception e){ } } }
Dalam kode diatas, jika ada pesan masuk maka program akan memasukan pesan kedalam database, kemudian menampilkannya kedalam JTextArea. PanggilanMasukHandler panggilanMasuk = new PanggilanMasukHandler(); GatewayStatusHandler statusGateway = new GatewayStatusHandler();
PanggilanMasukHandler Berfungsi sebagai Class yang menangani jika
terjadi penggilan masuk pada HP/Modem yang kita gunakan. Sedangkan GatewayStatusHandler berfungsi sebagai Class yang menangani perubahan Status Gateway.
Dalam
kode
diatas
Class
PanggilanMasukHandler
GatewayStatusHandler sebagai berikut:
19 | http://onta-programing.blogspot.com/
dan
Class
class PanggilanMasukHandler implements ICallNotification { public void process(String idGateway, String noHP) { } } class GatewayStatusHandler implements IGatewayStatusNotification { public void process( String idGateway, GatewayStatuses statusLama, GatewayStatuses statusBaru) { } }
Lho, Class diatas kan kosong????, yupz benar, untuk penanganan panggulan dan perubahan gateway kita biarkan kosong, jadi ketika terjari panggilan atau perubahan status Gateway, tidak akan ada reaksi apa2. this.service = new Service(); SerialModemGateway gateway = new SerialModemGateway ( "Motorola.COM3", "COM3", 57600, "Motorola", "C380"); gateway.setIpProtocol(IPProtocols.BINARY); gateway.setProtocol(Protocols.PDU); gateway.setInbound(true); gateway.setOutbound(true); gateway.setSimPin("0000");
Line pertama dari kode diatas adalah kita memanggil Class Service pada Library SMSLib, kemudian dilanjut dengan menginstansiasi Gateway. Ada dua pilihan
SerialModemGateway
Berfungsi pada HP/Modem dengan tipe
koneksi Serial
IPModemGateway Berfungsi pada HP/Modem dengan tipe koneksi IP
20 | http://onta-programing.blogspot.com/
Namun parameter untuk keduanya adalah sama. Penjelasan lebih lanjut mengenai parameternya bias temen2 lihat di postingan
sebelumnya
http://onta-
programing.blogspot.com/2009/08/membuat-aplikasi-sms-gatewaysederhana.html
Kemudian Selanjutnya kita mengeset parameter-parameter pada gateway. gateway.setInbound(true);
true
jika
kita
ingin
agar
gateway
menerima pesan masuk, dan false untuk sebaliknya. gateway.setOutbound(true); true jika kita ingin agar gateway bisa
mengirim pesan, dan false untuk sebaliknya gateway.setSimPin("0000");
jika HP/Modem yang kita gunakan
menggunakan pin. Ganti 0000 dengan pin HP/Modem. this.service.setInboundMessageNotification(pesanMasuk); this.service.setCallNotification(panggilanMasuk); this.service.setGatewayStatusNotification(statusGateway);
Mengeset Handler-Handler yang telah di instansiasi pada Service. this.service.addGateway(gateway); this.service.startService();
Line pertama menambahkan gateway pada service, line kedua memulai service, sehingga program dalam keadaan Stand By untuk menerima SMS.
Kode yang terakhir: if (status != null ) { this.status.setManufacture(gateway.getManufacturer()); this.status.setModel(gateway.getModel()); this.status.setSerialNo(gateway.getSerialNo()); this.status.setSimImsi(gateway.getImsi()); this.status.setSignal(gateway.getSignalLevel()); this.status.setBaterai(gateway.getBatteryLevel()); }
21 | http://onta-programing.blogspot.com/
Mengeset properties Status,
Ok, kalau ada yang masih kurang jelas bisa Tanya jawab di Blog or di FB.
Pembuatan GUI Dalam Tutorial Kali Ini Kita Akan membuat sebuah SMS Gateway Control Panel sebagai berikut:
22 | http://onta-programing.blogspot.com/
Pertama Kita Akan Buat Panel Indikator/Panel Status HP/Modem. 1. Buat Sebuah Panel baru pada package ovq.smsgateway.ui. 2. Beri Nama Panel tersebut dengan nama PanelIndikator. 3. Lalu Tambahkan Komponen-komponen sehingga tampak sebagai berikut:
4. Ubah Variable name dari label lebe yang ditandai menjadi (Berurutan): signal, baterai, manufacture, model, serialNo, dan imsi. 5. Mengenai property yang lainnya lihat di Source code 6. Beralih Ke mode Code
, kemudian tambahkan kode
berikut: public void setStatus(Status s){ signal.setText(s.getSignal() +" % ");
23 | http://onta-programing.blogspot.com/
baterai.setText(s.getBaterai() + " %"); manufacture.setText("Modem Manufacture: "+ s.getManufacture()); model.setText("Model : "+s.getModel()); serialNo.setText("Serial No/IMEY: "+ s.getSerialNo()); imsi.setText("SIM IMSI : " + s.getSimImsi()); }
7. Done, Selsesai. Error dan penanganannya dibahas pada bagian error dan penanganannya. Ok, Minum lagi kopinya, makan lagi cemilannya, trus kita lanjutin . Selanjutnya kita akan membuat Panel Status Bar. 1. Buat Sebuah Panel baru pada package ovq.smsgateway.ui. 2. Beri Nama Panel tersebut dengan nama PanelStatus. 3. Lalu Tambahkan sebuah JLabel sehingga tampak sebagai berikut
4. Beralih Ke mode Code
, tambahkan variable berikut:
public static final int KONEKSI_ERROR = 0; public static final int TERSAMBUNG = 1; public static final int TERPUTUS = 3;
5. kemudian tambahkan kode berikut: public void setStatusKoneksi(int status, String s){ if(status == KONEKSI_ERROR ){ jLabel1.setIcon(new ImageIcon(getClass() .getResource("/ovq/smsgateway/image/error.png"))); jLabel1.setText(s); }else if(status == TERSAMBUNG ){ jLabel1.setIcon(new ImageIcon(getClass() .getResource("/ovq/smsgateway/image/mobile_phone.png"))); jLabel1.setText(s); }else if(status == TERPUTUS ){ jLabel1.setIcon(new ImageIcon(getClass() .getResource("/ovq/smsgateway/image/mobile_phone_off.png"))); jLabel1.setText(s); } }
6. Done, Selesai. Error dan penanganannya dibahas pada bagian error dan penanganannya. 24 | http://onta-programing.blogspot.com/
Sekarang, kIta buat sebuah dialog untuk melihat pesan yang masuk. 1. Buat Seuah JDialog pada package ovq.smsgateway.ui, kemudian beri nama JDialog tersebut dengan nama DialogPesanMasuk. 2. Ubah Layout dari JDialog tersebur menjadi BorderLayout dengan Cara Klik Kanan Pada dialog, kemudian pilih Set Layout, dan pilih BorderLayout. 3. Tambahkan sebuah JTable pada JDialog, ubah variable namenya menjadi tabelPesan..
4. Beralih Ke mode Code
,
5. tambahkan Kode berikut, sebagai model untul JTable. class TabelModel extends AbstractTableModel { String[] kolomHeader = { "Id SMS","SMS", "No SMS", "PDU", "Encoding", "Id Gtateway", "Tanggal"}; Object[][] data; public void addData(Object[][] obj){ data = obj; fireTableDataChanged(); } public int getRowCount() { return data.length; } public int getColumnCount() { return kolomHeader.length;
25 | http://onta-programing.blogspot.com/
} public Object getValueAt(int rowIndex, columnIndex) { return data[rowIndex][columnIndex]; }
int
@Override public String getColumnName(int column) { return kolomHeader[column]; } }
6. Lalu tambahkan variable berikut: public void setKoneksi(Connection koneksi){ this.koneksi = koneksi; try { String sql = "SELECT * FROM sms_masuk"; PreparedStatement prepare koneksi.prepareStatement(sql);
=
ResultSet res = prepare.executeQuery(); res.last(); int n = res.getRow(); Object[][] data = new Object[n][7]; int p = 0; res.beforeFirst(); while (res.next()) { data[p][0] = res.getInt(1); data[p][1] = res.getString(2); data[p][2] = res.getString(3); data[p][3] = res.getString(4); data[p][4] = res.getString(5); data[p][5] = res.getString(6); data[p][6] = res.getDate(7); p++; } TabelModel model = new TabelModel(); model.addData(data); tabelPesan.setModel(model); //modifikasi lebar kolom tabelPesan.getColumnModel().getColumn(0).setPreferredWidth(2 5); tabelPesan.getColumnModel().getColumn(1).setPreferredWidth(2 55); tabelPesan.getColumnModel().getColumn(2).setPreferredWidth(5 5);
26 | http://onta-programing.blogspot.com/
tabelPesan.getColumnModel().getColumn(3).setPreferredWidth(2 55); tabelPesan.getColumnModel().getColumn(4).setPreferredWidth(5 5); tabelPesan.getColumnModel().getColumn(5).setPreferredWidth(5 5); tabelPesan.getColumnModel().getColumn(6).setPreferredWidth(5 5); } catch (SQLException ex) { ex.printStackTrace(); } }
7. Selesai, Error dan penanganannya dibahas pada bagian error dan penanganannya.
Masih tersisa kopinya minum lagi deh hehe. Ok, Sekarang kita akan membuat GUI Utama. 1. Buat sebuah JFrame pada package ovq.smsgateway.ui, kemudian beri nama JFrame tersebut dengan nama SMSGatewayView. 2. Kemudian Drag PanelStatus dan PanelIndikator yang telah kita buat sebelumnya ke JFrame. 3. Jika temen2 mendapatkan pesan seperti ini saat men-drag PanelStatus dan PanelIndikator,
4. Maka Lakukan Compile. Caranya Klik Kanan Pada Project, kemudian pilih Clean and Build
27 | http://onta-programing.blogspot.com/
5. Nah Sekarang Coba lagi lakukan langkah 2.
6. Kemudian
tambahkan
tiga
buah
JButton,
dan
Satu
Buah
JTextArea, untuk membuat lebih enak dilihat, tambahkan pula Sebuah JLabel Sebagai Header. Atur sehingga Frame tampak seperti berikut:
28 | http://onta-programing.blogspot.com/
7. Rubah
Variable
Name
dari
Button
menjadi
buttonStart,
buttonLihatPesan, buttonKeluar, dan JTextArea menjadi logSMS. 8. Kemudian Tambahkan Action Performed pada buttonStart: try{ koneksi = MYSQLConnection.buatKoneksi(); }catch(Exception e){ panelStatus1.setStatusKoneksi( PanelStatus.KONEKSI_ERROR, "Error saat Koneksi ke database"); return; } if(koneksi == null){ return; } SMSReadService smsService = new SMSReadService(koneksi, logArea); smsService.setStatus(status); try { smsService.startService panelIndikator1.setStatus(status); panelStatus1.setStatusKoneksi( PanelStatus.TERSAMBUNG, "Service tersedia"); } catch (Exception ex) { panelStatus1.setStatusKoneksi( PanelStatus.TERSAMBUNG, "Erros saat mulai Service"); }
9. Kemudian Tambahkan Action Performed pada buttonKeluar: System.exit(0);
29 | http://onta-programing.blogspot.com/
10. Kemudian Tambahkan Action Performed pada buttonLihatPesat: if(koneksi == null ){ JOptionPane.showMessageDialog(this, "Start Service terlebih dahulu!!"); return; } DialogPesanMasuk dlgPesan = new DialogPesanMasuk(this, true); dlgPesan.setKoneksi(koneksi); dlgPesan.setVisible(true);
11. Selesai. Error dan penanganannya dibahas pada bagian error dan penanganannya. Sampai tahap ini program kita sudah jadi. Dan kalau tidak ada eeror, maka kita bisa compile dan run.
Screenshoot
Sebelum Service di Start
30 | http://onta-programing.blogspot.com/
Setelah Service di Start
Jika melihat Pesan masuk Namun Service belum dilakukan start
Dialog Pesan Masuk
31 | http://onta-programing.blogspot.com/
Error dan Penanganannya Error yang mungkin terjadi dalam mengikuti turoal ini adalah sebagai berikut: 1. Kalau diikuti dengan baik insya Allah gak ada Error, hehe 2. Kalau Masih ada Error, silahkan Komentar di Blog or do FB. Tanya Jawab Tanya jawabnya di Bolg aja ya ato di FB
----------------------Huhuy kuta sekarang punya aplikasi SMS Gateway Sendiri, Selamat Berjuang, and Keep Moving Forward. Tp Sebelum Ditutup Gak salah Kalo Baca dulu Breaktime nya, hehe
32 | http://onta-programing.blogspot.com/
Breaktime Berikut ini daftar Pay Per Click Artinya Sekali Klik Dapat Uang, Caranya gampang tinggal klik disini http://www.neobux.com/?r=blackonta
Isikan keterangan yang diminta, kemudian Verifikasei keanggotaan temen2. Kemudian Login dan Klik Ads Surf, trus tingal Klik Deh, tunggu 30 dtk dan walahhhhh anda mendapatkan 0.01 Dolar.
Tp kalau nanti temen2 punya referral, dan referalnya itu ngklik iklan, maka temen2 juga dapat bagian, gampangkan??? Sok atuh di klik aja linknya http://www.neobux.com/?r=blackonta
Yang ini juga sama Cuma yang ini versi Indonesia https://www.idr-clickit.com/register.php/blackonta.html
Okede, Caranya sama, klo diminta no rekening bank, isikan aja angka sembarang Ok, sok Diklik Juga yang ini https://www.idrclickit.com/register.php/blackonta.html
33 | http://onta-programing.blogspot.com/
Daftar HP Yang bisa digunakan
Billionton: PCMCIA PCGPRSQ-B. EagleTec: GSM modems. Fargo Maestro 20. ITengo: 3000, WM1080A. Janus: GSM864Q. Nokia: 6070, 6100, 6210, 6310, 6310i, 6230, 6230i, 6681, 8250, 8310, 6610, 6800, 7210, 6810, 7250i, 6103, 6020, 3220, 6822, 5140, 5140i, 30 (terminal). Multitech: Multimodem GPRS (SMSLib for Java can also drive the Multitech Multimodem via its IP port). Sharp: GX30, GX32. Siemens: MC35i, M35, M50, M65, C45, TC35i, C65, M55, TC65t. SIMCOM Ltd: SIMCOM_SIM100S. Sony Ericsson: K300i, SE K800i, K700i, K750i, SE W850i, W880i, GC89, Z550a, W800, W580i, W810, i320, GT48. Ubinetics: GDC201. Wavecom: M1206B, M1306B, WMOD2 Wismo, Fastrack Supreme 10, WISMOQCDMA CDMA. Huawei: E220 (may require the forced setting of SMSC address). Motorola: V3, C380. Teltonika: ModemUSB. Samsung: D520.
34 | http://onta-programing.blogspot.com/