import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.rms.*; import java.io.*; public class HotelDemo extends MIDlet implements CommandListener { private Command exitCommand, backCommand, nextCommand, saveCommand; private Display display; // The display for this MIDlet private List menu; private Form fr1; private TextField tf1, tf2, tf3, tf4; private RecordEnumeration enum; private ByteArrayOutputStream bout = new ByteArrayOutputStream(); private DataOutputStream dout = new DataOutputStream(bout); private RecordStore rs; private byte [] data = null; private ByteArrayInputStream bin; private DataInputStream din = null; public HotelDemo() { display = Display.getDisplay(this); exitCommand = new Command("Exit", Command.SCREEN, 1); nextCommand = new Command("Next", Command.BACK, 2); saveCommand = new Command("Save", Command.BACK, 2); backCommand = new Command("Back", Command.BACK, 2); } public void startApp() { menu = new List("Hotel List", Choice.IMPLICIT); menu.append("Add", null); menu.append("Show All", null); menu.addCommand(exitCommand); menu.setCommandListener(this); display.setCurrent(menu); fr1 = new Form("Hotel"); fr1.append("Name"); tf1 = new TextField("", "", 15, TextField.ANY); fr1.append(tf1); fr1.append("Phone"); tf2 = new TextField("", "", 15, TextField.PHONENUMBER); fr1.append(tf2); fr1.append("Zone"); tf3 = new TextField("", "", 10, TextField.ANY); fr1.append(tf3); fr1.append("Price"); tf4 = new TextField("", "", 10, TextField.NUMERIC); fr1.append(tf4); fr1.addCommand(backCommand); fr1.setCommandListener(this); openRecord(); } public void resetScreen() { setScreen("", "", "", ""); } public void setScreen(String name, String tel, String zone, String price) { tf1.setString(name); tf2.setString(tel); tf3.setString(zone); tf4.setString(price); } public void openRecord() { try { rs = RecordStore.openRecordStore("Hotel", true); } catch (RecordStoreException ex) { } } public void addRecord(String name, String phone, String zone, int price) { try { dout.writeUTF(name); dout.writeUTF(phone); dout.writeUTF(zone); dout.writeInt(price); dout.flush(); }catch (IOException ex) { } byte[] data = bout.toByteArray(); try { rs.addRecord(data, 0, data.length); } catch (RecordStoreFullException ex) { } catch (RecordStoreException ex) { } } public void pauseApp() { } public void destroyApp(boolean unconditional) { try { rs.closeRecordStore(); } catch (RecordStoreException ex) { } } public void storeData() { String name = tf1.getString(); String tel = tf2.getString(); String zone = tf3.getString(); int price = Integer.parseInt(tf4.getString()); addRecord(name, tel, zone, price); } public void nextRecord() { try { if (enum.hasNextElement()) { int id = enum.nextRecordId(); int size = rs.getRecordSize(id); if (data == null || data.length < size) { data = new byte[size + 20]; bin = new ByteArrayInputStream(data); din = new DataInputStream(bin); } rs.getRecord(id, data, 0); din.reset(); String name = din.readUTF(); String tel = din.readUTF(); String zone = din.readUTF(); int price = din.readInt(); setScreen(name, tel, zone, price + ""); } }catch (Exception ex) { } } public void commandAction(Command c, Displayable s) { if (c == exitCommand) { destroyApp(false); notifyDestroyed(); } else if (c == backCommand) { fr1.removeCommand(nextCommand); fr1.removeCommand(saveCommand); display.setCurrent(menu); } else if (c == saveCommand) { storeData(); fr1.removeCommand(saveCommand); display.setCurrent(menu); } else if (c == nextCommand) { nextRecord(); } else if (c == List.SELECT_COMMAND) { switch(((List) s).getSelectedIndex()) { case 0 : fr1.addCommand(saveCommand); display.setCurrent(fr1); resetScreen(); break; case 1 : try { if (enum != null) { enum.destroy(); } enum = rs.enumerateRecords(null, null, true); fr1.addCommand(nextCommand); display.setCurrent(fr1); nextRecord(); } catch(Exception ex) { } } } } }