package net.sourceforge.pain.data; import net.sourceforge.pain.db.*; import java.util.*; /** * Set of triggers * used to store object triggers per role or per type by Root. */ public final class TriggersDataSet extends DbObject { private static final int TRIGGERS_SET = 0; private static final int NFIELDS = 1; public TriggersDataSet() { } public TriggersDataSet(final PainDB db) throws RuntimeException { super(db); } protected DbClassSchema provideSchema() { byte types[] = new byte[NFIELDS]; String names[] = new String[NFIELDS]; types[TRIGGERS_SET] = DbType.REFERENCE_SET; names[TRIGGERS_SET] = "triggers"; return new DbClassSchema(types, names); } /** will delete all triggers data */ public void removeAll() { Set set = getRefSet(TRIGGERS_SET); int size = set.size(); if (size == 0) { return; } TriggerData[] td = new TriggerData[size]; set.toArray(td); set.clear(); for (int i = 0; i < td.length; i++) { td[i].delete(); } } public void delete() { removeAll(); super.delete(); } void addTrigger(TriggerData t) { getRefSet(TRIGGERS_SET).add(t); } public void removeTrigger(TriggerData t) { if (getRefSet(TRIGGERS_SET).remove(t)) { t.delete(); } } public boolean isEmpty() { return getRefSet(TRIGGERS_SET).isEmpty(); } public Iterator iterator() { return new TriggerDataSetIterator(getRefSet(TRIGGERS_SET).iterator()); } private static final class TriggerDataSetIterator implements Iterator { private final Iterator it; private TriggerData lastReturned; public TriggerDataSetIterator(Iterator it) { this.it = it; } public void remove() { it.remove(); lastReturned.delete(); } public boolean hasNext() { return it.hasNext(); } public Object next() { lastReturned = (TriggerData) it.next(); return lastReturned; } } /* List detachRoleTriggers(Role role) { ArrayList detachedTD = new ArrayList(); for (Iterator it = getRefSet(TRIGGERS_SET).iterator(); it.hasNext();) { TriggerData td = (TriggerData) it.next(); if (td.getTriggeredRole() == role) { detachedTD.add(td); iterator().remove(); } } return detachedTD; } void addTriggers(List triggers) { DbReferenceSet set = getRefSet(TRIGGERS_SET); for (int i = 0; i < triggers.size(); i++) { TriggerData t = (TriggerData) triggers.get(i); set.add(t); } } */ }