Auditing Sederhana Di simple-jpa


Plugin simple-jpa 0.2.1 memiliki sebuah fitur auditing yang primitif, dimana ia akan mencatat tanggal sebuah domain object dibuat dan diubah.  Setiap domain class yang dipakai oleh simple-jpa secara otomatis akan memiliki createdDate dan modifiedDate dengan tipe data DateTime.  Hal ini setara dengan mendefinisikan:

@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
DateTime createdDate

@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
DateTime modifiedDate

Secara default, kedua nilai tersebut tidak akan ditampilkan di form oleh perintah generate-all. Tetapi kamu bisa menampilkannya dengan mudah bila diinginkan.

Sebagai latihan, kamu akan melanjutkan dari apa yang telah dibuat di-post sebelumnya.   Karena pusat komunikasi adalah model, maka kamu akan mulai dengan menambah 2 variabel baru di model.  Ubah file StokModel.groovy sehingga terlihat seperti berikut ini:

class StokModel {
   ...
   @Bindable String createdDate
   @Bindable String modifiedDate
   ...
   public StokModel() {
      stokSelection.valueChanged = { ListSelectionEvent event ->
         if (stokSelection.isSelectionEmpty()) {
            ...
         } else {
            Stok selected = stokSelection.selected[0]
            selected = controller.findStokById(selected.id)
            ...
            createdDate = selected.createdDate?.toString('dd/MM/yyyy HH:mm')
            modifiedDate = selected.modifiedDate?.toString('dd/MM/yyyy HH:mm')
         }
      }
   } 

   def clear = {
      ...
      createdDate = null
      modifiedDate = null
   }
}

Tidak perlu ada yang diubah di controller karena nilai createdDate dan modifiedDate akan di-isi secara otomatis.

Dengan demikian, sebagai langkah terakhir, kamu perlu mengubah StokView.groovy sehingga terlihat seperti berikut ini:

application(...) {
  panel(id: 'mainPanel') {
     ...
     panel(constraints: PAGE_START) {
        ...
     }

     panel(constraints: CENTER) {
        ...
     }

     panel(id: "form", ...) {
        ...
        label('Jumlah:')
        textField(id: 'jumlah', ...)
        errorLabel(path: 'jumlah', ...)

        label('Created Date:')
        label(text: bind('createdDate', source: model), constraints: 'wrap')

        label('Modified Date:')
        label(text: bind('modifiedDate', source: model), constraints: 'wrap')
        ...

     } 
  }
}

Sekarang, bila saya menjalankan program dan menyimpan data, saya dapat melihat createdDate dan modifiedDate (masih kosong) seperti pada gambar berikut ini:

Tampilan Created Date dan Modified Date

Tampilan Created Date dan Modified Date Setelah Penyimpanan

Begitu saya melakukan proses update, saya dapat melihat createdDate dan modifiedDate seperti pada gambar berikut ini:

Tampilan Created Date dan Modified Date Setelah Proses Update

Tampilan Created Date dan Modified Date Setelah Proses Update

Satu hal yang cukup mengganggu setelah objek pertama kali disimpan, modifiedDate tetap akan ditampilkan walauupn masih kosong.  Kamu dapat mengubah view agar hanya menampilkan createdDate dan modifiedDate bila hanya terdapat nilainya dengan mengubah file StokView.groovy pada definisi createdDate dan modifiedDate menjadi seperti berikut ini:

label('Created Date:', visible: bind {model.createdDate!=null?true:false}, 
   constraints: 'hidemode 1')
label(text: bind('createdDate', source: model), visible: bind {model.createdDate!=null?true:false}, 
   constraints: 'hidemode 1, wrap')

label('Modified Date:', visible: bind {model.modifiedDate!=null?true:false}, 
   constraints: 'hidemode 1')
label(text: bind('modifiedDate', source: model), visible: bind {model.modifiedDate!=null?true:false}, 
   constraints: 'hidemode 1, wrap')

Pada kode program di atas, kamu melakukan binding property visible dengan sebuah ekspresi, dimana setiap kali nilai createdDate atau modifiedDate berubah, nilainya akan dievaluasi terhadap ekspresi ini. Bila nilai tersebut null akan menyebabkan visible bernilai false, sebaliknya bila nilai tersebut bukan null maka akan menyebabkan visible bernilai true.

Selain itu, kamu juga menambahkan constraint hidemode 1 pada MigLayout sehingga pada saat komponen disembunyikan (visible=false), maka ruang kosong milik komponen juga ikut hilang.

Sekarang, bila kamu menyimpan sebuah objek untuk pertama kalinya lalu melihat informasi objek tersebut, modifiedDate tidak akan ditampilkan (karena nilainya masih null), seperti yang terlihat pada gambar berikut ini:

Tampilan Modified Date Tidak Akan Muncul Bila Nilainya Null

Tampilan Modified Date Tidak Akan Muncul Bila Nilainya Null

Perihal Solid Snake
I'm nothing...

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: