<?xml version="1.0" encoding="UTF-8"?>
<bm:model xmlns:o="leaf.database.local.oracle" xmlns:bm="http://www.leaf-framework.org/schema/bm" xmlns:f="leaf.database.features" baseTable="ZJ_WFL_GRAPHICS_DETAIL">
    <bm:fields>
        <bm:field name="detail_id" databaseType="NUMBER" datatype="java.lang.Long"/>
        <bm:field name="graphic_id" databaseType="NUMBER" datatype="java.lang.Long" insertExpression="${../../@graphic_id}"/>
        <bm:field name="config" databaseType="VARCHAR" datatype="java.lang.String"/>
        <bm:field name="type" databaseType="VARCHAR" datatype="java.lang.String"/>
        <bm:field name="table_name" databaseType="VARCHAR" datatype="java.lang.String"/>
        <bm:field name="table_id" databaseType="NUMBER" datatype="java.lang.Long"/>
        <bm:field name="node_desc" forInsert="false" forUpdate="false"/>
        <bm:field name="node_type" forInsert="false" forUpdate="false"/>
    </bm:fields>
    <bm:operations>
        <bm:operation name="query">
            <bm:query-sql><![CDATA[
            SELECT t1.detail_id,
			       t1.graphic_id,
			       t1.config,
			       t1.type,
			       t1.table_name,
			       (select n.node_desc
			          from zj_wfl_workflow_node n
               		 where n.node_id = t1.table_id) as node_desc,
			       (select n.node_type
			          from zj_wfl_workflow_node n
               		 where n.node_id = t1.table_id) as node_type,
			       t1.table_id
			  FROM zj_wfl_graphics_detail t1
			 where exists (select 1
				            from zj_wfl_graphics g
				           where g.workflow_id = ${@workflow_id}
				             and g.graphic_id = t1.graphic_id)
		   union all
            SELECT NULL AS detail_id,
			       NULL AS graphic_id,
			       NULL AS config,
			       decode(n.node_type,
			              'SUB_PROCESS',
			              'oval',
			              'BRANCH_NODE',
			              'diamond',
			              'rect') as type,
			       null as table_name,
			       n.node_desc,
			       n.node_type,
			       n.node_id as table_id
			  from zj_wfl_workflow_node n
			 where n.workflow_id = ${@workflow_id}
			   and not exists (select 1
			          from zj_wfl_graphics_detail d, zj_wfl_graphics g
			         where g.workflow_id = n.workflow_id
			           and d.graphic_id = g.graphic_id
			           and d.table_id = n.node_id)
            ]]></bm:query-sql>
        </bm:operation>
        <bm:operation name="insert">
            <bm:parameters>
                <bm:parameter name="detail_id" input="false" output="true" outputPath="@detail_id"/>
                <bm:parameter name="graphic_id" input="false" output="true" outputPath="@graphic_id"/>
            </bm:parameters>
            <bm:update-sql><![CDATA[
            begin
               ${@graphic_id}:=${../../@graphic_id};
			   zj_wfl_graphics_pkg.graphics_detail_update(p_detail_id  => ${@detail_id},
											              p_graphic_id => ${../../@graphic_id},
											              p_config     => ${@config},
											              p_type       => ${@type},
											              p_table_name => ${@table_name},
											              p_table_id   => ${@table_id},
											              p_user_id	   => ${/session/@user_id});

        	end;
        	]]></bm:update-sql>
        </bm:operation>
        <bm:operation name="update">
            <bm:update-sql><![CDATA[
            begin
			   zj_wfl_graphics_pkg.graphics_detail_update(p_detail_id  => ${@detail_id},
											              p_graphic_id => ${../../@graphic_id},
											              p_config     => ${@config},
											              p_type       => ${@type},
											              p_table_name => ${@table_name},
											              p_table_id   => ${@table_id},
											              p_user_id	   => ${/session/@user_id});

        	end;
        	]]></bm:update-sql>
        </bm:operation>
        <bm:operation name="execute">
            <bm:update-sql><![CDATA[
            begin
               zj_wfl_graphics_pkg.graphics_reset(p_workflow_id => ${/parameter/@workflow_id},
               									  p_user_id	    => ${/session/@user_id});
                
        	end;
        	]]></bm:update-sql>
        </bm:operation>
    </bm:operations>
    <bm:primary-key>
        <bm:pk-field name="detail_id"/>
    </bm:primary-key>
    <bm:features>
        <o:sequence-pk/>
    </bm:features>
</bm:model>
