<properties xmlns="http://riddl.org/ns/common-patterns/properties/1.0">
  <attributes>
    <uuid>c4e4e1a5-29ed-4c79-8812-4d484e1e0105</uuid>
    <info>Enter info here</info>
    <modeltype>CPEE</modeltype>
    <theme>default</theme>
  </attributes>
  <state>stopped</state>
  <handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
  <positions>
    <a1>after</a1>
  </positions>
  <dataelements>
    <persons>3</persons>
    <card>Visa_12345</card>
    <airline>Lufthansa</airline>
    <hotels>[]</hotels>
    <from>Vienna</from>
    <to>Prague</to>
    <costs>505.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: { :method =&gt; :post, :arguments =&gt; {:from =&gt; data.from, :to =&gt; data.to, :persons =&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: { :method =&gt; :post, :arguments =&gt; {:to =&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 "data.costs &gt; 700" do
    call :a4, :approve, parameters: { :method =&gt; :post, :arguments =&gt; {:costs =&gt; data.costs} }
  end
end
</dsl>
  <dslx>
    <description xmlns="http://cpee.org/ns/description/1.0">
      <call id="a1" endpoint="bookAir">
        <parameters>
          <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>
                <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>
        <alternative condition="data.costs &gt; 700">
          <call id="a4" endpoint="approve">
            <parameters>
              <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>
          <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>
                <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>
        <alternative condition="data.costs &gt; 700">
          <call id="a4" endpoint="approve">
            <parameters>
              <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>