Source code: org/objectstyle/cayenne/project/validator/ProcedureValidator.java
1 package org.objectstyle.cayenne.project.validator;
2
3 import java.util.Iterator;
4 import java.util.List;
5
6 import org.apache.log4j.Logger;
7 import org.objectstyle.cayenne.map.DataMap;
8 import org.objectstyle.cayenne.map.Procedure;
9 import org.objectstyle.cayenne.project.ProjectPath;
10 import org.objectstyle.cayenne.util.Util;
11
12 /**
13 * Validator for stored procedures.
14 *
15 * @author Andrei Adamchik
16 */
17 public class ProcedureValidator extends TreeNodeValidator {
18 private static Logger logObj = Logger.getLogger(ProcedureValidator.class);
19
20 public void validateObject(ProjectPath treeNodePath, Validator validator) {
21 Procedure procedure = (Procedure) treeNodePath.getObject();
22 validateName(procedure, treeNodePath, validator);
23
24 // check that return value is present
25 if(procedure.isReturningValue()) {
26 List parameters = procedure.getCallParameters();
27 if(parameters.size() == 0) {
28 validator.registerWarning("Procedure returns a value, but has no parameters.", treeNodePath);
29 }
30 }
31 }
32
33 protected void validateName(Procedure procedure, ProjectPath path, Validator validator) {
34 String name = procedure.getName();
35
36 // Must have name
37 if (Util.isEmptyString(name)) {
38 validator.registerError("Unnamed Procedure.", path);
39 return;
40 }
41
42 DataMap map = (DataMap) path.getObjectParent();
43 if (map == null) {
44 return;
45 }
46
47 // check for duplicate names in the parent context
48 Iterator it = map.getProcedures().iterator();
49 while (it.hasNext()) {
50 Procedure otherProcedure = (Procedure) it.next();
51 if (otherProcedure == procedure) {
52 continue;
53 }
54
55 if (name.equals(otherProcedure.getName())) {
56 validator.registerError("Duplicate Procedure name: " + name + ".", path);
57 break;
58 }
59 }
60 }
61
62 }