1 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.Procedure; 62 import org.objectstyle.cayenne.project.ProjectPath; 63 import org.objectstyle.cayenne.query.ProcedureQuery; 64 import org.objectstyle.cayenne.query.Query; 65 import org.objectstyle.cayenne.util.Util; 66 67 73 public class ProcedureQueryValidator extends TreeNodeValidator { 74 75 public void validateObject(ProjectPath treeNodePath, Validator validator) { 76 ProcedureQuery query = (ProcedureQuery) treeNodePath.getObject(); 77 78 validateName(query, treeNodePath, validator); 79 validateRoot(query, treeNodePath, validator); 80 validateResultType(query, treeNodePath, validator); 81 } 82 83 protected void validateRoot(Query query, ProjectPath path, Validator validator) { 84 DataMap map = (DataMap) path.firstInstanceOf(DataMap.class); 85 Object root = query.getRoot(); 86 87 if (root == null && map != null) { 88 validator.registerWarning("Query has no root", path); 89 } 90 91 if (root instanceof Procedure) { 93 Procedure procedure = (Procedure) root; 94 95 if (map != null && map.getProcedure(procedure.getName()) != procedure) { 97 validator.registerWarning("Invalid Procedure Root - " 98 + procedure.getName(), path); 99 } 100 101 return; 102 } 103 104 if (root instanceof String ) { 105 if (map != null && map.getProcedure(root.toString()) == null) { 106 validator.registerWarning("Invalid Procedure Root - " + root, path); 107 } 108 } 109 } 110 111 protected void validateName(Query query, ProjectPath path, Validator validator) { 112 String name = query.getName(); 113 114 if (Util.isEmptyString(name)) { 116 validator.registerError("Unnamed Query.", path); 117 return; 118 } 119 120 DataMap map = (DataMap) path.getObjectParent(); 121 if (map == null) { 122 return; 123 } 124 125 Iterator it = map.getQueries().iterator(); 127 while (it.hasNext()) { 128 Query otherQuery = (Query) it.next(); 129 if (otherQuery == query) { 130 continue; 131 } 132 133 if (name.equals(otherQuery.getName())) { 134 validator.registerError("Duplicate Query name: " + name + ".", path); 135 break; 136 } 137 } 138 } 139 140 protected void validateResultType( 141 ProcedureQuery query, 142 ProjectPath path, 143 Validator validator) { 144 145 if (query.isSelecting() 146 && !query.isFetchingDataRows() 147 && query.getResultClassName() == null) { 148 validator.registerWarning( 149 "Missing result entity for Procedure query fetching DataObjects.", 150 path); 151 } 152 } 153 } | Popular Tags |