import org.eclipse.osbp.runtime.common.annotations.HistIsCurrent
import org.eclipse.osbp.runtime.common.annotations.HistIsCustomVersion
import org.eclipse.osbp.runtime.common.annotations.HistValidUntil
import ns org.osbp.mysmartshop.datatypes.String
import ns org.osbp.mysmartshop.datatypes.boolean
import ns org.osbp.mysmartshop.datatypes.int
import ns org.osbp.mysmartshop.datatypes.long
import ns org.eclipse.osbp.runtime.common.^historized.UUIDHist
 
package org.eclipse.osbp.dsl.tests.hist.entities {
  
	datatype UUIDHist jvmType UUIDHist

	mappedSuperclass HBaseID {
		persistenceUnit "testCarstore"
		id int id
		version long ^version
	}

	mappedSuperclass HBaseUUID {
		persistenceUnit "testCarstore"
		uuid String id 
		version long ^version
	}
  
	historized mappedSuperclass HBaseUUIDHistorized {
		persistenceUnit "testCarstore"
		id UUIDHist id
 
		@ HistValidUntil var long validUntil

		@ HistIsCurrent var boolean histCurrent

		@ HistIsCustomVersion var boolean customVersion

		version int ^version
	}

	timedependent mappedSuperclass HBaseUUIDTimedependent {
		persistenceUnit "testCarstore"
		id UUIDHist id

		@ HistValidUntil var long validUntil

		@ HistIsCurrent var boolean histCurrent

		@ HistIsCustomVersion var boolean customVersion

		version int ^version
	}

	/**
	 * ------------------------------------------------------
	 * Historized tests for orders having different addresses.
	 * ------------------------------------------------------
	 */
	entity HOrder extends HBaseUUID {
		persistenceUnit "testCarstore"

		var String orderNumber
    
		ref HAddress deliveryAddress
		ref HAddress invoiceAddress
	}

	entity HAddress extends HBaseUUIDHistorized {
		persistenceUnit "testCarstore"

		var String name
		var String street
		var String postalCode
		ref HCountry country
	}

	entity HCountry extends HBaseUUID {
		persistenceUnit "testCarstore"

		var String isoCode
	}

	//	/**
	//	 * ------------------------------------------------------
	//	 * Time dependent tests for merchandising screens.
	//	 * ------------------------------------------------------
	//	 */
	//	entity HItem extends HBaseUUID {
	//		persistenceUnit "testCarstore"
	//		
	//		domainKey String number
	//		domainDescription String description
	//		
	//	}
	//	
	//	entity HScreenDevice extends HBaseUUID {
	//		persistenceUnit "testCarstore"
	//		
	//		domainKey String number
	//		domainDescription String description
	//		
	//		ref HScreenContent content
	//	}
	//	
	//	entity HScreenContent extends HBaseUUIDTimedependent {
	//		persistenceUnit "testCarstore"
	//		
	//		ref HItem item
	//		var String text
	//		var double price
	//	}

}