Menu

Commit [r33]  Maximize  Restore  History

Corrected path

hotzst 2008-01-27

changed /ast/src/ch/sahits/codegen/java/ast/CreateBean.java
copied /ast/src/ch/sahits/sahits/codegen/java/ast -> /ast/src/ch/sahits/codegen/java/ast
/ast/src/ch/sahits/codegen/java/ast/CreateBean.java Diff Switch to side-by-side view
--- a
+++ b/ast/src/ch/sahits/codegen/java/ast/CreateBean.java
@@ -0,0 +1,160 @@
+package ch.sahits.codegen.java.ast;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jdt.core.dom.*;
+
+import cg.sahits.codegen.java.util.ASTBuildHelper;
+import ch.sahits.codegen.java.model.DataBaseTable;
+import ch.sahits.codegen.java.model.DataBaseTableField;
+/**
+ * This class creates a simple bean with all the
+ * fields in the model defined.
+ * @author Andi Hotz
+ *
+ */
+public class CreateBean extends ASTBuildHelper{
+	/**
+	 * Holds the model of the {@link DataBaseTable}
+	 */
+	private DataBaseTable model = null;
+	/**
+	 * Name of the package
+	 */
+	private String packageName = "";
+	/**
+	 * Representation of the source-code to be generated as an abstract syntax tree.
+	 */
+	protected AST ast=null;
+	/**
+	 * Constructor initializes the database model
+	 * @param dbt {@link DataBaseTable} model
+	 */
+	public CreateBean(DataBaseTable dbt){
+		model=dbt;
+	}
+	/**
+	 * Retrieve the package name
+	 * @return name of the package to be generated
+	 */
+	public String getPackageName() {
+		return packageName;
+	}
+	/**
+	 * Set the package name to be generated
+	 * @param packageName
+	 */
+	public void setPackageName(String packageName) {
+		this.packageName = packageName;
+	}
+	
+	@SuppressWarnings("unchecked")
+	public void generate(){
+		ast = AST.newAST(AST.JLS3);	// Generate Java 5.0 compiliant code
+		unit = ast.newCompilationUnit();
+		PackageDeclaration packageDecl = ast.newPackageDeclaration();
+		packageDecl.setName(ast.newName(packageName.split(".")));
+		unit.setPackage(packageDecl);
+		// TODO: Add imports
+		SimpleName name = ast.newSimpleName(camelCase(model.getTableName().toLowerCase(), "_"));
+		TypeDeclaration classType = ast.newTypeDeclaration();
+		classType.modifiers().add(Modifier.PUBLIC);
+		classType.setInterface(false);
+		classType.setName(name);
+		classType= defineClassBody(classType);
+		unit.types().add(classType);
+	}
+	/**
+	 * Add the definition of the class body
+	 * @param classType class type definition
+	 * @return classType with all added methods and fields
+	 */
+	@SuppressWarnings("unchecked")
+	private TypeDeclaration defineClassBody(TypeDeclaration classType) {
+		List<DataBaseTableField> fields  = model.getFields();
+		for (Iterator iterator = fields.iterator(); iterator.hasNext();) {
+			DataBaseTableField dbtf = (DataBaseTableField) iterator
+					.next();
+			FieldDeclaration field = generateFieldDeclaration(dbtf);
+			classType.bodyDeclarations().add(field);
+		}
+		for (Iterator iterator = fields.iterator(); iterator.hasNext();) {
+			DataBaseTableField dbtf = (DataBaseTableField) iterator
+					.next();
+			// Adding the getter
+			MethodDeclaration method = generateGetterMethod(dbtf);
+			classType.bodyDeclarations().add(method);
+			// Adding the setter
+			method = generateSetterMethod(dbtf);
+			classType.bodyDeclarations().add(method);
+		}
+		return classType;
+	}
+	/**
+	 * This method generates the field definition of the designated field
+	 * @param dbtf Model of the field
+	 * @return abstract syntax for the field declaration
+	 */
+	private FieldDeclaration generateFieldDeclaration(DataBaseTableField dbtf) {
+		VariableDeclarationFragment fragment = ast.newVariableDeclarationFragment();
+		SimpleName name = ast.newSimpleName(getClassShortName(dbtf));
+		fragment.setName(name);
+		fragment.setInitializer(ast.newNullLiteral());
+		FieldDeclaration field = ast.newFieldDeclaration(fragment);
+		return field;
+	}
+	/**
+	 * This method generates the setter method based on a field description
+	 * @param dbtf Model of the field
+	 * @return abstract syntax for the setter method
+	 */
+	@SuppressWarnings("unchecked")
+	private MethodDeclaration generateSetterMethod(DataBaseTableField dbtf) {
+		MethodDeclaration method = ast.newMethodDeclaration();
+		method.modifiers().add(Modifier.PUBLIC);
+		SimpleName setName = ast.newSimpleName("set"+camelCase(dbtf.getFieldName(), "_"));
+		method.setName(setName);
+		method.setReturnType2(ast.newPrimitiveType(org.eclipse.jdt.core.dom.PrimitiveType.VOID));
+		SimpleType stringType = ast.newSimpleType(ast.newName("String"));
+		SimpleName paramName = ast.newSimpleName(toLowerCaseFirst(camelCase(dbtf.getFieldName(),"_")));
+		SingleVariableDeclaration param = ast.newSingleVariableDeclaration();
+		param.modifiers().add(Modifier.NONE);
+		param.setType(stringType);
+		param.setName(paramName);
+		Assignment assignement = ast.newAssignment();
+		FieldAccess lhs = ast.newFieldAccess();
+		lhs.setExpression(ast.newThisExpression());
+		lhs.setName(ast.newSimpleName(toLowerCaseFirst(camelCase(dbtf.getFieldName(),"_"))));
+		assignement.setLeftHandSide(lhs);
+		assignement.setOperator(Assignment.Operator.ASSIGN);
+		assignement.setRightHandSide(paramName);
+		Block block = ast.newBlock();
+		block.statements().add(assignement);
+		method.setBody(block);
+		return method;
+	}
+	/**
+	 * This method generates the getter method for the designated field 
+	 * @param dbtf Model of the field
+	 * @return abstract syntax for the getter method
+	 */
+	@SuppressWarnings("unchecked")
+	private MethodDeclaration generateGetterMethod(DataBaseTableField dbtf) {
+		MethodDeclaration method = ast.newMethodDeclaration();
+		method.modifiers().add(Modifier.PUBLIC);
+		SimpleName getName = ast.newSimpleName("get"+camelCase(dbtf.getFieldName(), "_"));
+		method.setName(getName);
+		SimpleType stringType = ast.newSimpleType(ast.newName("String"));
+		method.setReturnType2(stringType);
+		ReturnStatement rStmt = ast.newReturnStatement();
+		FieldAccess fa = ast.newFieldAccess();
+		fa.setExpression(ast.newThisExpression());
+		fa.setName(ast.newSimpleName(toLowerCaseFirst(camelCase(dbtf.getFieldName(),"_"))));
+		rStmt.setExpression(fa);
+		Block block = ast.newBlock();
+		block.statements().add(rStmt);
+		method.setBody(block);
+		return method;
+	}
+}
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.