import javax.microedition.rms.RecordListener; import javax.microedition.rms.RecordStore; import javax.microedition.rms.RecordStoreException; /** * Библиотека для MIDlet Pascal
* Для грамотной работы с RMS * @author Kalter */ public class Lib_rms{ /** * Хранилище записей */ private static RecordStore rms; /** * Входные данные */ private static StringInputStream input; /** * Выходные данные */ private static StringOutputStream output; /** * Обработчик событий */ private static RecordListener listener; /** * Открывает хранилище. В случае отсутствия создаёт новое * @param name Имя хранилища */ public static void open(String name){ try{ rms=RecordStore.openRecordStore(name,true); output=new StringOutputStream(); }catch(RecordStoreException rse){ exception(rse); } } /** * Удаляет хранилище по имени * @param name Имя удаляемого хранилища */ public static void deleterecordstore(String name){ try{ RecordStore.deleteRecordStore(name); }catch(RecordStoreException rse){ exception(rse); } } /** * @return Время последнего изменения данных в хранилище записей в виде * количества миллисекунд прошедших с 1 января 1970 года до момента * последнего изменения */ public static int getlastmodified(){ try{ return (int)rms.getLastModified(); }catch(RecordStoreException rse){ exception(rse); return -1; } } /** * @return Имя хранилища */ public static String getname(){ try{ return rms.getName(); }catch(RecordStoreException rse){ exception(rse); return "-1"; } } /** * @return Номер, который будет присвоен следующей записи */ public static int getnextrecordid(){ try{ return rms.getNextRecordID(); }catch(RecordStoreException rse){ exception(rse); return -1; } } /** * @return Количество записей в хранилище */ public static int getnumrecords(){ try{ return rms.getNumRecords(); }catch(RecordStoreException rse){ exception(rse); return -1; } } /** * @param id Номер записи * @return Размер (в байтах) записи по указанному номеру */ public static int getrecordsize(int id){ try{ return rms.getRecordSize(id); }catch(RecordStoreException rse){ exception(rse); return -1; } } /** * @return Размер (в байтах) хранилища */ public static int getsize(){ try{ return rms.getSize(); }catch(RecordStoreException rse){ exception(rse); return -1; } } /** * @return Объём памяти (в байтах), доступный для расширения хранилища */ public static int getsizeavailable(){ try{ return rms.getSizeAvailable(); }catch(RecordStoreException rse){ exception(rse); return -1; } } /** * @return Номер версии хранилища */ public static int getversion(){ try{ return rms.getVersion(); }catch(RecordStoreException rse){ exception(rse); return -1; } } /** * Включить обработчик событий */ public static void addlistener(){ listener=new RMSListener(); rms.addRecordListener(listener); } /** * Отключить обработчик событий */ public static void deletelistener(){ rms.removeRecordListener(listener); listener=null; } /** * Удалить запись по указанному номеру * @param id Номер удаляемой записи */ public static void deleterecord(int id){ try{ rms.deleteRecord(id); }catch(RecordStoreException rse){ exception(rse); } } /** * Прочитать в буфер данные записи по указанному номеру * @param id Номер записи */ public static void read(int id){ try{ input=new StringInputStream(new String(rms.getRecord(id))); }catch(RecordStoreException rse){ exception(rse); } } /** * Добавить данные из буфера в запись */ public static void add(){ try{ rms.addRecord(output.toString().getBytes(),0, output.toString().length()); output=new StringOutputStream(); }catch(RecordStoreException rse){ exception(rse); } } /** * Добавить данные из буфера в запись по указанному номеру * @param id Номер записи */ public static void set(int id){ try{ rms.setRecord(id,output.toString().getBytes(),0, output.toString().length()); output=new StringOutputStream(); }catch(RecordStoreException rse){ exception(rse); } } /** * @return Данные из буфера типа Integer */ public static int inputinteger(){ int result=-1; try{ istype('i'); result=Integer.parseInt(input.readString()); }catch(IndexOutOfBoundsException ioobe){ exception(ioobe); } return result; } /** * @return Данные из буфера типа String */ public static String inputstring(){ String result="-1"; try{ istype('s'); result=input.readString(); }catch(IndexOutOfBoundsException ioobe){ exception(ioobe); } return result; } /** * Записывает переменную типа Integer в буфер * @param value Записываемая переменная */ public static void printinteger(int value){ output.write('i',""+value); } /** * Записывает переменную типа String в буфер * @param value Записываемая переменная */ public static void printstring(String value){ output.write('s',value); } /** * Закрывает хранилище */ public static void close(){ try{ rms.closeRecordStore(); rms=null; input=null; output=null; }catch(RecordStoreException rse){ exception(rse); } } /** * Проверяет на совместимость типа из буфера и читаемого типа * @param c Тип читаемой переменной * @throws IndexOutOfBoundsException При выходе за границы буфера */ private static void istype(char c) throws IndexOutOfBoundsException{ if(c!=input.read()){ exception(new RecordStoreException("wrong_type")); } } /** * Сообщает процедуре rms_exception сообщение об ошибке * @param e Возбужденное исключение */ private static void exception(Exception e){ try{ M.rms_exception(e.getMessage()); }catch(Exception e0){ System.out.println(e0.getMessage()); e0.printStackTrace(); } } }