package uk.co.mmscomputing.application.phone; import java.io.*; import java.util.*; import uk.co.mmscomputing.device.phone.*; import uk.co.mmscomputing.device.phone.*; public class PhoneBookImpl implements PhoneBook,PhoneConstants{ Properties properties; TreeMap[] sets=new TreeMap[2]; // 0: key=numbers; 1: key=names; public PhoneBookImpl(Properties properties)throws IOException{ this.properties=properties; String fn=properties.getProperty(phoneBookID); if(fn==null){ fn= System.getProperty("user.home") +File.separator +"mmsc" +File.separator +"phonebook" +File.separator +"phonebook.csv"; properties.setProperty(phoneBookID,new File(fn).getAbsolutePath()); } for(int i=0;i<sets.length;i++){sets[i]=new TreeMap();} } public void write(){ try{ String fn=properties.getProperty(phoneBookID); File f=new File(fn); f.getParentFile().mkdirs(); PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(f))); Set set=sets[0].entrySet(); Iterator iterator=set.iterator(); while(iterator.hasNext()){ Map.Entry entry=(Map.Entry)iterator.next(); String key=(String)entry.getKey(); Object value=entry.getValue(); if(value instanceof String){ String s=(String)value; out.println("\""+key+"\" , "+"\""+s+"\""); } } out.flush(); out.close(); }catch(Exception e){ System.out.println("9\b"+e.getMessage()); } } public void read(){ File f=new File(properties.getProperty(phoneBookID)); if(!f.exists()){return;} try{ BufferedReader in = new BufferedReader(new FileReader(f)); StreamTokenizer st = new StreamTokenizer(in); st.wordChars('_','_'); int t=0;String number="",name=""; while((t=st.nextToken())=='"'){ number=st.sval; if((t=st.nextToken())!=','){ throw new IOException("Expect [=] have ["+t+" , "+((char)t)+"]"); } t=st.nextToken(); switch(t){ case '"': name=st.sval; break; default: throw new IOException("Expect [Quoted String] have ["+t+"]"); } sets[0].put(number,name); // key=number sets[1].put(name,number); // key=name } }catch(Exception e){ System.out.println("9\b"+e.getMessage()); } } public Set entrySet(int set){ return sets[set].entrySet(); } public Object put(Object number,Object name){ // while(((String)number).startsWith("0")){number=((String)number).substring(1);} sets[1].put(name,number); return sets[0].put(number,name); } public Object get(Object number){ // while(((String)number).startsWith("0")){number=((String)number).substring(1);} return sets[0].get(number); } public Object remove(Object number){ // while(((String)number).startsWith("0")){number=((String)number).substring(1);} sets[1].remove(sets[0].get(number)); return sets[0].remove(number); } public String getName(String number){ // while(number.startsWith("0")){number=number.substring(1);} String name=(String)sets[0].get(number); if(name!=null){return name;} return (String)number; } public String getNumber(String name){ String number=(String)sets[1].get(name); if(number!=null){return number;} return (String)name; } }