package org.softlang.company.model.company.impl.bean; import org.softlang.company.model.company.*; import org.softlang.company.features.util.ObservableSimpleList; import org.softlang.company.features.util.SimpleLinkedList; import java.util.Observer; public abstract class ContainerImpl extends ComponentImpl implements Container { private ObservableSimpleList<Subunit> subunits = new ObservableSimpleList<Subunit>( new SimpleLinkedList<Subunit>()); public Iterable<? extends Subunit> subunits() { return subunits; } public boolean add(Subunit u) { ComponentImpl i = (ComponentImpl)u; if (i.getParent()!=null) throw new IllegalArgumentException("Attemped re-parenting."); i.setParent(this); return subunits.add(u); } public boolean remove(Subunit u) { ComponentImpl i = (ComponentImpl)u; i.setParent(null); return subunits.remove(u); } public void addObserver(Observer o) { super.addObserver(o); subunits.addObserver(o); } public void deleteObserver(Observer o) { super.deleteObserver(o); subunits.deleteObserver(o); } public void deleteObservers() { super.deleteObservers(); subunits.deleteObservers(); } }