<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="menu">
    <resultMap type="MenuVo" id="menuResult">
        <result column="ID" property="id" />
        <result column="NAME" property="name" />
        <result column="TYPE" property="type" />
        <result column="PARAMETER" property="parameter" />
        <result column="PRIORITY" property="priority" />
        <result column="PARENT_MENU_ID" property="parentMenuId" />
        <result column="VIEW_LEVEL" property="viewLevel"/>
        <result column="CHILD_MENU_COUNT" property="childMenuCount"/>
        <result column="CREATOR" property="creator"/>
    </resultMap>

    <select id="getMenuList" parameterType="string" resultMap="menuResult">
        SELECT
        	ID,
        	NAME,
        	TYPE,
        	PARAMETER,
        	PRIORITY,
        	PARENT_MENU_ID,
        	VIEW_LEVEL,
        	(SELECT COUNT(*) FROM IMB_MENU WHERE PARENT_MENU_ID = A.ID) AS CHILD_MENU_COUNT,
        	CREATOR
        FROM
        	IMB_MENU A
        WHERE
        	<choose>
        		<when test="!#{parentMenuId}">PARENT_MENU_ID IS NULL OR PARENT_MENU_ID = ID OR PARENT_MENU_ID = ''</when>
        		<otherwise>PARENT_MENU_ID = #{parentMenuId}</otherwise>
        	</choose>
        ORDER BY
        	PARENT_MENU_ID, PRIORITY
    </select>

    <select id="searchMenu" parameterType="MenuVo" resultMap="menuResult">
        SELECT
        	ID,
        	NAME,
        	TYPE,
        	PARAMETER,
        	PRIORITY,
        	PARENT_MENU_ID,
        	VIEW_LEVEL,
        	(SELECT COUNT(*) FROM IMB_MENU WHERE PARENT_MENU_ID = A.ID) AS CHILD_MENU_COUNT,
        	CREATOR
        FROM
        	IMB_MENU A
        WHERE
        	1 = 1
        	<if test="#{id}">
        		AND ID = #{id}
        	</if>
        	<if test="#{name}">
        		AND NAME = #{name}
        	</if>
        	<if test="#{type}">
        		AND TYPE = #{type}
        	</if>
        	<if test="#{parameter}">
        		AND PARAMETER = #{parameter}
        	</if>
        	<if test="#{parentMenuId}">
        		AND PARENT_MENU_ID = #{parentMenuId}
        	</if>
        	<if test="#{creator}">
        		AND CREATOR = #{creator}
        	</if>
    </select>

    <select id="getMenu" parameterType="id" resultMap="menuResult">
        SELECT
        	ID,
        	NAME,
        	TYPE,
        	PARAMETER,
        	PRIORITY,
        	PARENT_MENU_ID,
        	VIEW_LEVEL,
        	(SELECT COUNT(*) FROM IMB_MENU WHERE PARENT_MENU_ID = A.ID) AS CHILD_MENU_COUNT,
        	CREATOR
        FROM
        	IMB_MENU A
        WHERE
    		ID = #{id}
    </select>

    <select id="getNextPriority" resultType="int">
        SELECT if(isnull(MAX(PRIORITY)), 0, MAX(PRIORITY)+1) FROM IMB_MENU
    </select>

    <select id="getMenuByName" parameterType="MenuVo" resultMap="menuResult">
        SELECT
        	ID,
        	NAME,
        	TYPE,
        	PARAMETER,
        	PRIORITY,
        	PARENT_MENU_ID,
        	VIEW_LEVEL,
        	(SELECT COUNT(*) FROM IMB_MENU WHERE PARENT_MENU_ID = A.ID) AS CHILD_MENU_COUNT,
        	CREATOR,
        FROM
        	IMB_MENU A
        WHERE
        	NAME = #{name}
    </select>

    <insert id="insertMenu" parameterType="MenuVo">
        INSERT INTO IMB_MENU
        	(ID, NAME, TYPE, PARAMETER, PRIORITY, PARENT_MENU_ID, VIEW_LEVEL, CREATOR, GROUP_ID)
        VALUES
        	(
        		#{id},
        		#{name},
        		#{type},
        		#{parameter},
        		#{priority},
        		#{parentMenuId},
        		#{viewLevel},
        		#{creator},
                #{parentMenuId}
        	)
    </insert>

    <update id="updateMenu" parameterType="MenuVo">
        UPDATE
        	IMB_MENU
       	SET
       		NAME = #{name}
       		<if test="#{type} != null">,TYPE = #{type}</if>
       		<if test="#{parameter} != null">,PARAMETER = #{parameter}</if>
       		<if test="#{priority} != null">,PRIORITY = #{priority}</if>
       		<if test="#{parentMenuId} != null">,PARENT_MENU_ID = #{parentMenuId}</if>
       		<if test="#{viewLevel} != null">,VIEW_LEVEL = #{viewLevel}</if>
        WHERE
       		ID = #{id}
    </update>

    <delete id="deleteMenu" parameterType="string">
        DELETE FROM
        	IMB_MENU
        WHERE
       		ID = #{id}
    </delete>
    <delete id="deleteMenuByParentMenuId" parameterType="string">
        DELETE FROM
        	IMB_MENU
        WHERE
       		GROUP_ID = #{id}
    </delete>
</mapper>
