+package fr.orsay.lri.varna.applications;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.Reader;
+import java.io.StreamTokenizer;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Hashtable;
+import java.util.Set;
+
+public class BasicINI {
+
+ private Hashtable<String,Hashtable<String,String>> _data = new Hashtable<String,Hashtable<String,String>>();
+
+
+ public void addItem(String category, String key, String val)
+ {
+ if (!_data.containsKey(category))
+ {
+ _data.put(category, new Hashtable<String,String>());
+ }
+ System.out.println("[E]"+key+"->"+val);
+ _data.get(category).put(key,val);
+ }
+
+
+ public String getItem(String category, String key)
+ {
+ String result = "";
+ if (_data.containsKey(category))
+ {
+ if (_data.get(category).containsKey(key))
+ {
+ result = _data.get(category).get(key);
+ }
+ }
+ return result;
+ }
+
+ public ArrayList<String> getItemList(String category)
+ {
+ ArrayList<String> result = new ArrayList<String>();
+ if (_data.containsKey(category))
+ {
+ for (String key: _data.get(category).keySet())
+ {
+ result.add(_data.get(category).get(key));
+ }
+ }
+ return result;
+ }
+
+ public BasicINI(){
+
+ }
+
+ public static void saveINI(BasicINI data, String filename)
+ {
+ try
+ {
+ FileWriter out = new FileWriter(filename);
+ Set<String> cats = data._data.keySet();
+ String[] sortedCats = new String[cats.size()];
+ sortedCats = cats.toArray(sortedCats);
+ Arrays.sort(sortedCats);
+ for (int i=0;i<sortedCats.length;i++)
+ {
+ String cat = sortedCats[i];
+ out.write("["+cat+"]\n");
+ Hashtable<String,String> vals = data._data.get(cat);
+ Set<String> keys = vals.keySet();
+ String[] sortedKeys = new String[keys.size()];
+ sortedKeys = keys.toArray(sortedKeys);
+ for(int j=0;j<sortedKeys.length;j++)
+ {
+ String key = sortedKeys[j];
+ String val = vals.get(key);
+ out.write(key+"="+val+"\n");
+ }
+ }
+ out.close();
+ }
+ catch(Exception e3)
+ {e3.printStackTrace();}
+ }
+
+ public static BasicINI loadINI(String filename)
+ {
+ BasicINI result = new BasicINI();
+
+ // Etats du parsing simplifie ...
+ final int CATEGORY = 0;
+ final int KEY = 1;
+ final int VAL = 2;
+ int state = KEY;
+ String category = "";
+ String key = "";
+ String val = "";
+
+ try
+ {
+ System.out.println("Loading "+new File(filename).getAbsolutePath());
+
+ Reader r = new FileReader(filename);
+ StreamTokenizer s = new StreamTokenizer(r);
+ s.resetSyntax();
+ s.eolIsSignificant(true);
+ s.wordChars('\u0000','\u00FF');
+ s.whitespaceChars('\u0000','\u000F');
+ s.ordinaryChar('[');
+ s.ordinaryChar(']');
+ s.ordinaryChar('=');
+ int token = s.nextToken();
+ while(token != StreamTokenizer.TT_EOF)
+ {
+ switch(token)
+ {
+ case('[') :
+ {
+ state = CATEGORY;
+ }
+ break;
+ case(']') :
+ {
+ state = KEY;
+ }
+ break;
+ case('=') :
+ {
+ state = VAL;
+ }
+ break;
+ case(StreamTokenizer.TT_EOL) :
+ {
+ if (state==VAL)
+ {
+ state = KEY;
+ result.addItem(category, key, val);
+ key="";
+ val="";
+ }
+ }
+ case(StreamTokenizer.TT_WORD) :
+ {
+ String word = s.sval;
+ switch(state)
+ {
+ case(CATEGORY) :
+ {
+ category = word;
+ }
+ break;
+ case(KEY) :
+ {
+ key = word;
+ }
+ break;
+ case(VAL) :
+ {
+ val = word;
+ }
+ break;
+ }
+ }
+ break;
+ }
+ token = s.nextToken();
+ }
+ }
+ catch(Exception exc1)
+ {exc1.printStackTrace();}
+ return result;
+ }
+
+
+}