BuilderMain.java Source code

Java tutorial

Introduction

Here is the source code for BuilderMain.java

Source

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class BuilderMain {
    public static void main(String[] args) {
        InsertBuilder builder = new InsertBuilder();
        builder.setTable("employees");
        builder.addColumnAndData("employee_id", new Integer(221));
        builder.addColumnAndData("first_name", "'Shane'");
        builder.addColumnAndData("last_name", "'Grinnell'");
        builder.addColumnAndData("email", "'al@yahoo.com'");

        String sql = SQLDirector.buildSQL(builder);
        System.out.println(sql);
    }
}

class SQLDirector {
    public static String buildSQL(SQLBuilder builder) {
        StringBuffer buffer = new StringBuffer();
        buffer.append(builder.getCommand());
        buffer.append(builder.getTable());
        buffer.append(builder.getWhat());
        buffer.append(builder.getCriteria());
        return buffer.toString();
    }
}

abstract class SQLBuilder {
    /**
     * Gets the command attribute of the SQLBuilder object
     * 
     * @return The command value or what type of Builder this is. This will return
     *         a SQL command.
     * @since
     */
    public abstract String getCommand();

    /**
     * Gets the table attribute of the SQLBuilder object
     * 
     * @return The table name value
     * @since
     */
    public abstract String getTable();

    /**
     * Gets the what value of the SQLBuilder object. This attribute will differ
     * based on what type of object we are using. This could be a list of columns
     * and data.
     * 
     * @return The what value
     * @since
     */
    public abstract String getWhat();

    /**
     * Gets the criteria attribute of the SQLBuilder object
     * 
     * @return The criteria value
     * @since
     */
    public abstract String getCriteria();
}

class InsertBuilder extends SQLBuilder {
    private String table;

    private Map columnsAndData = new HashMap();

    private String criteria;

    /**
     * Sets the table attribute of the InsertBuilder object
     * 
     * @param table
     *          The new table value
     * @since
     */
    public void setTable(String table) {
        this.table = table;
    }

    /**
     * Gets the command attribute of the InsertBuilder object
     * 
     * @return The command value
     * @since
     */
    public String getCommand() {
        return "INSERT INTO ";
    }

    /**
     * Gets the table attribute of the InsertBuilder object
     * 
     * @return The table value
     * @since
     */
    public String getTable() {
        return table;
    }

    /**
     * Gets the what attribute of the InsertBuilder object
     * 
     * @return The what value
     * @since
     */
    public String getWhat() {
        StringBuffer columns = new StringBuffer();
        StringBuffer values = new StringBuffer();
        StringBuffer what = new StringBuffer();

        String columnName = null;
        Iterator iter = columnsAndData.keySet().iterator();
        while (iter.hasNext()) {
            columnName = (String) iter.next();
            columns.append(columnName);
            values.append(columnsAndData.get(columnName));
            if (iter.hasNext()) {
                columns.append(',');
                values.append(',');
            }
        }

        what.append(" (");
        what.append(columns);
        what.append(") VALUES (");
        what.append(values);
        what.append(") ");
        return what.toString();
    }

    /**
     * Gets the criteria attribute of the InsertBuilder object
     * 
     * @return The criteria value
     * @since
     */
    public String getCriteria() {
        return "";
    }

    /**
     * Adds a feature to the ColumnAndData attribute of the InsertBuilder object
     * 
     * @param columnName
     *          The feature to be added to the ColumnAndData attribute
     * @param value
     *          The feature to be added to the ColumnAndData attribute
     * @since
     */
    public void addColumnAndData(String columnName, Object value) {
        if (value != null) {
            columnsAndData.put(columnName, value);
        }
    }
}