-package mir.config;\r
-\r
-import java.util.*;\r
-\r
-public class ConfigChecker {\r
- public final static int STRING = 0;\r
- public final static int INTEGER = 1;\r
- public final static int BOOLEAN = 2;\r
- public final static int DOUBLE = 3;\r
- public final static int PATH = 4;\r
-// public final static int ABSOLUTEPATH = 5;\r
-// public final static int ABSOLUTEURL = 6;\r
-\r
- private Node rootNode;\r
-\r
- public Node getRootNode() {\r
- return rootNode;\r
- }\r
-\r
- public ConfigChecker() {\r
- super();\r
-\r
- rootNode = new Node();\r
- }\r
-\r
- public void check(ConfigNode aNode) throws ConfigException {\r
- getRootNode().check(aNode);\r
- }\r
-\r
- public class Node {\r
-\r
- private Map subNodes;\r
- private Vector constraints;\r
-\r
- public Node() {\r
- subNodes = new HashMap();\r
- constraints = new Vector();\r
- }\r
-\r
- public Node getSubNode(String aName) {\r
- Node subNode = (Node) subNodes.get(aName);\r
-\r
- if (subNode==null) {\r
- subNode = new Node();\r
- subNodes.put(aName, subNode);\r
- }\r
-\r
- return subNode;\r
- }\r
-\r
- public void addExistenceConstraint(String aPropertyName) {\r
- constraints.add(new ExistenceConstraint(aPropertyName));\r
- }\r
-\r
- public void addTypeConstraint(String aPropertyName, int aType) {\r
- constraints.add(new TypeConstraint(aPropertyName, aType));\r
- }\r
-\r
- public void addExistenceAndTypeConstraint(String aPropertyName, int aType) {\r
- addExistenceConstraint(aPropertyName);\r
- addTypeConstraint(aPropertyName, aType);\r
- }\r
-\r
- public void check(ConfigNode aNode) throws ConfigException {\r
- Iterator iterator;\r
-\r
- iterator=constraints.iterator();\r
- while (iterator.hasNext()) {\r
- ((Constraint) iterator.next()).check(aNode);\r
- }\r
-\r
- iterator=subNodes.keySet().iterator();\r
- while (iterator.hasNext()) {\r
- Map.Entry entry = (Map.Entry) iterator.next();\r
- ((Node) entry.getValue()).check(aNode.getSubNode((String) entry.getKey()));\r
- }\r
-\r
- }\r
-\r
- private class Constraint {\r
- protected String propertyName;\r
-\r
- Constraint(String aPropertyName) {\r
- propertyName=aPropertyName;\r
- }\r
-\r
- public void check(ConfigNode aNode) throws ConfigException {\r
- };\r
- }\r
-\r
- private class ExistenceConstraint extends Constraint {\r
- ExistenceConstraint(String aPropertyName) {\r
- super(aPropertyName);\r
- }\r
-\r
- public void check(ConfigNode aNode) throws ConfigException {\r
- aNode.getRequiredStringProperty(propertyName);\r
- };\r
- }\r
-\r
- private class TypeConstraint extends Constraint {\r
- private int type;\r
-\r
- TypeConstraint(String aPropertyName, int aType) {\r
- super(aPropertyName);\r
-\r
- type=aType;\r
- }\r
-\r
- public void check(ConfigNode aNode) throws ConfigException {\r
- switch(type) {\r
- case INTEGER:\r
- aNode.getOptionalIntegerProperty(propertyName, new Integer(0));\r
- break;\r
- case STRING:\r
- aNode.getOptionalStringProperty(propertyName, "");\r
- break;\r
- case DOUBLE:\r
- aNode.getOptionalDoubleProperty(propertyName, new Double(0.0));\r
- break;\r
- case BOOLEAN:\r
- aNode.getOptionalBooleanProperty(propertyName, Boolean.FALSE);\r
- break;\r
- default:\r
- throw new ConfigException("Invalid value for type in type constraint: "+new Integer(type).toString());\r
- }\r
- }\r
- }\r
- }\r
-}\r
+/*
+ * Copyright (C) 2001, 2002 The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir 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 Mir; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * In addition, as a special exception, The Mir-coders gives permission to link
+ * the code of this program with the com.oreilly.servlet library, any library
+ * licensed under the Apache Software License, The Sun (tm) Java Advanced
+ * Imaging library (JAI), The Sun JIMI library (or with modified versions of
+ * the above that use the same license as the above), and distribute linked
+ * combinations including the two. You must obey the GNU General Public
+ * License in all respects for all of the code used other than the above
+ * mentioned libraries. If you modify this file, you may extend this exception
+ * to your version of the file, but you are not obligated to do so. If you do
+ * not wish to do so, delete this exception statement from your version.
+ */
+package mir.config;
+
+import mir.config.exceptions.ConfigFailure;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Vector;
+
+
+public class ConfigChecker {
+ public final static int STRING = 0;
+ public final static int INTEGER = 1;
+ public final static int BOOLEAN = 2;
+ public final static int DOUBLE = 3;
+ public final static int PATH = 4;
+
+ // public final static int ABSOLUTEPATH = 5;
+ // public final static int ABSOLUTEURL = 6;
+ private Node rootNode;
+
+ public ConfigChecker() {
+ super();
+
+ rootNode = new Node();
+ }
+
+ public Node getRootNode() {
+ return rootNode;
+ }
+
+ public void check(ConfigNode aNode) throws ConfigFailure {
+ getRootNode().check(aNode);
+ }
+
+ public class Node {
+ private Map subNodes;
+ private Vector constraints;
+
+ public Node() {
+ subNodes = new HashMap();
+ constraints = new Vector();
+ }
+
+ public Node getSubNode(String aName) {
+ Node subNode = (Node) subNodes.get(aName);
+
+ if (subNode == null) {
+ subNode = new Node();
+ subNodes.put(aName, subNode);
+ }
+
+ return subNode;
+ }
+
+ public void addExistenceConstraint(String aPropertyName) {
+ constraints.add(new ExistenceConstraint(aPropertyName));
+ }
+
+ public void addTypeConstraint(String aPropertyName, int aType) {
+ constraints.add(new TypeConstraint(aPropertyName, aType));
+ }
+
+ public void addExistenceAndTypeConstraint(String aPropertyName, int aType) {
+ addExistenceConstraint(aPropertyName);
+ addTypeConstraint(aPropertyName, aType);
+ }
+
+ public void check(ConfigNode aNode) throws ConfigFailure {
+ Iterator iterator;
+
+ iterator = constraints.iterator();
+
+ while (iterator.hasNext()) {
+ ((Constraint) iterator.next()).check(aNode);
+ }
+
+ iterator = subNodes.keySet().iterator();
+
+ while (iterator.hasNext()) {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ ((Node) entry.getValue()).check(aNode.getSubNode(
+ (String) entry.getKey()));
+ }
+ }
+
+ private class Constraint {
+ protected String propertyName;
+
+ Constraint(String aPropertyName) {
+ propertyName = aPropertyName;
+ }
+
+ public void check(ConfigNode aNode) throws ConfigFailure {
+ }
+ }
+
+ private class ExistenceConstraint extends Constraint {
+ ExistenceConstraint(String aPropertyName) {
+ super(aPropertyName);
+ }
+
+ public void check(ConfigNode aNode) throws ConfigFailure {
+ aNode.getRequiredStringProperty(propertyName);
+ }
+ }
+
+ private class TypeConstraint extends Constraint {
+ private int type;
+
+ TypeConstraint(String aPropertyName, int aType) {
+ super(aPropertyName);
+
+ type = aType;
+ }
+
+ public void check(ConfigNode aNode) throws ConfigFailure {
+ switch (type) {
+ case INTEGER:
+ aNode.getOptionalIntegerProperty(propertyName, new Integer(0));
+
+ break;
+
+ case STRING:
+ aNode.getOptionalStringProperty(propertyName, "");
+
+ break;
+
+ case DOUBLE:
+ aNode.getOptionalDoubleProperty(propertyName, new Double(0.0));
+
+ break;
+
+ case BOOLEAN:
+ aNode.getOptionalBooleanProperty(propertyName, Boolean.FALSE);
+
+ break;
+
+ default:
+ throw new ConfigFailure("Invalid value for type in type constraint: " +
+ new Integer(type).toString());
+ }
+ }
+ }
+ }
+}