From 8dc3149234ea112df24b27dcb441fb65a7f2fed6 Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Tue, 1 Dec 2015 17:35:46 +0000 Subject: [PATCH] 1452: Implement a GUI for StatMan Algorithms Importer Task-Url: https://support.d4science.org/issues/1452 Updated GUI git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/statistical-algorithms-importer@120542 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/StatAlgoImporter.java | 18 +- .../client/maindata/CodeEditPanel.java | 2 +- .../EnvironmentVariablesProperties.java | 28 ++ .../properties/InputTypePropertiesCombo.java | 24 ++ .../resource/StatAlgoImporterResources.java | 34 +- .../client/resource/add_16.png | Bin 0 -> 520 bytes .../client/resource/add_24.png | Bin 0 -> 803 bytes .../client/resource/algorithm_24.png | Bin 0 -> 1014 bytes .../client/resource/cancel_24.png | Bin 0 -> 995 bytes .../client/resource/delete_16.png | Bin 0 -> 587 bytes .../client/resource/delete_24.png | Bin 0 -> 928 bytes .../client/resource/help_24.png | Bin 0 -> 917 bytes .../client/resource/project-create_24.png | Bin 0 -> 1066 bytes .../client/resource/project-open_24.png | Bin 0 -> 1089 bytes .../client/resource/upload_24.png | Bin 0 -> 848 bytes .../client/ribbon/HomeToolBar.java | 22 +- .../client/ribbon/StatAlgoImporterRibbon.java | 2 +- .../client/tools/ToolsPanel.java | 17 +- .../input/EnvironmentVariablesPanel.java | 322 +++++++++++++++++- .../client/tools/input/InputTypeMessages.java | 28 ++ .../client/tools/input/SelectedRowsPanel.java | 319 ++++++++++++++++- .../client/upload/CodeUploadPanel.java | 6 +- .../shared/input/EnvironmentVariables.java | 91 +++++ .../shared/input/InputType.java | 64 ++++ .../client/resource/add_16.png | Bin 0 -> 520 bytes .../client/resource/add_24.png | Bin 0 -> 803 bytes .../client/resource/algorithm_24.png | Bin 0 -> 1014 bytes .../client/resource/cancel_24.png | Bin 0 -> 995 bytes .../client/resource/delete_16.png | Bin 0 -> 587 bytes .../client/resource/delete_24.png | Bin 0 -> 928 bytes .../client/resource/help_24.png | Bin 0 -> 917 bytes .../client/resource/project-create_24.png | Bin 0 -> 1066 bytes .../client/resource/project-open_24.png | Bin 0 -> 1089 bytes .../client/resource/upload_24.png | Bin 0 -> 848 bytes 34 files changed, 918 insertions(+), 59 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/properties/EnvironmentVariablesProperties.java create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/properties/InputTypePropertiesCombo.java create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/add_16.png create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/add_24.png create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/algorithm_24.png create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/cancel_24.png create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/delete_16.png create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/delete_24.png create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/help_24.png create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/project-create_24.png create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/project-open_24.png create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/upload_24.png create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/InputTypeMessages.java create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/input/EnvironmentVariables.java create mode 100644 src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/input/InputType.java create mode 100644 src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/add_16.png create mode 100644 src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/add_24.png create mode 100644 src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/algorithm_24.png create mode 100644 src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/cancel_24.png create mode 100644 src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/delete_16.png create mode 100644 src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/delete_24.png create mode 100644 src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/help_24.png create mode 100644 src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/project-create_24.png create mode 100644 src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/project-open_24.png create mode 100644 src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/upload_24.png diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/StatAlgoImporter.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/StatAlgoImporter.java index 0c1f2a4..be5f139 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/StatAlgoImporter.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/StatAlgoImporter.java @@ -30,7 +30,7 @@ public class StatAlgoImporter implements EntryPoint { private static final String JSP_TAG_ID = "StatAlgoImporterPortlet"; - private static final int RIBBON_HEIGHT = 120; + private static final int RIBBON_HEIGHT = 110; @SuppressWarnings("unused") private final StatAlgoImporterServiceAsync statAlgoImporterService = GWT @@ -72,6 +72,7 @@ public class StatAlgoImporter implements EntryPoint { mainPanelLayout.setId("mainPanelLayout"); mainPanelLayout.setBorders(false); mainPanelLayout.setResize(true); + // mainPanelLayout.getElement().getStyle().setBackgroundColor("rgb(3, 126, 207)"); // Main @@ -93,19 +94,22 @@ public class StatAlgoImporter implements EntryPoint { // Right ToolsPanel toolsPanel = new ToolsPanel(eventBus); - BorderLayoutData eastData = new BorderLayoutData(310); - eastData.setCollapsible(false); + BorderLayoutData eastData = new BorderLayoutData(400); + eastData.setCollapsible(true); eastData.setSplit(false); eastData.setFloatable(false); - eastData.setCollapseMini(false); - eastData.setMargins(new Margins(2, 7, 2, 7)); - eastData.setCollapseHidden(true); + eastData.setCollapseMini(true); + eastData.setMargins(new Margins(0, 5, 0, 5)); + eastData.setCollapseHidden(false); + + // estData.setMaxSize(510); // estData.setMinSize(310); mainPanelLayout.setEastWidget(toolsPanel, eastData); // codeUploadPanel.expand(); toolsPanel.enable(); - + + bind(mainPanelLayout); controller.setMainPanelLayout(mainPanelLayout); controller.restoreUISession(); diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/maindata/CodeEditPanel.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/maindata/CodeEditPanel.java index 7db243e..037fd4c 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/maindata/CodeEditPanel.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/maindata/CodeEditPanel.java @@ -84,7 +84,7 @@ public class CodeEditPanel extends ContentPanel { Log.debug("loaded " + result.size() + " code lines"); String text = new String(); for (CodeData codeData : result) { - Log.debug("Read: " + codeData); + //Log.debug("Read: " + codeData); text+=codeData.getCodeLine()+"\r\n"; } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/properties/EnvironmentVariablesProperties.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/properties/EnvironmentVariablesProperties.java new file mode 100644 index 0000000..4d42d20 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/properties/EnvironmentVariablesProperties.java @@ -0,0 +1,28 @@ +package org.gcube.portlets.user.statisticalalgorithmsimporter.client.properties; + +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.input.EnvironmentVariables; +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.input.InputType; + +import com.sencha.gxt.core.client.ValueProvider; +import com.sencha.gxt.data.shared.ModelKeyProvider; +import com.sencha.gxt.data.shared.PropertyAccess; + +/** + * + * @author giancarlo email: g.panichi@isti.cnr.it + * + */ +public interface EnvironmentVariablesProperties extends + PropertyAccess { + + ModelKeyProvider id(); + + ValueProvider name(); + + ValueProvider description(); + + ValueProvider inputType(); + + ValueProvider defaultValue(); +} diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/properties/InputTypePropertiesCombo.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/properties/InputTypePropertiesCombo.java new file mode 100644 index 0000000..c80c3b8 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/properties/InputTypePropertiesCombo.java @@ -0,0 +1,24 @@ +package org.gcube.portlets.user.statisticalalgorithmsimporter.client.properties; + +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.input.InputType; + +import com.google.gwt.editor.client.Editor.Path; +import com.sencha.gxt.data.shared.LabelProvider; +import com.sencha.gxt.data.shared.ModelKeyProvider; +import com.sencha.gxt.data.shared.PropertyAccess; + +/** + * + * @author giancarlo email: g.panichi@isti.cnr.it + * + */ + +public interface InputTypePropertiesCombo extends PropertyAccess { + + @Path("id") + ModelKeyProvider id(); + + LabelProvider label(); + +} diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporterResources.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporterResources.java index 87821b4..91ad7ef 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporterResources.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/StatAlgoImporterResources.java @@ -23,13 +23,19 @@ public interface StatAlgoImporterResources extends ClientBundle { @Source("help_32.png") ImageResource help32(); + + @Source("help_24.png") + ImageResource help24(); @Source("download_32.png") ImageResource download32(); @Source("upload_32.png") ImageResource upload32(); - + + @Source("upload_24.png") + ImageResource upload24(); + @Source("job_32.png") ImageResource job32(); @@ -47,13 +53,39 @@ public interface StatAlgoImporterResources extends ClientBundle { @Source("cancel_32.png") ImageResource cancel32(); + + @Source("cancel_24.png") + ImageResource cancel24(); @Source("algorithm_32.png") ImageResource algorithm32(); + @Source("algorithm_24.png") + ImageResource algorithm24(); + @Source("project-create_32.png") ImageResource projectCreate32(); + @Source("project-create_24.png") + ImageResource projectCreate24(); + @Source("project-open_32.png") ImageResource projectOpen32(); + + @Source("project-open_24.png") + ImageResource projectOpen24(); + + @Source("add_24.png") + ImageResource add24(); + + @Source("add_16.png") + ImageResource add16(); + + @Source("delete_24.png") + ImageResource delete24(); + + @Source("delete_16.png") + ImageResource delete16(); + + } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/add_16.png b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/add_16.png new file mode 100644 index 0000000000000000000000000000000000000000..9a17af8d7b43854f8418edfbb60a53c158140bac GIT binary patch literal 520 zcmV+j0{8uiP)2?gE)(GrOxgq6YxoMTY<0CZ_NPI3aIO(OXMh%^Stvc%Gu z#xxlFZDWwlvYXu}js9Pw_h#OVGyq7VdRvknB~2x5vn*4VWs2x~Jb~qd~o6U&h_^%GG_b?a?n9t`p$K#RX@%UfEOX94vJkPhwdA0G|%<0leRu^9#HKAC8&jz|(aRNsYK6eloM%k%XD0 zfDgP?*6=)!UaxnFn(a5hH?#ECMPAN1&+}~*MT(+Gd7l6AoPPn#b3p+yEiOg?0000< KMNUMnLSTY@n&Vjj literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/add_24.png b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/add_24.png new file mode 100644 index 0000000000000000000000000000000000000000..dd62ee84fd90897515bba1cf2b42e1f00251e575 GIT binary patch literal 803 zcmV+;1Kj+HP)mTpCgGN2L(C&A>ME_P&$BPi{e{O6o|-#xzfJwpnT(%18no=JKxsja(c z$M2p=n$L?d6_U2IL5IVkn$4z~&8CLKVP3NB`+_2AM$#8aVOkwUks6JL>h-$n^|~63 zhN39SCJAHhOu7o2x|spq0xyAbI(fg}=k)XxYc1AVPEJnf_xss3mSgSPI2MxdjWG$~ zb4(Cm(#o5gn>*e{QIu;0@EUjm>>FdSiRZwJm}Igl=Nu12qJ5Ek6B~EH$E+>?h%)d| z(!2$p0-OAQYywX$uzYXb#ymF3vJboi7>~zXU0vm}27^KFvz$%>pi-&ec^<$!BT1vt zh{MA}+U<7kY9(=bc{%ym)>`J~=B9FMwHgNp2Na7%e1PNQV_K~i*4hWza8uo7=t8wy&k^rPu}^y&&I|Ei;IgBPFmypKAz`cjCt<^ zzW@q_0);{$e=N&)hrCoO+bm9O2 literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/algorithm_24.png b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/algorithm_24.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c39e7324aa83fd72fa45c554985f09bd718865 GIT binary patch literal 1014 zcmV^e{Vb=9*wXJSO^P{k*E+~LeRN_HY--h0!2{m7HCDY;tz;IHc3H2 z4K&$?BFi?5P)f?J08>){Mg}2}z`@uUE%v)x#52Me5+dbP^XAQ*Gw0s(-W#|F5xIXI z6_Ftk`B_BLQjc_XZb(F;k8wN+5qa?h=~GCH$ct~0A|kekd=QZv`F`9~-?eL8_=D=i zI}wq~%S+kc-Ew`vTEulvFB(Wm#l08C=(8e0-dajt*k67)mMD*VjoT z68MglQXCu{08pt^NG6jsH#eh{0(fm!tpMP89*IPPsi`S)xg3^d5sgM^ZEeLc47ApS z!(l?9P)$GlYo!#ox3^#7`9)yRtcie9L?RJ9&!era4W$&OX$It4>*wqOHDj|bXH`Iwn@?3%zE;2)o4ZEcN(g@ro%O-)U#uCCJ4(-W)@r4;#mo}r;3 zOw&X}uq?|b2Y6!w$NuQ6uH z7K>!F*+-j}PN$ifnZYoOpda~sp3%|Krz*M&?3+rd&m!^)_`6gpxo2l*_bmcoSr)Ui zv-J1(2c-Zgm&-weAD{%hQc8U`stNfdB7f!cd2ViQL_~tzYprozmv}sm<2cy1jpH~t zj)UiUL?V&<JFU6 z#YJV?wmUX9wqo0MN-5>~bGB{cc^mk|EMId7G&B%egFUf07*qoM6N<$f{bRwssI20 literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/cancel_24.png b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/cancel_24.png new file mode 100644 index 0000000000000000000000000000000000000000..9d95f8960ad3938fb845d36b405abc7ea45f019b GIT binary patch literal 995 zcmV<9104K`P)T-`3o%|#eXh2+^1&}GsgdG;A7NUoDKNxt*n%e!m4{@X3Q2UqdU`+6`KP$~5( zs#1!B!C?N?H|$<80AB#?2qB5Y;5=d^?Dt#Sj<1q z7xC@w4W&{EsZ+YU67hK4*Lj&-n+NxdDJ62b9CEoFq?EpsRb&KE5hQm3`~?8B*$fX452)AcK8Po$ zr>8hLH~;`VK0e~^?#|Ze)gj*bur1U%IrYXE+_Y1(;xeT8Y7-stv8ba8Qk zR4N5s*8u>UrXd^-Z^9Tlme(#q` zB_xwczgxWSN+y#il}di}!C(;ieBSG*5rD5kh+k{&6@QTY9*IOQ5{U%I0QfG1__1)|OePcddOfyUEq1$II*zk+Tsw}# zZnw);tHoZg$H`=}a^d(Zb2^>A4~Ij~V5LkZ6Ap(%PN&nwEAxL_`v28$%ipvfuZzA# R2EqUU002ovPDHLkV1k`_zs&#u literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/delete_16.png b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/delete_16.png new file mode 100644 index 0000000000000000000000000000000000000000..ea9d426478fd0943ae30bb3608d87f17172c973c GIT binary patch literal 587 zcmV-R0<`^!P)^^{4{7xeotw<|g1O0U7uPd;mC~&ny-THk%Eu>!N8I`Fx&uJkA9Vz!ybP zY~^yL@4!a@+qUWV`z)7BJkLW!P*oL8)9CejW~WX;Q6L$z(Dw7QF%6wlPhUN~Ho|go6#w^U!sja=DD}`&R{4 zs}-*6KG$L32{1HGV=|dA9*=nsB0{&@4a%nwa1W45rO0Npc%JvJKr)#OTmZNa0W(0N z(J0MklSCqM^$Gj^o<^fVI-L$|oP~f#;6YIoip3(WRtsI%0q}hv-}ey_;_*10PKR2p zMkEpm()jpKlwH?ly$>7NjyR4Zr_`V4002ovPDHLkV1hRW^(6oR literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/delete_24.png b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/delete_24.png new file mode 100644 index 0000000000000000000000000000000000000000..4703d05e11524678f7ff4688afc0fc1f6ce72586 GIT binary patch literal 928 zcmV;R17G}!P)2{EUQV?9VtNJ&TahQ=V1UKTQ zt0}lDbSD(SMb&I24lcyifXYx2B6&e>UiY4EZqlC<#iY<4xNte={=VPy`kiw@6A{th z<0A4}M7|Y~bLo|H&-PkG;!j~bDwzim@oYc)W@SRfX59M{hpFp-_ZM9nL?CfxQddkqy(2KRJR;%pq z?=vwmp_@Jd-}r!6Iyk`I-X13>Czz)BV#g_^uq=zs%}q+Bl5WZZuYACx*lurc$>;N! zrrBRldnAQIfy2YYuT7Ia;GM3?<#JT3RsN0SayiQ7vaWg;(9=_^)wsI4A{-9)6ty2I z7K;=L1!A#SH%);@rMGR0#Ug8KYmAJH3daCpj0ZM-7OvwxULI8DwQIgPWN4d zj&p`#;5g1B{Ud^4Fi0#GV|RC#P$)D|1R{cM+dZ8Z@cK0iU>FAJbehY{OME`xzyxDs zW5na}ZhC-EKHz&~SRkPSvZ}o_6xAq*$uAi(rUG+ z*X!My`2Bvu;V_0_=)gAc8}K90)LQj_TKfOhZ_D3eY)nh?A@>LX0000D@{_ix}c;HoMT>fmcPKmlX1e#B>$#rQ2d3p68*eq*5s+CMKAl zpQlo(P$(4oF~%5ncXzqIzJ9u;Dd3B$j#$7Opz<`r7(=B}VS0L+QmI5Xn+2fJXt2G# zO}pJjMCf!nv|26l`TSFg3h>4PO3$e(lgY5Ux=JFEAd|@ukH_(Szb6QK;^>VoB$hBr z7Vz=80?A~O@$qpi%X%c`gM$N_%_i}9oFE98nVBJ-PCrKu@X>m1JOCo{i2VNko~^Ad z_V)HjBocU@M?RltX=#a}p`obbRk0WVolb|%%}q{DPWt4{r!Ea)oNdk8yg!eE-nsIpkaXTKs_qL^E}$^HpUo41QEe;oI#AG z4tzHv(gHpJohY9Of}rOY1VIqK+#;0?d=QbA)g8k(Rjq}u>u_`~mt%5r65F=1EQ{gc z;Yi===GH{yTTexZ2&&pMoZp|y^z!nOtE(%5Ai%b5ip3(iTrTQ*_!IanBJQIxzGRuc r@9V?EL;vx8e_+e}|4jeC`fd3KN%(wzAk3yZ00000NkvXXu0mjfT)C%y literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/project-create_24.png b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/project-create_24.png new file mode 100644 index 0000000000000000000000000000000000000000..8a3f8ed5312d9b4615e67cdf3533bc5985adb3ac GIT binary patch literal 1066 zcmV+_1l9YAP)oVzXe8Lj1@UVF_4kP{CEvs4+8Vi#KtzYSi6-HN(B<-o54&5wS(&XA!B$e@Df$wHsfdMFgc3 zfbBTW568#HvsYJF4;LKA!8A>5+a?$c5)Oy)`Fzji7yxF0BVY-riU`_s4)BxXIJ2cv zNpiWIDwoTM2&q(x&dyGX#Uf{CXABPyGe191BocX+2;c+I4Sc7R!l-i&yw_SYIy$Px z$H%Ews{{f8CMG7BoSbBOdK#b4$M*I%D=RD1YPIJA)U$nGuZiJxz-J&}7zVAat;FMT zT-QY@MJyJhtE-E_!9gOC2&QSWx3|Z|#l=e{4FI1-Bx(QyK6(YvfdIPrC%Gq_V#wt z=`Rd_Eu5 zYPFe)7Buh)__f|Oi;Ig)O-*rjc7{@lj*bqxySu5?YG|#wzrRN*^{+W_90$j75Ru2l z|D;4D4eZuAzrDSEA_JCXVObVyYipEBB@E*$v&CYOySqD*$s{c;ErgtNQxjD+^GD;~#gkUg;VHi{@6&%MwDaFaj3Hf}UU@%xvN`0dm#O@bQ zL!L#YQsLm>fI^{wVHlXE$>!!J*Vor%G8w|*Fs|z|JUmPyk+_M)VpCe{FWPI%-$W$m z>A5th;sbm>9|HpeBoc`S{ZBZe9~W*L8_Tqu92M)*8=dMJcsp z7)BMq@Av=zrC+I3WOsL0Ha0fo^z`(PW=mf`)*hu)y(W2YSM+*{n|f4}{dhc{y}!RN k-`w2%sg(Mw(MKJB18(0;IAQWF8vp016NF;JrjxI0>tO0)lH4(uy zf+Hf&t+kWizI|hMc9!k!Z2)fFxE)Y=x9eq21o+GE2Yp) z&XrR4jWMLtY3|*-hwuAbx^#)r(NV_6#(41H0gmI4&*yph@+H3S|BCVZ&6=1-2Rs2> ztu>zK5s$|Sf&iryu~>}m?rtKH2%Vjslu9LXxg7iZ`*e18vbws;&!0c(>FFVnNVL-R zL`42FKtFK1`9&$!tO)>GYm6~Oqfs2k!CH&wc{q+kHk;-3>(?lyxN_wRnM{WM{{H6D z+d#htuK((+%?(9_QmF($DwSe)cb9B7OC%D(aU6=pA`1%(C#kz`fT!((he9DXHZ~|0 zi{$fp4h{|&9315C-Mdt)RkYT}5~AHPL94J9q973WZuj+%$k{w}G{mt5>g*N~I7H!r?Hk>k;aTHPc~fFB^HYvD|~ajudk2Z-d=wE_(3|ICK`<%qYXd< zr_^a@X9r^pK@c3Z>sdnPx-PEk(roV&^ZN`*`&!|d!VT5HPXGMP+@ob8EY*U#0m|`6>F{3>vai&K-SjQB$vy{($bP_ZEcB&NUc_rH*em^$jFGy%*=@I z`ywK;xVR`&Q&SQI!C3-0Zh(zuc3Nu=4-bjOVsv$N9qa$MZ{IREH^;!h0Q2+n)a!L_ z+_=H_@81c6pxp^J46q7(0&Z)qxqSKZsab_Wfe#-(pp?Q|i!p|G@7|Hm=c(0dBoYaN zAUIjzPr#~biXAZD(2!Fol}fCvtnlK+3krn-p64+!F>xdd9UUFSQy@@@qJ%*cX#Fe`}gwb(IZ({SdjJgbt#w2QmIs=TCIw;t&S?MPWf=di5{P~$=9!6 zWov8esK{sFv4}XQ+WI1vX|0u7t=6t%&a}+`&-DMR-({{EyOe_KHDxr-MU7u4(ZF>uFma2&_1l~UB} zb)kzHASisU_&%wa~ zo12?7n@y9I@B5TWC9>Hp*=&|lsf6$QhVAX`?IanOtjDsPo}N;x)d+{f=E86|q);f3 z%jJm0V#H!Ga=9FZLV@9MXc%vAZ&RsMoA2Ij@ECoTp+}s@Pc6$t{R;zJxa>B;O2J7qVD5W?$I^yu~5Z86bs%j)@ zzuzAf$R`VU4`5jqD=RAu27_@89fwFHLZ{O~YfTUYbUGa(k;oHptu?t^&b$rq-U4a> zp-_l)I?dMB7SU)F5kYH>)|y_gM5{*V#SXdafmCvo>>t?65 z#`k@O!y!QsAR^ed&D7MCk;M0Xdc7V&5HOP0ah$K;0000g.panichi@isti.cnr.it * */ -public class ToolsPanel extends SimpleContainer { +public class ToolsPanel extends ContentPanel { private EventBus eventBus; private InputVariablePanel inputVariablePanel; @@ -34,10 +34,13 @@ public class ToolsPanel extends SimpleContainer { protected void init() { forceLayoutOnResize = true; - // setBodyBorder(false); + setHeaderVisible(false); + setResize(true); + setBodyBorder(false); setBorders(false); - // setHeaderVisible(false); - + setHideCollapseTool(true); + + } protected void create() { @@ -71,8 +74,8 @@ public class ToolsPanel extends SimpleContainer { inputVariablePanel = new InputVariablePanel(eventBus); explorerProjectPanel = new ExplorerProjectPanel(eventBus); - v.add(inputVariablePanel, new VerticalLayoutData(1, -1, new Margins(0))); - v.add(explorerProjectPanel, new VerticalLayoutData(1, -1, + //v.add(inputVariablePanel, new VerticalLayoutData(1, 1, new Margins(0))); + v.add(inputVariablePanel, new VerticalLayoutData(1, 1, new Margins(0))); add(v, new MarginData(new Margins(0))); forceLayout(); diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/EnvironmentVariablesPanel.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/EnvironmentVariablesPanel.java index f42a780..34e9bf4 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/EnvironmentVariablesPanel.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/EnvironmentVariablesPanel.java @@ -1,19 +1,76 @@ package org.gcube.portlets.user.statisticalalgorithmsimporter.client.tools.input; +import java.util.ArrayList; + +import org.gcube.portlets.user.statisticalalgorithmsimporter.client.properties.EnvironmentVariablesProperties; +import org.gcube.portlets.user.statisticalalgorithmsimporter.client.properties.InputTypePropertiesCombo; +import org.gcube.portlets.user.statisticalalgorithmsimporter.client.resource.StatAlgoImporterResources; +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.input.EnvironmentVariables; +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.input.InputType; + import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.shared.EventBus; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.sencha.gxt.cell.core.client.ButtonCell.ButtonScale; +import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign; +import com.sencha.gxt.cell.core.client.form.ComboBoxCell.TriggerAction; +import com.sencha.gxt.core.client.Style.SelectionMode; +import com.sencha.gxt.core.client.XTemplates; +import com.sencha.gxt.core.client.dom.ScrollSupport.ScrollMode; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.data.shared.LabelProvider; +import com.sencha.gxt.data.shared.ListStore; import com.sencha.gxt.widget.core.client.ContentPanel; +import com.sencha.gxt.widget.core.client.button.ButtonBar; +import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.MarginData; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; +import com.sencha.gxt.widget.core.client.event.BeforeStartEditEvent; +import com.sencha.gxt.widget.core.client.event.BeforeStartEditEvent.BeforeStartEditHandler; +import com.sencha.gxt.widget.core.client.event.CancelEditEvent; +import com.sencha.gxt.widget.core.client.event.CancelEditEvent.CancelEditHandler; +import com.sencha.gxt.widget.core.client.event.CompleteEditEvent; +import com.sencha.gxt.widget.core.client.event.CompleteEditEvent.CompleteEditHandler; +import com.sencha.gxt.widget.core.client.event.SelectEvent; +import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; +import com.sencha.gxt.widget.core.client.form.ComboBox; +import com.sencha.gxt.widget.core.client.form.TextField; +import com.sencha.gxt.widget.core.client.grid.ColumnConfig; +import com.sencha.gxt.widget.core.client.grid.ColumnModel; +import com.sencha.gxt.widget.core.client.grid.Grid; +import com.sencha.gxt.widget.core.client.grid.Grid.GridCell; +import com.sencha.gxt.widget.core.client.grid.GridSelectionModel; +import com.sencha.gxt.widget.core.client.grid.editing.GridRowEditing; +import com.sencha.gxt.widget.core.client.toolbar.ToolBar; /** * - * @author giancarlo - * email: g.panichi@isti.cnr.it + * @author giancarlo email: g.panichi@isti.cnr.it * */ public class EnvironmentVariablesPanel extends ContentPanel { private EventBus eventBus; - + private ListStore storeEnvironmentVariable; + private Grid gridEnvironmentVariable; + private ListStore storeComboInputType; + private ComboBox comboInputType; + private GridRowEditing gridEnvironmentVariableEditing; + private TextButton btnAdd; + private boolean addStatus; + private int seq = 0; + + interface InputTypeTemplates extends XTemplates { + @XTemplate("{value}") + SafeHtml format(String value); + } public EnvironmentVariablesPanel(EventBus eventBus) { super(); @@ -21,27 +78,264 @@ public class EnvironmentVariablesPanel extends ContentPanel { this.eventBus = eventBus; // msgs = GWT.create(ServiceCategoryMessages.class); - init(); - create(); - + try { + init(); + create(); + } catch (Throwable e) { + e.printStackTrace(); + } } private void init() { - forceLayoutOnResize = true; - setBodyBorder(false); - setBorders(false); setHeaderVisible(false); setResize(true); - + setBodyBorder(false); + setBorders(false); + forceLayoutOnResize = true; } private void create() { - + // Grid + EnvironmentVariablesProperties props = GWT + .create(EnvironmentVariablesProperties.class); - } + ColumnConfig nameColumn = new ColumnConfig( + props.name(), 100, "Name"); + // nameColumn.setMenuDisabled(true); + + ColumnConfig descriptionColumn = new ColumnConfig( + props.name(), 100, "Description"); + // descriptionColumn.setMenuDisabled(true); + + ColumnConfig inputTypeColumn = new ColumnConfig( + props.inputType(), 100, "Type"); + // inputTypeColumn.setMenuDisabled(true); + inputTypeColumn.setCell(new AbstractCell() { + + @Override + public void render(Context context, InputType inputType, + SafeHtmlBuilder sb) { + InputTypeTemplates inputTypeTemplates = GWT + .create(InputTypeTemplates.class); + sb.append(inputTypeTemplates.format(inputType.getLabel())); + } + }); + + ColumnConfig defaultValueColumn = new ColumnConfig( + props.defaultValue(), 100, "Default"); + // defaColumn.setMenuDisabled(true); + + ArrayList> l = new ArrayList>(); + l.add(nameColumn); + l.add(descriptionColumn); + l.add(inputTypeColumn); + l.add(defaultValueColumn); + + ColumnModel columns = new ColumnModel( + l); + + storeEnvironmentVariable = new ListStore( + props.id()); + + /*ArrayList list = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + list.add(new EnvironmentVariables(i, "Test" + i, "Desc", + "defaultValue", InputType.STRING)); + } + + storeEnvironmentVariable.addAll(list);*/ + + final GridSelectionModel sm = new GridSelectionModel(); + sm.setSelectionMode(SelectionMode.SINGLE); + + gridEnvironmentVariable = new Grid( + storeEnvironmentVariable, columns); + gridEnvironmentVariable.setSelectionModel(sm); + gridEnvironmentVariable.getView().setStripeRows(true); + gridEnvironmentVariable.getView().setColumnLines(true); + gridEnvironmentVariable.getView().setAutoExpandColumn(nameColumn); + gridEnvironmentVariable.getView().setAutoFill(true); + gridEnvironmentVariable.setBorders(false); + gridEnvironmentVariable.setColumnReordering(false); + + + /* + * GridDragSource ds = new + * GridDragSource( gridEnvironmentVariable); + * ds.addDragStartHandler(new DndDragStartHandler() { + * + * @Override public void onDragStart(DndDragStartEvent event) { + * + * @SuppressWarnings("unchecked") ArrayList + * draggingSelection = (ArrayList) event + * .getData(); Log.debug("Start Drag: " + draggingSelection); + * + * } }); GridDropTarget dt = new + * GridDropTarget( gridEnvironmentVariable); + * dt.setFeedback(Feedback.BOTH); dt.setAllowSelfAsSource(true); + */ + + // EDITING // + // Key + + InputTypePropertiesCombo inputTypePropertiesCombo = GWT + .create(InputTypePropertiesCombo.class); + + storeComboInputType = new ListStore( + inputTypePropertiesCombo.id()); + + comboInputType = new ComboBox(storeComboInputType, + inputTypePropertiesCombo.label()); + comboInputType.setClearValueOnParseError(false); + comboInputType.setEditable(false); + + comboInputType.setTriggerAction(TriggerAction.ALL); + addHandlersForComboInputType(inputTypePropertiesCombo.label()); + + gridEnvironmentVariableEditing = new GridRowEditing( + gridEnvironmentVariable); + gridEnvironmentVariableEditing.addEditor(nameColumn, new TextField()); + gridEnvironmentVariableEditing.addEditor(descriptionColumn, + new TextField()); + gridEnvironmentVariableEditing + .addEditor(inputTypeColumn, comboInputType); + gridEnvironmentVariableEditing.addEditor(defaultValueColumn, + new TextField()); + + btnAdd = new TextButton("Add"); + btnAdd.setIcon(StatAlgoImporterResources.INSTANCE.add16()); + btnAdd.setScale(ButtonScale.SMALL); + btnAdd.setIconAlign(IconAlign.LEFT); + btnAdd.setToolTip("Add Environment Variable"); + btnAdd.addSelectHandler(new SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + addEnvironmentVariable(event); + } + + }); + + TextButton btnDelete = new TextButton("Delete"); + btnDelete.addSelectHandler(new SelectEvent.SelectHandler() { + public void onSelect(SelectEvent event) { + GridCell cell = gridEnvironmentVariableEditing.getActiveCell(); + int rowIndex = cell.getRow(); + + gridEnvironmentVariableEditing.cancelEditing(); + + storeEnvironmentVariable.remove(rowIndex); + storeEnvironmentVariable.commitChanges(); + + gridEnvironmentVariableEditing.getCancelButton() + .setVisible(true); + btnAdd.setEnabled(true); + if (addStatus) { + addStatus = false; + } + } + }); + ButtonBar buttonBar = gridEnvironmentVariableEditing.getButtonBar(); + buttonBar.add(btnDelete); + + gridEnvironmentVariableEditing + .addBeforeStartEditHandler(new BeforeStartEditHandler() { + + @Override + public void onBeforeStartEdit( + BeforeStartEditEvent event) { + editingBeforeStart(event); + + } + }); + + gridEnvironmentVariableEditing + .addCancelEditHandler(new CancelEditHandler() { + + @Override + public void onCancelEdit( + CancelEditEvent event) { + storeEnvironmentVariable.rejectChanges(); + btnAdd.setEnabled(true); + + } + + }); + + gridEnvironmentVariableEditing + .addCompleteEditHandler(new CompleteEditHandler() { + + @Override + public void onCompleteEdit( + CompleteEditEvent event) { + try { + if (addStatus) { + addStatus = false; + } + storeEnvironmentVariable.commitChanges(); + + gridEnvironmentVariableEditing.getCancelButton() + .setVisible(true); + btnAdd.setEnabled(true); + + } catch (Throwable e) { + Log.error("Error in RuleOnTableNewDefinitionCard: " + + e.getLocalizedMessage()); + e.printStackTrace(); + } + } + }); + + ToolBar toolBar = new ToolBar(); + toolBar.add(btnAdd, new BoxLayoutData(new Margins(0))); + + VerticalLayoutContainer vlc = new VerticalLayoutContainer(); + vlc.setAdjustForScroll(false); + vlc.setScrollMode(ScrollMode.NONE); - public void update(){ + vlc.add(toolBar, new VerticalLayoutData(1, -1, new Margins(0))); + vlc.add(gridEnvironmentVariable, new VerticalLayoutData(1, 1, + new Margins(0))); + + add(vlc, new MarginData(new Margins(0))); } - + + private void editingBeforeStart( + BeforeStartEditEvent event) { + // TODO Auto-generated method stub + + } + + private void addHandlersForComboInputType(LabelProvider idI18N) { + // TODO Auto-generated method stub + + } + + private void addEnvironmentVariable(SelectEvent event) { + try { + seq++; + EnvironmentVariables newEnvironmentVariable = new EnvironmentVariables( + seq, "", "", "", InputType.STRING); + Log.debug("New Environment Variable: " + newEnvironmentVariable); + gridEnvironmentVariableEditing.cancelEditing(); + addStatus = true; + gridEnvironmentVariableEditing.getCancelButton().setVisible(false); + storeEnvironmentVariable.add(newEnvironmentVariable); + int row = storeEnvironmentVariable.indexOf(newEnvironmentVariable); + + storeComboInputType.clear(); + storeComboInputType.addAll(InputType.asList()); + storeComboInputType.commitChanges(); + + gridEnvironmentVariableEditing.startEditing(new GridCell(row, 0)); + } catch (Throwable e) { + e.printStackTrace(); + } + } + + public void update() { + + } + } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/InputTypeMessages.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/InputTypeMessages.java new file mode 100644 index 0000000..82aff87 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/InputTypeMessages.java @@ -0,0 +1,28 @@ +package org.gcube.portlets.user.statisticalalgorithmsimporter.client.tools.input; + +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.input.InputType; + +import com.google.gwt.i18n.client.Messages; + +/** + * + * @author giancarlo + * email: g.panichi@isti.cnr.it + * + */ +public interface InputTypeMessages extends Messages { + + @DefaultMessage("") + @AlternateMessage({ "STRING", "String", + "NUMBER", "Number", + "ENUMERATED", "Enumerated", + "CONSTANT", "Constant", + "RANDOM", "Random", + "FILE", "File", + "MAP", "Map", + "BOOLEAN", "Boolean", + "IMAGES", "Images" }) + String inputType(@Select InputType inputType); + + +} diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/SelectedRowsPanel.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/SelectedRowsPanel.java index c5e5df4..722f739 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/SelectedRowsPanel.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/SelectedRowsPanel.java @@ -1,19 +1,74 @@ package org.gcube.portlets.user.statisticalalgorithmsimporter.client.tools.input; +import java.util.ArrayList; + +import org.gcube.portlets.user.statisticalalgorithmsimporter.client.properties.EnvironmentVariablesProperties; +import org.gcube.portlets.user.statisticalalgorithmsimporter.client.properties.InputTypePropertiesCombo; +import org.gcube.portlets.user.statisticalalgorithmsimporter.client.resource.StatAlgoImporterResources; +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.input.EnvironmentVariables; +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.input.InputType; + import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.core.client.GWT; import com.google.gwt.event.shared.EventBus; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign; +import com.sencha.gxt.cell.core.client.form.ComboBoxCell.TriggerAction; +import com.sencha.gxt.core.client.Style.SelectionMode; +import com.sencha.gxt.core.client.XTemplates; +import com.sencha.gxt.core.client.dom.ScrollSupport.ScrollMode; +import com.sencha.gxt.core.client.util.Margins; +import com.sencha.gxt.data.shared.LabelProvider; +import com.sencha.gxt.data.shared.ListStore; import com.sencha.gxt.widget.core.client.ContentPanel; +import com.sencha.gxt.widget.core.client.button.ButtonBar; +import com.sencha.gxt.widget.core.client.button.TextButton; +import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; +import com.sencha.gxt.widget.core.client.container.MarginData; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; +import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; +import com.sencha.gxt.widget.core.client.event.BeforeStartEditEvent; +import com.sencha.gxt.widget.core.client.event.BeforeStartEditEvent.BeforeStartEditHandler; +import com.sencha.gxt.widget.core.client.event.CancelEditEvent; +import com.sencha.gxt.widget.core.client.event.CancelEditEvent.CancelEditHandler; +import com.sencha.gxt.widget.core.client.event.CompleteEditEvent; +import com.sencha.gxt.widget.core.client.event.CompleteEditEvent.CompleteEditHandler; +import com.sencha.gxt.widget.core.client.event.SelectEvent; +import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; +import com.sencha.gxt.widget.core.client.form.ComboBox; +import com.sencha.gxt.widget.core.client.form.TextField; +import com.sencha.gxt.widget.core.client.grid.ColumnConfig; +import com.sencha.gxt.widget.core.client.grid.ColumnModel; +import com.sencha.gxt.widget.core.client.grid.Grid; +import com.sencha.gxt.widget.core.client.grid.Grid.GridCell; +import com.sencha.gxt.widget.core.client.grid.GridSelectionModel; +import com.sencha.gxt.widget.core.client.grid.editing.GridRowEditing; +import com.sencha.gxt.widget.core.client.toolbar.ToolBar; /** * - * @author giancarlo - * email: g.panichi@isti.cnr.it + * @author giancarlo email: g.panichi@isti.cnr.it * */ public class SelectedRowsPanel extends ContentPanel { private EventBus eventBus; - + private ListStore storeEnvironmentVariable; + private Grid gridEnvironmentVariable; + private ListStore storeComboInputType; + private ComboBox comboInputType; + private GridRowEditing gridEnvironmentVariableEditing; + private TextButton btnAdd; + private boolean addStatus; + private int seq = 0; + + interface InputTypeTemplates extends XTemplates { + @XTemplate("{value}") + SafeHtml format(String value); + } public SelectedRowsPanel(EventBus eventBus) { super(); @@ -21,27 +76,263 @@ public class SelectedRowsPanel extends ContentPanel { this.eventBus = eventBus; // msgs = GWT.create(ServiceCategoryMessages.class); - init(); - create(); - + try { + init(); + create(); + } catch (Throwable e) { + e.printStackTrace(); + } } private void init() { - forceLayoutOnResize = true; - setBodyBorder(false); - setBorders(false); setHeaderVisible(false); setResize(true); - + setBodyBorder(false); + setBorders(false); + forceLayoutOnResize = true; } private void create() { + // Grid + EnvironmentVariablesProperties props = GWT + .create(EnvironmentVariablesProperties.class); + + ColumnConfig nameColumn = new ColumnConfig( + props.name(), 100, "Name"); + // nameColumn.setMenuDisabled(true); + + ColumnConfig descriptionColumn = new ColumnConfig( + props.name(), 100, "Description"); + // descriptionColumn.setMenuDisabled(true); + + ColumnConfig inputTypeColumn = new ColumnConfig( + props.inputType(), 100, "Type"); + // inputTypeColumn.setMenuDisabled(true); + inputTypeColumn.setCell(new AbstractCell() { + + @Override + public void render(Context context, InputType inputType, + SafeHtmlBuilder sb) { + InputTypeTemplates inputTypeTemplates = GWT + .create(InputTypeTemplates.class); + sb.append(inputTypeTemplates.format(inputType.getLabel())); + } + }); + + ColumnConfig defaultValueColumn = new ColumnConfig( + props.defaultValue(), 100, "Default"); + // defaColumn.setMenuDisabled(true); + + ArrayList> l = new ArrayList>(); + l.add(nameColumn); + l.add(descriptionColumn); + l.add(inputTypeColumn); + l.add(defaultValueColumn); + + ColumnModel columns = new ColumnModel( + l); + + storeEnvironmentVariable = new ListStore( + props.id()); + + /*ArrayList list = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + list.add(new EnvironmentVariables(i, "Test" + i, "Desc", + "defaultValue", InputType.STRING)); + } + + storeEnvironmentVariable.addAll(list);*/ + + final GridSelectionModel sm = new GridSelectionModel(); + sm.setSelectionMode(SelectionMode.SINGLE); + + gridEnvironmentVariable = new Grid( + storeEnvironmentVariable, columns); + gridEnvironmentVariable.setSelectionModel(sm); + gridEnvironmentVariable.getView().setStripeRows(true); + gridEnvironmentVariable.getView().setColumnLines(true); + gridEnvironmentVariable.getView().setAutoExpandColumn(nameColumn); + gridEnvironmentVariable.getView().setAutoFill(true); + gridEnvironmentVariable.setBorders(false); + gridEnvironmentVariable.setColumnReordering(false); + + + /* + * GridDragSource ds = new + * GridDragSource( gridEnvironmentVariable); + * ds.addDragStartHandler(new DndDragStartHandler() { + * + * @Override public void onDragStart(DndDragStartEvent event) { + * + * @SuppressWarnings("unchecked") ArrayList + * draggingSelection = (ArrayList) event + * .getData(); Log.debug("Start Drag: " + draggingSelection); + * + * } }); GridDropTarget dt = new + * GridDropTarget( gridEnvironmentVariable); + * dt.setFeedback(Feedback.BOTH); dt.setAllowSelfAsSource(true); + */ + + // EDITING // + // Key + + InputTypePropertiesCombo inputTypePropertiesCombo = GWT + .create(InputTypePropertiesCombo.class); + + storeComboInputType = new ListStore( + inputTypePropertiesCombo.id()); + + comboInputType = new ComboBox(storeComboInputType, + inputTypePropertiesCombo.label()); + comboInputType.setClearValueOnParseError(false); + comboInputType.setEditable(false); + + comboInputType.setTriggerAction(TriggerAction.ALL); + addHandlersForComboInputType(inputTypePropertiesCombo.label()); + + gridEnvironmentVariableEditing = new GridRowEditing( + gridEnvironmentVariable); + gridEnvironmentVariableEditing.addEditor(nameColumn, new TextField()); + gridEnvironmentVariableEditing.addEditor(descriptionColumn, + new TextField()); + gridEnvironmentVariableEditing + .addEditor(inputTypeColumn, comboInputType); + gridEnvironmentVariableEditing.addEditor(defaultValueColumn, + new TextField()); + + btnAdd = new TextButton(); + btnAdd.setIcon(StatAlgoImporterResources.INSTANCE.add16()); + //btnAdd.setIconAlign(IconAlign.); + btnAdd.setToolTip("Add Environment Variable"); + btnAdd.addSelectHandler(new SelectHandler() { + + @Override + public void onSelect(SelectEvent event) { + addEnvironmentVariable(event); + } + + }); + + TextButton btnDelete = new TextButton("Delete"); + btnDelete.addSelectHandler(new SelectEvent.SelectHandler() { + public void onSelect(SelectEvent event) { + GridCell cell = gridEnvironmentVariableEditing.getActiveCell(); + int rowIndex = cell.getRow(); + + gridEnvironmentVariableEditing.cancelEditing(); + + storeEnvironmentVariable.remove(rowIndex); + storeEnvironmentVariable.commitChanges(); + + gridEnvironmentVariableEditing.getCancelButton() + .setVisible(true); + btnAdd.setEnabled(true); + if (addStatus) { + addStatus = false; + } + } + }); + ButtonBar buttonBar = gridEnvironmentVariableEditing.getButtonBar(); + buttonBar.add(btnDelete); + + gridEnvironmentVariableEditing + .addBeforeStartEditHandler(new BeforeStartEditHandler() { + + @Override + public void onBeforeStartEdit( + BeforeStartEditEvent event) { + editingBeforeStart(event); + + } + }); + + gridEnvironmentVariableEditing + .addCancelEditHandler(new CancelEditHandler() { + + @Override + public void onCancelEdit( + CancelEditEvent event) { + storeEnvironmentVariable.rejectChanges(); + btnAdd.setEnabled(true); + + } + + }); + + gridEnvironmentVariableEditing + .addCompleteEditHandler(new CompleteEditHandler() { + + @Override + public void onCompleteEdit( + CompleteEditEvent event) { + try { + if (addStatus) { + addStatus = false; + } + storeEnvironmentVariable.commitChanges(); + + gridEnvironmentVariableEditing.getCancelButton() + .setVisible(true); + btnAdd.setEnabled(true); + + } catch (Throwable e) { + Log.error("Error in RuleOnTableNewDefinitionCard: " + + e.getLocalizedMessage()); + e.printStackTrace(); + } + } + }); + + ToolBar toolBar = new ToolBar(); + toolBar.add(btnAdd, new BoxLayoutData(new Margins(0))); + + VerticalLayoutContainer vlc = new VerticalLayoutContainer(); + vlc.setAdjustForScroll(false); + vlc.setScrollMode(ScrollMode.NONE); + vlc.add(toolBar, new VerticalLayoutData(1, -1, new Margins(0))); + vlc.add(gridEnvironmentVariable, new VerticalLayoutData(1, 1, + new Margins(0))); + + add(vlc, new MarginData(new Margins(0))); } - - public void update(){ - + + private void editingBeforeStart( + BeforeStartEditEvent event) { + // TODO Auto-generated method stub + } - + + private void addHandlersForComboInputType(LabelProvider idI18N) { + // TODO Auto-generated method stub + + } + + private void addEnvironmentVariable(SelectEvent event) { + try { + seq++; + EnvironmentVariables newEnvironmentVariable = new EnvironmentVariables( + seq, "", "", "", InputType.STRING); + Log.debug("New Environment Variable: " + newEnvironmentVariable); + gridEnvironmentVariableEditing.cancelEditing(); + addStatus = true; + gridEnvironmentVariableEditing.getCancelButton().setVisible(false); + storeEnvironmentVariable.add(newEnvironmentVariable); + int row = storeEnvironmentVariable.indexOf(newEnvironmentVariable); + + storeComboInputType.clear(); + storeComboInputType.addAll(InputType.asList()); + storeComboInputType.commitChanges(); + + gridEnvironmentVariableEditing.startEditing(new GridCell(row, 0)); + } catch (Throwable e) { + e.printStackTrace(); + } + } + + public void update() { + + } + } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/upload/CodeUploadPanel.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/upload/CodeUploadPanel.java index 94fda16..876d111 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/upload/CodeUploadPanel.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/upload/CodeUploadPanel.java @@ -80,7 +80,7 @@ public class CodeUploadPanel extends FormPanel { setMethod(Method.POST); uploadCodeBtn = new TextButton("Upload"); - uploadCodeBtn.setIcon(StatAlgoImporterResources.INSTANCE.upload32()); + uploadCodeBtn.setIcon(StatAlgoImporterResources.INSTANCE.upload24()); uploadCodeBtn.setIconAlign(IconAlign.RIGHT); uploadCodeBtn.setToolTip("Upload Code"); @@ -106,7 +106,7 @@ public class CodeUploadPanel extends FormPanel { }); cancelBtn = new TextButton("Cancel"); - cancelBtn.setIcon(StatAlgoImporterResources.INSTANCE.cancel32()); + cancelBtn.setIcon(StatAlgoImporterResources.INSTANCE.cancel24()); cancelBtn.setIconAlign(IconAlign.RIGHT); cancelBtn.setEnabled(false); @@ -194,7 +194,7 @@ public class CodeUploadPanel extends FormPanel { fieldSet.add(vlc); - add(fieldSet, new MarginData(new Margins(5, 0, 0, 7))); + add(fieldSet, new MarginData(new Margins(5, 7, 2, 7))); } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/input/EnvironmentVariables.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/input/EnvironmentVariables.java new file mode 100644 index 0000000..c7dba32 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/input/EnvironmentVariables.java @@ -0,0 +1,91 @@ +package org.gcube.portlets.user.statisticalalgorithmsimporter.shared.input; + +import java.io.Serializable; + +/** + * + * @author giancarlo email: g.panichi@isti.cnr.it + * + */ +public class EnvironmentVariables implements Serializable { + + private static final long serialVersionUID = -2519686355634242523L; + private int id; + private String name; + private String description; + private String defaultValue; + private InputType inputType; + + public EnvironmentVariables() { + super(); + } + + /** + * + * @param id + * @param name + * @param description + * @param defaultValue + * @param inputType + */ + public EnvironmentVariables(int id, String name, String description, + String defaultValue, InputType inputType) { + super(); + this.id = id; + this.name = name; + this.description = description; + this.defaultValue = defaultValue; + this.inputType = inputType; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + public InputType getInputType() { + return inputType; + } + + public void setInputType(InputType inputType) { + this.inputType = inputType; + } + + @Override + public String toString() { + return "EnvironmentVariables [id=" + id + ", name=" + name + + ", description=" + description + ", defaultValue=" + + defaultValue + ", inputType=" + inputType + "]"; + } + + + +} diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/input/InputType.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/input/InputType.java new file mode 100644 index 0000000..01031bb --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/shared/input/InputType.java @@ -0,0 +1,64 @@ +package org.gcube.portlets.user.statisticalalgorithmsimporter.shared.input; + +import java.util.Arrays; +import java.util.List; + +/** + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public enum InputType { + STRING("String"), + NUMBER("Number"), + ENUMERATED("Enumerated"), + CONSTANT("Constant"), + RANDOM("Random"), + FILE("File"), + MAP("Map"), + BOOLEAN("Boolean"), + IMAGES("Images"); + + + //private static InputTypeMessages msgs=GWT.create(InputTypeMessages.class); + private String id; + + //private static List inputTypeI18NList; + + /*static { + inputTypeI18NList = new ArrayList(); + for (InputType itype : values()) { + inputTypeI18NList.add(msgs.inputType(itype)); + } + }*/ + + private InputType(String id) { + this.id = id; + } + + public String getId() { + return id; + } + + public String toString() { + return id; + } + + public String getLabel(){ + //return msgs.inputType(this); + return id; + } + + + public static List asList() { + List list = Arrays.asList(values()); + return list; + } + + /*public static List asI18NList() { + return inputTypeI18NList; + + }*/ + +} diff --git a/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/add_16.png b/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/add_16.png new file mode 100644 index 0000000000000000000000000000000000000000..9a17af8d7b43854f8418edfbb60a53c158140bac GIT binary patch literal 520 zcmV+j0{8uiP)2?gE)(GrOxgq6YxoMTY<0CZ_NPI3aIO(OXMh%^Stvc%Gu z#xxlFZDWwlvYXu}js9Pw_h#OVGyq7VdRvknB~2x5vn*4VWs2x~Jb~qd~o6U&h_^%GG_b?a?n9t`p$K#RX@%UfEOX94vJkPhwdA0G|%<0leRu^9#HKAC8&jz|(aRNsYK6eloM%k%XD0 zfDgP?*6=)!UaxnFn(a5hH?#ECMPAN1&+}~*MT(+Gd7l6AoPPn#b3p+yEiOg?0000< KMNUMnLSTY@n&Vjj literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/add_24.png b/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/add_24.png new file mode 100644 index 0000000000000000000000000000000000000000..dd62ee84fd90897515bba1cf2b42e1f00251e575 GIT binary patch literal 803 zcmV+;1Kj+HP)mTpCgGN2L(C&A>ME_P&$BPi{e{O6o|-#xzfJwpnT(%18no=JKxsja(c z$M2p=n$L?d6_U2IL5IVkn$4z~&8CLKVP3NB`+_2AM$#8aVOkwUks6JL>h-$n^|~63 zhN39SCJAHhOu7o2x|spq0xyAbI(fg}=k)XxYc1AVPEJnf_xss3mSgSPI2MxdjWG$~ zb4(Cm(#o5gn>*e{QIu;0@EUjm>>FdSiRZwJm}Igl=Nu12qJ5Ek6B~EH$E+>?h%)d| z(!2$p0-OAQYywX$uzYXb#ymF3vJboi7>~zXU0vm}27^KFvz$%>pi-&ec^<$!BT1vt zh{MA}+U<7kY9(=bc{%ym)>`J~=B9FMwHgNp2Na7%e1PNQV_K~i*4hWza8uo7=t8wy&k^rPu}^y&&I|Ei;IgBPFmypKAz`cjCt<^ zzW@q_0);{$e=N&)hrCoO+bm9O2 literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/algorithm_24.png b/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/algorithm_24.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c39e7324aa83fd72fa45c554985f09bd718865 GIT binary patch literal 1014 zcmV^e{Vb=9*wXJSO^P{k*E+~LeRN_HY--h0!2{m7HCDY;tz;IHc3H2 z4K&$?BFi?5P)f?J08>){Mg}2}z`@uUE%v)x#52Me5+dbP^XAQ*Gw0s(-W#|F5xIXI z6_Ftk`B_BLQjc_XZb(F;k8wN+5qa?h=~GCH$ct~0A|kekd=QZv`F`9~-?eL8_=D=i zI}wq~%S+kc-Ew`vTEulvFB(Wm#l08C=(8e0-dajt*k67)mMD*VjoT z68MglQXCu{08pt^NG6jsH#eh{0(fm!tpMP89*IPPsi`S)xg3^d5sgM^ZEeLc47ApS z!(l?9P)$GlYo!#ox3^#7`9)yRtcie9L?RJ9&!era4W$&OX$It4>*wqOHDj|bXH`Iwn@?3%zE;2)o4ZEcN(g@ro%O-)U#uCCJ4(-W)@r4;#mo}r;3 zOw&X}uq?|b2Y6!w$NuQ6uH z7K>!F*+-j}PN$ifnZYoOpda~sp3%|Krz*M&?3+rd&m!^)_`6gpxo2l*_bmcoSr)Ui zv-J1(2c-Zgm&-weAD{%hQc8U`stNfdB7f!cd2ViQL_~tzYprozmv}sm<2cy1jpH~t zj)UiUL?V&<JFU6 z#YJV?wmUX9wqo0MN-5>~bGB{cc^mk|EMId7G&B%egFUf07*qoM6N<$f{bRwssI20 literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/cancel_24.png b/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/cancel_24.png new file mode 100644 index 0000000000000000000000000000000000000000..9d95f8960ad3938fb845d36b405abc7ea45f019b GIT binary patch literal 995 zcmV<9104K`P)T-`3o%|#eXh2+^1&}GsgdG;A7NUoDKNxt*n%e!m4{@X3Q2UqdU`+6`KP$~5( zs#1!B!C?N?H|$<80AB#?2qB5Y;5=d^?Dt#Sj<1q z7xC@w4W&{EsZ+YU67hK4*Lj&-n+NxdDJ62b9CEoFq?EpsRb&KE5hQm3`~?8B*$fX452)AcK8Po$ zr>8hLH~;`VK0e~^?#|Ze)gj*bur1U%IrYXE+_Y1(;xeT8Y7-stv8ba8Qk zR4N5s*8u>UrXd^-Z^9Tlme(#q` zB_xwczgxWSN+y#il}di}!C(;ieBSG*5rD5kh+k{&6@QTY9*IOQ5{U%I0QfG1__1)|OePcddOfyUEq1$II*zk+Tsw}# zZnw);tHoZg$H`=}a^d(Zb2^>A4~Ij~V5LkZ6Ap(%PN&nwEAxL_`v28$%ipvfuZzA# R2EqUU002ovPDHLkV1k`_zs&#u literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/delete_16.png b/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/delete_16.png new file mode 100644 index 0000000000000000000000000000000000000000..ea9d426478fd0943ae30bb3608d87f17172c973c GIT binary patch literal 587 zcmV-R0<`^!P)^^{4{7xeotw<|g1O0U7uPd;mC~&ny-THk%Eu>!N8I`Fx&uJkA9Vz!ybP zY~^yL@4!a@+qUWV`z)7BJkLW!P*oL8)9CejW~WX;Q6L$z(Dw7QF%6wlPhUN~Ho|go6#w^U!sja=DD}`&R{4 zs}-*6KG$L32{1HGV=|dA9*=nsB0{&@4a%nwa1W45rO0Npc%JvJKr)#OTmZNa0W(0N z(J0MklSCqM^$Gj^o<^fVI-L$|oP~f#;6YIoip3(WRtsI%0q}hv-}ey_;_*10PKR2p zMkEpm()jpKlwH?ly$>7NjyR4Zr_`V4002ovPDHLkV1hRW^(6oR literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/delete_24.png b/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/delete_24.png new file mode 100644 index 0000000000000000000000000000000000000000..4703d05e11524678f7ff4688afc0fc1f6ce72586 GIT binary patch literal 928 zcmV;R17G}!P)2{EUQV?9VtNJ&TahQ=V1UKTQ zt0}lDbSD(SMb&I24lcyifXYx2B6&e>UiY4EZqlC<#iY<4xNte={=VPy`kiw@6A{th z<0A4}M7|Y~bLo|H&-PkG;!j~bDwzim@oYc)W@SRfX59M{hpFp-_ZM9nL?CfxQddkqy(2KRJR;%pq z?=vwmp_@Jd-}r!6Iyk`I-X13>Czz)BV#g_^uq=zs%}q+Bl5WZZuYACx*lurc$>;N! zrrBRldnAQIfy2YYuT7Ia;GM3?<#JT3RsN0SayiQ7vaWg;(9=_^)wsI4A{-9)6ty2I z7K;=L1!A#SH%);@rMGR0#Ug8KYmAJH3daCpj0ZM-7OvwxULI8DwQIgPWN4d zj&p`#;5g1B{Ud^4Fi0#GV|RC#P$)D|1R{cM+dZ8Z@cK0iU>FAJbehY{OME`xzyxDs zW5na}ZhC-EKHz&~SRkPSvZ}o_6xAq*$uAi(rUG+ z*X!My`2Bvu;V_0_=)gAc8}K90)LQj_TKfOhZ_D3eY)nh?A@>LX0000D@{_ix}c;HoMT>fmcPKmlX1e#B>$#rQ2d3p68*eq*5s+CMKAl zpQlo(P$(4oF~%5ncXzqIzJ9u;Dd3B$j#$7Opz<`r7(=B}VS0L+QmI5Xn+2fJXt2G# zO}pJjMCf!nv|26l`TSFg3h>4PO3$e(lgY5Ux=JFEAd|@ukH_(Szb6QK;^>VoB$hBr z7Vz=80?A~O@$qpi%X%c`gM$N_%_i}9oFE98nVBJ-PCrKu@X>m1JOCo{i2VNko~^Ad z_V)HjBocU@M?RltX=#a}p`obbRk0WVolb|%%}q{DPWt4{r!Ea)oNdk8yg!eE-nsIpkaXTKs_qL^E}$^HpUo41QEe;oI#AG z4tzHv(gHpJohY9Of}rOY1VIqK+#;0?d=QbA)g8k(Rjq}u>u_`~mt%5r65F=1EQ{gc z;Yi===GH{yTTexZ2&&pMoZp|y^z!nOtE(%5Ai%b5ip3(iTrTQ*_!IanBJQIxzGRuc r@9V?EL;vx8e_+e}|4jeC`fd3KN%(wzAk3yZ00000NkvXXu0mjfT)C%y literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/project-create_24.png b/src/main/resources/org/gcube/portlets/user/statisticalalgorithmsimporter/client/resource/project-create_24.png new file mode 100644 index 0000000000000000000000000000000000000000..8a3f8ed5312d9b4615e67cdf3533bc5985adb3ac GIT binary patch literal 1066 zcmV+_1l9YAP)oVzXe8Lj1@UVF_4kP{CEvs4+8Vi#KtzYSi6-HN(B<-o54&5wS(&XA!B$e@Df$wHsfdMFgc3 zfbBTW568#HvsYJF4;LKA!8A>5+a?$c5)Oy)`Fzji7yxF0BVY-riU`_s4)BxXIJ2cv zNpiWIDwoTM2&q(x&dyGX#Uf{CXABPyGe191BocX+2;c+I4Sc7R!l-i&yw_SYIy$Px z$H%Ews{{f8CMG7BoSbBOdK#b4$M*I%D=RD1YPIJA)U$nGuZiJxz-J&}7zVAat;FMT zT-QY@MJyJhtE-E_!9gOC2&QSWx3|Z|#l=e{4FI1-Bx(QyK6(YvfdIPrC%Gq_V#wt z=`Rd_Eu5 zYPFe)7Buh)__f|Oi;Ig)O-*rjc7{@lj*bqxySu5?YG|#wzrRN*^{+W_90$j75Ru2l z|D;4D4eZuAzrDSEA_JCXVObVyYipEBB@E*$v&CYOySqD*$s{c;ErgtNQxjD+^GD;~#gkUg;VHi{@6&%MwDaFaj3Hf}UU@%xvN`0dm#O@bQ zL!L#YQsLm>fI^{wVHlXE$>!!J*Vor%G8w|*Fs|z|JUmPyk+_M)VpCe{FWPI%-$W$m z>A5th;sbm>9|HpeBoc`S{ZBZe9~W*L8_Tqu92M)*8=dMJcsp z7)BMq@Av=zrC+I3WOsL0Ha0fo^z`(PW=mf`)*hu)y(W2YSM+*{n|f4}{dhc{y}!RN k-`w2%sg(Mw(MKJB18(0;IAQWF8vp016NF;JrjxI0>tO0)lH4(uy zf+Hf&t+kWizI|hMc9!k!Z2)fFxE)Y=x9eq21o+GE2Yp) z&XrR4jWMLtY3|*-hwuAbx^#)r(NV_6#(41H0gmI4&*yph@+H3S|BCVZ&6=1-2Rs2> ztu>zK5s$|Sf&iryu~>}m?rtKH2%Vjslu9LXxg7iZ`*e18vbws;&!0c(>FFVnNVL-R zL`42FKtFK1`9&$!tO)>GYm6~Oqfs2k!CH&wc{q+kHk;-3>(?lyxN_wRnM{WM{{H6D z+d#htuK((+%?(9_QmF($DwSe)cb9B7OC%D(aU6=pA`1%(C#kz`fT!((he9DXHZ~|0 zi{$fp4h{|&9315C-Mdt)RkYT}5~AHPL94J9q973WZuj+%$k{w}G{mt5>g*N~I7H!r?Hk>k;aTHPc~fFB^HYvD|~ajudk2Z-d=wE_(3|ICK`<%qYXd< zr_^a@X9r^pK@c3Z>sdnPx-PEk(roV&^ZN`*`&!|d!VT5HPXGMP+@ob8EY*U#0m|`6>F{3>vai&K-SjQB$vy{($bP_ZEcB&NUc_rH*em^$jFGy%*=@I z`ywK;xVR`&Q&SQI!C3-0Zh(zuc3Nu=4-bjOVsv$N9qa$MZ{IREH^;!h0Q2+n)a!L_ z+_=H_@81c6pxp^J46q7(0&Z)qxqSKZsab_Wfe#-(pp?Q|i!p|G@7|Hm=c(0dBoYaN zAUIjzPr#~biXAZD(2!Fol}fCvtnlK+3krn-p64+!F>xdd9UUFSQy@@@qJ%*cX#Fe`}gwb(IZ({SdjJgbt#w2QmIs=TCIw;t&S?MPWf=di5{P~$=9!6 zWov8esK{sFv4}XQ+WI1vX|0u7t=6t%&a}+`&-DMR-({{EyOe_KHDxr-MU7u4(ZF>uFma2&_1l~UB} zb)kzHASisU_&%wa~ zo12?7n@y9I@B5TWC9>Hp*=&|lsf6$QhVAX`?IanOtjDsPo}N;x)d+{f=E86|q);f3 z%jJm0V#H!Ga=9FZLV@9MXc%vAZ&RsMoA2Ij@ECoTp+}s@Pc6$t{R;zJxa>B;O2J7qVD5W?$I^yu~5Z86bs%j)@ zzuzAf$R`VU4`5jqD=RAu27_@89fwFHLZ{O~YfTUYbUGa(k;oHptu?t^&b$rq-U4a> zp-_l)I?dMB7SU)F5kYH>)|y_gM5{*V#SXdafmCvo>>t?65 z#`k@O!y!QsAR^ed&D7MCk;M0Xdc7V&5HOP0ah$K;0000