# This file was generated by fedex_python.  You probably don't want to edit
# it since your modifications will be lost if fedex_plus is used to
# regenerate it.
from SCL.SCLBase import *
from SCL.SimpleDataTypes import *
from SCL.ConstructedDataTypes import *
from SCL.AggregationDataTypes import *
from SCL.TypeChecker import check_type
from SCL.Expr import *
common_datum_list = LIST(1,None,'datum_reference_element')
label = STRING
# SELECT TYPE datum_or_common_datum_
if (not 'common_datum_list' in globals().keys()):
	common_datum_list = 'common_datum_list'
if (not 'datum' in globals().keys()):
	datum = 'datum'
datum_or_common_datum = SELECT(
	'common_datum_list',
	'datum')

####################
 # ENTITY shape_aspect #
####################
class shape_aspect(BaseEntityClass):
	'''Entity shape_aspect definition.

	:param name
	:type name:STRING

	:param of_shape
	:type of_shape:product_definition_shape
	'''
	def __init__( self , name,of_shape, ):
		self.name = name
		self.of_shape = of_shape

	@apply
	def name():
		def fget( self ):
			return self._name
		def fset( self, value ):
		# Mandatory argument
			if value==None:
				raise AssertionError('Argument name is mantatory and can not be set to None')
			if not check_type(value,STRING):
				self._name = STRING(value)
			else:
				self._name = value
		return property(**locals())

	@apply
	def of_shape():
		def fget( self ):
			return self._of_shape
		def fset( self, value ):
		# Mandatory argument
			if value==None:
				raise AssertionError('Argument of_shape is mantatory and can not be set to None')
			if not check_type(value,product_definition_shape):
				self._of_shape = product_definition_shape(value)
			else:
				self._of_shape = value
		return property(**locals())

####################
 # ENTITY general_datum_reference #
####################
class general_datum_reference(shape_aspect):
	'''Entity general_datum_reference definition.

	:param base
	:type base:datum_or_common_datum
	'''
	def __init__( self , shape_aspect__name , shape_aspect__of_shape , base, ):
		shape_aspect.__init__(self , shape_aspect__name , shape_aspect__of_shape , )
		self.base = base

	@apply
	def base():
		def fget( self ):
			return self._base
		def fset( self, value ):
		# Mandatory argument
			if value==None:
				raise AssertionError('Argument base is mantatory and can not be set to None')
			if not check_type(value,datum_or_common_datum):
				self._base = datum_or_common_datum(value)
			else:
				self._base = value
		return property(**locals())

####################
 # ENTITY product_definition_shape #
####################
class product_definition_shape(BaseEntityClass):
	'''Entity product_definition_shape definition.
	'''
	# This class does not define any attribute.
	pass

####################
 # ENTITY datum_reference_element #
####################
class datum_reference_element(general_datum_reference):
	'''Entity datum_reference_element definition.
	'''
	def __init__( self , general_datum_reference__base ,  ):
		general_datum_reference.__init__(self , general_datum_reference__base , )

####################
 # ENTITY datum #
####################
class datum(shape_aspect):
	'''Entity datum definition.
	'''
	def __init__( self , shape_aspect__name , shape_aspect__of_shape ,  ):
		shape_aspect.__init__(self , shape_aspect__name , shape_aspect__of_shape , )
