Friday, March 19, 2010

Kelas sederhana untuk mendukung operasi RMS di Java Micro Edition

Kelas sederhana untuk mendukung operasi RMS di Java Micro Edition
RMS adalah sebuah API dimana program dapat menyimpan data-data aplikasi secara lokal didalam device tersebut. MIDP Record Management System adalah sebuah fasilitas yang dimiliki oleh MIDlets untuk menyimpan data-data aplikasi pada saat MIDlet invocations. Data akan disimpan dalam non-volatile memory didalam device. Hal ini berarti, data-data program yang telah disimpan tidak akan hilang walaupun program di restart maupun device dimatikan.
Tutorial RMS di Java Micro Edition dengan kelas Rs.java
1. Buat project Mobile Application di Netbeans anda
2. Beri nama Example Rs, hilangkan tanda check pada Create Hello Midlet kemudian Finish


3. Buatlah 1 buah paket dengan nama example
4. Buatlah 1 buah kelas di paket example dengan nama Main yang merupakan turunan midlet


package example;

import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

/**
*
* @author Ratno Kustiawan
*/
public class Main extends MIDlet{

protected void startApp() throws MIDletStateChangeException {
}

protected void pauseApp() {
}

protected void destroyApp(boolean bln) throws MIDletStateChangeException {
}

}

5. Buatlah 1 buah kelas di paket example dengan nama FormData yang merupakan turunan Form

package example;

import javax.microedition.lcdui.Form;

/**
*
* @author Ratno Kustiawan
*/
public class FormData extends Form{

public FormData() {
super("Form Data");
}

}

6. Deklarasikan object display dengan type Display

public class Main extends MIDlet {

private Display display;

protected void startApp() throws MIDletStateChangeException {

7. Inisialisasi object display pada method start dengan memanggil static method dari kelas Display, panggil static method yang bernama getDisplay, isi parameter dengan this, untuk menunjukkan midlet yang dituju. Kemudian panggil method setCurrent dari object display untuk menunjukkan tampilan yang akan ditampilkan, yaitu tampilan FormData.

protected void startApp() throws MIDletStateChangeException {
display = Display.getDisplay(this);
display.setCurrent(new FormData());
}

8. Tambahkan 1 buah variabel static pada kelas main dan getternya

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package example;

import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

/**
*
* @author Ratno Kustiawan
*/
public class Main extends MIDlet {

private Display display;
private static Main main;

public static Main getMain() {
return main;
}

protected void startApp() throws MIDletStateChangeException {
display = Display.getDisplay(this);
display.setCurrent(new FormData());
main = this;
}

protected void pauseApp() {
}

protected void destroyApp(boolean bln) throws MIDletStateChangeException {
}
}

9. Tambahkan 2 buah textfield dan 2 buat command pada form anda, textfield nantinya akan digunakan untuk menuliskan dan menampilkan nama serta alamat, kemudian 2 buah command akan digunakan untuk menyimpan data ke RMS dan keluar dari aplikasi

package example;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;

/**
*
* @author Ratno Kustiawan
*/
public class FormData extends Form {

private TextField txtNama, txtAlamat;
private Command cmdSimpan,cmdKeluar;

public FormData() {
super("Form Data");
txtNama = new TextField("Nama", "", 100, TextField.ANY);
append(txtNama);
txtAlamat = new TextField("Alamat", "", 100, TextField.ANY);
append(txtAlamat);
cmdSimpan = new Command("Simpan", Command.OK, 1);
addCommand(cmdSimpan);
cmdKeluar=new Command("Keluar", Command.EXIT, 2);
addCommand(cmdKeluar);
}
}

10. Atur agar Main.java menjadi midlet yang akan dijalankan pertama kali, klik kanan project, buka properties, pilih Application Descriptor kemudian pilih tab Midlets

11. Tekan Add kemudian cari example.Main lalu OK

12. Coba anda jalankan

13. Tambahkan CommandListener untuk menangkap aksi ketika command ditekan, implementasikan CommandListener pada kelas FormData

public class FormData extends Form implements CommandListener{

private TextField txtNama, txtAlamat;
private Command cmdSimpan,cmdKeluar;

public FormData() {
super("Form Data");
txtNama = new TextField("Nama", "", 100, TextField.ANY);
append(txtNama);
txtAlamat = new TextField("Alamat", "", 100, TextField.ANY);
append(txtAlamat);
cmdSimpan = new Command("Simpan", Command.OK, 1);
addCommand(cmdSimpan);
cmdKeluar=new Command("Keluar", Command.EXIT, 2);
addCommand(cmdKeluar);
}

public void commandAction(Command c, Displayable d) {
}
}

14. Buatlah sebuah kelas dengan nama Rs.java, kelas ini baru mendukung operasi add dan update 1 kolom, silahkan anda kembangkan lebih lanjut, tuliskan kode program berikut

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package example;

import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;

/**
*
* @author Ratno Kustiawan
*/
public class Rs {

public static Rs record;
private Rs(){}
public static void Connect() {
try {
if (record == null) {
record = new Rs();
record.Open();
}
} catch (RecordStoreException ex) {
}
}
private volatile RecordStore database = null;

private void Open() throws RecordStoreException {
database = RecordStore.openRecordStore("setting", true);
}

public void Close() {
try {
if (database.getNumRecords() == 0) {
String fileName = database.getName();
database.closeRecordStore();
RecordStore.deleteRecordStore(fileName);
} else {
database.closeRecordStore();
}
} catch (RecordStoreException ex) {
}
}

public boolean Add(String record) {
try {
if (database.getNumRecords() == 0) {
int id = database.addRecord(record.getBytes(), 0, record.getBytes().length);
} else {
Update(record, 1);
}
return true;
} catch (RecordStoreException ex) {
return false;
}
}

public boolean Update(String record, int id) {
try {

database.setRecord(id, record.getBytes(), 0, record.getBytes().length);
return true;
} catch (RecordStoreException ex) {
return false;
}
}

public String Get(int id) {
try {
return new String(database.getRecord(id));
} catch (RecordStoreException ex) {
return null;
}
}
}

15. Panggil method setCommandListener pada konstruktor FormData

public class FormData extends Form implements CommandListener{

private TextField txtNama, txtAlamat;
private Command cmdSimpan,cmdKeluar;

public FormData() {
super("Form Data");
txtNama = new TextField("Nama", "", 100, TextField.ANY);
append(txtNama);
txtAlamat = new TextField("Alamat", "", 100, TextField.ANY);
append(txtAlamat);
cmdSimpan = new Command("Simpan", Command.OK, 1);
addCommand(cmdSimpan);
cmdKeluar=new Command("Keluar", Command.EXIT, 2);
addCommand(cmdKeluar);

setCommandListener(this);
}

16. pada method CommandAction tambahkan kode program untuk menyimpan ke RMS dan keluar dari aplikasi

public void commandAction(Command c, Displayable d) {
if (c.equals(cmdSimpan)) {
Rs.record.Add(txtNama.getString() + "|" + txtAlamat.getString());
} else if (c.equals(cmdKeluar)) {
Main.getMain().notifyDestroyed();
}
}

17. Tambahkan kode program berikut di Konstruktor FormData

String data = Rs.record.Get(1);
if (data == null) {
return;
}
txtNama.setString(data.substring(0, data.indexOf("|")));
txtAlamat.setString(data.substring(data.indexOf("|1") + 2));

18. Agar tidak bingung berikut listing kode program FormData.java

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package example;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;

/**
*
* @author Ratno Kustiawan
*/
public class FormData extends Form implements CommandListener {

private TextField txtNama, txtAlamat;
private Command cmdSimpan, cmdKeluar;

public FormData() {
super("Form Data");
txtNama = new TextField("Nama", "", 100, TextField.ANY);
append(txtNama);
txtAlamat = new TextField("Alamat", "", 100, TextField.ANY);
append(txtAlamat);
cmdSimpan = new Command("Simpan", Command.OK, 1);
addCommand(cmdSimpan);
cmdKeluar = new Command("Keluar", Command.EXIT, 2);
addCommand(cmdKeluar);
setCommandListener(this);
Rs.Connect();

String data = Rs.record.Get(1);
if (data == null) {
return;
}
txtNama.setString(data.substring(0, data.indexOf("|")));
txtAlamat.setString(data.substring(data.indexOf("|") + 1));
}

public void commandAction(Command c, Displayable d) {
if (c.equals(cmdSimpan)) {
Rs.record.Add(txtNama.getString() + "|" + txtAlamat.getString());
} else if (c.equals(cmdKeluar)) {
Main.getMain().notifyDestroyed();
}
}
}

Read More......

Tuesday, November 11, 2008

Explorer Your Dll

String path=openFileDialog1.FileName;
System.Reflection.Assembly a = System.Reflection.Assembly.LoadFrom(@path);
Type[] arrT = a.GetTypes();
listBox1.Items.Clear();
foreach (Type t in arrT)
{
listBox1.Items.Add("Namespace = " + t.Namespace);
listBox1.Items.Add("Class names = " + t.Name);


System.Reflection.MethodInfo[] arrMI = t.GetMethods();

System.Reflection.FieldInfo[] arrFi = t.GetFields();
System.Reflection.ConstructorInfo[] arrCi = t.GetConstructors();
foreach (System.Reflection.ConstructorInfo ci in arrCi)
{
listBox1.Items.Add("Contructor = " + ci.Name);
System.Reflection.ParameterInfo[] arrPI = ci.GetParameters();
foreach (System.Reflection.ParameterInfo pi in arrPI)
{
listBox1.Items.Add("Parameter = " + pi.Name);
}
}
foreach (System.Reflection.FieldInfo fi in arrFi)
{
listBox1.Items.Add("Field = " + fi.Name);
}
foreach (System.Reflection.MethodInfo mi in arrMI)
{
listBox1.Items.Add("Method = " + mi.Name);
System.Reflection.ParameterInfo[] arrPif = mi.GetParameters();

foreach (System.Reflection.ParameterInfo pif in arrPif)
{
listBox1.Items.Add("Parameter Name = " + pif.Name);
listBox1.Items.Add("Parameter DataType = " + pif.ParameterType.Name); 

}
}

}

Read More......

How to invoke your Dll using relative path

public Form1()
{
InitializeComponent();
Assembly a = Assembly.LoadFile(@"F:\by Ratno\Final Skripsi\UML Studio Project\NeutralNotation\bin\Debug\NeutralNotation.dll");
Module m = a.GetModule("NeutralNotation.dll");
Type typen = null;
foreach (Type t in m.GetTypes())
{
if (t.Name.Trim().Equals("Neutral"))
{
typen = t;
}
}

ConstructorInfo[] ci;
ci = typen.GetConstructors();
d=(AbstractDiagram.IDiagram) ci[0].Invoke(null);
toolStrip1.Items.AddRange(d.GetNotationCollection()); 

}

Read More......

Assembly Explorer

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;


namespace Engine.Asm
{
/// 


/// Class ini digunakan untuk melakukan penjelajahan ke
/// dalam dll
/// 

public class AssemblyExplorer
{

private string path;
private List lstBaseName;
protected Assembly asm;
protected Type[] arrType;

public string getName()
{
return asm.ManifestModule.Name;
}
/// 
/// Buat instant baru dari class AssemblyExplorer
/// 

/// path lokasi dll yang akan diload
public AssemblyExplorer(string path)
{
try
{
this.path = path;
asm = Assembly.LoadFile(path);
////System.Windows.Forms.MessageBox.Show(asm.ManifestModule.Name);
arrType = asm.GetTypes();
lstBaseName = new List();
foreach (Type t in arrType)

if (!lstBaseName.Contains(t.BaseType.Name))
lstBaseName.Add(t.BaseType.Name);
}
}
catch (ReflectionTypeLoadException e)
{
System.Windows.Forms.MessageBox.Show(e.Message,e.GetType().Name);
}
catch (BadImageFormatException e)
{
System.Windows.Forms.MessageBox.Show(e.Message, e.GetType().Name);
}
catch (NullReferenceException e)
{
System.Windows.Forms.MessageBox.Show(e.Message, e.GetType().Name);
}
}

/// 
/// Ambil daftar kelas induk dari semua kelas
/// yang terdapat pada dll ini
/// 

/// daftar kelas induk
public List getListBaseName()
{
return lstBaseName;
}

/// 
/// Cek, apakah suatu dll memiliki kelas 
/// yang memiliki suatu kelas induk
/// 

/// nama kelas induk
/// true bila memiliki dan false bila tidak 
/// memiliki

public bool containtBaseClass(string baseClass)
{
if (lstBaseName == null)
return false;
foreach (string s in lstBaseName)
{
if (s.Trim().Equals(baseClass))
return true;
}
return false;
}

/// 
/// Ambil suatu class berdasar nama
/// 

/// nama kelas yang dicari
/// null bila tidak ditemukan, 
/// atau mengembalikan kelas 
/// bila ditemukan

public Type getClass(string ClassName)
{
if (arrType == null)
return null;
foreach (Type t in arrType)
{
if (t.Name.Equals(ClassName))
return t;
}
return null;
}

~AssemblyExplorer()
{
path = null;
asm = null;
lstBaseName = null;
arrType = null;
}


}
}

Read More......