001 package org.util.xml.io; 002 003 import java.io.*; 004 import java.awt.HeadlessException; 005 import javax.swing.*; 006 007 import org.util.xml.parse.*; 008 import org.util.xml.element.*; 009 010 public class XMLConfigManager { 011 012 private File config_file_; 013 private TagElement config_element_; 014 015 public XMLConfigManager() throws IOException { 016 initialize(false); 017 } 018 public XMLConfigManager(String file_name) throws IOException { 019 this(new File(new File(System.getProperty("user.dir")), file_name)); 020 } 021 public XMLConfigManager(File config_file) throws IOException { 022 config_file_ = config_file; 023 initialize(true); 024 } 025 public XMLConfigManager(File config_file, boolean b) throws IOException { 026 config_file_ = config_file; 027 initialize(b); 028 } 029 public void initialize(boolean b) throws IOException { 030 if(config_file_ != null && !config_file_.exists()) { 031 if (b) { 032 try { 033 String message = "Config file does not exists.\n\t Do you want to create config file?"; 034 int result = JOptionPane.showConfirmDialog(null, message, "select", JOptionPane.YES_NO_OPTION); 035 if(result == JOptionPane.YES_OPTION) { 036 config_file_.createNewFile(); 037 } 038 } 039 catch (HeadlessException e){ 040 initialize(false); 041 return; 042 } 043 } 044 else { 045 config_file_.createNewFile(); 046 } 047 } 048 inputSetting(); 049 } 050 public void initialize() throws Exception { 051 if(!config_file_.exists()) { 052 String message = "Config file does not exists.\n\t Do you want to create config file?"; 053 int result = JOptionPane.showConfirmDialog(null, message, "select", JOptionPane.YES_NO_OPTION); 054 if(result == JOptionPane.YES_OPTION) { 055 config_file_.createNewFile(); 056 } 057 } 058 inputSetting(); 059 } 060 public TagElement getTag(String full_key) { 061 String[] keys = full_key.split("/"); 062 TagElement tmp = getTag(); 063 for(int i=0;i<keys.length;i++) { 064 TagElement ta = null; 065 try{ 066 ta = tmp.getTagChild(keys[i]); 067 }catch(Exception e){} 068 if(ta == null) { 069 Element[] tmp_elements = tmp.getChildren(); 070 if(tmp_elements != null && tmp_elements.length!=0) { 071 Element[] new_elements = new Element[tmp_elements.length+1]; 072 for(int j=0;j<tmp_elements.length;j++) 073 new_elements[j] = tmp_elements[j]; 074 try{ 075 ta = new TagElement(keys[i]); 076 new_elements[new_elements.length-1] = ta; 077 tmp.setChildren(new_elements); 078 }catch(Exception e){ 079 e.printStackTrace(); 080 } 081 } else { 082 try{ 083 ta = new TagElement(keys[i]); 084 tmp.setChildren(ta); 085 }catch(Exception e){ 086 e.printStackTrace(); 087 } 088 } 089 try{ 090 outputSetting(); 091 }catch(Exception e) { 092 e.printStackTrace(); 093 } 094 } 095 tmp = ta; 096 } 097 return tmp; 098 } 099 100 public double getDouble(String full_key, double value) { 101 return Double.parseDouble(getValue(full_key, String.valueOf(value))); 102 } 103 public int getInt(String full_key, int value) { 104 return Integer.parseInt(getValue(full_key, String.valueOf(value))); 105 } 106 public boolean getBoolean(String full_key, boolean value) { 107 return "true".equals(getValue(full_key, (value ? "true" : "false") )); 108 } 109 110 public String getValue(String full_key, String value) { 111 String[] keys = full_key.split("/"); 112 TagElement tmp = getTag(); 113 for(int i=0;i<keys.length;i++) { 114 TagElement ta = null; 115 try{ 116 ta = tmp.getTagChild(keys[i]); 117 }catch(Exception e){} 118 if(ta == null) { 119 Element[] tmp_elements = tmp.getChildren(); 120 if(tmp_elements != null && tmp_elements.length!=0) { 121 Element[] new_elements = new Element[tmp_elements.length+1]; 122 for(int j=0;j<tmp_elements.length;j++) 123 new_elements[j] = tmp_elements[j]; 124 try{ 125 ta = new TagElement(keys[i]); 126 new_elements[new_elements.length-1] = ta; 127 tmp.setChildren(new_elements); 128 }catch(Exception e){ 129 e.printStackTrace(); 130 } 131 } else { 132 try{ 133 ta = new TagElement(keys[i]); 134 tmp.setChildren(ta); 135 }catch(Exception e){ 136 e.printStackTrace(); 137 } 138 } 139 try{ 140 outputSetting(); 141 }catch(Exception e) { 142 e.printStackTrace(); 143 } 144 } 145 tmp = ta; 146 } 147 String result_value = tmp.getValue(); 148 if(result_value==null || result_value.length()==0) { 149 tmp.setValue(value); 150 try{ 151 outputSetting(); 152 }catch(Exception e) { 153 e.printStackTrace(); 154 } 155 } 156 return tmp.getValue(); 157 } 158 159 public void setValue(String full_key, String value) { 160 String[] keys = full_key.split("/"); 161 TagElement tmp = getTag(); 162 for(int i=0;i<keys.length;i++) { 163 TagElement ta = null; 164 try{ 165 ta = tmp.getTagChild(keys[i]); 166 }catch(Exception e){} 167 if(ta == null) { 168 Element[] tmp_elements = tmp.getChildren(); 169 if(tmp_elements != null && tmp_elements.length!=0) { 170 Element[] new_elements = new Element[tmp_elements.length+1]; 171 for(int j=0;j<tmp_elements.length;j++) 172 new_elements[j] = tmp_elements[j]; 173 try{ 174 ta = new TagElement(keys[i]); 175 new_elements[new_elements.length-1] = ta; 176 tmp.setChildren(new_elements); 177 }catch(Exception e){ 178 e.printStackTrace(); 179 } 180 } else { 181 try{ 182 ta = new TagElement(keys[i]); 183 tmp.setChildren(ta); 184 }catch(Exception e){ 185 e.printStackTrace(); 186 } 187 } 188 try{ 189 outputSetting(); 190 }catch(Exception e) { 191 e.printStackTrace(); 192 } 193 } 194 tmp = ta; 195 } 196 tmp.setValue(value); 197 try{ 198 outputSetting(); 199 }catch(Exception e) { 200 e.printStackTrace(); 201 } 202 } 203 204 205 public TagElement getTag() { 206 return config_element_; 207 } 208 209 public void inputSetting() throws IOException { 210 if(config_file_!=null && config_file_.exists()) 211 try{ 212 ElementParser parser = new ElementParser(new FileInputStream(config_file_)); 213 parser.parse(); 214 config_element_ = parser.getFirstPlainTagElement(); 215 } 216 catch(IOException e) { 217 e.printStackTrace(); 218 } 219 catch(XMLParseException e) { 220 e.printStackTrace(); 221 } 222 223 if(config_element_ == null || !config_element_.getKey().equals("config")) { 224 config_element_ = new TagElement("config"); 225 try { 226 outputSetting(); 227 } catch(IOException e){} 228 } 229 config_element_.setTabText("\t"); 230 } 231 public void outputSetting() throws IOException { 232 if(config_file_ == null || !config_file_.exists()) return ; 233 String config_text = config_element_.toString(); 234 System.out.println(config_text); 235 BufferedWriter bw = new BufferedWriter(new FileWriter(config_file_)); 236 bw.write(config_text); 237 bw.flush(); 238 bw.close(); 239 } 240 public String toString() { 241 return "file: " + config_file_ + "\n" + config_element_.toString(); 242 } 243 }