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.ObjEntity; 62 import org.objectstyle.cayenne.project.ProjectPath; 63 import org.objectstyle.cayenne.query.Query; 64 import org.objectstyle.cayenne.query.SQLTemplate; 65 import org.objectstyle.cayenne.util.Util; 66 67 73 public class SQLTemplateValidator extends TreeNodeValidator { 74 75 public void validateObject(ProjectPath treeNodePath, Validator validator) { 76 SQLTemplate query = (SQLTemplate) treeNodePath.getObject(); 77 78 validateName(query, treeNodePath, validator); 79 validateRoot(query, treeNodePath, validator); 80 validateResultType(query, treeNodePath, validator); 81 validateDefaultSQL(query, treeNodePath, validator); 82 } 83 84 protected void validateDefaultSQL( 85 SQLTemplate query, 86 ProjectPath path, 87 Validator validator) { 88 89 if (Util.isEmptyString(query.getDefaultTemplate())) { 90 92 Iterator it = query.getTemplateKeys().iterator(); 93 while (it.hasNext()) { 94 String key = (String ) it.next(); 95 if (!Util.isEmptyString(query.getCustomTemplate(key))) { 96 return; 97 } 98 } 99 100 validator.registerWarning("Query has no default SQL template", path); 101 } 102 } 103 104 protected void validateRoot(Query query, ProjectPath path, Validator validator) { 105 DataMap map = (DataMap) path.firstInstanceOf(DataMap.class); 106 if (query.getRoot() == null && map != null) { 107 validator.registerWarning("Query has no root", path); 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 SQLTemplate query, 142 ProjectPath path, 143 Validator validator) { 144 145 if (query.isSelecting() 146 && !query.isFetchingDataRows() 147 && query.getRoot() != null 148 && !(query.getRoot() instanceof ObjEntity || query.getRoot() instanceof Class )) { 149 150 validator.registerWarning( 151 "Missing result entity for SQLTemplate fetching DataObjects.", 152 path); 153 } 154 } 155 } | Popular Tags |