Java tutorial
/* * Copyright 2011 Kapelonis Kostis * * 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 gr.xe.conf; import gr.xe.conf.lines.CommentLine; import gr.xe.conf.lines.LineReader; import gr.xe.conf.lines.PathLine; import gr.xe.conf.lines.ValueLine; import gr.xe.conf.tree.ConfNode; import gr.xe.conf.tree.PathNode; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author kkapelonis */ public class ConfReader { private static final Logger logger = LoggerFactory.getLogger(ConfReader.class); private ConfNode rootNode = null; private List<LineReader> readers = null; /** * Creates a new instance of ConfReader */ public ConfReader() { rootNode = new PathNode(null); readers = new ArrayList<LineReader>(); readers.add(new CommentLine()); readers.add(new PathLine()); readers.add(new ValueLine()); } /** * Reads a legacy .conf Perl file * @param in the file * @throws IOException something was wrong during reading. */ public void readFile(InputStream in) throws IOException { List<String> lines = IOUtils.readLines(in); for (String line : lines) { if (StringUtils.isBlank(line)) { continue; } boolean ok = process(line); if (!ok) { logger.warn("Unknown line {}", line); } } } private boolean process(String line) { for (LineReader reader : readers) { if (reader.matches(line)) { rootNode = reader.process(rootNode, line); return true; } } return false; } /** * Finds a value in the configuration file * @param path a path using full stops * @return the value or null if nothing was found */ public String readValue(String path) { ConfNode node = followPath(path); if (node != null) { return node.getValue(); } else { return null; } } /** * Finds all available keys that hang from this path * * @param path a path using full stops * @return the values found */ public Set<String> readKeys(String path) { ConfNode node = followPath(path); if (node != null) { return node.getChildren().keySet(); } else { return new HashSet<String>(); } } /** * Checks if a key is present or not * * @param path a path using full stops * @return true if the key exists */ public boolean keyExists(String path) { return followPath(path) != null; } private ConfNode followPath(String path) { String[] paths = path.split("\\."); ConfNode start = rootNode; for (String pathName : paths) { if (!start.getChildren().containsKey(pathName)) { return null; } start = start.getChildren().get(pathName); } return start; } }