/
codebase/src/net/sourceforge/pain/admin/console/command/
codebase/src/net/sourceforge/pain/data/role/
codebase/src/net/sourceforge/pain/network/console/telnet/
codebase/src/net/sourceforge/pain/network/guitool/
codebase/src/net/sourceforge/pain/plugin/
codebase/src/net/sourceforge/pain/util/
db/src/net/sourceforge/pain/util/
gui/
gui/lib/
gui/src/net/sourceforge/pain/tools/guitool/dbbrowse/
gui/src/net/sourceforge/pain/tools/guitool/dialog/
gui/src/net/sourceforge/pain/tools/guitool/menu/
gui/src/net/sourceforge/pain/tools/guitool/resources/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/explorer/
mudlibs/tinylib/
mudlibs/tinylib/area/
mudlibs/tinylib/etc/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/affect/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/prototype/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/trigger/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/affect/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/deploy/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/guitool/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/guitool/event/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/fn/util/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/trigger/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/trigger/impl/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/command/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/reset/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/shutdown/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/social/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/util/
tests/
tests/src/
tests/src/net/sourceforge/pain/db/data/
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() {
    }

    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
     */
    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);
    }

    void removeTrigger(TriggerData t) {
        if (getRefSet(TRIGGERS_SET).remove(t)) {
            t.delete();
        }
    }

    boolean isEmpty() {
        return getRefSet(TRIGGERS_SET).isEmpty();
    }

    Iterator iterator() {
        return new TriggerDataSetIterator(getRefSet(TRIGGERS_SET).iterator());
    }

     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);
        }
    }
    */
}