1 28 29 package com.caucho.amber.expr; 30 31 import com.caucho.amber.field.AmberField; 32 import com.caucho.amber.query.FromItem; 33 import com.caucho.amber.query.QueryParseException; 34 import com.caucho.amber.query.QueryParser; 35 import com.caucho.amber.type.EntityType; 36 import com.caucho.util.L10N; 37 38 41 public class FromIdSchemaExpr extends SchemaExpr { 42 private static final L10N L = new L10N(FromIdSchemaExpr.class); 43 44 private IdExpr _id; 45 46 49 public FromIdSchemaExpr(IdExpr id) 50 { 51 _id = id; 52 } 53 54 57 public String getTailName() 58 { 59 return _id.getId(); 60 } 61 62 65 public SchemaExpr createField(QueryParser parser, String name) 66 throws QueryParseException 67 { 68 EntityType type = _id.getTargetType(); 69 70 AmberField field = type.getField(name); 71 72 if (field == null) 73 throw parser.error(L.l("{0}: '{1}' is an unknown field.", 74 type.getBeanClass().getName(), 75 name)); 76 77 AmberExpr fieldExpr = _id.createField(parser, name); 78 79 if (fieldExpr instanceof ManyToOneExpr) 80 return new ManyToOneSchemaExpr((ManyToOneExpr) fieldExpr, name); 81 82 86 87 if (fieldExpr instanceof OneToManyExpr) 88 return new OneToManySchemaExpr((OneToManyExpr) fieldExpr); 89 90 if (fieldExpr instanceof DependentEntityOneToOneExpr) 91 return new OneToOneSchemaExpr((DependentEntityOneToOneExpr) fieldExpr, name); 92 93 if (fieldExpr instanceof EmbeddedExpr) 94 return new EmbeddedSchemaExpr((EmbeddedExpr) fieldExpr, name); 95 96 throw parser.error(L.l("{0}: '{1}' must be a collection or one-to-one relationship.", 97 type.getBeanClass().getName(), 98 name)); 99 } 100 101 104 public FromItem addFromItem(QueryParser parser, String id) 105 throws QueryParseException 106 { 107 return parser.addFromItem(_id.getTargetType().getTable(), id); 108 } 109 } 110 | Popular Tags |