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/DbEntityValidator.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.DbEntity;
62  import org.objectstyle.cayenne.map.DerivedDbEntity;
63  import org.objectstyle.cayenne.project.ProjectPath;
64  import org.objectstyle.cayenne.util.Util;
65  
66  /**
67   * @author Andrei Adamchik
68   */
69  public class DbEntityValidator extends TreeNodeValidator {
70  
71    /**
72     * Constructor for DbEntityValidator.
73     */
74    public DbEntityValidator() {
75      super();
76    }
77  
78    public void validateObject(ProjectPath path, Validator validator) {
79      DbEntity ent = (DbEntity) path.getObject();
80      validateName(ent, path, validator);
81      validateAttributes(ent, path, validator);
82      validatePK(ent, path, validator);
83  
84      if ((ent instanceof DerivedDbEntity)
85        && ((DerivedDbEntity) ent).getParentEntity() == null) {
86        validator.registerError(
87          "No parent selected for derived entity \""
88            + ent.getName()
89            + "\".",
90          path);
91      }
92    }
93  
94    /**
95     * Validates the presence of the primary key. A warning is given only if the parent
96     * map also conatins an ObjEntity mapped to this entity, since unmapped primary key
97     * is ok if working with data rows.
98     */
99    protected void validatePK(
100     DbEntity ent,
101     ProjectPath path,
102     Validator validator) {
103     if (ent.getAttributes().size() > 0
104       && ent.getPrimaryKey().size() == 0) {
105       DataMap map = ent.getDataMap();
106       if (map != null && map.getMappedEntities(ent).size() > 0) {
107         // there is an objentity, so complain about no pk
108         validator.registerWarning(
109           "DbEntity \""
110             + ent.getName()
111             + "\" has no primary key attributes defined.",
112           path);
113       }
114     }
115   }
116 
117   /**
118    * Tables must have columns.
119    */
120   protected void validateAttributes(
121     DbEntity ent,
122     ProjectPath path,
123     Validator validator) {
124     if (ent.getAttributes().size() == 0) {
125       // complain about missing attributes
126       validator.registerWarning(
127         "DbEntity \"" + ent.getName() + "\" has no attributes defined.",
128         path);
129     }
130   }
131 
132   protected void validateName(
133     DbEntity ent,
134     ProjectPath path,
135     Validator validator) {
136     String name = ent.getName();
137 
138     // Must have name
139     if (Util.isEmptyString(name)) {
140       validator.registerError("Unnamed DbEntity.", path);
141       return;
142     }
143 
144     DataMap map = (DataMap) path.getObjectParent();
145     if (map == null) {
146       return;
147     }
148 
149     // check for duplicate names in the parent context
150     Iterator it = map.getDbEntities().iterator();
151     while (it.hasNext()) {
152       DbEntity otherEnt = (DbEntity) it.next();
153       if (otherEnt == ent) {
154         continue;
155       }
156 
157       if (name.equals(otherEnt.getName())) {
158         validator.registerError(
159           "Duplicate DbEntity name: " + name + ".",
160           path);
161         break;
162       }
163     }
164   }
165 }