From c556bcf96360ab74e1d1ddd113059a61187eb1f2 Mon Sep 17 00:00:00 2001 From: Thorsten Muerell Date: Wed, 1 Nov 2017 01:09:22 +0100 Subject: [PATCH] Added connection management --- frog-runner.jar | Bin 5566406 -> 5567123 bytes package.json | 17 +++++++++- src/connections.ts | 82 +++++++++++++++++++++++++++++---------------- src/extension.ts | 32 ++++++++++++++++-- 4 files changed, 100 insertions(+), 31 deletions(-) diff --git a/frog-runner.jar b/frog-runner.jar index c8bc9dda043a296dda409813f3d22b4b4ac7fbc4..cb8d03a57c02d8d9ba543a6fed6fc0dee192bda3 100644 GIT binary patch delta 14318 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 delta 13612 zcmZX*1z1~6x3G=7YjJmXclQ9n-L1H5aCZytQlL;AiWa9(C{}23cPMTJ`lWr|bKdj( zf3EA!TA96MGLt>o*|U?2&fRyAfQ9QfPe`B3j#I-90<4&@F3trAb>y!;SB^L2*eObAdo^JgFp^}0sAOk@bf*b^S2nrAsAt*smhM)pL6@nTBbqE?A+*E)d z^*;mI(c}t%gZ-;@dH^gEVY*04}e?I=)C;^51C05v%D6o?3(^9B%uPPFC$ zSg-0~^!1u0l+0R{(rxwjJ!M*wd;9gF;ovPhMukM&^gPsY)CW;vZ3}tZASj9ncMUDa zx3$_wDW~T`YcG9kp8PA%507Ueq4|Ef!%C{OGbv?Q8PclATx`R^$e8J=7l1)k9Awq; z9Q*+FSbri^Zt~B5tUGau)s{a&xsmCSa?$I}HhxC?q@cR|t~#Ttp&9Lf56(`t2glKd zb7URksrugp)TVCVvRlN7+LDyL$z-Vdd}biyNvi%vgM^b_C9f{KzCQj=)0=J54R{by z>S92$3NZ6qT{qcEw(BfU`ZVHT`Lng2Okt2)W-PvKh|^ov4dw1Ky=dqR)|y zGq{eG{{b=P5)_MJ^2$1uO{x9Tyb@c1ozM79gLd2^)LXD&Ds0C3 zQm>9=hNo!Xc>3gZyM*KvCh?Atx@rZ=aWa3GzlVKkI16 zfIq+%_V3vmnkBht1P2Ahga!r0^1o**0@yqlfCM`6nU}|U-OYci$23p@n9q*prE1@n z?FFz;p({$~18GxJ0m??qBKakhDh=#ZJ?h1wMcOf*n+4*M8|5En=M6p+8t{uHUt9Uw z+S&CL<`x9^+XRDRMdGHVSQZ z%===>%{yk19BTr7sdf^DL~ri*nY*X<NtUkl*b1y54T!S;R+h-3B7io zLv!$QF*9ySZ9jZ(x552>iyP`Ja2Aw*5w}7u^V%@*K`1^JZdg{@b;>?A#Xs3rXTHdmUaYg%f49P<4#t|g;$kQ1 zvf;LowB{hU9sLtZ>Ujg%l>B3;jw0~1TllC7!3i5XIsw&JV9GNqKzFN^sw86h0m>Gh4dFfPPhRxyiz;O{x#nwD&dX|UD8>HskI=8~ug0HJus#Q4 zT^tC3!m6x--rQO+?nW$MP$lD=oiv!y%Cz3Iao|Mr1*N1Y@ydHMXkiA+>Rchus>n*v z2`k@-oLb!KzDoRArvC2=^slQul@9T6!0+iC#nKblu9z~P_e z@wGk=))Es6YMc@ZissMq_y&y70Kftv2jLxfgES1!PLt)4bSd?rZCPn(>XXq2n=IhD zr4{w(jwNwoDBIthC0F2gi%foD#c?l~bVy%z))sKrQallMahj`8OI$_4CeEm;&#zLL zqY;}ER>&ZCSgtzH5~kDry>U8#qAUA+^-E5AAeNK`EvCQiR$d!E< zZ&h>q%^a-O6Kqn|U+$`SqZS8xHAQ=kQ1!k^;dZVDr5_q`^UdJTKH6R0InVZNmx4Z{ z0PbpIUUf!=UZ-R>uvdSZc$wl)fnxV1`)a}A-@Yn3Z%;xGiKN3V3{G*^Ya5Geb+qNYUBQ3 zMX`Ip9Je&dE3GHm1O2q?=;c=)BM>*BHymrm%SXP>T4XeQqs!5`3ZHespR4oKHSCMp z)n@rX9@oL6<27}Z)=I{c{vr>w(+WseT02d2%C0n0t#r4F|4hOErKTi%j(R=-i{^d` zZfJBN)1^Huw68$YQ@;fiflZS(w;$eaFSo)KsFjr}Q`LZl2OMCOXiS8YY1%9TQdWCHB> zx$56y>{?q4IUDGz!)e-yRMgvU*M(d2(xShlZu&*Q>T~a|_*uDtcHKIi*vqP$TN(~! zHIxgE2?BCdh^o+GdI9nH3Ecj3*)H^LaEt+3jbGkdST5j0i&UYrT$u6T7RKTgeY6~2 zq^|zemRT+ucS74om^NNvtNPA&${`MDEK#sHQPhyqPxVX3e??vTX9A;H5}%=W^B+GPA5(!3mI?j^f?;Uz;olno}P4g z92)6;wvKe4Osl+T9SNod zz_EyS<|31d2<3V8YQyQXo14RE7z;mHV?LQ~(If*@y*q?JTWPD@rw%=^TeJ-^sJUGP zXZ%USv1Dfhmy1gRc%GZ-$Vg30Jh(jJh;tbkT{Q|ZO+V7U;VXDqNA?%Bd1&NX%F zA8g)t(7J>!xlU0aq8i~90fUM6+ zV`X}5vmHwWqPlIhu&7qysisuW!N$M|hM}Bl^_kfXHv^urGJBNRMOsZowOMm;`#gOtx1q_3R(YT@G{e^kIW0FyqvkdyDqBWGCTUceM zJ}Wo*pnEPp{Q%=w1l&UI%$D579t9*Fp zho@RG!ot6VF}!Q?_?Lvm>uAXLlCceRzLjnbOgBU*M0YPBNq<>{|9mO?c48sYV>C)O z!`-S~oR3_|s6A~)jV}+>W@tGp{L5I`RqGpY0L0FyK}ftnvb@_676EU(g6Fc+t4bKM zK;2*}9e2;PI*qB^W447M4)v_rnSsf?Ihnj0wDM-sHDy2 z092G+*ll>OK>9ICd|DRE1Wpo3ymoOrvyDo$*)-?dxuEg1`v^?bl6cjHrg+s1U7p?{ z!yyBHK(T#D;(GlIZkd1jI@_gt)YwDhAj6{?ii9dMlo582&I7ixqG-bf)8ztQ(Pr$h zCcNBq#h|t*`tHJMcA}giX+o>yA_4Rm3TVtvzLZF~{=z|CzMi>RtMmZwdYR-);I@0P za)NJ;_7PlJ9Tbz#!RY(cCoE0_GU?umGA%7n@ASO7^o0y$XLY`$AJ)PaVyvuOC2rwz z$HG-3vVgizj(qg*5fy>ovHbLXtXsSNJBFE}zBV%X7zj~x(s6NS2?z+(4F+BUzk~K$ zIrj|~T$=}523tJ`QP+s_nSzox-d~hI6GTzq68p3Ct8I7iIQKduvv@sVL~STlZ+-Oz zm~%w@O#Ci{%JCsS$1ovAX_)i2WZYV&3VW6f6%R#q%TqDTMD%+^QXbnxN^KATjewQy zqHfkfpH_Ro)p*Mmnnw0Ej<;eBzzXst$G>$B;e8uxrDWIUXGl>1SNF6&xXN55XFFxR zN8)W^u`Tv-;>NgeX-$eJI&t;`9iPJLE43^r=R^iRU0q?BUs$tvSoVh|NV-7SEs)=T zN|<@sXXQ#gNBML1Vhqo>RGl8nJ~kDFZnka5(G@EGE+X-scf!b|_tW!BcuuRJO>GFpRDe^r~o+ z2#-cCr<0tvY~*$oYCAIg62i@&HT_f~kbY)4v~T$-Pl09Yd??!D;FAxCr^kKIRrFhj z`jMTt_0`zuP5-PudOOj|b{T91zZROd)a2ly{N8;a zP0laH2mSsY%_}nZ+(U94j~3%NgE-uNeE9aL09InKOX|C=4*nxo3}D3(_2J7^{>^64 zcu)QHdmh!5U6`{Ja;bvwbcAr<#+O{B_o6mnqAulQmpKYAp49%_)F`{UO~6q zhxC>K$rB%h4lR`WbOTAdaj)@`_^)sG9p7JDzV#|n4yr`m-A-N6+kfT#IHn9sW7XiC zK%119#h1dG&OrM}*FS02uDG7M@{_$++5_37!kg-=j@D=pe#loFLr*oVS~#lyU+@?2 z%GVa;_khRacu=mh0ibu-R#Q2_upz#dQ^ES*lz-V1-p;&u<&eAWl8;UVr;4lDT_P|! zWbYTG?38;Yub&n;W|EKS*IeHb^n5Jn7`xC#AQ!vQ4Ir7;N95}zv%=|xy=Km04J)Oc z6)}03do{d~h@cE4 zo2}z9BE5^8ZMz|FvkuK2$J~@L;U9in;SoQavSinSYUImP}DNJnZTN|<5e z7i6ig4gt(6Pc$HX8q#X9M#)ze;1Hfmk92VN|L8uzAE zWZ;^C2|$(`(JUPQ%UsUi!E-tBtVrX3PunSN!r&}3RKj13@Y5gL$y2^0m( zu(|l0N_v3?mYR#g`wF*x(+q!=%u0^_3hpL2>XQqg@nS(BJbE3RhK(v*iz*b0Dg;zT zbntI}TgM5=b%fQkr-1Ez-Ws%Uwe7rImbr0zM7l=Is zYGFVpFOo5fskD;8=3xk^JzoS`6=OK&IgQn5L$M#0?G^6=BRiscI5N&fw(r?zW>JBA z;E@%s4R_v){tpj(@We(XxTPMTN0`E!UWYJpaSf6*lL;YIMNT8dkBV8AXldtO7MlGq zR!=sxwF>O)!808A-(6$OCYHUO-dX-gEGPtB>KWtm7fN-l!reM=6JLH=zF}pRRAj2; z3=fypionyt6yc+BJ`JC``@~+Th!O);1^ej}_QS0^+|JOaJ|f9Xl00& z5H+7unxM0{DH3qJ1$-WQ5akKDD{in2}+~ZGl z3|w7Qmj|RAnUN&3A7&YvO&`!ccQb?S0VUH6u2ad>pP)%qE}rlS1Ud9Q3SsHI2wzrN9XP!u@*@u29sS0MQAp@V{^OinpT ze($td8$_p}?cXI&;Pb;TdVz<}aH6HcyLQy2=xkHScz4sX$Z2Q3qFQ!OD`~RRSRZJA zx}}_SzUxoC=aJRAuhJyB6V)?5kl-Ju+OXKTpp^x7;6(?Tw-_6mQq?!P*WbJc_*cre z{HVM-(kiyt(ILi{!uVpsR?nyPUdO-i<~`xQ9jLa4D&Y$#Prl9AZYO}G*k%V|)~XyY zsceuwOF-n|t&7%2gYvx|Iq~+|9yR*5@i8I(b#}`Fr=4qF@nT=agBad`D2~)^X{I0y zmpwerv-y7YkY+LQD%^NF2ggY6cY1hheO+soglam=B3DaX`DOK@h>3^zok+7Rtl zQ9iM>=d`l-LHg_VnhyF_G6tw3`g6PcHz7h^XGaIy?SQHRzAXUnKI%yOWB6J~)#f9v%@JTq{!!_wZi(>aRM_ZEV1cmw|tJyDMI9N-?Dk)75rH4DUi#> zNbT}qp-Ep+t-c^>qOKeVhAy8OsqxZ|>q&By9NIV6R<5J>bJ1&kV&V}9gOSh9O_G8@ zD<6d5(&XBGeOj#JcTAJx?YJ-qb$QRT=jLcZM5NVd+;7FZElf1>`zOsm1Klk@OJ=GU z;&OF1oMXVPykKYbCpJ{wu+#Tqzr5VLTij|Ll@@3x8;RthZeIu z!(ROK#r{3dC@+)RN)E^V&zqQGETIScZu{~Nlix|Q`okk?u3nIsnI)i1uxNm<%o*8p zg0)u>s*iC=H7U_DcD}!8z?>$6`xtzYRI|fAUp5Pu`P=4~=JD21arZIpP~||rG6bEr z)gS6q5>0H*L3-`Uk=@4si@Hx8 zr1~Z^g-$QNU4HLF&9iqFrsW6RY$g3ly8>OJd##<0?8U4CxCptiz>sJaA5+5^hbCm_ z90}rEZ^dCG63-Z6hj5Cw#W-ys_J#AG1JLymuI*6~YlWo?0|7`O$!mI#7L7($i8asY zG=i10T!mcXm+=F2-wO;yBO`LAjRPj>Ot980LTG7Qq*ONyAF$>Vr84qZ^Iw{h;xsLA zkbkNn|5ghUsO-zFWuV;M6y>U6n%X3iltj_xgDbNfi+txaxJJcwI}(uy(h3hkeX&b9 zw7W{yE=lv;JC#e+u8FNyn=r>uEl3|oqjX!KkY#b#pF`^s+K$n9SecLbwp;oGEU&6+?bUHdV{(w-|U`D3w+dk_*&PI9Yi>)8pqWjnN`LP`9ih~Sl&i}GY~ILqHwGp!(!&o>p~f~HuUxQ z5AAY^8Opu!uv%qRPMp^($#0VbfrsB-uZaCZvT*Yx zsd`=^3BTiJBtU{d!uUrK*m<=n#RzB;|2_IiQX@6fd zr3Diafi91tm84I{GC5glaZzjg&BFa0zqC>Z?an0^$c`}((pH8+uc-4EnwR-j+uUQr zHpw)3Mk3>3yEh3aXUUE0|#F;#Oi>$of2ir;}UD!frzh*!Hg@;jdpGXf+3T z^SCG1cXE@RT%b;%ndH`dnLE;(sJTLReXM6XBh_J=%d)g-Xegks5MZGb-k={rRjz5s zWZDxp`VK-#;fg2;{K+m0-Qh2m+U7>O=D9C_K#9VLe=$ujp?mi;jS9KY1w>6|Y-dU9 zizKqi1$WSBi0V~7nedM+E^Nol={bU&@wIll=C zlVHl0*w*-NRoPt;@~vIxoDaP&FJEPK3kfE*`xcbG;8DAc{f(uGP3Fgh?U#82?ONHF zN6AR)`nQWPO<$xx-de$P%}8%GzHxUfTM$&cY9k)7KlJE<>j1^XA$ zmE}PYHYm%uTtH#axsj<|0-w)4j?5`tww3ou&I%5YOS9#9$XxX)%uQ#ls&zeaR*dEe zKC+N;6G8cxc?WOR2!m&YrJ+yrJ!zFgxtYdXFI|*>8p3FsKKDdrqx_Q=4HhrwkI!3s zUJ?{=EeyQ7he#{059|U^1?dA19mMZq3K3Q$09^H-P`q=IEj?GcU)HSv?u+EoD>l$&A;u9sIjRA|o z9Au*3I6p{X=vSMK7E}@~nwbdq{G?Sa_;&7k7X5X3%kL~M=C+c^$2F428fdt?UU0Vw zPIBFus~#P!qsHE#v;5GUn8JBXZV)sNQg`ot^4gCB>!1&?#}2hHBl%3Kvu?eMAqr~t zjixCS|A=h6nRZ#o1)K5A&T~^mw(wZ4kTF}7eyXX@fXzb>UbM;K_zD%afJvS`*DTB! zYT(^$sq0`;2>2e+I76u<_7)k3D_=_6^;wWQ1zEL?L6p&|uMr(t{^+M;60Yb^kW~Ya z-&9I!g|pO?^Nz<7>CM+h+OnE*8nL~piFcr7r#j-;1_3jH?4*@B8ge~PZA`B?hJ|mq z+k6vF9_sORk0o#AR>K8;h#&;J=`*VM2QHG&e{8o-OrX%`R-&rvh*!O}MMPtkSgWMP zX_y0-Y~UP{aZ`Dj2{#~k&`ND*pSNHnHd*SD_;&~C z)-3e3Z>H^!hu_WmW~y=9DhS?xx<_UXe{6H*;Y6y^$Kbb!HCRn6o3wr^8)6d zv52beNk0X>=ky<}UQ2}P3@IDij#SA^)DQ*~@i%nCA)PQBqA+BB&Gl(gdc1pb&*OD= zxl|Mn=a3L2ta7d#Dqa1p*yX9doNCo<%Il80n3K!v|Mj{86+Apy{!)rMRi(_#Kpj=} znMc%c{&3z)jBCyOW|~H1SpYO=2Uw3RVqQoTu6xGbjzLTRTK0us_+V~|(K{p5rPN4s z<%s`@^c`pJZz%!*PVi3)EpocaJB9J%FY($was@!3d-KR=({&BvdHEEty9}990)WV^ z;NHz#*{JwLU7~hK0m}BS>`A7eTD*4Y((zIG=j@QYvKejb`4a9{Wh5GLzk?gRaURvY=lJ_pKdSc(@!;ZITHr%%mJ>-a+kHg;-(=Rjcv> zC1$@sFeIDgg)+gNCq)j>9caGhG81H_NNO(!#7S zsgv@Ct%v!IGPJ;Ap$_8kJF8x4QpQx1I>BhRTvvV)C6lB`RJ)()9W|>6PB|~@S?$GPcazyzmS z>Y-8e62B%Xy%whxw3u{oY736(n#M-7W>iPCFqpjZ=ZtUZtd$pI>FnMip;e%$Mj8U2 za&c9-$AS%hHt468KZOn{Z@=}sVo}w(ERQ5(t8;pf8Qbv{>+wVW$4cv)3hSGhoz$^a zQ5L3TQWp z%Ib`laa+A4)I4nPZM$2?92_LrS|qn)(O5S$w9{cHcXrRJiHTO|t=b%{+T0CiHCXE3 zTw~bmimo}v9?yNzHy=Mtoj;46C+ekDJ7DI$x49MGEF0UBxR)P$ke&)* z1T90tQgv-OS6un_dvgmV?ICf_-Lk*|+o-QuaUz zJ}#Y;#p8m(0_hiV;dO%*k;A zrKWaQT>i=EAYZ08$J2DV;Ow)|lGWyOYnW#S?An{}Y5Z=c9-GgDJutT;u)I7%9(~e= zA%PNSjr5E?(wBqKjJYSzsXuhKdnlW(tC+0Uqfm%`6?0ULnHFt%bb9RUo>c47rUVOp z5AgvxY!f-NvFCTHb_*>8_AISZ{vP%nGfK_v*-Tx^^-sRW`fS!fa0Q&Oq4>F-U{74v z^Sv29cXn)v*n3rry3HoRCV%1kuCU7ZoBqjnJK2UcTSEi7dh_zFMyZC=Qmfz9 z>AcA6D>13EjAQM$%j*}EsT^gP9jYhCQ+WG9xLj2ceX8A9A}}|>U9m;glw|VTeyEwQ z+JrA)YOeyrAIgE)^MU%+Dj!qDVU9R<9K3|Sma%juHtaG#adK3N87qirG129108H?pzOr0(_F0+)(dI={z4!n92BwK_h(>w(q?%nSoC$H%HeC(5e&UN{YOps#YXI zC371(0W{Ez`y`>;zv-bh7oa6b%cB@^$rNnvB$Bn_lwC0>5%-fvQGt}2M{K;Z?N-3b zISK#eg&J);k%U*7Y3NYOU&yuzAYm5+ozR55v>7Na*v34bYq#TKb5b1f+_&l09?JBA z=sRiI1ALDOP^Xn8@n&UT;{$Z4YXve%xPqg+_r4I_r&X7w_)vFvWqv)aHo?(_o$CS^ zcJFv;7KF3?VvP;q&?QxkMk!H8oDe^?lGuYDS4GIo#o*jQaAQO)FhJ5X1cmqQy%8Z( zkV;k*+9xot>TC^7*NIla^<%B}JwzIw9ujr89&r=+2$f^?TS~=T8G~u8MzZogX9KZ} zc;PM>_QMOIA;pMpp8oOJh2cj!Agq%wHy^!r9{zaw8-3>8HsK*#f_I!Spv7`t=Wdos zo8ZVU46#ftZ-Tcfg89s1GN8vBnb0{q=s6G^(km(OSqViFEM+b<8ID}1?N=x4KRv@e z(2P-7(L3fwQPo>vZ#pqCUC{W811#)<*8x84FHhXse^~+p4jOSgbecr&RN- z1Za!GG=!7*$mR&;d(DM>9aD?&4{w!tV9Y{$RRNM4?lsf;65cGW3n2agR2#Cx+>z{>@ld8p{3%B85%5pJn%It*=Qu*W?8!!J}!LqyeC;gPFqV=B?&~ zoo!7GOg93TBmP4VW;+=e9Z{yO9t;%AuiYpGZaTN ztrg1oKE!7vVda1b5@Tj6%ia|^aLPRJ!k~o4Coxp7v)Yo3<&2-dKP^9TL(Y0L;P8`R zB!_z>M=A!ryw#Bz-1J2&LHB^KZl0KLIc76QNXp)7>(wmu=myYARg#-Z zbnYn6T8m@1N|myH`WRsL%?7@@C8m%C!o^z*(@G?0=O}SWP~-Kkoy~wFV#t6TxXx{_|4m2=Y=7PLuYpSqPk_+&}HLr;zq7 zI8CO%?db5D%72s?LwHRHS`f554B>$#yMGVA903jgDu%~ESByVt{#(-wUOEPvQvGRL zU%pa6gZ$xu2@wj41JeKhc~pd%`UAkT{s2z4|Ib@e`M))XEdOHMn_^(8xso=(+KrS%g z97y-ql(nt*svcs>0vW`A_emi0k10KvJqthp{w?>Pw43KZ5*StRpF?zzT}e%xze52< zy%)#~nF>)z6!w25q{{!>LrSpsPaw(PjGai!yU!5YFk~nwzJJ+P7ySt<^EaYs4Q3fH z#7YekQS@I{2<87B6auglvgSWCWqtt}kBX|l$4J1r7eM;IamwI^?9d@`_#uWByS+s7F9-7a|2RM@K{5V2tN+?{`j^9O4*)#i3Yj#>1{61} w^E?2|0 { - let list : ConnectionNode[] = [ - new ConnectionNode("swdev", "foobar"), - new ConnectionNode("swint", "foobar") - ]; + constructor(public data:any) { + } + + private traverse(data) : TreeNode[] { + return data['items'].map( (x) => { + if (x['type'] == 'connection') { + return new ConnectionNode(x['name'], x['host'], x['port'], x['sid'], x['username'], x['password']) + } else { + return new FolderNode(x['name'], this.traverse(x)) + } + }); + } + public get roots(): Thenable { + let list : TreeNode[] = this.traverse(this.data); return new Promise((c, e) => c(list)); } - public getChildren(node: ConnectionNode): Thenable { - return new Promise((c, e) => []); + public getChildren(node: TreeNode): Thenable { + if (node instanceof FolderNode) { + return new Promise((c, e) => c(node.children)); + } else { + return new Promise((c, e) => c([])); + } } } -export class ConnectionProvider implements TreeDataProvider, TextDocumentContentProvider { +export class ConnectionProvider implements TreeDataProvider, TextDocumentContentProvider { private _onDidChangeTreeData: EventEmitter = new EventEmitter(); readonly onDidChangeTreeData: Event = this._onDidChangeTreeData.event; private model: ConnectionModel; - public getTreeItem(element: ConnectionNode): TreeItem { - return { - label: element.name, - collapsibleState: void 0, - command: { - command: 'openConnection', - arguments: [element.uri], - title: 'Open Connection' + public getTreeItem(element: TreeNode): TreeItem { + if (element instanceof FolderNode) { + return { + label: element.name, + collapsibleState: TreeItemCollapsibleState.Collapsed, + command: void 0 } - }; + } else { + return { + label: element.name, + collapsibleState: void 0, + command: { + command: 'selectConnection', + arguments: [element], + title: 'Open Connection' + } + } + } } - public getChildren(element?: ConnectionNode): ConnectionNode[] | Thenable { + public getChildren(element?: TreeNode): TreeNode[] | Thenable { if (!element) { if (!this.model) { - this.model = new ConnectionModel(); + let data = require(os.homedir() + '/.frog.json'); + this.model = new ConnectionModel(data); } return this.model.roots; } - return []; + if (element instanceof FolderNode) { + return element.children; + } else { + return []; + } } public provideTextDocumentContent(uri: Uri, token: CancellationToken): ProviderResult { diff --git a/src/extension.ts b/src/extension.ts index dacfe92..d15b7d6 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -8,7 +8,8 @@ import { TextDocumentContentProvider } from './resultsetview' const { spawn } = require('child_process'); const extensionName = "frog"; -var dbSession = null; +let currentConnection : ConnectionNode = null; +let dbSession = null; // this method is called when your extension is activated @@ -16,6 +17,11 @@ var dbSession = null; export function activate(context: vscode.ExtensionContext) { let previewUri = vscode.Uri.parse('frog-view://authority/resultset'); + let statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left); + statusBarItem.text = 'Frog: No connection' + statusBarItem.show() + context.subscriptions.push(statusBarItem); + const connectionProvider = new ConnectionProvider(); let myOutputChannel = vscode.window.createOutputChannel('SQL Query Results'); context.subscriptions.push(myOutputChannel); @@ -47,8 +53,13 @@ export function activate(context: vscode.ExtensionContext) { let text = editor.document.getText(selection); if (!dbSession) { + if (!currentConnection) { + vscode.window.showWarningMessage('No connection selected'); + return; + } + let extPath = vscode.extensions.getExtension("todie.frog").extensionPath; - dbSession = spawn("java", ['-jar', extPath + '/frog-runner.jar', '172.19.23.18', '1521', 'aax2sm', 'aax2sm', 'aax2sm']); + dbSession = spawn("java", ['-jar', extPath + '/frog-runner.jar', currentConnection.host, currentConnection.port, currentConnection.schema, currentConnection.username, currentConnection.password]); let outputBuffer = ""; @@ -81,6 +92,8 @@ export function activate(context: vscode.ExtensionContext) { diagnosticCollection.set(document.uri, diagnostics); } else if (json['exception']) { myOutputChannel.append("Exception caught: " + json['exceptionMessage'] + "\n"); + } else if ("affectedRows" in json) { + myOutputChannel.append(json['affectedRows'] + " rows affected.\n"); } else { myOutputChannel.append("SQL executed successfully.\n"); } @@ -101,6 +114,7 @@ export function activate(context: vscode.ExtensionContext) { } catch (e) { console.log(e); } + statusBarItem.text = currentConnection.name + " (Connected)"; }); dbSession.stderr.on('data', (data) => { @@ -125,6 +139,20 @@ export function activate(context: vscode.ExtensionContext) { }); context.subscriptions.push(disposable, registration); + + vscode.commands.registerCommand('selectConnection', (node: ConnectionNode) => { + vscode.window.showInformationMessage(`You want to change the connection to '${node.name}'. Sure?`, 'Yes') + .then( (selection) => { + if (selection == 'Yes') { + currentConnection = node; + statusBarItem.text = node.name; + if (dbSession) { + dbSession.stdin.end(); + dbSession = null; + } + } + }, (reason) => {}) + }) } // this method is called when your extension is deactivated