From e40702dd8143dcf093c65f4505ab15e043f2938c Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 29 May 2018 09:18:56 +0800 Subject: [PATCH] Initial Commit --- .gitignore | 1 + README.md | 5 + build.xml | 126 ++++++ install/fr-plugin-better-sql-editor-2.4.zip | Bin 0 -> 16082 bytes lib/report/.gitkeep | 0 plugin-bettersqleditor.iml | 23 ++ plugin.xml | 23 ++ shop/full12_200.png | Bin 0 -> 5910 bytes shop/full12_400.png | Bin 0 -> 13490 bytes .../better/sql/editor/BetterConstants.java | 9 + .../sql/editor/BetterDBTableDataImpl.java | 46 +++ .../sql/editor/BetterDBTableDataPane.java | 379 ++++++++++++++++++ .../sql/editor/FullScreenSQLEditorDialog.java | 27 ++ .../better/sql/editor/FullScreenSQLPane.java | 61 +++ .../plugin/better/sql/editor/images/full.png | Bin 0 -> 972 bytes .../sql/editor/locale/BetterLocaleFinder.java | 13 + .../sql/editor/locale/better.properties | 1 + .../sql/editor/locale/better_en_US.properties | 1 + .../sql/editor/locale/better_ja_JP.properties | 1 + .../sql/editor/locale/better_zh_CN.properties | 1 + 20 files changed, 717 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 build.xml create mode 100644 install/fr-plugin-better-sql-editor-2.4.zip create mode 100644 lib/report/.gitkeep create mode 100644 plugin-bettersqleditor.iml create mode 100644 plugin.xml create mode 100644 shop/full12_200.png create mode 100644 shop/full12_400.png create mode 100644 src/com/fr/solution/plugin/better/sql/editor/BetterConstants.java create mode 100644 src/com/fr/solution/plugin/better/sql/editor/BetterDBTableDataImpl.java create mode 100644 src/com/fr/solution/plugin/better/sql/editor/BetterDBTableDataPane.java create mode 100644 src/com/fr/solution/plugin/better/sql/editor/FullScreenSQLEditorDialog.java create mode 100644 src/com/fr/solution/plugin/better/sql/editor/FullScreenSQLPane.java create mode 100644 src/com/fr/solution/plugin/better/sql/editor/images/full.png create mode 100644 src/com/fr/solution/plugin/better/sql/editor/locale/BetterLocaleFinder.java create mode 100644 src/com/fr/solution/plugin/better/sql/editor/locale/better.properties create mode 100644 src/com/fr/solution/plugin/better/sql/editor/locale/better_en_US.properties create mode 100644 src/com/fr/solution/plugin/better/sql/editor/locale/better_ja_JP.properties create mode 100644 src/com/fr/solution/plugin/better/sql/editor/locale/better_zh_CN.properties diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..898321d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +lib/report/*.jar diff --git a/README.md b/README.md new file mode 100644 index 0000000..d33fa61 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# SQL全屏编辑 +操作界面 +![1](effect/better.png) +全屏界面 +![2](effect/full.png) diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..37eff34 --- /dev/null +++ b/build.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/install/fr-plugin-better-sql-editor-2.4.zip b/install/fr-plugin-better-sql-editor-2.4.zip new file mode 100644 index 0000000000000000000000000000000000000000..aa03e5203a6e2adc3b8498d8cb553a077dc9a344 GIT binary patch literal 16082 zcma*ObBu1y*RI>P&DFMT+vaN9wr$(C?Wc{^wryjz-TQsN@0@Jpoc#8fNoCB;-1n$I zs*;&ebt%e#g24a*K>-03d$!90{VzfIPj2Q!=V0S%ZfQqnWa{E#>O|-4XhUaeV(DV< zM8{0e%AolFsG9cQ+!!!1neweo!|UEZFKE3hAG8XN{))&E}Vzyyn}_9Rahl z>O6C=s;=($Yids_Bt;8CLP^2`kQXz{0{@PJ0Kq^L(G+kCG83`$e2Kt-qn`~l6v`h7 zl{k=hj9}V52}`$2hXc?z4?bZ*kH(ac|5jMr%46Ry$U!}wEZ(;m$#8xwo^5ST?v$Z=!!zM(3q=N5>Oq z=A?J$l}N+%VMKu(4SdaWQ~nCa$y9CEV2HEz6JnrXC&e^SDwV}0*A{ID`~I{cXn!HR zD)~*yP0{l%1K#Uco@l+JeoeLO(1GU_CdA*d>M94_r3(Nr^ibmB71k2Mz$NC)Vdw34`Y(lWz@Z31@dzcO8|Fe zkuU8oVCu?q%JQak@@|`ORLOikQVI?D_JPd)G~`MK@yS;}gA zVjPISZ99Y4f##&tEaJ<2``p9Ucg6L+x4pbev@88M5bpc;U50?CKEc<-gg)gylGR+- zd@lrsN^?6=f>iW42Teby-p}!8BkkYQ;u%8e-YyUplODXCpdzh~)#;px)i= z8UFm$`-%`o49hMwAlt-hpR7?6_`rCk)%kL|0{gBIr1-tgORw35gdin~%%Ty#==ETU zzY!Z5mj_)F^{$=4RzTLp7kdE9hNlk}i-{y?P?JkNBnoiVoI&*1`%%(bo{ z?sX$X_6(s82nH?}CyYNfux7Zg@Kq2Bq)$Pg^i3Yfkmo^OoTur4Yh!-O*8QVrF9>$y z)rAhc+exxg(W0(@w}1?Lp4vS)Ee9POQ=(7=an9qOG+$M886xF8fj{G482yOsQl`@{gN{XZ2eoSh%emdas_It@WG%Y z9}%@udwOG;pbvMitiHl^iTF9FB+NrA(uDYf7o;taE4n_EfC7Su5=4T93)!dnvRjia zdAB#TIJ!XvLCyGg@KLeMU1p579_eFiYvVZdJz2U}{C9U0+Q2uARWC<)!BdW|W`|#-yr4Cchwxa* zF$-gR6u1$mw9lE-5=769Fk50!TV$u!fGyJaZ>h2_Lo-9J&w~yptuddrSElX^PnD+B zXt&f;TDZz*Xq)+aw0>lRClEXykFUp||GcA+ubH~r zvwZ@zFe8%BFkKoS2lnG8_D0vkYi;*vk=rfmzUlOLOXm@pw;?XviJG@Wu|yo*4f4)| z-!!F&j#1&7Po32`MD%iX+_|L*F+DAGEkAzCtE8+Lnm7t&GjHDZMR^lh4-M;gnV}fB zV&0G4oG&v$MWRDtKvt)G1o$XU!Xo>E&TS+r@y6A5t_#;WAmknUpbZ4RKe7cU%W&OK z>VVFYZQLw^tf6GZuI>fWRH(3PgWR7(Y7cSLEHqw$6f%|n^;nWUW$eR=V8SScTSGj& z1N~8f3puZcC^D*Je?e$PCH;%gIkk?Mi*F++PN|q%Ej33IC2N z!o0zdpp56@TusQLJsT?6Qvqk-K9uw zE}cwFId$U_jSHpv(@M%nV0%A<5$F1n+=KRQ_=vkRY%6cC{@mzI!CJ=apA0J{B+QVj zdQEa7oVZcz0hyi|H4u@*Wjth!;C6krH5=KoAHLG|PWo7VV+ZM_kk@3Dh<%EvOB*+7 zP}zoegt`nmcOp|Tw8|);4e!cj>?>WhB zf&@!!E?ENEu>Ir>?xLKfG#w%pPw`Ah&$t%RP2FnL<%>?d2da+^Op$uaH2jeM`-T_n z-Dx%tQmHvvaRC&rQq?KA3m{ZRSD&-mVz4rXZuLEkN z%;M!nNi(>TxJ_?2$gUx)gcoBI`dM{83ozV?tpz_GuW=;!bpa6{>T`kL@QNIPQAy&+Ng;3FuL}jYkR-wx!E0(I$H$c3J%6Dx?VU zT%h_32;HNl!RQzojWMQIAJ9?5^g8=R4sYR_doT`q`P&SDYRVeVcJ7NmHIk_CCEo_*w^1VJN6WHU z;MuKSzD#&h$fXbbT>jWqu&Ka5oJfQ~LV%ULjs3VM66jC-XpYfv;_`IBVttn#*f%>B zHw9hefgU_qDeprkpA3B9h_es6(>PS`ekMB)Q7Z_VeeFzj`ihu^GbN>JlHCg(K{6x4 z1>XT5gtxT^3b8ko#`5ty@BQAjuNT10YSM)?%Pb^}VKS=|RXdCHVyTk14w(H_xU-vP zRXlG5fMz%n5mJ@SpKBNpJR}vafV6kfq7eiC2B;>E>x4*-dOU7fQxlKo`YqyN&Oj%> z%fNLAj_cm^m~92Wj0p#k#7(;yVJm3x>CAI)KtQ}s-KhN@{X66XVQ%xNLT*|YR-Lh9 zu_$q3%tiHL!B!}NaJpY@;Ushj}hnmNQH;O04^gPEQ1;a z&PB|#ZS4dywlTCl;}|mGU@o;$i*|V_!yfdo-X?_-I|GGv8qiMC{#PFS)&5QK$k8T; zP)xncV>;nuka?2uC7nS8N~H+(RC(;uY){(sQlZ9E85D#VX<^hUbbrbr?#la0 zv#%Vbc1Haxm~!EgES*138e^L~42nxE7Bmugw8t(nC+wFA4B0YPscLhR#Q2gX-xX-b zSPe5Hhav?!itYRn#0f?Oc@M}?hDit8_#vFhSJKjC)(NM*j_sMgflY$4tQi+YrdM3e ztub2JOEolg8(9m}H`L0Kltgp2@+CbjV#>kUdjAv|m zdcf@)k6*kaxE`Xh39eZ^H?Kd>2@+o}my7b~nwbO`T&UU2jQB4&ao*hY7I7Ev3BvP? zxajQwsNSqNx4z~Sc!|k<2(KU6%WhTWlKBJ|a`zWI-(#2>gcoV!5yt(Nd9W|Lm!5V0 zv~PJiqwL9w0;3NIXKeQi^tE9?eRBqiM49Ax1zeN6x>#v4Ea)%NW8cD(&e2K;>#D3u zO`!3Or3N;KkT~wQURifYF#;~WFKAw`iV>jf{ z@l4?`Fn~rOPx#n00B|pZu7!c_pVKs3Uk8nyWk34>V+pXAaAga1woGoVmugr+PUsI) zhpLf%7ke=%7wqpHPlbBA8VbQQ z%{fTbu46DN417nM-&0Z=PDUnm_*Tr|^jSxzPM|zu&Mt`_usiFGds@6nP>dUo+G-swz`?-O zjqFq4$W`81nyEfT?1}38cQ3l{fZ0zWEM99-L+veKTo~X;u|m&zFD#MQ;d2DBZCB~< z!8iL;oU5Kin=Kywh4e`lZ8Z%IVwo62rru6gMe@(PqV+gd>E`Ts8gbNO=@0ryC`WY7 zP>9l93;j`4ybXlI?cNOxh%PakIs?Vi6P1qxr3utfSYNX*Rii=Blkf4gRg#IfUI6tR zj90@XHhzFG*!VFx5wQwqMKlB@8>dQ7U3QJNsZ?``GBi%4-wA_BY|g$Ja*i;;rhp?+ zD=d?YF>)uE7mim{!?kZq7~m4|XtafKYNpPvMwi0D@y(!f+qe_0St`%*p7AXY z$N|qE(qH-$q8WQD(N zzF|9yvp?RS^IL|O>TF`2s{6#R45}c%DKsnpEjh8=+L{zN{Fqo*JTD#XN?^eh_)csF}e{$e55X?`r&}uWLavMJ2g0)H~YPwXb|W zFTcwR?M&`0u}|Us#-d4@PmUje2+R|5lx&1+7zXZQ-9169RKgKfdtz+-YaNzic=G7g z&20*BsSSs2zD+a;T{jxI0SNKZq#QCl#Ktm)nG zSTkw;=*Kh(IPAP6j^9T-*}LPw+bpHlFxCN)M$<-Y0F`r92uX+DWs7g~#$q5e zHc_Tj4sX94+(I>3l4+1pUWQ!w93O82agbh^-Z6J_v_-8p9HK9o8X3J&$?bX~vhYvD z3%B8gK8`l!%{$ryAd_cK1wElTkPLz*r0GWv1{vlwlEbDpA)WcxP1`w8oF87q7l?YF zHY8zO|D^3m%cyFxqjLA0Eyh`pJb+iPZ!U#H*!vNg-Y+%+Yis`8AO6imiI zMQ@ziG=Ow(MM5zR{=#$>1y_mzJFIsKmatDoC>%3GNv=SFXBUb=ICmaigz%j6zCz&< zg*h0u&gSh`YwZY~=rzQj2t`peykXt|{}9t|?Go$`i8r=Do#&Bg=Qc9R@xR`I+8M`V zEruI4WGcNAM(z|XSDb3>3Dj$YIrB8lB9`+xCh(ggbW0Evr1tN%{9a~M>*Jn^EaGnt zEP?T{CrIHz=X#KpL_H$( z;a*Azu(CBQtGSkH}tO7o%{Oip@TeYWg6|%BwcHE6%i-Q`r z7OO~xrtgNAc5DnigH9ujngju~v?ThcCYwa`ltTbhI&K84Z8vOD?c|De5v>lc()a7a-bwVCfd)9})IG32R%A*xq?oxqvqv>v z^%f9q#(T=Ua}8h3BJ2>C+GS=(dt0+Y6Z@|gLZ%kIdD8&{R@v%LxpgZ=Q4B=LJ*^9} zcM?8n#u-+9{4s1)mvT6KjKRd}BZp-R>NW#;`Vv9f`DXS?!^bv9gB5t@Cz)FM0#BBGn_Kgl|cp7SFbSU);vn z2jvjTK%~WyC5jGjPMn~~<{6JRN)=P<}@P!lSuMVp;bC4m*C8G%ssb?Bl2)m{Tmy$tx}usOi0<$)&1`Ard?yr97Ho0f|ccc$kTfE*h&PvcAEG(Uja$F_fJJ+|wwU6yW9JY``L^QeynTv<5J{6K$v5HM7=oHoBH`BVWjiV*>Ruuos$x6SUp(WVKC zroLGdl^oqldaAB|Nmh~Z*Uz#T zV%=;DbT23%YjN-7>bT_U+IDjOctk`GK5ABZQ6)*ro{SojwJA7uQ5Y}rh6O4(IMWy$ z!W>Ey7YvmW%5gw!TNIR)j$1x|k-A~)nSBFvC9*PCit>}faBlJ=1rF^8!g**7`3SXc z%N%(~*lX>*M-IH6F7<}LqZDP5nH{Bhx~U;f<7HaJvlac2?(Xwy)lvUybUI#QzBSo6 zamV9@f&7X{Q_TdSAGLPG)=7)x#84MOWE+!#w;U*{P7J0lT3YO&f4w zkvNfuEuI|@(0p}srIQ9^tVS%{p{Pu4L3KE_B9U_;$e^5?tuVwaSa%hJJk^RXp55NWm`zPs&~;@^91#rcCl_w58Fvuko{A>{O;|9@ z`R{W0TY%;|eY+ZZP2+@3`wnE2Nc4n331VM7I4A3nGWpWfQ=>|qrh>O1 zlv8M2ANr*L7>zm;wV%hygKKFgbgl#fP#HPi?|yK1W(?Vy?QM6lBgTuX<2~5$aWNe) zFw+>z)B@$Lm1Wt1p%Egv4n1#Mvti(Q7-e^J=%#66T&fn4RN0C# zov+Ns(uib)ihOv%+T{jy>(CrXdI><8vbSl3kiQT~7i#&?A~lYzFbjXCr#kZ&MK%ui zYQ^lHL321Wn>TW35zG!z6jd8DSyCzIHtwm#rKFUr>sRgwqQ4A zO5Z+d8s9YiSuPe{rqUhp_eg;_%Rf{?7^OcMt^46D#-R3B7ey945_?0k`5dqZg^QJR zNj1x0++&X~!7Q@TMyajONfnjcTzE!v8&WS$aO6lZ5RpC1MrU4=OL-BxINx6*V!3^} z{yJeHT!y7k+~VpI>OKZ$wKb2FPY!ept9r)xaampxSCLo-yI$^%>z}^^Rl z(KSZvc+f!}bd=qw=y(C14YO1T`Yl`3_#%upF$ITWVp=`CUTxPZ7S~nh{g+!SVlu0EEjw@A zkj=(=@G|qEYW_#C8I~FrgY?`dW;Zd(nA?}j6Az$n**X+7WxW8`=nvePu@d>3o420M zB3v~x!Sg+N&Tp9eC}xzzkR0m8lLVK7 zR()H}G4?u1B=8oDsiEXD*Vq_%^LFB_m#o2s880YhYn{xN2F9}pD6({-3E;4iSPl}< zQK>##3>RbsPzzdUyLGO|m|ZHMF)mek8@9Hvo=5kUxNas1j{`Czo;3|E&AL1~I|zxf7gBI6%Iy`WpzJb-d+3HUOa{T)}?ri|YK9WdSzA$bJ76It2aY-J^9DI!wrDAM>s#8`%b)J0GsCctr(^?%pQ*rr=D z*N?AnIFZ*&O*J(S`kAjM(sEgyjXeRnrB-h?XIO5tQ(fNS8nQTbH}p!z=rMNj!mE+W zAdPA$o>;$2hOSUJ3VfHw795VoRI}1o0_@(L(O9p{NAv&-Xa~2w6e5>Hr)?JTnfo{H zdHo7VpR+I~pVXL6?q!+^3xI7hDyCiw8U~ZMUaM1$KdiyMXzorH$fsVeL$~_W@Y2}K zMvsJj+z`A20RS6BKuYI60PU3Mw%GOPq;ONYQz|mVC{LJJDl$s2n?~c&(Mm^=O5Xff!XX<(pLI@FYm9Z0P)K<1I3uX2bVaiyC$8MvPR9m6S-1m8DEml`6mj zC%sed;MeUH_4=7n2_j~3jrr}-L7`i!v%Yqu{pBQZ zl|uFIDf?uY(jxY%ln&}+K$wU&vsqq|gk5vx%vM|cVVIdpi8;4fox|DYbHxhsZUC`@ z281dX2TWE@Jn^9u^;dO>83iU?BZgskIDDhY;RgOXZGXMDEtg36AUMPw0I@4)A;+ZV%zi zQ2Snqyw&&WQ)z;kQeHS@w0FrJS+2pcKatA&@fnBU4cfTg^9K-k@LLvZw9PD?c4qfi zGsh_D^g{rL*bU&lDQbtRsYcfnSmrl8Xv2V>q8wAt$LR^w$1U<-K4j9ACm6Wo@B^-_ zq_K~FQnfh*0%A!4a#>b*_ZC z6UHsZaK308AT4Z+n@Z>bEM?(Hf5+FW8X->JO@kRU#q(Deq9P@j+3T#-=2KN|-gyJ@EOmBYQz7ZknwJ2*x;+B#-SM-(W2nhQAgv!aG9w3YRbu z-WqKv^daDK9bUV~6|_tYbL^_ts=9#JJclmtqTrV=3vUz=I&UaKTF1r~&oA331LWlD z3;yXoPGt~Kbu1fNq~N3hRMR!RihkF9Aj#G~HxcvCtV1}73r~P(FeV1fYEBg#dP-VY zv-!>h33wxz^Lyw4H{kOj4NQDWLSr^tB674A0{`rZ4G7m|Admafpa^jXNKXW^_wP#F~A_HY9KDXp*+Be>Co#LPh^uL+8|J^U~h z82(EXK2NJlk{^twTveg4G+;E$g#bz3Kq%nZZn9qhAvM!DTtt*@d^Q;d`XwmV8C_}) zMPT^As-PKys^r6IR(!D+S<43JIymScL^|~GJ@IG?{KPI)M6%LLVkK>22n5CM$8b2} zQ6J)|HkrNdto`fPn6w%!#=z#^7^$iX1}89F&b;eJ8w*6PA}~*=rBz9#a^k8^CJcG7 zoy28*j4Nsm1H`F^)!+3cQPE08@*}Db#wUMnEjsWDz+~7nxJ&Pk&7!q_Y4!lOWoLS* z-2(1>R3FOCp0x;eJjPbmQl}l_SOD9%&4#W*>(&AYon%U^i8!R#<`LzSs*lYsFoWp= z34_n_*C@P_zSaP&)oW-Z`Wx{Olht{6+^~v6-R7^9PcZVS2~@YR2-~U&3rC4`Hg840 zX&iJuT&U~XWP2XEM-T08^a&jFoHEHbQif3@TSvNwfI5K(uKoVNAcK9Nagi@NeY+_e zmTC#o?*riQuc&gP9q^Y{c~$i-NQLR5%5$%)sT@V6`;Sna(k|F75gWZuzpDx*7%Ttp zBJ8*+DM}T_m)Qe?5shBg3=h19>=P#P&) zvf;JE;pXpw7mORyXoX+9VBq*$D*3Op4knAjahBWexOHVGx`!#6=}`Mw3!K}}WY7DR zI~MjTTH`ws*|oo728j*QxGihLjF;s5(`E89bG3Y0`FQy_w_9kx3FT2`j-S=bthCYw zI}lzv_@q72P}SjpCB{9lg2|zusfXaBEoD@h$vsMucJHE*V#$%`fi`+Ux-BOIB==VD zC5m*FoW4m#G6mzcC^S=baih!stEX<_#oDHCTh?f1>I^*5n?Bx&WO!`U`CxEQWyjY+?bcR8=TyrBAoEGiK^9#j-X+C!(@qp9>C>AB zmWNojZiGJWw@y`^c|lMVh-3dycNilZD&%rvp3xq5 zsYX1Ss$+G{{2etv%Y{(|qUD*tL|l)^Pk!3l?hPgM>F4lvCE>1KarxF*x|8Lv5auC>+_Qf;&uAR0=g5luhv9sWrc%ucWI;v;;5HIG4~GhPFW$k8<}_9*aIMz_UCye}(=N{g!{ z4-i3T5_z|s7K7Ptl?=CV%N8N+%#L?xYE9#DcDO?GQ9=qX0uUU+It>>PeRV4W(xzo1o3 zM2oi~jv#PN19sMlj4dQNz=gXRE=Ww2db9$PJYf!<2d441uhV)xD*c* z@g6w!2^*`x%OUUm)h#-0k{~X=A=M5$osd_cP%+8Y&XtAyx+)1`;hgOqL~Y#hHFp;e zJeYj$lvpvPgjq@fP-u_&)jHg&r9H5%s#28w8T@@MrT4*N^*cBMj%O-Eck68CZzz-f zEG#XChN;57J!_V4zRO?qw6zdgIf{v6Pq}hkhj~q{XzOOLgVU|Ygf6A^+=7%`1y1#g z^sS6DOa~>NFS3EQLQ`9GtIyl+&jR6@gJa7e=moDoS#ZO{IQE8}y$=O=gzY@xOAPpn zCeLKxw835hC|*Ku=O7G9QuwF8y>I>MRPC8WpH8%HbzLKOlH|J5pUySSV^_vSAv}$) zGvt10e%RP(OmXMDyA~8Ln=2=Hv28}`#;VmEM~58-QCy+lHi$+^huIQMRAIVtf~26 z^E5t~+4SxaTOb@#!`U-X3Lc6$X8d3PLogR88I-E3Y7!U)#kmq8%Mt)Lp(EB#8mGl# zO2p&P>DnTO?7u2A^VumT+y>$XG3a!~CWrDML56mpo`n`XJ+{a+?6dcvcgQq|VFV&I zOUd5$K;AF8CoC^wzsUu9+qpVYzI3IXpbf|!vO^Ss@@IxA2t=_2Ft`?U1R)!hb$rt& zxhi~jtHqlKMAQ+yvfMUi6XDMK)$T4);jeXNa77&!`}b;B6|0DPZtFs5dxUdv_o<*h zp=3pXRyIkymzaO)hC5af_bDXc=*q_%r0FK_2tLIb7s%Fc0Im9_4RP#>a?AHZ(vTvs`w~}{T-hv`Ihfj*o2|wQ% zbnC-%oI<&2ei_E~-AvL5M5pZDFsXUV@Ey88@kP2-y7>2eWnJlE-2*lZefKOIk8NHu zjVPe%-4mS`$nT^qf4b(yXiLcPzPn2hm+B2U=Mz*|X&I3ehvI*K?m`dw^IxhcCt$qg z&xTAt)!NAYphQWGyH7l`7~D6UDxch_vjkggk1YUM6G0!7`x)F9TMc1@z_-YLL)G8{ zqn{u)CPuHN;AX)l9kn)`SY^GrIR3!$&!(f(DN||Qi&qYfTWw7Evz1YvG{f`x}y}aoi{39pl{!O1akp}a9}mu zE7E>yq-^vqFLbDn8xmM8s(Cc{+&C1m=kIFyeCjXQ^WQrB@vz}hQ5to-!7pl8{8XOk zZU?{DWvqY}&2GVtm^ir4dY1&}3Q^04NN0Lbu(84*%2y)fM7!c3oOwWQH)aMw`Y_{@ zeWBp3$GP}Pg6TI0b+hXuY~e3CKmFrq_Gc5c%-5DSQOim zY|5}qNSQT)9=AWOWSuG>{%xt-A@5BRD@QcUBtu8?gx)7l%W};<1$~8c;9RAvYQ)!g z6{`^*I?`ZI$}ovrN2=TwIrTnOl9)Qwh@jPDo4LKBg@0LYajn#eG&wX5j~(2*X+|Ds zW)b(wCy3W?Ib;0T+hGk$_xqJ_IiHp+2Sb=8zn6Z{0u(gHyMG(E_9!7(*laYpSE|U z=Ar9AM&m=E=d0q=7pdp-5#~M?Qm34>k-RB}V#%y^&iIO|@zdRej>iUq`X_og4O|?v zHvJe^*!e1Of>r<4XxUK<>~8}0KoA75#~Z};5&c@>b!~VtxMfJfDYMYJu>jRDvr@wE zu%UuRDnYd(budxRxof;p7w8ogHqZ5Ow%fW5VFrVg#Z%6s&XVy|_;SY-=TIAeAGSr7 zO%|TzugAZBjXuZ`GX}OuNl~>C12_pVaNXCT@zFvoy-xi*rS;nmd05~zcyD}lY4VqL zrU?zyrY!jF(Q5kBOr?2Dqe(W^bgxq|YK1FxeF_j;szE3+;9!;!<0cu$F2K(Bi&eT2 zwOF%3z)z6%&lBAfufYrQ?Qmx;m?4Su z2Mf{%5ZF|MJJJt0YE^|@w1AEp3Sb#T#2GD*Xy21}n(_m)>!s4&a(X4$!n97+e z>U0Q*%kfgzRMY&sg}S#uuq@$W5X6P_tAg1dO0~`+Ze$&0A6mvI+1bh7kl3KGQ(G}j z&m^?caI|pe79KhOp8wcp8l%~;=uVl<;5V#QlUaPFdl@o_CYh8{pw#)_jIy6a*dVI1 z7p-v2h4@04#^)(;(yqx>bT=Lz2{^?`VN;!5WqCZA{Ys%mDr9~<#HaJ?%&pDgl z$+}E9YB`)uD3eW?l^Zba7%H6NM(61u%vO47i;~S+jUVprTMn_d90#`6LId((THr>5 z1$rcAjR3LX;{o>ZWCC#JeD=g{r!2alrmnX*kN7VBlkpR$LCQh+tiMp_Ow4ROm5N_0 z#n~$OoPM5i1{y~+cd=;S+=50;UhvfVtA83qqNdC;*Z>OC~3Qq1B#8bQB9&=``D%liGH6VMqlzR{vlOC#mnPP-S#;+_mj7lA7<5HhcNQUp^L^^}nz z(w^q_ka9AnkrVo2_#T;xyV+*2t}qy zNvZIgSTm#JZ zkI*`3NiQw(`0E^U@m(9U79)TiRBl?A<$dW{j%yg6&ckN?et%;Bed|@u!q~ci5I4T|N1xZ3K0Ow)4SL+Fbb47#!G4L+iBe&!sG?G`98E{z_+FU??hgXQvpd zMMt?~ugXgt)Y!-kjTM^YmB-XcWDdX)gFLPtw5Y{$usQ)9MH;g&WxLEnUO?4JBy5jt{G(QU`oC49&a+GtqwH@+hLL+P+LwqRak8Lx@J}28M z^_|}jmub@7$lk?rO-b=z4eG1kdf*2f8g&380%-;D*%NVG%tu<8gQoDFP8{gO@LNmJ z?Ir?GS9*QCDs{mm8-ZMt+eE*^b=!G;wXSGQ%)}0+swh{_&k9y<6!~lPlFdiOg2Ox4 z%%S|HYZXsa5V%8h;Z+6lp^Go57zo+ly($oOVmtv^v;3Ahz znxgfYm8!2o7Q~n7)+Ua}`!fxBjyRkT=*5EiUx-3a%Zjz14y=v-?z-=*pUZu`WJ%xo z97QMW;-d)undqp-R;C}j10X)@wW*|mU)urMa|5LYmQYfI0y9IQd?S{p&~$BMj(-g# zqlfN+h`t@c(h?W#d#h*Ioi;mpS zRc)Fl^iJONGrdN&(FL+Zn_Nq9m%J_rS94r*1Z!~1Mbhx3M=MQ{BF=CU-sk0dPaKC) zM|ouS`ssHFJ%V!og|_45Y~;>C?)1lR&@bYy^Ee!!Z)tl;dLxPsU@;v5j> zxZu#@!d;|&tCc>eV60U`mS%~vAyzMfA#Ty#@L_a-o90~SKlnS zz6vt`hx{e3SKoy`EB9~rmLI^)Kz-R)*Zsh59mvnOzr=??ZSWn=rE6tCzUC~Uzx;l{ zYDE3wAAe%%;2$li<9a52bMl{Im$1*~`xJfSUipR3$T#qlS?P73*f(yWJBkyKEq@l> zJGS^$Eh7O>3&QUgr%}CTk6f^ayL4NFjbJ0lbV#C-rm->6K< z=d+vk{;}^~>2DO&Ad~rxr=K{tPdCR3yiRQbz3Ff97C$yTClnhJGe17gCr|cX_`%^W)LG+n(~e14#D|`iRb19%f^R=IAi(jZNKvZXm5r!TfH}{0BW?= zq$Cn8X+R2+Y<2-XMi~Sw1^vsF78C2T(Sf0YG=*q^*JM<4fl{ps+W?Dbu+lKl8IQM3 zsf9yJ;iWgtITF$cu##2a#)Sq>{rN;weozEnU2IQsuIyypKA)SIx2QkL!=vBUC0%Bx zYWuTlMP3ZFUVN`ob%F(6!5hS$@Wlt|11qiC1$?v@D1wAOT!4~3D40j@Fae6r17VE< zFJWXvN-d5}Qvv=i+1`M{iT82`gST8*YiMj5Bg>m89=%Dty}J1A_cSqNoSZ^20oW#4i|I)jucR%J#aNrQNq@?fBZ435)c&?k(P|?{_DshZKa- zrpHYw1YHbl2z4viyt@Ul473b&hk3b(ZNFv1>oBFxKbE;UM($#;Vom?-tXJrf9&eE0 zJWOnlr(eCbn@kT>RcK+!vknxMR+8&5CLlOUvZ!s!L-~8Jk}dMkPJ8#aBoRV7f37d( z2LTXC!U^-TNK4J+GF0)|pwr>OZVjppJ|`7@vW`AOcdkF9sAP|!(g@86#{ADQ!5II- zn*6NZ<0{GkgP?)_|6|(!y&jQ(u7&>1{sUJ1548RNy8VA)+yCwL?^qJZ|9|23AFBNe sasQtM|MzY9zZTs62l4(7h7A96Q!2`UL;R}-{pZ011_CPO`}ggC0QZ{Sj{pDw literal 0 HcmV?d00001 diff --git a/lib/report/.gitkeep b/lib/report/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/plugin-bettersqleditor.iml b/plugin-bettersqleditor.iml new file mode 100644 index 0000000..648ed75 --- /dev/null +++ b/plugin-bettersqleditor.iml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugin.xml b/plugin.xml new file mode 100644 index 0000000..301dd68 --- /dev/null +++ b/plugin.xml @@ -0,0 +1,23 @@ + + com.fr.solution.plugin.better.sql.editor + + yes + 2.4 + 8.0 + 2015-12-20 + solution + + + [2015-12-20]修复在新版本中无法使用的情况。
+ [2016-03-25]国际化。
+ ]]> +
+ + + + + + + +
\ No newline at end of file diff --git a/shop/full12_200.png b/shop/full12_200.png new file mode 100644 index 0000000000000000000000000000000000000000..6ae5f280269e92494503f3649f5a9fe74085294f GIT binary patch literal 5910 zcmb_gc|278_aB5;|07Wsg5J-qB z1TyCaf#_sGAbSFH>yGJx4-kQtE))otD&Nk|m18M>69jYdac~ZHwjt?w1o)|tJp`FH8r#^z#ZP17Uu?{uG@seavqS9q@WbjKcuGRe~?*W1MYl0YX5K7oer0 zsiKN8-~|9cFUa$(j-9FbKjz?_KE^vZI8XzU3U z^sSqK;(<@YsSqY4DdV#Gw4fW^Quc1lZly!!fVrE8Ee}d*%FVI}ASbZY(zkT)57>$-qen6^zVwT@A-%z(t z&GIq7{t7Aax&rU0u1G45R9!ZoJ!*1BV(7*jwIZ!8+d(Sij@K}}qkXO6+2NmBFB_dD zqJ06%h}6cD-skYGOk1kQt7R-KxxrcTYJYpQ^v!6s<^0|mLQV(vp3CM#@58GOovKOS zW=v#|W~aq?18+qFF%?UA6Mht5E7hIADy;PEk>*#r{9^eu_r#2p>amfP@3xFx*dOw1 z=yADpYL+FD{?ev%AlG$3wd7h%+}2}(DyN!8SBP=Rh>OYtMhR;YX@S{(^_J+@mG8fRH3-iO*3>T(0nJ5sEs*F>2X z=jB^CDr89v+K)u(wx+u)Y2!0TGU#g8_*UI`mB&Di@+~blTSZa|r?HL%^G#lRhB*-HtsmdvansIfP-Z}PbNR+BAN`<|GbYFvyvHB0tV zpL3TDat=o~t`Q0_UQt+Ha(=EYA_Qqah)ZGrlDjhqI3;99q5YBo&A5wq?d}qV-JE%Z z4x1s}@Ar=oIQwrI2NNn2i0a~d3{Y@>8bJ=#W|vrb*x1{l0GrRq+GAqG0Tjf&P`Ka{ zt&Zl#hbWE+QBSdX@1__{E|1cWwQ!8h#UyHUMu9ncO2;R>nS*|2w5G+Z64Nu#;Tf*F z6iot(;aN~*`_NUvVz-1T$wqO08I#Z0N3C*ALa)_5>tWWE9U^9O`Fv1JoWTw&!VLUx zqFc|}Lz@8xw8Gal1Aju%f&o<{l929qMDu*%`no5&7Bv}qLaQr*`;DAyi?VkW2wUGP za5^Q~&fq>h{@nIG7V*3;0X{o*EAxVpk->|2txl%66RF_K;u~R3o44(WME~^p?%H`$ zW!$1nHA_CIh&7bY>G?h^qW8Em21ekV$d*g_ z5I~iZ5!mwau8ZCm2SZ?l7em<#0%l|48^I;YKLYt24iMl8=x6bcNuL(tn1YvHHsP$M z4U;}4!wY$3+w1FiSMFD8yKfE?+Z2ef^kiL>cM5tO@kM&}K!3qvlVa5h0hP3FaO^bQ zI2dF2>aY27ldX~*$yX_M^yU4pYV(lQO_G28$=YtXsdgI|l(5`+ z6?ST&Ie-oX?;rAPxs%!TN6TJ!i`zu_NyprJ5;0beBz*b)>CzhZo=53ZSCPmMw+b0& zg)M{5*Mz{mY1ha%r_lsXuRt(Cz0;nFiVY{xA>{bNFz@T=qw#_-J7o8)5V>I@-5J&P zd|$JzkmUp@Z(I?!Gf%&7BaetIFR8OdgYS`Ke>(U=ZPyN4&w@dlzqZz?17M@}}9Iogc;G9?YztJjV&JxI7*+ws(`bxf(zB$fxXt zm^s9^S-h+{qC;klcm0cPh}(C?;Y{TLWs2%d%~@yBOu;1e&ItrXun2o>EG8n*!g8+t6gk|ory+g@wgWr%fD%(fteLKeg z>Neh!^oz+1v}fuA4kT7m!n8LT`#CWAv|M{`D+e{# zebd_GHvL*p^WBm2*#y;hT|ixQ0XAY{Ew%Ta1~GN)h+p7keQqWEnr31JZuW4pUYC@{ z^Fzju56UCh5lX=bdhd%wahV${)p6Sa-ml6es?Rho9{O2r^6TL8LjC(9=g@kEJxcfv zbgR)ykJ^WgSj9e9phECl^hAQaE&Hd#z7}l*4?2>oNlY>5Q3#$t-;#Zlb>!0c>6;Y> zf3C-npGG{W2wK87S%~npKT7HrQ%|^EaF!nLaX-#gZ?tg0a0dF0@*tvWcs(LReu!VF zg0i;eULo$DjY{Gf~S28|L!BafA@mpjI~-L-5P*ZH$M zf{`annm@22l%+A^_4?|BbwpCYL&GkCy*&54V%>tRgroZBH<=ZmV(#g1Q`FZNsPBGB zcm1rq9266Hff4LG$A@h`VyA|^tSWLWAb8|^r6zZ#Cu)7}0-3YNL>6YyR&CQQ3FnR> z&4qEV$mC7t;`N38ejT2eIR8SjpZvV?}wMcxz44F;=7A)S+Jo>X|)SA7$^x8JXEva%Boh2A4JR9 zqCu6(^nmHOsHA5S$LnPAs72I%*n@J42ABummpA<_kzjs;?#$_=uy3Olv5_`o=ewN* zSwr9BANlZe39=+939o$kK$NPV*|9qn%oym*n~2z%iUFCJAoo=18Nk&K>vf_;Xzk0@`KTXl5)1vpwI7F zo2mOv*iaYR6W{ZfL7VSc0iRN%7)_!_>!i%xRKT25Xn%!7C4Kr`*{}pH?o>euu5+mN z7$NbULO{_n>fH54Y{v4bnhz=!3d$_4cwpFaLPb6p*;NpxaU z^Ao>I7_??SOn-*rh+dt>5u$O+dCdB-SmAFY^ob{i0$W?Q5s620GPO{gn^z~3nXB>J z_OrSK+Ph^F3yOAiLlJ{sv5mE5$5-&R-CwKn@yP=qYstOi0)GrvQ@0QI+sSYVWUH_^ z(UTnQ_$Vb2`owTCu}|ID6sg{xN%(bG#OK5G-RqmqAPb@LJf)>5HX_3FYUXw12~-=i#WIw4huj;M5?CkoqXc zG~{*UZ#^IBlL&Cfk#BYws&J4Ro8q9@ZmTP;(;%}1QpQrMF&tZ;RAISeA6JgDtgzX^$oq`0>-K@F* zE;uwOLPO+nHe~|-{@D9xTcyqx{S2w<244xT^*IePcH6ULe{|RLwcM3}>%x2q?o&06 zWEb6QC7HdCla{=1<8Q@M^SdZ%_j>i-6IAb7ca)O82RfXLJYvTHFtElyD5)no?5jaV zRzF;(<&2DQDPC6e_`;|-*LOs_3wkO+i(xoz{G=GnWr+D8G|fxpz)@P!oZN&YxJ2qe zlR7A8Q}uZkhK5HJ5mNhDExkE|O3L>Tbow=l3S%2sa*dg!GVlm~fG&8I zvPMClkyYOL-`LYdvKgqy>C^@HTf#H~CAHeD4Z33YLOIfGW2j{J;!y;yviFL~`tH#S zQo9|Uj{u7g2IFO-#H<#T>)Yp~On90FzmH16a3d&Un7&bacVM#iJl-HMB3lwl6mbAa zoGDV^;VlJN+!l}#5DbizYS(?ewg`SS9`=klfcWpCiyEU<<`OKt^iIE>#+8Xl>f z!P85zSGo6j&z+gM2=)0*w|yqV2f8r;31owB)(P#nC1$yVa;deNd5^JyDJyKG&KIH9 zU$sj+N?O-HBqW`8M%9&v4EPosi#K7#xf98v`le@U$0^L*Rp(iKW`aTjxVFqRH5!av znPR%7{llhp*Dsb<9u=+>`I}1%Z=T-+2GevQ{ZA5D$cBH(j{!{k z@fMzQsjrm;_FxcAE$3QoUM1?@l{Po*xI$=GhgB6`g9;(`MN4k5dIN%I271tt$bfwq z7#f^Ygt*q>1@ACK$?h|Px(31=0yYZ+XO7OGAzyohfHII2 z4`mn0)Nc*Ww@VM7L$nYbNOvCSIUY-mRIrF?67osGMpp8-Ens5<)tZx#j!&1P7#?yx zmbc&X5>*nX+_|C=SM7rIq#;+pG=JziZYB)Qu8GNgyH~BfoV6VWaOT+M82#j+`>d8*{1Yz%^B zM0%>KSZV_5V684im1xmLc5Er2ZIm@u$qLmJ{qd1f>7OqiAZV3S_HmZ#D|;VUkKIbk zbG-q0BKtXm7yHi)F56>?Q{D$2XX-fJ05+axog0mMbCF#1buE~NjXYZDd?E?zu_7Xy z5a;-l5w`WYyi00x%%&hA#{D{79CJt1-lI8kMQw}cv#IX6g5u2vrSoe~%EiLDw!_BU zp)XN@d4ec)P&N+L)_-yT)c5nZuKU@~*`A1yeQmf}?<$e=<-u_(gwq@FNm!#5$trff zEgU+Kuc1^^(U@3%`~)ZMQ^0l129XJNLChx-jI2_ZXN*J%V4unBSZuHO3b#UHsVddT z3aMk~E}xP&Qe^oBcO?BO^QVGPYCzE_kf z`6^9*R`$tNvdDg9a9FG$^{>}z4|N)~iI?JETK{Iu_0{e|k9nJ4vJ zPCh;Q>%-uHmj970nWPIs>?gi^xz^WSyzRlW=qr-jDGQ2wn`Q2FV1G&;zO>}R^`hcw ze4+PTw!CYl{FEjMwC{V#Oc BSO5S3 literal 0 HcmV?d00001 diff --git a/shop/full12_400.png b/shop/full12_400.png new file mode 100644 index 0000000000000000000000000000000000000000..753aeabc2152be45d2b57a578bccb3908b69c740 GIT binary patch literal 13490 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 F|33g!7Ek~H literal 0 HcmV?d00001 diff --git a/src/com/fr/solution/plugin/better/sql/editor/BetterConstants.java b/src/com/fr/solution/plugin/better/sql/editor/BetterConstants.java new file mode 100644 index 0000000..b470bea --- /dev/null +++ b/src/com/fr/solution/plugin/better/sql/editor/BetterConstants.java @@ -0,0 +1,9 @@ +package com.fr.solution.plugin.better.sql.editor; + +/** + * Created by richie on 16/3/25. + */ +public class BetterConstants { + + public static final String PLUGIN_ID = "com.fr.solution.plugin.better.sql.editor"; +} diff --git a/src/com/fr/solution/plugin/better/sql/editor/BetterDBTableDataImpl.java b/src/com/fr/solution/plugin/better/sql/editor/BetterDBTableDataImpl.java new file mode 100644 index 0000000..d1d4103 --- /dev/null +++ b/src/com/fr/solution/plugin/better/sql/editor/BetterDBTableDataImpl.java @@ -0,0 +1,46 @@ +package com.fr.solution.plugin.better.sql.editor; + +import com.fr.base.TableData; +import com.fr.data.impl.DBTableData; +import com.fr.design.data.tabledata.tabledatapane.AbstractTableDataPane; +import com.fr.design.fun.ServerTableDataDefineProvider; +import com.fr.design.fun.impl.AbstractTableDataDefineProvider; +import com.fr.general.Inter; + +/** + * @author richie + * @date 2015-06-04 + * @since 8.0 + */ +public class BetterDBTableDataImpl extends AbstractTableDataDefineProvider implements ServerTableDataDefineProvider { + + @Override + public Class classForTableData() { + return DBTableData.class; + } + + @Override + public Class classForInitTableData() { + return DBTableData.class; + } + + @Override + public Class appearanceForTableData() { + return BetterDBTableDataPane.class; + } + + @Override + public String nameForTableData() { + return Inter.getLocText("DS-Database_Query"); + } + + @Override + public String prefixForTableData() { + return "ds"; + } + + @Override + public String iconPathForTableData() { + return "/com/fr/design/images/data/database.png"; + } +} \ No newline at end of file diff --git a/src/com/fr/solution/plugin/better/sql/editor/BetterDBTableDataPane.java b/src/com/fr/solution/plugin/better/sql/editor/BetterDBTableDataPane.java new file mode 100644 index 0000000..bfbea6a --- /dev/null +++ b/src/com/fr/solution/plugin/better/sql/editor/BetterDBTableDataPane.java @@ -0,0 +1,379 @@ +package com.fr.solution.plugin.better.sql.editor; + +import com.fr.base.BaseUtils; +import com.fr.base.FRContext; +import com.fr.base.Parameter; +import com.fr.base.ParameterHelper; +import com.fr.data.core.db.TableProcedure; +import com.fr.data.impl.DBTableData; +import com.fr.data.impl.NameDatabaseConnection; +import com.fr.design.actions.UpdateAction; +import com.fr.design.border.UIRoundedBorder; +import com.fr.design.constants.UIConstants; +import com.fr.design.data.datapane.connect.ConnectionTableProcedurePane; +import com.fr.design.data.datapane.preview.PreviewTablePane; +import com.fr.design.data.datapane.sqlpane.SQLEditPane; +import com.fr.design.data.tabledata.tabledatapane.AbstractTableDataPane; +import com.fr.design.data.tabledata.tabledatapane.MaxMemRowCountPanel; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.BasicPane; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itableeditorpane.ParameterTableModel; +import com.fr.design.gui.itableeditorpane.UITableEditAction; +import com.fr.design.gui.itableeditorpane.UITableEditorPane; +import com.fr.design.gui.itoolbar.UIToolbar; +import com.fr.design.gui.syntax.ui.rsyntaxtextarea.SyntaxConstants; +import com.fr.design.gui.syntax.ui.rtextarea.RTextScrollPane; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.menu.SeparatorDef; +import com.fr.design.menu.ToolBarDef; +import com.fr.general.ComparatorUtils; +import com.fr.general.Inter; +import com.fr.script.Calculator; +import com.fr.stable.ArrayUtils; +import com.fr.stable.ParameterProvider; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.util.ArrayList; + +/** + * @author richie + * @date 2015-06-04 + * @since 8.0 + */ +public class BetterDBTableDataPane extends AbstractTableDataPane { + private static final String PREVIEW_BUTTON = Inter.getLocText("Preview"); + private static final String REFRESH_BUTTON = Inter.getLocText("Refresh"); + private ConnectionTableProcedurePane connectionTableProcedurePane; + private UITableEditorPane editorPane; + + private SQLEditPane sqlTextPane; + private RTextScrollPane sqlTextScrollPane; + private UICheckBox isShareCheckBox; + private MaxMemRowCountPanel maxPanel; + private String pageQuery = null; + + + public BetterDBTableDataPane() { + this.setLayout(new BorderLayout(4, 4)); + + Box box = new Box(BoxLayout.Y_AXIS); + + sqlTextPane = new SQLEditPane(); + sqlTextPane.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_SQL); + JPanel northPane = new JPanel(new BorderLayout(4, 4)); + JToolBar editToolBar = createToolBar(); + northPane.add(editToolBar, BorderLayout.CENTER); + northPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 6, 0)); + + sqlTextScrollPane = new RTextScrollPane(sqlTextPane); + sqlTextScrollPane.setLineNumbersEnabled(true); + sqlTextScrollPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC)); + sqlTextScrollPane.setPreferredSize(new Dimension(680, 600)); + + JPanel paraMeanPane = new JPanel(new BorderLayout()); + paraMeanPane.setPreferredSize(new Dimension(680, 90)); + UILabel paraMean = new UILabel(Inter.getLocText("Datasource-Param_DES")); + paraMeanPane.add(paraMean, BorderLayout.CENTER); + + ParameterTableModel model = new ParameterTableModel() { + @Override + public UITableEditAction[] createAction() { + return (UITableEditAction[]) ArrayUtils.add(super.createDBTableAction(), new RefreshAction()); + } + }; + editorPane = new UITableEditorPane(model); + + box.add(northPane); + box.add(sqlTextScrollPane); + box.add(paraMeanPane); + box.add(editorPane); + + JPanel sqlSplitPane = new JPanel(new BorderLayout(4, 4)); + sqlSplitPane.add(box, BorderLayout.CENTER); + + // 左边的Panel,上面是选择DatabaseConnection的ComboBox,下面DatabaseConnection对应的Table + connectionTableProcedurePane = new ConnectionTableProcedurePane(); + connectionTableProcedurePane.addDoubleClickListener(new ConnectionTableProcedurePane.DoubleClickSelectedNodeOnTreeListener() { + + @Override + public void actionPerformed(TableProcedure target) { + Document document = sqlTextPane.getDocument(); + try { + document.insertString(sqlTextPane.getCaretPosition(), target.toString(), null); + } catch (BadLocationException e) { + FRContext.getLogger().error(e.getMessage(), e); + } + // 这里开始作色,本来可以给sqlTextPane添加DocumentListener来实现的, + // 后来发现insertString的时候,锁定了JTextPane,不能调用setXXX来作色,先这样了. +// sqlTextPane.syntaxTexts(); + sqlTextPane.requestFocus(); + } + }); + sqlTextPane.addFocusListener(new FocusListener() { + public void focusGained(FocusEvent e) { + + } + + public void focusLost(FocusEvent e) { + if (isPreviewOrRefreshButton(e)) { + checkParameter(); + } + } + }); + + this.add(connectionTableProcedurePane, BorderLayout.WEST); + this.add(sqlSplitPane, BorderLayout.CENTER); + } + + private boolean isPreviewOrRefreshButton (FocusEvent e) { + if (e.getOppositeComponent() != null) { + String name = e.getOppositeComponent().getName(); + return ComparatorUtils.equals(name, PREVIEW_BUTTON) || ComparatorUtils.equals(name, REFRESH_BUTTON); + } + return false; + } + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("DS-Database_Query"); + } + + private void refresh() { + String[] paramTexts = new String[2]; + paramTexts[0] = sqlTextPane.getText(); + paramTexts[1] = pageQuery; + + java.util.List existParameterList = editorPane.update(); + Parameter[] ps = existParameterList == null ? new Parameter[0] : existParameterList.toArray(new Parameter[existParameterList.size()]); + + editorPane.populate(ParameterHelper.analyzeAndUnionSameParameters(paramTexts, ps)); + } + + private JToolBar createToolBar() { + // p:工具栏. + ToolBarDef toolBarDef = new ToolBarDef(); + toolBarDef.addShortCut(new PreviewAction()); + toolBarDef.addShortCut(SeparatorDef.DEFAULT); + toolBarDef.addShortCut(new EditPageQueryAction()); + toolBarDef.addShortCut(SeparatorDef.DEFAULT); + toolBarDef.addShortCut(new FullScreenAction()); + + isShareCheckBox = new UICheckBox(Inter.getLocText("Is_Share_DBTableData")); + maxPanel = new MaxMemRowCountPanel(); + maxPanel.setBorder(null); + UIToolbar editToolBar = ToolBarDef.createJToolBar(); + toolBarDef.updateToolBar(editToolBar); + editToolBar.add(isShareCheckBox); + editToolBar.add(maxPanel); + + return editToolBar; + } + + private void checkParameter() { + String[] paramTexts = new String[2]; + paramTexts[0] = sqlTextPane.getText(); + paramTexts[1] = pageQuery; + + Parameter[] parameters = ParameterHelper.analyze4Parameters(paramTexts, false); + + if (parameters.length < 1 && editorPane.update().size() < 1) { + return; + } + boolean isIn = true; + java.util.List list = editorPane.update(); + java.util.List name = new ArrayList(); + for (int i = 0; i < list.size(); i++) { + name.add(list.get(i).getName()); + } + for (int i = 0; i < parameters.length; i++) { + if (!name.contains(parameters[i].getName())) { + isIn = false; + break; + } + } + if (list.size() == parameters.length && isIn) { + return; + } + // bug:34175 删了是否刷新对话框, 均直接刷新 + refresh(); + } + + @Override + public void populateBean(DBTableData dbtabledata) { + ParameterProvider[] parameters = null; + + Calculator c = Calculator.createCalculator(); + + parameters = dbtabledata.getParameters(c); + editorPane.populate(parameters); + + com.fr.data.impl.Connection db = null; + String query = null; + boolean isShare = false; + int maxMemeryRow = -1; + + db = dbtabledata.getDatabase(); + query = dbtabledata.getQuery(); + isShare = dbtabledata.isShare(); + maxMemeryRow = dbtabledata.getMaxMemRowCount(); + this.pageQuery = dbtabledata.getPageQuerySql(); + + this.connectionTableProcedurePane.setSelectedDatabaseConnection(db); + this.sqlTextPane.setText(query); + this.sqlTextPane.requestFocus(); + this.sqlTextPane.moveCaretPosition(this.sqlTextPane.getCaretPosition()); + + isShareCheckBox.setSelected(isShare); + maxPanel.setValue(maxMemeryRow); + } + + @Override + public DBTableData updateBean() { + String dbName = this.connectionTableProcedurePane.getSelectedDatabaseConnnectonName(); + if (StringUtils.isBlank(dbName) || StringUtils.isBlank(this.sqlTextPane.getText())) { + try { + throw new Exception(Inter.getLocText("Connect_SQL_Cannot_Null") + "."); + } catch (Exception e) { + // JOptionPane.showMessageDialog(DBTableDataPane.this, + // Inter.getLocText("Connect_SQL_Cannot_Null") + "."); + } + } + + java.util.List parameterList = editorPane.update(); + Parameter[] parameters = parameterList.toArray(new Parameter[parameterList.size()]); + + DBTableData dbTableData = new DBTableData(); + dbTableData.setDatabase(new NameDatabaseConnection(dbName)); + + // p:必须先设置Parameters数组,因为setQuery里面会自动设置的 + + dbTableData.setParameters(parameters); + dbTableData.setQuery(this.sqlTextPane.getText()); + + dbTableData.setShare(isShareCheckBox.isSelected()); + dbTableData.setMaxMemRowCount(maxPanel.getValue()); + dbTableData.setPageQuerySql(this.pageQuery); + + return dbTableData; + } + + protected class RefreshAction extends UITableEditAction { + public RefreshAction() { + this.setName(REFRESH_BUTTON); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/refresh.png")); + } + + public void actionPerformed(ActionEvent e) { + refresh(); + } + + @Override + public void checkEnabled() { + } + } + + private class FullScreenAction extends UpdateAction { + public FullScreenAction() { + this.setName(Inter.getLocText("Plugin-Better_SQL_Editor")); + this.setMnemonic('P'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/solution/plugin/better/sql/editor/images/full.png")); + } + + public void actionPerformed(ActionEvent evt) { + final FullScreenSQLPane fullScreenSQLPane = new FullScreenSQLPane(sqlTextPane.getText()); + FullScreenSQLEditorDialog dialog = new FullScreenSQLEditorDialog(DesignerContext.getDesignerFrame(), fullScreenSQLPane); + dialog.setSize(Toolkit.getDefaultToolkit().getScreenSize()); + dialog.addDialogActionListener(new DialogActionAdapter() { + @Override + public void doOk() { + sqlTextPane.setText(fullScreenSQLPane.getText()); + } + + @Override + public void doCancel() { + + } + }); + dialog.setVisible(true); + } + } + + private class PreviewAction extends UpdateAction { + public PreviewAction() { + this.setName(PREVIEW_BUTTON); + this.setMnemonic('P'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/preview.png")); + } + + public void actionPerformed(ActionEvent evt) { + checkParameter(); + PreviewTablePane.previewTableData(BetterDBTableDataPane.this.updateBean()); + } + } + + private class EditPageQueryAction extends UpdateAction { + public EditPageQueryAction() { + this.setName(Inter.getLocText("LayerPageReport_PageQuery")); + this.setMnemonic('L'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/text.png")); + } + + public void actionPerformed(ActionEvent e) { + final PageQueryPane pane = new PageQueryPane(); + pane.populate(pageQuery); + BasicDialog dialog = pane.showWindow(DesignerContext.getDesignerFrame()); + dialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + pageQuery = pane.update(); + checkParameter(); + } + }); + dialog.setVisible(true); + } + } + + private class PageQueryPane extends BasicPane { + private SQLEditPane pageQueryPane; + + public PageQueryPane() { + this.initComponents(); + } + + public void initComponents() { + this.setLayout(new BorderLayout()); + pageQueryPane = new SQLEditPane(); + this.add(new JScrollPane(pageQueryPane)); + } + + public void populate(String text) { + if (StringUtils.isBlank(text)) { + return; + } + pageQueryPane.setText(text); + } + + public String update() { + String text = pageQueryPane.getText(); + if (StringUtils.isBlank(text)) { + return null; + } else { + return text; + } + } + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("LayerPageReport_Define_PageQuerySQL"); + } + } +} \ No newline at end of file diff --git a/src/com/fr/solution/plugin/better/sql/editor/FullScreenSQLEditorDialog.java b/src/com/fr/solution/plugin/better/sql/editor/FullScreenSQLEditorDialog.java new file mode 100644 index 0000000..9e9dbdf --- /dev/null +++ b/src/com/fr/solution/plugin/better/sql/editor/FullScreenSQLEditorDialog.java @@ -0,0 +1,27 @@ +package com.fr.solution.plugin.better.sql.editor; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.dialog.UIDialog; + +import java.awt.*; + +/** + * @author richie + * @date 2015-06-04 + * @since 8.0 + */ +public class FullScreenSQLEditorDialog extends UIDialog { + + public FullScreenSQLEditorDialog(Frame parent, BasicPane pane) { + super(parent, pane); + } + + public FullScreenSQLEditorDialog(Dialog parent, BasicPane pane) { + super(parent, pane); + } + + @Override + public void checkValid() throws Exception { + + } +} \ No newline at end of file diff --git a/src/com/fr/solution/plugin/better/sql/editor/FullScreenSQLPane.java b/src/com/fr/solution/plugin/better/sql/editor/FullScreenSQLPane.java new file mode 100644 index 0000000..9ca7e28 --- /dev/null +++ b/src/com/fr/solution/plugin/better/sql/editor/FullScreenSQLPane.java @@ -0,0 +1,61 @@ +package com.fr.solution.plugin.better.sql.editor; + +import com.fr.design.data.datapane.sqlpane.SQLEditPane; +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.syntax.ui.rtextarea.RTextScrollPane; +import com.fr.general.Inter; +import com.fr.plugin.ExtraClassManager; +import com.fr.stable.fun.FunctionHelper; +import com.fr.stable.fun.FunctionProcessor; +import com.fr.stable.fun.impl.AbstractFunctionProcessor; + +import java.awt.*; + +/** + * @author richie + * @date 2015-06-04 + * @since 8.0 + */ +public class FullScreenSQLPane extends BasicPane { + + private static final FunctionProcessor SQL = new AbstractFunctionProcessor() { + @Override + public int getId() { + return FunctionHelper.generateFunctionID(BetterConstants.PLUGIN_ID); + } + + public String getLocaleKey() { + return Inter.getLocText("Plugin-Better_SQL_Editor"); + } + + @Override + public String toString() { + return Inter.getLocText("Plugin-Better_SQL_Editor"); + } + }; + + private SQLEditPane sqlTextPane; + + public FullScreenSQLPane(String text) { + FunctionProcessor processor = ExtraClassManager.getInstance().getFunctionProcessor(); + if (processor != null) { + processor.recordFunction(SQL); + } + setLayout(new BorderLayout()); + sqlTextPane = new SQLEditPane(); + sqlTextPane.setText(text); + RTextScrollPane sqlTextScrollPane = new RTextScrollPane(sqlTextPane); + sqlTextScrollPane.setLineNumbersEnabled(true); + + add(sqlTextScrollPane, BorderLayout.CENTER); + } + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("Plugin-Better_SQL_Editor"); + } + + public String getText() { + return sqlTextPane.getText(); + } +} \ No newline at end of file diff --git a/src/com/fr/solution/plugin/better/sql/editor/images/full.png b/src/com/fr/solution/plugin/better/sql/editor/images/full.png new file mode 100644 index 0000000000000000000000000000000000000000..645d597cdb4e37ffdcf4826f348ec1670ee78e63 GIT binary patch literal 972 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pn}txArU1JzCKpT`MG+DDfvmMdKI|^K-CNkHWgMtW^QUpqC!P(PF}H9 zg{=};g%ywu64qBz04piUwpEJo4N!2-FG^J~)icpEP_pAvP*AWbN=dT{a&d!d2l8x{ zGD=Dctn~HE%ggo3jrH=2()A53EiLs8jP#9+bb%^#i!1X=5-W7`ij^UTz|3(;Elw`V zEGWs$&r<-Io0ybeT4JlD1hNPYpzh2qfLoMT4D}VzfBF@P1^R}12Kv}Em1L$NoQI+d zBm>a~_7%i38(`2_ITxiSmgEez|n+*?F@#y9r zRlDvob^c|2myI49&#AstnY8|%K#|Vme@-=#wFe(^zZ9^PSIy*CiC6N_b~Nbxa$d)J znsTY#3*H55S2Zj?{&ZoVnVP~hyEoI#+y$phe5x4xKz4PPXp7bgJr?{v&h{ZjT~_HJw4>?}OjMpX4hr(u(d^!GK3 zf1QYXy5#@mT(t)*->Ta`%}eZg%5lTEr|=iQi<0WeTqEuHiKmp46<7EOy=?VKyX4lh zaRN*5s#ie~6D%%Xir8cyce}z;@05j(HPf eMWlOkUC)o-_42~IRRvz4EavIz=d#Wzp$Py;Yh;oD literal 0 HcmV?d00001 diff --git a/src/com/fr/solution/plugin/better/sql/editor/locale/BetterLocaleFinder.java b/src/com/fr/solution/plugin/better/sql/editor/locale/BetterLocaleFinder.java new file mode 100644 index 0000000..f1bb94f --- /dev/null +++ b/src/com/fr/solution/plugin/better/sql/editor/locale/BetterLocaleFinder.java @@ -0,0 +1,13 @@ +package com.fr.solution.plugin.better.sql.editor.locale; + +import com.fr.stable.fun.impl.AbstractLocaleFinder; + +/** + * Created by richie on 16/3/25. + */ +public class BetterLocaleFinder extends AbstractLocaleFinder { + @Override + public String find() { + return "com/fr/solution/plugin/better/sql/editor/locale/better"; + } +} diff --git a/src/com/fr/solution/plugin/better/sql/editor/locale/better.properties b/src/com/fr/solution/plugin/better/sql/editor/locale/better.properties new file mode 100644 index 0000000..4203848 --- /dev/null +++ b/src/com/fr/solution/plugin/better/sql/editor/locale/better.properties @@ -0,0 +1 @@ +Plugin-Better_SQL_Editor=Better SQL Editor \ No newline at end of file diff --git a/src/com/fr/solution/plugin/better/sql/editor/locale/better_en_US.properties b/src/com/fr/solution/plugin/better/sql/editor/locale/better_en_US.properties new file mode 100644 index 0000000..4203848 --- /dev/null +++ b/src/com/fr/solution/plugin/better/sql/editor/locale/better_en_US.properties @@ -0,0 +1 @@ +Plugin-Better_SQL_Editor=Better SQL Editor \ No newline at end of file diff --git a/src/com/fr/solution/plugin/better/sql/editor/locale/better_ja_JP.properties b/src/com/fr/solution/plugin/better/sql/editor/locale/better_ja_JP.properties new file mode 100644 index 0000000..3a04096 --- /dev/null +++ b/src/com/fr/solution/plugin/better/sql/editor/locale/better_ja_JP.properties @@ -0,0 +1 @@ +Plugin-Better_SQL_Editor=SQL\u30A8\u30C7\u30A3\u30BF\u30FC \ No newline at end of file diff --git a/src/com/fr/solution/plugin/better/sql/editor/locale/better_zh_CN.properties b/src/com/fr/solution/plugin/better/sql/editor/locale/better_zh_CN.properties new file mode 100644 index 0000000..6cdaa83 --- /dev/null +++ b/src/com/fr/solution/plugin/better/sql/editor/locale/better_zh_CN.properties @@ -0,0 +1 @@ +Plugin-Better_SQL_Editor=SQL\u7F16\u8F91\u5668 \ No newline at end of file