/src/main/java/net/sf/antcontrib/inifile/IniFile.java
https://github.com/srstclair/ant-contrib · Java · 211 lines · 105 code · 18 blank · 88 comment · 26 complexity · ad6dc45204958d8e0acf6d57e3188d62 MD5 · raw file
- /*
- * Copyright (c) 2001-2004 Ant-Contrib project. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package net.sf.antcontrib.inifile;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.Reader;
- import java.io.Writer;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import net.sf.antcontrib.util.StringTools;
- /**
- * Class representing a windows style .ini file.
- *
- * @author <a href="mailto:mattinger@yahoo.com">Matthew Inger</a>
- */
- public class IniFile {
- /**
- * Field sections.
- */
- private final List<IniSection> sections;
- /**
- * Field sectionMap.
- */
- private final Map<String, IniSection> sectionMap;
- /**
- * Create a new IniFile object.
- */
- public IniFile() {
- super();
- this.sections = new ArrayList<IniSection>();
- this.sectionMap = new HashMap<String, IniSection>();
- }
- /**
- * Gets the List of IniSection objects contained in this IniFile.
- *
- * @return a List of IniSection objects
- */
- public List<IniSection> getSections() {
- return sections;
- }
- /**
- * Gets the IniSection with the given name.
- *
- * @param name the name of the section
- * @return IniSection
- */
- public IniSection getSection(String name) {
- return sectionMap.get(name);
- }
- /**
- * Sets an IniSection object. If a section with the given
- * name already exists, it is replaced with the passed in section.
- *
- * @param section The section to set.
- */
- public void setSection(IniSection section) {
- IniSection sec = sectionMap.get(section.getName());
- if (sec != null) {
- int idx = sections.indexOf(sec);
- sections.set(idx, section);
- } else {
- sections.add(section);
- }
- sectionMap.put(section.getName(), section);
- }
- /**
- * Removes an entire section from the IniFile.
- *
- * @param name The name of the section to remove
- */
- public void removeSection(String name) {
- IniSection sec = sectionMap.get(name);
- if (sec != null) {
- int idx = sections.indexOf(sec);
- sections.remove(idx);
- sectionMap.remove(name);
- }
- }
- /**
- * Gets a named property from a specific section.
- *
- * @param section The name of the section
- * @param property The name of the property
- * @return The property value, or null, if either the section or property
- * does not exist.
- */
- public String getProperty(String section, String property) {
- String value = null;
- IniSection sec = getSection(section);
- if (sec != null) {
- IniProperty prop = sec.getProperty(property);
- if (prop != null) {
- value = prop.getValue();
- }
- }
- return value;
- }
- /**
- * Sets the value of a property in a given section. If the section does
- * not exist, it is automatically created.
- *
- * @param section The name of the section
- * @param property The name of the property
- * @param value The value of the property
- */
- public void setProperty(String section, String property, String value) {
- IniSection sec = getSection(section);
- if (sec == null) {
- sec = new IniSection(section);
- setSection(sec);
- }
- sec.setProperty(new IniProperty(property, value));
- }
- /**
- * Removes a property from a section.
- *
- * @param section The name of the section
- * @param property The name of the property
- */
- public void removeProperty(String section, String property) {
- IniSection sec = getSection(section);
- if (sec != null) {
- sec.removeProperty(property);
- }
- }
- /**
- * Writes the current iniFile instance to a Writer object for
- * serialization.
- *
- * @param writer The writer to write to
- * @throws IOException on write error
- */
- public void write(Writer writer) throws IOException {
- Iterator<IniSection> it = sections.iterator();
- IniSection section = null;
- while (it.hasNext()) {
- section = it.next();
- section.write(writer);
- writer.write(System.getProperty("line.separator"));
- }
- }
- /**
- * Reads from a Reader into the current IniFile instance. Reading
- * appends to the current instance, so if the current instance has
- * properties, those properties will still exist.
- *
- * @param reader The reader to read from.
- * @throws IOException on read error
- */
- public void read(Reader reader) throws IOException {
- BufferedReader br = new BufferedReader(reader);
- String line = null;
- IniSection currentSection = new IniSection("NONE");
- while ((line = br.readLine()) != null) {
- line = StringTools.trim(line);
- if (line.length() > 0 && !line.startsWith("#") && !line.startsWith(";")) {
- if (line.startsWith("[") && line.endsWith("]")) {
- String secName = line.substring(1, line.length() - 1);
- currentSection = getSection(secName);
- if (currentSection == null) {
- currentSection = new IniSection(secName);
- setSection(currentSection);
- }
- } else {
- String name = line;
- String value = "";
- int pos = line.indexOf("=");
- if (pos != -1) {
- name = line.substring(0, pos);
- value = line.substring(pos + 1);
- }
- currentSection.setProperty(new IniProperty(name, value));
- }
- }
- }
- }
- }