From 60ebab2b6cfbaa8954f19017fffd0825af64ecf9 Mon Sep 17 00:00:00 2001 From: kevin-delmas Date: Wed, 8 Nov 2023 20:06:54 +0100 Subject: [PATCH 1/7] Trying to support sonatype publication --- build.sbt | 9 ++++++++- project/plugins.sbt | 4 +++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index 50474d0..90ba6fa 100644 --- a/build.sbt +++ b/build.sbt @@ -87,7 +87,14 @@ lazy val assemblySettings = Seq( //Definition of the common settings for the projects (ie the scala version, compilation options and library resolvers) lazy val commonSettings = Seq( - organization := "onera", + organization := "io.github.onera", + homepage := Some(url("https://github.com/onera/pml-analyzer")), + scmInfo := Some(ScmInfo(url("https://github.com/onera/pml-analyzer"), "git@github.com:onera/pml-analyzer.git")) , + developers := List (Developer("kevin-delmas", "kevin-delmas", "kevin.delmas@onera.fr", url("https://www.onera.fr/en/staff/kevin-delmas"))) , + licenses +=("LGPL-2.1", url("https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html")) , + publishMavenStyle := true, + crossPaths := false, + publishTo := Some(Opts.resolver.sonatypeStaging), version := "1.0.0", scalaVersion := "3.2.2", sbtVersion := "1.8.2", diff --git a/project/plugins.sbt b/project/plugins.sbt index 9fdd2f7..24d15ca 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,2 +1,4 @@ addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.1.0") -addSbtPlugin("se.marcuslonnberg" % "sbt-docker" % "1.9.0") \ No newline at end of file +addSbtPlugin("se.marcuslonnberg" % "sbt-docker" % "1.9.0") +addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "2.3") +addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.2.1") From d966f54ed83a855ae996693ae739b2bd7ba93f6b Mon Sep 17 00:00:00 2001 From: kevin-delmas Date: Wed, 8 Nov 2023 20:41:07 +0100 Subject: [PATCH 2/7] update doc --- doc/_assets/images/phylog_logo.gif | Bin 0 -> 2771 bytes .../images/simpleKeystone/interference.PNG | Bin 0 -> 71823 bytes .../images/simpleKeystone/platform.PNG | Bin 0 -> 47942 bytes .../images/simpleKeystone/temporal_slices.PNG | Bin 0 -> 12889 bytes .../images/simpleKeystone/transactions.PNG | Bin 0 -> 101345 bytes .../simpleKeystone/transactions_footprint.PNG | Bin 0 -> 80327 bytes .../images/simpleT1042/interference.PNG | Bin 0 -> 37286 bytes doc/_assets/images/simpleT1042/platform.PNG | Bin 0 -> 23007 bytes .../images/simpleT1042/transactions.PNG | Bin 0 -> 39474 bytes doc/_assets/text/rootContent.txt | 4 + doc/_docs/example/simpleKeystone/export.md | 35 ++++++ doc/_docs/example/simpleKeystone/index.md | 12 ++ doc/_docs/example/simpleKeystone/library.md | 33 ++++++ doc/_docs/example/simpleKeystone/platform.md | 27 +++++ doc/_docs/example/simpleKeystone/routing.md | 12 ++ doc/_docs/example/simpleKeystone/slicing.md | 22 ++++ doc/_docs/example/simpleKeystone/software.md | 13 ++ .../example/simpleKeystone/specification.md | 12 ++ doc/_docs/example/simpleT1042/index.md | 106 +++++++++++++++++ doc/_docs/index.md | 12 ++ .../gettingStarted/external_dependency.md | 19 +++ .../gettingStarted/getting_started_SBT.md | 26 ++++ .../gettingStarted/getting_started_docker.md | 111 ++++++++++++++++++ doc/_docs/reference/gettingStarted/index.md | 5 + .../reference/usePML/editing_PML_model.md | 39 ++++++ doc/_docs/reference/usePML/index.md | 22 ++++ doc/_docs/reference/usePML/pml_examples.md | 61 ++++++++++ doc/_layouts/base.html | 5 + doc/_layouts/doc-page.html | 13 ++ doc/_layouts/index.html | 24 ++++ doc/_layouts/main.html | 5 + doc/_layouts/static-site-main.html | 19 +++ doc/sidebar.yml | 32 +++++ 33 files changed, 669 insertions(+) diff --git a/doc/_assets/images/phylog_logo.gif b/doc/_assets/images/phylog_logo.gif index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..bbb4abe46a51aeb4083b42a7aa3a90e01ff3ebdd 100644 GIT binary patch literal 2771 zcmZXT`9IT*1HeC@%?@m{F*n)f$dzM8B%aS0CS`2H!v_TG&EedZk>^l5s5@1lgShc#n{-`#KgqZ)O7v&_2%a078Vwk zmX=mlR@To<@bK{T^kgs?US3|_-rhbwK1?Rl*Vot2&(GiAKOi7r z>(;G-fq^U*D<~*v+qP}N!NF`cd;9k7At50RXyK7BejH#aXYFF!xOprD|zuuv=(7Znv17Z;b5 zl$4g1o;h>o?Af#D&YdeOD?5Mw{Dlh_E?&G?US9s&Z@*o-bm{Wt%MyvCqN1X*va+hG zs=B(mrl#h~l`B`TUahUIy>{(dU0vPv>(_7GxN-C5&0Du_-M)QWDwWpP*EcjYG&VLi zH8nLiH@CF3w6?akwY9akx8J#Q=kDFR9UUF_?%lh8|Nesq4`eb~XJ=FMe1?d|L9>+kP>`0(MQM~@yqempQR@Z`yp!NI|yp&^ArF+4mxGBWb?>C@5C(Pz(| zJ%9fE_uqdX8ykD^;>F9CFUQBnCnhFdy?Qk{Ir;ka>#3=!>FMb=Z{Ezz%*@WtzJ2?4 zZf@?~yLa>R^Y7ok|M20%!otGh;^N1TA3uHi^v556EG;c9FE4-o{Q1k5FDol6U%!6+ z_U+sE@8AFY^Uu}Q)gM28{PovgKY#xG`|rQk*4F;{KgeqY&*bRvl;|i@YHUgj$;UT< z1&~*jKo#I0!1}*E{u>2AuK{0`4VY3%r(oize}$mNkCKEk-crs?BDn^JPHwL1t15P*im2Yo3YwZGg4wYV0qv;ldVHxbmeRwWM@9C^f}W~0wJivU{k+K!K0T9Pgigr z-%5uqzkS&tLslm|_n%(=9F1#~Xe=}*MJAM0+1lgMY9mzkGSaFm{nMm!Oikq2=Ns2h z&q?>~y1Y-#OM6&14?(Rr^{U@?DQ|CXn^^E;723OLhfSBvZ#8H+IA=C_ToXpHaw$b@ z8zK634+*};w-bs%Ucxxiok3?{;^wB(=KY-+8OfV>|+G4%UNAX;_BfLIH=oFXd5#$y}Q-2Ic zsHCXC{6%LkK=)Gs&`zyvXpT`8#xP0!ivoB>q$jKaLsNklbiYBk zp^jGM>X~vJ6c#YRqlW%*g(J&^5rlN3*3xi=Z6-(1=>*3Ld3p!e5d*QBTnB|CQCit& zkEkgcL@y{eZACH|I<@rIp?G*1?B+J1a}seBLDe;IL83l{=@D$a|mfa z(gX>{%w%9o0?!Gs_}()Jn+grb8fNf^%NwbAsS@;_8uN@hPOjrCpOxUS_D zm4K3#2dQ99V5E!>6{U5ePgrI~udCJHdTYBr)gZtY3Z0C-AD z#jx?VEkGz6xVK!BtH1A9POg`PzkMe;+MWwdCQ&1ZHZf-m%2 zS3@Jk#q2$;Qdv7uhUSmSmEy}PjV8s9YtzU?rVewX)>OM+&kXT+KYYE-6*X^v$ma(j zuxw)CZP{`#bhM9bAiKI((?nl&svA17nr}lCVc+ohAyrh7?tr{bE1a&0rYP&D%W(*D zFKIskj1?!tx9CXf7K21YbizrDw1 z*U~=`vi3?Tu)YZ+L>`ZAd0vPj_xD0(Ah=^ufGKfV%W-?jQjU(2;qKQXm8ra3M})Bw ztv1$uZi>I3O;ID~Gfn0t`NZ_jjqfD_;1RS_nj=(w>Snd2Lkv$+bY3<+nyJlblk#~K zIEp2V3#4G3XjAY;QolirxWHDrWFo`MojP|@-5?S`b7s&Y?!JgLsYHQN8M*1Y9zIQY zm=l|6m`4DK>a&JLW#A|tFWgWXj!R>~iCk$fusEfT(aNzg$788HtaX7*WKNS92)Ul> zVN4JBQiK+p#EqLM%4D?3^>3j?L~jSk5A+aRDNW zjK4PD>++ME)%Ph!JN{1(UG(tj#2Yh276(%IpgU$%3pG5_AnnlM^SelIFdVV`q@u3y zIBSM@sI5ykxu{^vgbc7^^5GZoDyg#(*j*C1MO{%?h_=X}piGe3M92;Am+K_<3(TH} W$4mU-Y9V;JcEeJ3-8Ksn;QBv(GLuLE literal 0 HcmV?d00001 diff --git a/doc/_assets/images/simpleKeystone/interference.PNG b/doc/_assets/images/simpleKeystone/interference.PNG index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..14dc0ddefa3cae2dddf83c7f317a76c26560875b 100644 GIT binary patch literal 71823 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 literal 0 HcmV?d00001 diff --git a/doc/_assets/images/simpleKeystone/platform.PNG b/doc/_assets/images/simpleKeystone/platform.PNG index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..063291d142b55fd293a24e38deda334c9a9c0721 100644 GIT binary patch literal 47942 zcmag`cRbbq|38j5gp+j~%BEw>mYI-akL;b1LntF7dsPmOy;oVs-XgN8Y>JeTofX-8 z)AxS#TF=kr{k#1B;2h^X9{2n0aogj17owr2Ky;n@`lU;kh?Ep%wJu${3cqyeiX}cS z_ym`bCmFn4cF|HmTq^6M{SE%Wv6g-yed$s~6v3(aHSjmYQPI%l(k0?n?9b)SX9bp* zF4d1K$x7>Zn69P~`55b_9lVn)F798KT-KXItJn``>0E!0I~*jROIH8QkU&uD2kzUT zTjRosRUMQKPb}8d>WyOco@$}e-XmV~G4MV}3^KQ7Am@!=>a0w3;)f`Q-Ix80oa z*bl&4MN`bhci`9db(Vj$L|zb=b&Hifnb=G*qs zSZ7hXBZlf5;t{0~n=xKR**+m!b|*I9ezi?6HTvr4VPhrI3n$|s%i3CetcGJiC%7+v zo*26?`HgrelJph6YUD@nDw1^;7IqF&eug#c`Sn`W4|iNuuNm!=eDrpMUB0WRjH6zs zIpc^qD|Fl=NPViX7fY?ft1&fA$imG0M#6?PD%Zz!UE5h4OK|9QW&8@-DQ*@=Zl}Ts zoz5V*oI1=gkFLyfCl^&4V}7SjR7~WBSMYZ8MoKizC(UbejV&q4Xjz|*Kz4XsF!g|k zjaDL-EwMa+J~7#=L%wfGT#IxBk?b!6!|jS+T1UNs#a@nU66*1$C|~4w(QKsL)pk`) zXCwcDb18sXi82Y%+LsASh=p`kh&#FoA;g%+t_)Z5+2JYB*eiGwPR@c?f|tXL5v&96 z8vhE!@-mieI7IVw)`oxnKQVY7CW2@zP=fD&_6(KeK?-7A5QjN z=(;AN3jX9mh|DhR@HS@~*p={1-*lUjyE9b!?sCxk)60op9ZM~lEx(1O+wT<=m�T z-xXY^`haSVTbQ5>iX>M3G9`E`ediN%+4-}!cWzu|Kmtc*fq)raKmiK}BL?>lLPdQ(ghc~+mtc$W9u(}z?WDaIda zv|#Ac9?}fdmg33ajcYc!$WE3v)1OWA%$DqbmR6O#(fn*Rb>c?yhY#sD1k8EmL~-xb7A~raFSmQ@J&dSlU3f<`G8CI(K25*X zT;1xTyh`wB_AT44UxNHX{LBbN&klh7^;q1 zJfX3D9GE~w3-M!?8;(+iLO-wc?C4}#y3rk(K@$Vg8sUcg)y^c#zSa}bQBZHBHf z;nUhnM|?A&&>jiJUGH*>Q7pfAu023xvsXtaw3(VVMRBjV(M^GBc|ZJt%B%fT6}s&s z?|6AT64vys4=m@x!HmY22VT&PIEzoM3ejiNP&k=nV z-(Ro4zgP&%@(C)IS#;YgldSTuCza^$Vv6r9&@|1rsAdf45i>n_Leeo`_Ti(~f`n^k zp2#*G)&pH9z?y>>gfxqP=u(soew3Zd12(PB80Z6fV-i`yW!MpOWkvooMYZ*EJ%(QX zhn{_J>0d%TZiX#7X4=^w@@LH$aHmTlMYSE@YT6456U*1k4!MdDQpb<&B#AEb-=gkW zY_c(1N4dC8KesqfRh=-i6hCZ8yaqN#n|VY&)T;Ga=K@KJc-TIke`l^feOxq|qmC-R8FD z5+X*ca+ErOT%IX7kSvhg7+frb_ZtRh-_6QbFPvtcV!)#f8zVg@_8iEfwK%LJ14?)e zhXrL2$p_J-&Ri~0RSqawC}`Fcd$m9AN>q^y%PNH<1#?tvSBEmyN6J!TqYLDpvGW@~ z_?hnI3v0!#5l$^(>45T&W~SyhT1{pMv%t5u?^Feqehk+m^ETd!J0gPzF{CXASZhlZ zQN#zDhEd<>nWj4mtvX!aaG%x)R z2Irvuag_9-(e2PfF7&!k4?cg}%KleqMXYCx`!5$b{QF5YZc{SCz?V1S;A!7Cud3DG z0S9)sf^weB7AdLXJJHLP1!NKLXff2_JSJEs$Nc{IAq9f7u*oN}#Ui^xdRw|T&N+^L z?Q}4#bU;{X^&l7<9NXwM5a5%xS^4xn?XO=w!7^63V)|0Bo4-kXbF16MK-rwjT=m%{LFPlaYjsST=TLz28@w{0JemFF;FL zlQ%vj-1a6%#Nje0w*Gd}?H$nE@1&K_PqjWKi@=I52aWaK=In57nW%VlkBSDG1%91r zTt>T}n$1?>fZp-}BEFN}fSWpx-;1pZXBjQ;r3?r^bj?Ic%gJv0Z5KpLd2(-d7&FL* zzLZu|oL=kL2uTd5Q%8hby?qVqEJU4sJ#jcZD%|jX?%W)@e|~#IMJ{~wQ`-t(>bart zz6^{Uu`+r+37U2(Wa{RY55FwmZMMMwP-g37PM8*I_j!6=_jS{ZO~g*uJTid;!moTk z<9?K4iJM^1VhlT4h_)y}KJ&Z|;XV?vZnKh?9kHrAz-(!#?qQ*?Hojadfo#}+y}J^x zn8(bliL4JQOX{laWZ^f;*7r@rRT{Z zW+g#1Rr#v%iB8UGh%17TSt;$xsH14&eHD!;mdtHeQN|I7Ce;7ge0=@uLDerttZkzA zM4lj96f@m3w;bm~@>217nN0u0aWC6)YWD3ZHoifWi{I@wiHkP4Q$`9T5O^85uB-e* z%Sg6g1v2>v_|0CI<$NUxka8(_IB#{SC1cQ%o!7$xsWwcIW7S6~5`+va00#lqq%&t364 zzJ8zol$y)EBz6ylX{8tBDSS~}X#JG*ZUSXL!@fZf$}5C$flEo&Vxpp+#6tajw%1F7 zJ@NKc?KpfK)}NE#@fTOc3dR}cw)#0YK5h$$Ce{zQD|;%a?O~eU)2F|?TKSR7DqZWG zcv7c+_GnO!q2EiRrBTzw(P=)sYsV3Tlsg%`5(7t}L^a-3`xdRE{Bf@KtT=P)wh0XL ziC+_vo_rKRMYQK?XQPjUAzs64qTGr4=>3*XDD3H1s+eRRoF}uGuUScZJz|43)nl6y z5cUo8FB4)tiz^>LXjV8k(zsTyZ9ZKry*HBIKPsTZ{@AHmjb3YNrTxZt+v?9{8a+MJ zqGBO0_jtDgQTA09y>gz3;#CJ%6)dEpsGtpps|GeYDz}z<87P%=S+r; z3f4`OcbB9ak}LNM9OU*rQj`4Oz>M}X^@NvA1~5YeZIr|}2b;{bUE@5+$og*PHU8=v zdA;crP-*%ZV++^vOamTWu|gUG&-tok^(#M%`E2ylMb7+?9VGU!mzM=Y&F>LRP->RS zFo%mrki82FuP{OOn0D@l>&?;Yl+*L6!q~tX=sFEREi*Z!keB17g=WKT_($!5kiB+g z8@f1wK{|4nz{~Wp`XAo~uu-v12fH{W<5r!6oP?3^P_}7?f!S&*gG_%A^`KDQKyCds z3F|^D?6SJR4S+kqum4{K4TnHqs#t*GJF5rW9yh7vDTlt#{;06192S({tK!Q(SCBf^ zY^`V1D*e;W>!&&VI`8XBn7zEK9J(_!2fXc{C@4egtc0PNHGN4(j9rL^OCJW8`|TAk z8!>`Sv8>?`kPQH7PEH^xcEzV{G(+D%g&${`Khe>bE!vX{5Q#;U^S-AVx&f!>#J-hu z$;R%-%NQ%W$0RdB&Ucpt0vZC4}B=U}bWe zcqk1cwV=^<-4YR&Q(!G+uofCh0>6c96#M&;UH}X!Q)Q{&S1Y4918=TjObTmd2Y3IV zQbrSb_CB1-0udo+)1b~d_xS7vWCgpSiMh&*+6BB~x&7b8mk~f0=6X=D_Y~N5TT)oU~%sLGyt`6g;6g%IG?vec*;X3<|2ntbzDUgbhtl0V0+*D|F!XCMSY znG-(Sz{#2jt;61cHUaz~T;sWI-N_gO?u)RzsCYSW+2O(gFa%N>!Y=|ygd(~Gvn{`f`hDzEk9zXOxrT z@%3+rmN`$n+^Y-s#@#YBR!)4+-*%GCNd1<6bL?}r*=?V#aBm4Z-sVC_nO3y2v#-`9 zxs_~mW_;~}nv@_I@(w$k`Q}l4^bDS@rs-7pl=Z^4JJ|kL3!}P0nwb^x9z#CeOMzB@zn8 z;LCg2hLdKYj~kwMKCstEWfz*U(Pl3h71{CXGCz6xaG%K#GSJ+bnw12^nT8doGJc3$ zGjrR)qf%$$KDiZA`!@^$;!icl2aEUZ8Z*1@%XHt~4KA*AH@te>={jykDZBC*>CJf| zo^CR%5~3RSP>L1oDY}7U5hhEL0@VDUyMxWk)z1!o{;DJWBtX|Z$vN1`VZTf=?VfYP zC1K4)Bsi>hsawNAN%57k#>t~4u{_2OC+#MFTQ6>Y+OUf>fie@T&-1)&mXzraW&47@ zy-m`re=C-C0M{wE4f!$s;{5Fz<2;mO;fF3sFk5DrxjwQ$*QKTT{P}Jts`li<+KyCJDP|6cEF9fw^tiZmX@<&7zTeR4rYEk zHumu*+H$XOP4am;`FQJ&bRN_2*CKVxRYL!3T=+OwMEy=hfoo=}fx;LUVT>+3Szd4*41NZ;ifp4#w86KZ{vHW; zUG&(?We7*FOGys-L~kBr3>%O{J3WH23DB*{8)Pc0lMVU~SQ}o&1Ma}aT~kc_W(YGc zOu+j_JyVbnkpq{)?+59d^yu27Ta4szgNM{Sg82<^?eq$7!ZF3&Pg#GFyX!@Wq1QaAXjNr~ zs3a0bi$;bo1lGuu2AZaZhZS~CSG^Q&c-9q?yNo=~T+36IyS>}Q$@Y~sZ#N==MC)m^ zf^!a0LawgO)MQ{#JLk`k=p;Mbe>wzD71e{2pF7=O%Qr|#{T{cNl^8g@eRlVByJEKz zUL*JAeQuja_#*ju#Bx}4xyY7nH`jlpcHzvr-k|shfu94)p(+EZpo)jW2!Jz;Xst1&eyH2D1TbBqaJ<2gBx1Rul{2L2(BoQoX~A}1doaOpC2tQ z=y^N;`b_1D3~BN{==mGiuu}Nz$lc5x9W^BKlXy%*_f|$I0?}B?+<@~3PP9#}OY_YidP@a$l^+yR?^D9%V<@Bm4HvYT)nF{u>fhF@_?H*@(S;FfE^%nZf2f$`y*}eY#)dO;{x) z1WKrJ5qPlo@4o~O$$@_%7PK#xiPx`O#4aQQ_$>O>iwoiWz{3XCTYq`{uUkUp5Wq6B z)wn9$H%#jS!D1B*fE3K6+`_6sn*(_mSPLKCe(C?+?t%+t8d%z)C-?t8Fg6SW?+NzD zYH|fw@G3@y9O!*KqvNIgrfBQizp6m0d`76*%v9dDqo?9 z-Cm0jBqKmye%$yEbFk57^?!B-+W|erJ{I8CUlD0>!5DASN&p{n>en)H@fFE`zsm9r z2A%*c4zen&>R%)y|KhY)v=U#4)KPS`ueEeli`$k7kaw3OcC|S9cc(2#txh(cQPNt2z zw~aoPRlEmy?kp!G6EJhs`G~KQB1-DK_O#;$D*{39@$>TEya+kn>>D3#(%?3;G>}b5 zHY;^LC$)VWo^dj#Qz*>&`vZ}g&6(D4@>$n%?=&C0I|^K)UZ;mn zz`NA3i2on=6u}U&i&6fk7J4kQC&bp?Zd^d#b%C%?U4rcJc&K&&Ov_jUah(BtDtjNo z@s(2QWtk99t)APXug~5}Mg83zH1H{V;MDxqeW@`Ikunf|24%$=8K7Fg%mS$b-Ygc4 zOvJ|4*+?Lb+01}m*P;&953+hELx&?uZ43;<%D#8(Q?7Ob?gIGA-A5lE!-@Nq0#w*7*g~k%>clOWo_6?mMC)LCq4Fmg1&D zV(#Fp&cXcg(Vsv!X&wX%N+Lk5YbCQG%zwfWv znU_{C?Nbd7bh`K*s*z;PMXC%k?2qC3cIcxWu-CEK`WO)c?ycAT>cEXN}a ze)RG$X9M|Yd#A&6vsUat;uEp25XjJE+txl7Se75L|B&svHUgn~?2gNX@T`r2nhfG1R=Mc>c87aN_aA~<+NTY4}a*i7> z>(L5fH?VW8j&R^WJR7NUd*r;=e@V}sY4W3gX)Pdq4LNa%4#0-`U>4%ua44;c(Vyd} z`Sw%2a*>(W^0$JCt--`pl1ABeQ$$}BMx9P?@#R74gs_-^gpOrDl$Ez@?Inb8ZG+H$ zdNjDgV=+X_{l0g2ngnQE#=K;cY5jATB(fXhe_54wO*+4zrIgIKUsdXGK1I@FaBXdq z*{Md1k0mWS!e3kvn*U(PyCvOkT#R9--uj14|(oJN>4!&?s9 zdFNYT*+P%DCB^lqo2WSsQs-aW?R`$Y-kq@X5>f{jmWOS(GMsCibNhAEN60Zp@c}waL-rhFC-1~)U!5iv1(*E=H(pZwdI*GMrWQLgl!#Z0h-`n@pdncU; z_vB6qM~*#PFAJY~3f8YRQz4bPV=Fr8$4U!zi5~HJNV`gIc-<=yezj`*qE9u@FxY5w zR}?DzlZ&<(HT@38ziFFBbLx8kx>4==QtYdlfW@1SPqcD{(!pM~^pRS;NHu1(?h2hk`=)oxHm!@Mmo`O^Yq`0{hyd3(e+lh)?kP`v zmRrV_#@Wndv4&Xj^)GnxGUM@!Haz8sV3B$UVL*~6WDDb+>+H-LN5a?&3WhPh8ZSvS zS`i}Vf8KaJ*4f#)ka(EP3V+(ln_wDo30E(ye*kfGtJ0eFJHuYg+D<|XXPwhn3~W20 z+~-=x@nF6s$DbT#xN`Os2hGwH_v|~amve4%#0YQQsx^dY>qR(UY;>+l5^`gzsnU{&9lp<)fYsDMR(Mv^=6+3!iM_SW zJZQE?m|F+mzIOItmii%#1v2Iar#+kdKCa+i7r&NkrztV;;lY!^7ZZ+*;iV#DP zhdDHE$r~!GPJziJr*+MBB3~+%AH}2}+RViQ5-De4eCw`XgGN1w)losCHm%Ns82+ot zirNN9;tDaT%Nql5LXLqNrBfo7f^n+bBoBywLp~G}6Ky~G!0>bxw*wC$;}hRWR_=QI zI9E7Fg%>_%&8GKLI829GcD^5lvcDqH+csSyINWL_M)v8}`+kMqxS4121($`evu9i) zj(4tjt{Y35BFp;Td|BseUIST8HR|sRHbzb#kiM&ch{Y}@no8#dmCHsnksvK?1Gf#d z90cQ!xx>;5rUb|}rBW3kqm7<-tiHSsOfvH`bg00Mj}{yt;@!Q+(TBQq<#GV8yCY1d zGM$pOApOpw{Jd*EnS}c9zN{A?`8wj0oBIgE)y=}Z)u?v2Sv<G1 zo^jv2Ucn}7T)tjAM{L*=g(BQ|j@hP%6SXcGG4@&H`rZ`&UYOV^PC*p)+Y%A-^?Chq z;q!J2oggn(wJ=kng<7GenbzXtHwhNX^DaTM@+SvBJGwdv0{?7T#dCJXmkmiJl1zfW zE{B&@72ML0SQ(wbJU?nG$i*e+scjRUVI~%HySG=@R;Uk86J_Dcq8um|W*Y0%9!imz zeJZe!Gq@N)={m`6%-XOXG-Ftp8lOwFBxF87-GoAiwLYBMzPUHu9qSE&AnnxYdT50z zKNbq!f99TrXtJQq)}Nbz8r>ArsAw-f=fhL4n=#fP9ddyQeU^XnbA;>Z#}|ht5>l_+ zoGO(01X)96W$f~pbJU+WhPGgc)3lTkFxb;fJt;wqaJ>pG7?oz>_7Pnz>MD>4j&HG8 z?(+?us}h17eI)VA^mCZKBN7+yg#ZB+-ge7s&h+T>FOKoWYR*63$P@+#`%Om|lLKC} zk{qjXMAW@aC6u%3l<9}5Sb~B5&_U(7Mq4+f?P2I$)!rpn)?ib_@yW^1;>~H9Vrhs{ z8f3w^NTbY^9*htiitdlv1#eT0VAQ7_4-PO6A&q(*`ZuGTON$J~3yfPPHgT^|jtWJCh; zk8Is12uMXJ z3jZa$zS^tYW1hQfID$QRTiGp2&*K7VTnkos?lCaeuc%p%XNP8@?H7JAR}er_M4r)? zH6K6Sb11Tj&x0Y^qYk~}#P<8dH&hJ~totMEQbwfi?-xi?%y|M2Ny%Tq-1LoXQOn+H z;X$KI>m|Jyt;l$*XeD!WL?Q`{g9Om{FW$oJoVh8Zcy zulPQZKFqdl;vJAFKq{%&G%&V}e|vLFIu5iAyjy9eUK}5LwH^qM9)6-|ela#?wD*p0 zEW-i46Ap{L7l*f^k>^uGgXcPOw={`c)gZyesg8ht5^ZQtiL}ATIDc_sf2<&Z8;^U| z_5P?bU!5kl$T(v#TkF32m$dWY?#}N`?`8XMyi?dt-KNt;$xq)A%{om?e0Qkmor* z-ovmr-}z*PMb>9sK0{lQi4LMvt$-LWV{pFFexwvmxAxN8GsQ^6GbUu{1lFL>`kW^b zB_gbSpBG;4f3`BTkvZV~#?EHieBjNKDyhj#RL+MT-vZKE=;+SVTf-l-xgAj^WJ1!z zd%M@J;ulGHnaU~7@4NUGkS#jS?+HS}TU=h-*jy>|=2<&|?HgBkGs{eCp3QNNe3#fO z&@X$_J!#6JCOfw^{P3C3>A9iA`TEAWS^{)nzbgqPOHz7Wu7sY*{v>o#{-~+KOXyhU zU3Q`@YaHj==jyC9sx-^8YMSgI*9AB`TrV2h{;IeQ0`(MVH)deg8%eSHFmrS(q<;M~ z;h7_sll5s<7?0MUG_E?D$Xxt(TsZkaL{IWN<96y_NKpdaS#x0y(v><3zC97y9+^j1 z$d(;Z1`!4lPC-=d_h}-B#>b1BYi9pg#cq=~X%m%MdNa?58;&_9zMx27yZW?M{tMn1 z8Fi&dM6`CUpCyTIQ4{Z28$`>Fjkr2{kz)(~BqQa{s+!yFrC^H?@z7aUiIdfLPsQk} zHs0D$T9OfWD$@@HWTu;)w4S&TwRR892+rX<#dN?_7?$o1=5m z2V#+jMC|s7uE2QUvAqPP=$*nTG<*waE`l}^bWYqC+(i?qjU*MX9=E=ysTl|8p4*0( zqq;gb_p&Wq4t5n&3_wayEcVx{?aDyh@C!d~<|VCBu|=x92cdEYi8 z24<@f!_z(K@P_rz5nXM&{r=}WMd8dUx1bs{pu%Hz_?XWOA0yGznNnEYlST-bf0co~ zTa<+sYZmk4_B*qshB37Us!e9x+nZ1#su(yA65Y;RxNRrkr+a(MJKj|GZpUsyZ~vy}{MP?g*u39)bx3jXVeW&M|Yl%aa{0ZU`EP052^&4OS~ufxP1Pu?;8 zs#co(Yd2Gpd74|3Ox&nUy?(RQu?Vrlt;p^!X0;3MYqano_lkndnPHa+?fB~7iw#h+ zO7J(kXisChR+3rINvBI|Wfa)rEf7u7MxwHQVPzvpvf5}EqeE(mQMGa+qD9FwCR%4l znsK=}+w6I3b=8}mnRj|mvY%#+d(Jf7&eFI1wYzFK#>d}E_4agWx|Xo?c(kUHG9LP! zMV7`{_Z8?0`*&3g=6g`mVNc2ND*%5N#t6+&xcx1~UMn$L$D29* zw`^cR`IPx^M6SM+yBu={9sWZ+(W851A^LLupKaca^-cRXh^7>_* z($!K0>fg(KHoYO^jQSe3!}`=iKiu}IfJEQN4>*DJnANlGNgGjQkPwMDJe*a>{!g}X6FNeZfz<>lbW{Q}D4Ot5H zrGM+s7avDEn&;y{KDkn?QH_!E@xBQLUzZ^emJEg0wz864-40bfWGX9n!|tVk#<*Ih zceeD%q!*JkKQAMTZ1g(akSw+axcaa$NmJsoc@y6 zZ>19!9D}mF!qR40Wou#?WtD7z$6skyCogM4Qe~^|Q7-c{9xtta=(zRTBbbc1_dNNa z(k(Ny-nhz=ETW`{u9sw#$|@e}s++1&jl_8Td5XcwNYPczoMf^0tl!@mH`+`zekL@@3;tDxp(yCdi!O9j_r3?~BpCFW;ihIR@wAeJl1=UiF-7WIYo_dVkKB zVDOqSXxQtw-~9n5i$4fCXjn+6r$g`%A`OTp46;j4QSgfT-iK_Vv1(I1PhSFf-s+Iq zcg8ZdEPdvL!p?Q);e**pjWszE@#xs+uD?C4<9(h+&S%@C@io|^O_Wf(!%87 z%8JaMD-h2Ptm@Thr9MNq+l-Nr>PKvYP#WPxFHtcD^S%L>eWXJTKZSS z;9zDIAC_0fHeYA{e3H3ikAp2`OpdKYf3%#1J7kDA!S^^ldM2%R@H8ei)=KEN5|?5& z!?bm~50o@90lF5fJwldMR)cBo#B?+(`VERS%5+E9PX!Q=E!9a3mNFc_q=+h{2$Vg# z)g9LZeG`3XQ_fU%^ZpOxlkWKd8~2+-9l?}0<0nYmKC0k@xnAVgy9~$a!mjpA3QJ=w z)PI)44Um5<8J@OPOYi$E&h^G8Fok8Qkt$j@jvHS4R0CJ(q|7J@$V_0l!_U$aUS`S5)@EV7~K?Pm$} zz`34IV*S_m{O!TSURic6 zy~2GG%=b2*v`pQbPq?tF^%YF#*+Id`-MwGR8c#m(I%isq;L8&?XfiEJFh#n4^!*VA zU-LNQM=F!wqmgymTzFC=Uvij%vs~?=NpP%2^zq$rh#2Qxe%Q`7^T?FpY{%CW z(p~#f=`U&v8(Q=EmY(9rZL`JV)qYX83u;lY;kG7& zd!Ltn;3G}0#<8voaZ<0{E%EP3E|>ORMISSRRw>ymD0I<2(Xl~qbq5JRM86pujU?<< z!SBBPx08!cs)5+1X(f4|^ zshcH<(xKl<13{T0JD>svIhJH_stun-ai_Tmks^R-#90|G)ux#^nD%cm>bn*X1}ifp z{*(y`36-*Fp(F6Vz_0v#ZTkFy16&>-a`f3+vXze?JG_aN>j0g+mQO6Qo3mlOJ^l;0 z%8KjIRGTe;C{yxkLxoLwt^|@!YX8b{*0^>=0?j zgm#TI?+eu>L6JAH6EbF5<418RV0?H7^yP)6j=I%1rw*DaRFZgfd$T&_1vhb!U1_!F zjl17eo~A(WjMllZ@zgJ674GcFFdReG((dN&3y1oLxgfIt8C<_~5gN@7~ZM*n~|5gNZ^xcfbQhllc6+T7*Um$>3K| z$3wj<9{1j~8>>=E#IN8%UI~n2Q}2Pn+w8!E&l1#uMJPUAlmV%-qFtL~528W*r2Nlu z`HxzsY%WryNgLn7TxV48zb=>EebIRI<(Zxwb4tQ@NH<$N)S~S`@3R0)b4?&KqeBf1 z0QmrUxf)j4kOl<>S%yH7*bypYtel+1uK@*ygopT`Nd~p3%2}szsFil$AbjsI8A?PW z+y#RV%W>iO%y*F*GNO_Jwx@&dcO;f5(JVY!GHAswdCY=yh}c@oW*{&2;su8D8HUY_ zKSvprviSTo%8D@`EnUH8(NEgE;Z~L3adM!+>V8MPX7VmB@30R7>g-Q}*C7?q_-MvY z8wbS^X`Va33f)cHCw?EJWe1~5vZEB8P0SwYs1s~?!~m377IZmGzDU!Av~XBtnd(k< zv*^LE{)}e^W_DpE<#I)P?Jfknuvk@JiMldg)+p$-($*hDlk_HN7R#CBL_>>ru=DP- zv$KEEM+&EwHu_YrDa%N$18`z!=8?T?;1wE05uz!<^*ZYyX&r7g?L>UI6?RrPe?uAFbhxbFQp7q; zhIBpuopBC1IoL>IL7+#0UuadG=d6?3^tdZ~1f5G6y+yqxs8M0{-#nWLGp$uhD+Ln?MZzc;fbS3GeM=PgpDub~x?wZQ9d_)mcVfA%tgQy=(-;m55(L_g|Xi@8V4 zgRhR)kkm|hfrXJK&AYk0nCfcXe^9aX`?vIi2NBrsCmckKjEw%NR%a&%7VV)ouu4Iy z^qWyE4T=PFk$*iNiPR~dL*2qnL&mmxp9M~{kBd@&JpUooSpb-1b!a}a!d?Q;CkF>a2mFLrS^E z8&PJS3ke0s{^yJSkqf;^#ee)}0x2xN*fgK-l`GH{w_hc>cgyy23;2s)OpHS%r=~{V z*B?@Gcf96V=keake@x2we7XGmdV~9hUi&QpTs*wT+!kQIf6la=j9t0|i%-Rdi%LDg z?CfmK&L>W@Z4g7w*VE_wHJW>WW_iyMYrdp^&i(&v{ONu@KuAJ@-Te3W{Kuuy@spm5 zX_d0{p7W%@Ml*o+mh|ek9P45cqyN^6+S80bJN~o6Q`)&-gDo@>pMI~b$hf**sD1N( zb@>eFHHZIO4MGT5m}!Ae#v`F`t9;xGM6>d3Xedy~cKE;RX&^pfP^g`y?5Noenr9bU z+;swL1rUy5Ea2teOH3aR*EpW-jeyWHEa&4c1uX1eQ3e%V`*#hOrLS-T9U2m|>%bL#oIpU>$W1MnOry&}z9L?y;`*fV_>UZ!nfA<3*G<9wIRuqPFf z6#a+~y|dWg3p)aXvk3pwPJb+Iy)q;csPShlCjY)`J^_&gh4sy}23J^i!?0?yyStm2 zmnZ+93$V`1<8-UjY0`BBtLSoE>Bm^L`KKjfg*R)#aFUGGWPnDh@Huk+rz(c9rGJ=h z4+Dy@vfafL^^+{)5cO|HV~=clJAr6u?7dcvRrZ-ruTcizsMKHA)$ZQBL#Lywi`_nu zz!rw&#@ayb1?*(4dc=~$<+=$1=+ahox$lF-l2(v2^4Sh^#mC1}24PXkqHe3nB|;Gw zf#=@{=w>j7?lJmKuH{QQyVLUPwe4Gw=d`v=D^EDK5(W7O;NO{gSn;Kx41dcYhTO~7 z$&Yeqh%we~gaY0--H6htyZ^{(i%0PPk%Gdp*7G- zOF7NQ{0nf11=37>Td|Tb^K0~d0*!bYYp#yq8?cGyHeeSbn z=L=@@iJ$o&B4jPp8f@9AJ*-@|=aqa8TNx5rkV2p7BZZz#-P<#+M$Byk_>V!AO$--l zvH1`tfZ6?Gv2Ixez2Bj^-Do8X7pMkuSsN4_`gPIr!2|nPquSQZ3rYbsKu-0%%K#1X zTJy=|26E<8V5MxAAmUzI-SJBjpZgB{6#HYO|I#AM+i--au>F{2;o&=}lXtJ;p>X;v zO|}k=hk+Zu8{V~`#CRM64j&}9*WC{KVSwpW+nkS6&#J8aujR>ouHPP?KG#ds0yv}M zm=Kf?07L2Pn+jj$e)(PbU6)6bsg90L7p&qo;(GH|#Iu6wMW0(8hhZ+RARl!OJK8kn zrfm~an{P6dd!z(VN>GGz5FJaKYMZJ;mboZpT4{`KlF5wq#M+F2*tiklqCr_eDdk{nRH2CYX3h6{=6z}J!lt&RGA~iOT(~l zrO(+Ost)-sB!IwIAuv|YcC=i_^a~pj<_VS2XQZv)%j%bJ0};!|K{<&Qd)d^b&IBb7 zKayNr?kEYo0XDih1DMbG=DPEY#wtwU?%k&;DfNmzRj%nEQMm}90EBk36Too#!aa!q zg-nXJPWQwGQ{y@=Qch696JzZ+72uVmn3$N7rTm-0$J(o~?QDiK{0;vS{YiQx&7o=zgvd zw2Lk(Ve`nR7Q_+kN=}iXE(z}}MnT$4>ax3}>9ZY|VVO*;mw_ii6L!NWLY29#r2TrS zmv!{qY6$79@eOm9wl4uHJaw{vogfDig+dQmY=8_cNQvL&m#Q)vqJhX7{qZeUZ(%U+8PS5aVA1cvXVDhn5iEi!u#@#JNoiid$EZcjFPx|o)UfjSlG4k2AE0DiIVg2D8QrvY$#Bm5CHA>hjcHJ zH~qb;dv7liWS@VpxGs&D0ufLP@qBfvi3S9z{Kp*r8VF|+7G`hoLIB{9m;ZaIz{f}! z7Qz@GjR2TZ2z>tqOskFj9qN$Ywmmee&j>`AO;NRFI)%b2*DEA-L$J< zvjG0>>_kRU8=Ek>Nj2214Y~&}VK5@l)zD(sKmg<{I0zYJA#zsSqnPHQkdP7wd)Ke*4?*E;%wIc(tT7y@7;Nl-0XETel>x@@HCCrWK5 z3)&(b2v2rTe3z!-`_&&^zLh)dNKJ+jYr0$D)i+6+m{2v7Z5Bk0m>=_Tf$;a2;Rr}K zE8sR@ksFpppqmuLP$K8)dB;o0P;~Ngk{11LSS3RMP0!4jSolmDPkj7v)=<+GUE2o! zD)tE#T<);iBb&C@F@?t_<`fL&JsyE-ai+jb&PRa6EX9~m*?{wckF=SGE% zcv1XWlYwp#ejp=rb^|#?({D-n+485&K?}lc+mP+6ORLFa!nIC3daE~^n6NN?smL!& z8AZ=bWtF=?Bf#n2?pGN=MJ>`x)Ratf*E2}_$#UFE{FYzu!hE8j?S>X1bJyhITSmOv%O=C2(r12hcc}*%K0MwG z53M9=6;Noa@eVxxfiWdL-Ml34(nt1!vXhJ}9o;^I24FtD=z>5=7za=HwdHJdn={t*4?SmMYI z9|cXt)l3v6)?WWE$;Ad&Fyhy*TasPyxW~=R?DM{)&?mafu*~vV=fvI_X%ijk5mQ#W z!#>wLL`L#C=$|1Yzuh7mFGblTgZ5cVT<+l8Y}CD-&vz(kY2#S{r2HSApd$H9T549oU)yt#kLM187yb&M z_luR5-Tp7fX5b_`oH-s?B!2g+?>vs$u6y=e*=?QD-=9M83%_nl8@rbvhPdsQbeG@r zG~pz;%Z(6WF|F2FvYx9`bj5G&WGvM~#7H^dudFkC_0EeyYnGfC>$VjE%=$K?o@dMV z3wQO`Ygc`1Yrb$ita&HCn@5&y$?dnf7-WkxWc`B8e2vfE^0>4rB35yLU!Fhiy9I(g zELI&PbBq+A!@vvA5yfg>VnQ^E)Ydop6BtVU+XYubSeR?TVE{Vp1=l#?Mv`b_p~<&u zF9Dhk8-uWZcN7JS1qUhHh_UYXQ#@2E$Q?C&*=h2Q-P@M8U`#p-%n^hzv%=M;rgY0Rx8g`#&SjKf>xiY~dnQGt*!8s2TcL_akIE z@3Lx7sVIYnwHgHHu^6cMFW47&qnIbY)}z zsc4cnU(hZ2_YFTa{F2+Ew3U>oj34+W*WMyge5uNulb??l5fM>o3EdKaE z`{fg0rOnu<=~T9Uan8sM#LG4t*mgyfZ@9S@;Fl$W6*fCLi?TMpi8Gh}Rrv_~&k%+* z*+-Qys*9(PhKL-b}$GVM9e%;Y@6JJjCbBJ)sI6vq5JuwZlBE_OEAT_3I|o#>~u zWJ`whPX~22GJ1$1Tb3%j?{WT>3jB{Af-F_uD&%*l*X}T;r0r$pXrxAVhi24E7w7yA z4v|z6)h+}$O$HJOOEZKIoA=*ykG@qH+v!{KXC0kOfJSh_g%(2fTt92gY0j6C9nP$K zk-5ecq6$)J0uGj-L6Khk@J{n<{kxgI57~lFLkm`&F#jK6Zygs^*R~B`Dgq-Q!_Xl( zbV&))phI^^OGu~)f^>(-2t#)$2m*>oDF{e|bV&#ZNSAbX`mPOnz0ZBW&-eTOy1aDu z-fOS5_PNeDj^jL4x6%jO80=;J*vO4LMK@l5@G*V|3cH&O<*bA@+-!Lb**Jk=5eZQ? zFru|B;Kue3%{mZ(4=53dJW*k?T#XpZmjQJY$e$?QvU>myc=SwUt~};~pVUs8Z0AK5 zLnRSj`Y$XXK|!S`U&7cBxEdFiHR^m(qW&apU2-%mVAG+9mUoPsei#wm#pc0=EMu}p zOwlz?_!)0AhjPt&eM?2p9D2y*LZp@Gn+{CK=MW@QL?GaH%KLc%Q21GG4My*mYk0~D z9?KrlPXpHFEkdfbyWleg>O@K6NPx|xI?RoRDdGYj1d4#UYK|R}C4G(KH5qgfi0ued zdjI|_H>2Pig5HyOCXw%skpV0ix?hF_Y9L5aK&7lc&-pO!W@3>XZt^9PNm@)UKP3akoW}jMSySKP zHhJ(8>&y%u+B%g{t1l%7eQ&%bWNKFl>LI`%(T|5mk#Fu>P9f3L68ot)2f0AiOcUbr z1ckVZBk9*N2vbyc?7qd_-IkRP+FQnI+U=Wl4mMVlmv)OVeX{0Faab;~dw&`B(f$Mj z&LRw0%aD>d?b5eS9%5BwH`{gJxa&&FPV>)8tD{0&Xn zer}6xQgD!5loi=Dqll`^QJfgFu2e(6W^9;Skqy-Q{HxZkfzwuEd(F~+&cbRg8&?rm z0b(#Qa>YkQ%6F>Wx3m_>{t`hVqbi^88+$hf&Mmw6@%iVbuqc*r4~lfdeFq9bQhI>-Tk#oocm*2om1`_<8)rYmr)I4*0XJ9Q*ipAUFl2hzknhLO~; z4YP@O`lv{Tyez{J{H_Z!(yOe^9mQ3XbF&M!eO!hC`JWtx>@Du1{=|%pg@|+n+BF7m zg{{Pt4cP-QEMrIAZh6!(U@OxPI#V0o2*lqD`V@lRclmg`zveaW$x*?>*aSgyo+sK) zbcado1Lp;YZ9 z@JV;3Nt zz!n#6RMu;Ts~e9yiTM>&0im@x;s@m8erYjH5y-k*!br1y#SgYLReGMLRd?!DAO9me z?tCl!i4w*w6(Y&!*Th&Ctv%wB*GHw4l7|WGG1Ev06?k96rWF7mi$u^u{k&cL8!sDI z%YYKSB{b{Y;)oE(p`7d=tNX2gD)+p+AeIe&}kWp$y8Dk z&qq=&0z0o62ajqIEpWVMHFncH`zs|aIU7MzS3UKkw!1{T3d(yq<||4M%eu>-Qb^dl z4&7I-qBxxT`8XUs1FGaJVl9`;6qMCycB9}-v0IKW6D7)v5FD!p0cA=eJe+9h;ol>y z@+m-bcBcoRaa@n2S!otG< zIG$HQ0ka1S#q3yB6AQ}}k;f3Od~M)8DVeF$LC{YX;pC9TtEPTb?BM(;JuBD7d-wQ= ztZO?m4lZ(C)>8uy3C=5a=a^^C$_-@(6Gr=~aY^g9;&&Xh*vyN* z9e2f-D%Sm~U&At4derhM0a(1rhJ5X;SHO2n3jVIhFP7U*tpEomd`j41M-0X^vwo|u zvN@=!V(s>59QoINkLyo-Yd>Rmatzc`KT3R~F{p~_TQ@JN!OPOqg;rH(Z`Wg=9ls< zgM)fs1*bygfvwV3lu{iy;&s?N>K-KJ?Q7(q@^Zb;>abBKWNHFy1&iFo7#n%W(OvCZ z&WR=B5l~`2Um;_>)dpR)S)e5wCp9`blw?f!+&k(L<@5k0|?sfc{}L`VB$1lpCmj8#&8|4E(2TnzA5913U*M$~FDoS+98hrmC3vD9<(gz9&(0X+pYB%gOy(Jle_( zTwIIfo3Gqcz&xcmamad;DD;)CWIUqh(lt@wHQCfxbAuqu=5fQyaH`@@jVCI~WZn*;_U9UDV!lKD zU%q~xy(&b|*5%J4x=4O-WZzG{XOpZ^#dZ8D0qRo>DF}bgBrD5yzhS6 zg2vA^4^Cr^4T9P>mDDS^%N_%#wuzAmX)F`kNKzS0L&!ghpWvhME#%|v(QF$Ej_+(9 zjb%SQ8Z1*2d-Cp)B6zjeg2PVORC<*_eiU-38<++Vd}TFMO!q3&o|jX3(1|52PQF@7 zwB^TT`(PtIcj~9E78D=pV~V&$&93gtn(_{$27{Oj&@}b(!*e}j<#OS9d-UrqwD>`n zugEM*#%^DHaR?Ul$<>6&PwNrcsPwD7B9Y)_z{dk)lAhuI(B*r1gpf&60hP|m52N(? zL|}A;&AW_8M>a3n{jBYqzv*xx(ZAmg8J8hO*Th>JxYHk!BOT2tM5v|c%@l*k%;IzX zDu1DA#N6OXf=}b$9h;V*v0TRR1HH!Y8sRY-le|LX1MLQ*@e69dVWEpLE)hlP4k}Nj zpFe&0f8&i8+>T+p*S=i_Uv)0Artch;mTybYE`5CDDf4KtgO0FHZqHi_k`xeBc=ME* z`nCRV=OP;*5pP{kPNuBu)*vzteXaDAatGwnIXmLv1@N@FG^uqTZ$f5GnkEGI6%|w+ zl?ymB2Hsl0Q;KJ^en$R;$Gd^?w9YN-{XB}nLnz97Te&N=%6{EJFFU2p{J6CpZ0h$# zYYO4b=kb_LQAtt5U6&l2fkj>ZW+4b?&O>w%7KP?2$;X4VZHzpM*?>&-BkFY{j}j`y zdslzw#A~CGd^UcD(ZVU=`=@)u1mlloL|pjaxI7kqXhk4O`3_GvZMqh=f7}!i^#u6S zz#4x2IPQ1lL8{ARp{OWb{oP4T!9x@5 zq_f=wsweWh@Ot6~LdX077RC;ka3z6&Zoc1M;@4{Yx{j2{Yoab^b=Bw?_;@w8Ryjj+ zZwPwKM~dy`Dq9dmb(}OwAsRE+(!a&1s=QZsuLhnky4Gkx<*ryzrwpT{qtlhF7#lM# zPF650moQUMu-w;?Q(XG_*V+p+3?mR)R8tECwO8JsoouSgzb{-Q%=1^uCEna&DRfB~ zTAtJs9COR?NH{1SFm7k%6&IUQXuVQ&O<`5l5ve54rND}OPnfnAgV%pqMTyH8b67D- zG3blyN0K=$aOE@LT5M@~`9S<#aC}A)u`%VpZk-GJzXPa1@CBvJDrQXWO3a$P1SwkP zG_)AKj&iE4azY2I|JLDf_mIoSa#i_qO?pP@4x!9ZVL=9o<4MBlXeF*YN=i!cjEsES znwmk{%ql(iI1zk3<#5u0alc(~)SndVqAjFlhh{sA-bu^L7t`lO&8bObq@~?C5v@L+ z<(`v9@qtJbL?q`Wo+snguT32W-FG9BL)BuBK z9cw3qyPCq}=;r_*P55kc&}d#()jP7h3N>lv{w1m3;kVpWGvn8lz_~bSmm7oAefKjw zKj}x>+!9W@r OnJo%8{)1LBP+Dbzr;cyVw)ewGzsJLQUvH~$d{X{)K_9!za^Gj% z{9BgcVCX4{W8%5D4ppUO$?wVfq{A5-ChaD`^hBNIM?s}&y!MrVwFR5+%%PkxFiuZx z{f`cFCXQRaSs7zAt|cqmSjK}QEY=K=N*L|idPI+0ylAJAXIZMuzic?~A(GztCu-{@ z8lIMhvfQ9#C(R|FoX9mjgA5({40~PB*-ujc1V*%(mZuS`pxQF=i`}`=DfJ7rQ3W=^ z``BH{AI~;P2C7;!(NGw#*#Hu55va&W!;gt6Vm~4yr;K=w$lq5{vK&~MW}^H0`#(t0 z3-CpO;7xmeo&EQ2#1x=A3e$~U)w;1#m(?TT4}~&CXba&E;H`4}7-z2`r=nD732@Lx zh3={Z5~kdn5w%{Az&za1K4+%E~e$&(Q|zD4%*Hyw77TDi@H4 zh>nV!U`SGbpDJ{xp;7nE>grMY)~jfIjv2J2#Vwh&>jv#g8pT6ytUt82K|t5kB4BTJ z?i)iglZkY(k=uzvec>QvO~h>>U_+f9dYH=-`Ol@svwEk@SVlx+)MN(&Z5U@>Xt>$3 zH+I|;v7;aBKq=PS=6~P6IYLe}6n~zBH8k4i8?c;{<&tMbnwfs1Bu_hx31;*?G1h)X z{c+%1u=57Nx>&SF7si`WI;hvk%FJV-j?{AaQDyn>b=8E&;>al)(z)z@Upj?{P}cga zE~$`k{o^hADlLcLTsr(RG1)d#{;w9x7=1MDf2^Qrfsp4 zcRV$Xxf>)9=?$RL)gHH(zK!6tUPP@am~3_j<|;NONo}vEIGQ=}xM{*B=7O z;J+1`vlT={!0>ZjRY%>q@2Q7D>@pFcRw51v87v0jnVC?E5TSt4V|nXcvmsGz|7Gi{ z(4&sqD)+3!=}V&FMAIzY_U+0;pL(fWZRs~d!HZ9lJ?fKJ*;>e zsZ4KIdYM$Tc}AlZARUg6=OmjWe6|_%+vv>Pp6{D>_8&y6qa-{pk9dadsWc)5tsag% zt6rm64k0Rufm50t_LjtPX|*+tb~un*jaE^3ca~Ob{Co68!wWLQa+sp+6Y$PZE`!B0(@K~)*?3%zU-cqM_FSoX+?sB{h+#CZqKl*{bM zAq*-$(lDBbrNNWV;30`Bw z8$Q&RnWQHxecbx_(^=l0+9jLn1V>`V{O(h|=7*M;B~#K*VgNtZs0L=<9J<@CPUS+X zf)lz&392kEkab{1Dq=Odvu?&(-TLY|So(#bbnBtk7bflw5dT2Hd>dVERk5U>i>H4w z&``b8VzYhV19|G<3T)ME==w4<62L=aeqV_S1#gd`4dc@Sv1NOTMCksz*yO$R2Op@% zXq0Ep{a03d2f~pAj?{rrzP?-s^ZBTj{+? z1U-E>(`GD6JTrU`L@uvW<+?hLc(!+rx(A&63%i0+>YJLWUU-8nG%=1xkEex@hfeO? zF@?m`o#8h2*pQcFiHWKXxX`}KM7!~BD{N#${fv-G3m9dz=t-AxTP|p}U=xN>4oT24 zedd@jRL?w}N7FMh?G%$HetttM-eoZ$4e}bm*QZydeKvO(;*{Et-%+;7E+pwh%Fd-j z<*Dl<@y;~1BntlfdigCtWC+ALVUf#d?vEhM@YTI(*lFM-d98q37Mg1vRG*s}p;)S+ zkhs^~kdW8&UaZB`M&MEtP_%wOjwfL97*uc>-Zs>HB-0iRsE-H(_^$H}_X_dde|L|a zyotUAhsabAHdJh_I~XAgrYFEC?#V{Ll{pq(m+bQdud}isg(6Mj=OWsbBb-c6MZPzX zQzqG_po9sn&DcxdVrEHpxKmo#{yOVvIbjSNm!TyK?6I?KM{sc|89|ihrrxEtQI_-w zK@1d2_KXD@Mn5rncZ==tCzMD-Hb{0%z)W1IRwS21$L%@c%2t@82{JxATWi%s1bQB~KBl_iRBh&MK0nW2psE!+a}a%jVa za8kF-w=E>aM5#WRr6u;*FdI@IO@GXyJ&%}xJ$M3xvDaz1Zh*7^?3*fIkIS{>1e3H= zJCz8wz3e4oEe>bq5+Mz~>4)3PhJlOL1Inny*zUx6X*i zQl4FzVd?MFBVr|a_J+vl#Xx3@7c-z9mf~~x*lX$Dcr*yrs=)`~(k0So;(PPwnlSt| z-uLVZg-Fz(3<_INH*E*=RicKlUaq{yUYAKxiM?mtZj(d(?wN@=8u+?UenG%W0<%dC zx4+3gp?_&EuI;I8@ZH*B=;~PN)SSDMcRL@EXW!bE<1C>BupFpdB@+si>hoFDpC7m` z>gtVM`f`|&){e6=7T84TdcWo9l5zT}0*W=jF&hy57CNB@!`*x!uH__rW)q&LN?lCwS*hitDrld>{ zqdZtfIh(5RT6}t+hjYPS1j?lC&v>&Dv=@G}%Vo%8tzpynUPgDaWR7tLsb{FtLBjh> zp#|xdPbR4zC4N;L3F}dMwkf4S@5@^08f-omNT#+w`XeYlr;kpw=U)0a7g;W1IOE}> zaODlBz~x1iNo(3f9sxTfezW4E#_bTUa$FEltJ(_1L+~yT3^MHCN#&?}rq&KJL`fN1 zu#O`KifxstR=`n489uvmTigAH*n5KA1+#rx@<8(k^1xH7D6b)F?slyLf4?Ue=3+_>xgGRMg;fj{W(}C_SR#jG@a)S|zBFdcb(0`Kl?3G)@n;)XZZS zvtLj_d5Or}t173VJ3A-c$D(iYUfY&*Cn4Qk0|yG1*hoO1(!PyFsnqh~pQfvx-PL(U z0XW`|n7;tANu6f{nVwWo#QC^t$ zk=6YQg_b#qJz=li_m@R?>R$ya3#Eu4%xT+-}+Q+$72ngEhQb;*&8y2|8L2_HEB zc|->znrsfb#*z7u>Xm-=#hhDKVWM=hYAzY>8_K;NC?F`;xAc4V=EPy{hI;OY!3yjL zu6q<~H*q}`rBrjA;2X!e3s{vs&J7kUjl;z0gpz;C(K&icvY4$Xq52}Tzpfjv z9BQ{V@04Qv!qdUsb+5?UF_rb@*JR=95*T_`B887>UXhd<_0lM*{4tim7c_OXqqdFfECzS|i~Lkr74w zq3cSun9b*0$guM&HnnDwX$(uqtR?gWI`@RhI4SE!oJ_%STziM6)_S}Efv`9dLonP zJ9lfl-mrd612Lg?27pLh zD*WprRLEmW^wPS9!}5*%12|NU=&Wxayc$byfweL{R+0}eC5J6M&6W-n^zd}U&!{iE zn4e?OQgUGl|;^JU*P1@1>dpRt8Ea8F_xO zvmy(Kf)+@NZve@|=ZEhcQN1GVtoPnvnloMa^Aj`VEiF`Aa7D;n*?)(rAQdr|S&&@n zV1?_)k!T~(r$|x0PCH9xf1>Oidl2@0*0bt#at^%%sAAlNZHViIWP2jih*yTI>WbJr z6aaV`?2vdkKoQb13>#UxYYwc~BQdR?jki}c-dec7_$h_pVoDQ`zBnzO#bqzm)1F9@ z4j>r-a|PXw&hqxbVZ%)msH*#5FM?_{BoqZ?Ybss>^eE*o^uA}0x>0!X05RcxJl5 zzRfHwMaI-Xp(yXdC>_@0s1XkcrJ_AN1)*G}q#AL_${hO7u57z5q zRUvW?jisxzFAO7(u*iX&);R9K`=iL8>;Uh|0D+3&-mGDwsd|2gK;-~-j>y45M8Ej! z6oD*bM^ZDy7cQV2GWL7*+IxOThcJPj)heTj7f0Zp2al6W`ELfdQd)tkpiP-NHfezA z4%)xdseLIL5zPQ=y?#X>817d&*o^-o&V-#8N$M|x>f1vzH32G|_kr4%JFmWREXH%B zK_Yv|c$SBa!xjTKzd%P}wDo^rw;}KgI3EMdi@84r9NBI2Ui=v z7_TaU^gqCw{|`_csLwR=!!$I|({HGqLz1(`ZZdy)060)o0O|c!9U_%u#381{l-VmZ zmfVEC5y2yyM{VNQg8m!94F}Mq6!%}0Akpj_`K}N6bx>cmyDiQ{H4@6}M|G&6bwwJGF_*o1l>|JF@9Z?Q;we!CfXqmuO#T|aCUl1b>2ovj2Ly+UWPD`tlUUQ0N6_^N0H^#H zv=A2w5C_STTgIj2{k4v_hEJ}aE&6|;A^~|KDhkbtm0}f`^A^8<7@Nn1%aaedpMZPu zKOy1gLz7=`C5vqh=+NrOzrC|a=62QNX7u@d1CXf1qvr3`pU>aw4`lyrfbogOew~j{ zzpr95^Eh<-$M^SVC0=7=TA@(1zX-DIXNz^Kr#b^%2}&RUp$}HM9T5Hc=_;LCvRI_? z8x2;QYKP{B3hLf9_<>kxCIyOx&iFV$;1>`$8noi3aD;UUGjTbgQ9Wb+eK01)(lZ~>tG^a1QsaC|^>_b)6G4MzY*f)J>?1EUKiRv>D?-(8Y| zR=)qH^+h29=NG4qw29uP`#)0D$#%9onZ>UF!t4LtR`F=8t3SRLbHw5x+`fkeU$zZJ zQ_B4_20&rks%;LNz*u7f4uKMY|Cw(0&^g9-?X%^`<%<`}m|V{?+JKyHf@%1fjGTxs;HB zEpG6%WlKD3Y$opVwf7@-5|K5|sE+3V2n$fU{{NzMp}qLIVH+SxbwE!z0f4u=KB3EK z;Z8_@^Y(N9Fn6QeZXm;624H*Q;6DK7w*1c-zJf0X{uS%csy&m6pJ~gg+s6)<;q;%2 zi`fe+St%>e9~tVX{r~PiF68rnnsx>21nvc6BxqEN@G~WPL0ki^6JwI)c#q*uQ<6paWr4cm3;%+fw)5IX?GqXt~Tgt3%Yl3Yu1ir#Qe}woS(5qE|aYOWs z|73;$=me4L1RxnnwgFfzJJRpHSe8k8JB*D@O2&pkOpc}3fDJe?Fu;e^wObt#)-MD~ z!2e~r0H4S{^BQTmaMoihxuX&nVC^*0+VSi;t)xv}g)BUzM?SovllZ@y$;>$$LCYlU zt}s)}8fpQ@YpnLAu_7P#g8rN80(~P7738Plx-U_9zQGQ6w{^R_9SP7j|6eBT`VQr+ zrp&*l=nUu^JXs6j!OzelLOXP)*}7mll<>H64+i=tkeax z^&N4KPAoH)^i+oov$;f0NSyn8rT!)NK*RmTl<8Wxkfo z;Ki<$&a9EB``1tRIsY0Luz$}tIP&3G z@D_;jbRN37QP64TGd27id;p5g6m)dlgJMZ$&k^T&3cwO;s^;4SX;8q9vPgjVd8Lcl zITk^B0ROq(n|eyJ=HBIb_P^)P`g+#W@v28rPKg$H_w8CV6ky=t$+r3hQ0mc ztU?Te!uFOHTp%|AxQgJ1s50%(55Gk-nStz8Bg97egLeNi>O$?al{60O6N4J4>aEvn z_km~ubdum}LcNN1S4TO%=mpZ9t_MQ3SZGA{SA&|2uEQhmIRpZhmR{KJ)3x7C72_wi zfZ!-|j;>Y_0kNDF7_%Hw9`l$Zb1o8K7?vBaG>$&W*#LU;_g6>C0M~gPB94liY$3%y ztba~D!N2*a6A-E~FaLGpcp;>lpJkuEJ!>me5UKoq0!chP1Iiy?qorzqeyOk_z#~Ak zX<|^NHur=bbY9pl&X+nGRrK1#E?U;|!4F$}2^8-fSpi|TUS7Js(+X2e&Q-OosZY;X zq>2&JbzL4re$n%vOZBDo%`tR^A%6ifrP&j1T|l4I&HM(kpS42^ghISrxo&rm!K?t z7+P#mb|(~}#ea=w@Hdu6J}JV1I-oM@2>AXOVUlb##!-fU8B)a2v&ubD^VuZMuexuF zeumkSoq0S%Y;%i?V<+HvioB*)hTMn|JhLN7P)+L*XN7v4>XrbuK?2q41qG3oE?K`{dRXfNMSs_c#My{j^7pKpUW;uwep;XVKQ zhO_YzAVY1MAeUK@_4W1p0ISQUbRfsio_9-y`@MKE^VCl$rTvQiBFZbb&w39qgr=ZY z9bkfxK9Ybv3@#YjtO;Qhg_hk@UY>B|CJF4I8(?Oa=?<2UVnbdDY~7ItPkdX~7RNEU z;bzgAfM=maGge-%B9t=GooaWj1=WH9UkR<#!wXoMv{DI#4$Ck%0=o8* zPf2JR2`>uYEkR#@hzxY&E^5HS_;LRCSRAY_2E{Tn6ag~}4 zr>SJ6*x$qs4?5{Ze0QDGUTn-+#nV*WMx@XBSMIS3eXOSRjtFp&ZK{4l!$7+vT9^_9 zDlJ6YySv$`t$>!ohIB_Ae+tVrL3MaCVzx}GilW5L zX;}FR5;?WH^GNbY|6U`+THFz@UdT*h1w(GhjU?*%2NNnUZFDA8ljSo5Ptc+})8Apx z5ClW^S;UFM-f_y01u6xhw30s_F+sy8u+L%eU<^HtH>}ZxBqVsuoAC8-N@uUx{ExZ+ zay_fXWc~SJ*W1OVR%dU`N@#O(D7MTbe7xIedO9j@I_w{;uGLY>VD@U%V)Krox@&|( z&kvh{hrL(GsT@)AEkI|u!28JMUL%AKnY;tc^8|E!rBk`MJesf6 zT85N;T}VNzbc`gZuCh;+zGsfh3xbIe+mH0{l2`|{v~$K$PqJ|d36j~5z?(W-y&HhH9!#;MAW!&noWtYRSm178 zB`ytd2*Frjinb~!_1)Tju@lO=G0!YO*Pubi#hHdFmXLowRJ2Ls0#sUmpX@=xUU#=p zLNqx-`~4q%UO<4HLM^Oh>f2RPhH_Tjf^1(J87OYoNvsW6K7rp6MJ3~>a z$Y6cHhPwZAob^z;>~?b4s3smZGbrQ{J5TXScUU)LM#zbW{vq9&`?!05qK|^vSzM?w zfa0o-)?9Xa(xsehi*qKuNqw!^m2$)s?pZ`z{aa0!_r4M-XU(P1Uk>yHK!pHAAaU4H zvzgL5$Q*Zh^c*~P&yVkr^Q`OfBVOl>+L`OGchqY+a3Z`4`rd%g#sN|2Yc!uOIQ`JA z@AxXyE^X}$um6r@EWC<&$}H~Z;dRfc-IN(oK&q|=hs-pg@4i20|L`iND zl@Z zr+?HD%Vh8y#JzAu{0l}}oEKmQ;vAjB4O~xm(H<&K{(%mYWc0ETak-xN8ABjY<~c3F z%RQoE2~6V;0?;}`0eBp~`+>gdo+y4`lpk{ISjrf?&ypVRnEWp097?{qlBH)HW@Vp; zKtyj3xMHnrHSk_7O^r^fgV({WahSn7}vXZL{g2z z7x-S3#s^s&*uP13#EW$lc)7*?JZc5mzV~M3xHE8oRAkUtRH>?dHf^jr~MZU#mi%HoIi@8@bJiATPvt!PmSkiKZNiNyvGR zmkw>pontdZ*D(PvdvkQ?Crpp@fP13~jFhVwrm}PdJ&lk?Fc9o1)RN_gSGA z04wm7923f6ri4{`x;stc{SRDzAD>xLTjy+o7N7;{nnn=#j1)P=+-h>tZ_*kaCM=0= z8VX)d(QRkgbAx1E07jRfC=ghC4w*%HzBo!>sB z-7UZpLda0{jeVxzyKZ4PT2o7~=G5$pmF5L6W|7&(U=9PS?1Q^GbDC?*76w|qBB!8W zKu--7yWi<;S++^v$3Gevb>hj>U4rdAFc#YRG0?(X8z@@FV5$vbK*X(W#qYGjj zQaf(g7t8+g7W0#^?_e37&v6Y<3R5^2Z*VEIo4j~>-1XZqemST#XXzCJ*XUGMv$c9- z^Ug&@|DJdJi|p!jPfL(~uL!?q++r-ozPG&XXP^Tn zY1#EbUgzMkXUt>)M6a3z;R2pImK6o}8$_Ct&*d&EFngMn?@MGDzXexRmzQXayv(QX zp)zIK()gTqZDrVkzdz0FjsVpj{(br&-gPj82VM@l=`8{2uR`p<-a`>987l0|Dch8A6Yw6MFSF{A(d3aJ9TG_Ym zpt@Ml((cNEqGG<%DzXEMmQpm+GyYh@Mjt^1gM?QnKGFEQYutWG!eX}j7oflhcXTjtgsts?u~B&RO!&40+)2*eNW7l4WOw=IpwI8y}h zIGuOLb?aN0{|2U%3_N@s*hQ3M2kw`pr8HB=t;OZcPvL?MjF{rI%s`u{`IvgBnlSyM5S?4GCzR&BNI* zD9FoKdcn)O3hpR(!U>HeFu^}6_^R^5IVxZ{zso=a$OCJ%y5e@b7Ztnd;n9Q}(+X12{b%9Ei41 zE-)t*=6NbnB5|Qyyd5|&GfRJZaSeiw?$?WE^0;J>F3AdJ-rmu6K1f72(Bs}rhjlLk z9#XpGZ&^hOdmx)Yn4W&aAPctP#OHxw+`RMF=`IS8bpF5|&*ED;-UbbQJ30+U)Y5R!^#LXMu81O=l#5tl#vk;5gZHTO`mrN#R45 zy-hA_pyQ_sg<5p`~zN7Q@4R}Rb+p4E_SYSJ+x@52pHun!1@HPYNCC(OM#>JU!UenQI21S4)w_Hk^0!PLb%; zp@mD_R1`d_Yo~mmN;Uq;^TcS^J7Sb6#$n@b_DTw1Lm+1tKcSd1vCM&{_7M+|4%W7i zkjH#TsgDj`uy9hy^@`+SMV9>Gmsg2#A=6aeS7fL7PVy};&PyP-^3hft5%>AE9h-A{rz_ja z7MNe;a|*qr{bCK&GPFcQ2!~>NB)%iai28!T&E-Ay<^au*OgQktLZ!tlJ73C$3pzah^^o?{g`3%ICu9HpW9MDd$B( z9JpJPe>v0Z&2Se0B8~;LN)JtGpzM&tVyDgA8OGCL{%{HXCGq<_!D4*PGIyZTMoVAY?Ic(Nk z63Xa2Y4rzf$gSfXxp=VE^6*|4zE?R}<$OiFs6aHCm?0+H?i3yjCky1F93A%;*{Ccx z@7waU7ZB@e5%D-%B`CGuEV0XbCbt_4s)dn|5FJn)jABaX1rZ52VvZv?qh?@cn;rjn zxVWUxt>ZE~mQy4pzhiA$){C0nUkRoNZ+u+R%dmfpi@ocb?g&`cn+um>;rGs%I4?p- z1L_;Egt-IhmGA^(4~2M)HjLKBFXQc1@4LMj>=?sxF zf6`Nsb@hf~nRkS);0`|<)P(zw6d#3Sj|}-FdCmR{PNH^4s3jd>#^3b2o$PgA)U4}; z01WCw{_l^szW5$}0eCR1c3xt$3uEg6f)lPaN3S7mJ5V+KqX3BE1qq{uE}z|-`aomv zxY6YJvJZG!NSGF6(Eq*HO(0u$Pfbu|xt@A_Ulz+><`#As9Pez79yEtvdrW8qNa4rp zfszf=5t3X=($nH=?u0%-&+1I{6B1oHOOXA&YqF^v4B2Gp(8{zA25(iH=+KT);ED5T(YnuP$Vqi zdJ0-|!*Q`7kxW3i2YF#^Y;3#9y36`}ggF3b7#R_^VhM?rO)b1njfeCO?~Nbo90Tdq zXppPZKTC8MwCz96k;f(H;Qy7KlV1l!M7+ISeajG$-5#>Y>A zg?RVhzo9#5k+XyJF2Qdqr?0Kmg1j{=q$he-=mdh*pz&)5RB|$J4u`Z58z=4VJ2;%_ z&_T1+@GdtO|7=BG25K|Dt*D>|BGWNU>61<(y!`x((CPvq#n*0-aOd9%ymOxv+95!8 zQOIEi!wJM2fj~1ol)Hn(U(aR?^fhhx>9uT5R}bX`Ai308kTfKRvWJj_<=OUq4yvLy zKy&yxBsLBG0%Xpbwz?#_|BfECg2facH2WUQLGnsxO9P<>K_*rCKNkD5(}E_Ah?6`t z+rT@o*nnh8p`0nCPzbe+)k~s&T1f;N#%Do;1z-d7w~g$W<@ozWFwn^qYBv_(Qi)3{bMsZ%eGh`}h%ecK4lmePDgP$KofaiSflCTEP0bO0E3*&j020jXksWw1@(Rr5W2C8ce zD8~KfjFOTc;PG-1v_L!;5?{3eSAhOo`t1}2@OM4-^s=(D7GNL*_!;KX4fm{BDDbJE zX9-A@mzU#55ZMDHLY6aE#WLTHfZi~TwFZJ*;0CKQAVDicw=b*{J*8&#_c^?*mNe1;BoO<&j3`+)zD>R&lS41TH z$4gOHE(pZ2Gfo8(Dz7Ga4UWOg#tCG&A1=Hnh#(@e9!zla*$}~Hdk9Wb5}4n{1-D!M z86E}1pkE#?CTygu z%Pvb{{y~%9bx3jD43%0Q*+{5jD}pi^O1 zt6$UC`CK@cj(qea)Zd^Q^!35ZthObq=DT8N#3kt-oR9l{VY#+=9u)<*Xm;I=O zXl_vOwJ5(wM_Qb9lLNkwZwz$O0)8N+tH+|(`g_R}7&(_AI6s1k!Hkx$WbFpT#tQK~ zdMs{G(qCU(dN~C$KyQyd^QDG#FYK{Rmld!g87Uj49BsecgN(4Qkuxcj+5CIFkX*h1 z+`6wcfr*)d^bd72w%DBe;Zo2wK(`fr<6g;`_p=6yd(&L;^0-iEUQ}?<{eR5g2k?BV zAx`m^T2CQhG^B3ege|PCH3JP~Mx{vvpM*sCwjSv$p zN#d{Ez6VOqsYBDNK)iM-;MAb-{@07iBF>5@U-bHoM4!Tt2j{Xr`UnRA0)S+hn<4S) z;#>ucr7}3%aDaKx{Q_>ix$!~G`wF;s0XsF+U7`Eu&+Oo|c~jye+=7dNgmg_%I|=5u zc;`-p_JJEXAoKHg)o@!u#uxRZZsyb~_Q^(@<}O@{yfYOXsi0s*BAuZF{GCA5agzA; zA88d8_fC{otB-6U3HHSrI^Sb^(4%4LdZ!wa9&pG7sHmy!haM!DIyq^rGNEUv!Lr=C z!+A@uu)!auUqXzM9@|RUo4E1R9S=HXz94e!fFS^RF}F*QXs?4MUIG8q!=~Y}-CLCl zDo^Xc5hPv~2R8$~4N%K$-I2C75B6Spj)mop(D4UkJa_qd$NjdIDp6f z&T2dII0}f5UIUZ50ObA~O0alJ-rHvHWdP+Rj}!&(^*FuI)id_&%wz;7vSAfGKmls| z?PB48yZX*xE$~vO%B9D9KI?MvZ~#f(JKX=S#61Z)K0tVQ3bHGCxc8s-gaPiiJDE(r(%zowDfwg1lzw3>0+<0`>;I#8eIyU>N0r7@b)IDPjB;r%7V@yo^4_YR`7 zMXn(&1rBvLxdh?qz??EdU0nvTv{AR*AF#iRWixR8?&uRul8XBiBqd00`N_#s;Z0p z*#NICuL$-9CKag`8(%y&(2@Pmg>Ww)EU8DmDqRF-n;(#&uVWfH!C;2!DirX`vSlMo zY+G)E3PUy)FCAJsIvAM{m9Q{^k$K zJkP!7-sjwN&pppMpU(oCE?;}C!E9Q;;8}<9r2Gg&K+yJ<(Aom&!lpxp)TM`SkmwXD z?=a&PimUSwklaT4^^&M4N!R?z=4CWnuXEujM~#bZLB}5ZEU8(Y+^jDHU?KdLM?%`% zH-AYQj$}_#Xc*O<(QWSA;|R>eGF3$N!pEI$9rU6jgy)G1a-ZX+p12Zpbc>Y3or&k zyT*pvpS?&PBrYuCFZ(i3ZPcC}1dS^0^A5HQGnTIubzTzA=Ymb%uFSEEX54(oV^_ZF z1P}K_oIzfD&otn~PhAq*O*?jnyGbAdC!|p~62N%fDsa{7S*QJFE7Cdj>^sFR^)+-J zZpiZh%Y-k|C|IVylv=_xc^u^!B}qeIhjS@&pP+RR%}84JG~*JtJ@ z;XR@f!}PCGMP;0Q5K=!7l{{@<_*^cz`)OFs$5fKtXaTvjB?G3VXoIl`q%PUFaY>Jk zRx+VklCr#vg3aJClxoQLBYKX2)j5pg>;wN#Xm7<%e??f7M-8_;olE9T_nYByvAUU- zf-rX|D=zdsHz4cGIrAhvO)H0Zs9?vVbsx8}VhbGlOKW?_9_9%nbtL$6InfKZ2`HB?Y-Cl+{uVlZr~XosC+z=BfsXk~VQHBCn+u{j|HmQab*Y$Rk>q4qdF{6G;PZOim1nnc3Y z=1RPDCZYm`P;afe`jSFye9L+*A0HQsT`2i3?}~eZ|4d-1Oiavk zGgv4=OhqlO-?@2{6a*1~%lgZ$QVugJZj$@_*+tL{xMZPaQ3i|C)jcOcfLDHN_fz$9 z2;IaZ10AN5lUPO<+5#2!41$czgN5y@nHY}ckN{B{dBG#T{ z;h`xKcCBUB;kH_4oP*ZA!D}Fu?Uqr5{(?o6e!8EQ0jl&}c(m#%?;L8{jQgKAReRmJ z*W+WFuj~CB&bxLinq({8GL5?qk??1)xm0K1RC%#1Q>mSP!a3tR!}S!eCbPn0LPtyP znJ;f0aeGUEpvlqlh2O?5(2vu+`s>n)>?N;Rya~k>^{LuYQJYaHJ}DMndC+EB zc3hu-ZC&ihNiv>OPm7Jokp^>BaZA=ecEmhiu#mGKmKF&`DwUJ%VLao2MoW~R*!a;2 z%iKFTjnd*ZC&*Yq5)gbj!?)#3}KNWf>4U8E$_& zU%@Swc%gj!j{X%^#rl!ps@G!E(z6Zkj89MT-v~<)l_8i1zw}(6zLZ_#=gp{B`i4S* zf(I>H3`bIky?=eLO5A>2m;FlH5TGrzZr%A@@%)7Lq%Y3QD9x1RUneNbw35=$8<|7$ zuDVo4R3WPS>Z4CD!0T|<2amj)rM=fUys%qFE%7f?F})()u3Ie!{kY>WZ1 zl&is)6KSrQ8Cj%mLUiLC90uL-Q4mLgX_adpKU^ONoV1clXsv+8`XeAQnM?@6*6_z( z#zJ0}KBojI#HDr1wXz7Wx)nWV$8lD||4ojAVX>1uNEb%B z@I8M&B>a@-B!&ajPyh9|+yaeGNBje;BBiS|`$t4OL=vJPZn;&fygJs)DD2Sh-S=jP z&22Jus-oz##=7DOl#qXn6{?Y;I@p@$BTS<&CC4XqGIc&}0Jp(}&JE3d1&3cg09&P- z0OQdH&yogS*COPh#I`NsGSCgOgtWsEly=*eK!pGp%i?-8C7AUriRI0_f*c*rbit)$ zv#wjKam4Eyvt8d3nb?{QQ4o5N2sjT2fSB^H%}nas3Ed@b`Fp}I{??F;6*`^RZn>J3uzwLZ=yE7|0csGgQ0Lkp&fE_{% zs!qg$ZoH*@bQ&b@K1@<7*wdwQ$hBFv^V_fkAwxtj2>D~5Co7ID zh)tgoA-5)};}M^_%^DpDeA8ZFs-WUQ3?R1v=VE2eTJ!L<7d{l$B*~w@qO@+uJ-%vV zbKDP5p@7s?z-XWb#U#+zAz{u4wdbQBnGoP)$4FK-pEizxB>IGq$#hJVqAuXgO3J7x zF4p;XT0f_b!Uj*-ptlJ^nymm%^ZSwG=bA2*J%ekjgz)m7@SMSC=%Q5FfINW)Nz}jQ znBu7=JUWlZi#-FqKy=Q=NT2@qB_LQ2r0_;~i62$}p>lzPj#GLd*x$hAY;PcuGWn~_ z`>&}xUX#ZOIA?gdNqK22eeUcInf|M0_pA?7yxuc@};Cgm%*;Zc!5dHN`kpUhYy|2Fmu`Pn`;5yC?b3&5Jm>*K(D^MIYs3`>Nz6b(T9iRu)E_wwd z1`w9%1rA;}Jtknkw@uT-$7{lrGVU%xFF!O%wzfL`oIsG$YJW8m@NPjBCZv%BHkNU( zYam_+ilZ*~hEDBneFwu)bzR(BdnPLeB6r}Oz2jv*MxoND1R=I_=f>@Z8>BXqtW=so z3O;K7Auob(3Z6ryOy$xhP%#Q{%2`1ob9XM~&iKmy=GzevAw}Ip69|NBpyN*kCT(T} zY)}B03B02;l&$*+1Udod8n>eoJL6|4Kv^8U2i`Jv0vSG+SOjO4N!zR;hH?io zBQ)aXt9-UrbFIrfmg}H+EDMN%)LSe1tYxysmxtYvOa=4u1H=pk9F-}8NrxS@&mjNu?K=qP1%Bo@{_%JyCCod zhBpD@GbQpw2;A}N))x@R1fku7nd37qydbTNY5E!sLckytY7Oo!D1KuG;+_yk7KoHW zxzL~~=#3W`60}tmUT+6Mf*T$?o9?{?;kMnybmczD2ICt`_3Ki&nCVXVjnxEnquALr{El z7_hdEFOStHgoxM9XsyP>QL6W#F{-kFt;2?rYJ78tOt#pkNyl&70GKY09gVE2>r^DGeOL)uC#!x zz$p*UncW{v1(RT|zl1rz2h{a0i3dt`DG2bLiX1ZDpR%3ej)Jz^L_zT|pY zRn4{j4n1=R?J|cDUKzlY%|#n)WBn*UOlIc}Q2J%>)`bHegzcRaz5AE>0M`weh`*#7 zoGhwR5&s@QC$7{@$~5C8CpH8Y2bhl?C;DuI$yu|wrXi)Q6xX?mX;g&T&g zC3{trNJQHrE7_L>Zs13WOM@N%nhZD<&vq_tzKh_G*?lv46rvDne^=MzwkL#9pBZpvRCD zN7M0h)-dM^H*m!HD zqYc&?A+z{rO?6WXm!rKB4wf-v#HW$4Dz)%% zu3t9d?9qb-FtJ5ba7FxUj1~doszm5pO*pdVLT)gKr+2mDrr$_Wg%2+q&c?> zN1Rn3e0h?2hpmr7?abj>uRf?s9|&8FC6rnRYN+vCkz%(~3_Vz>2^j2*yAeV_<@?u} z%`l}Chjq4v#8W;xd=YRhp|5dXkO&d>WtHw8o;INWfvgvbfQlaGfL0H+5JmK zMq2+(JU0aeS!Jjw_TT*+!A!z1tQWXy&e&B|a->{C!SSJHG4;5*x%weJ00*d+C}Z^Y z6tAdsj?~m8S!JD#`cig%b#=X+r-JjJJr0>LIPmI%%7U!JpUCxD80DJvhZY^nsX9+E5u zNz!5o%`xDbS;6i>z#7PxyZ~;6?C>qONLJi3Um0o^GlrVZ$^6*-l;P0i z{G;UHYRLLl|7)!7>oi}eTFQOssKqoeC`6ZOet^lBQ+5LLzZ?G_Cq`7=?GfR*scC+5 zvu5SRjc3y40JP-)xh}d9zg(C4QCkS=?U^(a6}ZYq1%etgk4VY`DhHT*=*_keNUo z0O~d8p`dzxF3D<&9!Mu z`{~yN+G%xpfEW3nF(V@(31oc}TRZJik>Qq!CHIKHGvv^6LCYl-7qy?`QpRj#Gto~y zJzR3K?L4hW4i8G-izMIpRr*erpzHlC37g16R;@o4;&lLfGCKkyD!O^H6RxLJeuLpW zfv(CBleOEOoI8}b8-+YHzZ1Y+S11+#U`ctf!$e@P^ux6$jRr3852Ol2 z>^0K?epQFK%q<{rF|?tkVWxYdL$JvjDPxx&Z|fqVfa9Ny*aSkWQmnUb+yTKexceJo zmGI4`gU1c@x!UCEZUp(-6LJAl37@RfY0PA~7Ct2EMhrYkpQh@5jtmc#zKX`*In!65 z%cFngtn-Ya@)daWINcTcqw-l28@!y(NpfK@dd@(llkB9#RP?y7PQJF-_x|ylAYhUFi9m{4^Bwa^fi*@YX z>k-?MgU|D-2tA|fIDkGgGgLK<{WI?Hs4+{U@UvU5TdpX!I2okIPQIz30-rL0E4i6~%*oFBoC5Ct1wPLi2-%3oEn(tCfm zfD|5syyu8&$1|p$$=|EV`LNf|^{pvW*O!`;Y3iN~+wlkH2mP=jO5VGZdCJln`sfD5^|7?Q`%rc4 zj>jDB#Xo9t5mj_vGVPAv&)WRQtcg3T>KL0yBaDwzo3~-&&n_Rjj^dlRjUIYGWz8C| zx8*(NyxKWn5UR)EM~TQUk3^I&XISfmTfds#ds`Y3RhP2rN?b0XPZK`Ev{~-Pk~_&| z?(k;WsMbJ#;p$4jNg(aNkFbDW)5?~xBCK%G-4!W~MqHT8Yt+VFgMdeUd(^or?@X5F zCg-Nee$TO}ASy%0cU>nabbR95M|v>HH`(yGe5-zj-A(rww_XhkOz)?(HMJ+LE2R+Q zlE_D!*dR6agj3zLDq7->M{Y?muTLqeRW9XiXBBPeAtd zVaAjuX%%CYD5?m1APVMlv}-VMX6p1@mU;1;wTat3JznCv5+N~Je4MoLOEl$fHG_#J zV77Xh5rD_R;qh}Xai4P8^A+BVe`Z!3<&<2PGW)@M=YwWZ+}fx94MSeTPZE~97gHXA z6=}BsfBF8;g9B@Cupoc`{zhW=w1Pr>6EhigT8bDD5?rww0jc&)c04Y~Lcl3s#E!7# z-1+rh;Td2tCYTR2My1&!Xh@6p6sM7 z#%uF;PYbw391YA=t&dd@V~MY%ia7=bUc(MO+)r#1KFYr3X~sqKVPdH*>=$y;X`4JCm^h!5~`8}ax7d- zkVnFFT=9Wj_qj+K;AUoxY@<#ch#20VY`OSw! zH|8$(2i?J-)OP%69>Yf;y9)O7AoVXSH2c<7ag~GlVzaR$n`iZ*~20xxrZ#6>^w5+;JFqd2prm(m=A_?$?V10*gYW+Uk`JSRT+R zMK<`LjE9FLwvy89c(twT#f{E@>2rA;X0;ANYci4!MV3eA4sUPXzhCiZ<&ok;b`nt$ z1v0RJTk>2b+($`5Su|5bm~E0mn;ri+688q>G9y_}U#FW=_i#va@tY`YG8975r=kS3 zc8gxDzq+Ak)~aHWOk{n&{5``o&h$yeQ&DXrl7s1}--1C!Q!j>yy9bb_mR_d4De)Cw z*%P0$Y;Qz^eG886vrJ?^zWMGIYV&RGsf22R@!q@Q%L}>*Re8&IxqQ@%!~Xru+P^r4 zj+9pk%tKhOFUSJ1ns|j(xcDE;C%kd)e6+|JOGqi!*N*!;Sn0$VgmF@ZE|2#B4EG@R z-bN6ur zC?5u-8A5$P^mve8v`?giYhb>;kg6a`7}F}|h13Tn2oWx$L~#N%NrE-URf$#=oGO*7 z#CGz)g;MB&UXWLgw-OC6v?a8)9V#CcRC6eWN3DiTewd z7?i)${1@wittL)eNH~5#0=|%Oz!Xfriv&}OAc06as7w+oK_wr{5FvP7Ag?8 z)A>N_x6if0wZt{qHTE^=mM~EM2eSYk7>WtOr%h9OSw#PiX$~erAA_eB!6eOZOqwXG zEAy0TpScdd0v{uSo zUG=_yY(?}cii0tcF3%>HGNQBrF>&X-{a>S_`gUh87u@ESG*&*7~UO!AbX{hM8t+fmH>0 zK}NB5zILJ4i_->j{Xx}1gV@5ig>{O1@3h6SKah?1SnAFQ&G^lD&IAZ4%*$te$}Z3^ z@{?=P@s*Q$ZBif;)2$MV75j$VNl23aWAzrK@F+)t@f6-PK|aAwWUc7TkVDw$H+pSum07z%jwqsXv64(0ve>B z0mek-SmY0_@@mD6lA+J#*>*YQn(l@Bg7X?)E~54=ye+m~g{SvVEibb#C2wpm%})$C zc}btj+|P>{=_BR-!3E_`AX6oGp@<>PAd{h3C+8y<OQ zwf9*JvG~f1pT5hv#eHF6g&?1vn_eSaF zjqAU;zMA^kr(&pOw3%?qc(-u3RDV<@ATd=4q*=kvv;$AvJt(zXsMl-HWP|?D^5|l7XT9lX{XFjBgA>++oimN&_%n`ke@a8r1ac)BPNGes zFCw2sp%g>}HH<}RpT4hGSx-xKuy?Qq3rn%kCep6aDoV0RF@CVE{x#iET|eX}&|?~B zq40_nY7%aX?M-Ay+$wP0r8_rw(D2Clz08zsS;S^k{&V)2vgm8PH9|GYQ`n4%Ht{@u z9%VA=8;WDD3644jb!vWkJF~e|k3A0~A8W7}Ez<`fBaiGq&3ni939<-|2~h+5nQbn& zAMedP;3j^jUDTXVePBVr_n5DkeT$Vj=FK-U1q3tdCH3;9le>e#QM2c)N3ajBALbve zDA|`U`j1uP$37JYgE=IMmr{RdXtMhx6Q|Vi@0oaMUIw0w#7xC>%S$3u)*TZwSoFpk zQY;p?T0jN1I# zEo=Y5+V5}Bp?snJu?W|vP zEi^Q>f7eFnxLn9y(R}x#oKLALZklTF7)Hz?M%IOOn(M|=ir%iKoY-fz)Ou2w=ycSb z&yv`+sR~uQpm2WTOyhWJS!nGjtYl@n`>~OvES4V>Tg-i|wq7ZZZ}M!i-#uIy{jA|` z|7(Fm9Miv1hfH%?*GyZj5x1VhdvWxJ>#E5QajUEINl#DnW-nkfpqVMRpnBqCU7bQ< z`4{T)v~gT&c@dABgvAdN_cO!#WxPy&898XW{r<-BqHRu)z$t%)<=CQ=E7_ze!{YV5 zL8arW^$)}n(aq0VYd1U&4&(UF>k0_#m~r0m3TQdLTv0u={JGUUnrH4b^sqj9)*$P( z=-Q>Qc6r7P%;0XQ`$$Yu*D2T3v!iIN|gVHx!{K_yS zkP|p?flJCYY(rVuZ@&xkAIISkR`#-4SgQyLUE=J~91??kcBrVREXk;D)MJUgX#&o0 z30tnyRdK*ed;6vvl=H}wa)RsVTeP}Fg2dx(J^<{3A(pC|E}F09g-q;i*^Nx?jm_9S zY#r_}FG$2g2>57g=3)f%u(h#s7V;3K`zMDG@cHg%4m#LBSzN3|=`>#}!KCb+%wW&h zdD%JX#IRs6n23`pLP$kg=3m8uZ=!S-E-ns2931ZM?(FV7?DkIP99)8ef*hRO9NgS& zKn^x%PdgVQ4>mhz`oER@yB=vXXA>t&2Nz3wJJ?;lM#lE8E~0dFcMbj5-`{?kd075; zOLorx8Wu1>j=K~NE_P0i|5Gs+OT_=B*j>usV*iZmZ*wAdl?f?XdYIX0Nn6^Q**ODU z6XW9J5&5T?|1IUeJNh3bHUGOLFVD08EcqWP|55U;Cqjx&mS(^t-A#oUmk7uI_S?Vm zi*Ve{(|^p{-$nW7S724dutYfiYlX$IDBl=vfb_S5qGg=;?}J~zooIqpS6z# z6O9%I2?@aK2m58pNI4d?l^x8Y;cC{4IL@ zW12pF$pf21Fh zSuDmt=dkmsJ_Ccs=f}z3EI*e$5BEvYQKrrRmN3+9LguYxFG4S?@C zywHe&m(Hc*%6H2Gcf>zXK%{XP@JXX76M)U&@FV@OrZTZ05UaXIxo)L0ToSgNHL&2d z!!|lHf}dMa@&@Yh9JFRo_Wr#X_nTRVCvV_bO-U%4-&u!H~1DokM z9hTrc9tVa}?c-isEAirdy&_jmDIsuueE0+gHn}M$2ZGj)TX z4f0$@22p4gC}Rc&S%&%?^)atk_E7T-iyRNQT7T`mvaO$Y%NiZMJl)y5<)Ql}eG1br z5PJ|#sn9@~*17FzJ74Y9FT%CuHPW7H z8DkD=Y^cTKSrCCk4kMcwq!0=Vd8RU1Ko|JMZx7=Kzc{Xtk3&-FADubBF&q>a+>M5NSk1lbO}$zo)VPER1LKslbTdKD; zDA9r-Fcj@Oaf@hoZtvAZ*)m~sN~kX}__-8l?QJv3UU`XlEna)HV}HuyNzdbn{@EB* zi*SI*z94&a3x2bC8^&a`rDwX@+;b;>A zrmI#6_*nL@4!(voCr@7-Z#=4dl3A6b{tOMR&zlggmWY&I+8!@m{~G$BBOA5QXER#x znh(c>2_+*#@oilvWYu_0(`iALkT&u5w8CF6`uO}CiNVycf#1c)!M84=+HV*5iP82S zWxk3OE=i#V>hvnBN=b&obn5M%6)L{R`S}!u1G8_vC=f-h?>7NB@K>{%*Z!O!#cf1R zjmHE0s~9{v$VJz^w|Fmm;;5?GE8Q173yoYtI8V1md*-}REnzuzwdL{T&-#5%OAQ7o z7#b`&aLxL>H|)|@Tbw=29@o?J456aKSWm`fP&_;aRIHMs=|$?Fw9TZte$WJYv+FgE z#hqbN1uvs!>xY}q7rYVERc2vY9JorY%nrxpdQIE<%rda8m!T}eLP7%_!5G+%+01)%1Gm6|;K7Hop-xY7kT>enu@Z382~x^TmHseniih|Ug$h|#iVn8L5Q{KXhrqRX z6Y1_aD(m#bEJ5e)IsZR5XUD;~VirKOHCgbx+H0JoW$#5fgqFooi&`!C|M5M(+^Lu~ z{P5oQ49Tbn-47+v{~R)rqEMnldms*x{O-*r`UATk1H8~z=8jr8lX!>g@wN6y#mv{{ zTht@OYH#8hsvy&jd+(9)uP^roVx*Nj#v&TtA_|#AoMF* z&N8;9s|%6h{;h#sZ#fL?`eKo=)r%ov)YP=T0Pm4b^{VK6%L6vl)j6u77-P#TM^_{- z;asW5!;_hZFL8S++O(s`atVlRh?C6`x0`5#-G!D}Jl`xNDWbb+zwtY9R}2=#vmH|g zF_U`4>xWLIu2jZd`Mom~K~RafvIJ(cV~1ZX;fE_dvzImsQlbYwthH?nYRrC44TJE9#<@Ch-otS*T+vE4M_m$ZZ-!P~>;J8bxIw|Ssz*WZl z)s!dX?YX_*aVBEuonRf?&tRAHr`Zp;u`i7vYjGdwCT7>QFgL`&q5N#E9ZkYfC+*rp<*qqOQy?K9UzS-} zvHRnL)Y}7rRib0lj2)N7SZPNV&*ezwhk2$c8PKVhlI<8^tpxXzd*4G&+Iy(%eW(`t z9##lbcMou;Y}0dkpV{mr1U6tbYx)Ozq>EOzerqJ&F*;r!tRAB98GbJuM7t$aTP;?H z7$mPY`%c`%VS9D9=k{s;u!p8Tznl7*d|KJ!FV!F|71`foZT2Ij>A_roUM}Pnsru8X zENl#AS+h}(pTL6~x6fH`*}Qct8E8=t6?~Xcrf1z0_L_y@cZ9$q1^mv#l%SPRO~1z_ zE@>$8G!J(mf2Umj$f(XGv($0?J*QF7BN+%GcN41h$|fZ7%_HtSQ97P*{Tq$XE=NQ6 z-9DN^B>RNXyS2R%=B(C0X!pB!UCs2wrIi4{F)=ZL5JgEN=HGxQB{?IPlH#=z$aGQ$ zlFFNA4kNC|EBw~P77m1}mggfH-V`50;Xo{Zj>ziaxQu4-RA}7qFJVS4UQX2O^0m03 zq2&_&%J053f81O4fOLyl4bLzv?EKLXxd`uyQE^ha#$y!&%)kM<1cu=klRUFr&&rIT z9`BLQ%GMY;phr=JnnX$YJ0s0r9FVFwc#;US-mur7vDSV1CEwAL05o*@J8-z@lnR45 z1;G9Lym9uEGNz!AgZpMEYnO&R{IvqMPGRI=#AR6`+Tf|j0O26Dqd$QKLW9SX-~@!G#54L3d{0T+EyT#5c2qzJ%c zVFv>K@`BE({2eM&A_w98EM zwmv<11g6G^H%xxgVfH+aXehx72jRoDb#$(2s9hBUqA$;@C6a}TIwoHy)o@6 z3DcnuNUDOOXJ{cpp&-W_fppH-A+ATi>To|i#tamp3uqRFnsFcfDwbuG+w=DY_h0CsW8m-_ z{JEU0Q2Q<^=>Jj@HVn-faIAiSQA+Uj^-=bQaA}=}6pS5J_J>-~sVl5z*#*1^KtZ*g zrQ4gUJ!65MbQVkiP_;MMryE2p>2vH&SNFh<}^h0mG#l6@0^@=kG-ExCb+&YPnCc@Su?(eO>YEU$}!D{uke+xvzS}Z;ft$_lRpB zn_P4DC-^GOOTyT|9?Q2Uh2qcJ09hjl`Dn#<5P}>j!l#!>r@7gbbu*=~&%eW4^ancz ze}qz*^L8-yzrT9>v@*Q35q0teaun2FJuH^lV5_>&w+qB_w;Pxkomoj#5G$v(ewWr> z4Bd|=cT`D#Y_l_)o!6@Kt5?yhqFA{L8}|dPtc~A!3==<^2wzc96cbwaO>QqyD;)p; z*k+!6i4+t9?BIe)1Ao0E>J#=NCj;o`7As(fujj>!9jUFko_a7>xh$seTwEZ;w?->*QJ=JNaC7r%h;1-P?`e+7UtuiuOL`kX4Bj!6V8aXg)In)A#6 zHMmBVct;L)j5!_;E`0lB*OcL#2*vCbUWj>li+{klXz8VXpK9~&j^wx3|Gd$3Uif|9 zeKBi&fi)fjGBZ2N)`2Jfnbp*7>nEesi48O{;dSktBj#2YdX`tejK#n}%2$|@Vyj>k zhU`64VhyMJI)n0NKhXGjteN6Y`_JqUWs{_O$KfE1&AqA0P6B1^pbnkK<}fspIAs`L5)+33Us@qq1l zn9Nr6SGok5Rv`9UL%mw9C)qh<59Kg2IP4bsVv71doYC^q4Ec<~6Lfk%W?O#NR$Qi7 zhy-&QeGQSOxcF4RV1*dYwxyw*`@_xH*Yu|;OQuyemfTD#a-2Jszi}KGFC9R_=*I+o zf$CtTW?nf)>YXu;mE06jnNwdb@PvC}lUsi;Ke!@urhdHDI5-ySzccZvT3?p(8=>MD z_J|RI=|~3OC=TBrg1wf!yw190AKjIN7iqoWTZw+sgNeG#86xxughN?nDs5l~Yelm$ zfTgsj_9v21yj7V@iW&i>%!|D>IvXE%i>~QLH&>>s%?APA^6-74c_GHCY+a>-K-QWt z!3E}8$bMJFjep$o4(Re`#=3$`@=NGltn)}uT`M9XMv@i7=3)kvu-?H0+T&cGDf8L~z;Dv1C2@vD4MIk)zl-8WE2l{k)Ctv$pkGKclumU8fT|_S0@g#L~=()}|RN zz77NzWlr+rk^MX|+!6HACWJx?7uVU>DUsK*!=Ih$^i8P@9fF#re$(Dv8W9R%Mad%+ zh=z#?bsbU3R+lZ69cafu2nO0}`v~n*=@q#SmNXQ=k1bz2otDe4=o|@0Fbtkh=LY60 z4Qxsz;gMEDjY~g-By7E9)3Ncszz%f0zz*t{PflbxO(N|$GNfaoz{Nx?b}>jd4e1+sfSq0K{lUegC$2V6oapTK3RVA} zY>&&?3!sEM`r!hU$ec}%*5A3Y(Qn77;f1#*pz00J6d-eY*G&G%B8cLFe_UK#B>B z6XFKh>|*b!&qi*1-TF^@-yxZU;U{=1E2(5;!7W+B?&`69kEtxOpL#R%$Xv@WM!)mW ztkA6d`UE>F_-l=ZJf(+{5yCVK-Dv4`Zwx{{bn`d0Gc^;oxm5_Km0lrE3dYBv>pHu6 zt4VN@L#RBbB6m;>lg!VQ&|*;Tb7flIh^LQ7_CH94>Cava+mo)TsPi5Mz_%LI->OP` zDkj;l)@9oqUol)T$IoUybL}T`&R-UQ1a@P{ISK-cn%=E-92%1#k(Tg=ALhLHp|qE! zYklDNYH-LLm)O3$re?ySdA4VF5+#o)!cDjEW*mWdK7rPpi)z@&rg+OiSvTl+s(?@w zISkozs1_!!@(Ia64sDL)Rd`-nj2=g2!nk2b85=}1U0@&bCE6RTrhqQ;bhq7^~MK}xTiA1N9w6U z>&iu`Z#mPjW3@<|31=jZVVpse+b1ee?&S4|e)%^HJ77Q)5|JLAhD_2&fF5wV<&sFq zfKCg4nNCzWY~p6f8^vjYMT@%wE~7aVy+D#xqRfs~`zGenT;`F2>EjK`rUd083`ODi zHoT5X4C}JJ_c>(iF|f@-es5x6-dh*$Mfx2e+bp8|-6lENMii(8%w9ZCIp;l!MK)yH zIR8mrrAP`6;pC@F6QFO9Fl4(ZW?FpM{ROwTG}*g}cJ3l{dPK+}_B7CY=sR2;8zZ(<;UI=<1jLr?39ifioA}Z+T+Qzdm(!hPoZW+KEEGa!YlIyzr;hl0l`*S*E>W;jSLd$4L5KF==ym zYb9oSRlOeG?&C*@J%v8>sdV6+qBq87`t4N=EJu`PNP^{kqh8LcSP?o@v#dSo>Ufg* zIfcu>7Nly(ev7%SP^7i9Bv4^#PAzsIAN_RSaIzwDpfOHw&_I$C58X7-2~K&(%husg zv^Vs5q(sqVcsx`o;IBGWrjf4qUo_%4=4|3IxgJCb-d`@3MO=sBvxh{18>M~627}R! zKZ+*cN1w!4aUB|R=Y7IU(^-)U)M5#*@%Zr>0U9~vlsu$DjxfzU?0fT8#SdSOe$o4U z{}b!%No)2sPwDIz$Gp=YW)q#-0~D!pJiUk()z_`a$D#lyRzD*(rOivgsfukFZAg|v z)UJ|w%4T15`b3#P(O)9yHif#r!&3w2&fEU@mdXw-FVC>vg}{yRD={8B0kG1^h#)|sHkD8I=JQCb?AME1)4v#~dd({)@s%N86_e0PRIi+5`9ABjn z^ao@_+m?sD2@)c)maM@XF5wcyRRadR-`2?HO&qofG&v2|;+;m2;nZHe+p?-8(dFn% z{f6kCicMiCPMfaMb0nF!DCuDu?FTpuO~2f73qAKl_dAC?5K9U@4pGa3YrnC}KtO;- zNJMOJ!aaIv>fBR;{nN1?`Jqp=(#NCJAtSZSUa^agRCKR0EohkN5Dp)R!$<3C6ED8t zaE-&7rK{)m(?5O(~%!;8OEFi=9(d#I7_otmH1(|skX-j01 zg385s`I|7-w4F_#ngQ-j(D^gdE($=MlF=1$`2LRbo^eU1PtcJ`lvJPY%f|hq!+wh+ z@5QU^n`l1+lqe*kkQCA>7lk4HY`H{3#=M-1Vk5g67n{c#sWQDP8oOK2hb}0e$v4=K z&E#@sFJYq`RKzITy4IvFoV%DNfkEm3Lk%cN{YBDRrO9OEnLM;aGAI^HUPit6^}TKH ziS4P;`$%II8zy9>dbb7g8RVleeS(bJ=&B=&guH;O3*SWwiq|$7Ctsr2+Y?~iofWUz z!kU*M#B3~EUcC113yK-MeHr#YW89kF;98T8jqG|gj>_EBaY6GF=XpKJN5~D1vI;)^ z4CG~T<%oCZ?yL#R(tb<@NOl(Q+{_M3_uv9aYnLYgx*=f0n;w zo1m)u9TIi0nl*3$jw;7xM9bfigjGNfK*`M;r~Ae8S{#xvYQgxg?APisul>Lz)*E`^(0`ob@@h5RgQ=i_5yWJ8dTzB`GT}NY>N|z@E|| zbKEn&N{)WU-WcaSYVTbxikmK9#T@+!VtwCJwewW{Pq4&L`p>?-3;Dt{Y#n)rU z-p?ptA~rc6QortEV_48C%32wz+ibzxd;;#ukJh1#Fe6Jl2fUjZc&&}P2GGoNP_)!o zM`Q=Zkpe6X?;o1Vpgeu?=Fa*E2#3!xXodNe#!KcPp{79tn=s|d$mzG=LcbvvK&g7V z5Ql>$xLh11W@VU?uIYI752zu+6ii^Hs8xFl0F0rZPO=5E6ep8yx2H3aRao9c&t*`@ zQ6O|49PZE`6BP#UC+&*nC6|OCobk>lgc~$Yje)PELBC?YD52L=KMF1N*N?Ea4Aw^r zTESobrRR4LOp{KZihdjsH>iyDQZfe$6*&C~`UG`<;|mI`tK++hxgE6kGeM7#RW3gD ziC?#z@CMG%&~Zts00cE{{{9)Ib2-DE@_`4QmRhQByZOXeW5rf_?o;u$EphQNSdM-~ zRqL<%jR!$X)WVxmEB?D3cnJU|S!X^>?M-e;FZ`h@1Wt@^*kXfPXh}MMx#T(>b37_nSfT1Z<%=n4b-IvA#b)6{kbu4sRvxe$2@2g?xTT? z@ebDyesx+_@rwYv-g!X}8x@H~1SXS)2UhcVycx?cpv6;JXi3%@RZ{Kv+cPEYJDujr zwq~QC=19FUuKK;ok$&T>{tQmfIqntYt1uG(b%Xt4tJqahV+b4%0^{oQ#@kf01VN@u zx+^)y=|nCp;?7@>DvICK#QPQF(Ed<@Xznn&ZL+1(b9kx8c}5P^MGz>|I4qBS_`&Yv z0Vq=gZxlt%W|cW`jRF9zX#pR;K*FI9Yf`r9Zem7_+Ld3Fr>Q=$5-E);0}X{2i(0YciSt&B)JCUZsEM;9Ic7&1E-KB7+cVTl`H}Kg=XvODs4~Vr<#T@J|pN|B%shh z)jMJI!wIc>WTE79WC;8o8p7lO342ZX8KejCI>47Vod5tjw&u#c+y$}|U7FWoE}IFA zB5^4jV=fWEr1BwO(lFRPhX>RyCk(rzc&Y)erd|CS-!A)7$p>;LH;7&B^6ZSEaRH*v z{7}1+HYHq>*^n(pYwG&q_!GBt?2Wkxi$XeQ$G&)JYT<8aNw}E=$d{DgPWLlZ5iqny za-W+u)Nh+h;C)$%6E5Gu+%aZ|h^gfoh{q!}?RozyMwPa~%Trfh9%<8zXu&Qd6rn}l z90n)>(G(7v?n%Ob;>phwwq3OS2plT|3dft$$nr`)AMWfne33*s|3JyrS3u z;DY20-hyy&0@|oK1Xf`MA>Jb#qC&s_FrisiV&qDauAQ7qL8Xi&+@sZ-pJyM?kIFHK zj_gX_NWy|Z{cN7`pxpXU8Bn!{j!tGQf-pA^Q1`|)3~CRzC0*2AvC!TFVmRb60)_9*{7wK^w5bFx-Two}Y~^DM{Z^1HbMx?+lphLglt ziQjp6fWNn1Z8gpaX{L9$I5N9)Oej3OdlP6EcFy+)zX0zQ428Q| z@=CE@#ez&HW@dl~7qvtwg~tigK*`-iIa;s1tN}?E6=3rJG5l}wmNY*SGApD51cQlB z-}Egsk^Apc5I7W~>CDt>>Fw>Ei?N1{1520D?6Q8l!x%>+FDt05@d8Rj76|CY+Oo`j z-ifHH%XPc}kBEKg_Fpohi;q#e)76OiM%TKGw{MAe;G5eqtqX932jTugOH*-A4e)4* zc?a+g=;)VxN^vL!45y@u0U107WRC2h0h~U5;Ncba&Nd)74fLn7?#&zz`Y@ zvy}ddpD0d=ksSB-a6hBXaYd%dJ_nyljZ6~u9s2pU*>aSr&-<-?(#!-W!~rzj=vpcW zD59PHU73~U!`YG2GNAzG8_E{(tTM_{laPd!0w*O_eZTBXZI1w)FnzW+OR?QIMWzab zUvu)p=D#C?L4Lwu+^>R@j{dcT1$S;gAoJDo{gBVg?Zyne4;T;CvNFKhQK1d-?~E2I zcD@rAicWLCGw;JN9Yx^gfy#cgKlC6|tB*ZV>`|A#`grZZjx#luVG&fcN$!)^|I@*2 z9v+CoF7#sli*{)7@Q|T!y?^g5DSSNSGa`jYO#e@*zs0F7J3jS`nJa>TzZcIHq{}4@ GgZ>BaZUDys literal 0 HcmV?d00001 diff --git a/doc/_assets/images/simpleKeystone/transactions.PNG b/doc/_assets/images/simpleKeystone/transactions.PNG index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0c5169a7dd383d016bb60a5d54e2993f4251d98c 100644 GIT binary patch literal 101345 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�ABVOcpp6h#uCPW}iAmUL@S{j`QVxc1gkh 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 YYq~0wUabY1^a~fX)bvzKpjOZR59I+z>i_@% literal 0 HcmV?d00001 diff --git a/doc/_assets/images/simpleKeystone/transactions_footprint.PNG b/doc/_assets/images/simpleKeystone/transactions_footprint.PNG index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6404603993cb17a783525aead41152eefffd55fa 100644 GIT binary patch literal 80327 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
+
+ {% if urls.editSource %} + Edit this page on GitHub + {% endif %} +

{{ page.title }}

+
+ {{ content }} +
\ No newline at end of file diff --git a/doc/_layouts/index.html b/doc/_layouts/index.html index e69de29..14f84bb 100644 --- a/doc/_layouts/index.html +++ b/doc/_layouts/index.html @@ -0,0 +1,24 @@ +--- +layout: static-site-main +--- + +
+
+ {% if urls.editSource %} + + {% endif %} +

{{ page.title }}

+
+ + {{ content }} + +

Table of Contents

+ + +
\ No newline at end of file diff --git a/doc/_layouts/main.html b/doc/_layouts/main.html index e69de29..091d659 100644 --- a/doc/_layouts/main.html +++ b/doc/_layouts/main.html @@ -0,0 +1,5 @@ +--- +layout: base +--- + +
{{ content }}
\ No newline at end of file diff --git a/doc/_layouts/static-site-main.html b/doc/_layouts/static-site-main.html index e69de29..48b2484 100644 --- a/doc/_layouts/static-site-main.html +++ b/doc/_layouts/static-site-main.html @@ -0,0 +1,19 @@ +--- +layout: main +--- + +
+ + {% if page.nightlyOf %} + + {% endif %} {{ content }} +
+
\ No newline at end of file diff --git a/doc/sidebar.yml b/doc/sidebar.yml index e69de29..ebddb46 100644 --- a/doc/sidebar.yml +++ b/doc/sidebar.yml @@ -0,0 +1,32 @@ +index: index.md +subsection: + - title: Getting started + index: doc/reference/gettingStarted/index.md + directory: reference/gettingStarted + subsection: + - page: reference/gettingStarted/getting_started_SBT.md + - page: reference/gettingStarted/getting_started_docker.md + - page: reference/gettingStarted/external_dependency.md + - title: Using PML + index: doc/reference/usePML/index.md + directory: reference/usePML + subsection: + - page: reference/usePML/editing_PML_model.md + - page: reference/usePML/pml_examples.md + - title: Examples + directory: example + subsection: + - title: Simple Keystone + index: doc/example/simpleKeystone/index.md + subsection: + - page: example/simpleKeystone/platform.md + - page: example/simpleKeystone/software.md + - page: example/simpleKeystone/routing.md + - page: example/simpleKeystone/library.md + - page: example/simpleKeystone/slicing.md + - page: example/simpleKeystone/specification.md + - page: example/simpleKeystone/export.md + - title: Simple T1042 + page: example/simpleT1042/index.md + + From 4df6ea50002a45b38e9dc5838dc60934655a3ca2 Mon Sep 17 00:00:00 2001 From: kevin-delmas Date: Mon, 13 Nov 2023 16:52:50 +0100 Subject: [PATCH 3/7] solving #2 issue: renaming the package, add publish to sonatype, add basic tests --- README.md | 15 +- build.sbt | 5 +- .../pmlanalyzer}/pml/examples/package.scala | 2 +- .../simpleKeystone/SimpleKeystoneExport.scala | 10 +- .../SimpleKeystoneLibraryConfiguration.scala | 2 +- ...mpleKeystoneLibraryConfigurationFull.scala | 2 +- ...mpleKeystoneLibraryConfigurationNoL1.scala | 2 +- ...eystoneLibraryConfigurationPlanApp21.scala | 2 +- ...eystoneLibraryConfigurationPlanApp22.scala | 2 +- .../SimpleKeystonePlatform.scala | 6 +- .../SimpleKeystoneTransactionLibrary.scala | 6 +- .../SimpleRoutingConfiguration.scala | 4 +- .../SimpleSoftwareAllocation.scala | 6 +- .../pml/examples/simpleKeystone/package.scala | 2 +- .../SimpleRoutingConfiguration.scala | 2 +- .../SimpleSoftwareAllocation.scala | 6 +- .../simpleT1042/SimpleT1042Export.scala | 8 +- .../SimpleT1042LibraryConfiguration.scala | 2 +- .../SimpleT1042LibraryConfigurationFull.scala | 2 +- .../SimpleT1042LibraryConfigurationNoL1.scala | 2 +- ...leT1042LibraryConfigurationPlanApp21.scala | 2 +- ...leT1042LibraryConfigurationPlanApp22.scala | 2 +- .../simpleT1042/SimpleT1042Platform.scala | 6 +- .../SimpleT1042TransactionLibrary.scala | 6 +- .../pml/examples/simpleT1042/package.scala | 2 +- .../pml/exporters/FileManager.scala | 2 +- .../pml/exporters/RelationExporter.scala | 10 +- .../pml/exporters/UMLExporter.scala | 10 +- .../pmlanalyzer}/pml/exporters/package.scala | 4 +- .../pmlanalyzer}/pml/model/PMLNode.scala | 2 +- .../pml/model/PMLNodeBuilder.scala | 6 +- .../configuration/TransactionLibrary.scala | 22 +-- .../pml/model/configuration/package.scala | 2 +- .../hardware/BaseHardwareNodeBuilder.scala | 10 +- .../pml/model/hardware/Composite.scala | 8 +- .../pml/model/hardware/Hardware.scala | 4 +- .../pml/model/hardware/Initiator.scala | 2 +- .../pml/model/hardware/Platform.scala | 18 +- .../model/hardware/SimpleTransporter.scala | 2 +- .../pml/model/hardware/Target.scala | 2 +- .../pml/model/hardware/Transporter.scala | 2 +- .../pml/model/hardware/Virtualizer.scala | 2 +- .../pml/model/hardware/package.scala | 2 +- .../pmlanalyzer}/pml/model/package.scala | 2 +- .../AntiReflexiveSymmetricEndomorphism.scala | 4 +- .../model/relations/AuthorizeRelation.scala | 6 +- .../pml/model/relations/Endomorphism.scala | 2 +- .../pml/model/relations/LinkRelation.scala | 6 +- .../pml/model/relations/ProvideRelation.scala | 6 +- .../ReflexiveSymmetricEndomorphism.scala | 4 +- .../pml/model/relations/Relation.scala | 2 +- .../pml/model/relations/RoutingRelation.scala | 6 +- .../pml/model/relations/UseRelation.scala | 8 +- .../pml/model/relations/package.scala | 2 +- .../pml/model/service/ArtificialService.scala | 2 +- .../model/service/BaseServiceBuilder.scala | 6 +- .../pmlanalyzer}/pml/model/service/Load.scala | 2 +- .../pml/model/service/Service.scala | 4 +- .../pml/model/service/Store.scala | 2 +- .../pml/model/service/package.scala | 2 +- .../pml/model/software/Application.scala | 4 +- .../software/BaseSoftwareNodeBuilder.scala | 6 +- .../pml/model/software/Data.scala | 6 +- .../pml/model/software/package.scala | 2 +- .../pml/model/utils/Message.scala | 12 +- .../pmlanalyzer}/pml/model/utils/Owner.scala | 2 +- .../pml/model/utils/package.scala | 2 +- .../pml/operators/AsTransaction.scala | 10 +- .../pml/operators/Deactivate.scala | 10 +- .../pmlanalyzer}/pml/operators/Link.scala | 8 +- .../pmlanalyzer}/pml/operators/Linked.scala | 6 +- .../pmlanalyzer}/pml/operators/Merge.scala | 4 +- .../pmlanalyzer}/pml/operators/Provided.scala | 26 ++- .../pmlanalyzer}/pml/operators/Restrict.scala | 12 +- .../pmlanalyzer}/pml/operators/Route.scala | 12 +- .../pmlanalyzer}/pml/operators/Use.scala | 10 +- .../pmlanalyzer}/pml/operators/Used.scala | 16 +- .../pmlanalyzer}/pml/operators/package.scala | 5 +- .../{ => onera/pmlanalyzer}/pml/package.scala | 18 ++ .../dependability/executor/Scheduler.scala | 6 +- .../dependability/executor/Simulator.scala | 4 +- .../dependability/executor/Synchronize.scala | 4 +- .../exporters/AutomatonCeciliaExporter.scala | 12 +- .../BasicOperationCeciliaExporter.scala | 7 +- .../exporters/CeciliaExporter.scala | 4 +- .../exporters/ExprCeciliaExporter.scala | 8 +- .../dependability/exporters/Folder.scala | 6 +- .../exporters/GenericImage.scala | 4 +- .../views/dependability/exporters/Model.scala | 4 +- .../exporters/PhylogFolder.scala | 2 +- .../exporters/PlatformCeciliaExporter.scala | 22 +-- .../exporters/SoftwareCeciliaExporter.scala | 12 +- .../exporters/SystemCeciliaExporter.scala | 6 +- .../exporters/TargetCeciliaExporter.scala | 12 +- .../TransporterCeciliaExporter.scala | 12 +- .../exporters/TypeCeciliaExporter.scala | 4 +- .../dependability/exporters/package.scala | 2 +- .../views/dependability/model/Component.scala | 2 +- .../views/dependability/model/Copy.scala | 2 +- .../dependability/model/CustomTypes.scala | 4 +- .../views/dependability/model/Direction.scala | 4 +- .../dependability/model/EnumFailureMode.scala | 4 +- .../views/dependability/model/Event.scala | 4 +- .../views/dependability/model/Fire.scala | 4 +- .../views/dependability/model/Id.scala | 4 +- .../dependability/model/ModeAutomaton.scala | 6 +- .../views/dependability/model/Software.scala | 8 +- .../views/dependability/model/System.scala | 4 +- .../views/dependability/model/Target.scala | 10 +- .../dependability/model/Transition.scala | 2 +- .../dependability/model/Transporter.scala | 9 +- .../views/dependability/model/Variable.scala | 10 +- .../operators/IsCriticityOrdering.scala | 3 +- .../dependability/operators/IsFinite.scala | 2 +- .../dependability/operators/IsMergeable.scala | 2 +- .../operators/IsOptionLike.scala | 2 +- .../operators/IsShadowOrdering.scala | 2 +- .../dependability/operators/package.scala | 2 +- .../views/interference/examples/package.scala | 2 +- ...eTableBasedInterferenceSpecification.scala | 12 +- ...SimpleKeystoneInterferenceGeneration.scala | 6 +- ...lTableBasedInterferenceSpecification.scala | 10 +- .../examples/simpleKeystone/package.scala | 2 +- .../SimpleT1042InterferenceGeneration.scala | 6 +- ...2TableBasedInterferenceSpecification.scala | 10 +- .../interference/exporters/IDPExporter.scala | 16 +- .../exporters/InterferenceGraphExporter.scala | 12 +- .../interference/exporters/package.scala | 4 +- .../model/formalisation/BDDFactory.scala | 2 +- .../model/formalisation/ProblemElement.scala | 16 +- .../model/formalisation/package.scala | 2 +- .../views/interference/model/package.scala | 2 +- .../model/relations/EquivalenceRelation.scala | 8 +- .../model/relations/ExclusiveRelation.scala | 10 +- .../model/relations/InterfereRelation.scala | 10 +- .../relations/NotInterfereRelation.scala | 10 +- .../model/relations/TransparentSet.scala | 4 +- .../model/relations/package.scala | 2 +- ...eTableBasedInterferenceSpecification.scala | 12 +- .../InterferenceSpecification.scala | 16 +- ...lTableBasedInterferenceSpecification.scala | 4 +- .../TableBasedInterferenceSpecification.scala | 23 ++- .../model/specification/package.scala | 2 +- .../interference/operators/Analyse.scala | 24 +-- .../interference/operators/Equivalent.scala | 4 +- .../interference/operators/Exclusive.scala | 4 +- .../interference/operators/Interfere.scala | 8 +- .../interference/operators/PostProcess.scala | 18 +- .../interference/operators/Transform.scala | 12 +- .../interference/operators/Transparent.scala | 6 +- .../interference/operators/package.scala | 4 +- .../views/interference/package.scala | 2 +- .../pmlanalyzer}/views/package.scala | 18 ++ .../patterns/examples/PhylogPatterns.scala | 8 +- .../patterns/exporters/LatexCodePrinter.scala | 6 +- .../exporters/LatexDiagramPrinter.scala | 6 +- .../patterns/exporters/allPrinters.scala | 2 +- .../views/patterns/model/PatternAST.scala | 2 +- .../configuration/ConfigurationTest.scala | 176 ++++++++++++++++++ .../TransactionLibraryTest.scala | 42 +++++ .../pml/model/hardware/PlatformTest.scala | 153 +++++++++++++++ .../hardware/SimpleTransporterTest.scala | 33 ++++ .../pml/model/hardware/SmartTest.scala | 33 ++++ .../pml/model/hardware/TargetTest.scala | 33 ++++ .../pml/model/hardware/VirtualizerTest.scala | 33 ++++ .../model/service/ArtificialServiceTest.scala | 29 +++ .../pml/model/service/LoadTest.scala | 30 +++ .../pml/model/service/StoreTest.scala | 31 +++ .../pml/model/software/ApplicationTest.scala | 30 +++ .../pml/model/software/DataTest.scala | 31 +++ .../pml/model/utils/OwnerTest.scala | 28 +++ 171 files changed, 1214 insertions(+), 469 deletions(-) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/package.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleKeystone/SimpleKeystoneExport.scala (90%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfiguration.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationFull.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationNoL1.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp21.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp22.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleKeystone/SimpleKeystonePlatform.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleKeystone/SimpleKeystoneTransactionLibrary.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleKeystone/SimpleRoutingConfiguration.scala (93%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleKeystone/SimpleSoftwareAllocation.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleKeystone/package.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleT1042/SimpleRoutingConfiguration.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleT1042/SimpleSoftwareAllocation.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleT1042/SimpleT1042Export.scala (89%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleT1042/SimpleT1042LibraryConfiguration.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationFull.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationNoL1.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp21.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp22.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleT1042/SimpleT1042Platform.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleT1042/SimpleT1042TransactionLibrary.scala (93%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/examples/simpleT1042/package.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/exporters/FileManager.scala (98%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/exporters/RelationExporter.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/exporters/UMLExporter.scala (98%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/exporters/package.scala (94%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/PMLNode.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/PMLNodeBuilder.scala (94%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/configuration/TransactionLibrary.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/configuration/package.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/hardware/BaseHardwareNodeBuilder.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/hardware/Composite.scala (94%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/hardware/Hardware.scala (93%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/hardware/Initiator.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/hardware/Platform.scala (93%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/hardware/SimpleTransporter.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/hardware/Target.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/hardware/Transporter.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/hardware/Virtualizer.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/hardware/package.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/package.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/relations/AntiReflexiveSymmetricEndomorphism.scala (93%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/relations/AuthorizeRelation.scala (91%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/relations/Endomorphism.scala (98%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/relations/LinkRelation.scala (92%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/relations/ProvideRelation.scala (91%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/relations/ReflexiveSymmetricEndomorphism.scala (93%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/relations/Relation.scala (98%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/relations/RoutingRelation.scala (91%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/relations/UseRelation.scala (91%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/relations/package.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/service/ArtificialService.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/service/BaseServiceBuilder.scala (94%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/service/Load.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/service/Service.scala (93%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/service/Store.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/service/package.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/software/Application.scala (94%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/software/BaseSoftwareNodeBuilder.scala (94%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/software/Data.scala (93%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/software/package.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/utils/Message.scala (93%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/utils/Owner.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/model/utils/package.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/operators/AsTransaction.scala (90%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/operators/Deactivate.scala (91%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/operators/Link.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/operators/Linked.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/operators/Merge.scala (98%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/operators/Provided.scala (91%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/operators/Restrict.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/operators/Route.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/operators/Use.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/operators/Used.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/operators/package.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/pml/package.scala (81%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/executor/Scheduler.scala (87%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/executor/Simulator.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/executor/Synchronize.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/exporters/AutomatonCeciliaExporter.scala (91%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/exporters/BasicOperationCeciliaExporter.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/exporters/CeciliaExporter.scala (94%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/exporters/ExprCeciliaExporter.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/exporters/Folder.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/exporters/GenericImage.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/exporters/Model.scala (98%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/exporters/PhylogFolder.scala (98%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/exporters/PlatformCeciliaExporter.scala (88%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/exporters/SoftwareCeciliaExporter.scala (91%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/exporters/SystemCeciliaExporter.scala (93%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/exporters/TargetCeciliaExporter.scala (93%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/exporters/TransporterCeciliaExporter.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/exporters/TypeCeciliaExporter.scala (92%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/exporters/package.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/model/Component.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/model/Copy.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/model/CustomTypes.scala (93%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/model/Direction.scala (91%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/model/EnumFailureMode.scala (91%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/model/Event.scala (94%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/model/Fire.scala (91%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/model/Id.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/model/ModeAutomaton.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/model/Software.scala (94%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/model/System.scala (93%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/model/Target.scala (87%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/model/Transition.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/model/Transporter.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/model/Variable.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/operators/IsCriticityOrdering.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/operators/IsFinite.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/operators/IsMergeable.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/operators/IsOptionLike.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/operators/IsShadowOrdering.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/views/dependability/operators/package.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/examples/package.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/examples/simpleKeystone/SimpleKeystoneApplicativeTableBasedInterferenceSpecification.scala (80%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/examples/simpleKeystone/SimpleKeystoneInterferenceGeneration.scala (88%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/examples/simpleKeystone/SimpleKeystonePhysicalTableBasedInterferenceSpecification.scala (88%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/examples/simpleKeystone/package.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/examples/simpleT1042/SimpleT1042InterferenceGeneration.scala (87%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/examples/simpleT1042/SimpleT1042TableBasedInterferenceSpecification.scala (78%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/exporters/IDPExporter.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/exporters/InterferenceGraphExporter.scala (84%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/exporters/package.scala (92%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/model/formalisation/BDDFactory.scala (99%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/model/formalisation/ProblemElement.scala (92%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/model/formalisation/package.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/model/package.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/model/relations/EquivalenceRelation.scala (84%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/model/relations/ExclusiveRelation.scala (82%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/model/relations/InterfereRelation.scala (85%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/model/relations/NotInterfereRelation.scala (85%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/model/relations/TransparentSet.scala (88%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/model/relations/package.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/model/specification/ApplicativeTableBasedInterferenceSpecification.scala (82%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/model/specification/InterferenceSpecification.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/model/specification/PhysicalTableBasedInterferenceSpecification.scala (90%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/model/specification/TableBasedInterferenceSpecification.scala (87%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/model/specification/package.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/operators/Analyse.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/operators/Equivalent.scala (90%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/operators/Exclusive.scala (91%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/operators/Interfere.scala (91%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/operators/PostProcess.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/operators/Transform.scala (86%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/operators/Transparent.scala (89%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/operators/package.scala (94%) rename src/main/scala/{ => onera/pmlanalyzer}/views/interference/package.scala (98%) rename src/main/scala/{ => onera/pmlanalyzer}/views/package.scala (55%) rename src/main/scala/{ => onera/pmlanalyzer}/views/patterns/examples/PhylogPatterns.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/views/patterns/exporters/LatexCodePrinter.scala (96%) rename src/main/scala/{ => onera/pmlanalyzer}/views/patterns/exporters/LatexDiagramPrinter.scala (97%) rename src/main/scala/{ => onera/pmlanalyzer}/views/patterns/exporters/allPrinters.scala (95%) rename src/main/scala/{ => onera/pmlanalyzer}/views/patterns/model/PatternAST.scala (99%) create mode 100644 src/test/scala/onera/pmlanalyzer/pml/model/configuration/ConfigurationTest.scala create mode 100644 src/test/scala/onera/pmlanalyzer/pml/model/configuration/TransactionLibraryTest.scala create mode 100644 src/test/scala/onera/pmlanalyzer/pml/model/hardware/PlatformTest.scala create mode 100644 src/test/scala/onera/pmlanalyzer/pml/model/hardware/SimpleTransporterTest.scala create mode 100644 src/test/scala/onera/pmlanalyzer/pml/model/hardware/SmartTest.scala create mode 100644 src/test/scala/onera/pmlanalyzer/pml/model/hardware/TargetTest.scala create mode 100644 src/test/scala/onera/pmlanalyzer/pml/model/hardware/VirtualizerTest.scala create mode 100644 src/test/scala/onera/pmlanalyzer/pml/model/service/ArtificialServiceTest.scala create mode 100644 src/test/scala/onera/pmlanalyzer/pml/model/service/LoadTest.scala create mode 100644 src/test/scala/onera/pmlanalyzer/pml/model/service/StoreTest.scala create mode 100644 src/test/scala/onera/pmlanalyzer/pml/model/software/ApplicationTest.scala create mode 100644 src/test/scala/onera/pmlanalyzer/pml/model/software/DataTest.scala create mode 100644 src/test/scala/onera/pmlanalyzer/pml/model/utils/OwnerTest.scala diff --git a/README.md b/README.md index 9e56e9d..9d74ab1 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,23 @@ # PML analyzer -The PML analyzer is an open source API providing a simple DSL to build -a description of the architecture of your chip based on the PHYLOG Model Language (PML). -From this representation a set of safety and interference model templates can be generated to perfom safety and +The PML analyzer is an open source API providing a simple DSL to build +a description of the architecture of your chip based on the PHYLOG Model Language (PML). +From this representation a set of safety and interference model templates can be generated to perfom safety and interference analyses of your platform. The only dependencies of the PML analyzer are: + The Java Runtime Environment version 8 [JRE 1.8](http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html) or newer. + The Simple Build Tool [SBT](https://www.scala-sbt.org/) +## Configurations + +### build.sbt + +To get pml analyzer simply add the following line to your build.sbt file: +```scala +libraryDependencies += "io.github.onera" % "pml_analyzer" % "1.0.0" +``` + ## Installing dependencies ### Java 8 diff --git a/build.sbt b/build.sbt index 90ba6fa..1bb0bba 100644 --- a/build.sbt +++ b/build.sbt @@ -93,8 +93,11 @@ lazy val commonSettings = Seq( developers := List (Developer("kevin-delmas", "kevin-delmas", "kevin.delmas@onera.fr", url("https://www.onera.fr/en/staff/kevin-delmas"))) , licenses +=("LGPL-2.1", url("https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html")) , publishMavenStyle := true, + credentials += Credentials(Path.userHome / ".sbt" / "sonatype_credentials"), + pomIncludeRepository := { _ => false }, crossPaths := false, - publishTo := Some(Opts.resolver.sonatypeStaging), + publishTo := Some("releases" at "https://s01.oss.sonatype.org/" + "service/local/staging/deploy/maven2"), + publishMavenStyle := true, version := "1.0.0", scalaVersion := "3.2.2", sbtVersion := "1.8.2", diff --git a/src/main/scala/pml/examples/package.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/package.scala similarity index 97% rename from src/main/scala/pml/examples/package.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/package.scala index 2d7f002..aeb1944 100644 --- a/src/main/scala/pml/examples/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml +package onera.pmlanalyzer.pml /** * Package containing PML examples of simple platforms illustrating the basic modelling features of PML diff --git a/src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneExport.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneExport.scala similarity index 90% rename from src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneExport.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneExport.scala index 8c886ce..63ff42f 100644 --- a/src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneExport.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneExport.scala @@ -15,12 +15,12 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleKeystone +package onera.pmlanalyzer.pml.examples.simpleKeystone -import pml.exporters.* -import pml.model.utils.Message -import pml.operators.* -import views.interference.examples.simpleKeystone.{SimpleKeystoneApplicativeTableBasedInterferenceSpecification, SimpleKeystonePhysicalTableBasedInterferenceSpecification} +import onera.pmlanalyzer.pml.exporters.* +import onera.pmlanalyzer.pml.model.utils.Message +import onera.pmlanalyzer.pml.operators.* +import onera.pmlanalyzer.views.interference.examples.simpleKeystone.{SimpleKeystoneApplicativeTableBasedInterferenceSpecification, SimpleKeystonePhysicalTableBasedInterferenceSpecification} /** * Program entry point to export several version of Keystone diff --git a/src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfiguration.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfiguration.scala similarity index 96% rename from src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfiguration.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfiguration.scala index 85cb63f..657ac4a 100644 --- a/src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfiguration.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfiguration.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleKeystone +package onera.pmlanalyzer.pml.examples.simpleKeystone /** * Transaction that are always used. diff --git a/src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationFull.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationFull.scala similarity index 96% rename from src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationFull.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationFull.scala index c5e8794..24fbed5 100644 --- a/src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationFull.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationFull.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleKeystone +package onera.pmlanalyzer.pml.examples.simpleKeystone /** * All transaction are used diff --git a/src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationNoL1.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationNoL1.scala similarity index 96% rename from src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationNoL1.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationNoL1.scala index 0404c23..92c02d7 100644 --- a/src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationNoL1.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationNoL1.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleKeystone +package onera.pmlanalyzer.pml.examples.simpleKeystone /** * Transactions used when the L1 is not used diff --git a/src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp21.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp21.scala similarity index 95% rename from src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp21.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp21.scala index ca95a49..600e03c 100644 --- a/src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp21.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp21.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleKeystone +package onera.pmlanalyzer.pml.examples.simpleKeystone /** * Transaction used when app4, app1 and app21 are scheduled diff --git a/src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp22.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp22.scala similarity index 96% rename from src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp22.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp22.scala index b984485..baa4ab8 100644 --- a/src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp22.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp22.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleKeystone +package onera.pmlanalyzer.pml.examples.simpleKeystone /** * Transaction used when app22, app1 and app3 are scheduled diff --git a/src/main/scala/pml/examples/simpleKeystone/SimpleKeystonePlatform.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystonePlatform.scala similarity index 97% rename from src/main/scala/pml/examples/simpleKeystone/SimpleKeystonePlatform.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystonePlatform.scala index 7edbf38..0e7174f 100644 --- a/src/main/scala/pml/examples/simpleKeystone/SimpleKeystonePlatform.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystonePlatform.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleKeystone +package onera.pmlanalyzer.pml.examples.simpleKeystone -import pml.model.hardware._ -import pml.operators._ +import onera.pmlanalyzer.pml.model.hardware._ +import onera.pmlanalyzer.pml.operators._ import sourcecode.Name /** diff --git a/src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneTransactionLibrary.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneTransactionLibrary.scala similarity index 97% rename from src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneTransactionLibrary.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneTransactionLibrary.scala index 791af55..78832e3 100644 --- a/src/main/scala/pml/examples/simpleKeystone/SimpleKeystoneTransactionLibrary.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneTransactionLibrary.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleKeystone +package onera.pmlanalyzer.pml.examples.simpleKeystone -import pml.model.configuration.TransactionLibrary -import pml.operators._ +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary +import onera.pmlanalyzer.pml.operators._ import scala.language.postfixOps diff --git a/src/main/scala/pml/examples/simpleKeystone/SimpleRoutingConfiguration.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleRoutingConfiguration.scala similarity index 93% rename from src/main/scala/pml/examples/simpleKeystone/SimpleRoutingConfiguration.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleRoutingConfiguration.scala index 4a4dd3b..373602a 100644 --- a/src/main/scala/pml/examples/simpleKeystone/SimpleRoutingConfiguration.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleRoutingConfiguration.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleKeystone +package onera.pmlanalyzer.pml.examples.simpleKeystone -import pml.operators._ +import onera.pmlanalyzer.pml.operators._ /** * Routing constraints considered for simple Keystone diff --git a/src/main/scala/pml/examples/simpleKeystone/SimpleSoftwareAllocation.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleSoftwareAllocation.scala similarity index 97% rename from src/main/scala/pml/examples/simpleKeystone/SimpleSoftwareAllocation.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleSoftwareAllocation.scala index 58889a7..7bce5dd 100644 --- a/src/main/scala/pml/examples/simpleKeystone/SimpleSoftwareAllocation.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleSoftwareAllocation.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleKeystone +package onera.pmlanalyzer.pml.examples.simpleKeystone -import pml.model.software.{Application, Data} -import pml.operators._ +import onera.pmlanalyzer.pml.model.software.{Application, Data} +import onera.pmlanalyzer.pml.operators._ import scala.language.postfixOps diff --git a/src/main/scala/pml/examples/simpleKeystone/package.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/package.scala similarity index 97% rename from src/main/scala/pml/examples/simpleKeystone/package.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/package.scala index 15d0597..f5bbe1f 100644 --- a/src/main/scala/pml/examples/simpleKeystone/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples +package onera.pmlanalyzer.pml.examples /** * Package containing an example on a simplification of a TI Keystone platform diff --git a/src/main/scala/pml/examples/simpleT1042/SimpleRoutingConfiguration.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleRoutingConfiguration.scala similarity index 96% rename from src/main/scala/pml/examples/simpleT1042/SimpleRoutingConfiguration.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleRoutingConfiguration.scala index eb90be6..805fd12 100644 --- a/src/main/scala/pml/examples/simpleT1042/SimpleRoutingConfiguration.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleRoutingConfiguration.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleT1042 +package onera.pmlanalyzer.pml.examples.simpleT1042 trait SimpleRoutingConfiguration { self: SimpleT1042Platform => diff --git a/src/main/scala/pml/examples/simpleT1042/SimpleSoftwareAllocation.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleSoftwareAllocation.scala similarity index 95% rename from src/main/scala/pml/examples/simpleT1042/SimpleSoftwareAllocation.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleSoftwareAllocation.scala index d16935e..d20e434 100644 --- a/src/main/scala/pml/examples/simpleT1042/SimpleSoftwareAllocation.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleSoftwareAllocation.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleT1042 +package onera.pmlanalyzer.pml.examples.simpleT1042 -import pml.model.software.{Application, Data} -import pml.operators._ +import onera.pmlanalyzer.pml.model.software.{Application, Data} +import onera.pmlanalyzer.pml.operators._ import scala.language.postfixOps diff --git a/src/main/scala/pml/examples/simpleT1042/SimpleT1042Export.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042Export.scala similarity index 89% rename from src/main/scala/pml/examples/simpleT1042/SimpleT1042Export.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042Export.scala index 1645aee..3920e5f 100644 --- a/src/main/scala/pml/examples/simpleT1042/SimpleT1042Export.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042Export.scala @@ -15,11 +15,11 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleT1042 +package onera.pmlanalyzer.pml.examples.simpleT1042 -import pml.exporters._ -import pml.operators._ -import views.interference.examples.simpleT1042.{SimpleT1042ApplicativeTableBasedInterferenceSpecification, SimpleT1042PhysicalTableBasedInterferenceSpecification} +import onera.pmlanalyzer.pml.exporters._ +import onera.pmlanalyzer.pml.operators._ +import onera.pmlanalyzer.views.interference.examples.simpleT1042.{SimpleT1042ApplicativeTableBasedInterferenceSpecification, SimpleT1042PhysicalTableBasedInterferenceSpecification} object SimpleT1042Export extends App { diff --git a/src/main/scala/pml/examples/simpleT1042/SimpleT1042LibraryConfiguration.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfiguration.scala similarity index 95% rename from src/main/scala/pml/examples/simpleT1042/SimpleT1042LibraryConfiguration.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfiguration.scala index 7d10b5d..9d7b908 100644 --- a/src/main/scala/pml/examples/simpleT1042/SimpleT1042LibraryConfiguration.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfiguration.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleT1042 +package onera.pmlanalyzer.pml.examples.simpleT1042 trait SimpleT1042LibraryConfiguration extends SimpleT1042TransactionLibrary with SimpleSoftwareAllocation { self: SimpleT1042Platform => diff --git a/src/main/scala/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationFull.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationFull.scala similarity index 96% rename from src/main/scala/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationFull.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationFull.scala index bec1a05..186079b 100644 --- a/src/main/scala/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationFull.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationFull.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleT1042 +package onera.pmlanalyzer.pml.examples.simpleT1042 trait SimpleT1042LibraryConfigurationFull extends SimpleT1042LibraryConfiguration { self: SimpleT1042Platform => diff --git a/src/main/scala/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationNoL1.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationNoL1.scala similarity index 96% rename from src/main/scala/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationNoL1.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationNoL1.scala index cc5399f..7937373 100644 --- a/src/main/scala/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationNoL1.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationNoL1.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleT1042 +package onera.pmlanalyzer.pml.examples.simpleT1042 trait SimpleT1042LibraryConfigurationNoL1 extends SimpleT1042LibraryConfiguration { self: SimpleT1042Platform => diff --git a/src/main/scala/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp21.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp21.scala similarity index 95% rename from src/main/scala/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp21.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp21.scala index 76ab4ec..c6eea1b 100644 --- a/src/main/scala/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp21.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp21.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleT1042 +package onera.pmlanalyzer.pml.examples.simpleT1042 trait SimpleT1042LibraryConfigurationPlanApp21 extends SimpleT1042LibraryConfiguration { self: SimpleT1042Platform => diff --git a/src/main/scala/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp22.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp22.scala similarity index 95% rename from src/main/scala/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp22.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp22.scala index 72cdc21..8953398 100644 --- a/src/main/scala/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp22.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp22.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleT1042 +package onera.pmlanalyzer.pml.examples.simpleT1042 trait SimpleT1042LibraryConfigurationPlanApp22 extends SimpleT1042LibraryConfiguration { self: SimpleT1042Platform => diff --git a/src/main/scala/pml/examples/simpleT1042/SimpleT1042Platform.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042Platform.scala similarity index 95% rename from src/main/scala/pml/examples/simpleT1042/SimpleT1042Platform.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042Platform.scala index 0552963..e96cc76 100644 --- a/src/main/scala/pml/examples/simpleT1042/SimpleT1042Platform.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042Platform.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleT1042 +package onera.pmlanalyzer.pml.examples.simpleT1042 -import pml.model.hardware._ -import pml.operators._ +import onera.pmlanalyzer.pml.model.hardware._ +import onera.pmlanalyzer.pml.operators._ import sourcecode.Name class SimpleT1042Platform(name: Symbol) extends Platform(name) { diff --git a/src/main/scala/pml/examples/simpleT1042/SimpleT1042TransactionLibrary.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042TransactionLibrary.scala similarity index 93% rename from src/main/scala/pml/examples/simpleT1042/SimpleT1042TransactionLibrary.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042TransactionLibrary.scala index 4fc61ea..3135e33 100644 --- a/src/main/scala/pml/examples/simpleT1042/SimpleT1042TransactionLibrary.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042TransactionLibrary.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples.simpleT1042 +package onera.pmlanalyzer.pml.examples.simpleT1042 -import pml.model.configuration.TransactionLibrary -import pml.operators._ +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary +import onera.pmlanalyzer.pml.operators._ import scala.language.postfixOps diff --git a/src/main/scala/pml/examples/simpleT1042/package.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/package.scala similarity index 96% rename from src/main/scala/pml/examples/simpleT1042/package.scala rename to src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/package.scala index 1df11eb..65b586b 100644 --- a/src/main/scala/pml/examples/simpleT1042/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.examples +package onera.pmlanalyzer.pml.examples /** * Package containing an example on a simplification of T1042 platform diff --git a/src/main/scala/pml/exporters/FileManager.scala b/src/main/scala/onera/pmlanalyzer/pml/exporters/FileManager.scala similarity index 98% rename from src/main/scala/pml/exporters/FileManager.scala rename to src/main/scala/onera/pmlanalyzer/pml/exporters/FileManager.scala index e65b771..8b19000 100644 --- a/src/main/scala/pml/exporters/FileManager.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/exporters/FileManager.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.exporters +package onera.pmlanalyzer.pml.exporters import java.io.File import scala.io.{BufferedSource, Source} diff --git a/src/main/scala/pml/exporters/RelationExporter.scala b/src/main/scala/onera/pmlanalyzer/pml/exporters/RelationExporter.scala similarity index 97% rename from src/main/scala/pml/exporters/RelationExporter.scala rename to src/main/scala/onera/pmlanalyzer/pml/exporters/RelationExporter.scala index b4f3558..15c595e 100644 --- a/src/main/scala/pml/exporters/RelationExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/exporters/RelationExporter.scala @@ -15,12 +15,12 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.exporters +package onera.pmlanalyzer.pml.exporters -import pml.model.configuration.TransactionLibrary -import pml.model.hardware.Platform -import pml.model.software._ -import pml.operators._ +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary +import onera.pmlanalyzer.pml.model.hardware.Platform +import onera.pmlanalyzer.pml.model.software._ +import onera.pmlanalyzer.pml.operators._ import java.io.FileWriter diff --git a/src/main/scala/pml/exporters/UMLExporter.scala b/src/main/scala/onera/pmlanalyzer/pml/exporters/UMLExporter.scala similarity index 98% rename from src/main/scala/pml/exporters/UMLExporter.scala rename to src/main/scala/onera/pmlanalyzer/pml/exporters/UMLExporter.scala index 6a1a892..63b9c0d 100644 --- a/src/main/scala/pml/exporters/UMLExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/exporters/UMLExporter.scala @@ -15,12 +15,12 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.exporters +package onera.pmlanalyzer.pml.exporters -import pml.model.hardware._ -import pml.model.service.{ArtificialService, Service} -import pml.model.software.Application -import pml.operators._ +import onera.pmlanalyzer.pml.model.hardware._ +import onera.pmlanalyzer.pml.model.service.{ArtificialService, Service} +import onera.pmlanalyzer.pml.model.software.Application +import onera.pmlanalyzer.pml.operators._ import java.io.{FileWriter, Writer} import scala.collection.mutable.{HashMap => MHashMap} diff --git a/src/main/scala/pml/exporters/package.scala b/src/main/scala/onera/pmlanalyzer/pml/exporters/package.scala similarity index 94% rename from src/main/scala/pml/exporters/package.scala rename to src/main/scala/onera/pmlanalyzer/pml/exporters/package.scala index a8dc0c0..ecade9e 100644 --- a/src/main/scala/pml/exporters/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/exporters/package.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml +package onera.pmlanalyzer.pml /** * Package containing the extension methods to export PML model as tables or Graphviz. * * Must be imported as following to enable export extension - * {{{import pml.exporters._}}} + * {{{import onera.pmlanalyzer.pml.exporters._}}} * * The available extension methods are provided in [[UMLExporter.Ops]] and [[RelationExporter.Ops]] * diff --git a/src/main/scala/pml/model/PMLNode.scala b/src/main/scala/onera/pmlanalyzer/pml/model/PMLNode.scala similarity index 97% rename from src/main/scala/pml/model/PMLNode.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/PMLNode.scala index 00659fa..36d5407 100644 --- a/src/main/scala/pml/model/PMLNode.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/PMLNode.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model +package onera.pmlanalyzer.pml.model import sourcecode.Enclosing diff --git a/src/main/scala/pml/model/PMLNodeBuilder.scala b/src/main/scala/onera/pmlanalyzer/pml/model/PMLNodeBuilder.scala similarity index 94% rename from src/main/scala/pml/model/PMLNodeBuilder.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/PMLNodeBuilder.scala index e5163d4..a36ae3a 100644 --- a/src/main/scala/pml/model/PMLNodeBuilder.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/PMLNodeBuilder.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model +package onera.pmlanalyzer.pml.model -import pml.model.hardware.Composite -import pml.model.utils.Owner +import onera.pmlanalyzer.pml.model.hardware.Composite +import onera.pmlanalyzer.pml.model.utils.Owner import scala.collection.mutable.{HashMap => MHashMap} diff --git a/src/main/scala/pml/model/configuration/TransactionLibrary.scala b/src/main/scala/onera/pmlanalyzer/pml/model/configuration/TransactionLibrary.scala similarity index 96% rename from src/main/scala/pml/model/configuration/TransactionLibrary.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/configuration/TransactionLibrary.scala index cc08a51..f428b48 100644 --- a/src/main/scala/pml/model/configuration/TransactionLibrary.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/configuration/TransactionLibrary.scala @@ -15,18 +15,18 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.configuration - -import pml.model.configuration.TransactionLibrary.* -import pml.model.hardware.Platform -import pml.model.service.{Load, Service, Store} -import pml.model.software.Application -import pml.model.utils.{Message, Owner} -import pml.model.{PMLNode, PMLNodeBuilder} -import pml.operators.* +package onera.pmlanalyzer.pml.model.configuration + +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary.* +import onera.pmlanalyzer.pml.model.hardware.Platform +import onera.pmlanalyzer.pml.model.service.{Load, Service, Store} +import onera.pmlanalyzer.pml.model.software.Application +import onera.pmlanalyzer.pml.model.utils.{Message, Owner} +import onera.pmlanalyzer.pml.model.{PMLNode, PMLNodeBuilder} +import onera.pmlanalyzer.pml.operators.* import sourcecode.Name -import views.interference.model.specification.InterferenceSpecification -import views.interference.model.specification.InterferenceSpecification.{PhysicalTransaction, PhysicalTransactionId} +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification.{PhysicalTransaction, PhysicalTransactionId} import scala.reflect.ClassTag /** diff --git a/src/main/scala/pml/model/configuration/package.scala b/src/main/scala/onera/pmlanalyzer/pml/model/configuration/package.scala similarity index 97% rename from src/main/scala/pml/model/configuration/package.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/configuration/package.scala index a646d0c..9bc1f6d 100644 --- a/src/main/scala/pml/model/configuration/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/configuration/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model +package onera.pmlanalyzer.pml.model /** * Package containing configuration PML facet of a model diff --git a/src/main/scala/pml/model/hardware/BaseHardwareNodeBuilder.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/BaseHardwareNodeBuilder.scala similarity index 95% rename from src/main/scala/pml/model/hardware/BaseHardwareNodeBuilder.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/hardware/BaseHardwareNodeBuilder.scala index 12ccf54..60ebe8e 100644 --- a/src/main/scala/pml/model/hardware/BaseHardwareNodeBuilder.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/BaseHardwareNodeBuilder.scala @@ -15,12 +15,12 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.hardware +package onera.pmlanalyzer.pml.model.hardware -import pml.model.PMLNodeBuilder -import pml.model.relations.ProvideRelation -import pml.model.service.{Load, Service, Store} -import pml.model.utils.Owner +import onera.pmlanalyzer.pml.model.PMLNodeBuilder +import onera.pmlanalyzer.pml.model.relations.ProvideRelation +import onera.pmlanalyzer.pml.model.service.{Load, Service, Store} +import onera.pmlanalyzer.pml.model.utils.Owner import sourcecode.Name /** diff --git a/src/main/scala/pml/model/hardware/Composite.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Composite.scala similarity index 94% rename from src/main/scala/pml/model/hardware/Composite.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/hardware/Composite.scala index 4f0a4a7..8fc0c1f 100644 --- a/src/main/scala/pml/model/hardware/Composite.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Composite.scala @@ -15,11 +15,11 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.hardware +package onera.pmlanalyzer.pml.model.hardware -import pml.model.PMLNodeBuilder -import pml.model.hardware.Composite.formatName -import pml.model.utils.Owner +import onera.pmlanalyzer.pml.model.PMLNodeBuilder +import onera.pmlanalyzer.pml.model.hardware.Composite.formatName +import onera.pmlanalyzer.pml.model.utils.Owner import sourcecode.Name /** diff --git a/src/main/scala/pml/model/hardware/Hardware.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Hardware.scala similarity index 93% rename from src/main/scala/pml/model/hardware/Hardware.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/hardware/Hardware.scala index 60c94d0..acedc22 100644 --- a/src/main/scala/pml/model/hardware/Hardware.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Hardware.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.hardware +package onera.pmlanalyzer.pml.model.hardware -import pml.model.PMLNode +import onera.pmlanalyzer.pml.model.PMLNode import sourcecode.Enclosing /** diff --git a/src/main/scala/pml/model/hardware/Initiator.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Initiator.scala similarity index 97% rename from src/main/scala/pml/model/hardware/Initiator.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/hardware/Initiator.scala index d8f4e6d..3518e6b 100644 --- a/src/main/scala/pml/model/hardware/Initiator.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Initiator.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.hardware +package onera.pmlanalyzer.pml.model.hardware /** * Class for the smart initiator, i.e. that can initiate transactions diff --git a/src/main/scala/pml/model/hardware/Platform.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Platform.scala similarity index 93% rename from src/main/scala/pml/model/hardware/Platform.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/hardware/Platform.scala index 6090785..6d7ff9d 100644 --- a/src/main/scala/pml/model/hardware/Platform.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Platform.scala @@ -15,16 +15,16 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.hardware - -import pml.model._ -import pml.model.relations.Relation -import pml.model.service.{Load, Store} -import pml.model.software.Application -import pml.model.utils.Owner -import pml.operators._ +package onera.pmlanalyzer.pml.model.hardware + +import onera.pmlanalyzer.pml.model._ +import onera.pmlanalyzer.pml.model.relations.Relation +import onera.pmlanalyzer.pml.model.service.{Load, Store} +import onera.pmlanalyzer.pml.model.software.Application +import onera.pmlanalyzer.pml.model.utils.Owner +import onera.pmlanalyzer.pml.operators._ import sourcecode.File -import views.interference.model.specification.InterferenceSpecification.{PhysicalScenario, PhysicalScenarioId, PhysicalTransaction, PhysicalTransactionId} +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification.{PhysicalScenario, PhysicalScenarioId, PhysicalTransaction, PhysicalTransactionId} import scala.collection.mutable.{HashMap => MHashMap} import scala.language.implicitConversions diff --git a/src/main/scala/pml/model/hardware/SimpleTransporter.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/SimpleTransporter.scala similarity index 97% rename from src/main/scala/pml/model/hardware/SimpleTransporter.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/hardware/SimpleTransporter.scala index 567ad57..5083967 100644 --- a/src/main/scala/pml/model/hardware/SimpleTransporter.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/SimpleTransporter.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.hardware +package onera.pmlanalyzer.pml.model.hardware /** * Class modelling simple transporters. diff --git a/src/main/scala/pml/model/hardware/Target.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Target.scala similarity index 97% rename from src/main/scala/pml/model/hardware/Target.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/hardware/Target.scala index a5a4cc9..e143b16 100644 --- a/src/main/scala/pml/model/hardware/Target.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Target.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.hardware +package onera.pmlanalyzer.pml.model.hardware /** * Class for all transaction destination diff --git a/src/main/scala/pml/model/hardware/Transporter.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Transporter.scala similarity index 97% rename from src/main/scala/pml/model/hardware/Transporter.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/hardware/Transporter.scala index 25b63aa..817d4a4 100644 --- a/src/main/scala/pml/model/hardware/Transporter.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Transporter.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.hardware +package onera.pmlanalyzer.pml.model.hardware import sourcecode.Enclosing diff --git a/src/main/scala/pml/model/hardware/Virtualizer.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Virtualizer.scala similarity index 97% rename from src/main/scala/pml/model/hardware/Virtualizer.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/hardware/Virtualizer.scala index c49c564..0899bd3 100644 --- a/src/main/scala/pml/model/hardware/Virtualizer.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Virtualizer.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.hardware +package onera.pmlanalyzer.pml.model.hardware /** * A virtualizer is able to control the incoming transactions diff --git a/src/main/scala/pml/model/hardware/package.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/package.scala similarity index 97% rename from src/main/scala/pml/model/hardware/package.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/hardware/package.scala index 42f5250..0b8e9b5 100644 --- a/src/main/scala/pml/model/hardware/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model +package onera.pmlanalyzer.pml.model /** * Package containing all hardware PML nodes diff --git a/src/main/scala/pml/model/package.scala b/src/main/scala/onera/pmlanalyzer/pml/model/package.scala similarity index 97% rename from src/main/scala/pml/model/package.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/package.scala index 50a6f4d..1aeb61a 100644 --- a/src/main/scala/pml/model/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml +package onera.pmlanalyzer.pml /** * Package containing PML nodes. diff --git a/src/main/scala/pml/model/relations/AntiReflexiveSymmetricEndomorphism.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/AntiReflexiveSymmetricEndomorphism.scala similarity index 93% rename from src/main/scala/pml/model/relations/AntiReflexiveSymmetricEndomorphism.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/relations/AntiReflexiveSymmetricEndomorphism.scala index 78ecd6a..4ac0439 100644 --- a/src/main/scala/pml/model/relations/AntiReflexiveSymmetricEndomorphism.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/AntiReflexiveSymmetricEndomorphism.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.relations +package onera.pmlanalyzer.pml.model.relations -import pml.model.utils.Message +import onera.pmlanalyzer.pml.model.utils.Message import sourcecode.Name abstract class AntiReflexiveSymmetricEndomorphism[A](iniValues: Map[A, Set[A]])(using n:Name) extends Endomorphism[A](iniValues) { diff --git a/src/main/scala/pml/model/relations/AuthorizeRelation.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/AuthorizeRelation.scala similarity index 91% rename from src/main/scala/pml/model/relations/AuthorizeRelation.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/relations/AuthorizeRelation.scala index 482b952..0da73dd 100644 --- a/src/main/scala/pml/model/relations/AuthorizeRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/AuthorizeRelation.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.relations +package onera.pmlanalyzer.pml.model.relations -import pml.model.service.Service -import pml.model.software.Application +import onera.pmlanalyzer.pml.model.service.Service +import onera.pmlanalyzer.pml.model.software.Application /** * The relations used to encode authorized requests diff --git a/src/main/scala/pml/model/relations/Endomorphism.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/Endomorphism.scala similarity index 98% rename from src/main/scala/pml/model/relations/Endomorphism.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/relations/Endomorphism.scala index e99ec8e..0975f5f 100644 --- a/src/main/scala/pml/model/relations/Endomorphism.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/Endomorphism.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.relations +package onera.pmlanalyzer.pml.model.relations import scalaz.Memo.immutableHashMapMemo import sourcecode.Name diff --git a/src/main/scala/pml/model/relations/LinkRelation.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/LinkRelation.scala similarity index 92% rename from src/main/scala/pml/model/relations/LinkRelation.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/relations/LinkRelation.scala index 7704a73..b05c059 100644 --- a/src/main/scala/pml/model/relations/LinkRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/LinkRelation.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.relations +package onera.pmlanalyzer.pml.model.relations -import pml.model.hardware.Hardware -import pml.model.service.Service +import onera.pmlanalyzer.pml.model.hardware.Hardware +import onera.pmlanalyzer.pml.model.service.Service import sourcecode.Name /** diff --git a/src/main/scala/pml/model/relations/ProvideRelation.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/ProvideRelation.scala similarity index 91% rename from src/main/scala/pml/model/relations/ProvideRelation.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/relations/ProvideRelation.scala index 5679284..3c807f8 100644 --- a/src/main/scala/pml/model/relations/ProvideRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/ProvideRelation.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.relations +package onera.pmlanalyzer.pml.model.relations -import pml.model.hardware.Hardware -import pml.model.service.Service +import onera.pmlanalyzer.pml.model.hardware.Hardware +import onera.pmlanalyzer.pml.model.service.Service import sourcecode.Name /** diff --git a/src/main/scala/pml/model/relations/ReflexiveSymmetricEndomorphism.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/ReflexiveSymmetricEndomorphism.scala similarity index 93% rename from src/main/scala/pml/model/relations/ReflexiveSymmetricEndomorphism.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/relations/ReflexiveSymmetricEndomorphism.scala index 4f5705d..5f726ec 100644 --- a/src/main/scala/pml/model/relations/ReflexiveSymmetricEndomorphism.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/ReflexiveSymmetricEndomorphism.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.relations +package onera.pmlanalyzer.pml.model.relations -import pml.model.utils.Message +import onera.pmlanalyzer.pml.model.utils.Message import sourcecode.Name abstract class ReflexiveSymmetricEndomorphism[A](iniValues: Map[A, Set[A]])(using n:Name) extends Endomorphism[A](iniValues) { diff --git a/src/main/scala/pml/model/relations/Relation.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/Relation.scala similarity index 98% rename from src/main/scala/pml/model/relations/Relation.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/relations/Relation.scala index 2d69567..fa0a78b 100644 --- a/src/main/scala/pml/model/relations/Relation.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/Relation.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.relations +package onera.pmlanalyzer.pml.model.relations import sourcecode.Name diff --git a/src/main/scala/pml/model/relations/RoutingRelation.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/RoutingRelation.scala similarity index 91% rename from src/main/scala/pml/model/relations/RoutingRelation.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/relations/RoutingRelation.scala index 0b3e6ab..1a6852f 100644 --- a/src/main/scala/pml/model/relations/RoutingRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/RoutingRelation.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.relations +package onera.pmlanalyzer.pml.model.relations -import pml.model.hardware.Initiator -import pml.model.service.Service +import onera.pmlanalyzer.pml.model.hardware.Initiator +import onera.pmlanalyzer.pml.model.service.Service import sourcecode.Name /** diff --git a/src/main/scala/pml/model/relations/UseRelation.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/UseRelation.scala similarity index 91% rename from src/main/scala/pml/model/relations/UseRelation.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/relations/UseRelation.scala index e6cf897..96ae87c 100644 --- a/src/main/scala/pml/model/relations/UseRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/UseRelation.scala @@ -15,11 +15,11 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.relations +package onera.pmlanalyzer.pml.model.relations -import pml.model.hardware.{Initiator, Target} -import pml.model.service.Service -import pml.model.software.{Application, Data} +import onera.pmlanalyzer.pml.model.hardware.{Initiator, Target} +import onera.pmlanalyzer.pml.model.service.Service +import onera.pmlanalyzer.pml.model.software.{Application, Data} import sourcecode.Name /** diff --git a/src/main/scala/pml/model/relations/package.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/package.scala similarity index 97% rename from src/main/scala/pml/model/relations/package.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/relations/package.scala index 34600fa..c55e783 100644 --- a/src/main/scala/pml/model/relations/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model +package onera.pmlanalyzer.pml.model /** * Package containing the implicit relations used to connect PML nodes diff --git a/src/main/scala/pml/model/service/ArtificialService.scala b/src/main/scala/onera/pmlanalyzer/pml/model/service/ArtificialService.scala similarity index 97% rename from src/main/scala/pml/model/service/ArtificialService.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/service/ArtificialService.scala index 34c6967..9e0d9dd 100644 --- a/src/main/scala/pml/model/service/ArtificialService.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/service/ArtificialService.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.service +package onera.pmlanalyzer.pml.model.service /** * Base class for artificial services added to encode non topological affects diff --git a/src/main/scala/pml/model/service/BaseServiceBuilder.scala b/src/main/scala/onera/pmlanalyzer/pml/model/service/BaseServiceBuilder.scala similarity index 94% rename from src/main/scala/pml/model/service/BaseServiceBuilder.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/service/BaseServiceBuilder.scala index 049a6a6..2a3977a 100644 --- a/src/main/scala/pml/model/service/BaseServiceBuilder.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/service/BaseServiceBuilder.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.service +package onera.pmlanalyzer.pml.model.service -import pml.model.PMLNodeBuilder -import pml.model.utils.Owner +import onera.pmlanalyzer.pml.model.PMLNodeBuilder +import onera.pmlanalyzer.pml.model.utils.Owner import sourcecode.Name diff --git a/src/main/scala/pml/model/service/Load.scala b/src/main/scala/onera/pmlanalyzer/pml/model/service/Load.scala similarity index 97% rename from src/main/scala/pml/model/service/Load.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/service/Load.scala index 3168f74..29ed8bc 100644 --- a/src/main/scala/pml/model/service/Load.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/service/Load.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.service +package onera.pmlanalyzer.pml.model.service /** * Base class for load services diff --git a/src/main/scala/pml/model/service/Service.scala b/src/main/scala/onera/pmlanalyzer/pml/model/service/Service.scala similarity index 93% rename from src/main/scala/pml/model/service/Service.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/service/Service.scala index 389b523..eda6cb0 100644 --- a/src/main/scala/pml/model/service/Service.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/service/Service.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.service +package onera.pmlanalyzer.pml.model.service -import pml.model.PMLNode +import onera.pmlanalyzer.pml.model.PMLNode import sourcecode.Enclosing /** diff --git a/src/main/scala/pml/model/service/Store.scala b/src/main/scala/onera/pmlanalyzer/pml/model/service/Store.scala similarity index 97% rename from src/main/scala/pml/model/service/Store.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/service/Store.scala index 3194eb7..d0480d8 100644 --- a/src/main/scala/pml/model/service/Store.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/service/Store.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.service +package onera.pmlanalyzer.pml.model.service /** * Base class for store services diff --git a/src/main/scala/pml/model/service/package.scala b/src/main/scala/onera/pmlanalyzer/pml/model/service/package.scala similarity index 97% rename from src/main/scala/pml/model/service/package.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/service/package.scala index 6ec3f92..9a1f74f 100644 --- a/src/main/scala/pml/model/service/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/service/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model +package onera.pmlanalyzer.pml.model /** * Package containing all service PML nodes diff --git a/src/main/scala/pml/model/software/Application.scala b/src/main/scala/onera/pmlanalyzer/pml/model/software/Application.scala similarity index 94% rename from src/main/scala/pml/model/software/Application.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/software/Application.scala index 1ae3724..6e81376 100644 --- a/src/main/scala/pml/model/software/Application.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/software/Application.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.software +package onera.pmlanalyzer.pml.model.software -import pml.model.PMLNode +import onera.pmlanalyzer.pml.model.PMLNode /** * Class for the application executed on initiators diff --git a/src/main/scala/pml/model/software/BaseSoftwareNodeBuilder.scala b/src/main/scala/onera/pmlanalyzer/pml/model/software/BaseSoftwareNodeBuilder.scala similarity index 94% rename from src/main/scala/pml/model/software/BaseSoftwareNodeBuilder.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/software/BaseSoftwareNodeBuilder.scala index 230736e..cb12ab6 100644 --- a/src/main/scala/pml/model/software/BaseSoftwareNodeBuilder.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/software/BaseSoftwareNodeBuilder.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.software +package onera.pmlanalyzer.pml.model.software -import pml.model.PMLNodeBuilder -import pml.model.utils.Owner +import onera.pmlanalyzer.pml.model.PMLNodeBuilder +import onera.pmlanalyzer.pml.model.utils.Owner import sourcecode.Name /** diff --git a/src/main/scala/pml/model/software/Data.scala b/src/main/scala/onera/pmlanalyzer/pml/model/software/Data.scala similarity index 93% rename from src/main/scala/pml/model/software/Data.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/software/Data.scala index 5ceaefd..c708356 100644 --- a/src/main/scala/pml/model/software/Data.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/software/Data.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.software +package onera.pmlanalyzer.pml.model.software -import pml.model.utils.Owner -import pml.model.{PMLNode, PMLNodeBuilder} +import onera.pmlanalyzer.pml.model.utils.Owner +import onera.pmlanalyzer.pml.model.{PMLNode, PMLNodeBuilder} import sourcecode.Name /** diff --git a/src/main/scala/pml/model/software/package.scala b/src/main/scala/onera/pmlanalyzer/pml/model/software/package.scala similarity index 97% rename from src/main/scala/pml/model/software/package.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/software/package.scala index 20ee9e0..688cb92 100644 --- a/src/main/scala/pml/model/software/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/software/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model +package onera.pmlanalyzer.pml.model /** * Package containing software PML nodes. diff --git a/src/main/scala/pml/model/utils/Message.scala b/src/main/scala/onera/pmlanalyzer/pml/model/utils/Message.scala similarity index 93% rename from src/main/scala/pml/model/utils/Message.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/utils/Message.scala index 5162c5f..e750dd6 100644 --- a/src/main/scala/pml/model/utils/Message.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/utils/Message.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.utils +package onera.pmlanalyzer.pml.model.utils -import pml.model.configuration.TransactionLibrary.{UserScenarioId, UserTransactionId} -import pml.model.hardware.{Hardware, Initiator, Target} -import pml.model.service.Service -import pml.model.software.Application -import views.interference.model.specification.InterferenceSpecification.{PhysicalScenarioId, PhysicalTransaction, PhysicalTransactionId} +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary.{UserScenarioId, UserTransactionId} +import onera.pmlanalyzer.pml.model.hardware.{Hardware, Initiator, Target} +import onera.pmlanalyzer.pml.model.service.Service +import onera.pmlanalyzer.pml.model.software.Application +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification.{PhysicalScenarioId, PhysicalTransaction, PhysicalTransactionId} import scala.collection.mutable diff --git a/src/main/scala/pml/model/utils/Owner.scala b/src/main/scala/onera/pmlanalyzer/pml/model/utils/Owner.scala similarity index 96% rename from src/main/scala/pml/model/utils/Owner.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/utils/Owner.scala index fdc5c93..c17bd2d 100644 --- a/src/main/scala/pml/model/utils/Owner.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/utils/Owner.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model.utils +package onera.pmlanalyzer.pml.model.utils /** * Utility class to track hierarchy in the model diff --git a/src/main/scala/pml/model/utils/package.scala b/src/main/scala/onera/pmlanalyzer/pml/model/utils/package.scala similarity index 96% rename from src/main/scala/pml/model/utils/package.scala rename to src/main/scala/onera/pmlanalyzer/pml/model/utils/package.scala index 5f9b39d..ed1817f 100644 --- a/src/main/scala/pml/model/utils/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/utils/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.model +package onera.pmlanalyzer.pml.model /** * Package containing classes and methods diff --git a/src/main/scala/pml/operators/AsTransaction.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/AsTransaction.scala similarity index 90% rename from src/main/scala/pml/operators/AsTransaction.scala rename to src/main/scala/onera/pmlanalyzer/pml/operators/AsTransaction.scala index 91231fc..f1bd2e5 100644 --- a/src/main/scala/pml/operators/AsTransaction.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/AsTransaction.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.operators +package onera.pmlanalyzer.pml.operators -import pml.model.service.* -import pml.operators.* -import pml.model.software.Application +import onera.pmlanalyzer.pml.model.service.* +import onera.pmlanalyzer.pml.operators.* +import onera.pmlanalyzer.pml.model.software.Application import AsTransaction.TransactionParam -import pml.model.hardware.Initiator +import onera.pmlanalyzer.pml.model.hardware.Initiator trait AsTransaction[A] { def apply(a: => A): TransactionParam diff --git a/src/main/scala/pml/operators/Deactivate.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Deactivate.scala similarity index 91% rename from src/main/scala/pml/operators/Deactivate.scala rename to src/main/scala/onera/pmlanalyzer/pml/operators/Deactivate.scala index c8e974d..db0b673 100644 --- a/src/main/scala/pml/operators/Deactivate.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Deactivate.scala @@ -15,12 +15,12 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.operators +package onera.pmlanalyzer.pml.operators -import pml.model.hardware.{Hardware, Initiator} -import pml.model.relations.{LinkRelation, ProvideRelation, UseRelation} -import pml.model.service.Service -import pml.model.software.Application +import onera.pmlanalyzer.pml.model.hardware.{Hardware, Initiator} +import onera.pmlanalyzer.pml.model.relations.{LinkRelation, ProvideRelation, UseRelation} +import onera.pmlanalyzer.pml.model.service.Service +import onera.pmlanalyzer.pml.model.software.Application /** * Base trait for deactivation operations diff --git a/src/main/scala/pml/operators/Link.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Link.scala similarity index 95% rename from src/main/scala/pml/operators/Link.scala rename to src/main/scala/onera/pmlanalyzer/pml/operators/Link.scala index bc9a801..a17544e 100644 --- a/src/main/scala/pml/operators/Link.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Link.scala @@ -15,11 +15,11 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.operators +package onera.pmlanalyzer.pml.operators -import pml.model.hardware.{Hardware, Initiator, Target, Transporter} -import pml.model.relations.LinkRelation -import pml.model.service.{Load, Service, Store} +import onera.pmlanalyzer.pml.model.hardware.{Hardware, Initiator, Target, Transporter} +import onera.pmlanalyzer.pml.model.relations.LinkRelation +import onera.pmlanalyzer.pml.model.service.{Load, Service, Store} import scala.reflect.{ClassTag, classTag} diff --git a/src/main/scala/pml/operators/Linked.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Linked.scala similarity index 95% rename from src/main/scala/pml/operators/Linked.scala rename to src/main/scala/onera/pmlanalyzer/pml/operators/Linked.scala index 80bb05c..7e757c5 100644 --- a/src/main/scala/pml/operators/Linked.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Linked.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.operators +package onera.pmlanalyzer.pml.operators -import pml.model.relations.LinkRelation -import pml.model.service.{Load, Service, Store} +import onera.pmlanalyzer.pml.model.relations.LinkRelation +import onera.pmlanalyzer.pml.model.service.{Load, Service, Store} import scala.reflect._ /** * Base trait for linked operation diff --git a/src/main/scala/pml/operators/Merge.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Merge.scala similarity index 98% rename from src/main/scala/pml/operators/Merge.scala rename to src/main/scala/onera/pmlanalyzer/pml/operators/Merge.scala index 6f20015..0f5959a 100644 --- a/src/main/scala/pml/operators/Merge.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Merge.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.operators +package onera.pmlanalyzer.pml.operators -import pml.model.service.Service +import onera.pmlanalyzer.pml.model.service.Service /** * Concatenation operation over two types diff --git a/src/main/scala/pml/operators/Provided.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Provided.scala similarity index 91% rename from src/main/scala/pml/operators/Provided.scala rename to src/main/scala/onera/pmlanalyzer/pml/operators/Provided.scala index 74f3001..62ee9f4 100644 --- a/src/main/scala/pml/operators/Provided.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Provided.scala @@ -15,15 +15,20 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.operators +package onera.pmlanalyzer.pml.operators -import pml.model.hardware._ -import pml.model.relations.ProvideRelation -import pml.model.service.{Load, Service, Store} -import pml.model.software.Data -import pml.model.utils.Owner +import onera.pmlanalyzer.pml.model.hardware.{Composite, Hardware, Initiator, Platform, SimpleTransporter, Target, Transporter, Virtualizer} +import onera.pmlanalyzer.pml.model.relations.ProvideRelation +import onera.pmlanalyzer.pml.model.service.{Load, Service, Store} +import onera.pmlanalyzer.pml.model.software.Data +import onera.pmlanalyzer.pml.model.utils.Owner +import onera.pmlanalyzer.pml.model.hardware.* +import onera.pmlanalyzer.pml.model.relations.ProvideRelation +import onera.pmlanalyzer.pml.model.service.{Load, Service, Store} +import onera.pmlanalyzer.pml.model.software.Data +import onera.pmlanalyzer.pml.model.utils.Owner -import scala.reflect._ +import scala.reflect.* /** * Base trait for provide operator @@ -49,7 +54,7 @@ object Provided { /** * If an element l of type L can provide element of type R then the operator can be used * - * To access to the load services provided by an element l (e.g. a [[pml.model.hardware.Hardware]]) + * To access to the load services provided by an element l (e.g. a [[Hardware]]) * {{{ l.loads }}} * To access to the store services provided by an element l * {{{ l.stores }}} @@ -63,7 +68,7 @@ object Provided { * {{{ l.transporters }}} * To access to the hardware provided by an element l * {{{ l.hardware }}} - * To access to the initiator providing an element l (e.g. a [[pml.model.service.Service]]) + * To access to the initiator providing an element l (e.g. a [[Service]]) * {{{ l.initiatorOwner }}} * To access to the target providing an element l * {{{ l.targetOwner }}} @@ -73,7 +78,8 @@ object Provided { * {{{ l.hardwareOwner }}} * To check if an hardware r is providing an element l * {{{ l.hardwareOwnerIs(r) }}} - * @note currently provide operators are maily applicable on [[pml.model.hardware.Hardware]] and [[pml.model.software.Data]] + * + * @note currently provide operators are maily applicable on [[Hardware]] and [[pml.model.software.Data]] * @see provide usage can be found in [[views.interference.examples.simpleKeystone.SimpleKeystonePhysicalTableBasedInterferenceSpecification]] */ trait Ops { diff --git a/src/main/scala/pml/operators/Restrict.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Restrict.scala similarity index 97% rename from src/main/scala/pml/operators/Restrict.scala rename to src/main/scala/onera/pmlanalyzer/pml/operators/Restrict.scala index 3043539..dbc5d2b 100644 --- a/src/main/scala/pml/operators/Restrict.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Restrict.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.operators +package onera.pmlanalyzer.pml.operators -import pml.model.hardware.{Hardware, Initiator, Platform} -import pml.model.relations.{AuthorizeRelation, LinkRelation, RoutingRelation, UseRelation} -import pml.model.service.{Load, Service, Store} -import pml.model.software.Application -import pml.model.utils.Message +import onera.pmlanalyzer.pml.model.hardware.{Hardware, Initiator, Platform} +import onera.pmlanalyzer.pml.model.relations.{AuthorizeRelation, LinkRelation, RoutingRelation, UseRelation} +import onera.pmlanalyzer.pml.model.service.{Load, Service, Store} +import onera.pmlanalyzer.pml.model.software.Application +import onera.pmlanalyzer.pml.model.utils.Message import scala.collection.mutable.HashMap as MHashMap diff --git a/src/main/scala/pml/operators/Route.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Route.scala similarity index 96% rename from src/main/scala/pml/operators/Route.scala rename to src/main/scala/onera/pmlanalyzer/pml/operators/Route.scala index 724cf0e..1541cad 100644 --- a/src/main/scala/pml/operators/Route.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Route.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.operators +package onera.pmlanalyzer.pml.operators -import pml.model.hardware._ -import pml.model.relations.RoutingRelation -import pml.model.service._ -import pml.model.utils.Message.uselessRoutingConstraintWarning -import pml.model.utils.Owner +import onera.pmlanalyzer.pml.model.hardware._ +import onera.pmlanalyzer.pml.model.relations.RoutingRelation +import onera.pmlanalyzer.pml.model.service._ +import onera.pmlanalyzer.pml.model.utils.Message.uselessRoutingConstraintWarning +import onera.pmlanalyzer.pml.model.utils.Owner /** diff --git a/src/main/scala/pml/operators/Use.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Use.scala similarity index 95% rename from src/main/scala/pml/operators/Use.scala rename to src/main/scala/onera/pmlanalyzer/pml/operators/Use.scala index be427eb..2733d89 100644 --- a/src/main/scala/pml/operators/Use.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Use.scala @@ -15,12 +15,12 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.operators +package onera.pmlanalyzer.pml.operators -import pml.model.hardware.{Initiator, Target} -import pml.model.relations.{AuthorizeRelation, UseRelation} -import pml.model.service.{Load, Service, Store} -import pml.model.software.{Application, Data} +import onera.pmlanalyzer.pml.model.hardware.{Initiator, Target} +import onera.pmlanalyzer.pml.model.relations.{AuthorizeRelation, UseRelation} +import onera.pmlanalyzer.pml.model.service.{Load, Service, Store} +import onera.pmlanalyzer.pml.model.software.{Application, Data} /** * Base trait for use operator diff --git a/src/main/scala/pml/operators/Used.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Used.scala similarity index 95% rename from src/main/scala/pml/operators/Used.scala rename to src/main/scala/onera/pmlanalyzer/pml/operators/Used.scala index 4b1fe04..971401f 100644 --- a/src/main/scala/pml/operators/Used.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Used.scala @@ -15,16 +15,16 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml.operators +package onera.pmlanalyzer.pml.operators -import pml.model.hardware.{Initiator, Platform, Target} -import pml.model.relations.UseRelation -import pml.model.service.{Load, Service, Store} -import pml.model.software.{Application, Data} -import pml.model.utils.Message._ +import onera.pmlanalyzer.pml.model.hardware.{Initiator, Platform, Target} +import onera.pmlanalyzer.pml.model.relations.UseRelation +import onera.pmlanalyzer.pml.model.service.{Load, Service, Store} +import onera.pmlanalyzer.pml.model.software.{Application, Data} +import onera.pmlanalyzer.pml.model.utils.Message._ import scalaz.Memo.immutableHashMapMemo -import views.interference.model.specification.InterferenceSpecification.{Path, PhysicalTransaction} -import pml.operators._ +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification.{Path, PhysicalTransaction} +import onera.pmlanalyzer.pml.operators._ import scala.reflect._ /** diff --git a/src/main/scala/pml/operators/package.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/package.scala similarity index 96% rename from src/main/scala/pml/operators/package.scala rename to src/main/scala/onera/pmlanalyzer/pml/operators/package.scala index 29ef36f..7646ee0 100644 --- a/src/main/scala/pml/operators/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/package.scala @@ -15,13 +15,14 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package pml +package onera.pmlanalyzer.pml + /** * Package containing all the extension methods provided by operators * * @note This package should be imported in all pml models as so * {{{ - * import pml.operators._ + * import onera.pmlanalyzer.pml.operators._ * }}} * @see [[Link.Ops]] for link (e.g. link/unlink) keywords * @see [[Linked.Ops]] for linked (e.g. linked/reverse) keywords diff --git a/src/main/scala/pml/package.scala b/src/main/scala/onera/pmlanalyzer/pml/package.scala similarity index 81% rename from src/main/scala/pml/package.scala rename to src/main/scala/onera/pmlanalyzer/pml/package.scala index ec1b88f..9d28962 100644 --- a/src/main/scala/pml/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/package.scala @@ -1,3 +1,21 @@ +/******************************************************************************* + * Copyright (c) 2021. ONERA + * This file is part of PML Analyzer + * + * PML Analyzer is free software ; + * you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation ; + * either version 2 of the License, or (at your option) any later version. + * + * PML Analyzer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY ; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this program ; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ******************************************************************************/ + +package onera.pmlanalyzer /******************************************************************************* * Copyright (c) 2021. ONERA diff --git a/src/main/scala/views/dependability/executor/Scheduler.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Scheduler.scala similarity index 87% rename from src/main/scala/views/dependability/executor/Scheduler.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/executor/Scheduler.scala index 3970806..517a7cd 100644 --- a/src/main/scala/views/dependability/executor/Scheduler.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Scheduler.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.executor +package onera.pmlanalyzer.views.dependability.executor -import views.dependability.model.ConcreteEvent -import views.dependability.model.Direction.{Degradation, Reparation} +import onera.pmlanalyzer.views.dependability.model.ConcreteEvent +import onera.pmlanalyzer.views.dependability.model.Direction.{Degradation, Reparation} trait Scheduler { def schedule(fireable:Iterable[ConcreteEvent]):Iterable[ConcreteEvent] diff --git a/src/main/scala/views/dependability/executor/Simulator.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Simulator.scala similarity index 96% rename from src/main/scala/views/dependability/executor/Simulator.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/executor/Simulator.scala index fbb1d2f..8916c37 100644 --- a/src/main/scala/views/dependability/executor/Simulator.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Simulator.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.executor +package onera.pmlanalyzer.views.dependability.executor -import views.dependability.model._ +import onera.pmlanalyzer.views.dependability.model._ import scala.collection.mutable diff --git a/src/main/scala/views/dependability/executor/Synchronize.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Synchronize.scala similarity index 95% rename from src/main/scala/views/dependability/executor/Synchronize.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/executor/Synchronize.scala index 030f829..6b55912 100644 --- a/src/main/scala/views/dependability/executor/Synchronize.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Synchronize.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.executor +package onera.pmlanalyzer.views.dependability.executor -import views.dependability.model.{ConcreteEvent, Event, SynchroEvent} +import onera.pmlanalyzer.views.dependability.model.{ConcreteEvent, Event, SynchroEvent} import scala.collection.mutable diff --git a/src/main/scala/views/dependability/exporters/AutomatonCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/AutomatonCeciliaExporter.scala similarity index 91% rename from src/main/scala/views/dependability/exporters/AutomatonCeciliaExporter.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/exporters/AutomatonCeciliaExporter.scala index 5cde181..39631ec 100644 --- a/src/main/scala/views/dependability/exporters/AutomatonCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/AutomatonCeciliaExporter.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.exporters +package onera.pmlanalyzer.views.dependability.exporters -import views.dependability.exporters.CeciliaExporter.Aux -import views.dependability.exporters.GenericImage._ -import views.dependability.exporters.PhylogFolder.automatonFamilyFolder -import views.dependability.model.{Direction, Fire, InputFMAutomaton, SimpleFMAutomaton} -import views.dependability.operators._ +import onera.pmlanalyzer.views.dependability.exporters.CeciliaExporter.Aux +import onera.pmlanalyzer.views.dependability.exporters.GenericImage._ +import onera.pmlanalyzer.views.dependability.exporters.PhylogFolder.automatonFamilyFolder +import onera.pmlanalyzer.views.dependability.model.{Direction, Fire, InputFMAutomaton, SimpleFMAutomaton} +import onera.pmlanalyzer.views.dependability.operators._ trait AutomatonCeciliaExporter { self: TypeCeciliaExporter => diff --git a/src/main/scala/views/dependability/exporters/BasicOperationCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/BasicOperationCeciliaExporter.scala similarity index 97% rename from src/main/scala/views/dependability/exporters/BasicOperationCeciliaExporter.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/exporters/BasicOperationCeciliaExporter.scala index c431f4b..8c6ec15 100644 --- a/src/main/scala/views/dependability/exporters/BasicOperationCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/BasicOperationCeciliaExporter.scala @@ -15,10 +15,11 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.exporters +package onera.pmlanalyzer.views.dependability.exporters -import views.dependability.model.{Component, Direction, Fire, Variable, VariableId, System => DepSystem} -import views.dependability.operators._ +import onera.pmlanalyzer.views.dependability.operators.{IsCriticityOrdering, IsFinite, IsShadowOrdering} +import onera.pmlanalyzer.views.dependability.model.{Component, Direction, Fire, Variable, VariableId, System as DepSystem} +import onera.pmlanalyzer.views.dependability.operators.* trait BasicOperationCeciliaExporter { self:TypeCeciliaExporter => diff --git a/src/main/scala/views/dependability/exporters/CeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/CeciliaExporter.scala similarity index 94% rename from src/main/scala/views/dependability/exporters/CeciliaExporter.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/exporters/CeciliaExporter.scala index 427123c..6d4acf3 100644 --- a/src/main/scala/views/dependability/exporters/CeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/CeciliaExporter.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.exporters +package onera.pmlanalyzer.views.dependability.exporters -import pml.exporters.FileManager +import onera.pmlanalyzer.pml.exporters.FileManager import scala.xml.{Elem, XML} diff --git a/src/main/scala/views/dependability/exporters/ExprCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/ExprCeciliaExporter.scala similarity index 95% rename from src/main/scala/views/dependability/exporters/ExprCeciliaExporter.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/exporters/ExprCeciliaExporter.scala index 687609c..ca77f07 100644 --- a/src/main/scala/views/dependability/exporters/ExprCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/ExprCeciliaExporter.scala @@ -15,11 +15,11 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.exporters +package onera.pmlanalyzer.views.dependability.exporters -import views.dependability.exporters.CeciliaExporter.Aux -import views.dependability.model._ -import views.dependability.operators.allOf +import onera.pmlanalyzer.views.dependability.exporters.CeciliaExporter.Aux +import onera.pmlanalyzer.views.dependability.model._ +import onera.pmlanalyzer.views.dependability.operators.allOf trait ExprCeciliaExporter { self:BasicOperationCeciliaExporter with TypeCeciliaExporter => diff --git a/src/main/scala/views/dependability/exporters/Folder.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/Folder.scala similarity index 96% rename from src/main/scala/views/dependability/exporters/Folder.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/exporters/Folder.scala index d8105f7..49ca11f 100644 --- a/src/main/scala/views/dependability/exporters/Folder.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/Folder.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.exporters +package onera.pmlanalyzer.views.dependability.exporters -import views.dependability.exporters.Folder.date -import views.dependability.exporters.Model._ +import onera.pmlanalyzer.views.dependability.exporters.Folder.date +import onera.pmlanalyzer.views.dependability.exporters.Model._ import java.lang.{System => OS} import scala.xml.Elem diff --git a/src/main/scala/views/dependability/exporters/GenericImage.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/GenericImage.scala similarity index 97% rename from src/main/scala/views/dependability/exporters/GenericImage.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/exporters/GenericImage.scala index 3f65757..26aa671 100644 --- a/src/main/scala/views/dependability/exporters/GenericImage.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/GenericImage.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.exporters +package onera.pmlanalyzer.views.dependability.exporters -import views.dependability.exporters.PhylogFolder._ +import onera.pmlanalyzer.views.dependability.exporters.PhylogFolder._ object GenericImage { diff --git a/src/main/scala/views/dependability/exporters/Model.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/Model.scala similarity index 98% rename from src/main/scala/views/dependability/exporters/Model.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/exporters/Model.scala index 9d87e7a..80db1c0 100644 --- a/src/main/scala/views/dependability/exporters/Model.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/Model.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.exporters +package onera.pmlanalyzer.views.dependability.exporters -import views.dependability.exporters.Model.{ComponentDescriptor, EnumeratedTypeDescriptor, EquipmentDescriptor, ImgDescriptor, ModelDescriptor} +import onera.pmlanalyzer.views.dependability.exporters.Model.{ComponentDescriptor, EnumeratedTypeDescriptor, EquipmentDescriptor, ImgDescriptor, ModelDescriptor} import java.awt.image.BufferedImage import java.io.{ByteArrayInputStream, File, InputStream} diff --git a/src/main/scala/views/dependability/exporters/PhylogFolder.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/PhylogFolder.scala similarity index 98% rename from src/main/scala/views/dependability/exporters/PhylogFolder.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/exporters/PhylogFolder.scala index 555cc6f..2bcd5bd 100644 --- a/src/main/scala/views/dependability/exporters/PhylogFolder.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/PhylogFolder.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.exporters +package onera.pmlanalyzer.views.dependability.exporters object PhylogFolder { val genericImageFolder: FamilyFolder[ImageModel] = FamilyFolder(Symbol("generic")) diff --git a/src/main/scala/views/dependability/exporters/PlatformCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/PlatformCeciliaExporter.scala similarity index 88% rename from src/main/scala/views/dependability/exporters/PlatformCeciliaExporter.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/exporters/PlatformCeciliaExporter.scala index e10faa2..ef51b88 100644 --- a/src/main/scala/views/dependability/exporters/PlatformCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/PlatformCeciliaExporter.scala @@ -15,17 +15,17 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.exporters - -import pml.exporters.FileManager -import pml.model.hardware.{Hardware, Platform, Virtualizer, Initiator as PMLInitiator, SimpleTransporter as PMLSimpleTransporter, Target as PMLTarget, Transporter as PMLTransporter} -import pml.model.service.Service -import pml.model.software.Application as PMLApplication -import pml.operators.* -import views.dependability.exporters.CeciliaExporter.Aux -import views.dependability.model.CustomTypes.TargetStatus -import views.dependability.model.{Expr, InitiatorId, InputDepTarget, InputInDepTarget, Software, SoftwareId, TargetId, TransporterId, Variable, Application as DepApplication, BasicTransporter as DepBasicTransporter, Initiator as DepInitiator, SimpleTransporter as DepSimpleTransporter, System as DepSystem, Virtualizer as DepVirtualizer} -import views.dependability.operators.{IsCriticityOrdering, IsFinite, IsShadowOrdering} +package onera.pmlanalyzer.views.dependability.exporters + +import onera.pmlanalyzer.pml.exporters.FileManager +import onera.pmlanalyzer.pml.model.hardware.{Hardware, Platform, Virtualizer, Initiator as PMLInitiator, SimpleTransporter as PMLSimpleTransporter, Target as PMLTarget, Transporter as PMLTransporter} +import onera.pmlanalyzer.pml.model.service.Service +import onera.pmlanalyzer.pml.model.software.Application as PMLApplication +import onera.pmlanalyzer.pml.operators.* +import onera.pmlanalyzer.views.dependability.exporters.CeciliaExporter.Aux +import onera.pmlanalyzer.views.dependability.model.CustomTypes.TargetStatus +import onera.pmlanalyzer.views.dependability.model.{Expr, InitiatorId, InputDepTarget, InputInDepTarget, Software, SoftwareId, TargetId, TransporterId, Variable, Application as DepApplication, BasicTransporter as DepBasicTransporter, Initiator as DepInitiator, SimpleTransporter as DepSimpleTransporter, System as DepSystem, Virtualizer as DepVirtualizer} +import onera.pmlanalyzer.views.dependability.operators.{IsCriticityOrdering, IsFinite, IsShadowOrdering} import scala.reflect._ import scala.xml.XML diff --git a/src/main/scala/views/dependability/exporters/SoftwareCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/SoftwareCeciliaExporter.scala similarity index 91% rename from src/main/scala/views/dependability/exporters/SoftwareCeciliaExporter.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/exporters/SoftwareCeciliaExporter.scala index 879a496..522ade9 100644 --- a/src/main/scala/views/dependability/exporters/SoftwareCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/SoftwareCeciliaExporter.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.exporters +package onera.pmlanalyzer.views.dependability.exporters -import views.dependability.exporters.CeciliaExporter.Aux -import views.dependability.exporters.GenericImage._ -import views.dependability.exporters.PhylogFolder.phylogInitiatorFolder -import views.dependability.model.{Application, Descriptor, TargetId} -import views.dependability.operators._ +import onera.pmlanalyzer.views.dependability.exporters.CeciliaExporter.Aux +import onera.pmlanalyzer.views.dependability.exporters.GenericImage._ +import onera.pmlanalyzer.views.dependability.exporters.PhylogFolder.phylogInitiatorFolder +import onera.pmlanalyzer.views.dependability.model.{Application, Descriptor, TargetId} +import onera.pmlanalyzer.views.dependability.operators._ trait SoftwareCeciliaExporter { self: TypeCeciliaExporter with BasicOperationCeciliaExporter with ExprCeciliaExporter=> diff --git a/src/main/scala/views/dependability/exporters/SystemCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/SystemCeciliaExporter.scala similarity index 93% rename from src/main/scala/views/dependability/exporters/SystemCeciliaExporter.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/exporters/SystemCeciliaExporter.scala index 4dbea0f..54516ef 100644 --- a/src/main/scala/views/dependability/exporters/SystemCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/SystemCeciliaExporter.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.exporters +package onera.pmlanalyzer.views.dependability.exporters -import views.dependability.exporters.CeciliaExporter.Aux -import views.dependability.model.{InputDepTarget, System, Variable} +import onera.pmlanalyzer.views.dependability.exporters.CeciliaExporter.Aux +import onera.pmlanalyzer.views.dependability.model.{InputDepTarget, System, Variable} trait SystemCeciliaExporter { self: BasicOperationCeciliaExporter & TypeCeciliaExporter => diff --git a/src/main/scala/views/dependability/exporters/TargetCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TargetCeciliaExporter.scala similarity index 93% rename from src/main/scala/views/dependability/exporters/TargetCeciliaExporter.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TargetCeciliaExporter.scala index fdedee1..7ff5145 100644 --- a/src/main/scala/views/dependability/exporters/TargetCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TargetCeciliaExporter.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.exporters +package onera.pmlanalyzer.views.dependability.exporters -import views.dependability.exporters.CeciliaExporter.Aux -import views.dependability.exporters.GenericImage._ -import views.dependability.exporters.PhylogFolder.phylogTargetFolder -import views.dependability.model._ -import views.dependability.operators._ +import onera.pmlanalyzer.views.dependability.exporters.CeciliaExporter.Aux +import onera.pmlanalyzer.views.dependability.exporters.GenericImage._ +import onera.pmlanalyzer.views.dependability.exporters.PhylogFolder.phylogTargetFolder +import onera.pmlanalyzer.views.dependability.model._ +import onera.pmlanalyzer.views.dependability.operators._ trait TargetCeciliaExporter { self:TypeCeciliaExporter with AutomatonCeciliaExporter with BasicOperationCeciliaExporter => diff --git a/src/main/scala/views/dependability/exporters/TransporterCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TransporterCeciliaExporter.scala similarity index 97% rename from src/main/scala/views/dependability/exporters/TransporterCeciliaExporter.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TransporterCeciliaExporter.scala index a6ced2a..d3f146e 100644 --- a/src/main/scala/views/dependability/exporters/TransporterCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TransporterCeciliaExporter.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.exporters +package onera.pmlanalyzer.views.dependability.exporters -import views.dependability.exporters.CeciliaExporter.Aux -import views.dependability.exporters.GenericImage._ -import views.dependability.exporters.PhylogFolder.phylogTransporterFolder -import views.dependability.model._ -import views.dependability.operators._ +import onera.pmlanalyzer.views.dependability.exporters.CeciliaExporter.Aux +import onera.pmlanalyzer.views.dependability.exporters.GenericImage._ +import onera.pmlanalyzer.views.dependability.exporters.PhylogFolder.phylogTransporterFolder +import onera.pmlanalyzer.views.dependability.model._ +import onera.pmlanalyzer.views.dependability.operators._ trait TransporterCeciliaExporter { self:TypeCeciliaExporter with AutomatonCeciliaExporter with BasicOperationCeciliaExporter => diff --git a/src/main/scala/views/dependability/exporters/TypeCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TypeCeciliaExporter.scala similarity index 92% rename from src/main/scala/views/dependability/exporters/TypeCeciliaExporter.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TypeCeciliaExporter.scala index acf3638..f2aa2f7 100644 --- a/src/main/scala/views/dependability/exporters/TypeCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TypeCeciliaExporter.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.exporters +package onera.pmlanalyzer.views.dependability.exporters -import views.dependability.operators.{IsFinite, _} +import onera.pmlanalyzer.views.dependability.operators.{IsFinite, _} trait TypeCeciliaExporter { def typeModel[T: IsFinite]: EnumeratedType = { diff --git a/src/main/scala/views/dependability/exporters/package.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/package.scala similarity index 96% rename from src/main/scala/views/dependability/exporters/package.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/exporters/package.scala index a2d1779..96b1f63 100644 --- a/src/main/scala/views/dependability/exporters/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability +package onera.pmlanalyzer.views.dependability package object exporters extends TypeCeciliaExporter with BasicOperationCeciliaExporter diff --git a/src/main/scala/views/dependability/model/Component.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Component.scala similarity index 95% rename from src/main/scala/views/dependability/model/Component.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/model/Component.scala index 1e0c317..3c836a5 100644 --- a/src/main/scala/views/dependability/model/Component.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Component.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.model +package onera.pmlanalyzer.views.dependability.model trait Component { val id:Id diff --git a/src/main/scala/views/dependability/model/Copy.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Copy.scala similarity index 95% rename from src/main/scala/views/dependability/model/Copy.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/model/Copy.scala index 7867d9a..191214d 100644 --- a/src/main/scala/views/dependability/model/Copy.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Copy.scala @@ -15,6 +15,6 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.model +package onera.pmlanalyzer.views.dependability.model case class Copy(targetNeeded:Set[TargetId], targetWritten:Set[TargetId]) diff --git a/src/main/scala/views/dependability/model/CustomTypes.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/CustomTypes.scala similarity index 93% rename from src/main/scala/views/dependability/model/CustomTypes.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/model/CustomTypes.scala index c57ca31..921a220 100644 --- a/src/main/scala/views/dependability/model/CustomTypes.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/CustomTypes.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.model +package onera.pmlanalyzer.views.dependability.model -import views.dependability.operators._ +import onera.pmlanalyzer.views.dependability.operators._ object CustomTypes { diff --git a/src/main/scala/views/dependability/model/Direction.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Direction.scala similarity index 91% rename from src/main/scala/views/dependability/model/Direction.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/model/Direction.scala index 7c6ecc8..b739d83 100644 --- a/src/main/scala/views/dependability/model/Direction.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Direction.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.model +package onera.pmlanalyzer.views.dependability.model -import views.dependability.operators.{IsCriticityOrdering, IsFinite} +import onera.pmlanalyzer.views.dependability.operators.{IsCriticityOrdering, IsFinite} object Direction extends Enumeration { diff --git a/src/main/scala/views/dependability/model/EnumFailureMode.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/EnumFailureMode.scala similarity index 91% rename from src/main/scala/views/dependability/model/EnumFailureMode.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/model/EnumFailureMode.scala index d23fb48..9335c37 100644 --- a/src/main/scala/views/dependability/model/EnumFailureMode.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/EnumFailureMode.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.model +package onera.pmlanalyzer.views.dependability.model -import views.dependability.operators.{IsCriticityOrdering, IsFinite, IsShadowOrdering} +import onera.pmlanalyzer.views.dependability.operators.{IsCriticityOrdering, IsFinite, IsShadowOrdering} trait EnumFailureMode extends Enumeration { self => diff --git a/src/main/scala/views/dependability/model/Event.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Event.scala similarity index 94% rename from src/main/scala/views/dependability/model/Event.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/model/Event.scala index 7a4d81f..9017a4a 100644 --- a/src/main/scala/views/dependability/model/Event.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Event.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.model +package onera.pmlanalyzer.views.dependability.model -import views.dependability.executor.Simulator +import onera.pmlanalyzer.views.dependability.executor.Simulator trait Event { val name:Symbol diff --git a/src/main/scala/views/dependability/model/Fire.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Fire.scala similarity index 91% rename from src/main/scala/views/dependability/model/Fire.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/model/Fire.scala index 208ea37..6d7f75e 100644 --- a/src/main/scala/views/dependability/model/Fire.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Fire.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.model +package onera.pmlanalyzer.views.dependability.model -import views.dependability.operators.IsFinite +import onera.pmlanalyzer.views.dependability.operators.IsFinite object Fire extends Enumeration { diff --git a/src/main/scala/views/dependability/model/Id.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Id.scala similarity index 96% rename from src/main/scala/views/dependability/model/Id.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/model/Id.scala index 7d37eed..e913886 100644 --- a/src/main/scala/views/dependability/model/Id.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Id.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.model +package onera.pmlanalyzer.views.dependability.model -import views.dependability.operators.IsFinite +import onera.pmlanalyzer.views.dependability.operators.IsFinite import scala.collection.mutable diff --git a/src/main/scala/views/dependability/model/ModeAutomaton.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/ModeAutomaton.scala similarity index 95% rename from src/main/scala/views/dependability/model/ModeAutomaton.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/model/ModeAutomaton.scala index a07e07a..8b3d222 100644 --- a/src/main/scala/views/dependability/model/ModeAutomaton.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/ModeAutomaton.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.model +package onera.pmlanalyzer.views.dependability.model -import views.dependability.model.Direction.{Constant, Degradation, Reparation} -import views.dependability.operators._ +import onera.pmlanalyzer.views.dependability.model.Direction.{Constant, Degradation, Reparation} +import onera.pmlanalyzer.views.dependability.operators._ /** * Base trait for all automaton-like component diff --git a/src/main/scala/views/dependability/model/Software.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Software.scala similarity index 94% rename from src/main/scala/views/dependability/model/Software.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/model/Software.scala index 6db1106..7d81152 100644 --- a/src/main/scala/views/dependability/model/Software.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Software.scala @@ -15,11 +15,11 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.model +package onera.pmlanalyzer.views.dependability.model -import views.dependability.exporters._ -import views.dependability.model.CustomTypes.TargetStatus -import views.dependability.operators._ +import onera.pmlanalyzer.views.dependability.exporters._ +import onera.pmlanalyzer.views.dependability.model.CustomTypes.TargetStatus +import onera.pmlanalyzer.views.dependability.operators._ trait Software[FM] extends Component { diff --git a/src/main/scala/views/dependability/model/System.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/System.scala similarity index 93% rename from src/main/scala/views/dependability/model/System.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/model/System.scala index 8a1b084..999c6c9 100644 --- a/src/main/scala/views/dependability/model/System.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/System.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.model +package onera.pmlanalyzer.views.dependability.model -import views.dependability.exporters.SubComponent +import onera.pmlanalyzer.views.dependability.exporters.SubComponent import scala.collection.mutable diff --git a/src/main/scala/views/dependability/model/Target.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Target.scala similarity index 87% rename from src/main/scala/views/dependability/model/Target.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/model/Target.scala index bc546f2..5fc9dfd 100644 --- a/src/main/scala/views/dependability/model/Target.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Target.scala @@ -15,11 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.model +package onera.pmlanalyzer.views.dependability.model -import views.dependability.exporters.{SubComponent, _} -import views.dependability.model.CustomTypes.Request -import views.dependability.operators._ +import onera.pmlanalyzer.views.dependability.exporters.SubComponent +import onera.pmlanalyzer.views.dependability.operators.{IsCriticityOrdering, IsFinite, IsShadowOrdering} +import onera.pmlanalyzer.views.dependability.exporters.{SubComponent, *} +import onera.pmlanalyzer.views.dependability.model.CustomTypes.Request +import onera.pmlanalyzer.views.dependability.operators.* trait Target[FM] extends Component { val id: TargetId diff --git a/src/main/scala/views/dependability/model/Transition.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Transition.scala similarity index 96% rename from src/main/scala/views/dependability/model/Transition.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/model/Transition.scala index 432b4bf..63e513d 100644 --- a/src/main/scala/views/dependability/model/Transition.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Transition.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.model +package onera.pmlanalyzer.views.dependability.model /** * Representation of automaton transitions diff --git a/src/main/scala/views/dependability/model/Transporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Transporter.scala similarity index 95% rename from src/main/scala/views/dependability/model/Transporter.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/model/Transporter.scala index b5ecae3..e8ff824 100644 --- a/src/main/scala/views/dependability/model/Transporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Transporter.scala @@ -15,11 +15,12 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.model +package onera.pmlanalyzer.views.dependability.model -import views.dependability.exporters._ -import views.dependability.model.CustomTypes.{Request, TargetStatus} -import views.dependability.operators._ +import onera.pmlanalyzer.views.dependability.operators.{IsCriticityOrdering, IsFinite, IsShadowOrdering} +import onera.pmlanalyzer.views.dependability.exporters.* +import onera.pmlanalyzer.views.dependability.model.CustomTypes.{Request, TargetStatus} +import onera.pmlanalyzer.views.dependability.operators.* abstract class Transporter [FM: IsCriticityOrdering : IsFinite : IsShadowOrdering](implicit owner: Owner) extends Component { diff --git a/src/main/scala/views/dependability/model/Variable.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Variable.scala similarity index 95% rename from src/main/scala/views/dependability/model/Variable.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/model/Variable.scala index 22fe802..25b545c 100644 --- a/src/main/scala/views/dependability/model/Variable.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Variable.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.model +package onera.pmlanalyzer.views.dependability.model -import pml.model.hardware.{Target => PMLTarget} -import pml.model.software.Data -import pml.operators.{Used, _} +import onera.pmlanalyzer.pml.model.hardware.{Target => PMLTarget} +import onera.pmlanalyzer.pml.model.software.Data +import onera.pmlanalyzer.pml.operators.{Used, _} import scalaz.Leibniz -import views.dependability.operators.{IsCriticityOrdering, IsFinite} +import onera.pmlanalyzer.views.dependability.operators.{IsCriticityOrdering, IsFinite} import scala.language.implicitConversions diff --git a/src/main/scala/views/dependability/operators/IsCriticityOrdering.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsCriticityOrdering.scala similarity index 96% rename from src/main/scala/views/dependability/operators/IsCriticityOrdering.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsCriticityOrdering.scala index 4551da0..cfcdd20 100644 --- a/src/main/scala/views/dependability/operators/IsCriticityOrdering.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsCriticityOrdering.scala @@ -15,7 +15,8 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.operators +package onera.pmlanalyzer.views.dependability.operators + trait IsCriticityOrdering[T] extends Ordering[T] trait IsCriticityOrderingOps { diff --git a/src/main/scala/views/dependability/operators/IsFinite.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsFinite.scala similarity index 97% rename from src/main/scala/views/dependability/operators/IsFinite.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsFinite.scala index f390487..eb4a54e 100644 --- a/src/main/scala/views/dependability/operators/IsFinite.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsFinite.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.operators +package onera.pmlanalyzer.views.dependability.operators trait IsFinite[T] { def typeName: Symbol = Symbol(all.map(fm => name(fm).name.charAt(0).toTitleCase).mkString("")) diff --git a/src/main/scala/views/dependability/operators/IsMergeable.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsMergeable.scala similarity index 96% rename from src/main/scala/views/dependability/operators/IsMergeable.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsMergeable.scala index a37c720..a269df6 100644 --- a/src/main/scala/views/dependability/operators/IsMergeable.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsMergeable.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.operators +package onera.pmlanalyzer.views.dependability.operators import scala.language.higherKinds diff --git a/src/main/scala/views/dependability/operators/IsOptionLike.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsOptionLike.scala similarity index 96% rename from src/main/scala/views/dependability/operators/IsOptionLike.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsOptionLike.scala index 034f4a8..c7a3f87 100644 --- a/src/main/scala/views/dependability/operators/IsOptionLike.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsOptionLike.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.operators +package onera.pmlanalyzer.views.dependability.operators trait IsOptionLike[T] { def isDefined(x:T):Boolean = x == none diff --git a/src/main/scala/views/dependability/operators/IsShadowOrdering.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsShadowOrdering.scala similarity index 96% rename from src/main/scala/views/dependability/operators/IsShadowOrdering.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsShadowOrdering.scala index 9a689cc..603d22c 100644 --- a/src/main/scala/views/dependability/operators/IsShadowOrdering.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsShadowOrdering.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability.operators +package onera.pmlanalyzer.views.dependability.operators trait IsShadowOrdering[T] { def containerShadow(init:T, containerState:T) : T diff --git a/src/main/scala/views/dependability/operators/package.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/package.scala similarity index 95% rename from src/main/scala/views/dependability/operators/package.scala rename to src/main/scala/onera/pmlanalyzer/views/dependability/operators/package.scala index eead77d..f632a6e 100644 --- a/src/main/scala/views/dependability/operators/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.dependability +package onera.pmlanalyzer.views.dependability package object operators extends IsFiniteOps with IsMergeableOps diff --git a/src/main/scala/views/interference/examples/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/examples/package.scala similarity index 96% rename from src/main/scala/views/interference/examples/package.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/examples/package.scala index 06c1bae..a102aef 100644 --- a/src/main/scala/views/interference/examples/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/examples/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference +package onera.pmlanalyzer.views.interference /** * Package containing PML examples of simple platforms illustrating the basic interference diff --git a/src/main/scala/views/interference/examples/simpleKeystone/SimpleKeystoneApplicativeTableBasedInterferenceSpecification.scala b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystoneApplicativeTableBasedInterferenceSpecification.scala similarity index 80% rename from src/main/scala/views/interference/examples/simpleKeystone/SimpleKeystoneApplicativeTableBasedInterferenceSpecification.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystoneApplicativeTableBasedInterferenceSpecification.scala index 9c23f47..55c7ec5 100644 --- a/src/main/scala/views/interference/examples/simpleKeystone/SimpleKeystoneApplicativeTableBasedInterferenceSpecification.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystoneApplicativeTableBasedInterferenceSpecification.scala @@ -15,18 +15,18 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.examples.simpleKeystone +package onera.pmlanalyzer.views.interference.examples.simpleKeystone -import pml.examples.simpleKeystone.{SimpleKeystoneLibraryConfiguration, SimpleKeystonePlatform, SimpleKeystoneTransactionLibrary, SimpleSoftwareAllocation} -import pml.operators._ -import views.interference.model.specification.ApplicativeTableBasedInterferenceSpecification -import views.interference.operators._ +import onera.pmlanalyzer.pml.examples.simpleKeystone.{SimpleKeystoneLibraryConfiguration, SimpleKeystonePlatform, SimpleKeystoneTransactionLibrary, SimpleSoftwareAllocation} +import onera.pmlanalyzer.pml.operators.* +import onera.pmlanalyzer.views.interference.model.specification.ApplicativeTableBasedInterferenceSpecification +import onera.pmlanalyzer.views.interference.operators.* /** * The interference calculus assumptions for the SimpleKeystone's applications are gathered here. * For instance app22 and app3 cannot execute simultaneously so * {{{app22 exclusiveWith app3}}} - * The app3 transfer transaction does not significantly impact the [[pml.examples.simpleKeystone.SimpleKeystonePlatform.TeraNet]] + * The app3 transfer transaction does not significantly impact the [[TeraNet]] * {{{app3_transfer notInterfereWith TeraNet.periph_bus.loads}}} * @see [[views.interference.operators.Exclusive.Ops]] for interfere operator definition */ diff --git a/src/main/scala/views/interference/examples/simpleKeystone/SimpleKeystoneInterferenceGeneration.scala b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystoneInterferenceGeneration.scala similarity index 88% rename from src/main/scala/views/interference/examples/simpleKeystone/SimpleKeystoneInterferenceGeneration.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystoneInterferenceGeneration.scala index 8cd6f05..33c71cd 100644 --- a/src/main/scala/views/interference/examples/simpleKeystone/SimpleKeystoneInterferenceGeneration.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystoneInterferenceGeneration.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.examples.simpleKeystone +package onera.pmlanalyzer.views.interference.examples.simpleKeystone -import pml.examples.simpleKeystone.SimpleKeystoneExport.* -import views.interference.operators.* +import onera.pmlanalyzer.pml.examples.simpleKeystone.SimpleKeystoneExport.* +import onera.pmlanalyzer.views.interference.operators.* import scala.concurrent.duration.* import scala.language.postfixOps diff --git a/src/main/scala/views/interference/examples/simpleKeystone/SimpleKeystonePhysicalTableBasedInterferenceSpecification.scala b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystonePhysicalTableBasedInterferenceSpecification.scala similarity index 88% rename from src/main/scala/views/interference/examples/simpleKeystone/SimpleKeystonePhysicalTableBasedInterferenceSpecification.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystonePhysicalTableBasedInterferenceSpecification.scala index 73edb78..6250986 100644 --- a/src/main/scala/views/interference/examples/simpleKeystone/SimpleKeystonePhysicalTableBasedInterferenceSpecification.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystonePhysicalTableBasedInterferenceSpecification.scala @@ -15,12 +15,12 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.examples.simpleKeystone +package onera.pmlanalyzer.views.interference.examples.simpleKeystone -import pml.examples.simpleKeystone.SimpleKeystonePlatform -import pml.operators._ -import views.interference.model.specification.PhysicalTableBasedInterferenceSpecification -import views.interference.operators._ +import onera.pmlanalyzer.pml.examples.simpleKeystone.SimpleKeystonePlatform +import onera.pmlanalyzer.pml.operators._ +import onera.pmlanalyzer.views.interference.model.specification.PhysicalTableBasedInterferenceSpecification +import onera.pmlanalyzer.views.interference.operators._ /** * The interference calculus assumptions for the hardware components of the SimpleKeystone are gathered here. diff --git a/src/main/scala/views/interference/examples/simpleKeystone/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/package.scala similarity index 96% rename from src/main/scala/views/interference/examples/simpleKeystone/package.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/package.scala index 8420f99..1510ec0 100644 --- a/src/main/scala/views/interference/examples/simpleKeystone/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.examples +package onera.pmlanalyzer.views.interference.examples /** * Package containing an example on a simplification of a TI Keystone platform diff --git a/src/main/scala/views/interference/examples/simpleT1042/SimpleT1042InterferenceGeneration.scala b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleT1042/SimpleT1042InterferenceGeneration.scala similarity index 87% rename from src/main/scala/views/interference/examples/simpleT1042/SimpleT1042InterferenceGeneration.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleT1042/SimpleT1042InterferenceGeneration.scala index adc0a29..4f1ba4d 100644 --- a/src/main/scala/views/interference/examples/simpleT1042/SimpleT1042InterferenceGeneration.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleT1042/SimpleT1042InterferenceGeneration.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.examples.simpleT1042 +package onera.pmlanalyzer.views.interference.examples.simpleT1042 -import pml.examples.simpleT1042.SimpleT1042Export._ -import views.interference.operators._ +import onera.pmlanalyzer.pml.examples.simpleT1042.SimpleT1042Export._ +import onera.pmlanalyzer.views.interference.operators._ import scala.concurrent.duration._ import scala.language.postfixOps diff --git a/src/main/scala/views/interference/examples/simpleT1042/SimpleT1042TableBasedInterferenceSpecification.scala b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleT1042/SimpleT1042TableBasedInterferenceSpecification.scala similarity index 78% rename from src/main/scala/views/interference/examples/simpleT1042/SimpleT1042TableBasedInterferenceSpecification.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleT1042/SimpleT1042TableBasedInterferenceSpecification.scala index 18f494e..b5a4196 100644 --- a/src/main/scala/views/interference/examples/simpleT1042/SimpleT1042TableBasedInterferenceSpecification.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleT1042/SimpleT1042TableBasedInterferenceSpecification.scala @@ -15,12 +15,12 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.examples.simpleT1042 +package onera.pmlanalyzer.views.interference.examples.simpleT1042 -import pml.examples.simpleT1042.{SimpleSoftwareAllocation, SimpleT1042LibraryConfiguration, SimpleT1042Platform, SimpleT1042TransactionLibrary} -import pml.operators._ -import views.interference.model.specification.{ApplicativeTableBasedInterferenceSpecification, PhysicalTableBasedInterferenceSpecification} -import views.interference.operators._ +import onera.pmlanalyzer.pml.examples.simpleT1042.{SimpleSoftwareAllocation, SimpleT1042LibraryConfiguration, SimpleT1042Platform, SimpleT1042TransactionLibrary} +import onera.pmlanalyzer.pml.operators._ +import onera.pmlanalyzer.views.interference.model.specification.{ApplicativeTableBasedInterferenceSpecification, PhysicalTableBasedInterferenceSpecification} +import onera.pmlanalyzer.views.interference.operators._ trait SimpleT1042PhysicalTableBasedInterferenceSpecification extends PhysicalTableBasedInterferenceSpecification { self: SimpleT1042Platform => diff --git a/src/main/scala/views/interference/exporters/IDPExporter.scala b/src/main/scala/onera/pmlanalyzer/views/interference/exporters/IDPExporter.scala similarity index 95% rename from src/main/scala/views/interference/exporters/IDPExporter.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/exporters/IDPExporter.scala index a92c032..9986e15 100644 --- a/src/main/scala/views/interference/exporters/IDPExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/exporters/IDPExporter.scala @@ -15,16 +15,16 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.exporters +package onera.pmlanalyzer.views.interference.exporters -import pml.exporters.FileManager -import pml.model.configuration.TransactionLibrary -import pml.model.hardware.{Initiator, Platform, Target, Transporter} -import pml.model.utils.Message -import pml.operators._ +import onera.pmlanalyzer.pml.exporters.FileManager +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary +import onera.pmlanalyzer.pml.model.hardware.{Initiator, Platform, Target, Transporter} +import onera.pmlanalyzer.pml.model.utils.Message +import onera.pmlanalyzer.pml.operators._ import scalaz.Memo.immutableHashMapMemo -import views.interference.model.specification.InterferenceSpecification -import views.interference.model.specification.InterferenceSpecification._ +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification._ import java.io.{FileWriter, Writer} import scala.collection.mutable.{HashMap => MHashMap} diff --git a/src/main/scala/views/interference/exporters/InterferenceGraphExporter.scala b/src/main/scala/onera/pmlanalyzer/views/interference/exporters/InterferenceGraphExporter.scala similarity index 84% rename from src/main/scala/views/interference/exporters/InterferenceGraphExporter.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/exporters/InterferenceGraphExporter.scala index 482d1d4..8958c7c 100644 --- a/src/main/scala/views/interference/exporters/InterferenceGraphExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/exporters/InterferenceGraphExporter.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.exporters +package onera.pmlanalyzer.views.interference.exporters -import pml.exporters.UMLExporter.DOTServiceOnly -import pml.exporters.{FileManager, UMLExporter} -import pml.model.hardware.Platform -import views.interference.model.specification.InterferenceSpecification -import views.interference.model.specification.InterferenceSpecification.{PhysicalScenarioId, scenarioSetId} +import onera.pmlanalyzer.pml.exporters.UMLExporter.DOTServiceOnly +import onera.pmlanalyzer.pml.exporters.{FileManager, UMLExporter} +import onera.pmlanalyzer.pml.model.hardware.Platform +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification.{PhysicalScenarioId, scenarioSetId} import java.io.FileWriter diff --git a/src/main/scala/views/interference/exporters/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/exporters/package.scala similarity index 92% rename from src/main/scala/views/interference/exporters/package.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/exporters/package.scala index b37a885..ca8b558 100644 --- a/src/main/scala/views/interference/exporters/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/exporters/package.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference +package onera.pmlanalyzer.views.interference //FIXME The usage of exporters is not illustrated in examples /** * Package containing the interference related exporters * {{{ - * scala> import views.interference.exporters._ + * scala> import onera.pmlanalyzer.views.interference.exporters._ * }}} * The available extension methods are provided in [[IDPExporter.Ops]] and [[InterferenceGraphExporter.Ops]] * Example of usages are provided in ??? diff --git a/src/main/scala/views/interference/model/formalisation/BDDFactory.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/BDDFactory.scala similarity index 99% rename from src/main/scala/views/interference/model/formalisation/BDDFactory.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/BDDFactory.scala index c050ab8..1f225c1 100644 --- a/src/main/scala/views/interference/model/formalisation/BDDFactory.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/BDDFactory.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.model.formalisation +package onera.pmlanalyzer.views.interference.model.formalisation import net.sf.javabdd.{BDD => JavaBDD, BDDFactory => JavaBDDFactory} diff --git a/src/main/scala/views/interference/model/formalisation/ProblemElement.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/ProblemElement.scala similarity index 92% rename from src/main/scala/views/interference/model/formalisation/ProblemElement.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/ProblemElement.scala index da64583..f445174 100644 --- a/src/main/scala/views/interference/model/formalisation/ProblemElement.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/ProblemElement.scala @@ -15,18 +15,18 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.model.formalisation +package onera.pmlanalyzer.views.interference.model.formalisation import monosat.Logic._ import monosat.{Comparison, Graph, Lit, Solver} -import pml.model.configuration.TransactionLibrary -import pml.model.configuration.TransactionLibrary.UserScenarioId -import pml.model.hardware.Platform -import pml.model.service.Service +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary.UserScenarioId +import onera.pmlanalyzer.pml.model.hardware.Platform +import onera.pmlanalyzer.pml.model.service.Service import scalaz.Memo.immutableHashMapMemo -import views.interference.model.formalisation.ProblemElement._ -import views.interference.model.specification.InterferenceSpecification.{Channel, PhysicalScenario, PhysicalScenarioId} -import views.interference.model.specification.{ApplicativeTableBasedInterferenceSpecification, InterferenceSpecification} +import onera.pmlanalyzer.views.interference.model.formalisation.ProblemElement._ +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification.{Channel, PhysicalScenario, PhysicalScenarioId} +import onera.pmlanalyzer.views.interference.model.specification.{ApplicativeTableBasedInterferenceSpecification, InterferenceSpecification} import scala.jdk.CollectionConverters._ diff --git a/src/main/scala/views/interference/model/formalisation/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/package.scala similarity index 96% rename from src/main/scala/views/interference/model/formalisation/package.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/package.scala index 3fd1563..a44da67 100644 --- a/src/main/scala/views/interference/model/formalisation/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.model +package onera.pmlanalyzer.views.interference.model /** * Package containing model extension enabling formalisation of the interference computation problem as an SMT problem. diff --git a/src/main/scala/views/interference/model/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/package.scala similarity index 96% rename from src/main/scala/views/interference/model/package.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/model/package.scala index a49b8fd..0c1bce4 100644 --- a/src/main/scala/views/interference/model/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference +package onera.pmlanalyzer.views.interference /** * Package containing the model extensions for interference analysis diff --git a/src/main/scala/views/interference/model/relations/EquivalenceRelation.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/EquivalenceRelation.scala similarity index 84% rename from src/main/scala/views/interference/model/relations/EquivalenceRelation.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/model/relations/EquivalenceRelation.scala index 78f50f3..5603424 100644 --- a/src/main/scala/views/interference/model/relations/EquivalenceRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/EquivalenceRelation.scala @@ -15,11 +15,11 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.model.relations +package onera.pmlanalyzer.views.interference.model.relations -import pml.model.relations.{ReflexiveSymmetricEndomorphism, Endomorphism} -import pml.model.service.Service -import pml.model.utils.Message +import onera.pmlanalyzer.pml.model.relations.{ReflexiveSymmetricEndomorphism, Endomorphism} +import onera.pmlanalyzer.pml.model.service.Service +import onera.pmlanalyzer.pml.model.utils.Message import sourcecode.Name case class EquivalenceRelation[A] private(iniValues: Map[A, Set[A]])(using n:Name) extends ReflexiveSymmetricEndomorphism[A](iniValues) diff --git a/src/main/scala/views/interference/model/relations/ExclusiveRelation.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/ExclusiveRelation.scala similarity index 82% rename from src/main/scala/views/interference/model/relations/ExclusiveRelation.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/model/relations/ExclusiveRelation.scala index ebbe6f9..59f1902 100644 --- a/src/main/scala/views/interference/model/relations/ExclusiveRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/ExclusiveRelation.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.model.relations +package onera.pmlanalyzer.views.interference.model.relations -import pml.model.configuration.TransactionLibrary.UserScenarioId -import pml.model.relations.{AntiReflexiveSymmetricEndomorphism, Endomorphism} -import pml.model.software.Application +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary.UserScenarioId +import onera.pmlanalyzer.pml.model.relations.{AntiReflexiveSymmetricEndomorphism, Endomorphism} +import onera.pmlanalyzer.pml.model.software.Application import sourcecode.Name -import views.interference.model.specification.InterferenceSpecification.PhysicalTransactionId +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification.PhysicalTransactionId case class ExclusiveRelation[A] private(iniValues: Map[A, Set[A]])(using n:Name) extends AntiReflexiveSymmetricEndomorphism[A](iniValues) diff --git a/src/main/scala/views/interference/model/relations/InterfereRelation.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/InterfereRelation.scala similarity index 85% rename from src/main/scala/views/interference/model/relations/InterfereRelation.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/model/relations/InterfereRelation.scala index 7f029bb..722a5ad 100644 --- a/src/main/scala/views/interference/model/relations/InterfereRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/InterfereRelation.scala @@ -15,12 +15,12 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.model.relations +package onera.pmlanalyzer.views.interference.model.relations -import pml.model.hardware.Hardware -import pml.model.relations.Relation -import pml.model.service.Service -import views.interference.model.specification.InterferenceSpecification.PhysicalTransactionId +import onera.pmlanalyzer.pml.model.hardware.Hardware +import onera.pmlanalyzer.pml.model.relations.Relation +import onera.pmlanalyzer.pml.model.service.Service +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification.PhysicalTransactionId case class InterfereRelation[L,R] private(iniValues: Map[L, Set[R]]) extends Relation[L,R](iniValues) diff --git a/src/main/scala/views/interference/model/relations/NotInterfereRelation.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/NotInterfereRelation.scala similarity index 85% rename from src/main/scala/views/interference/model/relations/NotInterfereRelation.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/model/relations/NotInterfereRelation.scala index 2f6caf1..e64b973 100644 --- a/src/main/scala/views/interference/model/relations/NotInterfereRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/NotInterfereRelation.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.model.relations +package onera.pmlanalyzer.views.interference.model.relations -import pml.model.hardware.Hardware -import pml.model.relations.Relation -import pml.model.service.Service +import onera.pmlanalyzer.pml.model.hardware.Hardware +import onera.pmlanalyzer.pml.model.relations.Relation +import onera.pmlanalyzer.pml.model.service.Service import sourcecode.Name -import views.interference.model.specification.InterferenceSpecification.PhysicalTransactionId +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification.PhysicalTransactionId case class NotInterfereRelation[L,R] private(iniValues: Map[L, Set[R]])(using n:Name) extends Relation[L,R](iniValues) diff --git a/src/main/scala/views/interference/model/relations/TransparentSet.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/TransparentSet.scala similarity index 88% rename from src/main/scala/views/interference/model/relations/TransparentSet.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/model/relations/TransparentSet.scala index 8c4de49..3924e6a 100644 --- a/src/main/scala/views/interference/model/relations/TransparentSet.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/TransparentSet.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.model.relations +package onera.pmlanalyzer.views.interference.model.relations import sourcecode.Name -import views.interference.model.specification.InterferenceSpecification.PhysicalTransactionId +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification.PhysicalTransactionId import scala.collection.mutable.Set as MSet diff --git a/src/main/scala/views/interference/model/relations/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/package.scala similarity index 95% rename from src/main/scala/views/interference/model/relations/package.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/model/relations/package.scala index 7d48be5..f5b3261 100644 --- a/src/main/scala/views/interference/model/relations/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/package.scala @@ -15,6 +15,6 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.model +package onera.pmlanalyzer.views.interference.model package object relations diff --git a/src/main/scala/views/interference/model/specification/ApplicativeTableBasedInterferenceSpecification.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/ApplicativeTableBasedInterferenceSpecification.scala similarity index 82% rename from src/main/scala/views/interference/model/specification/ApplicativeTableBasedInterferenceSpecification.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/model/specification/ApplicativeTableBasedInterferenceSpecification.scala index bd4bc59..edc8e8e 100644 --- a/src/main/scala/views/interference/model/specification/ApplicativeTableBasedInterferenceSpecification.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/ApplicativeTableBasedInterferenceSpecification.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.model.specification +package onera.pmlanalyzer.views.interference.model.specification -import pml.model.configuration.TransactionLibrary -import pml.model.configuration.TransactionLibrary.UserScenarioId -import pml.model.hardware.Platform -import views.interference.model.relations.ExclusiveRelation -import views.interference.operators.Transform +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary.UserScenarioId +import onera.pmlanalyzer.pml.model.hardware.Platform +import onera.pmlanalyzer.views.interference.model.relations.ExclusiveRelation +import onera.pmlanalyzer.views.interference.operators.Transform trait ApplicativeTableBasedInterferenceSpecification extends TableBasedInterferenceSpecification with Transform.TransactionLibraryInstances diff --git a/src/main/scala/views/interference/model/specification/InterferenceSpecification.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/InterferenceSpecification.scala similarity index 96% rename from src/main/scala/views/interference/model/specification/InterferenceSpecification.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/model/specification/InterferenceSpecification.scala index 6021b05..104b423 100644 --- a/src/main/scala/views/interference/model/specification/InterferenceSpecification.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/InterferenceSpecification.scala @@ -15,14 +15,14 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.model.specification - -import pml.model.configuration.TransactionLibrary -import pml.model.hardware.{Hardware, Platform} -import pml.model.service.Service -import pml.operators._ -import views.interference.model.specification.InterferenceSpecification.{PhysicalScenario, PhysicalScenarioId, PhysicalTransaction, PhysicalTransactionId} -import views.interference.operators.Transform +package onera.pmlanalyzer.views.interference.model.specification + +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary +import onera.pmlanalyzer.pml.model.hardware.{Hardware, Platform} +import onera.pmlanalyzer.pml.model.service.Service +import onera.pmlanalyzer.pml.operators._ +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification.{PhysicalScenario, PhysicalScenarioId, PhysicalTransaction, PhysicalTransactionId} +import onera.pmlanalyzer.views.interference.operators.Transform /** * Base trait for all interference specification diff --git a/src/main/scala/views/interference/model/specification/PhysicalTableBasedInterferenceSpecification.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/PhysicalTableBasedInterferenceSpecification.scala similarity index 90% rename from src/main/scala/views/interference/model/specification/PhysicalTableBasedInterferenceSpecification.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/model/specification/PhysicalTableBasedInterferenceSpecification.scala index bf12c88..42489d9 100644 --- a/src/main/scala/views/interference/model/specification/PhysicalTableBasedInterferenceSpecification.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/PhysicalTableBasedInterferenceSpecification.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.model.specification +package onera.pmlanalyzer.views.interference.model.specification -import pml.model.hardware.Platform +import onera.pmlanalyzer.pml.model.hardware.Platform trait PhysicalTableBasedInterferenceSpecification extends TableBasedInterferenceSpecification { self: Platform => diff --git a/src/main/scala/views/interference/model/specification/TableBasedInterferenceSpecification.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/TableBasedInterferenceSpecification.scala similarity index 87% rename from src/main/scala/views/interference/model/specification/TableBasedInterferenceSpecification.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/model/specification/TableBasedInterferenceSpecification.scala index 7a5c40e..f1d3d8d 100644 --- a/src/main/scala/views/interference/model/specification/TableBasedInterferenceSpecification.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/TableBasedInterferenceSpecification.scala @@ -15,16 +15,19 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.model.specification - -import pml.exporters.FileManager -import pml.model.configuration.TransactionLibrary -import pml.model.hardware.{Hardware, Platform} -import pml.model.service.Service -import pml.model.software.Application -import pml.operators.{Provided, *} -import views.interference.model.relations.* -import views.interference.model.specification.InterferenceSpecification.PhysicalTransactionId +package onera.pmlanalyzer.views.interference.model.specification + +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary +import onera.pmlanalyzer.pml.model.hardware.Platform +import onera.pmlanalyzer.pml.model.service.Service +import onera.pmlanalyzer.pml.exporters.FileManager +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary +import onera.pmlanalyzer.pml.model.hardware.{Hardware, Platform} +import onera.pmlanalyzer.pml.model.service.Service +import onera.pmlanalyzer.pml.model.software.Application +import onera.pmlanalyzer.pml.operators.{Provided, *} +import onera.pmlanalyzer.views.interference.model.relations.* +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification.PhysicalTransactionId import java.io.FileWriter import scala.collection.mutable.Set as MSet diff --git a/src/main/scala/views/interference/model/specification/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/package.scala similarity index 97% rename from src/main/scala/views/interference/model/specification/package.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/model/specification/package.scala index b681a47..65f0120 100644 --- a/src/main/scala/views/interference/model/specification/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.model +package onera.pmlanalyzer.views.interference.model /** * Package containing the modelling features used to specify the assumptions considered during the interference analysis. diff --git a/src/main/scala/views/interference/operators/Analyse.scala b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Analyse.scala similarity index 97% rename from src/main/scala/views/interference/operators/Analyse.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/operators/Analyse.scala index ffb39fe..c9e6baa 100644 --- a/src/main/scala/views/interference/operators/Analyse.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Analyse.scala @@ -15,23 +15,23 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.operators +package onera.pmlanalyzer.views.interference.operators import monosat.* import monosat.Logic.* import net.sf.javabdd.BDD -import pml.exporters.FileManager -import pml.model.configuration.TransactionLibrary -import pml.model.configuration.TransactionLibrary.UserScenarioId -import pml.model.hardware.{Hardware, Platform} -import pml.model.service.Service -import pml.model.utils.Message -import pml.operators.* +import onera.pmlanalyzer.pml.exporters.FileManager +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary.UserScenarioId +import onera.pmlanalyzer.pml.model.hardware.{Hardware, Platform} +import onera.pmlanalyzer.pml.model.service.Service +import onera.pmlanalyzer.pml.model.utils.Message +import onera.pmlanalyzer.pml.operators.* import scalaz.Memo.immutableHashMapMemo -import views.interference.model.formalisation.* -import views.interference.model.formalisation.ProblemElement.* -import views.interference.model.specification.InterferenceSpecification.* -import views.interference.model.specification.{ApplicativeTableBasedInterferenceSpecification, InterferenceSpecification} +import onera.pmlanalyzer.views.interference.model.formalisation.* +import onera.pmlanalyzer.views.interference.model.formalisation.ProblemElement.* +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification.* +import onera.pmlanalyzer.views.interference.model.specification.{ApplicativeTableBasedInterferenceSpecification, InterferenceSpecification} import java.io.{File, FileWriter} import scala.collection.immutable.SortedMap diff --git a/src/main/scala/views/interference/operators/Equivalent.scala b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Equivalent.scala similarity index 90% rename from src/main/scala/views/interference/operators/Equivalent.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/operators/Equivalent.scala index 9b98105..404c8de 100644 --- a/src/main/scala/views/interference/operators/Equivalent.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Equivalent.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.operators +package onera.pmlanalyzer.views.interference.operators -import views.interference.model.relations.EquivalenceRelation +import onera.pmlanalyzer.views.interference.model.relations.EquivalenceRelation private[operators] trait Equivalent[T] { def equivalent(l:T,r:T):Unit diff --git a/src/main/scala/views/interference/operators/Exclusive.scala b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Exclusive.scala similarity index 91% rename from src/main/scala/views/interference/operators/Exclusive.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/operators/Exclusive.scala index 6fb7d1e..7d67cd7 100644 --- a/src/main/scala/views/interference/operators/Exclusive.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Exclusive.scala @@ -15,9 +15,9 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.operators +package onera.pmlanalyzer.views.interference.operators -import views.interference.model.relations.ExclusiveRelation +import onera.pmlanalyzer.views.interference.model.relations.ExclusiveRelation private[operators] trait Exclusive[T] { def apply(l:T, r:T): Unit diff --git a/src/main/scala/views/interference/operators/Interfere.scala b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Interfere.scala similarity index 91% rename from src/main/scala/views/interference/operators/Interfere.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/operators/Interfere.scala index 3f1fc24..902b913 100644 --- a/src/main/scala/views/interference/operators/Interfere.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Interfere.scala @@ -15,11 +15,11 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.operators +package onera.pmlanalyzer.views.interference.operators -import pml.model.service.Service -import views.interference.model.relations.{InterfereRelation, NotInterfereRelation} -import views.interference.model.specification.InterferenceSpecification.PhysicalTransactionId +import onera.pmlanalyzer.pml.model.service.Service +import onera.pmlanalyzer.views.interference.model.relations.{InterfereRelation, NotInterfereRelation} +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification.PhysicalTransactionId private[operators] trait Interfere[L, R] { def interfereWith(l: L, r: R): Unit diff --git a/src/main/scala/views/interference/operators/PostProcess.scala b/src/main/scala/onera/pmlanalyzer/views/interference/operators/PostProcess.scala similarity index 96% rename from src/main/scala/views/interference/operators/PostProcess.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/operators/PostProcess.scala index 4b33666..3539552 100644 --- a/src/main/scala/views/interference/operators/PostProcess.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/operators/PostProcess.scala @@ -15,15 +15,15 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.operators - -import pml.exporters.FileManager -import pml.model.configuration.TransactionLibrary -import pml.model.hardware.{Hardware, Platform} -import pml.model.software.Application -import pml.model.utils.Message -import pml.operators._ -import views.interference.operators.Analyse.ConfiguredPlatform +package onera.pmlanalyzer.views.interference.operators + +import onera.pmlanalyzer.pml.exporters.FileManager +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary +import onera.pmlanalyzer.pml.model.hardware.{Hardware, Platform} +import onera.pmlanalyzer.pml.model.software.Application +import onera.pmlanalyzer.pml.model.utils.Message +import onera.pmlanalyzer.pml.operators._ +import onera.pmlanalyzer.views.interference.operators.Analyse.ConfiguredPlatform import java.io.{File, FileWriter} import scala.concurrent.ExecutionContext.Implicits._ diff --git a/src/main/scala/views/interference/operators/Transform.scala b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Transform.scala similarity index 86% rename from src/main/scala/views/interference/operators/Transform.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/operators/Transform.scala index 1d9158f..246ea0a 100644 --- a/src/main/scala/views/interference/operators/Transform.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Transform.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.operators +package onera.pmlanalyzer.views.interference.operators -import pml.model.configuration.TransactionLibrary -import pml.model.configuration.TransactionLibrary.{UserScenarioId, UserTransactionId} -import pml.model.hardware.Platform -import pml.model.software.Application -import views.interference.model.specification.InterferenceSpecification.{PhysicalTransaction, PhysicalTransactionId} +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary +import onera.pmlanalyzer.pml.model.configuration.TransactionLibrary.{UserScenarioId, UserTransactionId} +import onera.pmlanalyzer.pml.model.hardware.Platform +import onera.pmlanalyzer.pml.model.software.Application +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification.{PhysicalTransaction, PhysicalTransactionId} private[operators] trait Transform[L,R]{ def apply(l:L):R diff --git a/src/main/scala/views/interference/operators/Transparent.scala b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Transparent.scala similarity index 89% rename from src/main/scala/views/interference/operators/Transparent.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/operators/Transparent.scala index 93608a3..b56f44b 100644 --- a/src/main/scala/views/interference/operators/Transparent.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Transparent.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference.operators +package onera.pmlanalyzer.views.interference.operators -import views.interference.model.relations.TransparentSet -import views.interference.model.specification.InterferenceSpecification.PhysicalTransactionId +import onera.pmlanalyzer.views.interference.model.relations.TransparentSet +import onera.pmlanalyzer.views.interference.model.specification.InterferenceSpecification.PhysicalTransactionId private[operators] trait Transparent[T] { def apply(x:T):Unit diff --git a/src/main/scala/views/interference/operators/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/operators/package.scala similarity index 94% rename from src/main/scala/views/interference/operators/package.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/operators/package.scala index 76e5b98..d49d3a5 100644 --- a/src/main/scala/views/interference/operators/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/operators/package.scala @@ -15,13 +15,13 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.interference +package onera.pmlanalyzer.views.interference /** * Package containing the operators related to interference computation that can be used on a PML model. * Examples are provided in [[views.interference.examples.simpleKeystone.SimpleKeystoneInterferenceGeneration]] * @note This package should be imported in all pml models as so - * {{{import views.interference.operators._}}} + * {{{import onera.pmlanalyzer.views.interference.operators._}}} * @see [[Analyse.Ops]] provides the operators related to interference computation with Monosat [[https://github.com/sambayless/monosat]] * @see [[PostProcess.Ops]] provides the operators related to the post processing of the interference computation * @see [[Interfere.Ops]] provides the operators related to interference assumptions diff --git a/src/main/scala/views/interference/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/package.scala similarity index 98% rename from src/main/scala/views/interference/package.scala rename to src/main/scala/onera/pmlanalyzer/views/interference/package.scala index 6d7073c..982b432 100644 --- a/src/main/scala/views/interference/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/package.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views +package onera.pmlanalyzer.views /** * Package containing all interference modelling and analysis features of PML diff --git a/src/main/scala/views/package.scala b/src/main/scala/onera/pmlanalyzer/views/package.scala similarity index 55% rename from src/main/scala/views/package.scala rename to src/main/scala/onera/pmlanalyzer/views/package.scala index 9f52228..dc766a7 100644 --- a/src/main/scala/views/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/package.scala @@ -1,3 +1,21 @@ +/******************************************************************************* + * Copyright (c) 2021. ONERA + * This file is part of PML Analyzer + * + * PML Analyzer is free software ; + * you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation ; + * either version 2 of the License, or (at your option) any later version. + * + * PML Analyzer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY ; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this program ; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ******************************************************************************/ + +package onera.pmlanalyzer /******************************************************************************* * Copyright (c) 2021. ONERA diff --git a/src/main/scala/views/patterns/examples/PhylogPatterns.scala b/src/main/scala/onera/pmlanalyzer/views/patterns/examples/PhylogPatterns.scala similarity index 97% rename from src/main/scala/views/patterns/examples/PhylogPatterns.scala rename to src/main/scala/onera/pmlanalyzer/views/patterns/examples/PhylogPatterns.scala index 5909945..477b4d9 100644 --- a/src/main/scala/views/patterns/examples/PhylogPatterns.scala +++ b/src/main/scala/onera/pmlanalyzer/views/patterns/examples/PhylogPatterns.scala @@ -15,11 +15,11 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.patterns.examples +package onera.pmlanalyzer.views.patterns.examples -import views.patterns.exporters.LatexCodePrinter._ -import views.patterns.exporters.LatexDiagramPrinter._ -import views.patterns.model.DSLImplicits._ +import onera.pmlanalyzer.views.patterns.exporters.LatexCodePrinter._ +import onera.pmlanalyzer.views.patterns.exporters.LatexDiagramPrinter._ +import onera.pmlanalyzer.views.patterns.model.DSLImplicits._ import scala.sys.process.Process diff --git a/src/main/scala/views/patterns/exporters/LatexCodePrinter.scala b/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/LatexCodePrinter.scala similarity index 96% rename from src/main/scala/views/patterns/exporters/LatexCodePrinter.scala rename to src/main/scala/onera/pmlanalyzer/views/patterns/exporters/LatexCodePrinter.scala index e2611ad..d26ccf2 100644 --- a/src/main/scala/views/patterns/exporters/LatexCodePrinter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/LatexCodePrinter.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.patterns.exporters +package onera.pmlanalyzer.views.patterns.exporters -import pml.exporters.FileManager -import views.patterns.model._ +import onera.pmlanalyzer.pml.exporters.FileManager +import onera.pmlanalyzer.views.patterns.model._ import java.io.{File, FileWriter} diff --git a/src/main/scala/views/patterns/exporters/LatexDiagramPrinter.scala b/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/LatexDiagramPrinter.scala similarity index 97% rename from src/main/scala/views/patterns/exporters/LatexDiagramPrinter.scala rename to src/main/scala/onera/pmlanalyzer/views/patterns/exporters/LatexDiagramPrinter.scala index 708e5e9..917e7ea 100644 --- a/src/main/scala/views/patterns/exporters/LatexDiagramPrinter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/LatexDiagramPrinter.scala @@ -15,10 +15,10 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.patterns.exporters +package onera.pmlanalyzer.views.patterns.exporters -import pml.exporters.FileManager -import views.patterns.model._ +import onera.pmlanalyzer.pml.exporters.FileManager +import onera.pmlanalyzer.views.patterns.model._ import java.io.{File, FileWriter} import java.nio.file.Paths diff --git a/src/main/scala/views/patterns/exporters/allPrinters.scala b/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/allPrinters.scala similarity index 95% rename from src/main/scala/views/patterns/exporters/allPrinters.scala rename to src/main/scala/onera/pmlanalyzer/views/patterns/exporters/allPrinters.scala index ebc28db..8d5823f 100644 --- a/src/main/scala/views/patterns/exporters/allPrinters.scala +++ b/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/allPrinters.scala @@ -15,6 +15,6 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.patterns.exporters +package onera.pmlanalyzer.views.patterns.exporters object allPrinters extends LatexCodePrinter with LatexDiagramPrinter diff --git a/src/main/scala/views/patterns/model/PatternAST.scala b/src/main/scala/onera/pmlanalyzer/views/patterns/model/PatternAST.scala similarity index 99% rename from src/main/scala/views/patterns/model/PatternAST.scala rename to src/main/scala/onera/pmlanalyzer/views/patterns/model/PatternAST.scala index 1d7d60c..b1a8dd0 100644 --- a/src/main/scala/views/patterns/model/PatternAST.scala +++ b/src/main/scala/onera/pmlanalyzer/views/patterns/model/PatternAST.scala @@ -15,7 +15,7 @@ * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -package views.patterns.model +package onera.pmlanalyzer.views.patterns.model import scala.language.implicitConversions diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/configuration/ConfigurationTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/configuration/ConfigurationTest.scala new file mode 100644 index 0000000..37da792 --- /dev/null +++ b/src/test/scala/onera/pmlanalyzer/pml/model/configuration/ConfigurationTest.scala @@ -0,0 +1,176 @@ +/******************************************************************************* + * Copyright (c) 2021. ONERA + * This file is part of PML Analyzer + * + * PML Analyzer is free software ; + * you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation ; + * either version 2 of the License, or (at your option) any later version. + * + * PML Analyzer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY ; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this program ; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ******************************************************************************/ + +package onera.pmlanalyzer.pml.model.configuration + +import onera.pmlanalyzer.pml.model.hardware.* +import onera.pmlanalyzer.pml.model.service.* +import onera.pmlanalyzer.pml.model.software.* +import onera.pmlanalyzer.pml.operators._ +import onera.pmlanalyzer.pml.exporters._ +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should +import org.scalatestplus.scalacheck.ScalaCheckPropertyChecks +import sourcecode.Name + +class ConfigurationTest extends AnyFlatSpec with ScalaCheckPropertyChecks with should.Matchers{ + + /** + * Architecture of the graph formulation of https://www.overleaf.com/project/5efb44712eb0ec00010737b3 + */ + object ConfigurationFixture extends Platform(Symbol("fixture")) + with ApplicationTest + with LoadTest + with StoreTest + with TargetTest + with SimpleTransporterTest + with SmartTest { + val configName: Symbol = "conf" + + val dma1: Initiator = Initiator() + + val smart1: Core = new Core() + val smart2: Core = new Core() + + class Core(name: Symbol) extends Composite(name) { + + val core: Initiator = Initiator() + val cache: Target = Target() + val cpu: SimpleTransporter = SimpleTransporter() + + core link cpu + cpu link cache + + def this()(implicit name:Name) = { + this(name.value) + } + } + val pamu: Virtualizer = Virtualizer() + val mem1: Target = Target() + val mem2: Target = Target() + val pcie: Target = Target() + val bus: SimpleTransporter = SimpleTransporter() + + smart1.core link bus + smart2.core link bus + dma1 link pamu + pamu link bus + bus link mem1 + bus link mem2 + bus link pcie + + //add direct access of dma to caches + pamu link smart1.cache + pamu link smart2.cache + + val appSmart1: Application = Application() + val appSmart21: Application = Application() + val dmaDescriptor: Application = Application() + val appSmart22:Application = Application() + + val dataMem1: Data = Data() + val dataMem2: Data = Data() + + dataMem1 hostedBy mem1 + dataMem2 hostedBy mem2 + + appSmart1 hostedBy smart1.core + appSmart21 hostedBy smart2.core + appSmart22 hostedBy smart2.core + + appSmart1 read dataMem1 + appSmart21 write dataMem1 + appSmart22 read dataMem2 + + + + //WARNING THE USAGE OF COPIES BY DESCRIPTOR MUST BE DONE AFTER SPECIFYING THEM + dmaDescriptor hostedBy dma1 + dmaDescriptor read dataMem1 + dmaDescriptor write smart1.cache + dmaDescriptor read dataMem2 + dmaDescriptor write smart2.cache + + //THIS ROUTE IS VOLUNTARY IMPOSSIBLE SINCE BUS CANNOT ACCESS TO CACHES + dma1 targeting smart1.cache useLink pamu to bus + dma1 targeting smart2.cache useLink pamu to smart2.cache + + } + + import ConfigurationFixture.* + + ConfigurationFixture.exportRestrictedServiceAndSWGraph() + ConfigurationFixture.exportRestrictedHWAndSWGraph() + ConfigurationFixture.exportHWAndSWGraph() + + "A configured platform" should "encode the used relation properly" in { + + appSmart1.targetLoads shouldBe mem1.loads + appSmart1.targetStores shouldBe Set.empty + appSmart1.hostingInitiators shouldBe Set(smart1.core) + + appSmart21.targetStores shouldBe mem1.stores + appSmart21.targetLoads shouldBe empty + appSmart21.hostingInitiators shouldBe Set(smart2.core) + + appSmart22.targetLoads shouldBe mem2.loads + appSmart22.targetStores shouldBe empty + appSmart22.hostingInitiators shouldBe Set(smart2.core) + + dmaDescriptor.hostingInitiators shouldBe Set(dma1) + dmaDescriptor.targetLoads shouldBe (dataMem1.loads and dataMem2.loads) + dmaDescriptor.targetStores shouldBe (smart1.cache.stores and smart2.cache.stores) + } + + it should "encode the routing relation properly" in { + for (st <- smart1.cache.stores; on <- pamu.stores) { + InitiatorRouting.get((dma1,st,on)) shouldBe defined + InitiatorRouting((dma1,st,on)) shouldBe bus.stores + } + for (st <- smart2.cache.stores; on <- pamu.stores) { + InitiatorRouting.get((dma1,st,on)) shouldBe defined + InitiatorRouting((dma1,st,on)) shouldBe smart2.cache.stores + } + } + + it should "derive the used transaction properly" in { + transactionsBySW(appSmart1).size shouldBe 1 + mem1.loads should contain(transactionsByName(transactionsBySW(appSmart1).head).last) + transactionsBySW(appSmart21).size shouldBe 1 + transactionsBySW(appSmart22).size shouldBe 1 + //One transaction is missing + transactionsBySW(dmaDescriptor).size shouldBe 3 + } + + it should "detect cyclic service paths" in { + } + + it should "detect multiple routes" in { + for (a <- ConfigurationFixture.applications) + Used.checkMultiPaths(transactionsBySW(a).map(transactionsByName)) shouldBe empty + } + + it should "detect impossible service accesses " in { + for (a <- Set(appSmart1,appSmart21,appSmart22)) + Used.checkImpossible(transactionsBySW(a).map(transactionsByName), a.targetService, Some(a)) shouldBe empty + Used.checkImpossible(transactionsBySW(dmaDescriptor).map(transactionsByName), dmaDescriptor.targetService, Some(dmaDescriptor)).size shouldBe 1 + } + + ConfigurationFixture.exportRestrictedHWAndSWGraph() + + +} diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/configuration/TransactionLibraryTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/configuration/TransactionLibraryTest.scala new file mode 100644 index 0000000..b9a12ab --- /dev/null +++ b/src/test/scala/onera/pmlanalyzer/pml/model/configuration/TransactionLibraryTest.scala @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2021. ONERA + * This file is part of PML Analyzer + * + * PML Analyzer is free software ; + * you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation ; + * either version 2 of the License, or (at your option) any later version. + * + * PML Analyzer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY ; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this program ; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ******************************************************************************/ + +package onera.pmlanalyzer.pml.model.configuration + +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should +import org.scalatestplus.scalacheck.ScalaCheckPropertyChecks + +class TransactionLibraryTest extends AnyFlatSpec with ScalaCheckPropertyChecks with should.Matchers { + + "A transaction library" should "detect physical transaction with multiple names" in { + + } + + it should "detect the physical transaction without names" in { + + } + + it should "detect impossible user transaction" in { + + } + + it should "encode properly the relation between user and physical transactions" in { + + } + +} diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/hardware/PlatformTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/PlatformTest.scala new file mode 100644 index 0000000..de57fc3 --- /dev/null +++ b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/PlatformTest.scala @@ -0,0 +1,153 @@ +/******************************************************************************* + * Copyright (c) 2021. ONERA + * This file is part of PML Analyzer + * + * PML Analyzer is free software ; + * you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation ; + * either version 2 of the License, or (at your option) any later version. + * + * PML Analyzer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY ; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this program ; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ******************************************************************************/ + +package onera.pmlanalyzer.pml.model.hardware + +import onera.pmlanalyzer.pml.model.service.* +import onera.pmlanalyzer.pml.model.software.* +import onera.pmlanalyzer.pml.model.hardware.* +import onera.pmlanalyzer.pml.operators._ +import org.scalacheck.Gen +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should +import org.scalatestplus.scalacheck.ScalaCheckPropertyChecks + +import scala.reflect.* + +class PlatformTest extends AnyFlatSpec with ScalaCheckPropertyChecks with should.Matchers { + + override implicit val generatorDrivenConfig: PropertyCheckConfiguration = + PropertyCheckConfiguration(minSuccessful = 200) + + object PlatformFixture extends Platform(Symbol("fixture")) + with ApplicationTest + with LoadTest + with StoreTest + with TargetTest + with SimpleTransporterTest + with SmartTest + + import PlatformFixture.* + + private def testBasics[T <: Hardware : Typeable](x: T, loads: List[Load], stores: List[Store]) = { + if (loads.nonEmpty) + x.loads shouldBe loads.toSet + else + x.loads shouldBe Set(Load(Symbol(s"${x}_load"))) + if (stores.nonEmpty) + x.stores shouldBe stores.toSet + else + x.stores shouldBe Set(Store(Symbol(s"${x}_store"))) + } + + "A platform" should "contains all applications" in { + forAll { + (x: Application) => assert(Application.all.contains(x)) + } + } + + it should "retrieve composite properly" in { + forAll ("name") { + (name:Symbol) => whenever(Composite.all.forall(_.name!=name)){ + val CompositeTest = new Composite(name) {} + //redundant ownership test but enforce object initialization + CompositeTest.owner shouldBe currentOwner + assert(Composite.all.contains(CompositeTest)) + } + } + } + + it should "retrieve smart services properly" in { + forAll ("name","stores", "loads") { + (name: Symbol, stores: List[Store], loads: List[Load]) => { + whenever(Initiator.all.forall(_.name != Initiator.formatName(name, currentOwner))) { + val smart = Initiator(name, (loads ++ stores).toSet) + testBasics(smart, loads, stores) + Initiator.all should contain(smart) + } + } + } + } + + it should "retrieve target services properly" in { + forAll ("name","stores", "loads") { + (name: Symbol, stores: List[Store], loads: List[Load]) => { + whenever(Target.all.forall(_.name != Target.formatName(name,currentOwner))) { + val target = Target(name, (loads ++ stores).toSet) + testBasics(target, loads, stores) + Target.all should contain(target) + } + } + } + } + + it should "retrieve simple transporter services properly" in { + forAll ("name","stores", "loads") { + (name: Symbol, stores: List[Store], loads: List[Load]) => { + whenever(SimpleTransporter.all.forall(_.name != SimpleTransporter.formatName(name,currentOwner))) { + val transporter = SimpleTransporter(name, (loads ++ stores).toSet) + testBasics(transporter, loads, stores) + SimpleTransporter.all should contain(transporter) + } + } + } + } + + it should "retrieve virtualizer services properly" in { + forAll ("name","stores", "loads") { + (name: Symbol, stores: List[Store], loads: List[Load]) => { + whenever(Virtualizer.all.forall(_.name != Virtualizer.formatName(name,currentOwner))) { + val virtualizer = Virtualizer(name, (loads ++ stores).toSet) + testBasics(virtualizer, loads, stores) + Virtualizer.all should contain(virtualizer) + } + } + } + } + + it should "encode links and unlink properly" in { + forAll((Gen.oneOf(Initiator.all), "smart"), (Gen.oneOf(Target.all), "target"), (Gen.oneOf(SimpleTransporter.all), "transporter")) { + (smart, target, transporter) => { + smart link transporter + transporter link target + for (ss <- smart.stores) assert(transporter.stores.subsetOf(ss.linked)) + for (ss <- smart.loads) assert(transporter.loads.subsetOf(ss.linked)) + for (ss <- transporter.stores) assert(target.stores.subsetOf(ss.linked)) + for (ss <- transporter.loads) assert(target.loads.subsetOf(ss.linked)) + smart unlink transporter + for (ss <- smart.stores) ss.linked.intersect(transporter.stores) shouldBe empty + for (ss <- smart.loads) ss.linked.intersect(transporter.loads) shouldBe empty + transporter unlink target + for(ss <- transporter.stores) ss.linked.intersect(target.stores) shouldBe empty + for(ss <- transporter.loads) ss.linked.intersect(target.loads) shouldBe empty + } + } + } + + it should "encode deactivation properly" in { + forAll((Gen.oneOf(Initiator.all), "smart"), (Gen.oneOf(Target.all), "target"), (Gen.oneOf(SimpleTransporter.all), "transporter")) { + (smart, target, transporter) => { + smart.deactivated + smart.services shouldBe empty + transporter.deactivated + transporter.services shouldBe empty + target.deactivated + target.services shouldBe empty + } + } + } +} \ No newline at end of file diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/hardware/SimpleTransporterTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/SimpleTransporterTest.scala new file mode 100644 index 0000000..72dd8d2 --- /dev/null +++ b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/SimpleTransporterTest.scala @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2021. ONERA + * This file is part of PML Analyzer + * + * PML Analyzer is free software ; + * you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation ; + * either version 2 of the License, or (at your option) any later version. + * + * PML Analyzer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY ; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this program ; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ******************************************************************************/ + +package onera.pmlanalyzer.pml.model.hardware + +import onera.pmlanalyzer.pml.model.service.{LoadTest, StoreTest} +import org.scalacheck.{Arbitrary, Gen} + +trait SimpleTransporterTest { + self:Platform with LoadTest with StoreTest => + + implicit val genSimpleTransporter:Arbitrary[SimpleTransporter] = Arbitrary( + for{ + name <- Gen.identifier + loads <- Gen.listOfN(3,genLoad.arbitrary).suchThat(_.nonEmpty) + stores <- Gen.listOfN(3,genStore.arbitrary).suchThat(_.nonEmpty) + } yield SimpleTransporter(name,(loads ++ stores).toSet) + ) +} diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/hardware/SmartTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/SmartTest.scala new file mode 100644 index 0000000..c181b30 --- /dev/null +++ b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/SmartTest.scala @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2021. ONERA + * This file is part of PML Analyzer + * + * PML Analyzer is free software ; + * you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation ; + * either version 2 of the License, or (at your option) any later version. + * + * PML Analyzer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY ; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this program ; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ******************************************************************************/ + +package onera.pmlanalyzer.pml.model.hardware + +import onera.pmlanalyzer.pml.model.service.{LoadTest, StoreTest} +import org.scalacheck.{Arbitrary, Gen} + +trait SmartTest { + self:Platform with LoadTest with StoreTest => + + implicit val genSmart: Arbitrary[Initiator] = Arbitrary( + for { + name <- Gen.identifier + loads <- Gen.listOfN(3, genLoad.arbitrary).suchThat(_.nonEmpty) + stores <- Gen.listOfN(3, genStore.arbitrary).suchThat(_.nonEmpty) + } yield Initiator(name, (loads ++ stores).toSet) + ) +} diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/hardware/TargetTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/TargetTest.scala new file mode 100644 index 0000000..6a73097 --- /dev/null +++ b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/TargetTest.scala @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2021. ONERA + * This file is part of PML Analyzer + * + * PML Analyzer is free software ; + * you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation ; + * either version 2 of the License, or (at your option) any later version. + * + * PML Analyzer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY ; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this program ; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ******************************************************************************/ + +package onera.pmlanalyzer.pml.model.hardware + +import onera.pmlanalyzer.pml.model.service.{LoadTest, StoreTest} +import org.scalacheck.{Arbitrary, Gen} + +trait TargetTest { + self:Platform with LoadTest with StoreTest=> + + implicit val genTarget:Arbitrary[Target] = Arbitrary( + for { + name <- Gen.identifier + loads <- Gen.listOfN(3,genLoad.arbitrary).suchThat(_.nonEmpty) + stores <- Gen.listOfN(3,genStore.arbitrary).suchThat(_.nonEmpty) + } yield Target(name,(loads ++ stores).toSet) + ) +} diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/hardware/VirtualizerTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/VirtualizerTest.scala new file mode 100644 index 0000000..a2652a1 --- /dev/null +++ b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/VirtualizerTest.scala @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2021. ONERA + * This file is part of PML Analyzer + * + * PML Analyzer is free software ; + * you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation ; + * either version 2 of the License, or (at your option) any later version. + * + * PML Analyzer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY ; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this program ; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ******************************************************************************/ + +package onera.pmlanalyzer.pml.model.hardware + +import onera.pmlanalyzer.pml.model.service.{LoadTest, StoreTest} +import org.scalacheck.{Arbitrary, Gen} + +trait VirtualizerTest { + self:Platform with LoadTest with StoreTest => + + implicit val genVirtualizer: Arbitrary[Virtualizer] = Arbitrary( + for{ + name <- Gen.identifier + loads <- Gen.listOfN(3,genLoad.arbitrary).suchThat(_.nonEmpty) + stores <- Gen.listOfN(3,genStore.arbitrary).suchThat(_.nonEmpty) + } yield Virtualizer(name, (loads ++ stores).toSet) + ) +} diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/service/ArtificialServiceTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/service/ArtificialServiceTest.scala new file mode 100644 index 0000000..b6ef7ca --- /dev/null +++ b/src/test/scala/onera/pmlanalyzer/pml/model/service/ArtificialServiceTest.scala @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2021. ONERA + * This file is part of PML Analyzer + * + * PML Analyzer is free software ; + * you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation ; + * either version 2 of the License, or (at your option) any later version. + * + * PML Analyzer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY ; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this program ; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ******************************************************************************/ + +package onera.pmlanalyzer.pml.model.service + +import org.scalacheck.{Arbitrary, Gen} +import onera.pmlanalyzer.pml.model.hardware.Platform + +trait ArtificialServiceTest { + self:Platform => + + val genArtificialService: Arbitrary[ArtificialService] = Arbitrary(for { + name <- Gen.identifier + } yield ArtificialService(name)) +} diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/service/LoadTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/service/LoadTest.scala new file mode 100644 index 0000000..cc189a1 --- /dev/null +++ b/src/test/scala/onera/pmlanalyzer/pml/model/service/LoadTest.scala @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2021. ONERA + * This file is part of PML Analyzer + * + * PML Analyzer is free software ; + * you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation ; + * either version 2 of the License, or (at your option) any later version. + * + * PML Analyzer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY ; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this program ; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ******************************************************************************/ + +package onera.pmlanalyzer.pml.model.service + +import org.scalacheck.{Arbitrary, Gen} +import onera.pmlanalyzer.pml.model.hardware.Platform + +trait LoadTest { + self:Platform => + + implicit val genLoad: Arbitrary[Load] = Arbitrary(for { + name <- Gen.identifier + } yield Load(name)) + +} diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/service/StoreTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/service/StoreTest.scala new file mode 100644 index 0000000..5e7cffc --- /dev/null +++ b/src/test/scala/onera/pmlanalyzer/pml/model/service/StoreTest.scala @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2021. ONERA + * This file is part of PML Analyzer + * + * PML Analyzer is free software ; + * you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation ; + * either version 2 of the License, or (at your option) any later version. + * + * PML Analyzer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY ; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this program ; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ******************************************************************************/ + +package onera.pmlanalyzer.pml.model.service + +import org.scalacheck.{Arbitrary, Gen} +import onera.pmlanalyzer.pml.model.hardware.Platform +trait StoreTest { + self: Platform => + + implicit val genStore: Arbitrary[Store] = Arbitrary( + for { + name <- Gen.identifier + } yield Store(name) + ) + +} diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/software/ApplicationTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/software/ApplicationTest.scala new file mode 100644 index 0000000..185f3bf --- /dev/null +++ b/src/test/scala/onera/pmlanalyzer/pml/model/software/ApplicationTest.scala @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2021. ONERA + * This file is part of PML Analyzer + * + * PML Analyzer is free software ; + * you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation ; + * either version 2 of the License, or (at your option) any later version. + * + * PML Analyzer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY ; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this program ; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ******************************************************************************/ + +package onera.pmlanalyzer.pml.model.software + +import org.scalacheck.{Arbitrary, Gen} +import onera.pmlanalyzer.pml.model.hardware.Platform + +trait ApplicationTest { + self: Platform => + implicit val genApplication: Arbitrary[Application] = Arbitrary(for { + name <- Gen.identifier + } yield Application(name) + ) +} + diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/software/DataTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/software/DataTest.scala new file mode 100644 index 0000000..8e4ee90 --- /dev/null +++ b/src/test/scala/onera/pmlanalyzer/pml/model/software/DataTest.scala @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2021. ONERA + * This file is part of PML Analyzer + * + * PML Analyzer is free software ; + * you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation ; + * either version 2 of the License, or (at your option) any later version. + * + * PML Analyzer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY ; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this program ; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ******************************************************************************/ + +package onera.pmlanalyzer.pml.model.software + +import org.scalacheck.{Arbitrary, Gen} +import onera.pmlanalyzer.pml.model.hardware.Platform + +trait DataTest { + self:Platform => + + implicit val genData:Arbitrary[Data] = Arbitrary( + for{ + name <- Gen.identifier + } yield Data(name) + ) +} diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/utils/OwnerTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/utils/OwnerTest.scala new file mode 100644 index 0000000..3834e74 --- /dev/null +++ b/src/test/scala/onera/pmlanalyzer/pml/model/utils/OwnerTest.scala @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2021. ONERA + * This file is part of PML Analyzer + * + * PML Analyzer is free software ; + * you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation ; + * either version 2 of the License, or (at your option) any later version. + * + * PML Analyzer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY ; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this program ; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ******************************************************************************/ + +package onera.pmlanalyzer.pml.model.utils + +import org.scalacheck.{Arbitrary, Gen} + +trait OwnerTest { + + implicit val genOwner: Arbitrary[Owner] = Arbitrary(for { + name <- Gen.identifier + } yield Owner(Symbol(name))) + +} From 3d522e3c6332719673b32a963a9168e03ecc9396 Mon Sep 17 00:00:00 2001 From: kevin-delmas Date: Mon, 13 Nov 2023 17:09:35 +0100 Subject: [PATCH 4/7] solving #2 issue: set up new version --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 1bb0bba..98116df 100644 --- a/build.sbt +++ b/build.sbt @@ -98,7 +98,7 @@ lazy val commonSettings = Seq( crossPaths := false, publishTo := Some("releases" at "https://s01.oss.sonatype.org/" + "service/local/staging/deploy/maven2"), publishMavenStyle := true, - version := "1.0.0", + version := "1.0.1", scalaVersion := "3.2.2", sbtVersion := "1.8.2", scalacOptions := Seq("-unchecked", "-deprecation", "-feature"), From a939eddd63c9be53a186d8865b713aaae6a74681 Mon Sep 17 00:00:00 2001 From: kevin-delmas Date: Wed, 15 Nov 2023 10:59:23 +0100 Subject: [PATCH 5/7] add a first version of the pull request template --- .github/pull_request_template.md | 71 ++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..18a327e --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,71 @@ +## Description + + + +## What type of PR is this? (check all applicable) + +- [ ] 🍕 Feature +- [ ] 🐛 Bug Fix +- [ ] 📝 Documentation Update +- [ ] 🎨 Style +- [ ] 🧑‍💻 Code Refactor +- [ ] 🔥 Performance Improvements +- [ ] ✅ Test +- [ ] 🤖 Build +- [ ] 🔁 CI +- [ ] 📦 Chore (Release) +- [ ] ⏩ Revert + +## Related Tickets & Documents + + +## Mobile & Desktop Screenshots/Recordings + + + + +## Added tests? + +- [ ] 👍 yes +- [ ] 🙅 no, because they aren't needed +- [ ] 🙋 no, because I need help + +## Added to documentation? + +- [ ] 📜 README.md +- [ ] 📓 docs.opensauced.pizza +- [ ] 🍕 dev.to/opensauced +- [ ] 📕 storybook +- [ ] 🙅 no documentation needed + +## [optional] Are there any post-deployment tasks we need to perform? + + + +## [optional] What gif best describes this PR or how it makes you feel? + + + + + + From f578dcd5234495f51f5166ea6d228723e064124d Mon Sep 17 00:00:00 2001 From: kevin-delmas Date: Fri, 17 Nov 2023 14:50:08 +0100 Subject: [PATCH 6/7] solving #2 issue: add PR template and contributing.md to answer requests for PR #4 --- .github/pull_request_template.md | 93 +++++++++++++------------------- README.md | 45 +++++++--------- contributing.md | 90 +++++++++++++++++++++++++++++++ 3 files changed, 147 insertions(+), 81 deletions(-) create mode 100644 contributing.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 18a327e..fdd42ae 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,71 +1,52 @@ ## Description - - -## What type of PR is this? (check all applicable) - -- [ ] 🍕 Feature -- [ ] 🐛 Bug Fix -- [ ] 📝 Documentation Update -- [ ] 🎨 Style -- [ ] 🧑‍💻 Code Refactor -- [ ] 🔥 Performance Improvements -- [ ] ✅ Test -- [ ] 🤖 Build -- [ ] 🔁 CI -- [ ] 📦 Chore (Release) -- [ ] ⏩ Revert +Please indicate whether this pull request [adds/removes/fixes/replaces] the [feature/bug/etc]. + +## What type of pull request is this? (check all applicable) + +- [ ] Feature +- [ ] Bug Fix +- [ ] Documentation Update +- [ ] Style +- [ ] Code Refactor +- [ ] Performance Improvements +- [ ] Test +- [ ] Build +- [ ] CI +- [ ] Chore (Release) +- [ ] Revert ## Related Tickets & Documents - - -## Mobile & Desktop Screenshots/Recordings - - +If possible ensure that you have provided in your commit message the issue id (available [here](https://github.com/onera/pml-analyzer/issues)) this pull request fixes, +for instance to refer to issue #42 you can do: +```shell +git commit -m "solving issue #42 with ..." +``` +Check [here](https://docs.github.com/en/free-pro-team@latest/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword) for more information ## Added tests? -- [ ] 👍 yes -- [ ] 🙅 no, because they aren't needed -- [ ] 🙋 no, because I need help +- [ ] yes +- [ ] no, because they aren't needed +- [ ] no, because I need help ## Added to documentation? -- [ ] 📜 README.md -- [ ] 📓 docs.opensauced.pizza -- [ ] 🍕 dev.to/opensauced -- [ ] 📕 storybook -- [ ] 🙅 no documentation needed - -## [optional] Are there any post-deployment tasks we need to perform? - - - -## [optional] What gif best describes this PR or how it makes you feel? +- [ ] README.md +- [ ] doc +- [ ] no documentation needed +## Do we need to update pml analyzer version? +- [ ] no +- [ ] the pull request is only a bug fix, need a bug fix version update +- [ ] the pull request add new features and ensures retro-compatibility, need a feature addition version update +- [ ] the pull request is not ensuring retro-capatibility, need a major version update +- [ ] not sure, I need help - +## Is this new version should be released as soon as possible? - +- [ ] yes +- [ ] no +- [ ] not sure, I need help diff --git a/README.md b/README.md index 9d74ab1..c8e5373 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,9 @@ The only dependencies of the PML analyzer are: ### build.sbt -To get pml analyzer simply add the following line to your build.sbt file: +To get the version X.Y.Z of pml analyzer simply add the following line to your build.sbt file: ```scala -libraryDependencies += "io.github.onera" % "pml_analyzer" % "1.0.0" +libraryDependencies += "io.github.onera" % "pml_analyzer" % "X.Y.Z" ``` ## Installing dependencies @@ -45,6 +45,13 @@ java -jar -Djava.library.path=yourPath sbt-launch.jar # to run a JAR java -jar -Djava.library.path=yourPath youJar.jar ``` +### Cecilia + +It is possible to export PML models as [CeciliaOCAS](https://satodev.com/nos-produits/cecilia-workshop/) or [OpenAltarica](https://www.openaltarica.fr/docs-downloads/) models and perform automatic analyses or simulation out of these models. + +### IDP + +It is possible to use [IDP](https://dtai.cs.kuleuven.be/software/idp/try) as an alternative to MONOSAT to perform the interference analyses out of your PML model. ## Using the PML analyzer @@ -60,14 +67,10 @@ or unlinking entities) are provided in the ``pml.operators`` package. Exporters to [yuml](https://yuml.me/diagram) and [graphviz](http://www.graphviz.org/) are provided in the ``pml.exporters`` package. The compilation of a PML model can be easily perform with [SBT](https://www.scala-sbt.org/) -+ First launch sbt in the project repository (this operation may take some time) -```sbtshell - sbt +Simply run the following command in the project repository (this operation may take some time) +```shell + sbt runMain pathToYourModel ``` -+ Once sbt is ready to receive command launch the compilation and execution of your PML model -```sbtshell - runMain pathToYourModel - ``` ### Editing a PML Model @@ -84,8 +87,8 @@ your modeling activity. To edit PML model with Intellij please follow the installation steps given by [JetBrain](https://www.jetbrains.com). The installation can be made for any platform and does not require any administrator privilege. -Once the Intellij is installed please download the Scala and SBT Executor plugins. - +Once the Intellij IDE is installed please download the Scala and SBT Executor plugins. +More information are available on the [Intellij Scala 3 support guide](https://dotty.epfl.ch/3.0.0/docs/usage/ide-support.html) #### Creating a project with Intellij The build specifications and project structure are provided with the PML source code. @@ -110,7 +113,7 @@ dynamic library of monosat by editing your run configuration and adding to VM op #### Argumentation patterns -The justification patterns considered for the CAST32-A are provided in the ``views.patterns`` package. +The justification patterns considered for the AMC20-193 (former CAST32-A) are provided in the ``views.patterns`` package. These patterns can be used as a starting point to start your argumentation activity. To compile and run the PHYLOG patterns example please enter the following commands: @@ -125,7 +128,7 @@ your modeling activity. To compile and run the Keystone example please enter the following commands: ```sbtshell - sbt runMain pml.examples.keystone.SimpleKeystoneExport + sbt runMain pml.examples.simpleKeystone.SimpleKeystoneExport ``` #### Analysis @@ -133,8 +136,8 @@ For each view (interference, patterns and dependability) examples are provided i These benchmarks can be used as a starting point to your analysis activity. For instance, we can carry out the interference analysis of the Keystone platform with ```sbtshell - # example of a PML model where an IDP interference model is generated - sbt runMain views.interference.examples.SimpleKeystoneInterferenceGeneration + # example of a PML model where a MONOSAT based interference identification is performed + sbt runMain views.interference.examples.simpleKeystone.SimpleKeystoneInterferenceGeneration ``` If the tool is running on a Unix System you can use the Makefile to compile the DOT and LaTeX generated file: @@ -149,7 +152,7 @@ make patterns make png ``` -### Packaging +### Package your model All projects can be packaged into a single FATJAR containing all non-native dependencies. The available projects can be obtained by running: @@ -166,12 +169,4 @@ The resulting FATJAR will be produced in projectName/target/scala3.2.2 If your system contains a docker engine, you can build a docker image by running the following command: ```sbtshell sbt docker -``` - -### External tools - -The PML modeling does not rely on any external dependency. Nevertheless, it is possible -to connect some backend analysis tools to directly perform analyses out of your PML model: - * for interference analysis: [IDP](https://dtai.cs.kuleuven.be/software/idp/try) or [Monosat](https://github.com/sambayless/monosat) - * for the safety analysis: [CeciliaOCAS]() or [OpenAltarica](https://www.openaltarica.fr/docs-downloads/) - +``` \ No newline at end of file diff --git a/contributing.md b/contributing.md new file mode 100644 index 0000000..79c6c25 --- /dev/null +++ b/contributing.md @@ -0,0 +1,90 @@ +# Contributing + +When contributing to this repository, please first discuss the change you wish to make via issue, +email, or any other method with the owners of this repository before making a change. + +## Pull Request Process + +1. Fork, then clone the repo: +```shell +git clone git@github.com:your-username/pml-analyzer.git +``` +2. See README.md to set up your machine. +3. Make sure the tests pass: +```shell +sbt test +``` +4. Make your change and please follow the [Scala 3 coding and documentation style guide](https://docs.scala-lang.org/style/). +5. Add tests for your change. Make the tests pass: +```shell +sbt test +``` +6. Update the README.md with details of changes to the API or the analysis process. +7. Increase the version numbers in any examples files, the README.md and the build.sbt to the new version that this + Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/). +```scala +//Change version in build.sbt +version := "X.Y.Z" +``` +8. You may merge the Pull Request in once you have the sign-off of two other developers, or if you + do not have permission to do that, you may request the second reviewer to merge it for you. + +## Code of Conduct + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +### Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +### Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +### Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +### Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ \ No newline at end of file From 083408517328a4c1f33ef82eb603133e4c1e5467 Mon Sep 17 00:00:00 2001 From: kevin-delmas Date: Tue, 21 Nov 2023 15:04:21 +0100 Subject: [PATCH 7/7] Fixing issue #6: Updating the copyright --- src/main/scala/onera/pmlanalyzer/pml/examples/package.scala | 2 +- .../pml/examples/simpleKeystone/SimpleKeystoneExport.scala | 2 +- .../simpleKeystone/SimpleKeystoneLibraryConfiguration.scala | 2 +- .../simpleKeystone/SimpleKeystoneLibraryConfigurationFull.scala | 2 +- .../simpleKeystone/SimpleKeystoneLibraryConfigurationNoL1.scala | 2 +- .../SimpleKeystoneLibraryConfigurationPlanApp21.scala | 2 +- .../SimpleKeystoneLibraryConfigurationPlanApp22.scala | 2 +- .../pml/examples/simpleKeystone/SimpleKeystonePlatform.scala | 2 +- .../simpleKeystone/SimpleKeystoneTransactionLibrary.scala | 2 +- .../examples/simpleKeystone/SimpleRoutingConfiguration.scala | 2 +- .../pml/examples/simpleKeystone/SimpleSoftwareAllocation.scala | 2 +- .../onera/pmlanalyzer/pml/examples/simpleKeystone/package.scala | 2 +- .../pml/examples/simpleT1042/SimpleRoutingConfiguration.scala | 2 +- .../pml/examples/simpleT1042/SimpleSoftwareAllocation.scala | 2 +- .../pml/examples/simpleT1042/SimpleT1042Export.scala | 2 +- .../examples/simpleT1042/SimpleT1042LibraryConfiguration.scala | 2 +- .../simpleT1042/SimpleT1042LibraryConfigurationFull.scala | 2 +- .../simpleT1042/SimpleT1042LibraryConfigurationNoL1.scala | 2 +- .../simpleT1042/SimpleT1042LibraryConfigurationPlanApp21.scala | 2 +- .../simpleT1042/SimpleT1042LibraryConfigurationPlanApp22.scala | 2 +- .../pml/examples/simpleT1042/SimpleT1042Platform.scala | 2 +- .../examples/simpleT1042/SimpleT1042TransactionLibrary.scala | 2 +- .../onera/pmlanalyzer/pml/examples/simpleT1042/package.scala | 2 +- .../scala/onera/pmlanalyzer/pml/exporters/FileManager.scala | 2 +- .../onera/pmlanalyzer/pml/exporters/RelationExporter.scala | 2 +- .../scala/onera/pmlanalyzer/pml/exporters/UMLExporter.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/exporters/package.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/model/PMLNode.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/model/PMLNodeBuilder.scala | 2 +- .../pml/model/configuration/TransactionLibrary.scala | 2 +- .../onera/pmlanalyzer/pml/model/configuration/package.scala | 2 +- .../pml/model/hardware/BaseHardwareNodeBuilder.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/hardware/Composite.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/hardware/Hardware.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/hardware/Initiator.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/hardware/Platform.scala | 2 +- .../pmlanalyzer/pml/model/hardware/SimpleTransporter.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/hardware/Target.scala | 2 +- .../onera/pmlanalyzer/pml/model/hardware/Transporter.scala | 2 +- .../onera/pmlanalyzer/pml/model/hardware/Virtualizer.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/hardware/package.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/model/package.scala | 2 +- .../model/relations/AntiReflexiveSymmetricEndomorphism.scala | 2 +- .../pmlanalyzer/pml/model/relations/AuthorizeRelation.scala | 2 +- .../onera/pmlanalyzer/pml/model/relations/Endomorphism.scala | 2 +- .../onera/pmlanalyzer/pml/model/relations/LinkRelation.scala | 2 +- .../onera/pmlanalyzer/pml/model/relations/ProvideRelation.scala | 2 +- .../pml/model/relations/ReflexiveSymmetricEndomorphism.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/relations/Relation.scala | 2 +- .../onera/pmlanalyzer/pml/model/relations/RoutingRelation.scala | 2 +- .../onera/pmlanalyzer/pml/model/relations/UseRelation.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/relations/package.scala | 2 +- .../onera/pmlanalyzer/pml/model/service/ArtificialService.scala | 2 +- .../pmlanalyzer/pml/model/service/BaseServiceBuilder.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/model/service/Load.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/service/Service.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/model/service/Store.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/service/package.scala | 2 +- .../onera/pmlanalyzer/pml/model/software/Application.scala | 2 +- .../pml/model/software/BaseSoftwareNodeBuilder.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/model/software/Data.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/software/package.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/model/utils/Message.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/model/utils/Owner.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/model/utils/package.scala | 2 +- .../scala/onera/pmlanalyzer/pml/operators/AsTransaction.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/operators/Deactivate.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/operators/Link.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/operators/Linked.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/operators/Merge.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/operators/Provided.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/operators/Restrict.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/operators/Route.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/operators/Use.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/operators/Used.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/operators/package.scala | 2 +- src/main/scala/onera/pmlanalyzer/pml/package.scala | 2 +- .../pmlanalyzer/views/dependability/executor/Scheduler.scala | 2 +- .../pmlanalyzer/views/dependability/executor/Simulator.scala | 2 +- .../pmlanalyzer/views/dependability/executor/Synchronize.scala | 2 +- .../dependability/exporters/AutomatonCeciliaExporter.scala | 2 +- .../dependability/exporters/BasicOperationCeciliaExporter.scala | 2 +- .../views/dependability/exporters/CeciliaExporter.scala | 2 +- .../views/dependability/exporters/ExprCeciliaExporter.scala | 2 +- .../pmlanalyzer/views/dependability/exporters/Folder.scala | 2 +- .../views/dependability/exporters/GenericImage.scala | 2 +- .../onera/pmlanalyzer/views/dependability/exporters/Model.scala | 2 +- .../views/dependability/exporters/PhylogFolder.scala | 2 +- .../views/dependability/exporters/PlatformCeciliaExporter.scala | 2 +- .../views/dependability/exporters/SoftwareCeciliaExporter.scala | 2 +- .../views/dependability/exporters/SystemCeciliaExporter.scala | 2 +- .../views/dependability/exporters/TargetCeciliaExporter.scala | 2 +- .../dependability/exporters/TransporterCeciliaExporter.scala | 2 +- .../views/dependability/exporters/TypeCeciliaExporter.scala | 2 +- .../pmlanalyzer/views/dependability/exporters/package.scala | 2 +- .../onera/pmlanalyzer/views/dependability/model/Component.scala | 2 +- .../onera/pmlanalyzer/views/dependability/model/Copy.scala | 2 +- .../pmlanalyzer/views/dependability/model/CustomTypes.scala | 2 +- .../onera/pmlanalyzer/views/dependability/model/Direction.scala | 2 +- .../pmlanalyzer/views/dependability/model/EnumFailureMode.scala | 2 +- .../onera/pmlanalyzer/views/dependability/model/Event.scala | 2 +- .../onera/pmlanalyzer/views/dependability/model/Fire.scala | 2 +- .../scala/onera/pmlanalyzer/views/dependability/model/Id.scala | 2 +- .../pmlanalyzer/views/dependability/model/ModeAutomaton.scala | 2 +- .../onera/pmlanalyzer/views/dependability/model/Software.scala | 2 +- .../onera/pmlanalyzer/views/dependability/model/System.scala | 2 +- .../onera/pmlanalyzer/views/dependability/model/Target.scala | 2 +- .../pmlanalyzer/views/dependability/model/Transition.scala | 2 +- .../pmlanalyzer/views/dependability/model/Transporter.scala | 2 +- .../onera/pmlanalyzer/views/dependability/model/Variable.scala | 2 +- .../views/dependability/operators/IsCriticityOrdering.scala | 2 +- .../pmlanalyzer/views/dependability/operators/IsFinite.scala | 2 +- .../pmlanalyzer/views/dependability/operators/IsMergeable.scala | 2 +- .../views/dependability/operators/IsOptionLike.scala | 2 +- .../views/dependability/operators/IsShadowOrdering.scala | 2 +- .../pmlanalyzer/views/dependability/operators/package.scala | 2 +- .../onera/pmlanalyzer/views/interference/examples/package.scala | 2 +- ...KeystoneApplicativeTableBasedInterferenceSpecification.scala | 2 +- .../simpleKeystone/SimpleKeystoneInterferenceGeneration.scala | 2 +- ...pleKeystonePhysicalTableBasedInterferenceSpecification.scala | 2 +- .../views/interference/examples/simpleKeystone/package.scala | 2 +- .../simpleT1042/SimpleT1042InterferenceGeneration.scala | 2 +- .../SimpleT1042TableBasedInterferenceSpecification.scala | 2 +- .../pmlanalyzer/views/interference/exporters/IDPExporter.scala | 2 +- .../interference/exporters/InterferenceGraphExporter.scala | 2 +- .../pmlanalyzer/views/interference/exporters/package.scala | 2 +- .../views/interference/model/formalisation/BDDFactory.scala | 2 +- .../views/interference/model/formalisation/ProblemElement.scala | 2 +- .../views/interference/model/formalisation/package.scala | 2 +- .../onera/pmlanalyzer/views/interference/model/package.scala | 2 +- .../interference/model/relations/EquivalenceRelation.scala | 2 +- .../views/interference/model/relations/ExclusiveRelation.scala | 2 +- .../views/interference/model/relations/InterfereRelation.scala | 2 +- .../interference/model/relations/NotInterfereRelation.scala | 2 +- .../views/interference/model/relations/TransparentSet.scala | 2 +- .../views/interference/model/relations/package.scala | 2 +- .../ApplicativeTableBasedInterferenceSpecification.scala | 2 +- .../model/specification/InterferenceSpecification.scala | 2 +- .../PhysicalTableBasedInterferenceSpecification.scala | 2 +- .../specification/TableBasedInterferenceSpecification.scala | 2 +- .../views/interference/model/specification/package.scala | 2 +- .../pmlanalyzer/views/interference/operators/Analyse.scala | 2 +- .../pmlanalyzer/views/interference/operators/Equivalent.scala | 2 +- .../pmlanalyzer/views/interference/operators/Exclusive.scala | 2 +- .../pmlanalyzer/views/interference/operators/Interfere.scala | 2 +- .../pmlanalyzer/views/interference/operators/PostProcess.scala | 2 +- .../pmlanalyzer/views/interference/operators/Transform.scala | 2 +- .../pmlanalyzer/views/interference/operators/Transparent.scala | 2 +- .../pmlanalyzer/views/interference/operators/package.scala | 2 +- .../scala/onera/pmlanalyzer/views/interference/package.scala | 2 +- src/main/scala/onera/pmlanalyzer/views/package.scala | 2 +- .../pmlanalyzer/views/patterns/examples/PhylogPatterns.scala | 2 +- .../pmlanalyzer/views/patterns/exporters/LatexCodePrinter.scala | 2 +- .../views/patterns/exporters/LatexDiagramPrinter.scala | 2 +- .../pmlanalyzer/views/patterns/exporters/allPrinters.scala | 2 +- .../onera/pmlanalyzer/views/patterns/model/PatternAST.scala | 2 +- .../pmlanalyzer/pml/model/configuration/ConfigurationTest.scala | 2 +- .../pml/model/configuration/TransactionLibraryTest.scala | 2 +- .../onera/pmlanalyzer/pml/model/hardware/PlatformTest.scala | 2 +- .../pmlanalyzer/pml/model/hardware/SimpleTransporterTest.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/hardware/SmartTest.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/hardware/TargetTest.scala | 2 +- .../onera/pmlanalyzer/pml/model/hardware/VirtualizerTest.scala | 2 +- .../pmlanalyzer/pml/model/service/ArtificialServiceTest.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/service/LoadTest.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/service/StoreTest.scala | 2 +- .../onera/pmlanalyzer/pml/model/software/ApplicationTest.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/software/DataTest.scala | 2 +- .../scala/onera/pmlanalyzer/pml/model/utils/OwnerTest.scala | 2 +- 169 files changed, 169 insertions(+), 169 deletions(-) diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/package.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/package.scala index aeb1944..a3b4269 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneExport.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneExport.scala index 63ff42f..6d93f96 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneExport.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneExport.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfiguration.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfiguration.scala index 657ac4a..2b55521 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfiguration.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfiguration.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationFull.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationFull.scala index 24fbed5..458d4e6 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationFull.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationFull.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationNoL1.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationNoL1.scala index 92c02d7..ed8c87b 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationNoL1.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationNoL1.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp21.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp21.scala index 600e03c..ccd1e78 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp21.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp21.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp22.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp22.scala index baa4ab8..6acafc1 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp22.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneLibraryConfigurationPlanApp22.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystonePlatform.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystonePlatform.scala index 0e7174f..542f16a 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystonePlatform.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystonePlatform.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneTransactionLibrary.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneTransactionLibrary.scala index 78832e3..6128f4f 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneTransactionLibrary.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleKeystoneTransactionLibrary.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleRoutingConfiguration.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleRoutingConfiguration.scala index 373602a..f3cb57a 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleRoutingConfiguration.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleRoutingConfiguration.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleSoftwareAllocation.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleSoftwareAllocation.scala index 7bce5dd..780ca76 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleSoftwareAllocation.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/SimpleSoftwareAllocation.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/package.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/package.scala index f5bbe1f..5eda46f 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleKeystone/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleRoutingConfiguration.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleRoutingConfiguration.scala index 805fd12..c23e21b 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleRoutingConfiguration.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleRoutingConfiguration.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleSoftwareAllocation.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleSoftwareAllocation.scala index d20e434..02a20b3 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleSoftwareAllocation.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleSoftwareAllocation.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042Export.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042Export.scala index 3920e5f..3b7d521 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042Export.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042Export.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfiguration.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfiguration.scala index 9d7b908..ae7041b 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfiguration.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfiguration.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationFull.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationFull.scala index 186079b..61bed4a 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationFull.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationFull.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationNoL1.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationNoL1.scala index 7937373..58ac283 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationNoL1.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationNoL1.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp21.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp21.scala index c6eea1b..15f901c 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp21.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp21.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp22.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp22.scala index 8953398..0933107 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp22.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042LibraryConfigurationPlanApp22.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042Platform.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042Platform.scala index e96cc76..1c5bb29 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042Platform.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042Platform.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042TransactionLibrary.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042TransactionLibrary.scala index 3135e33..d834cb3 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042TransactionLibrary.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/SimpleT1042TransactionLibrary.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/package.scala b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/package.scala index 65b586b..18c5b78 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/examples/simpleT1042/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/exporters/FileManager.scala b/src/main/scala/onera/pmlanalyzer/pml/exporters/FileManager.scala index 8b19000..53ca240 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/exporters/FileManager.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/exporters/FileManager.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/exporters/RelationExporter.scala b/src/main/scala/onera/pmlanalyzer/pml/exporters/RelationExporter.scala index 15c595e..d97013f 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/exporters/RelationExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/exporters/RelationExporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/exporters/UMLExporter.scala b/src/main/scala/onera/pmlanalyzer/pml/exporters/UMLExporter.scala index 63b9c0d..a5c5c0a 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/exporters/UMLExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/exporters/UMLExporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/exporters/package.scala b/src/main/scala/onera/pmlanalyzer/pml/exporters/package.scala index ecade9e..fbc7a2e 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/exporters/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/exporters/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/PMLNode.scala b/src/main/scala/onera/pmlanalyzer/pml/model/PMLNode.scala index 36d5407..fc957b8 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/PMLNode.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/PMLNode.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/PMLNodeBuilder.scala b/src/main/scala/onera/pmlanalyzer/pml/model/PMLNodeBuilder.scala index a36ae3a..9e5d29c 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/PMLNodeBuilder.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/PMLNodeBuilder.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/configuration/TransactionLibrary.scala b/src/main/scala/onera/pmlanalyzer/pml/model/configuration/TransactionLibrary.scala index f428b48..bb57d0e 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/configuration/TransactionLibrary.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/configuration/TransactionLibrary.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/configuration/package.scala b/src/main/scala/onera/pmlanalyzer/pml/model/configuration/package.scala index 9bc1f6d..3731725 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/configuration/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/configuration/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/BaseHardwareNodeBuilder.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/BaseHardwareNodeBuilder.scala index 60ebe8e..2220d04 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/BaseHardwareNodeBuilder.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/BaseHardwareNodeBuilder.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Composite.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Composite.scala index 8fc0c1f..fd4d828 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Composite.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Composite.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Hardware.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Hardware.scala index acedc22..74198c2 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Hardware.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Hardware.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Initiator.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Initiator.scala index 3518e6b..71f146e 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Initiator.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Initiator.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Platform.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Platform.scala index 6d7ff9d..f8d3d42 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Platform.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Platform.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/SimpleTransporter.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/SimpleTransporter.scala index 5083967..5aa1c67 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/SimpleTransporter.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/SimpleTransporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Target.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Target.scala index e143b16..b1d84c6 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Target.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Target.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Transporter.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Transporter.scala index 817d4a4..4609530 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Transporter.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Transporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Virtualizer.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Virtualizer.scala index 0899bd3..c76576a 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Virtualizer.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/Virtualizer.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/package.scala b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/package.scala index 0b8e9b5..072bb53 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/hardware/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/hardware/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/package.scala b/src/main/scala/onera/pmlanalyzer/pml/model/package.scala index 1aeb61a..6028786 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/relations/AntiReflexiveSymmetricEndomorphism.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/AntiReflexiveSymmetricEndomorphism.scala index 4ac0439..263fbf8 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/relations/AntiReflexiveSymmetricEndomorphism.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/AntiReflexiveSymmetricEndomorphism.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/relations/AuthorizeRelation.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/AuthorizeRelation.scala index 0da73dd..3233ea4 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/relations/AuthorizeRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/AuthorizeRelation.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/relations/Endomorphism.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/Endomorphism.scala index 0975f5f..124b687 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/relations/Endomorphism.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/Endomorphism.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/relations/LinkRelation.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/LinkRelation.scala index b05c059..c99ece0 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/relations/LinkRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/LinkRelation.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/relations/ProvideRelation.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/ProvideRelation.scala index 3c807f8..f91568b 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/relations/ProvideRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/ProvideRelation.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/relations/ReflexiveSymmetricEndomorphism.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/ReflexiveSymmetricEndomorphism.scala index 5f726ec..4a2a528 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/relations/ReflexiveSymmetricEndomorphism.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/ReflexiveSymmetricEndomorphism.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/relations/Relation.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/Relation.scala index fa0a78b..30cb91e 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/relations/Relation.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/Relation.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/relations/RoutingRelation.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/RoutingRelation.scala index 1a6852f..5b4e85d 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/relations/RoutingRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/RoutingRelation.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/relations/UseRelation.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/UseRelation.scala index 96ae87c..d521c79 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/relations/UseRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/UseRelation.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/relations/package.scala b/src/main/scala/onera/pmlanalyzer/pml/model/relations/package.scala index c55e783..d0cc7c1 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/relations/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/relations/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/service/ArtificialService.scala b/src/main/scala/onera/pmlanalyzer/pml/model/service/ArtificialService.scala index 9e0d9dd..ce252eb 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/service/ArtificialService.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/service/ArtificialService.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/service/BaseServiceBuilder.scala b/src/main/scala/onera/pmlanalyzer/pml/model/service/BaseServiceBuilder.scala index 2a3977a..75fb905 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/service/BaseServiceBuilder.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/service/BaseServiceBuilder.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/service/Load.scala b/src/main/scala/onera/pmlanalyzer/pml/model/service/Load.scala index 29ed8bc..97cfe35 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/service/Load.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/service/Load.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/service/Service.scala b/src/main/scala/onera/pmlanalyzer/pml/model/service/Service.scala index eda6cb0..f8550fc 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/service/Service.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/service/Service.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/service/Store.scala b/src/main/scala/onera/pmlanalyzer/pml/model/service/Store.scala index d0480d8..2508d6e 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/service/Store.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/service/Store.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/service/package.scala b/src/main/scala/onera/pmlanalyzer/pml/model/service/package.scala index 9a1f74f..2b00255 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/service/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/service/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/software/Application.scala b/src/main/scala/onera/pmlanalyzer/pml/model/software/Application.scala index 6e81376..1c667cf 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/software/Application.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/software/Application.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/software/BaseSoftwareNodeBuilder.scala b/src/main/scala/onera/pmlanalyzer/pml/model/software/BaseSoftwareNodeBuilder.scala index cb12ab6..cb839ee 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/software/BaseSoftwareNodeBuilder.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/software/BaseSoftwareNodeBuilder.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/software/Data.scala b/src/main/scala/onera/pmlanalyzer/pml/model/software/Data.scala index c708356..c7a599a 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/software/Data.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/software/Data.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/software/package.scala b/src/main/scala/onera/pmlanalyzer/pml/model/software/package.scala index 688cb92..0d73326 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/software/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/software/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/utils/Message.scala b/src/main/scala/onera/pmlanalyzer/pml/model/utils/Message.scala index e750dd6..0eba942 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/utils/Message.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/utils/Message.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/utils/Owner.scala b/src/main/scala/onera/pmlanalyzer/pml/model/utils/Owner.scala index c17bd2d..75081c7 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/utils/Owner.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/utils/Owner.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/model/utils/package.scala b/src/main/scala/onera/pmlanalyzer/pml/model/utils/package.scala index ed1817f..4cef1f2 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/model/utils/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/model/utils/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/operators/AsTransaction.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/AsTransaction.scala index f1bd2e5..0c2746c 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/operators/AsTransaction.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/AsTransaction.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/operators/Deactivate.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Deactivate.scala index db0b673..6cf5254 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/operators/Deactivate.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Deactivate.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/operators/Link.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Link.scala index a17544e..05026fa 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/operators/Link.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Link.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/operators/Linked.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Linked.scala index 7e757c5..2c8466d 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/operators/Linked.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Linked.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/operators/Merge.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Merge.scala index 0f5959a..5dc7575 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/operators/Merge.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Merge.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/operators/Provided.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Provided.scala index 62ee9f4..8e34ccc 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/operators/Provided.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Provided.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/operators/Restrict.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Restrict.scala index dbc5d2b..c06e83d 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/operators/Restrict.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Restrict.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/operators/Route.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Route.scala index 1541cad..534fb2e 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/operators/Route.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Route.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/operators/Use.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Use.scala index 2733d89..6e88854 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/operators/Use.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Use.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/operators/Used.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/Used.scala index 971401f..fe7fd89 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/operators/Used.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/Used.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/operators/package.scala b/src/main/scala/onera/pmlanalyzer/pml/operators/package.scala index 7646ee0..45c1601 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/operators/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/operators/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/pml/package.scala b/src/main/scala/onera/pmlanalyzer/pml/package.scala index 9d28962..ffbf2f7 100644 --- a/src/main/scala/onera/pmlanalyzer/pml/package.scala +++ b/src/main/scala/onera/pmlanalyzer/pml/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Scheduler.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Scheduler.scala index 517a7cd..cab4b87 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Scheduler.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Scheduler.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Simulator.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Simulator.scala index 8916c37..c9266af 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Simulator.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Simulator.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Synchronize.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Synchronize.scala index 6b55912..94d9c01 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Synchronize.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/executor/Synchronize.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/AutomatonCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/AutomatonCeciliaExporter.scala index 39631ec..cd3b6fa 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/AutomatonCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/AutomatonCeciliaExporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/BasicOperationCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/BasicOperationCeciliaExporter.scala index 8c6ec15..798d8c1 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/BasicOperationCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/BasicOperationCeciliaExporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/CeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/CeciliaExporter.scala index 6d4acf3..f07128b 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/CeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/CeciliaExporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/ExprCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/ExprCeciliaExporter.scala index ca77f07..77b46d3 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/ExprCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/ExprCeciliaExporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/Folder.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/Folder.scala index 49ca11f..a0528ad 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/Folder.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/Folder.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/GenericImage.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/GenericImage.scala index 26aa671..07cc2f0 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/GenericImage.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/GenericImage.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/Model.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/Model.scala index 80db1c0..54e695f 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/Model.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/Model.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/PhylogFolder.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/PhylogFolder.scala index 2bcd5bd..464dc84 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/PhylogFolder.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/PhylogFolder.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/PlatformCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/PlatformCeciliaExporter.scala index ef51b88..796c14c 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/PlatformCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/PlatformCeciliaExporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/SoftwareCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/SoftwareCeciliaExporter.scala index 522ade9..20bbd17 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/SoftwareCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/SoftwareCeciliaExporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/SystemCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/SystemCeciliaExporter.scala index 54516ef..41fc6a2 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/SystemCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/SystemCeciliaExporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TargetCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TargetCeciliaExporter.scala index 7ff5145..0fd402c 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TargetCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TargetCeciliaExporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TransporterCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TransporterCeciliaExporter.scala index d3f146e..88062c2 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TransporterCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TransporterCeciliaExporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TypeCeciliaExporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TypeCeciliaExporter.scala index f2aa2f7..2f599fb 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TypeCeciliaExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/TypeCeciliaExporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/package.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/package.scala index 96b1f63..e6c729d 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/exporters/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Component.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Component.scala index 3c836a5..aaec6e2 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Component.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Component.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Copy.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Copy.scala index 191214d..93202f4 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Copy.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Copy.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/model/CustomTypes.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/CustomTypes.scala index 921a220..0f15c7e 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/model/CustomTypes.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/CustomTypes.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Direction.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Direction.scala index b739d83..d4c55cf 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Direction.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Direction.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/model/EnumFailureMode.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/EnumFailureMode.scala index 9335c37..90a5a18 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/model/EnumFailureMode.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/EnumFailureMode.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Event.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Event.scala index 9017a4a..eb92cb5 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Event.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Event.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Fire.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Fire.scala index 6d7f75e..b4f8cdb 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Fire.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Fire.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Id.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Id.scala index e913886..89392ea 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Id.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Id.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/model/ModeAutomaton.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/ModeAutomaton.scala index 8b3d222..bc80203 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/model/ModeAutomaton.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/ModeAutomaton.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Software.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Software.scala index 7d81152..b2dff11 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Software.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Software.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/model/System.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/System.scala index 999c6c9..de6102c 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/model/System.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/System.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Target.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Target.scala index 5fc9dfd..c84e410 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Target.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Target.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Transition.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Transition.scala index 63e513d..2ea9609 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Transition.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Transition.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Transporter.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Transporter.scala index e8ff824..350cbd1 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Transporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Transporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Variable.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Variable.scala index 25b545c..a1029a0 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/model/Variable.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/model/Variable.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsCriticityOrdering.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsCriticityOrdering.scala index cfcdd20..d3ba248 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsCriticityOrdering.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsCriticityOrdering.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsFinite.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsFinite.scala index eb4a54e..340086b 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsFinite.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsFinite.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsMergeable.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsMergeable.scala index a269df6..6cb20c0 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsMergeable.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsMergeable.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsOptionLike.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsOptionLike.scala index c7a3f87..bdf84ac 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsOptionLike.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsOptionLike.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsShadowOrdering.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsShadowOrdering.scala index 603d22c..f979e40 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsShadowOrdering.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/IsShadowOrdering.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/dependability/operators/package.scala b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/package.scala index f632a6e..fbe4f38 100644 --- a/src/main/scala/onera/pmlanalyzer/views/dependability/operators/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/dependability/operators/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/examples/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/examples/package.scala index a102aef..189c3f4 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/examples/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/examples/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystoneApplicativeTableBasedInterferenceSpecification.scala b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystoneApplicativeTableBasedInterferenceSpecification.scala index 55c7ec5..6d805a0 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystoneApplicativeTableBasedInterferenceSpecification.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystoneApplicativeTableBasedInterferenceSpecification.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystoneInterferenceGeneration.scala b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystoneInterferenceGeneration.scala index 33c71cd..5cc8ed7 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystoneInterferenceGeneration.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystoneInterferenceGeneration.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystonePhysicalTableBasedInterferenceSpecification.scala b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystonePhysicalTableBasedInterferenceSpecification.scala index 6250986..9ad5322 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystonePhysicalTableBasedInterferenceSpecification.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/SimpleKeystonePhysicalTableBasedInterferenceSpecification.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/package.scala index 1510ec0..2a0e579 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleKeystone/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleT1042/SimpleT1042InterferenceGeneration.scala b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleT1042/SimpleT1042InterferenceGeneration.scala index 4f1ba4d..46e7025 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleT1042/SimpleT1042InterferenceGeneration.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleT1042/SimpleT1042InterferenceGeneration.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleT1042/SimpleT1042TableBasedInterferenceSpecification.scala b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleT1042/SimpleT1042TableBasedInterferenceSpecification.scala index b5a4196..8b92c7b 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleT1042/SimpleT1042TableBasedInterferenceSpecification.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/examples/simpleT1042/SimpleT1042TableBasedInterferenceSpecification.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/exporters/IDPExporter.scala b/src/main/scala/onera/pmlanalyzer/views/interference/exporters/IDPExporter.scala index 9986e15..24fd7b0 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/exporters/IDPExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/exporters/IDPExporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/exporters/InterferenceGraphExporter.scala b/src/main/scala/onera/pmlanalyzer/views/interference/exporters/InterferenceGraphExporter.scala index 8958c7c..2429003 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/exporters/InterferenceGraphExporter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/exporters/InterferenceGraphExporter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/exporters/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/exporters/package.scala index ca8b558..86e9c3f 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/exporters/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/exporters/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/BDDFactory.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/BDDFactory.scala index 1f225c1..99863b2 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/BDDFactory.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/BDDFactory.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/ProblemElement.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/ProblemElement.scala index f445174..42e45ad 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/ProblemElement.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/ProblemElement.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/package.scala index a44da67..ee76132 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/formalisation/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/model/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/package.scala index 0c1bce4..47b0952 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/model/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/EquivalenceRelation.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/EquivalenceRelation.scala index 5603424..3f431d2 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/EquivalenceRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/EquivalenceRelation.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/ExclusiveRelation.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/ExclusiveRelation.scala index 59f1902..fc1003c 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/ExclusiveRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/ExclusiveRelation.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/InterfereRelation.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/InterfereRelation.scala index 722a5ad..2c47d30 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/InterfereRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/InterfereRelation.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/NotInterfereRelation.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/NotInterfereRelation.scala index e64b973..ad6ee5a 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/NotInterfereRelation.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/NotInterfereRelation.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/TransparentSet.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/TransparentSet.scala index 3924e6a..9b86cca 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/TransparentSet.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/TransparentSet.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/package.scala index f5b3261..d6bce4e 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/relations/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/ApplicativeTableBasedInterferenceSpecification.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/ApplicativeTableBasedInterferenceSpecification.scala index edc8e8e..c8bb096 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/ApplicativeTableBasedInterferenceSpecification.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/ApplicativeTableBasedInterferenceSpecification.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/InterferenceSpecification.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/InterferenceSpecification.scala index 104b423..b27e0b2 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/InterferenceSpecification.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/InterferenceSpecification.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/PhysicalTableBasedInterferenceSpecification.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/PhysicalTableBasedInterferenceSpecification.scala index 42489d9..f6f76d5 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/PhysicalTableBasedInterferenceSpecification.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/PhysicalTableBasedInterferenceSpecification.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/TableBasedInterferenceSpecification.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/TableBasedInterferenceSpecification.scala index f1d3d8d..2a0a391 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/TableBasedInterferenceSpecification.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/TableBasedInterferenceSpecification.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/package.scala index 65f0120..7dd324d 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/model/specification/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/operators/Analyse.scala b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Analyse.scala index c9e6baa..b371717 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/operators/Analyse.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Analyse.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/operators/Equivalent.scala b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Equivalent.scala index 404c8de..6c66b46 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/operators/Equivalent.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Equivalent.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/operators/Exclusive.scala b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Exclusive.scala index 7d67cd7..e79715e 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/operators/Exclusive.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Exclusive.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/operators/Interfere.scala b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Interfere.scala index 902b913..39d4657 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/operators/Interfere.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Interfere.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/operators/PostProcess.scala b/src/main/scala/onera/pmlanalyzer/views/interference/operators/PostProcess.scala index 3539552..2d765b6 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/operators/PostProcess.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/operators/PostProcess.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/operators/Transform.scala b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Transform.scala index 246ea0a..24127ad 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/operators/Transform.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Transform.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/operators/Transparent.scala b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Transparent.scala index b56f44b..976a814 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/operators/Transparent.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/operators/Transparent.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/operators/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/operators/package.scala index d49d3a5..73eb8b7 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/operators/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/operators/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/interference/package.scala b/src/main/scala/onera/pmlanalyzer/views/interference/package.scala index 982b432..e0569cb 100644 --- a/src/main/scala/onera/pmlanalyzer/views/interference/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/interference/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/package.scala b/src/main/scala/onera/pmlanalyzer/views/package.scala index dc766a7..e02ece5 100644 --- a/src/main/scala/onera/pmlanalyzer/views/package.scala +++ b/src/main/scala/onera/pmlanalyzer/views/package.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/patterns/examples/PhylogPatterns.scala b/src/main/scala/onera/pmlanalyzer/views/patterns/examples/PhylogPatterns.scala index 477b4d9..bf9f15d 100644 --- a/src/main/scala/onera/pmlanalyzer/views/patterns/examples/PhylogPatterns.scala +++ b/src/main/scala/onera/pmlanalyzer/views/patterns/examples/PhylogPatterns.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/LatexCodePrinter.scala b/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/LatexCodePrinter.scala index d26ccf2..085cca5 100644 --- a/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/LatexCodePrinter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/LatexCodePrinter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/LatexDiagramPrinter.scala b/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/LatexDiagramPrinter.scala index 917e7ea..618a868 100644 --- a/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/LatexDiagramPrinter.scala +++ b/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/LatexDiagramPrinter.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/allPrinters.scala b/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/allPrinters.scala index 8d5823f..e93c9f4 100644 --- a/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/allPrinters.scala +++ b/src/main/scala/onera/pmlanalyzer/views/patterns/exporters/allPrinters.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/main/scala/onera/pmlanalyzer/views/patterns/model/PatternAST.scala b/src/main/scala/onera/pmlanalyzer/views/patterns/model/PatternAST.scala index b1a8dd0..d73c125 100644 --- a/src/main/scala/onera/pmlanalyzer/views/patterns/model/PatternAST.scala +++ b/src/main/scala/onera/pmlanalyzer/views/patterns/model/PatternAST.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/configuration/ConfigurationTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/configuration/ConfigurationTest.scala index 37da792..c941346 100644 --- a/src/test/scala/onera/pmlanalyzer/pml/model/configuration/ConfigurationTest.scala +++ b/src/test/scala/onera/pmlanalyzer/pml/model/configuration/ConfigurationTest.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/configuration/TransactionLibraryTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/configuration/TransactionLibraryTest.scala index b9a12ab..5c86181 100644 --- a/src/test/scala/onera/pmlanalyzer/pml/model/configuration/TransactionLibraryTest.scala +++ b/src/test/scala/onera/pmlanalyzer/pml/model/configuration/TransactionLibraryTest.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/hardware/PlatformTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/PlatformTest.scala index de57fc3..49b3ed7 100644 --- a/src/test/scala/onera/pmlanalyzer/pml/model/hardware/PlatformTest.scala +++ b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/PlatformTest.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/hardware/SimpleTransporterTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/SimpleTransporterTest.scala index 72dd8d2..283b1d3 100644 --- a/src/test/scala/onera/pmlanalyzer/pml/model/hardware/SimpleTransporterTest.scala +++ b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/SimpleTransporterTest.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/hardware/SmartTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/SmartTest.scala index c181b30..d8bac6b 100644 --- a/src/test/scala/onera/pmlanalyzer/pml/model/hardware/SmartTest.scala +++ b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/SmartTest.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/hardware/TargetTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/TargetTest.scala index 6a73097..60f31a9 100644 --- a/src/test/scala/onera/pmlanalyzer/pml/model/hardware/TargetTest.scala +++ b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/TargetTest.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/hardware/VirtualizerTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/VirtualizerTest.scala index a2652a1..c83d760 100644 --- a/src/test/scala/onera/pmlanalyzer/pml/model/hardware/VirtualizerTest.scala +++ b/src/test/scala/onera/pmlanalyzer/pml/model/hardware/VirtualizerTest.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/service/ArtificialServiceTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/service/ArtificialServiceTest.scala index b6ef7ca..fd507de 100644 --- a/src/test/scala/onera/pmlanalyzer/pml/model/service/ArtificialServiceTest.scala +++ b/src/test/scala/onera/pmlanalyzer/pml/model/service/ArtificialServiceTest.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/service/LoadTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/service/LoadTest.scala index cc189a1..f9e3653 100644 --- a/src/test/scala/onera/pmlanalyzer/pml/model/service/LoadTest.scala +++ b/src/test/scala/onera/pmlanalyzer/pml/model/service/LoadTest.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/service/StoreTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/service/StoreTest.scala index 5e7cffc..1766e3d 100644 --- a/src/test/scala/onera/pmlanalyzer/pml/model/service/StoreTest.scala +++ b/src/test/scala/onera/pmlanalyzer/pml/model/service/StoreTest.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/software/ApplicationTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/software/ApplicationTest.scala index 185f3bf..1a7e10a 100644 --- a/src/test/scala/onera/pmlanalyzer/pml/model/software/ApplicationTest.scala +++ b/src/test/scala/onera/pmlanalyzer/pml/model/software/ApplicationTest.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/software/DataTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/software/DataTest.scala index 8e4ee90..a79dacf 100644 --- a/src/test/scala/onera/pmlanalyzer/pml/model/software/DataTest.scala +++ b/src/test/scala/onera/pmlanalyzer/pml/model/software/DataTest.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ; diff --git a/src/test/scala/onera/pmlanalyzer/pml/model/utils/OwnerTest.scala b/src/test/scala/onera/pmlanalyzer/pml/model/utils/OwnerTest.scala index 3834e74..4b76d37 100644 --- a/src/test/scala/onera/pmlanalyzer/pml/model/utils/OwnerTest.scala +++ b/src/test/scala/onera/pmlanalyzer/pml/model/utils/OwnerTest.scala @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021. ONERA + * Copyright (c) 2023. ONERA * This file is part of PML Analyzer * * PML Analyzer is free software ;

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�~%TaO6*-%O!v!Jm|UfV28 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 CK}zue literal 0 HcmV?d00001 diff --git a/doc/_assets/images/simpleT1042/interference.PNG b/doc/_assets/images/simpleT1042/interference.PNG index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..55626796efbbaabbefbcf5ecd476f782a16c0a95 100644 GIT binary patch literal 37286 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 TS{VNq{H3g*A)haM*ZcnfGV|5D literal 0 HcmV?d00001 diff --git a/doc/_assets/images/simpleT1042/platform.PNG b/doc/_assets/images/simpleT1042/platform.PNG index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..57e7d203439cea290cd048d0d4f07432e80c3703 100644 GIT binary patch literal 23007 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 literal 0 HcmV?d00001 diff --git a/doc/_assets/text/rootContent.txt b/doc/_assets/text/rootContent.txt index e69de29..453a101 100644 --- a/doc/_assets/text/rootContent.txt +++ b/doc/_assets/text/rootContent.txt @@ -0,0 +1,4 @@ +The PML analyzer is an open source API providing a simple DSL to build +a description of the architecture of your chip based on the PHYLOG Model Language (PML). +From this representation a set of safety and interference model templates can be generated to perfom safety and +interference analyses of your platform. \ No newline at end of file diff --git a/doc/_docs/example/simpleKeystone/export.md b/doc/_docs/example/simpleKeystone/export.md index e69de29..e410696 100644 --- a/doc/_docs/example/simpleKeystone/export.md +++ b/doc/_docs/example/simpleKeystone/export.md @@ -0,0 +1,35 @@ +--- +layout: doc-page +title: "Exports" +--- + +### Configured platform + +The file src/main/scala/pml/examples/simple/SimpleExport shows how graphical exports are produced (stored in export folder) +from a platform: +* graph of used SW and HW +* graph of used services per application +* table of transaction +* table of data +* table of SW allocation to HW +* table of component activation +* table of SW usage +* routing table +* transfert table + +### Interference analysis + +The file src/main/scala/views/interference/examples/SimpleInterferenceGeneration shows how interference analysis can be performed +on a configured platform. The generated files are stored in analysis folder: +* computation of n-itf +* computation of n-free +* computation of n-channels + +As an example the following interference is identified as a 3-itf in the first time slice: + +< app1_wr_d2 || app21_wr_d1 || app4_wr_input_d > + +interference_channel + +Figure 5: Example of footprint and interference channel (identified by the two circles) + diff --git a/doc/_docs/example/simpleKeystone/index.md b/doc/_docs/example/simpleKeystone/index.md index e69de29..b9e9595 100644 --- a/doc/_docs/example/simpleKeystone/index.md +++ b/doc/_docs/example/simpleKeystone/index.md @@ -0,0 +1,12 @@ +--- +layout: index +--- + +This section provides a simple yet comprehensive example of a processor PML model composed of: +* two cores, +* one DMA (Direct Access Memory), +* one Ethernet device, +* one DDR and SRAM memory, +* one SPI controller, +* an interrupt controller (MPIC), +* and a set of configuration registers reachable through a specific configuration bus. diff --git a/doc/_docs/example/simpleKeystone/library.md b/doc/_docs/example/simpleKeystone/library.md index e69de29..4aaaaf2 100644 --- a/doc/_docs/example/simpleKeystone/library.md +++ b/doc/_docs/example/simpleKeystone/library.md @@ -0,0 +1,33 @@ +--- +layout: doc-page +title: "Transaction library" +--- + +The application layer is composed of five tasks: +* app4 is an asynchronous microcode running on the Ethernet component. + Each time an Ethernet frame arrives, it transfers the payload of the frame to SRAM (transaction t41). +* app21 and app22 are two periodic tasks running core1. +* * At each period app21 reads the last Ethernet message from SRAM, + makes some input treatments on the message, and makes it available for app1 in DDR. +* * Similarly, at each period app22 reads output data of app1 from DDR. It transforms them into SPI frames. + The frames are then store in SRAM. And finally app22 wakes up the DMA (app3) + by writing the address of the SPI frames into the DMA registers. +* app3 is a microcode running on DMA. When woke up, app3 reads the SPI frame from + SRAM and transfers it to SPI. +* app1 is an asynchronous applicative task running on core0 and activated each time a external interrupt arrives. + It begins by reading the interrupt code from MPIC (transaction t11). + It reads its input data from DDR (transaction t12). + Then it runs using the internal cache of core0 (transaction t13). + And finally it stores its output data in DDR (transaction t14). + +The transactions are drawn in Figure 2. + +transaction + +Figure 2: Transactions of app1, app21 app22, app3,and app4. + +By design, app22 and app3 do not run simultaneously, as app22 wakes up app3 at the end of its execution. + +PML Encoding is provided in src/main/scala/pml/examples/simple/SimpleTransactionLibrary.scala + +In this example all defined transaction are used, the configuration of the library is provided in src/main/scala/examples/simple/SimpleLibraryConfiguration diff --git a/doc/_docs/example/simpleKeystone/platform.md b/doc/_docs/example/simpleKeystone/platform.md index e69de29..afa5a5f 100644 --- a/doc/_docs/example/simpleKeystone/platform.md +++ b/doc/_docs/example/simpleKeystone/platform.md @@ -0,0 +1,27 @@ +--- +layout: doc-page +title: "Platform" +--- + +As shown in Figure 1 the two core are linked by an +AXI bus. The IO devices (DMA, Ethernet controler and SPI) are +linked through a dedicated peripheral bus. These two buses are +connected to the memory subsystem (containing the DDR and +the SRAM memories) through a dedicated controller +called Memory Shared Multicore Controller (MSMC). This controller +acts as a switch from the two buses to the two memories. + +All the resources necessary for executing program instructions are locally hosted by each core: ordinal counter, registers, computing units, etc. +These resources are private to each core. +They can be used simultaneously without interference by each core. +Conversely, the memory hierarchy is composed of resources local +to each core (the cache memories), and also global +resources (such as DDR and SRAM) simultaneously reachable +by the cores and the IO devices. +These global memories are shared resources. + +platform + +Figure 1: Multicore processor + +PML Encoding is provided in src/main/scala/pml/examples/simpleKeystone/SimpleKeystonePlatform.scala \ No newline at end of file diff --git a/doc/_docs/example/simpleKeystone/routing.md b/doc/_docs/example/simpleKeystone/routing.md index e69de29..46eff15 100644 --- a/doc/_docs/example/simpleKeystone/routing.md +++ b/doc/_docs/example/simpleKeystone/routing.md @@ -0,0 +1,12 @@ +--- +layout: doc-page +title: "Routing" +--- + + +In this example, as shown in Figure 1, there are multiple paths between the cores and the configuration registers. +These registers can be reached from the core either through AXI-BUS, MSMC, PERIPH-BUS and CONFIG-BUS, or directly through CONFIG-BUS. +The platform is configured such that the read and store accesses by the core to the configuration registers are routed through the +the direct path. + +The PML routing rules are encoded in src/main/scala/pml/examples/simple/SimpleRoutingConfiguration.scala diff --git a/doc/_docs/example/simpleKeystone/slicing.md b/doc/_docs/example/simpleKeystone/slicing.md index e69de29..5d7f594 100644 --- a/doc/_docs/example/simpleKeystone/slicing.md +++ b/doc/_docs/example/simpleKeystone/slicing.md @@ -0,0 +1,22 @@ +--- +layout: doc-page +title: "Temporal slices" +--- + +The tasks are scheduled into two periodic time slices as shown in Figure 3: +app4 and app21 are scheduled in the first time slice; +app22 and app3 are scheduled in the second time slice; +and as app1 is asynchronous, it can run at any time, that is, possibly in the both slices. + +slices + +Figure 3: Temporal scheduling. + +The footprint of the transactions of these five tasks on the architecture is shown of each time slice in Figure 4. + +transactions_footprint + +Figure 4: Footprint of the transactions on the HW architecture (the red, violet, blue, and green arrows represent respectively the transactions of app1, app2 (app21, app22), app3, and app3). + +The PML encoding of the first time slice is provided in src/main/scala/pml/examples/simple/SimpleKeystoneLibraryConfigurationPalnApp21.scala, +and the second time slice is provided in src/main/scala/pml/examples/simple/SimpleKeystoneLibraryConfigurationPalnApp22.scala diff --git a/doc/_docs/example/simpleKeystone/software.md b/doc/_docs/example/simpleKeystone/software.md index e69de29..946c10b 100644 --- a/doc/_docs/example/simpleKeystone/software.md +++ b/doc/_docs/example/simpleKeystone/software.md @@ -0,0 +1,13 @@ +--- +layout: doc-page +title: "Software Allocation" +--- + +The application layer is composed of five tasks: +* app4 is an asynchronous microcode running on the eth component. +* app21 is a periodic task running on core2. +* app22 is a periodic task running on core2. +* app3 a microcode running on DMA. +* app1 is an asynchronous applicative task running on core1. + +PML Encoding is provided in src/main/scala/pml/examples/simple/SimpleSoftwareAllocation.scala diff --git a/doc/_docs/example/simpleKeystone/specification.md b/doc/_docs/example/simpleKeystone/specification.md index e69de29..e33ca38 100644 --- a/doc/_docs/example/simpleKeystone/specification.md +++ b/doc/_docs/example/simpleKeystone/specification.md @@ -0,0 +1,12 @@ +--- +layout: doc-page +title: "Specifications" +--- + +In this example we consider that +* bus services are independent +* DMA and dma-reg services impacts each others +* app21 and app22 are exclusive as they run on the same core +* app22 and app3 are exclusive as app22 wakes up app3 at the en of its execution. + +PML encoding is provided in src/main/scala/views/interference/examples/simple/SimpleTableBasedInterferenceSpecification diff --git a/doc/_docs/example/simpleT1042/index.md b/doc/_docs/example/simpleT1042/index.md index e69de29..e1ce049 100644 --- a/doc/_docs/example/simpleT1042/index.md +++ b/doc/_docs/example/simpleT1042/index.md @@ -0,0 +1,106 @@ +--- +layout: index +--- + +## Platform + +This processor is composed of: +* two cores, +* one DMA (Direct Access Memory), +* one Ethernet device, +* two memory controllers (the memories behind the memory controllers are not represented), +* one PCIe controller, +* an interrupt controller (MPCI), +* and a set of configuration registers reachable through a specific configuration bus. + +All the resources necessary for executing program instructions are locally hosted by each core: ordinal counter, registers, computing units, etc. +These resources are private to each core. +They can be used simultaneously without interference by each core. +Conversely, the memory hierarchy is composed of resources local to each core (the cache memories), and two global memories reachable from the two cores. +These global memories are shared resources. + +The cores, the Ethernet device, the DMA, and the memories are connected by a central bus as shown in Figure 1. +This bus carries transactions, that is, requests from the cores, the Ethernet port, and the DMA to the memories and to the configuration bus. +As such, the central bus is a shared resource that can be used asynchronously by the transactions. +These transactions can collide when attempting to cross the bus at the same time. + +platform + +Figure 1: Multicore processor + +PML Encoding is provided in src/main/scala/pml/examples/simple/SimplePlatform.scala + +## Software Allocation + +The application layer is composed of five tasks: +* app4 is an asynchronous microcode running on the eth component. +* app21 is a periodic task running on core2. +* app22 is a periodic task running on core2. +* app3 a microcode running on DMA. +* app1 is an asynchronous applicative task running on core1. + +PML Encoding is provided in src/main/scala/pml/examples/simple/SimpleSoftwareAllocation.scala + +## Transaction library + +The application layer is composed of five tasks: +* app4 Each time an Ethernet frame arrives, it transfers the payload of the frame to mem2 (transaction t41). +* app21 is a periodic task running on core2. At each period app21 reads the last Ethernet message from mem2, makes some input treatments on it, and makes it available for app1 in mem1. +* app22 is a periodic task running on core2. Similarly, at each period app22 reads output data of app1 from mem1. It transforms them into PCIe frames. The frames are then store in mem2. +* app22 wakes up the DMA (app3) by writing the address of the PCIe frames into the DMA registers. +* app3 a microcode running on DMA. When woke up, app3 reads the PCIe frame from mem2 and transfers it to pcie. +* app1 is an asynchronous applicative task running on core1 and activated each time an external interrupt arrives. It begins by reading the interrupt code from mpic (transaction t11). It reads its input data from mem1 (transaction t12). Then it runs using the internal cache of core1(transaction t13). And finally it stores its output data in mem1(transaction t14). + +transaction + +Figure 2: Transactions of the HW architecture (the red, violet,blue, and green arrows represent respectively the transactions of app1,app2(app21 app22), app3,and app4). + +PML Encoding is provided in src/main/scala/pml/examples/simple/SimpleTransactionLibrary.scala + +In this example all defined transaction are used, the configuration of the library is provided in src/main/scala/examples/simple/SimpleLibraryConfiguration + +## Routing + +In this example there are not multiple paths between target and initiators so the routing configuration is optional (here empty) + +## Specifications + +In this example we consider that +* bus services are independent +* DMA and config_bus services impacts each others +* app21 and app22 are exclusive + +PML encoding is provided in src/main/scala/views/interference/examples/simple/SimpleTableBasedInterferenceSpecification + +## Exports + +### Configured platform + +The file src/main/scala/pml/examples/simple/SimpleExport shows how graphical exports are produced (stored in export folder) +from a platform: +* graph of used SW and HW +* graph of used services per application +* table of transaction +* table of data +* table of SW allocation to HW +* table of component activation +* table of SW usage +* routing table +* transfert table + +### Interference analysis + +The file src/main/scala/views/interference/examples/SimpleInterferenceGeneration shows how interference analysis can be performed +on a configured platform. The generated files are stored in analysis folder: +* computation of n-itf +* computation of n-free +* computation of n-channels + +As an example the following interference is identified as a 3-itf + +< app1_rd_d1 || app21_wr_d1 || app4_wr_input_d > + +transaction + +Figure 3: Footprint and interference channel (identified by the two circles) + diff --git a/doc/_docs/index.md b/doc/_docs/index.md index e69de29..2bd15a1 100644 --- a/doc/_docs/index.md +++ b/doc/_docs/index.md @@ -0,0 +1,12 @@ +--- +layout: index +--- + +The PML analyzer is an open source API providing a simple DSL to build +a description of the architecture of your chip based on the PHYLOG Model Language (PML). +From this representation a set of safety and interference model templates can be generated to perfom safety and +interference analyses of your platform. + +The only dependencies of the PML analyzer are: ++ The Java Runtime Environment version 8 [JRE 1.8](http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html) or newer. ++ The Simple Build Tool [SBT](https://www.scala-sbt.org/) \ No newline at end of file diff --git a/doc/_docs/reference/gettingStarted/external_dependency.md b/doc/_docs/reference/gettingStarted/external_dependency.md index e69de29..c0b8b22 100644 --- a/doc/_docs/reference/gettingStarted/external_dependency.md +++ b/doc/_docs/reference/gettingStarted/external_dependency.md @@ -0,0 +1,19 @@ +--- +layout: doc-page +title: "External Dependencies" +--- + +The PML modeling does not rely on any external dependency. Nevertheless, it is possible +to connect some backend analysis tools to directly perform analyses out of your PML model: +* for interference analysis: [IDP](https://dtai.cs.kuleuven.be/software/idp/try) or [Monosat](https://github.com/sambayless/monosat) +* for the safety analysis: [CeciliaOCAS]() or [OpenAltarica](https://www.openaltarica.fr/docs-downloads/) + +The Monosat tool can be integrated as a dynamic library. To do so be sure that the library (.so for Linux, +.dylib for Mac, .dll for Windows) is accessible from the java library path. If not update it by running sbt or the executable with the VM option: +```shell +# to run SBT with a given library path +java -jar -Djava.library.path=yourPath sbt-launch.jar + +# to run a JAR +java -jar -Djava.library.path=yourPath youJar.jar +``` \ No newline at end of file diff --git a/doc/_docs/reference/gettingStarted/getting_started_SBT.md b/doc/_docs/reference/gettingStarted/getting_started_SBT.md index e69de29..83e9738 100644 --- a/doc/_docs/reference/gettingStarted/getting_started_SBT.md +++ b/doc/_docs/reference/gettingStarted/getting_started_SBT.md @@ -0,0 +1,26 @@ +--- +layout: doc-page +title: "Installing dependencies" +--- + +The PML analyzer is an open source API providing a simple DSL to build +a description of the architecture of your chip based on the PHYLOG Model Language (PML). +From this representation a set of safety and interference model templates can be generated to perfom safety and +interference analyses of your platform. + +The only dependencies of the PML analyzer are: ++ The Java Runtime Environment version 8 [JRE 1.8](http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html) or newer. ++ The Simple Build Tool [SBT](https://www.scala-sbt.org/) + +### Java 8 + +You need a working installation of the Java Runtime Environment +version 8 (either OpenJDK or Oracle will do). Installation procedures +may vary depending on your system (Windows, OSX, Linux), please follow +the official guidelines for your system. + +### SBT + +The compilation of a PML model can be easily performed +with [SBT](https://www.scala-sbt.org/). Installation procedures may vary depending on your system (Windows, OSX, Linux), +please follow the official guidelines for your system. \ No newline at end of file diff --git a/doc/_docs/reference/gettingStarted/getting_started_docker.md b/doc/_docs/reference/gettingStarted/getting_started_docker.md index e69de29..80fe1b8 100644 --- a/doc/_docs/reference/gettingStarted/getting_started_docker.md +++ b/doc/_docs/reference/gettingStarted/getting_started_docker.md @@ -0,0 +1,111 @@ +--- +layout: doc-page +title: "Getting started with Docker" +--- + +The simplest way to use PML Analyzer is to download a pre-configured Docker image to run interference analyses. +The only dependency is the [Docker execution engine](https://docs.docker.com/get-docker/). +Docker enables you to create from this image a container where all dependencies have been already resolved. +### Container for a simple execution of PML examples +The following commands create a simple container that can be used to run the examples provided in PML Analyzer. +```shell +# load directly the archive containing the image of the preconfigured PML Analyzer environment +docker load < [IMAGE_NAME].tar.gz + +# The image has been configured to run as a non-root user +# To share content between the container and the host, it is mandatory to create +# the directories upfront with the write rights +mkdir [PATH_TO_SHARED_FOLDER]/[SHARED_FOLDER_NAME] +chmod -R a+w [PATH_TO_ANALYSIS_RESULT]/[SHARED_FOLDER_NAME] + +# In particular, it is interesting to share a folder to store the interference analysis results [PATH_TO_ANALYSIS_RESULT] +# and to share a folder to store the export results [PATH_TO_EXPORT_RESULT] + +# To run a 'one-shot' container (removed after exit) from an image with shared directories for the results. +# Note that directory sharing is not mandatory, one can just run the container without the -v options +docker run -it --rm \ +-v [PATH_TO_ANALYSIS_RESULT]:/home/user/code/analysis \ +-v [PATH_TO_EXPORT_RESULT]:/home/user/code/export \ +[IMAGE_NAME] +``` + +### Container for platform modelling +You can create a container that also share some source files describing your own platform [MY_PLATFORM]. Let us consider that the source files +describing you platform are located in [PLATFORM_MODEL_PATH] and the interference specifications are located in +[PLATFORM_INTERFERENCE_SPECIFICATION_PATH]. You can add these files as source code of the project by sharing them with the +container as follows: +```shell +# In case the user wants to create its own platform [MY_PLATFORM], +# Create share a folder to store the models [PATH_TO_MODEL] +# Create share a folder to store the specification [PATH_TO_INTERFERENCE_SPECIFICATION] +docker run -it --rm \ +-v [PATH_TO_MODEL]:/home/user/code/src/main/scala/pml/examples/[MY_PLATFORM] \ +-v [PATH_TO_INTERFERENCE_SPECIFICATION]:/home/user/code/src/main/scala/views/interference/examples/[MY_PLATFORM] \ +-v [PATH_TO_ANALYSIS_RESULT]:/home/user/code/analysis \ +-v [PATH_TO_EXPORT_RESULT]:/home/user/code/export \ +[IMAGE_NAME] +``` +### Running PML Analyzer in Docker + +Once the container is run in an interactive mode, all the examples provided in the following sections can be run by using SBT. +To display all the possible entry-points of the project, especially your models, just execute the following command +```shell +sbt run +``` +Note that you can edit your code on the host and re-build it in the container by simply running again +```shell +sbt compile +``` + +You can also indicate the memory allocated to SBT using the `-J-XmxNG` option where N +is the number of Go. +```shell +# Allocate 4Go to run SBT +sbt -J-Xmx4G run +``` + +### Exchanging files between container and host + +The simplest way to retrieve files from the container or to modify internal files is to use the +`docker cp` command. +```shell +# From the container to the host +docker cp CONTAINER:SRC_PATH DEST_PATH + +# From the host to the container +docker cp DEST_PATH CONTAINER:SRC_PATH +``` + +A more integrated sharing can be achieved thanks to docker volumes as shown in the previous sections. + +### Dealing with multiple images and containers +Some useful commands for image and container management in Docker: +```shell +# to list all existing containers +docker ps -a + +# to run an stopped container +docker start [CONTAINER_NAME] -t + +# to remove a given container +docker rm [CONTAINER_NAME] + +# remove all containers +docker rm $(docker ps -a -q) + +# list images +docker images + +# remove an image +docker rmi [IMAGE NAME] +``` + +If you want to keep a container available after its creation please create the container as follows: +```shell +docker run -it -t [CONTAINER_NAME] [VOLUME_OPTIONS] [IMAGE_NAME] +``` + +You can then use it again by running +```shell +doker start -i [CONTAINER_NAME] +``` \ No newline at end of file diff --git a/doc/_docs/reference/gettingStarted/index.md b/doc/_docs/reference/gettingStarted/index.md index e69de29..9cf9179 100644 --- a/doc/_docs/reference/gettingStarted/index.md +++ b/doc/_docs/reference/gettingStarted/index.md @@ -0,0 +1,5 @@ +--- +layout: index +--- + +TBD diff --git a/doc/_docs/reference/usePML/editing_PML_model.md b/doc/_docs/reference/usePML/editing_PML_model.md index e69de29..b24331d 100644 --- a/doc/_docs/reference/usePML/editing_PML_model.md +++ b/doc/_docs/reference/usePML/editing_PML_model.md @@ -0,0 +1,39 @@ +--- +layout: doc-page +title: "Editing a PML Model" +--- + +The PML analyzer is based on a platform description provided in a Scala embedded Domain Specific Language +called PML. Therefore, PML analyzer can be seen as an API to easily build your model and to carry out automatic analyses. + +Any IDE can be used to edit PML models, we can recommend [Intellij IDEA](https://www.jetbrains.com) that provides support plugins for Scala and SBT. + +Various benchmark systems for platform modeling are provided +in the ``pml.examples`` package. These benchmarks can be used as a starting point to +your modeling activity. + +#### Getting started with Intellij + +To edit PML model with Intellij please follow the installation steps given by [JetBrain](https://www.jetbrains.com). +The installation can be made for any platform and does not require any administrator privilege. +Once the Intellij is installed please download the Scala and SBT Executor plugins. + +#### Creating a project with Intellij + +The build specifications and project structure are provided with the PML source code. +So to create a project you simply have to select "Open project" on the starting menu of Intellij and indicate the directory containing PML (where the file ``build.sbt`` is). + +The tool should then configure automatically your project. +Please add all the library in ``lib`` as project libraries by right-clicking on them and select ``Add as library`` + +The last step is to indicate the Java version of the project, to do so please go to ``File/Project Structure/Project/Project`` SDK and select ``Java 1.8`` + +You are now able to build, run and debug your models with Intellij + +#### Troubleshooting + +**Connection error while loading project or running build** If your platform uses a proxy +please indicate the connection credentials in ``File/Settings/Appearance & Behaviour/System Settings/HTTP Proxy`` + +**No monosat library in path** If you want to use the integrated interference computation please indicate the path to the +dynamic library of monosat by editing your run configuration and adding to VM options ``Djava.library.path=yourPath`` diff --git a/doc/_docs/reference/usePML/index.md b/doc/_docs/reference/usePML/index.md index e69de29..d590a59 100644 --- a/doc/_docs/reference/usePML/index.md +++ b/doc/_docs/reference/usePML/index.md @@ -0,0 +1,22 @@ +--- +layout: index +--- + +There is no installation procedure for the PML analyzer itself, simply +create your own model by importing the ``pml.model`` package containing the basic constructors +of the PML language. + +The possible operation that can be performed on a PML model (such as linking +or unlinking entities) are provided in the ``pml.operators`` package. + +Exporters to [yuml](https://yuml.me/diagram) and [graphviz](http://www.graphviz.org/) are provided in the ``pml.exporters`` package. + +The compilation of a PML model can be easily perform with [SBT](https://www.scala-sbt.org/) ++ First launch sbt in the project repository (this operation may take some time) +```sbtshell + sbt +``` ++ Once sbt is ready to receive command launch the compilation and execution of your PML model +```sbtshell + runMain pathToYourModel + ``` \ No newline at end of file diff --git a/doc/_docs/reference/usePML/pml_examples.md b/doc/_docs/reference/usePML/pml_examples.md index e69de29..981bbdc 100644 --- a/doc/_docs/reference/usePML/pml_examples.md +++ b/doc/_docs/reference/usePML/pml_examples.md @@ -0,0 +1,61 @@ +--- +layout: doc-page +title: "Use PML by the examples" +--- + +#### Argumentation patterns + +The justification patterns considered for the CAST32-A are provided in the ``views.patterns`` package. +These patterns can be used as a starting point to start your argumentation activity. + +To compile and run the PHYLOG patterns example please enter the following commands: +```sbtshell + sbt runMain views.patterns.examples.PhylogPatterns +``` + +To compile and run the PHYLOG pattern instances example please enter the following commands: +```sbtshell + sbt runMain views.patterns.examples.PhylogPatternsInstances +``` + + +#### Modelling +Various benchmark systems for platform modeling are provided +in the ``pml.examples`` package. These benchmarks can be used as a starting point to +your modeling activity. + +To compile and run the Keystone example please enter the following commands: +```sbtshell + sbt runMain pml.examples.keystone.KeystoneExport +``` + +To compile and run the SimplePlatform example please enter the following commands: +```sbtshell + sbt runMain pml.examples.simple.SimpleExport +``` + +Documentation is available [here](example/simpleKeystone/index.md) + +#### Analysis +For each view (interference, patterns and dependability) examples are provided in the dedicated ``views.X.examples``. +These benchmarks can be used as a starting point to +your analysis activity. For instance, we can carry out the interference analysis of the Keystone platform with + ```sbtshell + # example of a PML model where an IDP interference model is generated + sbt runMain views.interference.examples.KeystoneExport + + # example of a PML model where a Cecilia export is generated +sbt runMain views.dependability.examples.KeystoneExport + ``` + +If the tool is running on a Unix System you can use the Makefile to compile the DOT and LaTeX generated file: +```shell +# compile the DOT files +make pml + +# compile the LaTeX Argumentation Patterns +make patterns + +# transform PDF to PNG +make png +``` \ No newline at end of file diff --git a/doc/_layouts/base.html b/doc/_layouts/base.html index e69de29..3f25b8e 100644 --- a/doc/_layouts/base.html +++ b/doc/_layouts/base.html @@ -0,0 +1,5 @@ + + + + +{{ content }} \ No newline at end of file diff --git a/doc/_layouts/doc-page.html b/doc/_layouts/doc-page.html index e69de29..ef102b7 100644 --- a/doc/_layouts/doc-page.html +++ b/doc/_layouts/doc-page.html @@ -0,0 +1,13 @@ +--- +layout: static-site-main +--- + +