Code Generator for Eclipse Code
Brought to you by:
hotzst
<%@ jet imports="java.util.* ch.sahits.model.* ch.sahits.model.db.* ch.sahits.model.java.* ch.sahits.model.java.db.* ch.sahits.codegen.java.model.util.*" package="PAGAGE_NAME" class="CLASS_NAME" %>
<%
/*
* This Emitter Template creates a database bean.
* The bean methods are defined in the first interface.
* The constructor takes the interface and uses its
* getter and setter methods to initialize
* the values of this object.
* Thus a Object can be initialized through a common
* interface eaven if the two classes are not in the
* same hierarchy.
*/
%>
<% DataBaseTable dbt = (DataBaseTable) argument; %>
<%=ConvenientCodegen.toPackageDefinition(dbt.getPackageName())
%><% List importClasses = dbt.usedClasses();
for (Iterator i = importClasses.iterator(); i.hasNext(); ){
Class c = (Class)i.next();
if (!ConvenientCodegen.isPrimitiveClass(c)){
%>import <%=c.getName() %>;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
<% } // end if
} %><% if (dbt.hasSuperClass() && !ConvenientCodegen.isPrimitiveClass((Class)dbt.superclasses().get(0))){
%>
import <%=((Class)dbt.superclasses().get(0)).getName() %>;<%
} %><% if (!dbt.interfaces().isEmpty()){
Class[] interfaces = dbt.getInterfaces();
for (int i=0;i<interfaces.length; i++ ){%>
import <%=interfaces[i].getName() %>;
<% }
} %>
/**
* This class is a bean class that has a constructor that
* can be initialized through hierarchical cloning of an
* instance of the bean interface. Thus an initialisation
* with an instance that lies not in the same hierarchy
* but implements the same interface can be initialized.
* The initialisation referres to the getter and setter
* methods defined in the interface.
*/
<% if (dbt.isPublic()){ %>
public <% } else if (dbt.isProtected()){ %>
protected <% } else if (dbt.isPrivate()){ %>
private <% }
%><% if (dbt.isAbstract()) {
%>abstract <% }
%><% if (dbt.isFinal()) {
%>final <% }
%>class <%=dbt.getClassName() %><% if (dbt.hasSuperClass() && !dbt.superclasses().get(0).equals(Object.class)){
%> extends <%=ConvenientCodegen.getSimpleClassName((Class)dbt.superclasses().get(0)) %><% }
%><% if (!dbt. interfaces().isEmpty()){
Class[] interfaces = dbt.getInterfaces();
%> implements <% for (int i=0;i<interfaces.length; i++ ){
%><%=ConvenientCodegen.getSimpleClassName((Class)interfaces[i])
%><% if (i==interfaces.length-1){
%> <% } else {
%>, <% }
%><% }
%><% }
%> {
<% List fields = dbt.getFields();
for (Iterator i = fields.iterator(); i.hasNext(); ){
DataBaseTableField field = (DataBaseTableField)i.next();
%>
/** <code><%= ConvenientCodegen.toName( field.getFieldName(),"_" ) %></code> holds the value of the field <%=field.getFieldName() %> */
private <%=ConvenientCodegen.getSimpleClassName( field.getFieldType()) %> <%= ConvenientCodegen.toName( field.getFieldName(),"_" ) %>;
<% } %>
<% Class[] interfaces = dbt.getInterfaces(); %>
/**
* This constructor initialized this instance by
* initializing the values from the interface.
* @param bean
*/
public <%=dbt.getClassName() %>(<%=ConvenientCodegen.getSimpleClassName(interfaces[0]) %> bean){
this();
Class c = bean.getClass();
Class thisC = getClass();
Method[] methods = c.getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
if (methods[i].getName().startsWith("get")){
String setterMethodName = "set"+methods[i].getName().substring(3);
try {
Class<?>[] type = methods[i].getParameterTypes();
Method setter = thisC.getMethod(setterMethodName, type);
setter.invoke(this, methods[i].invoke(bean, new Class[]{}));
} catch (SecurityException e) {
throw new RuntimeException(e.getMessage());
} catch (NoSuchMethodException e) {
throw new RuntimeException(e.getMessage());
} catch (IllegalArgumentException e) {
throw new RuntimeException(e.getMessage());
} catch (IllegalAccessException e) {
throw new RuntimeException(e.getMessage());
} catch (InvocationTargetException e) {
throw new RuntimeException(e.getMessage());
}
}
}
}
/**
* Hidden default constructor
*/
private <%=dbt.getClassName() %>(){
// do nothing
}
<% for (Iterator i = fields.iterator(); i.hasNext(); ){
DataBaseTableField field = (DataBaseTableField)i.next();
%>
/**
* Retrieve the value of the field <%=field.getFieldName() %>.
* @return the value of the field
*/
public <%=ConvenientCodegen.getSimpleClassName( field.getFieldType()) %> <%= ConvenientCodegen.toName( "get_"+field.getFieldName(),"_" ) %>(){
return <%= ConvenientCodegen.toName( field.getFieldName(),"_" ) %>;
}
/**
* Set the value of the field <%=field.getFieldName() %>.
* @param <%= ConvenientCodegen.toName( field.getFieldName(),"_" ) %> value to be set for <%=field.getFieldName() %>
*/
public void <%= ConvenientCodegen.toName( "set_"+field.getFieldName(),"_" ) %>(<%=ConvenientCodegen.getSimpleClassName( field.getFieldType()) %> <%= ConvenientCodegen.toName( field.getFieldName(),"_" ) %>){
this.<%= ConvenientCodegen.toName( field.getFieldName(),"_" ) %> = <%= ConvenientCodegen.toName( field.getFieldName(),"_" ) %>;
}
<% } %>
}