Package railo.commons.io.ini

Source Code of railo.commons.io.ini.IniFile

package railo.commons.io.ini;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

import railo.commons.io.IOUtil;
import railo.commons.io.res.Resource;
import railo.runtime.type.Struct;
import railo.runtime.type.StructImpl;

/**
* read a ini file and allow to modifie and read the data
*/
public final class IniFile {

  private Map sections;
  private final Resource file;
  private static Map newMap() {return new LinkedHashMap();}
/**
  * Constructor for the IniFile object
  *
  * @param file ini FIle
* @throws IOException
  */
   public IniFile(Resource file) throws IOException {
       this.file=file;
       sections = newMap();
       InputStream is=null;
       if(!file.exists())file.createFile(false);
       try {
         load(is=file.getInputStream());
       }
       finally {
         IOUtil.closeEL(is);
       }
   }
  
   public IniFile(InputStream is) throws IOException {
       sections = newMap();
       load(is);
       file=null;
   }

/**
  * Sets the KeyValue attribute of the IniFile object
  *
  * @param strSection  the section to set
  * @param key the key of the new value
  * @param value the value to set
  */
public void setKeyValue(String strSection, String key, String value) {
     Map section = getSectionEL(strSection);
     if(section==null) {
         section=newMap();
         sections.put(strSection.toLowerCase(),section);
     }
     section.put(key.toLowerCase(), value);
}

/**
  * Gets the Sections attribute of the IniFile object
  *
  * @return   The Sections value
  */
public Map getSections() {
   return sections;
}

/**
  * Gets the Section attribute of the IniFile object
  *
  * @param strSection  section name to get
  * @return         The Section value
* @throws IOException
  */
public Map getSection(String strSection) throws IOException {
     Object o=sections.get(strSection.toLowerCase());
     if(o==null) throw new IOException("section with name "+strSection+" does not exist");
     return (Map) o;
   }
/**
  * Gets the Section attribute of the IniFile object, return null if section not exist
  *
  * @param strSection  section name to get
  * @return         The Section value
  */
public Map getSectionEL(String strSection) {
     Object o=sections.get(strSection.toLowerCase());
     if(o==null) return null;
     return (Map) o;
   }

/**
  * Gets the NullOrEmpty attribute of the IniFile object
  *
  * @param section  section to check
  * @param key      key to check
  * @return         is empty or not
  */
public boolean isNullOrEmpty(String section, String key) {
   String value = getKeyValueEL(section, key);
   return (value == null || value.length() == 0);
}

/**
  * Gets the KeyValue attribute of the IniFile object
  *
  * @param strSection  section to get
  * @param key      key to get
  * @return         matching alue
* @throws IOException
  */
public String getKeyValue(String strSection, String key) throws IOException {
     Object o= getSection(strSection).get(key.toLowerCase());
     if(o==null) throw new IOException("key "+key+" doesn't exist in section "+strSection);
     return (String)o;

}
/**
  * Gets the KeyValue attribute of the IniFile object, if not exist return null
  *
  * @param strSection  section to get
  * @param key      key to get
  * @return         matching alue
  */
public String getKeyValueEL(String strSection, String key) {
     Map map=getSectionEL(strSection);
     if(map==null) return null;
     Object o=map.get(key.toLowerCase());
     if(o==null) return null;
     return (String) o;

}


/**
  * loads the ini file
  * @param in  inputstream to read
* @throws IOException
  */
public void load(InputStream in) throws IOException {
  
     BufferedReader input = IOUtil.toBufferedReader(new InputStreamReader(in));
     String read;
     Map section = null;
     String sectionName;
     while ((read = input.readLine()) != null) {
       if (read.startsWith(";") || read.startsWith("#")) {
         continue;
       }
       else if (read.startsWith("[")) {
         // new section
         sectionName = read.substring(1, read.indexOf("]")).trim().toLowerCase();
         section = getSectionEL(sectionName);
         if (section == null) {
           section = newMap();
           sections.put(sectionName, section);
         }
       }
       else if (read.indexOf("=") != -1 && section != null) {
         // new key
         String key = read.substring(0, read.indexOf("=")).trim().toLowerCase();
         String value = read.substring(read.indexOf("=") + 1).trim();
         section.put(key, value);
       }
     }

}

/**
  * save back content to ini file
  * @throws IOException
  */
public void save() throws IOException {
   if(!file.exists())file.createFile(true);
     OutputStream out=IOUtil.toBufferedOutputStream(file.getOutputStream());
     Iterator it = sections.keySet().iterator();
     PrintWriter output = new PrintWriter(out);
     try {
     while(it.hasNext()) {
         String strSection = (String) it.next();
         output.println("[" + strSection + "]");
         Map section = getSectionEL(strSection);
         Iterator iit = section.keySet().iterator();
         while(iit.hasNext()) {
             String key = (String) iit.next();
             output.println(key + "=" + section.get(key));
        }
       }
     }
     finally {
       IOUtil.flushEL(output);
       IOUtil.closeEL(output);
       IOUtil.flushEL(out);
       IOUtil.closeEL(out);
     }
}

/**
  * removes a selection
  *
  * @param strSection  section to remove
  */
public void removeSection(String strSection) {
     sections.remove(strSection);
}
/**
  *
* @param file
* @return return a struct with all section an dkey list as value
* @throws IOException
*/
public static Struct getProfileSections(Resource file) throws IOException {
     IniFile ini=new IniFile(file);
     Struct rtn=new StructImpl(Struct.TYPE_SYNC);
     Map sections = ini.getSections();
     Iterator it = sections.keySet().iterator();
     while(it.hasNext()) {
         String strSection=(String) it.next();
         Map section = ini.getSectionEL(strSection);
         Iterator iit = section.keySet().iterator();
         StringBuilder sb=new StringBuilder();
         while(iit.hasNext()) {
             if(sb.length()!=0)sb.append(',');
             sb.append(iit.next());
         }
         rtn.setEL(strSection,sb.toString());
     }
     return rtn;
}
}
TOP

Related Classes of railo.commons.io.ini.IniFile

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.