/*
Logging class
*
* Improtent variables:
* numOfRecords2keep => limits the stored logs (first in first out
* loglevel => Defines which logs should be stored (0 - 4)
* 0 = All
* 1 = Debug
* 2 = Info
* 3 = Severe
* 4 = Logging off
*/
package org.oobd.mobile;
import javax.microedition.lcdui.ChoiceGroup;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
/**
*
* @author madley
*/
public class MobileLogger extends Form implements CommandListener{
private RecordStore rs;
private String recordStoreName="Logging";
private int numOfRecords2keep=40;
private int thisID=0;
private int loglevel=4;
private final int loglevelKey=4;
private RecordEnumeration re;
private Command backCmd;
private Command clearCmd;
private Command sendCmd;
private Command levelCmd;
private Command okCmd;
private Form parent;
private Form levelForm;
private ChoiceGroup level;
private OOBD_MEv2 mainMidlet;
private String xtendedMessage;
private String completeMessage;
public MobileLogger(OOBD_MEv2 mainMidlet) {
super("Logger");
this.mainMidlet = mainMidlet;
try {
rs = RecordStore.openRecordStore(recordStoreName, true);
cleanup();
} catch (RecordStoreException ex) {
ex.printStackTrace();
}
backCmd = new Command("Back", Command.BACK, 1);
clearCmd = new Command("Clear Logs",Command.OK,0);
sendCmd = new Command("Send Logs", Command.HELP,2);
levelCmd = new Command("Set Level",Command.HELP,3);
okCmd = new Command("OK",Command.OK,0);
this.addCommand(backCmd);
this.addCommand(clearCmd);
this.addCommand(sendCmd);
this.addCommand(levelCmd);
this.setCommandListener(this);
}
public void showlogs(OOBD_MEv2 mainMidlet){
this.deleteAll();
completeMessage = "";
String[] logs=getLogs();
int x = logs.length;
// System.out.println(x);
for (int i = 0; i < x; i++) {
// System.out.println(i + " = "+logs[i]);
this.append(logs[i]);
completeMessage = completeMessage + logs[i];
}
mainMidlet.getDisplay().setCurrent(this);
}
// public void log(String message){
//
// try {
// thisID=rs.getNextRecordID()-1;
// xtendedMessage=thisID+": "+message+"\n";
// System.out.println("LOG: "+xtendedMessage);
// byte[] byteMessage = xtendedMessage.getBytes();
// rs.addRecord(byteMessage, 0, byteMessage.length);
// } catch (RecordStoreException ex) {
// ex.printStackTrace();
// }
// }
public void log(int level,String message){
if (level>=loglevel){
try {
thisID=rs.getNextRecordID()-1;
xtendedMessage=thisID+": "+message+"\n";
System.out.println("LOG: "+xtendedMessage);
byte[] byteMessage = xtendedMessage.getBytes();
rs.addRecord(byteMessage, 0, byteMessage.length);
} catch (RecordStoreException ex) {
ex.printStackTrace();
}
}
}
public String[] getLogs(){
try {
int numOfRecords = rs.getNumRecords();
System.out.println("Number of Records: "+numOfRecords);
String[] logs = new String[numOfRecords];
int counter=0;
re = rs.enumerateRecords(null, null, false);
while (re.hasNextElement()&counter<numOfRecords){
logs[counter]=new String(re.nextRecord());
counter++;
}
return logs;
} catch (RecordStoreException ex) {
ex.printStackTrace();
}
return null;
}
public void setLoglevel(int loglevel) {
this.loglevel = loglevel;
}
public void cleanup(){
try {
if (rs.getNumRecords() > numOfRecords2keep) {
int recordcount = rs.getNumRecords();
int nextrecord = rs.getNextRecordID();
for (int i = nextrecord-recordcount; i < nextrecord-numOfRecords2keep; i++) {
rs.deleteRecord(i);
}
}
} catch (RecordStoreException ex) {
ex.printStackTrace();
}
}
public void commandAction(Command c, Displayable d) {
if (c == backCmd){
if (d==this){
mainMidlet.showMain();
} else if (d==levelForm){
loglevel=level.getSelectedIndex();
mainMidlet.storePref(loglevelKey, String.valueOf(loglevel));
mainMidlet.display.setCurrent(this);
}
} else if (c==clearCmd){
try {
rs.closeRecordStore();
rs.deleteRecordStore(recordStoreName);
rs= RecordStore.openRecordStore(recordStoreName, true);
showlogs(mainMidlet);
} catch (RecordStoreException ex) {
this.log(3,ex.toString());
}
} else if (c==sendCmd){
SendMMS mms = new SendMMS(completeMessage, this, mainMidlet);
// mainMidlet.getDisplay().setCurrent(mms);
} else if (c==levelCmd){
levelForm = new Form("Choose log-level configuration");
// TextField info = new TextField("Choose log-level", "from: \t 0 = All\n\t 5 = Severe\nto:\t6 = Logging off", 100, TextField.UNEDITABLE);
level = new ChoiceGroup("Choose log-level:", ChoiceGroup.EXCLUSIVE);
level.append("All", null);
level.append("Debug", null);
level.append("Info", null);
level.append("Severe", null);
level.append("Logging off", null);
levelForm.addCommand(okCmd);
levelForm.addCommand(backCmd);
levelForm.setCommandListener(this);
levelForm.append(level);
mainMidlet.display.setCurrent(levelForm);
}
}
}