1
package org.zaluum.model;
3
import java.util.concurrent.CopyOnWriteArrayList;
5
import org.zaluum.util.Observable;
6
import org.zaluum.util.Observer;
8
public abstract class ModelObject<
9
P extends ModelObject<?,?>,
10
T extends ModelObject<?,?>>
12
Observable,FQNamable, Copyable<T>, ResourceKey{
14
private final CopyOnWriteArrayList<Observer> observers;
16
public ModelObject() {
18
observers = new CopyOnWriteArrayList<Observer>();
20
public ModelObject(ModelObject<P, T> n) {
21
observers = new CopyOnWriteArrayList<Observer>();
24
public boolean isRoot(){
30
public void setParent(P parent){
31
if (this.parent!=null){
32
this.parent.removeChild(this);
36
parent.addChild(this);
39
protected abstract void addChild(ModelObject<?,?> c);
40
protected abstract void removeChild(ModelObject<?,?> c);
42
public abstract <V extends ModelObject<?,?>> Iterable<V> getChildren();
43
protected void notifyObservers(){
44
for (Observer o : observers)
49
public void addObserver(Observer o) {
50
if (!observers.contains(o))
54
public void removeObserver(Observer o) {
57
protected void acceptVisitor(ModelVisitor visitor){
58
for (ModelObject<?,?> c: getChildren()){
59
c.acceptVisitor(visitor);
62
public <V extends NamedObject<?, ?>> V getChildByName(String name, Iterable<V> it){
64
if (v.getName().equals(name))