# 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 *
# SELECT TYPE permanent_attachment_
if (not 'glue' in globals().keys()):
	glue = 'glue'
if (not 'weld' in globals().keys()):
	weld = 'weld'
permanent_attachment = SELECT(
	'glue',
	'weld')
# SELECT TYPE temporary_attachment_
if (not 'nail' in globals().keys()):
	nail = 'nail'
if (not 'screw' in globals().keys()):
	screw = 'screw'
temporary_attachment = SELECT(
	'nail',
	'screw')
# SELECT TYPE attachment_method_
if (not 'permanent_attachment' in globals().keys()):
	permanent_attachment = 'permanent_attachment'
if (not 'temporary_attachment' in globals().keys()):
	temporary_attachment = 'temporary_attachment'
attachment_method = SELECT(
	'permanent_attachment',
	'temporary_attachment')

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

	:param composition
	:type composition:STRING
	'''
	def __init__( self , composition, ):
		self.composition = composition

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

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

	:param composition
	:type composition:STRING

	:param solvent
	:type solvent:STRING
	'''
	def __init__( self , composition,solvent, ):
		self.composition = composition
		self.solvent = solvent

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

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

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

	:param mounting
	:type mounting:STRING

	:param on
	:type on:STRING

	:param using
	:type using:attachment_method
	'''
	def __init__( self , mounting,on,using, ):
		self.mounting = mounting
		self.on = on
		self.using = using

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

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

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

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

	:param body_length
	:type body_length:REAL

	:param pitch
	:type pitch:REAL
	'''
	def __init__( self , body_length,pitch, ):
		self.body_length = body_length
		self.pitch = pitch

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

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

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

	:param body_length
	:type body_length:REAL

	:param head_area
	:type head_area:REAL
	'''
	def __init__( self , body_length,head_area, ):
		self.body_length = body_length
		self.head_area = head_area

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

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