package org.sakaiproject.util.foorm; import java.util.Properties; import java.util.Map; import java.util.HashMap; import java.util.ArrayList; import java.util.Arrays; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import org.sakaiproject.util.ResourceLoader; import org.sakaiproject.util.FormattedText; import org.sakaiproject.db.api.SqlService; import org.apache.commons.logging.Log; public class SakaiFoorm extends Foorm { // Abstract to be overridden @Override public String htmlSpecialChars(String str) { return FormattedText.escapeHtml(str, false); } // Abstract this away for testing purposes - return null if non existant @Override public String loadI18N(String str, Object loader) { if ( loader == null ) return null; if ( loader instanceof ResourceLoader) { String retval = ((ResourceLoader) loader).getString(str,null); return retval; // return ((ResourceLoader) loader).getString(str,null); } return super.loadI18N(str, loader); } public void autoDDL(String table, String[] model, SqlService m_sql, boolean m_autoDdl, boolean doReset, Log M_log) { // Use very carefully - for testing table creation if (doReset) M_log.error("DO NOT RUN IN PRODUCTION WITH doReset TRUE"); String[] sqls = null; if ( doReset ) { sqls = formSqlTable(table,model, m_sql.getVendor(), doReset); } else { String query = "SELECT * FROM " + table; query = getPagedSelect(query, 0, 1, m_sql.getVendor()); Connection conn = null; boolean failed = false; try { conn = m_sql.borrowConnection(); Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(query); ResultSetMetaData md = rs.getMetaData(); sqls = formAdjustTable(table,model, m_sql.getVendor(), md); } catch (SQLException e) { failed = true; } finally { if ( conn != null ) m_sql.returnConnection(conn); } if ( failed ) { // table must not exist sqls = formSqlTable(table,model, m_sql.getVendor(), doReset); } } for (String sql : sqls) { M_log.debug(sql); if ( m_autoDdl ) { if (m_sql.dbWriteFailQuiet(null, sql, null)) { // Schema modifications are more interesting if ( sql.trim().toLowerCase().startsWith("alter") ) { M_log.info("SQL Success:\n"+sql); } else { M_log.debug("SQL Success:\n"+sql); } } else { M_log.error("SQL Failure:\n"+sql); } } else { M_log.error("SQL Needed:\n"+sql); } } } }