package it.angelic.soulissclient.model; import android.content.Context; import android.content.res.Resources.NotFoundException; import android.database.Cursor; import java.io.Serializable; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import it.angelic.soulissclient.Constants; import it.angelic.soulissclient.R; import it.angelic.soulissclient.SoulissApp; import it.angelic.soulissclient.model.db.SoulissDB; import it.angelic.soulissclient.util.FontAwesomeEnum; import it.angelic.soulissclient.util.FontAwesomeUtil; /** * Souliss Unit, the node * <p/> * It has a List of @SoulissTypical , and represents an actual arduino-like board * * @author shine */ public class SoulissNode implements Serializable, ISoulissNode { private static final long serialVersionUID = 8673027563853737718L; private transient Context context; private short health; /* Icon resource ID > se null torna chipset */ private Integer iconId; private short id; private String name; private Calendar refreshedAt; private List<SoulissTypical> soulissTypicals; public SoulissNode(Context c, short id) { super(); this.id = id; context = c; soulissTypicals = new ArrayList<>(); } /** * Data transfer method * * @param cursor risultato della select * @return */ public static SoulissNode cursorToNode(Context c, Cursor cursor) { SoulissNode comment = new SoulissNode(c, cursor.getShort(1)); comment.setHealth(cursor.getShort(cursor.getColumnIndex(SoulissDB.COLUMN_NODE_HEALTH))); if (!cursor.isNull(cursor.getColumnIndex(SoulissDB.COLUMN_NODE_ICON))) comment.setIconResourceId(cursor.getInt(cursor.getColumnIndex(SoulissDB.COLUMN_NODE_ICON))); comment.setName(cursor.getString(cursor.getColumnIndex(SoulissDB.COLUMN_NODE_NAME))); Calendar now = Calendar.getInstance(); now.setTime(new Date(cursor.getLong(cursor.getColumnIndex(SoulissDB.COLUMN_NODE_LASTMOD)))); comment.setRefreshedAt(now); return comment; } public void addTypical(SoulissTypical rest) { soulissTypicals.add(rest); } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; SoulissNode that = (SoulissNode) o; return id == that.id; } public List<SoulissTypical> getActiveTypicals() { ArrayList<SoulissTypical> copy = new ArrayList<>(); for (SoulissTypical soulissTypical : soulissTypicals) { if (!soulissTypical.isRelated() && !soulissTypical.isEmpty()) copy.add(soulissTypical); } return copy; } public short getHealth() { return health; } public void setHealth(short health) { this.health = health; } public String getHealthPercent() { return getHealth() * 100 / 255 + "%"; } public int getIconResourceId() { return iconId == null ? FontAwesomeUtil.getCodeIndexByFontName(context, FontAwesomeEnum.fa_microchip.getFontName()) : iconId; } public void setIconResourceId(int itemResId) { iconId = itemResId; } public String getName() { return name; } public void setName(String namer) { name = namer; } public String getNiceName() { if (name != null && "".compareToIgnoreCase(name) != 0) return name; //+ " ("+SoulissClient.getAppContext().getString(R.string.node)+" "+ getNodeId() + ")"; else if (id > Constants.MASSIVE_NODE_ID) return SoulissApp.getAppContext().getString(R.string.node) + " " + Constants.int2roman(getNodeId()); else return context.getString(R.string.allnodes); } public short getNodeId() { return id; } public Calendar getRefreshedAt() { return refreshedAt; } public void setRefreshedAt(Calendar refreshedAt) { this.refreshedAt = refreshedAt; } public SoulissTypical getTypical(short slot) throws NotFoundException { for (SoulissTypical soulissTypical : soulissTypicals) { if (soulissTypical.getSlot() == slot) return soulissTypical; } throw new NotFoundException("Slot " + slot + " not found on node " + getNodeId()); } public List<SoulissTypical> getTypicals() { return soulissTypicals; } public void setTypicals(List<SoulissTypical> soulissTypicals) { this.soulissTypicals = soulissTypicals; } @Override public int hashCode() { return (int) id; } public void setId(short id) { this.id = id; } @Override public String toString() { return getNiceName(); } }