package hu.swankey.ammo.common.yggdrasil.definition;

import hu.swankey.ammo.common.script.yunits.YPackage;
import hu.swankey.ammo.common.script.yunits.YUnit;

public class YPackageDefinition extends Definition {
	
	protected YPackageDefinition(String name, YPackageDefinitionClass yclass) {
		super(name, yclass);
	}
	
	public static YPackageDefinitionClass yclass(){
		return YPackageDefinitionClass.singleton();
	}
	
	public void setWrapped(YPackage ypackage){
		for(YUnit yunit: ypackage.getAll())
			addYUnit(yunit);
		wrapped = ypackage;
	}
	
	public void addYUnit(YUnit newUnit){
		put( newUnit.getWrapperElement() );
	}
	
	public YPackage getWrapped(){
		return (YPackage)wrapped;
	}
	
	@Override
	public void synchronize() {
		// TODO Auto-generated method stub
		
	}	
	
	public static class YPackageDefinitionClass extends ElementDefinitionClass {
		
		private static String CLASS_NAME = "YPackageDefinition";
		private static YPackageDefinitionClass singleton;
		
		public static YPackageDefinitionClass singleton(){
			if (singleton == null) {
				singleton = new YPackageDefinitionClass(CLASS_NAME);
				singleton.addSuperior( Definition.yclass() );
				//singleton.addMethod( AddSuperior.function );
				placeClass(singleton);
			}
			return singleton;
		}

		protected YPackageDefinitionClass(String name) {
			super(name, null);
		}
		
    	public YPackageDefinition create(YPackage ypackage) {
    		YPackageDefinition newDef = create(ypackage.getName());
    		newDef.setWrapped(ypackage);
    		return newDef;
    	}
    	
    	@Override
    	public YPackageDefinition create(String name) {
    		YPackageDefinition newDef = new YPackageDefinition(name, this);
    		init(newDef);
    		return newDef;
    	}
    	
		
	}

}
