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/ObjEntityValidator.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 java.util.Iterator;
59  
60  import org.objectstyle.cayenne.map.DataMap;
61  import org.objectstyle.cayenne.map.ObjEntity;
62  import org.objectstyle.cayenne.project.ProjectPath;
63  import org.objectstyle.cayenne.util.Util;
64  
65  /**
66   * @author Andrei Adamchik
67   */
68  public class ObjEntityValidator extends TreeNodeValidator {
69  
70      /**
71       * Constructor for ObjEntityValidator.
72       */
73      public ObjEntityValidator() {
74          super();
75      }
76  
77      public void validateObject(ProjectPath path, Validator validator) {
78          ObjEntity ent = (ObjEntity) path.getObject();
79          validateName(ent, path, validator);
80      validateClassName(ent, path, validator);
81      
82          // validate DbEntity presence
83          if (ent.getDbEntity() == null) {
84              validator.registerWarning("ObjEntity has no DbEntity mapping.", path);
85          }
86  
87          // validate Java Class
88          if (Util.isEmptyString(ent.getClassName())) {
89              validator.registerWarning("ObjEntity has no Java class mapped.", path);
90          }
91  
92      }
93  
94    private void validateClassName(ObjEntity ent, ProjectPath path, Validator validator) {
95      String className = ent.getClassName();
96      
97          if (Util.isEmptyString(className)) {
98            return; //empty is ok
99          }
100         
101     DataMap map = (DataMap) path.getObjectParent();
102         if (map == null) {
103             return;
104         }
105         
106         // check for duplicate class names in the parent context
107         Iterator it = map.getObjEntities().iterator();
108         while (it.hasNext()) {
109             ObjEntity otherEnt = (ObjEntity) it.next();
110             if (otherEnt == ent) {
111                 continue;
112             }
113 
114             if (className.equals(otherEnt.getClassName())) {
115                 validator.registerWarning("Duplicate ObjEntity class name: " + className + ".", path);
116                 break;
117             }
118         }
119 
120   }
121 
122 
123     protected void validateName(ObjEntity ent, ProjectPath path, Validator validator) {
124         String name = ent.getName();
125 
126         // Must have name
127         if (Util.isEmptyString(name)) {
128             validator.registerError("Unnamed ObjEntity.", path);
129             return;
130         }
131 
132         DataMap map = (DataMap) path.getObjectParent();
133         if (map == null) {
134             return;
135         }
136 
137         // check for duplicate names in the parent context
138         Iterator it = map.getObjEntities().iterator();
139         while (it.hasNext()) {
140             ObjEntity otherEnt = (ObjEntity) it.next();
141             if (otherEnt == ent) {
142                 continue;
143             }
144 
145             if (name.equals(otherEnt.getName())) {
146                 validator.registerError("Duplicate ObjEntity name: " + name + ".", path);
147                 break;
148             }
149         }
150     }
151 }