package org.fluxtream.core.domain;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.Entity;
import javax.persistence.Lob;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.PostLoad;
import org.fluxtream.core.Configuration;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
@Entity(name = "Settings")
@NamedQueries({
@NamedQuery(name = "settings.byGuestId",
query = "SELECT settings FROM Settings settings WHERE settings.guestId=?"),
@NamedQuery(name = "settings.delete.all",
query = "DELETE FROM Settings settings WHERE settings.guestId=?")
})
public class GuestSettings extends AbstractEntity {
public transient Configuration config;
public transient HashMap<String,String> topics;
public GuestSettings() {
}
public void createMessageDisplayCounters() {
messageDisplayCounters = new HashMap<String,Integer>();
saveMessageDisplayCounters();
}
public Map<String, Integer> getMessageDisplayCounters() {
return messageDisplayCounters;
}
public enum WeightMeasureUnit {
SI, POUNDS, STONES
}
public enum LengthMeasureUnit {
SI, FEET_INCHES
}
public enum DistanceMeasureUnit {
SI, MILES_YARDS
}
public enum TemperatureUnit {
CELSIUS, FAHRENHEIT
}
private transient Map<String, Integer> messageDisplayCounters;
@Lob
public String messageDisplayCountersStorage;
@Lob
public String preferences;
public void saveMessageDisplayCounters() {
if (messageDisplayCounters==null) return;
ObjectMapper mapper = new ObjectMapper();
try {
messageDisplayCountersStorage = mapper.writeValueAsString(messageDisplayCounters) ;
}
catch (IOException e) {
e.printStackTrace();
}
}
public void setMessageDisplayCounter(String messageName, int counter) {
messageDisplayCounters.put(messageName, counter);
saveMessageDisplayCounters();
}
public Integer getMessageDisplayCounter(String messageName) {
if (messageDisplayCounters==null) return null;
return messageDisplayCounters.get(messageName);
}
@PostLoad
public void loadMessageDisplayCounters() {
if (messageDisplayCountersStorage ==null) return;
JsonFactory factory = new JsonFactory();
ObjectMapper mapper = new ObjectMapper(factory);
TypeReference<HashMap<String,Object>> typeRef
= new TypeReference<HashMap<String,Object>>() {};
try {
messageDisplayCounters
= mapper.readValue(messageDisplayCountersStorage, typeRef);
}
catch (IOException e) {
e.printStackTrace();
}
}
public TemperatureUnit temperatureUnit = TemperatureUnit.FAHRENHEIT;
public WeightMeasureUnit weightMeasureUnit = WeightMeasureUnit.POUNDS;
public LengthMeasureUnit lengthMeasureUnit = LengthMeasureUnit.FEET_INCHES;
public DistanceMeasureUnit distanceMeasureUnit = DistanceMeasureUnit.MILES_YARDS;
public long guestId;
}