Skip to content

Commit

Permalink
Refactor Entity Translators
Browse files Browse the repository at this point in the history
  • Loading branch information
minborg committed Mar 1, 2015
1 parent 0351ee4 commit f57362b
Show file tree
Hide file tree
Showing 7 changed files with 190 additions and 137 deletions.
Expand Up @@ -17,15 +17,21 @@
package com.speedment.orm.code.model.java.entity;

import com.speedment.codegen.lang.models.ClassOrInterface;
import com.speedment.codegen.lang.models.Constructor;
import com.speedment.codegen.lang.models.Field;
import com.speedment.codegen.lang.models.File;
import com.speedment.codegen.lang.models.Javadoc;
import com.speedment.codegen.lang.models.Type;
import com.speedment.codegen.lang.models.constants.Default;
import com.speedment.codegen.lang.models.implementation.ClassImpl;
import com.speedment.codegen.lang.models.implementation.FileImpl;
import com.speedment.codegen.lang.models.implementation.InterfaceImpl;
import com.speedment.codegen.lang.models.implementation.JavadocImpl;
import com.speedment.codegen.lang.models.implementation.TypeImpl;
import com.speedment.orm.code.model.java.DefaultJavaClassTranslator;
import com.speedment.orm.config.model.Column;
import com.speedment.orm.config.model.Table;
import java.util.function.BiConsumer;

/**
*
Expand Down Expand Up @@ -86,4 +92,45 @@ protected boolean isInImplPackage() {
return false;
}

protected class BaseInterface extends InterfaceImpl {

public BaseInterface(String name, BiConsumer<BaseInterface, Column> columnActor) {
super(name);
public_();
columns().forEachOrdered(c -> columnActor.accept(this, c));
}

public Field fieldFor(Column c) {
return Field.of(variableName(c), Type.of(c.getMappedClass()));
}

}

protected class BaseClass extends ClassImpl {

public BaseClass(String name, BiConsumer<BaseClass, Column> columnActor) {
super(name);
public_();
columns().forEachOrdered(c -> columnActor.accept(this, c));
}

public Field fieldFor(Column c) {
return Field.of(variableName(c), Type.of(c.getMappedClass()));
}

public Constructor emptyConstructor() {
return Constructor.of().public_();
}

public Constructor copyConstructor() {
return with(Constructor.of().public_().add(Field.of(variableName(), INTERFACE.getType()).final_()), constructor -> {
columns().forEachOrdered(c -> {
constructor.add("set" + typeName(c) + "(" + variableName() + ".get" + typeName(c) + "());");
});
});

}

}

}
Expand Up @@ -16,15 +16,9 @@
*/
package com.speedment.orm.code.model.java.entity;

import com.speedment.codegen.lang.models.ClassOrInterface;
import com.speedment.codegen.lang.models.Constructor;
import com.speedment.codegen.lang.models.Type;
import com.speedment.codegen.lang.models.Class;
import com.speedment.codegen.lang.models.Method;
import com.speedment.codegen.lang.models.constants.Default;
import com.speedment.codegen.lang.models.implementation.ClassImpl;
import com.speedment.codegen.lang.models.implementation.ConstructorImpl;
import com.speedment.codegen.lang.models.implementation.FieldImpl;
import com.speedment.codegen.lang.models.implementation.MethodImpl;
import com.speedment.codegen.lang.models.implementation.TypeImpl;
import com.speedment.orm.config.model.Table;

/**
Expand All @@ -38,42 +32,32 @@ public EntityBeanImplTranslator(Table configEntity) {
}

@Override
protected ClassOrInterface make() {
final com.speedment.codegen.lang.models.Class clazz = new ClassImpl(BEAN.getImplType().getName())
.public_()
.add(BEAN.getType());

clazz.add(new ConstructorImpl().public_());

final Constructor copyConstructor = new ConstructorImpl().public_();
copyConstructor.add(new FieldImpl(variableName(), INTERFACE.getType()).final_());
clazz.add(copyConstructor);

columns().forEach(c -> {
final Type columnType = new TypeImpl(c.getMappedClass());
clazz.add(new FieldImpl(variableName(c), columnType));

clazz.add(new MethodImpl("get" + typeName(c), columnType)
.public_()
.add(Default.OVERRIDE)
.add("return " + variableName(c) + ";"));
clazz.add(new MethodImpl("set" + typeName(c), BEAN.getType())
.public_()
.add(Default.OVERRIDE)
.add(new FieldImpl(variableName(c), columnType))
.add("this." + variableName(c) + " = " + variableName(c) + ";")
.add("return this;")
);
copyConstructor.add("set" + typeName(c) + "(" + variableName() + ".get" + typeName(c) + "());");
protected Class make() {
return with(new BaseClass(BEAN.getImplType().getName(), (cl, c) -> {
cl
.add(cl.fieldFor(c).private_())
.add(Method.of("get" + typeName(c), cl.fieldFor(c).getType())
.public_()
.add(Default.OVERRIDE)
.add("return " + variableName(c) + ";"))
.add(Method.of("set" + typeName(c), BEAN.getType())
.public_()
.add(Default.OVERRIDE)
.add(cl.fieldFor(c))
.add("this." + variableName(c) + " = " + variableName(c) + ";")
.add("return this;")
);
}), cl -> {
cl
.add(BEAN.getType())
.add(cl.emptyConstructor())
.add(cl.copyConstructor());
});

// clazz.call(new SetGetAdd());
return clazz;
}

@Override
protected String getJavadocRepresentText() {
return "A bean";
return "A bean implementation";
}

@Override
Expand Down
Expand Up @@ -16,16 +16,10 @@
*/
package com.speedment.orm.code.model.java.entity;

import com.speedment.codegen.lang.models.ClassOrInterface;
import com.speedment.codegen.lang.models.Constructor;
import com.speedment.codegen.lang.models.Method;
import com.speedment.codegen.lang.models.Type;
import com.speedment.codegen.lang.models.Class;
import com.speedment.codegen.lang.models.constants.Default;
import com.speedment.codegen.lang.models.implementation.ClassImpl;
import com.speedment.codegen.lang.models.implementation.ConstructorImpl;
import com.speedment.codegen.lang.models.implementation.FieldImpl;
import com.speedment.codegen.lang.models.implementation.MethodImpl;
import com.speedment.codegen.lang.models.implementation.TypeImpl;
import com.speedment.orm.config.model.Table;

/**
Expand All @@ -41,48 +35,36 @@ public EntityBuilderImplTranslator(Table configEntity) {
}

@Override
protected ClassOrInterface make() {
final com.speedment.codegen.lang.models.Class clazz = new ClassImpl(BUILDER.getImplType().getName())
.public_()
.add(BUILDER.getType());

clazz.add(new ConstructorImpl().public_());

final Constructor copyConstructor = new ConstructorImpl().public_();
copyConstructor.add(new FieldImpl(variableName(), INTERFACE.getType()).final_());
clazz.add(copyConstructor);

columns().forEach(c -> {
final Type columnType = new TypeImpl(c.getMappedClass());
clazz.add(new FieldImpl(variableName(c), columnType).private_());

clazz.add(new MethodImpl("get" + typeName(c), columnType)
.public_()
.add(Default.OVERRIDE)
.add("return " + variableName(c) + ";"));
clazz.add(new MethodImpl(BUILDER_METHOD_PREFIX + typeName(c), BUILDER.getType())
.public_()
.add(Default.OVERRIDE)
.add(new FieldImpl(variableName(c), columnType))
.add("this." + variableName(c) + " = " + variableName(c) + ";")
.add("return this;")
);
copyConstructor.add(BUILDER_METHOD_PREFIX + typeName(c) + "(" + variableName() + ".get" + typeName(c) + "());");
protected Class make() {
return with(new BaseClass(BUILDER.getImplType().getName(), (cl, c) -> {
cl
.add(cl.fieldFor(c).private_())
.add(Method.of("get" + typeName(c), Type.of(c.getMappedClass()))
.public_()
.add(Default.OVERRIDE)
.add("return " + variableName(c) + ";"))
.add(Method.of(BUILDER_METHOD_PREFIX + typeName(c), BUILDER.getType())
.public_()
.add(Default.OVERRIDE)
.add(cl.fieldFor(c))
.add("this." + variableName(c) + " = " + variableName(c) + ";")
.add("return this;")
);
}), cl -> {
cl
.add(BUILDER.getType())
.add(cl.emptyConstructor())
.add(cl.copyConstructor())
.add(Method.of("build", INTERFACE.getType())
.add(Default.OVERRIDE)
.public_()
.add("return new " + INTERFACE.getImplType().getName() + "(this);"));
});

final Method build = new MethodImpl("build", INTERFACE.getType())
.add(Default.OVERRIDE)
.public_()
.add("return new " + INTERFACE.getImplType().getName() + "(this);");
clazz.add(build);

// clazz.call(new SetGetAdd());
return clazz;
}

@Override
protected String getJavadocRepresentText() {
return "An builder";
return "A builder implementation ";
}

@Override
Expand Down
Expand Up @@ -16,15 +16,10 @@
*/
package com.speedment.orm.code.model.java.entity;

import com.speedment.codegen.lang.models.ClassOrInterface;
import com.speedment.codegen.lang.models.Constructor;
import com.speedment.codegen.lang.models.Type;
import com.speedment.codegen.lang.models.Class;
import com.speedment.codegen.lang.models.Method;
import com.speedment.codegen.lang.models.constants.Default;
import com.speedment.codegen.lang.models.implementation.ClassImpl;
import com.speedment.codegen.lang.models.implementation.ConstructorImpl;
import com.speedment.codegen.lang.models.implementation.FieldImpl;
import com.speedment.codegen.lang.models.implementation.MethodImpl;
import com.speedment.codegen.lang.models.implementation.TypeImpl;
import com.speedment.orm.config.model.Table;

/**
Expand All @@ -38,27 +33,41 @@ public EntityImplTranslator(Table configEntity) {
}

@Override
protected ClassOrInterface make() {
final com.speedment.codegen.lang.models.Class clazz = new ClassImpl(INTERFACE.getImplType().getName())
.public_()
.add(INTERFACE.getType());

final Constructor constructor = new ConstructorImpl().public_();
constructor.add(new FieldImpl(variableName(), INTERFACE.getType()).final_());
clazz.add(constructor);

columns().forEach(c -> {
final Type getterType = new TypeImpl(c.getMappedClass());
clazz.add(new FieldImpl(variableName(c), getterType).private_().final_());
clazz.add(new MethodImpl("get" + typeName(c), getterType).public_().add("return " + variableName(c) + ";").add(Default.OVERRIDE));
constructor.add("this." + variableName(c) + " = " + variableName() + "." + "get" + typeName(c) + "();");
protected Class make() {
return with(new BaseClass(INTERFACE.getImplType().getName(), (cl, c) -> {
cl
.add(cl.fieldFor(c).private_().final_())
.add(Method.of("get" + typeName(c), Type.of(c.getMappedClass()))
.add(Default.OVERRIDE)
.public_()
.add("return " + variableName(c) + ";"));
}), cl -> {
cl
.add(INTERFACE.getType())
.add(cl.emptyConstructor())
.add(cl.copyConstructor());
});
return clazz;
//
// final com.speedment.codegen.lang.models.Class clazz = new ClassImpl(INTERFACE.getImplType().getName())
// .public_()
// .add(INTERFACE.getType());
//
// final Constructor constructor = new ConstructorImpl().public_();
// constructor.add(new FieldImpl(variableName(), INTERFACE.getType()).final_());
// clazz.add(constructor);
//
// columns().forEach(c -> {
// final Type getterType = new TypeImpl(c.getMappedClass());
// clazz.add(new FieldImpl(variableName(c), getterType).private_().final_());
// clazz.add(new MethodImpl("get" + typeName(c), getterType).public_().add("return " + variableName(c) + ";").add(Default.OVERRIDE));
// constructor.add("this." + variableName(c) + " = " + variableName() + "." + "get" + typeName(c) + "();");
// });
// return clazz;
}

@Override
protected String getJavadocRepresentText() {
return "An implementation";
return "An immutable implementation";
}

@Override
Expand Down
Expand Up @@ -17,8 +17,6 @@
package com.speedment.orm.code.model.java.entity;

import com.speedment.codegen.lang.models.AnnotationUsage;
import com.speedment.codegen.lang.models.ClassOrInterface;
import com.speedment.codegen.lang.models.Field;
import com.speedment.codegen.lang.models.Interface;
import com.speedment.codegen.lang.models.Method;
import com.speedment.codegen.lang.models.Type;
Expand All @@ -39,48 +37,31 @@ public EntityTranslator(Table configEntity) {
}

@Override
protected ClassOrInterface make() {
return with(Interface.of(INTERFACE.getType().getName()), i -> {
protected Interface make() {
return with(new BaseInterface(INTERFACE.getType().getName(), (i, c) -> {
i.add(Method.of("get" + typeName(c), Type.of(c.getMappedClass())));
}), i -> {
i
.public_()
.add(AnnotationUsage.of(Type.of(Api.class)))
.add(bean())
.add(builder());
columns().forEach(c -> {
i.add(Method.of("get" + typeName(c), Type.of(c.getMappedClass())));
});
});

}

private Interface bean() {
return with(Interface.of("Bean"), i -> {
i
.public_()
.add(INTERFACE.getType());

columns().forEach(c -> {
final Field f = Field.of(typeName(c), Type.of(c.getMappedClass()));
final Method m = Method.of("set" + typeName(c), Default.VOID).add(f);
i.add(m);
});

return with(new BaseInterface("Bean", (i, c) -> {
i.add(Method.of("set" + typeName(c), Default.VOID).add(i.fieldFor(c)));
}), i -> {
i.add(INTERFACE.getType());
});
}

private Interface builder() {
return with(Interface.of("Builder"), i -> {
i
.public_()
.add(INTERFACE.getType())
return with(new BaseInterface("Builder", (cl, c) -> {
cl.add(Method.of("with" + typeName(c), Type.of("Builder")).add(cl.fieldFor(c)));
}), cl -> {
cl.add(INTERFACE.getType())
.add(Type.of(Buildable.class).add(new GenericImpl(INTERFACE.getType())));

columns().forEach(c -> {
Field f = Field.of(typeName(), Type.of(c.getMappedClass()));
Method m = Method.of("with" + typeName(c), Type.of("Builder")).add(f);
i.add(m);
});

});
}

Expand All @@ -94,4 +75,5 @@ protected String getFileName() {
return INTERFACE.getType().getName();
}


}

0 comments on commit f57362b

Please sign in to comment.