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);
}
}
}