DEADSOFTWARE

First commit
authorAnna Ivanova <kalterfx@gmail.com>
Sat, 28 Feb 2015 15:44:04 +0000 (21:44 +0600)
committerAnna Ivanova <kalterfx@gmail.com>
Sat, 28 Feb 2015 16:44:04 +0000 (21:44 +0500)
README.MD [new file with mode: 0644]
src/Lib_rms.java [new file with mode: 0644]
src/RMSListener.java [new file with mode: 0644]
src/StringInputStream.java [new file with mode: 0644]
src/StringOutputStream.java [new file with mode: 0644]

diff --git a/README.MD b/README.MD
new file mode 100644 (file)
index 0000000..d323ea1
--- /dev/null
+++ b/README.MD
@@ -0,0 +1,4 @@
+Lib_rms\r
+=======\r
+\r
+Lib_rms - library for working with RMS to MIDlet Pascal\r
diff --git a/src/Lib_rms.java b/src/Lib_rms.java
new file mode 100644 (file)
index 0000000..6396834
--- /dev/null
@@ -0,0 +1,365 @@
+import javax.microedition.rms.RecordListener;
+import javax.microedition.rms.RecordStore;
+import javax.microedition.rms.RecordStoreException;
+
+/**
+ * Библиотека для MIDlet Pascal<br/>
+ * Для грамотной работы с 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 (file)
index 0000000..00d91da
--- /dev/null
@@ -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 (file)
index 0000000..bf25efc
--- /dev/null
@@ -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 (file)
index 0000000..bec2879
--- /dev/null
@@ -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