<?xml version="1.0" encoding="UTF-8"?>
<pd:ProcessDefinition id="eIDASAuthentication_v2"
  xmlns:pd="http://reference.e-government.gv.at/namespace/moa/process/definition/v1">


  <pd:Task id="generateAuthnRequest"    class="GenerateAuthnRequestTask" />
  <pd:Task id="receiveAuthnResponse"    class="ReceiveAuthnResponseTask" async="true" />
  <pd:Task id="finalizeAuthentication"  class="FinalizeAuthenticationTask" />
  <pd:Task id="generateIdentityLink"    class="CreateIdentityLinkTask" />

  <pd:Task id="initialRegisterSearch"   class="InitialSearchTask" />

  <pd:Task id="createNewErnpEntryTask"                    class="CreateNewErnpEntryTask" />
  <pd:Task id="generateOtherLoginMethodGuiTask"           class="GenerateOtherLoginMethodGuiTask" />
  <pd:Task id="generateMobilePhoneSignatureRequestTask"   class="GenerateMobilePhoneSignatureRequestTask" />
  <pd:Task id="receiveOtherLoginMethodGuiResponseTask"    class="ReceiveOtherLoginMethodGuiResponseTask" async="true" />
  <pd:Task id="receiveMobilePhoneSignatureResponseTask"   class="ReceiveMobilePhoneSignatureResponseTask" async="true"/>
  <pd:Task id="generateAustrianResidenceGuiTask"          class="GenerateAustrianResidenceGuiTask" />
  <pd:Task id="receiveAustrianResidenceGuiResponseTask"   class="ReceiveAustrianResidenceGuiResponseTask" async="true"/>
  <pd:Task id="generateAlternativeEidasAuthnRequest"      class="GenerateAuthnRequestTask" />
  <pd:Task id="receiveAlternativeEidasAuthnRequest"       class="ReceiveAuthnResponseAlternativeTask" async="true" />
  <pd:Task id="alternativeRegisterSearch"                 class="AlternativeSearchTask" />

  <pd:StartEvent id="start" />

  <pd:Transition  from="start"                        to="generateAuthnRequest" />
  <pd:Transition  from="generateAuthnRequest"         to="receiveAuthnResponse" />
  <pd:Transition  conditionExpression="ctx['msConnectorStaging']"
                  from="receiveAuthnResponse"         to="receiveAuthnResponse" />
  <pd:Transition  from="receiveAuthnResponse"         to="initialRegisterSearch" />

  <pd:Transition  conditionExpression="ctx['TASK_CreateNewErnpEntryTask']"
                  from="initialRegisterSearch"        to="createNewErnpEntryTask" />
  <pd:Transition  conditionExpression="ctx['TASK_GenerateOtherLoginMethodGuiTask']"
                  from="initialRegisterSearch"        to="generateOtherLoginMethodGuiTask"/>
  <pd:Transition  from="initialRegisterSearch"        to="generateIdentityLink" />

  <!-- alternative matching modes -->
  <pd:Transition  from="generateOtherLoginMethodGuiTask"            to="receiveOtherLoginMethodGuiResponseTask" />
  <pd:Transition  conditionExpression="ctx['changeLanguage'] or ctx['TASK_GenerateOtherLoginMethodGuiTask']"
                  from="receiveOtherLoginMethodGuiResponseTask"     to="generateOtherLoginMethodGuiTask" />
  <pd:Transition  conditionExpression="ctx['TASK_GenerateAlternativeEidasAuthn']"
                  from="receiveOtherLoginMethodGuiResponseTask"     to="generateAlternativeEidasAuthnRequest" />
  <pd:Transition  conditionExpression="ctx['TASK_GenerateMobilePhoneSignatureRequestTask']"
                  from="receiveOtherLoginMethodGuiResponseTask"     to="generateMobilePhoneSignatureRequestTask" />
  <pd:Transition  conditionExpression="ctx['TASK_GenerateAustrianResidenceGuiTask']"
                  from="receiveOtherLoginMethodGuiResponseTask"     to="generateAustrianResidenceGuiTask" />
  <pd:Transition  conditionExpression="ctx['TASK_RequestingNewErnpEntryTask']"
                  from="receiveOtherLoginMethodGuiResponseTask"     to="generateOtherLoginMethodGuiTask" />
  <pd:Transition  conditionExpression="ctx['TASK_CreateNewErnpEntryTask']"
                  from="receiveOtherLoginMethodGuiResponseTask"     to="createNewErnpEntryTask" />

  <!-- alternative eIDAS authentication -->
  <pd:Transition  from="generateAlternativeEidasAuthnRequest"       to="receiveAlternativeEidasAuthnRequest" />  
  <pd:Transition  conditionExpression="ctx['msConnectorStaging']"
                  from="receiveAlternativeEidasAuthnRequest"        to="receiveAlternativeEidasAuthnRequest" />
  <pd:Transition  from="receiveAlternativeEidasAuthnRequest"        to="alternativeRegisterSearch" />  
  <pd:Transition  conditionExpression="ctx['TASK_GenerateOtherLoginMethodGuiTask']"
                  from="alternativeRegisterSearch"                  to="generateOtherLoginMethodGuiTask" />
  <pd:Transition  from="alternativeRegisterSearch"                  to="generateIdentityLink" />


  <!-- ID Austria authentication -->
  <pd:Transition  from="generateMobilePhoneSignatureRequestTask"    to="receiveMobilePhoneSignatureResponseTask" />
  <pd:Transition  conditionExpression="ctx['TASK_GenerateOtherLoginMethodGuiTask']"
                  from="receiveMobilePhoneSignatureResponseTask"    to="generateOtherLoginMethodGuiTask" />
  <pd:Transition  from="receiveMobilePhoneSignatureResponseTask"    to="generateIdentityLink" />


  <!-- address searching -->
  <pd:Transition  from="generateAustrianResidenceGuiTask"           to="receiveAustrianResidenceGuiResponseTask" />        
  <pd:Transition  conditionExpression="ctx['changeLanguage'] or ctx['TASK_GenerateAustrianResidenceGuiTask']"
                  from="receiveAustrianResidenceGuiResponseTask"    to="generateAustrianResidenceGuiTask" />    
  <pd:Transition  conditionExpression="ctx['TASK_RequestingNewErnpEntryTask']"
                  from="receiveAustrianResidenceGuiResponseTask"    to="generateOtherLoginMethodGuiTask" />   
  <pd:Transition  from="receiveAustrianResidenceGuiResponseTask"    to="generateIdentityLink" />

  <pd:Transition  from="createNewErnpEntryTask"                     to="generateIdentityLink" />

  <pd:Transition  from="generateIdentityLink"                       to="finalizeAuthentication" />
  <pd:Transition  from="finalizeAuthentication"                     to="end" />

  <pd:EndEvent id="end" />

</pd:ProcessDefinition>