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(); 
		} 
	} 
}