<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <br>
    <div class="moz-forward-container">Persze, csak csatolni felejtettem
      el a modellt :D<br>
      <br>
      -------- Forwarded Message --------
      <table class="moz-email-headers-table" border="0" cellpadding="0"
        cellspacing="0">
        <tbody>
          <tr>
            <th align="RIGHT" nowrap="nowrap" valign="BASELINE">Subject:
            </th>
            <td>review</td>
          </tr>
          <tr>
            <th align="RIGHT" nowrap="nowrap" valign="BASELINE">Date: </th>
            <td>Fri, 14 Aug 2015 10:29:48 +0200</td>
          </tr>
          <tr>
            <th align="RIGHT" nowrap="nowrap" valign="BASELINE">From: </th>
            <td>Boldizsár Németh <a class="moz-txt-link-rfc2396E" href="mailto:nboldi@caesar.elte.hu"><nboldi@caesar.elte.hu></a></td>
          </tr>
          <tr>
            <th align="RIGHT" nowrap="nowrap" valign="BASELINE">Reply-To:
            </th>
            <td><a class="moz-txt-link-abbreviated" href="mailto:nboldi@elte.hu">nboldi@elte.hu</a></td>
          </tr>
          <tr>
            <th align="RIGHT" nowrap="nowrap" valign="BASELINE">To: </th>
            <td><a class="moz-txt-link-abbreviated" href="mailto:modelinterpreter@plc.inf.elte.hu">modelinterpreter@plc.inf.elte.hu</a></td>
          </tr>
        </tbody>
      </table>
      <br>
      <br>
      <pre>Sziasztok!

Szükségem lenne egy review-erre a debugView branch-hez. Van benne cucc, 
de röviden itt összefoglalom, és akkor meg lehet érteni, hogy mi történt.

A cél az, hogy a debug perspective eszközeit lehessen használni a modell 
debuggolásához.

 - A futás közben létrejövő/megsemmisülő stateful objektumok 
megjelennek a debug view-ben a szálak helyén. Ennek a frissítése akkor 
történik, amikor megálltunk egy breakpoint-on. Ezt tényleges 
létrehozással nem próbáltam ki, de majd ha Máté action-kódos branch-e 
meglesz, akkor több objektummal is kipróbálom. Az egy létező objektum 
létrejöveteléről mindenesetre megkapjuk az eseményt. Hogy ez működhessen 
a runtime által használt control socket kapcsolatot (ami eddig a 
graceful termination-höz kellett) kétirányúvá tettem, az eclipse 
irányába mennek rajta a példány létrejötte/eltűnése események.
 - Amikor a runtime megáll egy breakpoint-on, megjelenítem a state 
machine-t tartalmazó osztálypéldányt this néven, a szignált, aminek 
hatására az állapotátmenet megtörtént, és az aktuális (átmenet előtti) 
állapotot. Ezeket a variable view-ra helyezem föl. Ehhez nem árt kicsit 
megnézni a jdt api-t, mert azt használom hozzá. Lényegében a megállított 
thread stack-jét lehet elemezni, mint this objektum, változók, 
paraméterek...
 - Az egyes értékeket struktúra szerint ki lehet nyitogatni. Itt arra 
hagyatkozok, hogy a virtuális gép megállított thread-jét tudom 
metódusvégrehajtásra használni. Csináltam egy meta-reprezentációt az 
osztályokhoz és szignálokhoz, ami egy statikus adatstruktúra az 
osztályba generálva. Amikor megálltam a state machine-ben ezt a 
reprezentációt szerializálom, majd a string értéket az eclipse oldalon 
kiolvasom és ott deszerializálom. Így nem kell a jdt api-val szenvedni, 
amikor a meta-reprezentációt elemzem. Ez a reprezentáció megmutatja, 
hogy milyen attribútumok vannak az osztályban (később bele lehet 
olyasmit is rakni, hogy öröklött attribútumok, láthatóság, stb.).
 - Külön kezelem azokat az értékeket, amiknek a multiplicitása lehet 
1-nél több is. Ezeknél indexek szerint ki lehet bontani az értéket. A 
maximum 1-szeres multiplicitásnál meg simán jelenik meg az érték, 
illetve "null", ha nincs.

Tesztelés:
Én a csatolt modellt használtam. Hogy legyenek értékek is benne, a 
generált kódban a _HteA8KuEEeSBF899A__G5w osztályban a create függvényt 
ki kell cserélni, és akkor lesz is mit nézni. Vigyázz, mert a 
módosítások elvesznek, ha build-el egyet a gép.

    /** Creator for UML class <b>Machine</b> */
    public static _HteA8KuEEeSBF899A__G5w 
create(hu.eltesoft.modelexecution.runtime.Runtime runtime) {
        _HteA8KuEEeSBF899A__G5w_impl created = new 
_HteA8KuEEeSBF899A__G5w_impl(runtime);
        _d_nw4EHQEeWbm5q7jTaGDQ point = 
_d_nw4EHQEeWbm5q7jTaGDQ.create(runtime);
        point.set__iJMOUEHQEeWbm5q7jTaGDQ(new 
ArrayList<>(Arrays.asList(BigInteger.valueOf(2))));
        point.set__na$4EEHQEeWbm5q7jTaGDQ(new 
ArrayList<>(Arrays.asList(BigInteger.valueOf(3))));
        created.set__sG2KQEHQEeWbm5q7jTaGDQ(new 
ArrayList<>(Arrays.asList(point)));
        created.set__jl2J0EHhEeWNuIzF56NVqw(new 
HashSet<>(Arrays.asList(point)));

        _xyvWEEHQEeWbm5q7jTaGDQ coloredPoint = 
_xyvWEEHQEeWbm5q7jTaGDQ.create(runtime);
        coloredPoint.set__na$4EEHQEeWbm5q7jTaGDQ(new 
ArrayList<>(Arrays.asList(BigInteger.valueOf(4))));
        coloredPoint.set__na$4EEHQEeWbm5q7jTaGDQ(new 
ArrayList<>(Arrays.asList(BigInteger.valueOf(5))));
        coloredPoint.set__3SQ50EHQEeWbm5q7jTaGDQ(new 
ArrayList<>(Arrays.asList("pink")));
        created.set__rxlcMEHhEeWNuIzF56NVqw(new 
ArrayList<>(Arrays.asList(coloredPoint)));

hu.eltesoft.modelexecution.runtime.InstanceRegistry.getInstanceRegistry().registerInstance(created);
        return created;
    }

Boldi
</pre>
      <br>
    </div>
    <br>
  </body>
</html>