package no.nordicsemi.puckcentral.db;
import android.content.Context;
import org.droidparts.persist.sql.EntityManager;
import org.droidparts.persist.sql.stmt.Is;
import org.droidparts.persist.sql.stmt.Select;
import java.util.ArrayList;
import java.util.List;
import no.nordicsemi.puckcentral.models.Puck;
import no.nordicsemi.puckcentral.models.Rule;
public class RuleManager extends EntityManager<Rule> {
public RuleManager(Context ctx) {
super(Rule.class, ctx);
}
public ArrayList<Rule> getRulesForTrigger(String trigger) {
return readAll(select().where(DB.Column.TRIGGER, Is.EQUAL, trigger));
}
public List<Rule> getRulesForTriggers(String... triggers) {
List<Rule> rules = new ArrayList<>();
for (String trigger : triggers) {
rules.addAll(getRulesForTrigger(trigger));
}
return rules;
}
public Select<Rule> getRulesForPuck(Puck puck) {
if (puck == null) {
return null;
} else {
return select().where(DB.Column.PUCK, Is.EQUAL, puck.id);
}
}
public ArrayList<Rule> getRulesForPuckAndTrigger(Puck puck, String triggerIdentifier) {
if (puck == null || triggerIdentifier == null) {
return new ArrayList<>();
} else {
return readAll(select()
.where(DB.Column.PUCK, Is.EQUAL, puck.id)
.where(DB.Column.TRIGGER, Is.EQUAL, triggerIdentifier));
}
}
public void createOrExtendExisting(Rule rule) {
List<Rule> rules = getRulesForPuckAndTrigger(rule.getPuck(), rule.getTrigger());
if (rules.size() > 0) {
// If multiple rules with the same trigger exist, pick the first
Rule toExtend = rules.get(0);
fillForeignKeys(toExtend);
toExtend.getActions().addAll(rule.getActions());
update(toExtend);
} else {
super.create(rule);
}
}
}