<?xml version="1.0" encoding="UTF-8"?>
<data name="Accounts" description="Identity Management Service">
    <config id="accounts">
        <property name="org.wso2.ws.dataservice.driver">org.postgresql.Driver</property>
        <property name="org.wso2.ws.dataservice.protocol">jdbc:postgresql://localhost:5432/accounts</property>
        <property name="org.wso2.ws.dataservice.user">jq_public</property>
        <property name="org.wso2.ws.dataservice.password">asdf</property>
        <property name="org.wso2.ws.dataservice.minpoolsize">2</property>
        <property name="org.wso2.ws.dataservice.maxpoolsize">4</property>
        <property name="org.wso2.ws.dataservice.autocommit">true</property>
    </config>

    <query id="RegisterAccountQ" useConfig="accounts">
        <sql>select interface.register( ?, ? );</sql>
        <result element="result" rowName="status" defaultNamespace="">
            <element name="success" column="register" xsdType="xs:boolean"/>
        </result>
        <param name="username" sqlType="STRING" type="IN" ordinal="1"/>
        <param name="password" sqlType="STRING" type="IN" ordinal="2"/>
    </query>
    <operation name="RegisterAccount">
        <call-query href="RegisterAccountQ">
            <with-param name="username" query-param="username"/>
            <with-param name="password" query-param="password"/>
        </call-query>
    </operation>

    <query id="LoginQ" useConfig="accounts">
        <sql>select * from interface.login( ?, ? );</sql>
        <result element="result" rowName="loginInfo" defaultNamespace="">
            <element name="sessionId" column="session_id" xsdType="xs:string"/>
            <element name="isAdmin" column="is_admin" xsdType="xs:boolean"/>
        </result>
        <param name="username" sqlType="STRING" type="IN" ordinal="1"/>
        <param name="password" sqlType="STRING" type="IN" ordinal="2"/>
    </query>
    <operation name="Login">
        <call-query href="LoginQ">
            <with-param name="username" query-param="username"/>
            <with-param name="password" query-param="password"/>
        </call-query>
    </operation>

    <query id="LogoutQ" useConfig="accounts">
        <sql>select interface.logout( ? );</sql>
        <result element="result" rowName="status" defaultNamespace="">
            <element name="success" column="logout" xsdType="xs:boolean"/>
        </result>
        <param name="sessionId" sqlType="STRING" type="IN" ordinal="1"/>
    </query>
    <operation name="Logout">
        <call-query href="LogoutQ">
            <with-param name="sessionId" query-param="sessionId"/>
        </call-query>
    </operation>

    <query id="SetPasswordQ" useConfig="accounts">
        <sql>select interface.set_password( ?, ?, ? );</sql>
        <result element="result" rowName="status" defaultNamespace="">
            <element name="success" column="set_password" xsdType="xs:boolean"/>
        </result>
        <param name="username" sqlType="STRING" type="IN" ordinal="1"/>
        <param name="password" sqlType="STRING" type="IN" ordinal="2"/>
        <param name="sessionId" sqlType="STRING" type="IN" ordinal="3"/>
    </query>
    <operation name="SetPassword">
        <call-query href="SetPasswordQ">
            <with-param name="username" query-param="username"/>
            <with-param name="password" query-param="password"/>
            <with-param name="sessionId" query-param="sessionId"/>
        </call-query>
    </operation>

    <query id="GetUsernamesQ" useConfig="accounts">
        <sql>select interface.get_usernames( ? );</sql>
        <result element="result" rowName="account" defaultNamespace="">
            <element name="username" column="get_usernames" xsdType="xs:string"/>
        </result>
        <param name="sessionId" sqlType="STRING" type="IN" ordinal="1"/>
    </query>
    <operation name="GetUsernames">
        <call-query href="GetUsernamesQ">
            <with-param name="sessionId" query-param="sessionId"/>
        </call-query>
    </operation>

</data>

<!--
xsdType can be:
xs:string
xs:integer
xs:boolean
xs:float
xs:double
xs:decimal
xs:dateTime
xs:time
xs:date
xs:long

sqlType can be:
STRING
INTEGER
REAL
DOUBLE
NUMERIC
TINYINT
SMALLINT
BIGINT
DATE[yyyy-mm-dd]
TIME[hh:mm:ss]
TIMESTAMP
BIT
ORACLE REF CURSOR
-->
