<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<XModeler>
  <Version>3</Version>
  <Categories/>
  <Projects>
    <Project name="Root::Factories"/>
  </Projects>
  <Diagrams>
    <Diagram label="CollaborativeChallenge" package_path="Root::Factories">
      <Categories/>
      <Owners/>
      <Objects>
        <Object hidden="false" ref="Root::Factories::reportManager1" x="787" y="1638"/>
        <Object hidden="false" ref="Root::Factories::s400_001" x="560" y="1853"/>
        <Object hidden="false" ref="Root::Factories::s400_002" x="17" y="1854"/>
        <Object hidden="false" ref="Root::Factories::S400" x="141" y="951"/>
        <Object hidden="false" ref="Root::Factories::RAM8" x="1756" y="304"/>
        <Object hidden="false" ref="Root::Factories::ReportManager" x="748" y="1190"/>
        <Object hidden="false" ref="Root::Factories::RAM" x="396" y="353"/>
        <Object hidden="false" ref="Root::Factories::GenericFactory" x="106" y="142"/>
        <Object hidden="false" ref="Root::Factories::S500" x="739" y="939"/>
        <Object hidden="false" ref="Root::Factories::Factory124" x="85" y="1664"/>
        <Object hidden="false" ref="Root::Factories::RAM32" x="1446" y="303"/>
        <Object hidden="false" ref="Root::Factories::MobilePhoneFactory" x="14" y="353"/>
        <Object hidden="false" ref="Root::Factories::RAM64" x="1784" y="461"/>
        <Object hidden="false" ref="Root::Factories::Company" x="419" y="155"/>
        <Object hidden="false" ref="Root::Factories::Huawei" x="416" y="1674"/>
        <Object hidden="false" ref="Root::Factories::RAM4" x="348" y="496"/>
        <Object hidden="false" ref="Root::Factories::RAM16" x="1596" y="302"/>
        <Object hidden="false" ref="Root::Factories::GenericMobileDevice" x="715" y="339"/>
        <Object hidden="false" ref="Root::Factories::rAM41" x="313" y="1831"/>
        <Object hidden="true" ref="Root::Factories::RAM1" x="0" y="0"/>
        <Object hidden="false" ref="Root::Factories::RAM2" x="514" y="494"/>
        <Object hidden="false" ref="Root::Factories::GenericDevice" x="745" y="132"/>
        <Object hidden="false" ref="Root::Factories::rAM42" x="314" y="1898"/>
        <Object hidden="false" ref="Root::Factories::rAM21" x="318" y="1951"/>
      </Objects>
      <Edges>
        <Edge ref="AssociationLinkMapping: Root::Factories::Factory124/Root::Factories::S400/Root::Factories::supports" source_port="WEST" target_port="WEST" type="link">
          <IntermediatePoints>
            <IntermediatePoint x="9.9998" y="1701.5724"/>
            <IntermediatePoint x="9.9998" y="1062.1055"/>
          </IntermediatePoints>
        </Edge>
        <Edge name="ownsFactory" parent_association="VOID" ref="Root::Factories::ownsFactory" source_port="WEST" target_port="EAST" type="association">
          <IntermediatePoints>
            <IntermediatePoint x="316.66666" y="198.24219"/>
            <IntermediatePoint x="316.66666" y="197.55273"/>
          </IntermediatePoints>
        </Edge>
        <Edge ref="InheritanceMapping: Root::Factories::GenericMobileDevice/Root::Factories::GenericDevice" source_port="NORTH" target_port="SOUTH" type="inheritance">
          <IntermediatePoints>
            <IntermediatePoint x="865.262" y="312.68057"/>
            <IntermediatePoint x="865.3919" y="312.68057"/>
          </IntermediatePoints>
        </Edge>
        <Edge ref="AssociationLinkMapping: Root::Factories::s400_002/Root::Factories::rAM42/Root::Factories::hasRAMs" source_port="EAST" target_port="WEST" type="link">
          <IntermediatePoints>
            <IntermediatePoint x="250.88159" y="1922.5671"/>
            <IntermediatePoint x="250.88159" y="1920.325"/>
          </IntermediatePoints>
        </Edge>
        <Edge ref="AssociationLinkMapping: Root::Factories::Huawei/Root::Factories::S500/Root::Factories::owns" source_port="EAST" target_port="WEST" type="link">
          <IntermediatePoints>
            <IntermediatePoint x="695.0501" y="1719.446"/>
            <IntermediatePoint x="695.0501" y="1087.383"/>
          </IntermediatePoints>
        </Edge>
        <Edge name="hasRAMs" parent_association="VOID" ref="Root::Factories::hasRAMs" source_port="WEST" target_port="EAST" type="association">
          <IntermediatePoints>
            <IntermediatePoint x="677.11957" y="471.39322"/>
            <IntermediatePoint x="677.11957" y="406.7194"/>
          </IntermediatePoints>
        </Edge>
        <Edge ref="AssociationLinkMapping: Root::Factories::Factory124/Root::Factories::s400_002/Root::Factories::produces" source_port="WEST" target_port="NORTH" type="link">
          <IntermediatePoints>
            <IntermediatePoint x="7.757409" y="1738.9408"/>
            <IntermediatePoint x="7.757409" y="1814.0668"/>
            <IntermediatePoint x="113.12905" y="1814.0668"/>
          </IntermediatePoints>
        </Edge>
        <Edge ref="AssociationLinkMapping: Root::Factories::Huawei/Root::Factories::Factory124/Root::Factories::ownsFactory" source_port="WEST" target_port="EAST" type="link">
          <IntermediatePoints>
            <IntermediatePoint x="343.69116" y="1719.446"/>
            <IntermediatePoint x="343.69116" y="1720.2566"/>
          </IntermediatePoints>
        </Edge>
        <Edge ref="AssociationLinkMapping: Root::Factories::Factory124/Root::Factories::S500/Root::Factories::supports" source_port="NORTH" target_port="WEST" type="link">
          <IntermediatePoints>
            <IntermediatePoint x="184.31117" y="1599.9185"/>
            <IntermediatePoint x="594.81067" y="1599.9185"/>
            <IntermediatePoint x="594.81067" y="1013.3127"/>
          </IntermediatePoints>
        </Edge>
        <Edge ref="AssociationLinkMapping: Root::Factories::Huawei/Root::Factories::S400/Root::Factories::owns" source_port="NORTH" target_port="SOUTH" type="link">
          <IntermediatePoints>
            <IntermediatePoint x="515.31116" y="1252.3479"/>
            <IntermediatePoint x="312.23633" y="1252.3479"/>
          </IntermediatePoints>
        </Edge>
        <Edge name="produces" parent_association="VOID" ref="Root::Factories::produces" source_port="NORTH" target_port="NORTH" type="association">
          <IntermediatePoints>
            <IntermediatePoint x="196.29395" y="87.91504"/>
            <IntermediatePoint x="835.29395" y="87.91504"/>
          </IntermediatePoints>
        </Edge>
        <Edge name="supports" parent_association="VOID" ref="Root::Factories::supports" source_port="SOUTH" target_port="SOUTH" type="association">
          <IntermediatePoints>
            <IntermediatePoint x="196.29395" y="314.58173"/>
            <IntermediatePoint x="805.196" y="314.58173"/>
          </IntermediatePoints>
        </Edge>
        <Edge name="owns" parent_association="VOID" ref="Root::Factories::owns" source_port="EAST" target_port="WEST" type="association">
          <IntermediatePoints>
            <IntermediatePoint x="652.0" y="198.24219"/>
            <IntermediatePoint x="652.0" y="198.36328"/>
          </IntermediatePoints>
        </Edge>
        <Edge ref="AssociationLinkMapping: Root::Factories::Factory124/Root::Factories::s400_001/Root::Factories::produces" source_port="SOUTH" target_port="WEST" type="link">
          <IntermediatePoints>
            <IntermediatePoint x="184.31117" y="1812.9456"/>
            <IntermediatePoint x="526.70404" y="1812.9456"/>
            <IntermediatePoint x="526.70404" y="1893.5408"/>
          </IntermediatePoints>
        </Edge>
        <Edge ref="AssociationLinkMapping: Root::Factories::s400_001/Root::Factories::rAM41/Root::Factories::hasRAMs" source_port="WEST" target_port="EAST" type="link">
          <IntermediatePoints>
            <IntermediatePoint x="470.68942" y="1933.8777"/>
            <IntermediatePoint x="470.68942" y="1853.325"/>
          </IntermediatePoints>
        </Edge>
        <Edge ref="AssociationLinkMapping: Root::Factories::s400_001/Root::Factories::rAM21/Root::Factories::hasRAMs" source_port="WEST" target_port="EAST" type="link">
          <IntermediatePoints>
            <IntermediatePoint x="511.48853" y="1974.2146"/>
            <IntermediatePoint x="511.48853" y="1973.325"/>
          </IntermediatePoints>
        </Edge>
      </Edges>
      <Labels>
        <Label localID="0" ownerID="AssociationLinkMapping: Root::Factories::Huawei/Root::Factories::S500/Root::Factories::owns" x="-78.0582" y="309.18262"/>
        <Label localID="3" ownerID="Root::Factories::owns" x="-152.146" y="-28.621094"/>
        <Label localID="4" ownerID="Root::Factories::owns" x="143.9668" y="10.0"/>
        <Label localID="0" ownerID="AssociationLinkMapping: Root::Factories::Huawei/Root::Factories::S400/Root::Factories::owns" x="-23.000347" y="-170.63165"/>
        <Label localID="0" ownerID="AssociationLinkMapping: Root::Factories::s400_002/Root::Factories::rAM42/Root::Factories::hasRAMs" x="-5.3333335" y="-27.93164"/>
        <Label localID="5" ownerID="Root::Factories::owns" x="-152.146" y="10.0"/>
        <Label localID="0" ownerID="Root::Factories::hasRAMs" x="-58.43023" y="-53.650116"/>
        <Label localID="0" ownerID="AssociationLinkMapping: Root::Factories::s400_001/Root::Factories::rAM41/Root::Factories::hasRAMs" x="-21.333332" y="18.068361"/>
        <Label localID="0" ownerID="Root::Factories::supports" x="-81.95951" y="92.73368"/>
        <Label localID="4" ownerID="Root::Factories::hasRAMs" x="143.9668" y="10.0"/>
        <Label localID="2" ownerID="Root::Factories::supports" x="143.9668" y="-28.621094"/>
        <Label localID="3" ownerID="Root::Factories::hasRAMs" x="-228.78711" y="-28.621094"/>
        <Label localID="3" ownerID="Root::Factories::supports" x="-152.146" y="-28.621094"/>
        <Label localID="0" ownerID="AssociationLinkMapping: Root::Factories::Huawei/Root::Factories::Factory124/Root::Factories::ownsFactory" x="-38.62861" y="-28.454975"/>
        <Label localID="2" ownerID="Root::Factories::hasRAMs" x="143.9668" y="-28.621094"/>
        <Label localID="4" ownerID="Root::Factories::supports" x="143.9668" y="10.0"/>
        <Label localID="5" ownerID="Root::Factories::supports" x="-164.0542" y="10.0"/>
        <Label localID="5" ownerID="Root::Factories::hasRAMs" x="-242.4043" y="10.0"/>
        <Label localID="0" ownerID="AssociationLinkMapping: Root::Factories::Factory124/Root::Factories::S400/Root::Factories::supports" x="-203.97502" y="-359.36618"/>
        <Label localID="0" ownerID="AssociationLinkMapping: Root::Factories::Factory124/Root::Factories::s400_001/Root::Factories::produces" x="-94.386505" y="-40.85702"/>
        <Label localID="2" ownerID="Root::Factories::ownsFactory" x="144.59912" y="-28.621094"/>
        <Label localID="0" ownerID="AssociationLinkMapping: Root::Factories::Factory124/Root::Factories::s400_002/Root::Factories::produces" x="-127.856316" y="-104.491806"/>
        <Label localID="0" ownerID="Root::Factories::ownsFactory" x="-38.0" y="-23.93164"/>
        <Label localID="5" ownerID="Root::Factories::ownsFactory" x="-165.76318" y="10.0"/>
        <Label localID="0" ownerID="AssociationLinkMapping: Root::Factories::s400_001/Root::Factories::rAM21/Root::Factories::hasRAMs" x="-45.333332" y="-6.9316406"/>
        <Label localID="4" ownerID="Root::Factories::ownsFactory" x="144.59912" y="10.0"/>
        <Label localID="3" ownerID="Root::Factories::ownsFactory" x="-152.146" y="-28.621094"/>
        <Label localID="0" ownerID="AssociationLinkMapping: Root::Factories::Factory124/Root::Factories::S500/Root::Factories::supports" x="-156.72858" y="191.17558"/>
        <Label localID="5" ownerID="Root::Factories::produces" x="-152.146" y="10.0"/>
        <Label localID="0" ownerID="Root::Factories::owns" x="-22.94645" y="-24.110867"/>
        <Label localID="2" ownerID="Root::Factories::owns" x="143.9668" y="-28.621094"/>
        <Label localID="2" ownerID="Root::Factories::produces" x="143.9668" y="-28.621094"/>
        <Label localID="3" ownerID="Root::Factories::produces" x="-152.146" y="-28.621094"/>
        <Label localID="4" ownerID="Root::Factories::produces" x="143.9668" y="10.0"/>
        <Label localID="0" ownerID="Root::Factories::produces" x="-61.57616" y="-135.69589"/>
      </Labels>
      <Preferences/>
      <View name="Main View" tx="623.8428" ty="246.74911" xx="0.22925101"/>
      <View name="Generic Domain Knowledge" tx="81.281525" ty="6.97859" xx="0.91700405"/>
      <View name="Specific Knowledge" tx="-4.1513796" ty="-758.74756" xx="0.99999994"/>
      <View name="Exemplars" tx="67.97724" ty="-1472.3094" xx="1.0"/>
      <DiagramDisplayProperties CONCRETESYNTAX="true" CONSTRAINTREPORTS="true" CONSTRAINTS="true" DERIVEDATTRIBUTES="true" DERIVEDOPERATIONS="true" GETTERSANDSETTERS="false" ISSUETABLE="false" METACLASSNAME="false" OPERATIONS="true" OPERATIONVALUES="true" SLOTS="true"/>
    </Diagram>
  </Diagrams>
  <Logs>
    <addMetaClass abstract="false" collective="false" level="2" name="RAM" package="Root::Factories" parents=""/>
    <addMetaClass abstract="false" collective="false" level="2" name="GenericFactory" package="Root::Factories" parents=""/>
    <addMetaClass abstract="false" collective="false" level="2" name="GenericDevice" package="Root::Factories" parents=""/>
    <addMetaClass abstract="false" collective="false" level="2" name="GenericMobileDevice" package="Root::Factories" parents=""/>
    <addMetaClass abstract="false" collective="false" level="1" name="ReportManager" package="Root::Factories" parents=""/>
    <addMetaClass abstract="false" collective="false" level="1" name="Company" package="Root::Factories" parents=""/>
    <addInstance abstract="false" collective="false" level="1" name="RAM2" of="Root::Factories::RAM" package="Root::Factories" parents=""/>
    <addInstance abstract="false" collective="false" level="1" name="RAM4" of="Root::Factories::RAM" package="Root::Factories" parents=""/>
    <addInstance abstract="false" collective="false" level="1" name="RAM8" of="Root::Factories::RAM" package="Root::Factories" parents=""/>
    <addInstance abstract="false" collective="false" level="1" name="RAM64" of="Root::Factories::RAM" package="Root::Factories" parents=""/>
    <addInstance abstract="false" collective="false" level="1" name="RAM32" of="Root::Factories::RAM" package="Root::Factories" parents=""/>
    <addInstance abstract="false" collective="false" level="1" name="RAM16" of="Root::Factories::RAM" package="Root::Factories" parents=""/>
    <addInstance abstract="false" collective="false" level="1" name="MobilePhoneFactory" of="Root::Factories::GenericFactory" package="Root::Factories" parents=""/>
    <addInstance abstract="false" collective="false" level="1" name="S400" of="Root::Factories::GenericMobileDevice" package="Root::Factories" parents=""/>
    <addInstance abstract="false" collective="false" level="1" name="S500" of="Root::Factories::GenericMobileDevice" package="Root::Factories" parents=""/>
    <addInstance abstract="false" level="0" name="rAM42" of="Root::Factories::RAM4" package="Root::Factories" parents=""/>
    <addInstance abstract="false" level="0" name="rAM41" of="Root::Factories::RAM4" package="Root::Factories" parents=""/>
    <addInstance abstract="false" level="0" name="reportManager1" of="Root::Factories::ReportManager" package="Root::Factories" parents=""/>
    <addInstance abstract="false" level="0" name="Huawei" of="Root::Factories::Company" package="Root::Factories" parents=""/>
    <addInstance abstract="false" level="0" name="Factory124" of="Root::Factories::MobilePhoneFactory" package="Root::Factories" parents=""/>
    <addInstance abstract="false" level="0" name="s400_001" of="Root::Factories::S400" package="Root::Factories" parents=""/>
    <addInstance abstract="false" level="0" name="s400_002" of="Root::Factories::S400" package="Root::Factories" parents=""/>
    <addInstance abstract="false" level="0" name="rAM21" of="Root::Factories::RAM2" package="Root::Factories" parents=""/>
    <changeParent class="Root::Factories::GenericMobileDevice" new="Root::Factories::GenericDevice" old="" package="Root::Factories"/>
    <addEnumeration name="RAM1"/>
    <addEnumerationValue enum_name="RAM1" enum_value_name="GB_4"/>
    <addEnumerationValue enum_name="RAM1" enum_value_name="GB_8"/>
    <addAttribute class="Root::Factories::Company" level="0" multiplicity="Seq{1,1,true,false}" name="compName" package="Root::Factories" type="Root::XCore::String"/>
    <addAttribute class="Root::Factories::Company" level="0" multiplicity="Seq{1,1,true,false}" name="refCurrency" package="Root::Factories" type="Root::Auxiliary::Currency"/>
    <addAttribute class="Root::Factories::GenericDevice" level="0" multiplicity="Seq{1,1,true,false}" name="dateProduced" package="Root::Factories" type="Root::Auxiliary::Date"/>
    <addAttribute class="Root::Factories::GenericDevice" level="1" multiplicity="Seq{1,1,true,false}" name="value" package="Root::Factories" type="Root::Auxiliary::MonetaryValue"/>
    <addAttribute class="Root::Factories::GenericFactory" level="0" multiplicity="Seq{1,1,true,false}" name="address" package="Root::Factories" type="Root::XCore::String"/>
    <addAttribute class="Root::Factories::GenericFactory" level="0" multiplicity="Seq{1,1,true,false}" name="refCurrency" package="Root::Factories" type="Root::Auxiliary::Currency"/>
    <addAttribute class="Root::Factories::GenericMobileDevice" level="0" multiplicity="Seq{1,1,true,false}" name="imei" package="Root::Factories" type="Root::XCore::String"/>
    <addAttribute class="Root::Factories::GenericMobileDevice" level="1" multiplicity="Seq{1,1,true,false}" name="imeiModelPrefix" package="Root::Factories" type="Root::XCore::String"/>
    <addAttribute class="Root::Factories::GenericMobileDevice" level="1" multiplicity="Seq{1,1,true,false}" name="maxRAM" package="Root::Factories" type="Root::XCore::Integer"/>
    <addAttribute class="Root::Factories::GenericMobileDevice" level="1" multiplicity="Seq{1,1,true,false}" name="minRAM" package="Root::Factories" type="Root::XCore::Integer"/>
    <addAttribute class="Root::Factories::MobilePhoneFactory" level="0" multiplicity="Seq{1,1,true,false}" name="imeiFactoryPrefix" package="Root::Factories" type="Root::XCore::String"/>
    <addAttribute class="Root::Factories::RAM" level="1" multiplicity="Seq{1,1,true,false}" name="clockRate" package="Root::Factories" type="Root::XCore::Integer"/>
    <addAttribute class="Root::Factories::RAM" level="1" multiplicity="Seq{1,1,true,false}" name="sizeGB" package="Root::Factories" type="Root::XCore::Integer"/>
    <addAttribute class="Root::Factories::RAM" level="1" multiplicity="Seq{1,1,true,false}" name="value" package="Root::Factories" type="Root::Auxiliary::MonetaryValue"/>
    <addAttribute class="Root::Factories::ReportManager" level="0" multiplicity="Seq{1,1,true,false}" name="deviceModelInFocus" package="Root::Factories" type="Root::XCore::String"/>
    <addAttribute class="Root::Factories::ReportManager" level="0" multiplicity="Seq{1,1,true,false}" name="factoryInFocus" package="Root::Factories" type="Root::XCore::String"/>
    <addAttribute class="Root::Factories::ReportManager" level="0" multiplicity="Seq{1,1,true,false}" name="queryYear" package="Root::Factories" type="Root::XCore::Integer"/>
    <addOperation body="@Operation accumulatedValue[monitor=true,delToClassAllowed=false]():Auxiliary::MonetaryValue&#10;  try&#10;    let deviceModel = Factories::GenericDevice.allInstances()-&gt;select(dm |&#10;                        dm.name.toString().equals(self.deviceModelInFocus)).asSeq().at(0) then&#10;        result = Auxiliary::MonetaryValue(0,Auxiliary::Currency(&quot;NUL&quot;,&quot;NUL&quot;,1000.0));&#10;        devices = deviceModel.allInstances()-&gt;select(device |&#10;                    device.dateProduced.toString().subString(7,11).equals(self.queryYear.toString()))&#10;    in @For device in devices do&#10;         result := device.totalValue().add(result)&#10;       end;&#10;       result&#10;    end&#10;  catch(e)&#10;    &quot;An error occured: &quot; + e.message&#10;  end&#10;end" class="Root::Factories::ReportManager" level="0" monitored="true" name="accumulatedValue" package="Root::Factories" paramNames="" paramTypes="" type="Root::Auxiliary::MonetaryValue"/>
    <addOperation body="@Operation avgDeviceValue[monitor=true,delToClassAllowed=false]():Auxiliary::MonetaryValue&#10;  try&#10;    let factory = Factories::GenericFactory.allInstances()-&gt;collect(F |&#10;                    F.allInstances())-&gt;flatten-&gt;select(f |&#10;                    f.name.toString().equals(self.factoryInFocus)).asSeq().at(0) then&#10;        result = Auxiliary::MonetaryValue(0,Auxiliary::Currency(&quot;NUL&quot;,&quot;NUL&quot;,1000.0));&#10;        devices = factory.getProdDevices()-&gt;select(device |&#10;                    device.dateProduced.toString().subString(7,11).equals(self.queryYear.toString()))&#10;    in @For device in devices do&#10;         result := device.totalValue().add(result)&#10;       end;&#10;       if devices.size() = 0&#10;       then &quot;DIV/0&quot;&#10;       else result.mul(1 / devices.size())&#10;       end &#10;    end&#10;  catch(e)&#10;    &quot;An error occured: &quot; + e.message&#10;  end&#10;end" class="Root::Factories::ReportManager" level="0" monitored="true" name="avgDeviceValue" package="Root::Factories" paramNames="" paramTypes="" type="Root::Auxiliary::MonetaryValue"/>
    <addOperation body="@Operation changeDeviceModel[monitor=false,delToClassAllowed=false]():XCore::Element&#10;  let x = xmf.getString(&quot;Select Device Model&quot;,&quot;Enter name of Device Model:&quot;,self.deviceModelInFocus)&#10;  in if x &lt;&gt; null&#10;     then self.deviceModelInFocus := x&#10;     else false&#10;     end &#10;  end&#10;end" class="Root::Factories::ReportManager" level="0" monitored="false" name="changeDeviceModel" package="Root::Factories" paramNames="" paramTypes="" type="Root::XCore::Element"/>
    <addOperation body="@Operation changeFactory[monitor=false,delToClassAllowed=false]():XCore::Element&#10;  let x = xmf.getString(&quot;Select Factory&quot;,&quot;Enter name of Factory:&quot;,self.factoryInFocus)&#10;  in if x &lt;&gt; null&#10;     then self.factoryInFocus := x&#10;     else false&#10;     end &#10;  end&#10;end" class="Root::Factories::ReportManager" level="0" monitored="false" name="changeFactory" package="Root::Factories" paramNames="" paramTypes="" type="Root::XCore::Element"/>
    <addOperation body="@Operation numberOfModelsProduced[monitor=true,delToClassAllowed=false]():XCore::Integer&#10;  try&#10;    let deviceModel = Factories::GenericDevice.allInstances()-&gt;select(dm |&#10;                        dm.name.toString().equals(self.deviceModelInFocus)).asSeq().at(0)&#10;    in deviceModel.allInstances()-&gt;select(device |&#10;         device.dateProduced.toString().subString(7,11).equals(self.queryYear.toString())).size()&#10;    end&#10;  catch(e)&#10;    &quot;An error occured: &quot; + e.message&#10;  end&#10;end" class="Root::Factories::ReportManager" level="0" monitored="true" name="numberOfModelsProduced" package="Root::Factories" paramNames="" paramTypes="" type="Root::XCore::Integer"/>
    <addOperation body="@Operation totalRAM[monitor=true,delToClassAllowed=false]():XCore::Element&#10;  self.getRAMs()-&gt;iterate(ram sum = 0 |&#10;    sum + ram.of().sizeGB) + self.of().minRAM&#10;end" class="Root::Factories::GenericMobileDevice" level="0" monitored="true" name="totalRAM" package="Root::Factories" paramNames="" paramTypes="" type="Root::XCore::Element"/>
    <addOperation body="@Operation totalValue[monitor=true,delToClassAllowed=false]():Root::Auxiliaries::MonetaryValue&#10;  let sum = self.of().value&#10;  in @For ram in self.getRAMs() do&#10;       sum := sum.add(ram.of().value)&#10;     end;&#10;     sum&#10;  end&#10;end" class="Root::Factories::GenericMobileDevice" level="0" monitored="true" name="totalValue" package="Root::Factories" paramNames="" paramTypes="" type="Root::XCore::Element"/>
    <addConstraint body="self.getDevCompany().refCurrency.abbreviation.equals(self.value.currency.abbreviation)" class="Root::Factories::GenericDevice" constName="correctCurrency" instLevel="1" package="Root::Factories" reason="&quot;The currency is wrong.&quot;"/>
    <addConstraint body="self.getDeviceModels()-&gt;forAll(i |&#10;     i.of() = Factories::GenericMobileDevice)" class="Root::Factories::MobilePhoneFactory" constName="properSupport" instLevel="0" package="Root::Factories" reason="&quot;A mobile phone factory must not own any other devices than mobile phones.&quot;"/>
    <addConstraint body="self.getProdDevices()-&gt;forAll(i |&#10;     i.of().of() = Factories::GenericMobileDevice)" class="Root::Factories::MobilePhoneFactory" constName="properProduction" instLevel="0" package="Root::Factories" reason="&quot;A mobile phone factory must not produce any other devices than mobile phones.&quot;"/>
    <addConstraint body="self.getProdDevices()-&gt;forAll(i |&#10;     self.getDeviceModels()-&gt;exists(c |&#10;     c = i.of()))" class="Root::Factories::GenericFactory" constName="properModel" instLevel="0" package="Root::Factories" reason="&quot;This constraint always fails.&quot;"/>
    <addConstraint body="self.imei.hasPrefix(self.getProdFactory().imeiFactoryPrefix + self.of().imeiModelPrefix) andthen self.of().allInstances()-&gt;excluding(self)-&gt;forAll(other |&#10;     not self.imei.equals(other.imei))" class="Root::Factories::GenericMobileDevice" constName="correctIMEI" instLevel="0" package="Root::Factories" reason="&quot;This constraint always fails.&quot;"/>
    <addConstraint body="self.totalRAM() &lt;= self.of().maxRAM" class="Root::Factories::GenericMobileDevice" constName="properRAM" instLevel="0" package="Root::Factories" reason="&quot;Actual RAM must not exceed maximum RAM.&quot;"/>
    <addConstraint body="self.totalValue().currency.abbreviation = self.getProdFactory().getCompany().refCurrency.abbreviation" class="Root::Factories::GenericDevice" constName="correctDeviceCurr" instLevel="0" package="Root::Factories" reason="&quot;The value of a mobile device has to be expressed in the currency defined for the company that owns the corresonding factory.&quot;"/>
    <changeSlotValue class="Root::Factories::Factory124" package="Root::Factories" slotName="address" valueToBeParsed="[66,101,105,106,105,110,103,44,32,67,104,105,110,97].asString()"/>
    <changeSlotValue class="Root::Factories::Factory124" package="Root::Factories" slotName="imeiFactoryPrefix" valueToBeParsed="[48,48,49].asString()"/>
    <changeSlotValue class="Root::Factories::Factory124" package="Root::Factories" slotName="refCurrency" valueToBeParsed="Auxiliary::Currency(&quot;EUR&quot;, &quot;EUR&quot;, 1.0)"/>
    <changeSlotValue class="Root::Factories::Huawei" package="Root::Factories" slotName="compName" valueToBeParsed="[72,117,97,119,101,105].asString()"/>
    <changeSlotValue class="Root::Factories::Huawei" package="Root::Factories" slotName="refCurrency" valueToBeParsed="Auxiliary::Currency(&quot;EUR&quot;, &quot;EUR&quot;, 1.0)"/>
    <changeSlotValue class="Root::Factories::RAM16" package="Root::Factories" slotName="clockRate" valueToBeParsed="3235"/>
    <changeSlotValue class="Root::Factories::RAM16" package="Root::Factories" slotName="sizeGB" valueToBeParsed="16"/>
    <changeSlotValue class="Root::Factories::RAM16" package="Root::Factories" slotName="value" valueToBeParsed="Auxiliary::MonetaryValue(44.9, Auxiliary::Currency(&quot;EUR&quot;, &quot;EUR&quot;, 1.0))"/>
    <changeSlotValue class="Root::Factories::RAM2" package="Root::Factories" slotName="clockRate" valueToBeParsed="3290"/>
    <changeSlotValue class="Root::Factories::RAM2" package="Root::Factories" slotName="sizeGB" valueToBeParsed="2"/>
    <changeSlotValue class="Root::Factories::RAM2" package="Root::Factories" slotName="value" valueToBeParsed="Auxiliary::MonetaryValue(10.99, Auxiliary::Currency(&quot;EUR&quot;, &quot;EUR&quot;, 1.0))"/>
    <changeSlotValue class="Root::Factories::RAM32" package="Root::Factories" slotName="clockRate" valueToBeParsed="3235"/>
    <changeSlotValue class="Root::Factories::RAM32" package="Root::Factories" slotName="sizeGB" valueToBeParsed="32"/>
    <changeSlotValue class="Root::Factories::RAM32" package="Root::Factories" slotName="value" valueToBeParsed="null"/>
    <changeSlotValue class="Root::Factories::RAM4" package="Root::Factories" slotName="clockRate" valueToBeParsed="2935"/>
    <changeSlotValue class="Root::Factories::RAM4" package="Root::Factories" slotName="sizeGB" valueToBeParsed="4"/>
    <changeSlotValue class="Root::Factories::RAM4" package="Root::Factories" slotName="value" valueToBeParsed="Auxiliary::MonetaryValue(14.9, Auxiliary::Currency(&quot;EUR&quot;, &quot;EUR&quot;, 1.0))"/>
    <changeSlotValue class="Root::Factories::RAM64" package="Root::Factories" slotName="clockRate" valueToBeParsed="3800"/>
    <changeSlotValue class="Root::Factories::RAM64" package="Root::Factories" slotName="sizeGB" valueToBeParsed="64"/>
    <changeSlotValue class="Root::Factories::RAM64" package="Root::Factories" slotName="value" valueToBeParsed="null"/>
    <changeSlotValue class="Root::Factories::RAM8" package="Root::Factories" slotName="clockRate" valueToBeParsed="2935"/>
    <changeSlotValue class="Root::Factories::RAM8" package="Root::Factories" slotName="sizeGB" valueToBeParsed="8"/>
    <changeSlotValue class="Root::Factories::RAM8" package="Root::Factories" slotName="value" valueToBeParsed="Auxiliary::MonetaryValue(24.9, Auxiliary::Currency(&quot;EUR&quot;, &quot;EUR&quot;, 1.0))"/>
    <changeSlotValue class="Root::Factories::S400" package="Root::Factories" slotName="imeiModelPrefix" valueToBeParsed="[52,54,56,55].asString()"/>
    <changeSlotValue class="Root::Factories::S400" package="Root::Factories" slotName="maxRAM" valueToBeParsed="8"/>
    <changeSlotValue class="Root::Factories::S400" package="Root::Factories" slotName="minRAM" valueToBeParsed="4"/>
    <changeSlotValue class="Root::Factories::S400" package="Root::Factories" slotName="value" valueToBeParsed="Auxiliary::MonetaryValue(248.34, Auxiliary::Currency(&quot;EUR&quot;, &quot;EUR&quot;, 1.0))"/>
    <changeSlotValue class="Root::Factories::S500" package="Root::Factories" slotName="imeiModelPrefix" valueToBeParsed="[51,53,55,54].asString()"/>
    <changeSlotValue class="Root::Factories::S500" package="Root::Factories" slotName="maxRAM" valueToBeParsed="16"/>
    <changeSlotValue class="Root::Factories::S500" package="Root::Factories" slotName="minRAM" valueToBeParsed="8"/>
    <changeSlotValue class="Root::Factories::S500" package="Root::Factories" slotName="value" valueToBeParsed="Auxiliary::MonetaryValue(285.8, Auxiliary::Currency(&quot;EUR&quot;, &quot;EUR&quot;, 1.0))"/>
    <changeSlotValue class="Root::Factories::reportManager1" package="Root::Factories" slotName="deviceModelInFocus" valueToBeParsed="[83,52,48,48].asString()"/>
    <changeSlotValue class="Root::Factories::reportManager1" package="Root::Factories" slotName="factoryInFocus" valueToBeParsed="[70,97,99,116,111,114,121,49,50,52].asString()"/>
    <changeSlotValue class="Root::Factories::reportManager1" package="Root::Factories" slotName="queryYear" valueToBeParsed="2023"/>
    <changeSlotValue class="Root::Factories::s400_001" package="Root::Factories" slotName="dateProduced" valueToBeParsed="Auxiliary::Date::createDate(2023, 9, 3)"/>
    <changeSlotValue class="Root::Factories::s400_001" package="Root::Factories" slotName="imei" valueToBeParsed="[48,48,49,52,54,56,55,50,51,54,52,56,55,50,54].asString()"/>
    <changeSlotValue class="Root::Factories::s400_002" package="Root::Factories" slotName="dateProduced" valueToBeParsed="Auxiliary::Date::createDate(2023, 3, 29)"/>
    <changeSlotValue class="Root::Factories::s400_002" package="Root::Factories" slotName="imei" valueToBeParsed="[48,48,49,52,54,56,55,54,56,52,55,53,54,51,56].asString()"/>
    <addAssociation accessSourceFromTargetName="company" accessTargetFromSourceName="factory" classSource="Root::Factories::Company" classTarget="Root::Factories::GenericFactory" fwName="ownsFactory" instLevelSource="0" instLevelTarget="0" isSymmetric="false" isTransitive="false" multSourceToTarget="Seq{0,-1,false,false}" multTargetToSource="Seq{0,1,true,false}" package="Root::Factories" reverseName="-1" sourceVisibleFromTarget="true" targetVisibleFromSource="true"/>
    <addAssociation accessSourceFromTargetName="devCompany" accessTargetFromSourceName="deviceModel" classSource="Root::Factories::Company" classTarget="Root::Factories::GenericDevice" fwName="owns" instLevelSource="0" instLevelTarget="1" isSymmetric="false" isTransitive="false" multSourceToTarget="Seq{0,-1,false,false}" multTargetToSource="Seq{1,1,true,false}" package="Root::Factories" reverseName="-1" sourceVisibleFromTarget="true" targetVisibleFromSource="true"/>
    <addAssociation accessSourceFromTargetName="device" accessTargetFromSourceName="rAM" classSource="Root::Factories::GenericMobileDevice" classTarget="Root::Factories::RAM" fwName="hasRAMs" instLevelSource="0" instLevelTarget="0" isSymmetric="false" isTransitive="false" multSourceToTarget="Seq{0,4,true,false}" multTargetToSource="Seq{0,1,true,false}" package="Root::Factories" reverseName="-1" sourceVisibleFromTarget="true" targetVisibleFromSource="true"/>
    <addAssociation accessSourceFromTargetName="prodFactory" accessTargetFromSourceName="prodDevice" classSource="Root::Factories::GenericFactory" classTarget="Root::Factories::GenericDevice" fwName="produces" instLevelSource="0" instLevelTarget="0" isSymmetric="false" isTransitive="false" multSourceToTarget="Seq{1,-1,false,false}" multTargetToSource="Seq{1,1,true,false}" package="Root::Factories" reverseName="-1" sourceVisibleFromTarget="true" targetVisibleFromSource="true"/>
    <addAssociation accessSourceFromTargetName="specFactory" accessTargetFromSourceName="deviceModel" classSource="Root::Factories::GenericFactory" classTarget="Root::Factories::GenericDevice" fwName="supports" instLevelSource="0" instLevelTarget="1" isSymmetric="false" isTransitive="false" multSourceToTarget="Seq{1,-1,false,false}" multTargetToSource="Seq{1,-1,false,false}" package="Root::Factories" reverseName="-1" sourceVisibleFromTarget="true" targetVisibleFromSource="true"/>
    <addLink classSource="Root::Factories::Factory124" classTarget="Root::Factories::S400" name="supports" package="Root::Factories"/>
    <addLink classSource="Root::Factories::Factory124" classTarget="Root::Factories::S500" name="supports" package="Root::Factories"/>
    <addLink classSource="Root::Factories::Factory124" classTarget="Root::Factories::s400_001" name="produces" package="Root::Factories"/>
    <addLink classSource="Root::Factories::Factory124" classTarget="Root::Factories::s400_002" name="produces" package="Root::Factories"/>
    <addLink classSource="Root::Factories::Huawei" classTarget="Root::Factories::Factory124" name="ownsFactory" package="Root::Factories"/>
    <addLink classSource="Root::Factories::Huawei" classTarget="Root::Factories::S400" name="owns" package="Root::Factories"/>
    <addLink classSource="Root::Factories::Huawei" classTarget="Root::Factories::S500" name="owns" package="Root::Factories"/>
    <addLink classSource="Root::Factories::s400_001" classTarget="Root::Factories::rAM21" name="hasRAMs" package="Root::Factories"/>
    <addLink classSource="Root::Factories::s400_001" classTarget="Root::Factories::rAM41" name="hasRAMs" package="Root::Factories"/>
    <addLink classSource="Root::Factories::s400_002" classTarget="Root::Factories::rAM42" name="hasRAMs" package="Root::Factories"/>
  </Logs>
</XModeler>
