2 * Copyright (C) 2001, 2002 The Mir-coders group
4 * This file is part of Mir.
6 * Mir is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * Mir is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with Mir; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 * In addition, as a special exception, The Mir-coders gives permission to link
21 * the code of this program with the com.oreilly.servlet library, any library
22 * licensed under the Apache Software License, The Sun (tm) Java Advanced
23 * Imaging library (JAI), The Sun JIMI library (or with modified versions of
24 * the above that use the same license as the above), and distribute linked
25 * combinations including the two. You must obey the GNU General Public
26 * License in all respects for all of the code used other than the above
27 * mentioned libraries. If you modify this file, you may extend this exception
28 * to your version of the file, but you are not obligated to do so. If you do
29 * not wish to do so, delete this exception statement from your version.
36 import mir.config.exceptions.*;
\r
38 public class ConfigChecker {
\r
39 public final static int STRING = 0;
\r
40 public final static int INTEGER = 1;
\r
41 public final static int BOOLEAN = 2;
\r
42 public final static int DOUBLE = 3;
\r
43 public final static int PATH = 4;
\r
44 // public final static int ABSOLUTEPATH = 5;
\r
45 // public final static int ABSOLUTEURL = 6;
\r
47 private Node rootNode;
\r
49 public Node getRootNode() {
\r
53 public ConfigChecker() {
\r
56 rootNode = new Node();
\r
59 public void check(ConfigNode aNode) throws ConfigException {
\r
60 getRootNode().check(aNode);
\r
65 private Map subNodes;
\r
66 private Vector constraints;
\r
69 subNodes = new HashMap();
\r
70 constraints = new Vector();
\r
73 public Node getSubNode(String aName) {
\r
74 Node subNode = (Node) subNodes.get(aName);
\r
76 if (subNode==null) {
\r
77 subNode = new Node();
\r
78 subNodes.put(aName, subNode);
\r
84 public void addExistenceConstraint(String aPropertyName) {
\r
85 constraints.add(new ExistenceConstraint(aPropertyName));
\r
88 public void addTypeConstraint(String aPropertyName, int aType) {
\r
89 constraints.add(new TypeConstraint(aPropertyName, aType));
\r
92 public void addExistenceAndTypeConstraint(String aPropertyName, int aType) {
\r
93 addExistenceConstraint(aPropertyName);
\r
94 addTypeConstraint(aPropertyName, aType);
\r
97 public void check(ConfigNode aNode) throws ConfigException {
\r
100 iterator=constraints.iterator();
\r
101 while (iterator.hasNext()) {
\r
102 ((Constraint) iterator.next()).check(aNode);
\r
105 iterator=subNodes.keySet().iterator();
\r
106 while (iterator.hasNext()) {
\r
107 Map.Entry entry = (Map.Entry) iterator.next();
\r
108 ((Node) entry.getValue()).check(aNode.getSubNode((String) entry.getKey()));
\r
113 private class Constraint {
\r
114 protected String propertyName;
\r
116 Constraint(String aPropertyName) {
\r
117 propertyName=aPropertyName;
\r
120 public void check(ConfigNode aNode) throws ConfigException {
\r
124 private class ExistenceConstraint extends Constraint {
\r
125 ExistenceConstraint(String aPropertyName) {
\r
126 super(aPropertyName);
\r
129 public void check(ConfigNode aNode) throws ConfigException {
\r
130 aNode.getRequiredStringProperty(propertyName);
\r
134 private class TypeConstraint extends Constraint {
\r
137 TypeConstraint(String aPropertyName, int aType) {
\r
138 super(aPropertyName);
\r
143 public void check(ConfigNode aNode) throws ConfigException {
\r
146 aNode.getOptionalIntegerProperty(propertyName, new Integer(0));
\r
149 aNode.getOptionalStringProperty(propertyName, "");
\r
152 aNode.getOptionalDoubleProperty(propertyName, new Double(0.0));
\r
155 aNode.getOptionalBooleanProperty(propertyName, Boolean.FALSE);
\r
158 throw new ConfigException("Invalid value for type in type constraint: "+new Integer(type).toString());
\r