package treehou.se.habit.core.db.model;
import io.realm.Realm;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
import se.treehou.ng.ohcommunicator.connector.models.OHItem;
public class ItemDB extends RealmObject {
public static String TYPE_SWITCH = "SwitchItem";
public static String TYPE_STRING = "StringItem";
public static String TYPE_COLOR = "ColorItem";
public static String TYPE_NUMBER = "NumberItem";
public static String TYPE_CONTACT = "ContactItem";
public static String TYPE_ROLLERSHUTTER = "RollershutterItem";
public static String TYPE_GROUP = "GroupItem";
public static String TYPE_DIMMER = "DimmerItem";
@PrimaryKey
private long id;
private ServerDB server;
private String type;
private String name;
private String link;
private String state;
private StateDescriptionDB stateDescription;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public ServerDB getServer() {
return server;
}
public void setServer(ServerDB server) {
this.server = server;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public static void save(Realm realm, ItemDB item) {
realm.beginTransaction();
if (item.id <= 0) {
item.id = uniqueId(realm);
}
realm.copyToRealmOrUpdate(item);
realm.commitTransaction();
}
public StateDescriptionDB getStateDescription() {
return stateDescription;
}
public void setStateDescription(StateDescriptionDB stateDescription) {
this.stateDescription = stateDescription;
}
public static String printableName(ItemDB itemDB) {
if (itemDB.server != null) {
return itemDB.server + ": " + itemDB.name;
}
return itemDB.name;
}
public static long uniqueId(Realm realm) {
Number num = realm.where(ItemDB.class).max("id");
if (num == null)
return 1;
else
return num.longValue() + 1;
}
public String getFormatedValue(){
if(getStateDescription() != null && getStateDescription().getPattern() != null){
String pattern = getStateDescription().getPattern();
try {
return String.format(pattern, Float.valueOf(getState()));
}
catch (Exception e){}
try {
return String.format(pattern, Integer.valueOf(getState()));
}
catch (Exception e){}
try {
return String.format(pattern, getState());
}
catch (Exception e){}
}
return getState();
}
public String printableName(){
if(server != null) {
return server + ": " + name.replaceAll("_|-", " ");
}
return name.replaceAll("_|-", " ");
}
@Override
public String toString() {
return printableName();
}
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if (!(obj instanceof ItemDB))return false;
ItemDB item = (ItemDB) obj;
return type.equals(item.getType()) && name.equals(item.getName());
}
public OHItem toGeneric(){
OHItem item = new OHItem();
item.setName(name);
item.setLink(link);
item.setState(state);
if(getStateDescription() != null) {
item.setStateDescription(getStateDescription().toGeneric());
}
if(server != null) {
item.setServer(server.toGeneric());
}
item.setType(type);
return item;
}
public static ItemDB load(Realm realm, long id) {
return realm.where(ItemDB.class).equalTo("id", id).findFirst();
}
public static ItemDB createOrLoadFromGeneric(Realm realm, OHItem item){
ItemDB itemDB = realm.where(ItemDB.class).equalTo("name", item.getName()).findFirst();
if(itemDB == null){
itemDB = new ItemDB();
itemDB.setId(ItemDB.uniqueId(realm));
itemDB.setServer(ServerDB.load(realm, item.getServer().getId()));
itemDB.setType(item.getType());
itemDB.setName(item.getName());
itemDB.setLink(item.getLink());
itemDB.setState(item.getState());
itemDB = realm.copyToRealm(itemDB);
}
return itemDB;
}
}