<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
	default-lazy-init="true">


	<bean id="address"
		class="org.jspresso.framework.model.descriptor.basic.BasicComponentDescriptor">
		<constructor-arg value="com.visual.engine.model.address" />
		<property name="propertyDescriptors">
			<list>
				<bean
					class="org.jspresso.framework.model.descriptor.basic.BasicStringPropertyDescriptor">
					<property name="name" value="street" />
					<property name="mandatory" value="true" />
					<property name="readOnly" value="false" />
				</bean>
				<bean
					class="org.jspresso.framework.model.descriptor.basic.BasicIntegerPropertyDescriptor">
					<property name="name" value="number" />
					<property name="mandatory" value="true" />
					<property name="readOnly" value="false" />
				</bean>
			</list>
		</property>
		<property name="iconImageURL"
			value="classpath:com/visual/engine/images/addressIcon.png" />
	</bean>
	<bean id="customer"
		class="org.jspresso.framework.model.descriptor.entity.basic.BasicEntityDescriptor">
		<constructor-arg value="com.visual.engine.model.customer" />
		<property name="grantedRoles">
			<list>
				<value>SalesExecutive</value>
				<value>SalesManager</value>
			</list>
		</property>
		<property name="writabilityGates">
			<list>
				<bean class="org.jspresso.framework.security.GrantedRolesGate">
					<property name="grantedRoles">
						<list>
							<value>SalesExecutive</value>
						</list>
					</property>
				</bean>
			</list>
		</property>
		<property name="propertyDescriptors">
			<list>
				<bean
					class="org.jspresso.framework.model.descriptor.basic.BasicStringPropertyDescriptor">
					<property name="name" value="name" />
					<property name="mandatory" value="true" />
					<property name="readOnly" value="false" />
				</bean>
				<bean
					class="org.jspresso.framework.model.descriptor.basic.BasicReferencePropertyDescriptor">
					<property name="name" value="shippingAddress" />
					<property name="mandatory" value="true" />
					<property name="readOnly" value="false" />
					<property name="referencedDescriptor" ref="address" />
				</bean>
				<bean
					class="org.jspresso.framework.model.descriptor.basic.BasicReferencePropertyDescriptor">
					<property name="name" value="invoiceAddress" />
					<property name="mandatory" value="true" />
					<property name="readOnly" value="false" />
					<property name="referencedDescriptor" ref="address" />
				</bean>
			</list>
		</property>
		<property name="iconImageURL"
			value="classpath:com/visual/engine/images/customerIcon.png" />
	</bean>
	<bean id="product"
		class="org.jspresso.framework.model.descriptor.entity.basic.BasicEntityDescriptor">
		<constructor-arg value="com.visual.engine.model.product" />
		<property name="grantedRoles">
			<list>
				<value>ProductManager</value>
				<value>SalesExecutive</value>
				<value>SalesManager</value>
			</list>
		</property>
		<property name="writabilityGates">
			<list>
				<bean class="org.jspresso.framework.security.GrantedRolesGate">
					<property name="grantedRoles">
						<list>
							<value>ProductManager</value>
						</list>
					</property>
				</bean>
			</list>
		</property>
		<property name="propertyDescriptors">
			<list>
				<bean
					class="org.jspresso.framework.model.descriptor.basic.BasicStringPropertyDescriptor">
					<property name="name" value="name" />
					<property name="mandatory" value="false" />
					<property name="readOnly" value="false" />
				</bean>
				<bean
					class="org.jspresso.framework.model.descriptor.basic.BasicStringPropertyDescriptor">
					<property name="name" value="price" />
					<property name="mandatory" value="false" />
					<property name="readOnly" value="false" />
				</bean>
			</list>
		</property>
		<property name="iconImageURL"
			value="classpath:com/visual/engine/images/productIcon.png" />
	</bean>
	<bean id="productOrder"
		class="org.jspresso.framework.model.descriptor.basic.BasicComponentDescriptor">
		<constructor-arg value="com.visual.engine.model.productOrder" />
		<property name="propertyDescriptors">
			<list>
				<bean
					class="org.jspresso.framework.model.descriptor.basic.BasicReferencePropertyDescriptor">
					<property name="name" value="product" />
					<property name="mandatory" value="false" />
					<property name="readOnly" value="false" />
					<property name="referencedDescriptor" ref="product" />
				</bean>
				<bean
					class="org.jspresso.framework.model.descriptor.basic.BasicIntegerPropertyDescriptor">
					<property name="name" value="quantity" />
					<property name="mandatory" value="false" />
					<property name="readOnly" value="false" />
					<property name="minValue" value="0" />
				</bean>
			</list>
		</property>
		<property name="iconImageURL"
			value="classpath:com/visual/engine/images/productOrderIcon.png" />
	</bean>
	<bean id="s_entityattachment"
		class="org.jspresso.framework.model.descriptor.entity.basic.BasicEntityDescriptor">
		<constructor-arg value="com.visual.engine.model.s_entityattachment" />
		<property name="propertyDescriptors">
			<list>
				<bean
					class="org.jspresso.framework.model.descriptor.basic.BasicStringPropertyDescriptor">
					<property name="name" value="name" />
					<property name="mandatory" value="false" />
					<property name="readOnly" value="false" />
				</bean>
				<bean
					class="org.jspresso.framework.model.descriptor.basic.BasicBinaryPropertyDescriptor">
					<property name="name" value="document" />
					<property name="mandatory" value="false" />
					<property name="readOnly" value="false" />
				</bean>
			</list>
		</property>
		<property name="iconImageURL"
			value="classpath:com/visual/engine/images/attachmentIcon.png" />
	</bean>
	<bean id="attachment_table"
		class="org.jspresso.framework.model.descriptor.basic.BasicCollectionPropertyDescriptor">
		<property name="name" value="attachment_list" />
		<property value="true" name="composition" />
		<property name="referencedDescriptor">
			<bean
				class="org.jspresso.framework.model.descriptor.basic.BasicCollectionDescriptor">
				<property name="collectionInterface" value="java.util.Set" />
				<property name="elementDescriptor" ref="s_entityattachment" />
			</bean>
		</property>
	</bean>
	<bean id="deal"
		class="org.jspresso.framework.model.descriptor.entity.basic.BasicEntityDescriptor">
		<constructor-arg value="com.visual.engine.model.deal" />
		<property name="grantedRoles">
			<list>
				<value>SalesExecutive</value>
				<value>ProductManager</value>
				<value>SalesManager</value>
			</list>
		</property>
		<property name="propertyDescriptors">
			<list>
				<bean
					class="org.jspresso.framework.model.descriptor.basic.BasicStringPropertyDescriptor">
					<property name="writabilityGates">
						<list>
							<bean
								class="org.jspresso.framework.binding.model.EnumerationPropertyModelGate">
								<property ref="accessorFactory" name="accessorFactory" />
								<property name="propertyName" value="s_state" />
								<property value="true" name="openOnTrue" />
								<property name="openingValues">
									<list>
										<value>created</value>
									</list>
								</property>
								<property name="grantedRoles">
									<list>
										<value>SalesExecutive</value>
									</list>
								</property>
							</bean>
							<bean class="org.jspresso.framework.security.GrantedRolesGate">
								<property name="grantedRoles">
									<list>
										<value>SalesExecutive</value>
									</list>
								</property>
							</bean>
						</list>
					</property>
					<property name="name" value="name" />
					<property name="mandatory" value="true" />
					<property name="readOnly" value="false" />
				</bean>
				<bean
					class="org.jspresso.framework.model.descriptor.basic.BasicReferencePropertyDescriptor">
					<property name="writabilityGates">
						<list>
							<bean
								class="org.jspresso.framework.binding.model.EnumerationPropertyModelGate">
								<property ref="accessorFactory" name="accessorFactory" />
								<property name="propertyName" value="s_state" />
								<property value="true" name="openOnTrue" />
								<property name="openingValues">
									<list>
										<value>created</value>
									</list>
								</property>
								<property name="grantedRoles">
									<list>
										<value>SalesExecutive</value>
									</list>
								</property>
							</bean>
							<bean class="org.jspresso.framework.security.GrantedRolesGate">
								<property name="grantedRoles">
									<list>
										<value>SalesExecutive</value>
									</list>
								</property>
							</bean>
						</list>
					</property>
					<property name="name" value="customer" />
					<property name="mandatory" value="false" />
					<property name="readOnly" value="false" />
					<property name="referencedDescriptor" ref="customer" />
				</bean>
				<bean
					class="org.jspresso.framework.model.descriptor.basic.BasicReferencePropertyDescriptor">
					<property name="writabilityGates">
						<list>
							<bean
								class="org.jspresso.framework.binding.model.EnumerationPropertyModelGate">
								<property ref="accessorFactory" name="accessorFactory" />
								<property name="propertyName" value="s_state" />
								<property value="true" name="openOnTrue" />
								<property name="openingValues">
									<list>
										<value>created</value>
									</list>
								</property>
								<property name="grantedRoles">
									<list>
										<value>SalesExecutive</value>
									</list>
								</property>
							</bean>
							<bean class="org.jspresso.framework.security.GrantedRolesGate">
								<property name="grantedRoles">
									<list>
										<value>SalesExecutive</value>
									</list>
								</property>
							</bean>
						</list>
					</property>
					<property name="name" value="productList" />
					<property name="mandatory" value="false" />
					<property name="readOnly" value="false" />
					<property name="referencedDescriptor" ref="productOrder" />
				</bean>
				<ref local="attachment_table" />
				<bean
					class="org.jspresso.framework.model.descriptor.basic.BasicStringPropertyDescriptor">
					<property name="writabilityGates">
						<list>
							<bean
								class="org.jspresso.framework.binding.model.EnumerationPropertyModelGate">
								<property ref="accessorFactory" name="accessorFactory" />
								<property name="propertyName" value="s_state" />
								<property value="true" name="openOnTrue" />
								<property name="openingValues">
									<list>
										<value>submitted</value>
									</list>
								</property>
								<property name="grantedRoles">
									<list>
										<value>SalesManager</value>
									</list>
								</property>
							</bean>
							<bean class="org.jspresso.framework.security.GrantedRolesGate">
								<property name="grantedRoles">
									<list>
										<value>SalesManager</value>
									</list>
								</property>
							</bean>
						</list>
					</property>
					<property name="name" value="commentsReview" />
					<property name="mandatory" value="false" />
					<property name="readOnly" value="false" />
				</bean>
				<bean
					class="org.jspresso.framework.model.descriptor.basic.BasicEnumerationPropertyDescriptor">
					<property name="name" value="s_state" />
					<property name="enumerationName" value="s_statedeal" />
					<property value="true" name="mandatory" />
					<property value="false" name="readOnly" />
					<property value="32" name="maxLength" />
					<property name="defaultValue" value="created" />
					<property name="valuesAndIconImageUrls">
						<map>
							<entry key="created"
								value="classpath:com/visual/engine/images/createdStateIcon.png" />
							<entry key="submitted"
								value="classpath:com/visual/engine/images/submittedStateIcon.png" />
							<entry key="approved"
								value="classpath:com/visual/engine/images/approvedStateIcon.png" />
						</map>
					</property>
				</bean>
			</list>
		</property>
		<property name="iconImageURL"
			value="classpath:com/visual/engine/images/dealIcon.png" />
	</bean>
</beans>
