DEADSOFTWARE

README.MD -> README.md
[Lib_rms.git] / src / Lib_rms.java
1 import javax.microedition.rms.RecordListener;
2 import javax.microedition.rms.RecordStore;
3 import javax.microedition.rms.RecordStoreException;
5 /**
6 * Библиотека для MIDlet Pascal<br/>
7 * Для грамотной работы с RMS
8 * @author Kalter
9 */
11 public class Lib_rms{
13 /**
14 * Хранилище записей
15 */
16 private static RecordStore rms;
18 /**
19 * Входные данные
20 */
21 private static StringInputStream input;
23 /**
24 * Выходные данные
25 */
26 private static StringOutputStream output;
28 /**
29 * Обработчик событий
30 */
31 private static RecordListener listener;
33 /**
34 * Открывает хранилище. В случае отсутствия создаёт новое
35 * @param name Имя хранилища
36 */
37 public static void open(String name){
39 try{
41 rms=RecordStore.openRecordStore(name,true);
42 output=new StringOutputStream();
43 }catch(RecordStoreException rse){
45 exception(rse);
46 }
47 }
49 /**
50 * Удаляет хранилище по имени
51 * @param name Имя удаляемого хранилища
52 */
53 public static void deleterecordstore(String name){
55 try{
57 RecordStore.deleteRecordStore(name);
58 }catch(RecordStoreException rse){
60 exception(rse);
61 }
62 }
64 /**
65 * @return Время последнего изменения данных в хранилище записей в виде
66 * количества миллисекунд прошедших с 1 января 1970 года до момента
67 * последнего изменения
68 */
69 public static int getlastmodified(){
71 try{
73 return (int)rms.getLastModified();
74 }catch(RecordStoreException rse){
76 exception(rse);
77 return -1;
78 }
79 }
81 /**
82 * @return Имя хранилища
83 */
84 public static String getname(){
86 try{
88 return rms.getName();
89 }catch(RecordStoreException rse){
91 exception(rse);
92 return "-1";
93 }
94 }
96 /**
97 * @return Номер, который будет присвоен следующей записи
98 */
99 public static int getnextrecordid(){
101 try{
103 return rms.getNextRecordID();
104 }catch(RecordStoreException rse){
106 exception(rse);
107 return -1;
111 /**
112 * @return Количество записей в хранилище
113 */
114 public static int getnumrecords(){
116 try{
118 return rms.getNumRecords();
119 }catch(RecordStoreException rse){
121 exception(rse);
122 return -1;
126 /**
127 * @param id Номер записи
128 * @return Размер (в байтах) записи по указанному номеру
129 */
130 public static int getrecordsize(int id){
132 try{
134 return rms.getRecordSize(id);
135 }catch(RecordStoreException rse){
137 exception(rse);
138 return -1;
142 /**
143 * @return Размер (в байтах) хранилища
144 */
145 public static int getsize(){
147 try{
149 return rms.getSize();
150 }catch(RecordStoreException rse){
152 exception(rse);
153 return -1;
157 /**
158 * @return Объём памяти (в байтах), доступный для расширения хранилища
159 */
160 public static int getsizeavailable(){
162 try{
164 return rms.getSizeAvailable();
165 }catch(RecordStoreException rse){
167 exception(rse);
168 return -1;
172 /**
173 * @return Номер версии хранилища
174 */
175 public static int getversion(){
177 try{
179 return rms.getVersion();
180 }catch(RecordStoreException rse){
182 exception(rse);
183 return -1;
187 /**
188 * Включить обработчик событий
189 */
190 public static void addlistener(){
192 listener=new RMSListener();
193 rms.addRecordListener(listener);
196 /**
197 * Отключить обработчик событий
198 */
199 public static void deletelistener(){
201 rms.removeRecordListener(listener);
202 listener=null;
205 /**
206 * Удалить запись по указанному номеру
207 * @param id Номер удаляемой записи
208 */
209 public static void deleterecord(int id){
211 try{
213 rms.deleteRecord(id);
214 }catch(RecordStoreException rse){
216 exception(rse);
220 /**
221 * Прочитать в буфер данные записи по указанному номеру
222 * @param id Номер записи
223 */
224 public static void read(int id){
226 try{
228 input=new StringInputStream(new String(rms.getRecord(id)));
229 }catch(RecordStoreException rse){
231 exception(rse);
235 /**
236 * Добавить данные из буфера в запись
237 */
238 public static void add(){
240 try{
242 rms.addRecord(output.toString().getBytes(),0,
243 output.toString().length());
244 output=new StringOutputStream();
245 }catch(RecordStoreException rse){
247 exception(rse);
251 /**
252 * Добавить данные из буфера в запись по указанному номеру
253 * @param id Номер записи
254 */
255 public static void set(int id){
257 try{
259 rms.setRecord(id,output.toString().getBytes(),0,
260 output.toString().length());
261 output=new StringOutputStream();
262 }catch(RecordStoreException rse){
264 exception(rse);
268 /**
269 * @return Данные из буфера типа Integer
270 */
271 public static int inputinteger(){
273 int result=-1;
274 try{
276 istype('i');
277 result=Integer.parseInt(input.readString());
278 }catch(IndexOutOfBoundsException ioobe){
280 exception(ioobe);
282 return result;
285 /**
286 * @return Данные из буфера типа String
287 */
288 public static String inputstring(){
290 String result="-1";
291 try{
293 istype('s');
294 result=input.readString();
295 }catch(IndexOutOfBoundsException ioobe){
297 exception(ioobe);
299 return result;
302 /**
303 * Записывает переменную типа Integer в буфер
304 * @param value Записываемая переменная
305 */
306 public static void printinteger(int value){
308 output.write('i',""+value);
311 /**
312 * Записывает переменную типа String в буфер
313 * @param value Записываемая переменная
314 */
315 public static void printstring(String value){
317 output.write('s',value);
320 /**
321 * Закрывает хранилище
322 */
323 public static void close(){
325 try{
327 rms.closeRecordStore();
328 rms=null;
329 input=null;
330 output=null;
331 }catch(RecordStoreException rse){
333 exception(rse);
337 /**
338 * Проверяет на совместимость типа из буфера и читаемого типа
339 * @param c Тип читаемой переменной
340 * @throws IndexOutOfBoundsException При выходе за границы буфера
341 */
342 private static void istype(char c) throws IndexOutOfBoundsException{
344 if(c!=input.read()){
346 exception(new RecordStoreException("wrong_type"));
350 /**
351 * Сообщает процедуре rms_exception сообщение об ошибке
352 * @param e Возбужденное исключение
353 */
354 private static void exception(Exception e){
356 try{
358 M.rms_exception(e.getMessage());
359 }catch(Exception e0){
361 System.out.println(e0.getMessage());
362 e0.printStackTrace();