package net.varkhan.base.management.state;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 1/22/11
* @time 10:49 PM
*/
public class SimpleStateReport<L extends Level,S extends State<L,S>> implements StateReport<L,S> {
protected final Collection<StateCheck<L,S>> checks = new ArrayList<StateCheck<L,S>>();
protected final S initial;
public SimpleStateReport(S initial) { this.initial=initial; }
public void clear() { checks.clear(); }
public void add(StateCheck<L,S> hc) { checks.add(hc); }
public S state() {
S state = initial;
for(StateCheck<L,S> hc: checks) {
hc.update();
S s = hc.state();
if(s==null) continue;
if(state==null) state = s;
else state = state.aggregate(s, hc.level());
}
return state;
}
public Collection<StateCheck<L,S>> checks() { return Collections.unmodifiableCollection(checks); }
public void update() { for(StateCheck<L,S> hc: checks) hc.update(); }
}