package hu.swankey.ammo.common.yggdrasil;

import hu.swankey.ammo.common.progstruct.Wrappable;
import hu.swankey.ammo.common.yggdrasil.definition.ElementDefinition;
import hu.swankey.ammo.common.yggdrasil.definition.PackageDefinition;

import java.util.Collection;
import java.util.Set;
import java.util.TreeMap;

public class YPackage extends YUnit implements Wrappable {
	
	private TreeMap<String, YUnit> elements = new TreeMap<String, YUnit>();
	private PackageDefinition packDef;
	
	public YPackage(String name){
		super(name);
	};
	
	public void add(YUnit yunit){
		
		if (yunit == null)
			throw new NullPointerException("'yunit' cannot be null");
		
		elements.put(yunit.getName(), yunit);
		yunit.setParent(this);
		if (packDef != null)
			packDef.reportNewYUnit(yunit);
	}
	
	
	public YUnit get(String name){
		return elements.get(name);
	}
	
	public Set<String> keySet(){
		return elements.keySet();
	}
	
	public Collection<YUnit> getAllYUnits(){
		return elements.values();
	}
	
	@Override
	public boolean hasWrapperElement() {
		return packDef != null;
	}	
	
	@Override
	public PackageDefinition getWrapperElement(){
		if (packDef == null)
			packDef = PackageDefinition.yclass().create(this);
		return packDef;
	}
	



	
	public String toString(){
		return "Package '" + getName() + "'";
	}

	@Override
	public void setWrapperElement(ElementDefinition wrapper) {
		throw new RuntimeException("Not Supported");
	}
}
