1 56 57 package org.objectstyle.cayenne.access.trans; 58 59 import java.util.Collections ; 60 import java.util.HashMap ; 61 import java.util.Iterator ; 62 import java.util.Map ; 63 64 import org.objectstyle.cayenne.CayenneRuntimeException; 65 import org.objectstyle.cayenne.DataObject; 66 import org.objectstyle.cayenne.ObjectId; 67 import org.objectstyle.cayenne.exp.Expression; 68 import org.objectstyle.cayenne.map.DbAttribute; 69 import org.objectstyle.cayenne.map.DbEntity; 70 import org.objectstyle.cayenne.map.DbJoin; 71 import org.objectstyle.cayenne.map.DbRelationship; 72 73 76 public class DataObjectMatchTranslator { 77 protected Map attributes; 78 protected Map values; 79 protected String operation; 80 protected Expression expression; 81 protected DbRelationship relationship; 82 83 public Expression getExpression() { 84 return expression; 85 } 86 87 public void setExpression(Expression expression) { 88 this.expression = expression; 89 } 90 91 public void reset() { 92 attributes = null; 93 values = null; 94 operation = null; 95 expression = null; 96 relationship = null; 97 } 98 99 103 public void setRelationship(DbRelationship rel) { 104 this.relationship = rel; 105 attributes = new HashMap (rel.getJoins().size() * 2); 106 107 if (rel.isToMany()) { 108 109 DbEntity ent = (DbEntity) rel.getTargetEntity(); 111 Iterator pk = ent.getPrimaryKey().iterator(); 112 113 while (pk.hasNext()) { 115 DbAttribute pkAttr = (DbAttribute) pk.next(); 116 attributes.put(pkAttr.getName(), pkAttr); 117 } 118 } else { 119 120 Iterator joins = rel.getJoins().iterator(); 122 while (joins.hasNext()) { 123 DbJoin join = (DbJoin) joins.next(); 124 125 attributes.put(join.getTargetName(), join.getSource()); 127 } 128 } 129 } 130 131 public void setDataObject(DataObject obj) { 132 if (obj == null) { 133 values = Collections.EMPTY_MAP; 134 return; 135 } 136 137 ObjectId id = obj.getObjectId(); 138 139 if (id == null) { 140 throw new CayenneRuntimeException("Null ObjectId, probably an attempt to use TRANSIENT object as a query parameter."); 141 } else if (id.isTemporary()) { 142 throw new CayenneRuntimeException("Temporary id, probably an attempt to use NEW object as a query parameter."); 143 } else { 144 values = id.getIdSnapshot(); 145 } 146 } 147 148 public Iterator keys() { 149 if (attributes == null) { 150 throw new IllegalStateException ( 151 "An attempt to use uninitialized DataObjectMatchTranslator: " 152 + "[attributes: null, values: " 153 + values 154 + "]"); 155 } 156 157 return attributes.keySet().iterator(); 158 } 159 160 public DbRelationship getRelationship() { 161 return relationship; 162 } 163 164 public DbAttribute getAttribute(String key) { 165 return (DbAttribute) attributes.get(key); 166 } 167 168 public Object getValue(String key) { 169 return values.get(key); 170 } 171 172 public void setOperation(String operation) { 173 this.operation = operation; 174 } 175 176 public String getOperation() { 177 return operation; 178 } 179 } 180 | Popular Tags |