J2MESearchMixedRecordDataTypeExample.java Source code

Java tutorial

Introduction

Here is the source code for J2MESearchMixedRecordDataTypeExample.java

Source

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) {
        }
    }
}