package org.pegadi.server.user.preferences; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; import java.util.List; import java.util.Map; import java.util.Properties; /** * User: jan-preben * Date: Sep 12, 2010 */ public class PreferenceServerImpl implements PreferenceServer { private final Logger log = LoggerFactory.getLogger(getClass()); private JdbcTemplate template; public void setDataSource(DataSource dataSource) { template = new JdbcTemplate(dataSource); } public String getPreference(String userID, String domain, String key) { try { return template.queryForObject("select pvalue from Preferences where userID=? and pdomain=? and pkey=?", String.class, userID, domain, key); } catch(DataAccessException e) { log.error("Error getting preference", e); return null; } } public Properties getPreferences(String userID, String domain) { Properties props = new Properties(); try { List<Map<String, Object>> prefList = template.queryForList("select * from Preferences where userID=? and pdomain=?", userID, domain); for(Map<String, Object> pref : prefList) { props.put(pref.get("pkey"), pref.get("pvalue")); } } catch(DataAccessException e) { log.error("Error getting preferences", e); } return props; } public void savePreference(String userID, String domain, String key, String value) { try { int prefId = template.queryForInt("select ID from Preferences where userID=? and pdomain=? and pkey=?", domain, key, value); log.info("Updating existing pref with ID=" + prefId + ", value=" + value); template.update("update Preferences set pvalue=? where ID=?", value, prefId); } catch(DataAccessException e) { log.info("Saving new preference: " + domain + "." + key + "=" + value); template.update("insert into Preferences (userID, pdomain, pkey, pvalue) values(?, ?, ?, ?)", userID, domain, key, value); } } }