25 czerwca 2011 blog java

Sekcje w plikach .properties w javie

Klasa Properties w javie dziedziczy z HashMap. Do obsłużenia sekcji w plikach konfiguracyjnych, wystarczy dopisanie kilku linijek do metody dodającej elementy do mapy. W poniższym przykładzie nazwy sekcji są doklejane na początku nazwy klucza, łącznie z kropką. Po odczytaniu konfiguracji, należy zresetować znacznik sekcji. Dzięki temu sekcje nie będą doklejane do kluczy później dodawanych elementów. Bezpośredni link do klasy PropertiesWithSections.

package pl.devsite.configuration;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.Properties;

/**
 * Handles sections in properties java files.
 * @author dmn
 */
public class PropertiesWithSections extends Properties {

	private String currentSection = null;

	public PropertiesWithSections(Properties defaults) {
		super(defaults);
	}

	public PropertiesWithSections() {
	}

	public void resetCurrentSection() {
		currentSection = null;
	}

	@Override
	public synchronized void load(Reader reader) throws IOException {
		super.load(reader);
		resetCurrentSection();
	}

	@Override
	public synchronized void load(InputStream inStream) throws IOException {
		super.load(inStream);
		resetCurrentSection();
	}

	@Override
	public synchronized Object put(Object key, Object value) {
		String sKey = key.toString();
		if (sKey.startsWith("[") && sKey.endsWith("]")) {
			sKey = sKey.substring(1, sKey.length() - 1);
			if ("ROOT".equals(sKey.toUpperCase())) {
				currentSection = null;
			} else {
				currentSection = sKey;
			}
			return null;
		}
		return super.put((currentSection == null ? "" : currentSection + ".") + key, value);
	}
}