package com.diodesoftware.scb.agents; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import org.apache.log4j.Logger; import com.diodesoftware.dbmapper.DBMapper; import com.diodesoftware.scb.ClipRequest; import com.diodesoftware.scb.tables.SystemSetting; import java.sql.ResultSet; import java.util.*; public class SystemSettingAgent { private static Logger log = Logger.getLogger(SystemSettingAgent.class); private static Map<String, String> settings = new HashMap<String, String>(); public static List<SystemSetting> loadAll(Connection con){ List<SystemSetting> list = new ArrayList<SystemSetting>(); String sql = "Select * from SystemSetting"; try{ PreparedStatement prepStmt = con.prepareStatement(sql); ResultSet rs = prepStmt.executeQuery(); while(rs.next()){ list.add((SystemSetting)DBMapper.loadSingle(SystemSetting.class, rs)); } rs.close(); prepStmt.close(); }catch (SQLException e) { log.error("Error running SQL [" + sql + "]",e); } return list; } public static void loadMap(Connection con){ List<SystemSetting> list = loadAll(con); synchronized(settings){ Iterator<SystemSetting> iter = list.iterator(); while(iter.hasNext()){ SystemSetting setting = iter.next(); settings.put(setting.getSettingKey(), setting.getSettingValue()); } } } public static SystemSetting load(String key, Connection con){ SystemSetting result = null; String sql = "Select * from SystemSetting where SettingKey = ?"; try{ PreparedStatement prepStmt = con.prepareStatement(sql); prepStmt.setString(1, key); ResultSet rs = prepStmt.executeQuery(); while(rs.next()){ result = (SystemSetting)DBMapper.loadSingle(SystemSetting.class, rs); } rs.close(); prepStmt.close(); }catch (SQLException e) { log.error("Error running SQL [" + sql + "]",e); } return result; } public static void checkDefaults(Connection con){ for(SystemSetting setting : SystemSetting.DEFAULTS){ SystemSetting current = load(setting.getSettingKey(),con); if(current == null){ DBMapper.save(setting,con); } } } public static String getSetting(String key){ String result = null; synchronized(settings){ result = settings.get(key); } return result; } public static String getSetting(String key, ClipRequest request){ String result = null; SystemSetting setting = load(key, request.getCon()); if(setting != null) result = setting.getSettingValue(); return result; } }