/* * RHQ Management Platform * Copyright (C) 2005-2008 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ import java.util.Collections; import java.util.List; import net.augeas.Augeas; /** * * @author paji * This program prints an augeas tree given a configuration file * to look at. Note it uses the base path provided to determine * the lens to load. * For example * AugeasTree.main("/etc/hosts") will return the following tree * * files/etc/hosts * #comment[1] = Do not remove the following line, or various programs * #comment[2] = that require network functionality will fail. * 1 * ipaddr = 127.0.0.1 * canonical = localhost.localdomain * alias = localhost * 2 * ipaddr = ::1 * canonical = localhost6.localdomain6 * alias = localhost6 * 3 * ipaddr = 10.11.231.52 * canonical = dhcp231-52.rdu.redhat.com * alias = dhcp231-52 */ public class AugeasTree { private Augeas aug; private Node root; private List<String> excludes = Collections.EMPTY_LIST; public AugeasTree(String rootLocation, String file, List<String> excludableKeys) { aug = new Augeas(rootLocation, "", Augeas.SAVE_NEWFILE) ; excludes = excludableKeys; root = new Node(); root.setKey ("/files" + file); } public AugeasTree(String file, List<String> excludableKeys) { aug = new Augeas(Augeas.SAVE_NEWFILE) ; excludes = excludableKeys; root = new Node(); root.setKey ("/files" + file); } public static void main(String args[]) { AugeasTree tree; if (args.length == 2) { tree = new AugeasTree(args[1], args[0], Collections.EMPTY_LIST); } else if (args.length == 1) { tree = new AugeasTree(args[0], Collections.EMPTY_LIST); } else { System.out.println ("Usage: java AugeasTree <config file> [<root directory>]"); System.exit(1); return; } tree.generate(); tree.print(); } private boolean canExclude(String key) { for (String exclude : excludes) { if (key.contains(exclude)) { return true; } } return false; } private void print() { root.print(); } private void generate() { generate(root); } private void generate(Node parent) { String newRoot = parent.getKey().replace(" ", "\\ "); List<String> children = (List<String>)aug.match(newRoot + "/*" ); for (String child :children) { if (!canExclude(child)) { Node node = new Node(); node.setKey(child); node.setValue((String) aug.get(child.replace(" ", "\\ "))); parent.addChild(node); generate(node); } } } }