Source code: org/objectstyle/cayenne/project/validator/TreeNodeValidator.java
1 /* ====================================================================
2 *
3 * The ObjectStyle Group Software License, Version 1.0
4 *
5 * Copyright (c) 2002-2003 The ObjectStyle Group
6 * and individual authors of the software. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * 3. The end-user documentation included with the redistribution, if
21 * any, must include the following acknowlegement:
22 * "This product includes software developed by the
23 * ObjectStyle Group (http://objectstyle.org/)."
24 * Alternately, this acknowlegement may appear in the software itself,
25 * if and wherever such third-party acknowlegements normally appear.
26 *
27 * 4. The names "ObjectStyle Group" and "Cayenne"
28 * must not be used to endorse or promote products derived
29 * from this software without prior written permission. For written
30 * permission, please contact andrus@objectstyle.org.
31 *
32 * 5. Products derived from this software may not be called "ObjectStyle"
33 * nor may "ObjectStyle" appear in their names without prior written
34 * permission of the ObjectStyle Group.
35 *
36 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39 * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47 * SUCH DAMAGE.
48 * ====================================================================
49 *
50 * This software consists of voluntary contributions made by many
51 * individuals on behalf of the ObjectStyle Group. For more
52 * information on the ObjectStyle Group, please see
53 * <http://objectstyle.org/>.
54 *
55 */
56 package org.objectstyle.cayenne.project.validator;
57
58 import org.apache.log4j.Logger;
59 import org.objectstyle.cayenne.access.DataDomain;
60 import org.objectstyle.cayenne.access.DataNode;
61 import org.objectstyle.cayenne.map.DataMap;
62 import org.objectstyle.cayenne.map.DbAttribute;
63 import org.objectstyle.cayenne.map.DbEntity;
64 import org.objectstyle.cayenne.map.DbRelationship;
65 import org.objectstyle.cayenne.map.ObjAttribute;
66 import org.objectstyle.cayenne.map.ObjEntity;
67 import org.objectstyle.cayenne.map.ObjRelationship;
68 import org.objectstyle.cayenne.map.Procedure;
69 import org.objectstyle.cayenne.map.ProcedureParameter;
70 import org.objectstyle.cayenne.project.ProjectPath;
71
72 /**
73 * Validator of a single node in a project object tree.
74 * <i>Do not confuse with org.objectstyle.cayenne.access.DataNode.</i>
75 *
76 * @author Andrei Adamchik
77 */
78 public abstract class TreeNodeValidator {
79 private static Logger logObj = Logger.getLogger(TreeNodeValidator.class);
80
81 // initialize singleton validators
82 protected static final DomainValidator domainValidator = new DomainValidator();
83 protected static final DataNodeValidator nodeValidator = new DataNodeValidator();
84 protected static final DataMapValidator mapValidator = new DataMapValidator();
85 protected static final ObjEntityValidator objEntityValidator =
86 new ObjEntityValidator();
87 protected static final ObjAttributeValidator objAttrValidator =
88 new ObjAttributeValidator();
89 protected static final ObjRelationshipValidator objRelValidator =
90 new ObjRelationshipValidator();
91 protected static final DbEntityValidator dbEntityValidator = new DbEntityValidator();
92 protected static final DbAttributeValidator dbAttrValidator =
93 new DbAttributeValidator();
94 protected static final DbRelationshipValidator dbRelValidator =
95 new DbRelationshipValidator();
96
97 protected static final ProcedureValidator procedureValidator =
98 new ProcedureValidator();
99
100 protected static final ProcedureParameterValidator procedureParameterValidator =
101 new ProcedureParameterValidator();
102
103 /**
104 * Validates an object, appending any validation messages
105 * to the validator provided.
106 */
107 public static void validate(ProjectPath path, Validator validator) {
108 Object validatedObj = path.getObject();
109 TreeNodeValidator validatorObj = null;
110 if (validatedObj instanceof ObjAttribute) {
111 validatorObj = objAttrValidator;
112 }
113 else if (validatedObj instanceof ObjRelationship) {
114 validatorObj = objRelValidator;
115 }
116 else if (validatedObj instanceof ObjEntity) {
117 validatorObj = objEntityValidator;
118 }
119 else if (validatedObj instanceof DbAttribute) {
120 validatorObj = dbAttrValidator;
121 }
122 else if (validatedObj instanceof DbRelationship) {
123 validatorObj = dbRelValidator;
124 }
125 else if (validatedObj instanceof DbEntity) {
126 validatorObj = dbEntityValidator;
127 }
128 else if (validatedObj instanceof DataNode) {
129 validatorObj = nodeValidator;
130 }
131 else if (validatedObj instanceof DataMap) {
132 validatorObj = mapValidator;
133 }
134 else if (validatedObj instanceof DataDomain) {
135 validatorObj = domainValidator;
136 }
137 else if (validatedObj instanceof Procedure) {
138 validatorObj = procedureValidator;
139 }
140 else if (validatedObj instanceof ProcedureParameter) {
141 validatorObj = procedureParameterValidator;
142 }
143 else {
144 // ignore unknown nodes
145 String className =
146 (validatedObj != null)
147 ? validatedObj.getClass().getName()
148 : "(null object)";
149 logObj.info("Validation not supported for object of class: " + className);
150 return;
151 }
152
153 validatorObj.validateObject(path, validator);
154 }
155
156 /**
157 * Constructor for TreeNodeValidator.
158 */
159 public TreeNodeValidator() {
160 super();
161 }
162
163 /**
164 * Validates an object, appending any warnings or errors to the validator.
165 * Object to be validated is the last object in a <code>treeNodePath</code>
166 * array argument.
167 * Concrete implementations would expect an object of a specific type.
168 * Otherwise, ClassCastException will be thrown.
169 */
170 public abstract void validateObject(ProjectPath treeNodePath, Validator validator);
171 }