<properties xmlns="http://riddl.org/ns/common-patterns/properties/1.0">
  <attributes>
    <uuid>709db925-816d-4a9b-b043-3594786fc2fb</uuid>
    <info>Enter info here</info>
    <modeltype>CPEE</modeltype>
    <theme>default</theme>
  </attributes>
  <state>finished</state>
  <handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
  <positions/>
  <dataelements>
    <persons>0</persons>
    <card>Visa_12345</card>
    <airline>American Airlines</airline>
    <hotels>["Mariott","Mariott","Ibis"]</hotels>
    <from>Vienna</from>
    <to>Prague</to>
    <costs>1150.0</costs>
  </dataelements>
  <endpoints>
    <bookAir>http://gruppe.wst.univie.ac.at/~mangler/services/airline.php</bookAir>
    <bookHotel>http://gruppe.wst.univie.ac.at/~mangler/services/hotel.php</bookHotel>
    <approve>http://gruppe.wst.univie.ac.at/~mangler/services/approval.php</approve>
  </endpoints>
  <dsl>call :a1, :bookAir, parameters: { :label =&gt; "Book Airline", :method =&gt; :post, :arguments =&gt; [⭐(:name =&gt; :from, :value =&gt; data.from), ⭐(:name =&gt; :to, :value =&gt; data.to), ⭐(:name =&gt; :persons, :value =&gt; data.persons)] }, finalize: &lt;&lt;-END
  data.airline = result.value('id')
  data.costs += result.value('costs').to_f
  status.update 1, 'Hotel'
END
parallel do
  loop pre_test{data.persons &gt; 0}  do
    parallel_branch data.persons do |p|
      call :a2, :bookHotel, parameters: { :label =&gt; "Book Hotel", :method =&gt; :post, :arguments =&gt; [⭐(:name =&gt; :to, :value =&gt; data.to)] }, finalize: &lt;&lt;-END
        data.hotels &lt;&lt; result.value('id')
        data.costs += result.value('costs').to_f
      END
    end
    manipulate :a3, &lt;&lt;-END
      data.persons -= 1
    END
  end
end
choose :inclusive do
  alternative test{data.costs &gt; 700} do
    call :a4, :approve, parameters: { :label =&gt; "Approve Hotel", :method =&gt; :post, :arguments =&gt; [⭐(:name =&gt; :costs, :value =&gt; data.costs)] }
  end
end
</dsl>
  <dslx>
    <description xmlns="http://cpee.org/ns/description/1.0">
      <call id="a1" endpoint="bookAir">
        <parameters>
          <label>Book Airline</label>
          <method>:post</method>
          <arguments>
            <from>data.from</from>
            <to>data.to</to>
            <persons>data.persons</persons>
          </arguments>
        </parameters>
        <finalize output="result">data.airline = result.value('id')
data.costs += result.value('costs').to_f
status.update 1, 'Hotel'</finalize>
      </call>
      <parallel>
        <loop mode="pre_test" condition="data.persons &gt; 0">
          <parallel_branch pass="data.persons" local="p">
            <call id="a2" endpoint="bookHotel">
              <parameters>
                <label>Book Hotel</label>
                <method>:post</method>
                <arguments>
                  <to>data.to</to>
                </arguments>
              </parameters>
              <finalize output="result">data.hotels &lt;&lt; result.value('id')
data.costs += result.value('costs').to_f</finalize>
            </call>
          </parallel_branch>
          <manipulate id="a3">data.persons -= 1</manipulate>
        </loop>
      </parallel>
      <choose mode="inclusive">
        <alternative condition="data.costs &gt; 700">
          <call id="a4" endpoint="approve">
            <parameters>
              <label>Approve Hotel</label>
              <method>:post</method>
              <arguments>
                <costs>data.costs</costs>
              </arguments>
            </parameters>
          </call>
        </alternative>
      </choose>
    </description>
  </dslx>
  <status>
    <id>0</id>
    <message>undefined</message>
  </status>
  <description>
    <description xmlns="http://cpee.org/ns/description/1.0">
      <call id="a1" endpoint="bookAir">
        <parameters>
          <label>Book Airline</label>
          <method>:post</method>
          <arguments>
            <from>data.from</from>
            <to>data.to</to>
            <persons>data.persons</persons>
          </arguments>
        </parameters>
        <finalize output="result">data.airline = result.value('id')
data.costs += result.value('costs').to_f
status.update 1, 'Hotel'</finalize>
      </call>
      <parallel>
        <loop mode="pre_test" condition="data.persons &gt; 0">
          <parallel_branch pass="data.persons" local="p">
            <call id="a2" endpoint="bookHotel">
              <parameters>
                <label>Book Hotel</label>
                <method>:post</method>
                <arguments>
                  <to>data.to</to>
                </arguments>
              </parameters>
              <finalize output="result">data.hotels &lt;&lt; result.value('id')
data.costs += result.value('costs').to_f</finalize>
            </call>
          </parallel_branch>
          <manipulate id="a3">data.persons -= 1</manipulate>
        </loop>
      </parallel>
      <choose mode="inclusive">
        <alternative condition="data.costs &gt; 700">
          <call id="a4" endpoint="approve">
            <parameters>
              <label>Approve Hotel</label>
              <method>:post</method>
              <arguments>
                <costs>data.costs</costs>
              </arguments>
            </parameters>
          </call>
        </alternative>
      </choose>
    </description>
  </description>
  <transformation>
    <description type="copy"/>
    <dataelements type="rest"/>
    <endpoints type="rest"/>
  </transformation>
</properties>