/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package EMIDA.db;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import javax.microedition.rms.RecordComparator;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordFilter;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreNotFoundException;
import javax.microedition.rms.RecordStoreNotOpenException;
/**
*
* @author nmartinez
*/
public class RecordStoreImpl {
private RecordStore recordStore = null;
private RecordFilter filter = null;
private RecordComparator comparator = null;
/***
*
* @param _storeName
*/
public RecordStoreImpl(String _storeName) {
try {
recordStore = RecordStore.openRecordStore(_storeName, true);
} catch (RecordStoreNotFoundException rsnfe) {
rsnfe.printStackTrace();
} catch (RecordStoreException rse) {
rse.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}
/***
*
* @param _recordType
* @param _value
* @return
*/
public int addRecord(String _recordType, String _value) {
int result = 1;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream outputStream = new DataOutputStream(baos);
try {
// Push the record type.
outputStream.writeUTF(_recordType);
// Then push the value.
outputStream.writeUTF(_value);
} catch (IOException ioe) {
ioe.printStackTrace();
result = 0;
}
// Extract the byte array
byte[] b = baos.toByteArray();
// Add it to the record store
try {
recordStore.addRecord(b, 0, b.length);
} catch (RecordStoreException rse) {
rse.printStackTrace();
result = 0;
}
return result;
}
/***
*
* @param _recordType
* @return
*/
public String getRecord(String _recordType) {
//logger.debug("getRecord begins");
String s_retValue = null;
try {
filter = new Filter(_recordType, _recordType);
comparator = new Comparator();
RecordEnumeration re = recordStore.enumerateRecords(filter, comparator, true);
s_retValue = getRecordHelper(re);
} catch (RecordStoreException rse) {
rse.printStackTrace();
}
//logger.debug("getRecord ends");
return s_retValue;
}
/***
*
* @param _enumeration
* @return
*/
public String getRecordHelper(RecordEnumeration _enumeration) {
//logger.debug("getRecordHelper begins");
String s_recordValue = null;
String s_recordType = null;
try {
while (_enumeration.hasNextElement()) {
int id = _enumeration.nextRecordId();
ByteArrayInputStream bais = new ByteArrayInputStream(recordStore.getRecord(id));
DataInputStream inputStream = new DataInputStream(bais);
try {
s_recordType = inputStream.readUTF();
s_recordValue = inputStream.readUTF();
} catch (EOFException eofe) {
eofe.printStackTrace();
}
}
} catch (RecordStoreException rse) {
rse.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
//logger.debug("getRecordHelper ends");
return s_recordValue;
}
/***
*
* @return
*/
public String[] getAllRecords() {
//logger.debug("getAllRecords begins");
String[] records = null;
try {
int numRecords = recordStore.getNumRecords();
records = new String[numRecords];
filter = null;
comparator = null;
RecordEnumeration re_enum = recordStore.enumerateRecords(filter, comparator, true);
int i = 0;
while (re_enum.hasNextElement()) {
int id = re_enum.nextRecordId();
ByteArrayInputStream bais = new ByteArrayInputStream(recordStore.getRecord(id));
DataInputStream inputStream = new DataInputStream(bais);
try {
String s_propID = inputStream.readUTF();
String s_propvalue = inputStream.readUTF();
records[i] = s_propvalue;
i++;
} catch (IOException ex) {
ex.printStackTrace();
}
}
} catch (RecordStoreNotOpenException rsnoe) {
rsnoe.printStackTrace();
} catch (RecordStoreException rse) {
rse.printStackTrace();
}
//logger.debug("getAllRecords ends");
return records;
}
/***
*
* @param _recordType
* @param _value
* @return
*/
public int setRecord(String _recordType, String _value) {
int result = 1;
//logger.debug("setRecord begins");
try {
filter = new Filter(_recordType, _recordType);
comparator = new Comparator();
RecordEnumeration re = recordStore.enumerateRecords(filter, comparator, true);
while (re.hasNextElement()) {
int id = re.nextRecordId();
// Delete the old record.
recordStore.deleteRecord(id);
}
addRecord(_recordType, _value);
} catch (RecordStoreException rse) {
rse.printStackTrace();
result = 0;
}
//logger.debug("setRecord ends");
return result;
}
/***
*
*/
public void printAllRecords() {
//logger.debug("printAllRecords begins");
try {
filter = null;
comparator = null;
RecordEnumeration re_enum = recordStore.enumerateRecords(filter, comparator, true);
while (re_enum.hasNextElement()) {
int id = re_enum.nextRecordId();
ByteArrayInputStream bais = new ByteArrayInputStream(recordStore.getRecord(id));
DataInputStream inputStream = new DataInputStream(bais);
try {
String s_propID = inputStream.readUTF();
String s_propvalue = inputStream.readUTF();
//logger.debug("Record " + id + ": " + s_propID + " : " + s_propvalue);
} catch (IOException ex) {
ex.printStackTrace();
}
}
} catch (RecordStoreNotOpenException rsnoe) {
rsnoe.printStackTrace();
} catch (RecordStoreException rse) {
rse.printStackTrace();
}
//logger.debug("printAllRecords ends");
}
/***
*
* @return
*/
public int getRecordCount() {
int numRecords = -1;
try {
numRecords = recordStore.getNumRecords();
} catch (RecordStoreNotOpenException rsnoe) {
rsnoe.printStackTrace();
}
return numRecords;
}
/***
*
* @param _recordStoreMaxSize
* @return
*/
public int controlSize(int _recordStoreMaxSize) {
int result = 1;
try {
if (recordStore.getNumRecords() > _recordStoreMaxSize) {
int numToDel = recordStore.getNumRecords() - _recordStoreMaxSize;
for(int i = 0; i < numToDel; i++)
{
deleteOldestRecord();
}
} else {
}
} catch (RecordStoreNotOpenException rsnoe) {
rsnoe.printStackTrace();
}
return result;
}
/***
*
* @return
*/
public int deleteOldestRecord() {
int result = 1;
int index;
try {
filter = null;
comparator = null;
RecordEnumeration re_enum = recordStore.enumerateRecords(filter, comparator, true);
int id = re_enum.nextRecordId();
index = id;
while (re_enum.hasNextElement()) {
id = re_enum.nextRecordId();
if(id < index)
index = id;
}
recordStore.deleteRecord(index);
} catch (RecordStoreNotOpenException rsnoe) {
rsnoe.printStackTrace();
} catch (RecordStoreException rse) {
rse.printStackTrace();
}
return result;
}
/***
*
* @return
*/
public int deleteAllRecords() {
int result = 1;
try {
filter = null;
comparator = null;
RecordEnumeration re_enum = recordStore.enumerateRecords(filter, comparator, true);
while (re_enum.hasNextElement()) {
int id = re_enum.nextRecordId();
recordStore.deleteRecord(id);
}
} catch (RecordStoreNotOpenException rsnoe) {
rsnoe.printStackTrace();
} catch (RecordStoreException rse) {
rse.printStackTrace();
}
return result;
}
}