package com.gorillalogic.monkeyconsole.componentview.model;
import java.util.ArrayList;
import java.util.List;
public class UIContainer extends UIComponent {
protected List<UIComponent> children;
public List<UIComponent> getChildren() {
return children;
}
private static IModelVisitor adder = new Adder();
private static IModelVisitor remover = new Remover();
private void initLists() {
children = new ArrayList<UIComponent>();
}
private void addChild(UIComponent child) {
children.add(child);
}
private static class Adder implements IModelVisitor {
public void visitUIComponent(UIComponent component, Object argument) {
((UIContainer) argument).addChild(component);
}
/*
* @see ModelVisitorI#visitMovingBox(MovingBox, Object)
*/
public void visitUIContainer(UIContainer child, Object argument) {
((UIContainer) argument).addChild(child);
}
}
private static class Remover implements IModelVisitor {
/*
* @see ModelVisitorI#visitBook(MovingBox, Object)
*/
public void visitUIComponent(UIComponent component, Object argument) {
((UIContainer) argument).removeChild(component);
}
/*
* @see ModelVisitorI#visitMovingBox(MovingBox, Object)
*/
public void visitUIContainer(UIContainer child, Object argument) {
((UIContainer) argument).removeChild(child);
child.addListener(NullDeltaListener.getSoleInstance());
}
}
public UIContainer(String labelString, boolean isVisible) {
super(labelString, isVisible);
initLists();
}
public void remove(Model toRemove) {
toRemove.accept(remover, this);
}
protected void removeChild(UIComponent child) {
children.remove(child);
child.addListener(NullDeltaListener.getSoleInstance());
fireRemove(child);
}
protected void removeChild(UIContainer child) {
children.remove(child);
child.addListener(NullDeltaListener.getSoleInstance());
fireRemove(child);
}
public void add(Model toAdd) {
toAdd.accept(adder, this);
}
/** Answer the total number of items the
* receiver contains. */
public int size() {
return getChildren().size();
}
/*
* @see Model#accept(ModelVisitorI, Object)
*/
public void accept(IModelVisitor visitor, Object passAlongArgument) {
visitor.visitUIContainer(this, passAlongArgument);
}
}