import java.util.*;
public abstract class Component <T>  {
    
    public Component( T instance){
        this.instance = instance;
    }
    
    private T instance;
    
    protected Integer ID;
    
    public Integer getId(){
        return this.ID;
    }
    
    
    public boolean hasChildren(){
        return false;
    }
    
    public int getNumChildren (){
        return 0;
    }
    
    public  void addChild(Component <T> aChild){
        
    }
    
    public  void removeChild(Component <T> aChild){
        
    }
    
    public  Component <T> getChildAt(int index){
        return null;
    }
    public static void main (String [] args ){
        Component <Integer> root = new Composite <Integer>((new Integer(1)));
        root.addChild(new Leaf <Integer>(new Integer(1)) );
        root.addChild(new Composite <Integer>(new Integer(1)));    
        root.addChild(new Composite<Integer>(new Integer(1)));
        root.addChild(new Composite<Integer>(new Integer(1)));    
        root.addChild(new Composite<Integer>(new Integer(1)));    
        System.out.println(root.getNumChildren());
    }
    
    
}
class Composite <T> extends Component <T>{
    public Composite(T instance) {
        super(instance);
        // TODO Auto-generated constructor stub
    }
    private LinkedHashSet <Component <T>> childrenList  = new LinkedHashSet <Component<T>> ();
    
    @Override
    public void addChild(Component <T> aChild) {
        Random pippo = new Random();
        //pippo.setSeed(10);
        aChild.ID = pippo.nextInt();
        this.childrenList.add(aChild);
    }
    
    public void removeChild (Component <T>  aComponent) {
        Component <T>itemToRemove = null;
        for (Component <T> item : this.childrenList){
            if (item.getId() == aComponent.getId() ){
                itemToRemove = item;
                break;
            }
        }
        if (itemToRemove != null){
            this.childrenList.remove(itemToRemove);    
        }
        
    }
    public int getNumChildren (){
        return this.childrenList.size();
    }
    
    
    public Component <T> getChildById(int id) {
        Component <T> requestedItem = null;
        for (Component <T> item : this.childrenList){
            if (item.getId() == id ){
                requestedItem = item;
                break;
            }
        }
        return requestedItem;
    }
    
    @SuppressWarnings("unchecked")
    public boolean equals (Object anObj){
        if ( (anObj instanceof Composite ) && ((Composite <T>)anObj).getId().equals( this.ID ) ){ 
            return true;
        } else {
        return false;
        }
    }
    
    public int  hashCode (){
        return this.ID.hashCode();
    }
}
class Leaf <T> extends Component <T>{
    public Leaf(T instance) {
        super(instance);
        // TODO Auto-generated constructor stub
    }
    @SuppressWarnings("unchecked")
    public boolean equals (Object anObj){
        if ( (anObj instanceof Leaf) && ((Leaf  <T>)anObj).getId().equals( this.ID ) ){ 
            return true;
        } else {
        return false;
        }
    }
    
    public int  hashCode (){
        return this.ID.hashCode();
    }
    
}
Nessun commento:
Posta un commento