Java 11 integration;
[jalview.git] / src2 / fr / orsay / lri / varna / applications / BasicINI.java
diff --git a/src2/fr/orsay/lri/varna/applications/BasicINI.java b/src2/fr/orsay/lri/varna/applications/BasicINI.java
new file mode 100644 (file)
index 0000000..89a590e
--- /dev/null
@@ -0,0 +1,178 @@
+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;
+       }
+
+
+}