<?xml version="1.0" encoding="UTF-8"?>
<action-sequence> 
  <name>securitytest.xaction</name>  
  <title>Security Tests</title>  
  <version>1</version>  
  <logging-level>DEBUG</logging-level>  
  <documentation> 
    <author>Marc Batchelor</author>  
    <description>This action sequence demonstrates using security information from an action sequence document</description>  
    <help/>  
    <result-type>rule</result-type>  
    <icon/> 
  </documentation>  
  <inputs>
    <principalName type="string">
      <sources>
        <security>principalName</security>
      </sources>
    </principalName>
    <principalRoles type="string-list">
      <sources>
        <security>principalRoles</security>
      </sources>
    </principalRoles>
    <principalAuthenticated type="string">
      <sources>
        <security>principalAuthenticated</security>
      </sources>
    </principalAuthenticated>
    <principalAdministrator type="string">
      <sources>
        <security>principalAdministrator</security>
      </sources>
    </principalAdministrator>
    <systemRoleNames type="string-list">
      <sources>
        <security>systemRoleNames</security>
      </sources>
    </systemRoleNames>
    <systemUserNames type="string-list">
      <sources>
        <security>systemUserNames</security>
      </sources>
    </systemUserNames>
  </inputs>  
	<outputs>
		<rule-result type="string"/>
	</outputs>
  <resources/>  
  <actions>
      <action-definition>
      	<action-inputs>
			<principalName type="string"/>
			<principalRoles type="string-list"/>
			<principalAuthenticated type="string"/>
			<principalAdministrator type="string"/>
			<systemRoleNames type="string-list"/>
			<systemUserNames type="string-list"/>
      	</action-inputs>
        <action-outputs>
          	<rule-result type="string"/>
        </action-outputs>
        
        <component-name>org.pentaho.component.JavascriptRule</component-name>
        <action-type>rule</action-type>
      	<component-definition>
      		<script><![CDATA[ 
			    function getStringFromList(aList) {
			      var rtn = "";
			      for (i=0; i<aList.size(); i++) {
			        rtn += ( (i>0 ? ", " : "") + aList.get(i) );
			      }
			      return rtn;
			    }
			  
			    function checkAll( ) {
			      var outputVar = "";
			      outputVar = "Userid: " + principalName + ", Authenticated(" + principalAuthenticated + "), Administrator(" + principalAdministrator + ")";
			      outputVar += "\n User Roles: ";
			      outputVar += getStringFromList(principalRoles);
				  outputVar += "\n System Roles: ";
			      outputVar += getStringFromList(systemRoleNames);
				  outputVar += "\n System Users: ";
			      outputVar += getStringFromList(systemUserNames);
			      out.println(outputVar);
			      return outputVar;
			    } 
			    checkAll( ); 
		      ]]>
		      </script>
        </component-definition>
      </action-definition>

  </actions> 
</action-sequence>