001: package org.depunit;
002:
003: import java.util.*;
004:
005: public abstract class DepLink implements Observer {
006: static public final int HARD_DEPENDENCY = 1;
007: static public final int SOFT_DEPENDENCY = 2;
008:
009: private DepLink m_next;
010: private DepLink m_prev;
011: private int m_position;
012:
013: protected class Observers extends Observable {
014: private Set<DepLink> m_observers;
015: private int m_type;
016:
017: public Observers(int type) {
018: m_type = type;
019: m_observers = new LinkedHashSet<DepLink>();
020: }
021:
022: public Set<DepLink> getObservers() {
023: return (m_observers);
024: }
025:
026: public boolean addObserver(DepLink obs) {
027: boolean ret = false;
028:
029: if (m_observers.add(obs)) {
030: ret = true;
031: super .addObserver(obs);
032: }
033:
034: return (ret);
035: }
036:
037: /**
038: Called after a dependecy has been ran
039: */
040: public void notifyObservers(String status) {
041: setChanged();
042: notifyObservers(new StateChange(m_type, status));
043: clearChanged();
044: }
045:
046: /**
047: Called to reset all tests that depend on this
048: */
049: public void reset() {
050: setChanged();
051: notifyObservers(new StateChange(m_type, null));
052: clearChanged();
053: }
054: }
055:
056: protected int m_depCount;
057:
058: protected Observers m_softObservers;
059: protected Observers m_hardObservers;
060:
061: private boolean m_loopStart;
062:
063: public DepLink() {
064: m_loopStart = false;
065: m_position = 0;
066: m_depCount = 0;
067: m_next = null;
068: m_prev = null;
069:
070: m_hardObservers = new Observers(HARD_DEPENDENCY);
071: m_softObservers = new Observers(SOFT_DEPENDENCY);
072: }
073:
074: public DepLink getNext() {
075: return (m_next);
076: }
077:
078: public void setNext(DepLink next) {
079: m_next = next;
080: }
081:
082: public DepLink getPrev() {
083: return (m_prev);
084: }
085:
086: public void setPrev(DepLink prev) {
087: m_prev = prev;
088: }
089:
090: public void setPosition(int p) {
091: m_position = p;
092: }
093:
094: public int getPosition() {
095: return (m_position);
096: }
097:
098: public boolean isLoopStart() {
099: return (m_loopStart);
100: }
101:
102: public void setLoopStart() {
103: m_loopStart = true;
104: }
105:
106: public boolean addHardObserver(DepLink obs) {
107: return (m_hardObservers.addObserver(obs));
108: }
109:
110: public boolean addSoftObserver(DepLink obs) {
111: return (m_softObservers.addObserver(obs));
112: }
113:
114: public Set<DepLink> getHardObservers() {
115: return (m_hardObservers.getObservers());
116: }
117:
118: public Set<DepLink> getSoftObservers() {
119: return (m_softObservers.getObservers());
120: }
121: }
|