package org.eclipse.osbp.dsl.tests.carstore.entities {
	
	import org.osbp.mysmartshop.datatypes.*;  
	 
	mapped superclass Base {
		uuid String uuid;
	}
	   
	entity Car extends Base {
		var String number;
		var Date finishingDate;
		ref cascade Addon[*] addons opposite car; 
		ref Person owner opposite ownsCars;
		
		// test cycle
		ref cascade ToCycle1[*] cycles1 opposite car; 
	}
	
	entity Addon extends Base {
		var String description;
		ref Car car opposite addons;
	}
	
	entity ToCycle1 extends Base {
		ref Car car opposite cycles1;
		ref cascade ToCycle2[*] cycles2 opposite parent; 
	}
	
	entity ToCycle2 extends Base {
		ref ToCycle1 parent opposite cycles2;
		
		// back ref to car MUST NOT resolve the cycles again!
		ref Car car;
	}
 
	entity Person extends Base {
		var String firstname;
		var String lastname;
		ref Car[*] ownsCars opposite owner;
		
		var Address homeAddress;
		var Address workAddress;
	}
	
	bean Address {
		var String streetname;
		var String postalcode;
	}
}