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(',');
}
}
/**
* 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);
}
}
}