www.pudn.com > WordTip.zip > Model.java
/*
* Created on 2005-1-26
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package net.hyweb.wordmodel;
import java.io.IOException;
import net.hyweb.ui.*;
import javax.microedition.rms.*;
/**
* @author user
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Model {
private RecordStore rs = null;
/**Model的内部类,用于过滤单词信息
* @author user
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
private static class WordFilter implements RecordFilter{
private String enWord;
private int type;
public WordFilter(String enword, int type){
//传入要比较的项
this.enWord = enword;
this.type = type;
}
public boolean matches(byte[] word) {
//matches方法中传入的参数是RMS中的各个候选值(元素)
try {
if(type == EventID.SEARCH_EQUAL){
return Word.matchEN(word, enWord);
}else{
return Word.matchEN_StartWith(word, enWord);
}
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
}
private static class WordComparator implements RecordComparator{
public int compare(byte[] word_1, byte[] word_2) {
try {
Word word1 = Word.deserialize(word_1);
Word word2 = Word.deserialize(word_2);
long dateTime1 = word1.getDateTime();
long dateTime2 = word2.getDateTime();
if(dateTime1 < dateTime2){
return RecordComparator.FOLLOWS;
}
if(dateTime1 > dateTime2){
return RecordComparator.PRECEDES;
}
return RecordComparator.EQUIVALENT;
} catch (IOException e) {
e.printStackTrace();
}
return 0;
}
}
public Model(){
try {
//打开一个RMS,如果打开失败,则创建一个
rs = RecordStore.openRecordStore(EventID.RS_NAME, true);
} catch (RecordStoreNotFoundException e) {
e.printStackTrace();
} catch (RecordStoreFullException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
}
public Word[] ViewAll(){
int numRecords = 0;
int wordRecords = 0;
Word[] words;
if(rs == null){
return null;
}else{
try {
numRecords = rs.getNumRecords();
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
return null;
}
if(numRecords < 1){
return null;
}else{
try {
RecordEnumeration re = rs.enumerateRecords(null, new WordComparator(), false);
words = new Word[re.numRecords()];
for(int i = re.numRecords() - 1; i >= 0; i--){
byte[] tmp = re.nextRecord();
words[wordRecords] = Word.deserialize(tmp);
wordRecords ++;
}
re.destroy();
return words;
} catch (RecordStoreNotOpenException e1) {
e1.printStackTrace();
return null;
} catch (InvalidRecordIDException e1) {
e1.printStackTrace();
return null;
} catch (RecordStoreException e1) {
e1.printStackTrace();
return null;
} catch (IOException e1) {
e1.printStackTrace();
return null;
}
}
}
}
public boolean isRecordExist(String enword) throws Exception{
if(rs.getNumRecords() > 0){
RecordEnumeration records =
rs.enumerateRecords(new WordFilter(enword, EventID.SEARCH_EQUAL), new WordComparator(), false);
if(records.numRecords() > 0){
return true;
}else{
return false;
}
}else{
return false;
}
}
public boolean isRecordExist_StartWith(String enword) throws Exception{
if(rs.getNumRecords() > 0){
RecordEnumeration records =
rs.enumerateRecords(new WordFilter(enword, EventID.SEARCH_STARTWITH), new WordComparator(), false);
if(records.numRecords() > 0){
return true;
}else{
return false;
}
}else{
return false;
}
}
public void addNewWord(Word word) throws Exception{
try {
byte[] data = word.serialize();
int wordId = rs.addRecord(data, 0, data.length);
} catch (RecordStoreFullException e) {
e.printStackTrace();
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
}
public void deleteWord(int wordId) throws Exception{
try {
rs.deleteRecord(wordId);
} catch (InvalidRecordIDException e) {
e.printStackTrace();
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
}
public void deleteWord(String enword) throws Exception{
if(rs.getNumRecords() > 0){
RecordEnumeration re = rs.enumerateRecords(new WordFilter(enword, EventID.SEARCH_EQUAL), new WordComparator(), false);
while(re.hasNextElement()){
int id = re.nextRecordId();
rs.deleteRecord(id);
}
re.destroy();
}
}
public Word[] detailedWord(String enword) throws Exception{
Word[] words = null;
int wordRecords = 0;
RecordEnumeration re = rs.enumerateRecords(new WordFilter(enword, EventID.SEARCH_EQUAL), new WordComparator(), false);
words = new Word[re.numRecords()];
for(int i = re.numRecords() - 1; i >= 0 ; i--){
byte[] tmp = re.nextRecord();
words[wordRecords] = Word.deserialize(tmp);
wordRecords ++;
}
re.destroy();
return words;
}
public Word[] detailedWord_StartWith(String enword) throws Exception{
Word[] words = null;
int wordRecords = 0;
RecordEnumeration re = rs.enumerateRecords(new WordFilter(enword, EventID.SEARCH_STARTWITH), new WordComparator(), false);
words = new Word[re.numRecords()];
for(int i = re.numRecords() - 1; i >= 0 ; i--){
byte[] tmp = re.nextRecord();
words[wordRecords] = Word.deserialize(tmp);
wordRecords ++;
}
re.destroy();
return words;
}
public void clearWordTip() throws Exception{
try {
rs.closeRecordStore();
RecordStore.deleteRecordStore(EventID.RS_NAME);
//重新打开RMS
rs = RecordStore.openRecordStore(EventID.RS_NAME, true);
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (RecordStoreNotFoundException e) {
e.printStackTrace();
} catch (RecordStoreFullException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
}
}