From: Anna Ivanova Date: Sat, 28 Feb 2015 15:44:04 +0000 (+0600) Subject: First commit X-Git-Url: http://deadsoftware.ru/gitweb?p=Lib_rms.git;a=commitdiff_plain;h=4fd987dda13c8507dd0e9311c91c328e3b162e7b First commit --- 4fd987dda13c8507dd0e9311c91c328e3b162e7b diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..d323ea1 --- /dev/null +++ b/README.MD @@ -0,0 +1,4 @@ +Lib_rms +======= + +Lib_rms - library for working with RMS to MIDlet Pascal diff --git a/src/Lib_rms.java b/src/Lib_rms.java new file mode 100644 index 0000000..6396834 --- /dev/null +++ b/src/Lib_rms.java @@ -0,0 +1,365 @@ +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(); + } + } +} \ No newline at end of file diff --git a/src/RMSListener.java b/src/RMSListener.java new file mode 100644 index 0000000..00d91da --- /dev/null +++ b/src/RMSListener.java @@ -0,0 +1,61 @@ +import javax.microedition.rms.RecordStore; +import javax.microedition.rms.RecordListener; + +/** + * Обработчик событий RMS + * @author Kalter + */ + +public class RMSListener implements RecordListener{ + + /** + * Вызывается после добавления записи в хранилище + * @param rms Хранилище + * @param id Номер добавленной записи + */ + public void recordAdded(RecordStore rms,int id){ + + try{ + + M.rms_added(id); + }catch(Exception e){ + + System.out.println(e.getMessage()); + e.printStackTrace(); + } + } + + /** + * Вызывается при изменении записи + * @param rms Хранилище + * @param id Номер изменяемой записи + */ + public void recordChanged(RecordStore rms,int id){ + + try{ + + M.rms_changet(id); + }catch(Exception e){ + + System.out.println(e.getMessage()); + e.printStackTrace(); + } + } + + /** + * Вызывается после удаления записи + * @param rms Хранилище + * @param id Номер удаляемой записи + */ + public void recordDeleted(RecordStore rms,int id){ + + try{ + + M.rms_deleted(id); + }catch(Exception e){ + + System.out.println(e.getMessage()); + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/StringInputStream.java b/src/StringInputStream.java new file mode 100644 index 0000000..bf25efc --- /dev/null +++ b/src/StringInputStream.java @@ -0,0 +1,55 @@ +/** + * Осуществляет удобное чтения из буфера + * @author Kalter + */ + +public class StringInputStream{ + + /** + * Строковой буфер, откуда производится чтение + */ + private final String string; + + /** + * Позиция чтения + */ + private int position; + + /** + * @param string Буфер, откуда будет производится чтение + */ + public StringInputStream(String string){ + + this.string=string; + position=0; + } + + /** + * @return Следующий символ из буфера + * @throws IndexOutOfBoundsException При выходе позиции чтения за границы + * буфера + */ + public int read() throws IndexOutOfBoundsException{ + + int index=position++; + if(index>=string.length())throw new IndexOutOfBoundsException("empty"); + return string.charAt(index); + } + + /** + * @return Строка до символа остановки + * @throws IndexOutOfBoundsException При выходе позиции чтения за границы + * буфера + */ + public String readString() throws IndexOutOfBoundsException{ + + StringBuffer result=new StringBuffer(); + int c=read(); + while(c!='|'){ + + result.append((char)c); + c=read(); + } + return result.toString(); + } +} \ No newline at end of file diff --git a/src/StringOutputStream.java b/src/StringOutputStream.java new file mode 100644 index 0000000..bec2879 --- /dev/null +++ b/src/StringOutputStream.java @@ -0,0 +1,40 @@ +/** + * Осуществляет удобную запись в буфер + * @author Kalter + */ + +public class StringOutputStream{ + + /** + * Строковой буфер, куда производится запись + */ + private final StringBuffer data; + + /** + * Буфер создаётся пустым + */ + public StringOutputStream(){ + + data=new StringBuffer(); + } + + /** + * Записать в буфер данные + * @param type Тип данных + * @param value Значение данных + */ + public void write(char type,String value){ + + data.append(type); + data.append(value); + data.append('|'); + } + + /** + * @return Строковой буфер + */ + public String toString(){ + + return data.toString(); + } +} \ No newline at end of file