Menyimpan Username & Password di Option Panel

Kemarin udah ngebahas tentang form login yang muncul sebelum aplikasi dijalanin kan yah… Tapi username sama passwordnya kesimpan di sistem. Sebenernya, kamu bisa ubah2 supaya uname ma passwordnya kesimpen di database. Tapi, kalo kamu gak niat bikin aplikasi yang pake database, uname ma passwordnya, bisa kamu simpan di variable global. Yang pake NbPreferences gitu… Dan biasanya kalo gak pake bantuan Wizard, pake bantuan dari Option Panel.

Tapi berhubung adanya tutorial buat nyimpen dari Option Panel, kita ngikutin ajah yah…

Uhmmm… sebelum ngikutin tutorial ini, pastiin ikutin tutorial sebelumnya yah… Kan nyambung ceritanya.

Pertama, dari NPA sebelumnya, kita buat satu module buat nampung Option Panel. Sebenernya boleh aja kalo mau gabung sama module “LoginModule” sebelumnya, tapi gw pisah… biar mirip sama tutorialnya 😀 Jadi… bikin satu module baru lagi, infonya gini:

1. Identitas Module2. Code Name Base Module

Di module “Pengguna”, buat satu option panel. Klik kanan di module, pilih New →  Other. Muncul 1 window baru, di sebelah kiri pilih “Module Development”, di bagian kanan pilih “Options Panel”.

3. New Option Panel

Bikin Primary Panel ajah kita. Gak usah ada secondary panel-nya… Untuk icon, kalo gak punya, pake ini ajah… User-icon Bukan punya gw jugak c sebenernya… ngambil secara semena-mena dari internet itu… :p

4. Primary Panel

5. Option Panel Name

Klik “Finish”. Perhatikan, ada 3 file kebentuk… Cuma yang kebaca 2 ajah (ekstensi java ajah yang bakal muncul). Yang satu (ManajemenPenggunaOptionsPanelController) buat controller, yang satu lagi (ManajemenPenggunaPanel) buat desain tampilannya.

Di bagian pengaturan tampilan, atur tampilannya jadi kayak gini:

6. Desain Option Panel

Ada 2 label, 1 text field di sebelah “Pengguna” dengan nama variable “username”, 1 text field bernama “password” di sebelah “Kata Sandi”. Dan layoutnya pake Flow Layout.

Kondisi yang kita mau, tiap nutup panel itu, perubahan disimpan, dan tiap dibuka, pengguna ama kata sandi-nya muncul. Artinya, kita bakal kerja dengan method “load” dan “store”. Method ini ada di kelas “ManajemenPenggunaPanel”. Kalo kamu Cuma liat bagian design, coba ubah ke bagian Source. Ntar keliatan tuh yang begituan.

7. Source-Design

8. Method Load-Store

 Kalo load dijalanin pas option panel dibuka, store dijalanin pas ditutup. Sekarang, gw c mau bikin buat “store” dulu. Jadi, kalo mau nyimpen variable, bisa pake kode gini kan yah:

NbPreferences.forModule(REFERENSI_KELAS_YG_DIGUNAKAN).put
     ("NAMA_VAR_YG_DIMAU", "TEXT");

Tinggal diganti nama variable yang diinginkan, terus ganti text sesuai isi yang disimpan. Jadi kalo mau username disimpan di variable bernama “nama” dan isinya “arby”, terus referensi kelasnya itu c option panel tadi, kode di atas bisa diganti jadi:

NbPreferences.forModule(ManajemenPenggunaPanel.class).
     put("nama", "arby");

Dan kode di atas, gak ada hubungannya sama nama variable text field atau apapun yang sebelumnya udah kita buat. Hubungannya, isi dari variable itu kan seharusnya dari text field yang udah kita buat sebelumnya, jadi musti kita ganti pake:

 NbPreferences.forModule(ManajemenPenggunaPanel.class).put
      ("nama", username.getText());

Kalo “nama” di atas, gak usah diganti… itu jadi nama variable global kalo mau ngakses username. Kalo kamu mau ganti yaaa silakan. Tapi kamu musti tau, referensi rujukan variable global-nya jadi berubah. Kalo yang di-store udah selesai diubek2, selanjutnya di method load yang diubah2… Di method ini, kita ubah kode sebelumnya, dari “put” jadi “get”.

NbPreferences.forModule(ManajemenPenggunaPanel.class).get("nama", "")

Kalo kamu liat, isinya jugak ada 2, “nama” dan string kosong. Untuk “nama”, ini merupakan referensi global yang udah kita tentuin tadi. Untuk store ama load, ini harus sesuai. Sedangkan string kosong, itu merupakan default yang dikirimkan kalo si variable global “nama” itu gak ditemuin ama sistem.

Singkat cerita, isi dari method store sama load itu bisa dibikin kayak gini:

    void load() {
        NbPreferences.forModule(ManajemenPenggunaPanel.class).get("nama", "");
        NbPreferences.forModule(ManajemenPenggunaPanel.class).get("sandi", "");
    }

    void store() {
        NbPreferences.forModule(ManajemenPenggunaPanel.class).put("nama", username.getText());
        NbPreferences.forModule(ManajemenPenggunaPanel.class).put("sandi", password.getText());
    }

Dan jangan lupa buat meng-import package terkait:

import org.openide.util.NbPreferences;

Udah?? Coba dijalanin…

Di bagian Tools → Option, ada satu menu “Manajemen Pengguna”. Di sana ada 2 buah text field gini. Dan itu bisa diisi sesukanya…

9. Hasil

Tekan OK, terus tutup aplikasi NPA-nya. Aplikasi lhoh ya… Bukan sekedar Option Panel-nya. Jalanin lagi, lihat di bagian “Manajemen Pengguna”, isi dari “Pengguna” dan “Kata Sandi” bakal tetap ada. Tapi kamu heran… coz yang kamu temuin adalah field kosong… Padahal udah ngikutin langkah2 yang gw tulis dengan baik dan benar.

Oke, kamu gak usah pusing, coz variable itu tetap ada isinya. Cuma emang gak nampil. Itu ajah… Kalo kamu isinya tampil, kamu musti ubah dikit kodingan di method load jadi gini:

    void load() {
        String nama = NbPreferences.forModule(ManajemenPenggunaPanel.class).get("nama", "");
        String sandi = NbPreferences.forModule(ManajemenPenggunaPanel.class).get("sandi", "");
        
        username.setText(nama);
        password.setText(sandi);
    }

Jalanin lagi deh.. Ntar text di sebelah “Pengguna” sama “Kata Sandi” bakal ada isinya…

Oke… Tapi isi yang kesimpen di option panel ini belum ada hubungannya sama modul login. Jadi… kita ubah codingan di modul “LoginModule”. Karena kemarin dibikin bagian pengecekan username sama sandi ada di method “authenticate” dari class Installer, jadi kita liat lagi method tersebut.

    private void authenticate(){
        String uname = lf.getUsername();
        char[] pwd = lf.getPass();
        if(uname.equals("Arby")){
           if(cekPwd(pwd)){
               
           }else{
               exit();
           }
        }else{
            exit();
        }
        
    }
    
    private boolean cekPwd(char[] input){
        boolean benar;
        char[] pass = {'p','e','s','a','n'};
        if(input.length != pass.length){
            benar = false;
        }else{
            benar = Arrays.equals(pass, input);
        }
        Arrays.fill(pass,'0');
        return benar;
    }

Bagian krusial ada di bagian warna merah. Kalo yang warna biru, itu method yang dipanggil sama baris kode warna merah kedua.

Di bagian merah pertama, ada pengecekan username. Dibandingin sama kata “Arby”. Karena kita udah punya pembanding lain, yaitu variable global yang kita simpen di kelas referensi “ManajemenPenggunaPanel” dengan nama “nama”. Sayangnya, “Installer” sama “ManajemenPenggunaPanel” ada di 2 module yang berbeda. Mereka harus dihubungin satu sama lain. Biar terhubung, ada yang nge-publish isinya, ada yang make isi module yang di-publish itu. Dan kalo kita liat lagi, module “Pengguna” yang ada kelas “ManajemenPenggunaPanel” ini lebih bersifat publisher, dan module “LoginModule” yang ada “Installer” cocok buat jadi pengguna sesuatu yang di-publish.

Jadi, klik kanan di module “Pengguna”. Pilih “Properties”, pilih API Versioning, dan centang di bagian “Public Packages”. Tekan OK.

10. Public Package Option Panel

Abis itu, klik kanan di bagian module “LoginModule”, Pilih Bagian “Libraries”. Di tab “Module Dependencies”, pilih “Add Dependency” (Langkah ini bisa kamu lakukan di bagian “Libraries” dari module di window tree project).

11. Module Dependency

Pilih module “Pengguna” dan tekan OK.

12. Dependency Pengguna

12. Dependency Pengguna-2

Kalo udah kayak di atas Module Dependencies dari LoginModule, artinya mereka udah saling mengenal. Yang LoginModule bisa pake module Pengguna. Tapi ada satu masalah lagi… class “ManajemenPenggunaPanel” gak bersifat public. Jadi class itu gak mungkin digunain di luar package terkait. Solusinya, tambahin keyword “public” pas ngedeklarasiin class “ManajemenPenggunaPanel”.

public final class ManajemenPenggunaPanel extends javax.swing.JPanel {

Kalo udah gini…. di method authenticate, bisa diubah jadi:

    private void authenticate(){
        String sNama = NbPreferences.forModule(ManajemenPenggunaPanel.class).get("nama","");
        String uname = lf.getUsername();
        char[] pwd = lf.getPass();
        if(uname.equals(sNama)){
           if(cekPwd(pwd)){
               
           }else{
               exit();
           }
        }else{
            exit();
        }
        
    }

Lihat kan??! Logikanya gampang… Ambil variable global yang udah tersimpan, cek username inputan user sama username dari variable global. Coba jalanin deh… Pasti kalo kamu masukin kayak gambar di bawah, aplikasinya gak bakal jalan.

13. Hasil Akhir

Karena username-nya udah berubah… Jadi “system”… sesuai yang diinput di option panel sebelumnya. Username udah berubah, berikutnya password. Pengecekan password, ada di method “cekPwd”. Jadi oprek2 ajah method itu. Gw ubah method nya jadi kayak gini:

    private boolean cekPwd(char[] input){
        boolean benar;
        String pwd = NbPreferences.forModule(ManajemenPenggunaPanel.class).get("sandi", "");
        char[] pass = pwd.toCharArray();
        if(input.length != pass.length){
            benar = false;
        }else{
            benar = Arrays.equals(pass, input);
        }
        Arrays.fill(pass,'0');
        return benar;
    }

Coba jalanin lagi… Pasti password yang benar udah bukan “pesan” lagi, tapi “arby”. Sesuai yang tersimpan di variable global.

Selesaaaaaiii~~~~

Valid: Hu um….
Kadaluarsa: Cuma dibuktiin buat netbeans 8.0
Sumber: Link di atas + dok. pribadi

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s