Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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 }