This commit is contained in:
Timo Westkämper 2009-10-26 14:27:18 +00:00
parent ae50651319
commit da275ff778
4 changed files with 42 additions and 34 deletions

View File

@ -31,12 +31,10 @@ public final class BeanModel implements Comparable<BeanModel> {
private boolean entityModel = true;
private final Set<PropertyModel> entityProperties = new TreeSet<PropertyModel>();
// mutable
private int escapeSuffix = 1;
private boolean hasLists, hasMaps;
private boolean hasLists, hasMaps, hasEntityFields;
private final String prefix;
@ -79,7 +77,7 @@ public final class BeanModel implements Comparable<BeanModel> {
hasLists = true;
break;
case ENTITY:
entityProperties.add(field);
hasEntityFields = true;
}
}
@ -116,9 +114,9 @@ public final class BeanModel implements Comparable<BeanModel> {
return typeModel.getName();
}
public Set<PropertyModel> getEntityProperties() {
return entityProperties;
}
// public Set<PropertyModel> getEntityProperties() {
// return entityProperties;
// }
public Set<PropertyModel> getProperties() {
return properties;
@ -150,7 +148,7 @@ public final class BeanModel implements Comparable<BeanModel> {
}
public boolean hasEntityFields() {
return !entityProperties.isEmpty();
return hasEntityFields;
}
public int hashCode() {

View File

@ -122,7 +122,7 @@ public class EntitySerializer implements Serializer{
StringBuilder builder = new StringBuilder();
boolean hasEntityFields = !model.getEntityProperties().isEmpty();
boolean hasEntityFields = model.hasEntityFields();
String thisOrSuper = hasEntityFields ? "this" : "super";
// 1
@ -185,7 +185,7 @@ public class EntitySerializer implements Serializer{
protected void initEntityFields(StringBuilder builder, BeanModel model) {
BeanModel superModel = model.getSuperModel();
if (superModel != null && !superModel.getEntityProperties().isEmpty()){
if (superModel != null && superModel.hasEntityFields()){
String superQueryType = superModel.getPrefix() + superModel.getSimpleName();
if (!superModel.getPackageName().equals(model.getPackageName())){
superQueryType = superModel.getPackageName() + "." + superQueryType;
@ -193,15 +193,20 @@ public class EntitySerializer implements Serializer{
builder.append(" this._super = new " + superQueryType + "(type, entityName, metadata, inits);\n");
}
for (PropertyModel field : model.getEntityProperties()){
builder.append(" this." + field.getEscapedName() + " = ");
if (!field.isInherited()){
builder.append("inits.isInitialized(\""+field.getName()+"\") ? ");
builder.append("new " + field.getQueryTypeName() + "(PathMetadata.forProperty(this,\"" + field.getName() + "\"), inits.getInits(\""+field.getName()+"\")) : null;\n");
}else{
builder.append("_super." + field.getEscapedName() +";\n");
for (PropertyModel field : model.getProperties()){
if (field.getTypeCategory() == TypeCategory.ENTITY){
builder.append(" this." + field.getEscapedName() + " = ");
if (!field.isInherited()){
builder.append("inits.isInitialized(\""+field.getName()+"\") ? ");
builder.append("new " + field.getQueryTypeName() + "(PathMetadata.forProperty(this,\"" + field.getName() + "\"), inits.getInits(\""+field.getName()+"\")) : null;\n");
}else{
builder.append("_super." + field.getEscapedName() +";\n");
}
}else if (field.isInherited() && superModel != null && superModel.hasEntityFields()){
builder.append(" this." + field.getEscapedName() + " = ");
builder.append("_super." + field.getEscapedName() + ";\n");
}
}
}
}
protected void constructorsForVariables(StringBuilder builder, BeanModel model) {
@ -210,7 +215,7 @@ public class EntitySerializer implements Serializer{
final String localName = model.getLocalName();
final String genericName = model.getGenericName();
boolean hasEntityFields = !model.getEntityProperties().isEmpty();
boolean hasEntityFields = model.hasEntityFields();
String thisOrSuper = hasEntityFields ? "this" : "super";
if (!localName.equals(genericName)){
@ -266,11 +271,14 @@ public class EntitySerializer implements Serializer{
protected void introInits(StringBuilder builder, BeanModel model) {
if (model.hasEntityFields()){
List<String> inits = new ArrayList<String>();
for (PropertyModel property : model.getEntityProperties()){
for (String init : property.getInits()){
inits.add(property.getEscapedName() + "." + init);
for (PropertyModel property : model.getProperties()){
if (property.getTypeCategory() == TypeCategory.ENTITY){
for (String init : property.getInits()){
inits.add(property.getEscapedName() + "." + init);
}
}
}
}
if (!inits.isEmpty()){
builder.append(" private static final PathInits __inits = new PathInits(\"*\"");
for (String init : inits){
@ -377,7 +385,6 @@ public class EntitySerializer implements Serializer{
protected void mapOfEntity(PropertyModel field, Writer writer) throws IOException{
final String keyType = field.getParameterName(0);
final String valueType = field.getParameterName(1);
// final String simpleName = field.getSimpleTypeName();
final String genericKey = field.getGenericParameterName(0);
final String genericValue = field.getGenericParameterName(1);
@ -419,8 +426,6 @@ public class EntitySerializer implements Serializer{
protected void mapOfSimpleAccessor(PropertyModel field, Writer writer) throws IOException {
final String escapedName = field.getEscapedName();
// final String keyType = field.getParameterName(0);
// final String valueType = field.getParameterName(1);
final String genericKey = field.getGenericParameterName(0);
final String genericValue = field.getGenericParameterName(1);
@ -448,9 +453,10 @@ public class EntitySerializer implements Serializer{
BeanModel superModel = field.getBeanModel().getSuperModel();
// construct value
StringBuilder value = new StringBuilder();
if (field.isInherited() && superModel != null && !superModel.hasEntityFields()){
// copy from super
value.append("_super." + field.getEscapedName());
if (field.isInherited() && superModel != null){
if (!superModel.hasEntityFields()){
value.append("_super." + field.getEscapedName());
}
}else{
value.append(factoryMethod + "(\"" + field.getName() + "\"");
for (String arg : args){
@ -464,7 +470,11 @@ public class EntitySerializer implements Serializer{
if (field.isInherited()){
builder.append(" // inherited\n");
}
builder.append(" public final " + type + " " + field.getEscapedName() + " = " + value + ";\n\n");
if (value.length() > 0){
builder.append(" public final " + type + " " + field.getEscapedName() + " = " + value + ";\n\n");
}else{
builder.append(" public final " + type + " " + field.getEscapedName() + ";\n\n");
}
writer.append(builder.toString());
}

View File

@ -25,7 +25,7 @@ public class SupertypeSerializer extends EntitySerializer{
StringBuilder builder = new StringBuilder();
if (model.getEntityProperties().isEmpty()){
if (!model.hasEntityFields()){
builder.append(" public "+queryType+"(PEntity<? extends "+ genericName+"> entity){\n");
builder.append(" super(entity.getType(), entity.getEntityName(), entity.getMetadata());\n");
builder.append(" }\n\n");
@ -33,7 +33,7 @@ public class SupertypeSerializer extends EntitySerializer{
}else{
builder.append(" public "+queryType+"(Class<? extends "+genericName+"> type, @NotEmpty String entityName, PathMetadata<?> metadata, PathInits inits) {\n");
builder.append(" super(type, entityName, metadata);\n");
if (!model.getEntityProperties().isEmpty()){
if (model.hasEntityFields()){
initEntityFields(builder, model);
}
builder.append(" }\n");
@ -54,7 +54,7 @@ public class SupertypeSerializer extends EntitySerializer{
@Override
protected void introImports(StringBuilder builder, BeanModel model) {
if (!model.getEntityProperties().isEmpty()){
if (model.hasEntityFields()){
builder.append("import com.mysema.query.util.*;\n");
}
builder.append("import com.mysema.query.types.path.*;\n\n");

View File

@ -39,7 +39,7 @@ public class ClassModelTest {
// assertEquals(2, type.getSimpleCollections().size());
// assertEquals(1, type.getEntityLists().size());
// assertEquals(1, type.getSimpleLists().size());
assertEquals(1, type.getEntityProperties().size());
// assertEquals(1, type.getEntityProperties().size());
// assertEquals(1, type.getStringProperties().size());
// assertEquals(2, type.getNumericProperties().size());
// assertEquals(3, type.getSimpleProperties().size());