From 07f302656e499d2b09e0114fe3dae6bd81bcb6d4 Mon Sep 17 00:00:00 2001 From: Nicolas Couvert Date: Tue, 14 Apr 2026 16:11:26 +0200 Subject: [PATCH 1/3] [releng] Prepare the changelog for 2026.5.0 --- CHANGELOG.adoc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 83aa957..fe37961 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -1,5 +1,16 @@ = Changelog +== v2026.5.0 + +=== Dependency update + +=== New features + +=== Improvements + +=== Bug fixes + + == v2026.3.0 === Dependency update From 0d36bda273c5610173320ab01def350c2b9fe236 Mon Sep 17 00:00:00 2001 From: Nicolas Couvert Date: Mon, 13 Apr 2026 15:12:10 +0200 Subject: [PATCH 2/3] [43] Add the empty pepper project to the home menu Issue : https://github.com/ObeoNetwork/pepper/issues/43 --- CHANGELOG.adoc | 3 +++ .../PepperMMProjectTemplateInitializer.java | 17 +++++++++++++++-- .../PepperMMProjectTemplateProvider.java | 11 ++++++++--- .../PepperMM-EmptyProject.png | Bin 0 -> 28361 bytes ...pperMM-Template.png => PepperMM-Sample.png} | Bin 5 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 backend/pepper-starter/src/main/resources/project-templates/PepperMM-EmptyProject.png rename backend/pepper-starter/src/main/resources/project-templates/{PepperMM-Template.png => PepperMM-Sample.png} (100%) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index fe37961..6745595 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -8,6 +8,9 @@ === Improvements +- https://github.com/ObeoNetwork/pepper/issues/43[#43] Add an empty pepper template to the home menu + + === Bug fixes diff --git a/backend/pepper-starter/src/main/java/pepper/starter/services/PepperMMProjectTemplateInitializer.java b/backend/pepper-starter/src/main/java/pepper/starter/services/PepperMMProjectTemplateInitializer.java index 93a3f26..80090cd 100644 --- a/backend/pepper-starter/src/main/java/pepper/starter/services/PepperMMProjectTemplateInitializer.java +++ b/backend/pepper-starter/src/main/java/pepper/starter/services/PepperMMProjectTemplateInitializer.java @@ -23,6 +23,9 @@ import org.eclipse.sirius.web.application.project.services.api.ISemanticDataInitializer; import org.springframework.stereotype.Service; +import static pepper.starter.services.PepperMMProjectTemplateProvider.PEPPERMM_EMPTY; +import static pepper.starter.services.PepperMMProjectTemplateProvider.PEPPERMM_PEPPER_SAMPLE; + /** * Provides Pepper meta model specific project templates initializers. * @@ -39,7 +42,7 @@ public PepperMMProjectTemplateInitializer(IEditingContextPersistenceService edit @Override public boolean canHandle(String projectTemplateId) { - return PepperMMProjectTemplateProvider.PEPPERMM_EXAMPLE_TEMPLATE_ID.equals(projectTemplateId); + return PepperMMProjectTemplateProvider.PEPPERMM_EXAMPLE_TEMPLATE_ID.equals(projectTemplateId) || PepperMMProjectTemplateProvider.PEPPERMM_EMPTY_TEMPLATE_ID.equals(projectTemplateId); } @Override @@ -47,12 +50,22 @@ public void handle(ICause cause, IEditingContext editingContext, String projectT if (PepperMMProjectTemplateProvider.PEPPERMM_EXAMPLE_TEMPLATE_ID.equals(projectTemplateId) && editingContext instanceof IEMFEditingContext emfEditingContext) { var documentId = UUID.randomUUID(); var resource = new JSONResourceFactory().createResourceFromPath(documentId.toString()); - var resourceMetadataAdapter = new ResourceMetadataAdapter("Pepper"); + var resourceMetadataAdapter = new ResourceMetadataAdapter(PEPPERMM_PEPPER_SAMPLE); resource.eAdapters().add(resourceMetadataAdapter); emfEditingContext.getDomain().getResourceSet().getResources().add(resource); resource.getContents().add(new PepperMMSampleBuilder().getSampleContent()); + this.editingContextPersistenceService.persist(cause, editingContext); + } else if (PepperMMProjectTemplateProvider.PEPPERMM_EMPTY_TEMPLATE_ID.equals(projectTemplateId) && editingContext instanceof IEMFEditingContext emfEditingContext) { + var documentId = UUID.randomUUID(); + var resource = new JSONResourceFactory().createResourceFromPath(documentId.toString()); + var resourceMetadataAdapter = new ResourceMetadataAdapter(PEPPERMM_EMPTY); + resource.eAdapters().add(resourceMetadataAdapter); + emfEditingContext.getDomain().getResourceSet().getResources().add(resource); + + resource.getContents().add(new PepperMMSampleBuilder().getEmptySampleContent()); + this.editingContextPersistenceService.persist(cause, editingContext); } } diff --git a/backend/pepper-starter/src/main/java/pepper/starter/services/PepperMMProjectTemplateProvider.java b/backend/pepper-starter/src/main/java/pepper/starter/services/PepperMMProjectTemplateProvider.java index 7afa81d..5354055 100644 --- a/backend/pepper-starter/src/main/java/pepper/starter/services/PepperMMProjectTemplateProvider.java +++ b/backend/pepper-starter/src/main/java/pepper/starter/services/PepperMMProjectTemplateProvider.java @@ -27,13 +27,18 @@ @Service public class PepperMMProjectTemplateProvider implements IProjectTemplateProvider { - public static final String PEPPERMM_EXAMPLE_TEMPLATE_ID = "pepper-template"; + public static final String PEPPERMM_EXAMPLE_TEMPLATE_ID = "pepper-sample"; + public static final String PEPPERMM_PEPPER_SAMPLE = "Pepper Sample"; + + public static final String PEPPERMM_EMPTY_TEMPLATE_ID = "pepper-empty-project"; + public static final String PEPPERMM_EMPTY = "Pepper Empty Project"; public static final String PEPPERMM_NATURE = "siriusWeb://nature?kind=peppermm"; @Override public List getProjectTemplates() { - var pepperMMTemplate = new ProjectTemplate(PEPPERMM_EXAMPLE_TEMPLATE_ID, "Pepper", "/project-templates/PepperMM-Template.png", List.of(new ProjectTemplateNature(PEPPERMM_NATURE))); - return List.of(pepperMMTemplate); + var pepperMMTemplate = new ProjectTemplate(PEPPERMM_EXAMPLE_TEMPLATE_ID, PEPPERMM_PEPPER_SAMPLE, "/project-templates/PepperMM-Sample.png", List.of(new ProjectTemplateNature(PEPPERMM_NATURE))); + var pepperMMEmptyTemplate = new ProjectTemplate(PEPPERMM_EMPTY_TEMPLATE_ID, PEPPERMM_EMPTY, "/project-templates/PepperMM-EmptyProject.png", List.of(new ProjectTemplateNature(PEPPERMM_NATURE))); + return List.of(pepperMMTemplate, pepperMMEmptyTemplate); } } diff --git a/backend/pepper-starter/src/main/resources/project-templates/PepperMM-EmptyProject.png b/backend/pepper-starter/src/main/resources/project-templates/PepperMM-EmptyProject.png new file mode 100644 index 0000000000000000000000000000000000000000..423b7513bf480f28432b3aa5b44153726f14abae GIT binary patch literal 28361 zcmeHvdq5L+w!eK?YN@5IUD;M4+ls|rD_OOQ3MAWZUFxNp>$aAyJW@ra6-bORypyq7 ztCmV`MWOOaTdPzpq=*ngAR{V96o?uz;E)UuA%-vsAuxGNX682$bocHp?eF*N`rGdP z@dr%i^_?^4obNfG^Z3sG|5y__{fQTzm@;L`^i^-Y`R6H99yu~)%EPUXKSmun#yG~O zHV^Ut9QnqSiniG%YUk0!*H^zjWlE*k*Rx?NwLfj!TklgBJ-fsE_mF-IEuA{}?2eUx z+3^l{%Z{`S+c!^%+`f4;hyNjWNBp|SsarUISoP-X@21BiI3`1q;;*KaGS9N{m8v^2 zgF*kEw(nW!x2wva&$k3UZ}K$-mH+9vfYtN2KEB|MeJ{Qs-}hG1{-BM2-nemP-dj(< z^ym*W9(jG}01w!4mrM0WH#?EmiBW4AdNPG3#AK zu8mKsa1=_c#S;8`;Z0xI9s%=TT6HjJ)$p^*p*hUqIl?nS4kTjcr+*Ljsxan);#KtY-M)O9GdHrDPvgcDP;3Ad-nKO zjGhABr&zG71a@`rb2yC_gMwkIV!_T+ZTL5uFuiCL3F*U>!zpEsh#e5L#_GO&iW`mZ zNdwc}`C?a>MnPz}^5Lu^Dc*9W48+vr5ltA_J*&bKNWEpVQRAgiF2Up)7CFLV+k%1N zU>4IhgUQQ;AU*1g>W9Gok(((eJm1P9vax89Yxib*xrCe%O|~Ssm1^=EO(@YXT^_Rt zPIYI2163@*x-h>*ob5bcM)S-842?pOwg4Rc8pifWvP~l?<_NN5`20`Gfg=|r#)`qHX zH~B>MYfIy^4f$5jorA8cMYRu&Erhu}YME61PWl%Ic9D ziXNdy<~OYHb?X=#2uURw~>+~sOidrtZ|41k+0Y%}d zhZG>D5OatBLXDN%b;c8*Y#OcI6sR}aY79~?u}s{CT0>+2AjiX65IBKDF6Ar45ZLY= zYA3%`G1neST!fuhL3!8ARx75ohABI7c|XLa_5a|BNXO2D=j$y&_E#1h@tfH~X{Qf4 zw=<=&tJA*~0U5qtdcxGYgRZ&k;kjjM=jZD5^IZHUH$tdN%U0Q119zVyXtN%;xGVhVwGE%aPA5PG;OXm@yi8v|c$_N=9#`9T8{W9!UT!vsj?hZehH897Ly5U}1)094a+4ChWlB=^C#~UTYKqo?!_ma$y`CN#(PJoLK5KPd`CYar@WrTo;E_dtZ1cDBVKQlU8pCD5K-o=@EDx+hGnI zR*42xxm>S-o>DtC>Sgb?d*fdgd0%CU|M`Q{yxZE}=D+RTo^ASJ)5G2$A)n5j;oWXq z_$p=2DVgMKXud1v*w0M`EnLq!N$Y;E_5NXI{@aXo-m$)K@?~SIxe;G@O;*OVGUnLz z;bH&xk9zXQsLiugG3`o?*fYeM&83`7`paKtHG59d!*K&y1*h(2r@IFX&?Ao9=V`p5~eW!9k-U{JpFqeLgfsCwVZu10mUvr)$`-@oMsDX)m4PJ150`zEDY)3VmnyvZT zOHDIq@U3t~6-PR>WF5?RE3LSXDoq^O%@wuFVoh#;at=^Jy>ID)kh)Do4}e8U>!-K@ zqJo}%C#445&s4VdYqLjXjFHs+G5IYTQzVN$VuP^MZ}wxA5$}ZI^$;SCIVIP}3Zcr3|rX~%f>u{3MN;a^w zvlmlpRCak~L5tdXMqAK=Y}yX2mEo<}7j}OkjZ|k3d^OkJ4+HoidzXFXND)hNT8B2n zo~x2hE?Eu?NBYSU)+q<0KzF0Tz$W~ehLIUeqRJ1~Gt-SMCGVtDOWq=#SFLe{)EkKU z%V4ZqNPf(6EmpyqK{eb0onB3uZZOkR9@z_$pUMKZIAkS66*waB6Z)DgsCA}ThUWq} zGhBJ)l@8@pDuO%hpdk;*uGu_?lC*NNL zbc4(Ao98z=KWOwg$=;DG@Jj6340RP0&wj%%_$xm~J{J@gdYyk+n$lj<><2i{tC+-F zp6hg>vr(2tyhA#zD{!Y6Z_SV!KHx#Y@sH#gVvYNw7|6R1hR6mTWrVbZ6vINVU^7{Wsb6+*x zHSLR;_Ql-Ma<0&96EhY;vJW`okCBDKw$x!!n-wnsh8v*MK2{Tfp%I%EliFuT?!UpV-j50DGqi?uRJ_uXX25Z zkRur2G;*_>$Q_>YS*`?9&wgQ;Mr4!}DMtkfWN4AXSayhpH-r+!+{426I^sR#Vajk; z)OUa*IRt3~oE1Le9HxVGedYraC1k&mapwEvDBVSr`=X2uU@@>L-LIf$7Kx@Y(@FMl zVmwF#%`&0B+>wCM?SD?8KNwp`|wxQWC<-J)tC*Y~1~hIi=DwOx{kSc}V0F zH=ltqBO0s?(%IzWlmT6Qg;Ma~wz#PN)o=)QF{e!|iW;;9@v)=8b}Wq(N-|0VAz5%B z+XLK86y99P9DTG~DeeqzNyNFvyGk#uA3&o3CXz7@)%nf4^WOw6s`9cV64o@6ONQvnX zJNSIeQA?Tk#ixfTzs9^{cbjgv&uBIS$NPx|RcvQ>%w{S1+w{U@Isp&o%VIq%$u?lv zpXlGM(hA6RS{m`SWEoBq*=di zl=dgaP0kQ_dcGRk0~vu}n0A(A=`avaja)xwT$lAKTW z(v}NVG8*0M`qWFQNiDev#G&iCZuF)>(y6x;0t(j(8NPS-Q2h_WoI4~DiZ|{J424cR z`srAqk9ZW(k{8KQ{-@-;{bf8Ry0Sdv2=vAo^2sjPGfM>T=Gt`~1ub;pd$s>Cf#3&Sz-$&l_4>vyw|* zdx>xU7lXLhc4!#7p*D8T_;1dXbG9R?V!sI{O-f7hm7#XZ+OaX z90d?DdsCyruRuu?XCBO$v1SoX!uB+=SKwd6jznqp8o(najv0z5Y!beX@_&}#BSsDr zv=$?9U;wI}W<2AisoRu40%+VnkQC%Y|JkVb^X_Cu-1%Zm*`I1=9>h&y2u& z9SX9EKDH=3FLGlR0AaU0F@TvH0ASOpXpCV!Aj_KBVKE1bdV`fbNeu~zNHtShR8Lnq z_<1mz0;hV8vJTl*m;1{^17)Rp0+lgGma0^G6on)Tx;0a)2&|VNw(Xn9hE@aK(Lqaq zpokC%lUt2E2?sJ*=PP^X2WA#UZpiw6HjNo7x2=+ltn$l#A=xpSjn*)0{((C+nItqSkFhS6byFZT8xvGIMgPdN?t8c9ikCM)5>jWgtH8nI1IUuPYjK0Er5BSvwQHjxL;p)r{b)C&H`$u`ppY5R2?%57(bB#`zruW* z%pH;uM^3k<|9Fl%6-!xw_H|$P>%~{zsyeqC@U4ZF;Nufpz=&a|3QtQzU$tHvNVIB^7|W7+|y z`vY*Mc*{lYGhvWcpipBEd(Kq+Mt#e??*OtK`>3Vs;`h=yOVOlumk_3rVtW9~(NkkA zDSCl19hEu+Wg6DOGFRaSl5+&-+0WVLc^EuS)*=S56Mk(FlYrK|F2cyo?5VF5+GN3E zbI2~0|5^-YNUCr-Vo0VX0J}N~2jjeg`C_aik((r6IMB$CD=4u`d*Wo)vMt61R=YsQ z-WKb~C}qFP$=q-{txj#oFdW}Z$qTWPo`>t<0=o)MgX9KxvZiCkP^QWW~XX z?{pk@ChRciFQ7_J=EEIUb=+csChyW}8Qg>}sr_gg%tVO-e{IAOj*LAp^$$I3w}`+s zh*(~3MCCeJ`$eKdm)NVcCO(%oD(8IELA1C81I}8=nBZ8;FskHAac_-!1JF~;{v)^U z)7e}YXoygT*j8+0zOr2TJK%a$|Epe2W86e5t%ZB8#cDSvD)2hBy$+&}uGpAhR^YC( z#$)l3Hv%C{alyPV(d6PLU|)vDfvB-Yv1Q=6@oW(Xco&sIHUndNVBd-#*m)tNg&VNN zMzxHd?3a(^7Sr~yKQrWMQ6ln5EaNIdutTRnDm_DGSh)>+JlTF(;i=1w#~YXHl|Vp^|4@vi941_`X|LD&VJq$Rjp)J} z=@nOw1WDk?-~z+-%1ZW|HNHclXBfcevn9VrWiTzqC_Z9m%D{cM2oJgxA}wsOxenf& zAX6yy+SaSW4!w4@|4E$Dwd9@9xIs=GzP3}DuTq&-)1O)zGRm7Tc7IaIPIQ>vl%iYh zs1ZHZQzJEMHcF}x(P49o4QiIX-$hHq`0c36!k0I+3iFSfYY{i&pz!8pe!Jf8Ob^p5 z$xNV4N8=V`22{pXp?j>(f;Z-TIV!kt^FuH-;&S!IM^z!l!NqB})3Iah$U$q8wZ1`u zBxQN7eEv*qui#CD*Q|X8>xvtwbJQj~`i>h*aDIK#aZct_^(HiOv&0;1tF6n4ls}a$ z!RE3T4`#t=x^8{=2y$AyU1iyrWyF3rc+KI1F@mtO%z-JhmxC}AoSOYC%rqgQ+4Nly z6z{(sI6F89Skk{xAdTdAgRFN$M?2^*sjzL+a^u?MCPoP?(lzZ!AY*WI=?~WPE?=+& zudLB26}X$XSC~aJvLQo)*_n~T%~E!7#1eDhEGPv_FdyeSbTo|$vRX7xd!WP4lEkQC}!JI6OA%T3hd?^RZWUNM2 z4h9ApvJ@6tSaR2yKg?#z8n9!vW{T6uimHe$lWF_U-tp3Q;F;{~`T$Dhg~_gY zVr@|etRhD1E#~x(wqytJV*ea+jo>ZwYL<#{AqApC_*|ckU;zSwXUVKF}lZ?zX7a)9rVvaT93y1pd!`#>BS*g;?}+S zErz^H!sX!Ol1OUM>1r3eY;a-VXfLlVt9n+U5S1${H)XUZdS3 zw8vSnidE#b>5_7M(@1YrKk*Ha#Z={3h-ra78~nDzJ{H@#%=#e<{oBws`Yu)QPJZqJ z&J!XHB0fi~lq35`YOu^{ZHn2Q9MJNTK!nBl4HW6qHnUrDqflECSjCiwx8+?T7&WRs zQ6&R-+sc;VQ?I%34nSB0L4y*lfD(unUrTZGVk+q1&hP9ZNKvn?R%|LkaQ%pqQ&?g^ zRBTv)2|Fuhse%!MVJl@dS;NydgLFu{4I?Af(z4Jca%$f8QHG@I!p%)ZYDCF#xST-#RHVghxdQ6?5qPz+TDR=b4h#oA}8Rg`5ZW*UpD$i5NRK~GREk|fX! z&gL=+cLg**wB#k`>NZfM()t!1jbA({7TcL=*XHtb8pzcuUSn6S>EqKt7bf~5*Z-y+ zT)u*wS#SU`SkF7pl+JGJv|=cOll9PPL4fNVT7Tt>BIQz}%qmf(NX}CR7FIr{oU#3z+P!sti{QD@>MXIHC+_mP!PHzC z4G?M(N1tcKX`n%>SQ_g#=$mZr)LEfAnb!k(t;4B7{tx8bexh2}#rjRn^Ds3Pj5TS% z?154IqtoD9x7f=9CD_%Kq_%k+Y`yNaFqKyTX7n;qvQc%us;oJM4bBM_5}`WLENs-` zp+8Emp#tIG$pVgXS-mQ7t-jWh8}WqdDx%s@5j<(kJ~3-{=v2^zo=Yiv z+c@ZdLZP?tmRYxNQsC)d+=2omvn}gS2JS)ZO4Ga9i3<2=ehbBOt}av>Gwc8nJ)_NK zNVf8|yJTr$@n50Ar3sEVOf}5T07*US|4t|__i9+<>MDLc?lhM`ddKQP?FnQ%A#u`W5Z-rBK&~mk> zq1qEyC{%Qjq4uXz7#}wzHFkB-YgMw0E^u0H$Q{NR)jREml|#;R8;zbAZ)xTC+pcxE@)cS-Qid}PsdsR4XW--msqa|#QRH%wiweflob2haC4SU0_Gt0 zFeQldGDVm`OqFSuMe=l`$jiBig@P1vuKkNa`uAdS-vPv2r#_F84ppnINh1)KQNcm_ zAuo56T5K`%(@_6I*eG(`Skz!3merd^&w1gXXaQ5yRm1^b)3$n*w)c`iaz5{NM_;kI zzsDJ#Mky#Z>UMU;61{x~yBw6xF6L9U0^;$ zavVZ1C6TLaz|qtg5PuV??;`~A1GxD#?n)?X#ix;;h1Dd2pdcjWX09EbH@KMRnVpLI ze^{gfgE|4Of(DT=6=lHZ>e9lj3Q%oV_EoM^q$FFd*)ttjYO_C|f~g$N(%dS(2ElxH z;k;@ch=^$PEm<=A7Hwtd3dS0lBaQI?0MlBXJgGuGr;{m#l$J16YN#$gCP0puU1vI^ z4`BvTQ5j;tMWj)|Ch;YMU5g&+(xY`M4N(gbX+Z2DjyO{YJUb|M;d=}sCVGS!Ki?5( z)P9N=g3PBJNd_A)qh3gk#)*rdcv|>=f1X!to)x_-DzMq5K@`#pKcIbP7M3vJF)&W3 zZnQBTQK>f=YbYBXDGXSv(4pZO_2Q$Q7L|Zs#Val;;z*@)0ym?m)U2sJ4qv2zMs5kG zP6$ZSgcU|{5wei~#aur4A6>UyCAUIuVDOV1P}cBxt$7XHBzRp+wrw)j<#fBQT7Z6M z)AGkCdow&mM;nx7v=OcYx9dW}FzsNyTJLaHLxCR{7f{hjGEZkr-$bFYW_!O%b%PSh zR0q$$r3A8AiO?(+_#)KFaM;zGllY#P_5B&h8RQZwEYpT~%S0`F zN*WLnvllljV6_2i&*{D>SPXcc%E1v-dgT}``mniz8_G-GPC4l71I1prk%uIm7KRwv z8r+;Yn5xr?vWlpnlo-_!X%ack577mVx`}T)q$`bTEoQgc7B;k=Bjj8z7#EBtUDw;| zw7y!MlB^5oKWg~h9;_q&HK!?7Jm9cD#|fBv+Y6gk;&n$svFB?I#>}Od5D6l zMuFD653;DfFb8V15v<%TWUw+pZ~9S zW8S-6XL41Eo1qc9i+k(63*+~vt{)B}OIlk#6fk#W?LfI<3{g}F=VCR%sn4yY)#-9O z6{Q%%p_7j#IsfAynC!gh%N(_&Nygi0^54GOFVl2plXn|L@Avf<=0BPVSel~O(3Qgj zwipp_`g*~cfe+iSowW0jm#6FKIvMvim8g(3Xjw zs(s9R%zI0QkeBJYyhIY+elqE?u(4zBSGIo=)xSQ5m^U`)(RC_QZ1ky$=LfxyIJz#e z>Ae{tN0L%pN3T+Qk*BCfl=0)r>$dzbwpa3-nANqLDysX$Z+OpnA648Y_^-tD9F*V8 zXFhR{4BiUuKbU~(O%=|?oBs6m7=7g{))?#73tB(8OKtgz`89=Gn`3!bXnV%!J2SAX z#JshA$?m(S##sD^#EI`Z?;zddekNbZn(w8+(3{RcOMa8Pnp| zja|K7z-AZ6*WCjVcSl$+i1vaAd2c@R-^cFW+AbLL+Y0YkTifIA0|)P3`$@`Sjsu6W zy|nwl;Rbc?E@9)qVQf!#A2|H^9vLNLz~Qe1i~)xSNWeI7IB}10=r!4n@!^8xP0fz@iz&+qF zv5>}q!#`0-W0U>C5pWMUOemyr;PB5A(zr`_a0J`~4iir0ao{kqmON-7jRzqQj(~CC zF!59#2M!Zz$paVCco6d72p9(r6WiNy;4q<bfN|h3vArDw4ijt1gBH@j z9&LOU@>&k$-`y0=*mh2LFD7lPS=L}ZRv?YFXRQ1C@LZYcnZ50=c>{Ov$mPRH4C%@L zqZpU6f-=dARkwaBlAlDDUWoOtjVymQ{-Ba6w!}-HPn_==!;KTiACn2E$%Iq#k_Vm@ z{J9|UmlALfH{P?r|1B#xnQ(eV(NyW z;VX2>7TYNOEGEr#o|~{u=>dhBzoI^=@e;+vxyApFGSDTrya@oIMYq1e zam>M%mr#9uiUn(|8E{lt0bArc;&9fFd@DHES*}eTF*XLb+Sc1%y>m-XUA6I)e=h4Q z^=T-d)KmR~!>fi)-Ya2a?t`x0`)FXoEWz8<=PzQsb%tM2HUH-V!%4*L1q{vwsg)CFwd~LS34e)Qe{i&G&ssA&>b~surd8Fd? zdrkfEREyw`t~2nq2u=*gCQH4OrQXR>FV#r;pcjDrY}dvwCBSP6C)XBCt}U2cTkvaN zTQIQ48~xvH5p1A0Y|k8RkIvY8FT5X15d3(79|rpJy4T%nu5^qxnU3AZ2V+3_f2XOx zdJ~6QfK$By_#X_b#?AS}G2(chYOZJBq^yZ*Pua^8#-wKVs^Wn0F-B_N}p&5_n;{{6y%=!zd(I3VhFF7JNfUQ2)K4e`q{}b(q|4~JD|9fsunF-U(iiA~AIk$o-ER;4+eUx(-!%mEj{JN>!2kP| q?SE|#oVZN*KfZqyCm&k&>9 Date: Tue, 14 Apr 2026 15:44:23 +0200 Subject: [PATCH 3/3] [44] Add a Gantt Diagram to the first workpackage of the Gantt Sample Template Issue: https://github.com/ObeoNetwork/pepper/issues/44 --- CHANGELOG.adoc | 2 +- backend/pepper-parent/pom.xml | 5 ++ backend/pepper-starter/pom.xml | 6 +- .../PepperMMProjectTemplateInitializer.java | 56 ++++++++++++++++++- 4 files changed, 66 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 6745595..8929648 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -9,7 +9,7 @@ === Improvements - https://github.com/ObeoNetwork/pepper/issues/43[#43] Add an empty pepper template to the home menu - +- https://github.com/ObeoNetwork/pepper/issues/44[#44] Add a Gantt Diagram to the first workpackage of the Gantt Sample Template === Bug fixes diff --git a/backend/pepper-parent/pom.xml b/backend/pepper-parent/pom.xml index 730b797..a0fe645 100644 --- a/backend/pepper-parent/pom.xml +++ b/backend/pepper-parent/pom.xml @@ -168,6 +168,11 @@ sirius-components-collaborative ${sirius.web.version} + + org.eclipse.sirius + sirius-components-collaborative-gantt + ${sirius.web.version} + org.eclipse.sirius sirius-components-collaborative-trees diff --git a/backend/pepper-starter/pom.xml b/backend/pepper-starter/pom.xml index 52b94b0..14cd793 100644 --- a/backend/pepper-starter/pom.xml +++ b/backend/pepper-starter/pom.xml @@ -71,7 +71,11 @@ sirius-components-tests test - + + org.eclipse.sirius + sirius-components-collaborative-gantt + + diff --git a/backend/pepper-starter/src/main/java/pepper/starter/services/PepperMMProjectTemplateInitializer.java b/backend/pepper-starter/src/main/java/pepper/starter/services/PepperMMProjectTemplateInitializer.java index 80090cd..c839964 100644 --- a/backend/pepper-starter/src/main/java/pepper/starter/services/PepperMMProjectTemplateInitializer.java +++ b/backend/pepper-starter/src/main/java/pepper/starter/services/PepperMMProjectTemplateInitializer.java @@ -12,19 +12,33 @@ ******************************************************************************/ package pepper.starter.services; +import pepper.peppermm.Organization; +import pepper.peppermm.Workpackage; + +import java.util.List; import java.util.UUID; +import org.eclipse.sirius.components.collaborative.api.IRepresentationMetadataPersistenceService; +import org.eclipse.sirius.components.collaborative.api.IRepresentationPersistenceService; +import org.eclipse.sirius.components.collaborative.gantt.api.IGanttCreationService; +import org.eclipse.sirius.components.core.RepresentationMetadata; import org.eclipse.sirius.components.core.api.IEditingContext; import org.eclipse.sirius.components.core.api.IEditingContextPersistenceService; +import org.eclipse.sirius.components.core.api.IRepresentationDescriptionSearchService; import org.eclipse.sirius.components.emf.ResourceMetadataAdapter; import org.eclipse.sirius.components.emf.services.JSONResourceFactory; import org.eclipse.sirius.components.emf.services.api.IEMFEditingContext; import org.eclipse.sirius.components.events.ICause; +import org.eclipse.sirius.components.gantt.Gantt; +import org.eclipse.sirius.components.gantt.description.GanttDescription; +import org.eclipse.sirius.components.representations.VariableManager; +import org.eclipse.sirius.emfjson.resource.JsonResource; import org.eclipse.sirius.web.application.project.services.api.ISemanticDataInitializer; import org.springframework.stereotype.Service; import static pepper.starter.services.PepperMMProjectTemplateProvider.PEPPERMM_EMPTY; import static pepper.starter.services.PepperMMProjectTemplateProvider.PEPPERMM_PEPPER_SAMPLE; +import static pepper.starter.services.view.ViewGanttDescriptionBuilder.WORKPACKAGE_GANTT_REP_DESC_NAME; /** * Provides Pepper meta model specific project templates initializers. @@ -35,9 +49,19 @@ public class PepperMMProjectTemplateInitializer implements ISemanticDataInitializer { private final IEditingContextPersistenceService editingContextPersistenceService; + private final IRepresentationPersistenceService representationPersistenceService; + private final IGanttCreationService ganttCreationService; + private final IRepresentationDescriptionSearchService representationDescriptionSearchService; + private final IRepresentationMetadataPersistenceService representationMetadataPersistenceService; - public PepperMMProjectTemplateInitializer(IEditingContextPersistenceService editingContextPersistenceService) { + public PepperMMProjectTemplateInitializer(IEditingContextPersistenceService editingContextPersistenceService, IRepresentationPersistenceService representationPersistenceService, + IGanttCreationService ganttCreationService, IRepresentationDescriptionSearchService representationDescriptionSearchService, + IRepresentationMetadataPersistenceService representationMetadataPersistenceService) { this.editingContextPersistenceService = editingContextPersistenceService; + this.representationPersistenceService = representationPersistenceService; + this.ganttCreationService = ganttCreationService; + this.representationDescriptionSearchService = representationDescriptionSearchService; + this.representationMetadataPersistenceService = representationMetadataPersistenceService; } @Override @@ -57,6 +81,8 @@ public void handle(ICause cause, IEditingContext editingContext, String projectT resource.getContents().add(new PepperMMSampleBuilder().getSampleContent()); this.editingContextPersistenceService.persist(cause, editingContext); + + this.createGanttOfWorkpackage(cause, editingContext, resource); } else if (PepperMMProjectTemplateProvider.PEPPERMM_EMPTY_TEMPLATE_ID.equals(projectTemplateId) && editingContext instanceof IEMFEditingContext emfEditingContext) { var documentId = UUID.randomUUID(); var resource = new JSONResourceFactory().createResourceFromPath(documentId.toString()); @@ -69,4 +95,32 @@ public void handle(ICause cause, IEditingContext editingContext, String projectT this.editingContextPersistenceService.persist(cause, editingContext); } } + + private void createGanttOfWorkpackage(ICause cause, IEditingContext editingContext, JsonResource resource) { + var optionalGanttDescription = this.representationDescriptionSearchService.findAll(editingContext) + .values() + .stream() + .filter(GanttDescription.class::isInstance) + .map(GanttDescription.class::cast) + .filter(desc -> WORKPACKAGE_GANTT_REP_DESC_NAME.equals(desc.getLabel())) + .findFirst(); + if (optionalGanttDescription.isPresent()) { + GanttDescription ganttDescription = optionalGanttDescription.get(); + Workpackage workpackage = ((Organization) resource.getContents().get(0)).getOwnedProjects().get(0).getOwnedWorkpackages().get(0); + var variableManager = new VariableManager(); + variableManager.put(VariableManager.SELF, workpackage); + String label = ganttDescription.labelProvider().apply(variableManager); + List iconURLs = ganttDescription.getIconURLsProvider().apply(variableManager); + + Gantt gantt = this.ganttCreationService.create(workpackage, ganttDescription, editingContext); + var representationMetadata = RepresentationMetadata.newRepresentationMetadata(gantt.getId()) + .kind(gantt.getKind()) + .label(label) + .descriptionId(gantt.descriptionId()) + .iconURLs(iconURLs) + .build(); + this.representationMetadataPersistenceService.save(cause, editingContext, representationMetadata, gantt.targetObjectId()); + this.representationPersistenceService.save(cause, editingContext, gantt); + } + } }