import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordFilter;
import javax.microedition.rms.RecordStore;
public class J2MESearchMixedRecordDataTypeExample extends MIDlet implements CommandListener {
private Display display;
private Alert alert;
private Form form = new Form("Mixed RecordEnumeration");
private Command exit = new Command("Exit", Command.SCREEN, 1);
private Command start = new Command("Start", Command.SCREEN, 1);
private RecordStore recordstore = null;
private RecordEnumeration recordEnumeration = null;
private Filter filter = null;
public J2MESearchMixedRecordDataTypeExample() {
display = Display.getDisplay(this);
form.addCommand(exit);
form.addCommand(start);
form.setCommandListener(this);
}
public void startApp() {
display.setCurrent(form);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void commandAction(Command command, Displayable displayable) {
if (command == exit) {
destroyApp(true);
notifyDestroyed();
} else if (command == start) {
try {
recordstore = RecordStore.openRecordStore("myRecordStore", true);
byte[] outputRecord;
String outputString[] = { "A", "B", "M" };
int outputInteger[] = { 15, 10, 5 };
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
DataOutputStream outputDataStream = new DataOutputStream(outputStream);
for (int x = 0; x < 3; x++) {
outputDataStream.writeUTF(outputString[x]);
outputDataStream.writeInt(outputInteger[x]);
outputDataStream.flush();
outputRecord = outputStream.toByteArray();
recordstore.addRecord(outputRecord, 0, outputRecord.length);
outputStream.reset();
}
outputStream.close();
outputDataStream.close();
String inputString;
byte[] byteInputData = new byte[300];
ByteArrayInputStream inputStream = new ByteArrayInputStream(byteInputData);
DataInputStream inputDataStream = new DataInputStream(inputStream);
if (recordstore.getNumRecords() > 0) {
filter = new Filter("Mary");
recordEnumeration = recordstore.enumerateRecords(filter, null, false);
while (recordEnumeration.hasNextElement()) {
recordstore.getRecord(recordEnumeration.nextRecordId(), byteInputData, 0);
inputString = inputDataStream.readUTF() + " " + inputDataStream.readInt();
alert = new Alert("Reading", inputString, null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
}
inputStream.close();
recordstore.closeRecordStore();
if (RecordStore.listRecordStores() != null) {
RecordStore.deleteRecordStore("myRecordStore");
filter.filterClose();
recordEnumeration.destroy();
}
} catch (Exception error) {
alert = new Alert("Error Removing", error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
}
}
}
class Filter implements RecordFilter {
private String search = null;
private ByteArrayInputStream inputstream = null;
private DataInputStream datainputstream = null;
public Filter(String searchcriteria) {
search = searchcriteria;
}
public boolean matches(byte[] suspect) {
String string = null;
try {
inputstream = new ByteArrayInputStream(suspect);
datainputstream = new DataInputStream(inputstream);
string = datainputstream.readUTF();
} catch (Exception error) {
return false;
}
if (string != null && string.indexOf(search) != -1)
return true;
else
return false;
}
public void filterClose() {
try {
if (inputstream != null) {
inputstream.close();
}
if (datainputstream != null) {
datainputstream.close();
}
} catch (Exception error) {
}
}
}