From d67ccc9c4a8ab6e986138759e0c2524e4bf317aa Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Wed, 5 Aug 2009 13:34:08 +0000 Subject: [PATCH] added upload feature for sampler svn changeset:8444/svn branch:6.0 --- src/com/vaadin/demo/sampler/FeatureSet.java | 17 ++ .../features/upload/75-UploadBasic.png | Bin 0 -> 12597 bytes .../75-UploadWithProgressMonitoring.png | Bin 0 -> 10533 bytes .../sampler/features/upload/UploadBasic.java | 43 ++++ .../features/upload/UploadBasicExample.java | 74 +++++++ .../upload/UploadWithProgressMonitoring.java | 47 +++++ .../UploadWithProgressMonitoringExample.java | 194 ++++++++++++++++++ 7 files changed, 375 insertions(+) create mode 100644 src/com/vaadin/demo/sampler/features/upload/75-UploadBasic.png create mode 100644 src/com/vaadin/demo/sampler/features/upload/75-UploadWithProgressMonitoring.png create mode 100644 src/com/vaadin/demo/sampler/features/upload/UploadBasic.java create mode 100644 src/com/vaadin/demo/sampler/features/upload/UploadBasicExample.java create mode 100644 src/com/vaadin/demo/sampler/features/upload/UploadWithProgressMonitoring.java create mode 100644 src/com/vaadin/demo/sampler/features/upload/UploadWithProgressMonitoringExample.java diff --git a/src/com/vaadin/demo/sampler/FeatureSet.java b/src/com/vaadin/demo/sampler/FeatureSet.java index dad0a408bc..a20bbaba92 100644 --- a/src/com/vaadin/demo/sampler/FeatureSet.java +++ b/src/com/vaadin/demo/sampler/FeatureSet.java @@ -78,6 +78,8 @@ import com.vaadin.demo.sampler.features.trees.TreeActions; import com.vaadin.demo.sampler.features.trees.TreeMouseEvents; import com.vaadin.demo.sampler.features.trees.TreeMultiSelect; import com.vaadin.demo.sampler.features.trees.TreeSingleSelect; +import com.vaadin.demo.sampler.features.upload.UploadBasic; +import com.vaadin.demo.sampler.features.upload.UploadWithProgressMonitoring; import com.vaadin.demo.sampler.features.windows.NativeWindow; import com.vaadin.demo.sampler.features.windows.Subwindow; import com.vaadin.demo.sampler.features.windows.SubwindowAutoSized; @@ -139,6 +141,7 @@ public class FeatureSet extends Feature { new TextFields(), // new Trees(), // new Windows(), // + new Uploads(), // }); } } @@ -304,6 +307,20 @@ public class FeatureSet extends Feature { } } + public static class Uploads extends FeatureSet { + public Uploads() { + super( + "Uploads", + "Uploads", + "Upload is a component providing a method for clients to send files to server.", + new Feature[] { + // + new UploadBasic(), // + new UploadWithProgressMonitoring(), // + }); + } + } + public static class Windows extends FeatureSet { public Windows() { super( diff --git a/src/com/vaadin/demo/sampler/features/upload/75-UploadBasic.png b/src/com/vaadin/demo/sampler/features/upload/75-UploadBasic.png new file mode 100644 index 0000000000000000000000000000000000000000..d0e28771ced3c4e29447b81230ac6d4fe90ce949 GIT binary patch literal 12597 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 X+EEX`A&)o;00000NkvXXu0mjfOP^rU literal 0 HcmV?d00001 diff --git a/src/com/vaadin/demo/sampler/features/upload/75-UploadWithProgressMonitoring.png b/src/com/vaadin/demo/sampler/features/upload/75-UploadWithProgressMonitoring.png new file mode 100644 index 0000000000000000000000000000000000000000..a1c4444d4264f2ca8ca88051e1840437ed6f2f1b GIT binary patch literal 10533 zcmV+=DcaVFP)002t}1^@s6I8J)%000U@X+uL$Nkc;* zaB^>EX>4Tx0C?J+Q+HUC_ZB|i_hk=OLfG)Jmu!ImA|tE_$Pihg5Rw34gb)%y#f69p zRumNxoJdu~g4GI0orvO~D7a@qiilc^Ra`jkAKa(4eR}Wh?fcjJyyu+f{LXpL4}cL8 zCXwc%Y5+M>g*-agACFH+#L2yY0u@N$1RxOR%fe>`#Q*^C19^CUbg)1C0k3ZW0swH; zE+i7i;s1lWP$pLZAdvvzA`<5d0gzGv$SzdK6adH=0I*ZDWC{S3003-xd_p1ssto|_ z^hrJi0NAOM+!p}Yq8zCR0F40vnJ7mj0zkU}U{!%qECRs70HCZuA}$2Lt^t5qwlYTo zfV~9(c8*w(4?ti5fSE!p%m5%b0suoE6U_r4Oaq`W(!b!TUvP!ENC5!A%azTSOVTqG zxRuZvck=My;vwR~Y_URN7by^C3FIQ2mzyIKNaq7g&I|wm8u`(|{y0C7=jP<$=4R(? z@ASo@{%i1WB0eGU-~POe0t5gMPS5Y!U*+Z218~Oyuywy{sapWrRsd+<`CT*H37}dE z(0cicc{uz)9-g64$UGe!3JVMEC1RnyFyo6p|1;rl;ER6t{6HT5+j{T-ahgDxt-zy$ z{c&M#cCJ#6=gR~_F>d$gBmT#QfBlXr(c(0*Tr3re@mPttP$EsodAU-NL?OwQ;u7h9 zGVvdl{RxwI4FIf$Pry#L2er#=z<%xl0*ek<(slqqe)BDi8VivC5N9+pdG`PSlfU_o zKq~;2Moa!tiTSO!5zH77Xo1hL_iEAz&sE_ z2IPPo3ZWR5K^auQI@koYumc*P5t`u;w81er4d>tzT!HIw7Y1M$p28Tsh6w~g$Osc* zAv%Z=Vvg7%&IlKojszlMNHmgwq#)^t6j36@$a16tsX}UzT}UJHEpik&ja)$bklV;0 zGK&0)yhkyVfwEBp)B<%txu_o+ipHRG(R4HqU4WLNYtb6C9zB4zqNmYI=yh}eeTt4_ zfYC7yW{lZkT#ScBV2M~7CdU?I?5=ix(HVZgM=}{CnA%mPqZa^68Xe5gFH?u96Et<2 zCC!@_L(8Nsqt(!wX=iEoXfNq>x(VHb9z~bXm(pwK2kGbOgYq4YG!XMxcgB zqf}$J#u<$v7REAV@mNCEa#jQDENhreVq3EL>`ZnA`x|yIdrVV9bE;;nW|3x{=5fsd z4#u(I@HyF>O3oq94bFQl11&!-vDRv>X03j$H`;pIzS?5#a_tuF>)P*iaGgM%ES>c_ zZ94aL3A#4AQM!e?+jYlFJ5+DSzi0S9#6BJCZ5(XZOGfi zTj0IRdtf>~J!SgN=>tB-J_4V5pNGDtz9Qc}z9W9tewls;{GR(e`pf-~_`l(K@)q$< z1z-We0p$U`ff|9c18V~x1epY-2Q>wa1-k|>3_cY?3<(WcA99m#z!&lx`C~KOXDpi0 z70L*m6G6C?@k ziR8rC#65}Qa{}jVnlqf_npBo_W3J`gqPZ95>CVfZcRX1&S&)1jiOPpx423?lIEROmG(H@JAFg?XogQlb;dIZPf{y+kr|S? zBlAsGMAqJ{&)IR=Ejg5&l$@hd4QZCNE7vf$D7Q~$D=U)?Nn}(WA6du22pZOfRS_cv~1-c(_QtNLti0-)8>m`6CO07JR*suu!$(^sg%jf zZm#rNxnmV!m1I@#YM0epR(~oNm0zrItf;Q|utvD%;#W>z)qM4NZQ9!2O1H}G>qzUQ z>u#*~S--DJy=p<#(1!30tsC);y-IHSJr>wyfLop*ExT zdYyk=%U1oZtGB+{Cfe4&-FJKQ4uc&PJKpb5^_C@dOYIJXG+^@gCvI%WcHjN%gI&kHifN$EH?V5MBa9S!3!a?Q1 zC*P)gd*e{(q0YnH!_D8Bf4B7r>qvPk(mKC&tSzH$pgp0z@92!9ogH2sN4~fJe(y2k zV|B+hk5`_cohUu=`Q(C=R&z?UQbnZ;IU-!xL z-sg{9@Vs#JBKKn3CAUkhJ+3`ResKNaNUvLO>t*-L?N>ambo5Q@JJIjcfBI^`)pOVQ z*DhV3dA;w(>>IakCfyvkCA#(acJ}QTcM9%I++BK)c(44v+WqPW`VZ=VwEnSWz-{38 zV8CF{!&wjS4he^z{*?dIhvCvk%tzHDMk9@nogW_?4H~`jWX_Y}r?RIL&&qyQ|9R_k ztLNYS;`>X_Sp3-V3;B!Bzpi)3Dea$P|M3+xxG4;gi<2pyBH>zj+;j5E7Ck5J*VW zu>a?8*m(R7ah;->_s-i0Q$s6aTlH_|EZYk9KGt5j8b{gV1bg>N9Ab~_l{nL~Zmj`y zdO<)73D?GPNtmiubK~#BbR04cjYd+G1k3(hmDpA3UTLP)2&MLcYJ_yuMy;)7J4uqr zxS7G{->xFU#hr<-y-CM50k}z0BlFzNtw3rwz(gn^5Oz4&d})+e-CQO~lGUFrwUtEA zmZ-MvZ2PvoSF2-hOqS(BnC@$JWh`IuHLp&8ly}~n!H%^nnZNcQ>HtZCy!~Vk+yW4VKnj^aw<>%#JA-y@XiZ;d4K6wBo7~m(B-3bX~n7>gsA_S;oi5$7w(8|HozfapeZMws#|6f4Y>2E)NpfK8#8a zJ-c@$@${Pucz0~Ps*mREJ6)9;+sdjWNmNx;A%svQl)ag0rl2K2m<*4ihpeKP6cxV7 z^pUt~A;&}eGwZciNYAQe!gE6@PD^EgTM3m#myn4^2$9uA*)csFxR_gMZX{$` z2s=#_`!bj1X5JPv{xwTnNxm#onsi?NWV-`qGERt=-qA>X|e(wHw$Ms;v z`s0j@Z%x_WFZuZQYmE8N7Yysr8rvb7xzt(EK&g&KsS|smXDcqv#K%V7%c>1j=pi)J zz!_spBKtl~Z;u=n&Hjc0U4zb2>PMkWk|acJDf5=^z;nP;OdZym1rweiux%%%%~{Bt z+0%G1ssJzV0C4pH6~D={Z>8_Crxu#I4r*3U-B~pQMy9K@q=1F*{SSQG@aV%mxqN9a zS@rGc z(r>2VEi2k1lqxqhaFh^GS5wE;n`I#C`0AVA=sbKRU%b(m1A9)=ZNNm{crY5j$S#x- zNUt_Qc4yia=_t;<%YmdU^pYF#BWLsBW0kzWXfwg1UuH;KBk9MF-V?{zd!OC!vsCa( z%3Mw1Dcx7q8bxklwm5R=j7Yj!D9#=DLCl!_qtF_JsK`7aRBJ6^mz^o> zU8er5m9nlZQ!Jf3Tl{(MmM}Jy?OF4oSiJF6!!M)ixNZNG6uUj+WLZ}dLI^dEQUmHN zuk7n*Sh3{>Z@fB;-@iLW-{AxCt-8$0z3zOz=pp<)U97}ZiF0l5ucxH*+qxaN1$xq@ zR~K>)?jYi^S9!dDJ9hoD0vcZ=>WNf zKNUB&^3me$Or6!8K@O(pY_G4H=&a_2>?oxME0#TzWQ=0Pmk@&i+z1bJ@5}v z_diVCp5@Gc^(FF3YncA{C=kvqS0o8!pwwtlAj~TY$EXK@q}6JLt!J*bMzp>+8$ctU ze*6J_`VS(w?hYFgVb*gAoI6*>q=^qU%$|B6#PYuk?EZNvrGDL+K5--fJ}+#m&Q&TZOvDdI25phvF2p zbzXQ!_68Sshd`s%djN0$NIsf0k})mwSo6u3oVi_WT2VN$UIcJixNzY@^FSRz%(hT# zMrs;gEMLx{lp3BL(UCm|e&g8X0t^P3+5dV5cQ-eOrrWaLJ6T!0GG{JRr%h+rz-}ZR zKFHBq-uQ%harE%t7+Ux;W@vv9rud9K=-I9~NiMjw2qdg+4|=y3{Px{W!h7^0)W_W< zA$DNy#xkKYHEN;>u>8aK={)Sx>gNx}f!*uR#)??y3u z#zT(VT86^xMPr(R08P)T3}BFDZeKpk`HQy*iVmgb;#rQn#Ik(;EId?TWTpNADsxk) zsu8qo7sI;GJ|R1_AG2mWMi4R>s=?Jq6`ocLq1gsat4j;nu=^B`j_A(1m4|rY-GAZh zX5Wf7a+WQz99_3kQu*$;^|)4R7%=^5Qpd9ABH5XSmk7mJ2yUN@YAXczQ zmHhtM|HuhWVD`-Mw6Nff=Kip{r(UG1C&b4csbR)*Z)R|@L`OoT7vVAOsV&dL)vqP4 z8vF4}^I924D}GrPqNch=oV=bVgb?D#rJsoX$4&}Sc1%UxEO-5e1f-*I=HA=yBA2Je2MK{^gr;;R*cH43xoy^++nh;CLl%xhYr-ZV3Qz;Mi+l?GBI!GN zI;aOO4lCDmsT1eDYY5DHg4Lttn0H)pV#-6o@nLg_YTuSl@ zY4-rGUVc_&c6RmNeLw;i_Z?uziGO(im4V1fJ2-Og7G;HZNxgoZo;`aJ5fQG6M_GPg zR$dj7BysTI5t53ueEM=Xj_o^wTf1Sr)V`9)=(ZRmI+75hQRO5{jyiqjEESbHT1K>_ zMT-_ll4Qztu=QK+ChuY1r`xD9)DZ2d=W1Rg?FK(Xn}BjM3Ot!SZ4xe~Li4exCHbuQy>~Va}nkNMNkyM&fyrZx$05Tug1D z4%hZ0S@yvMuAjM1K$pkp)=ERSHmw*te285O+C(TV7cO4JC=22`bRZ%k9A95wyuH0m zu0vx3GcHhH&e^TYS(o06PiFUK^^g0xT3ksR-*R4g?LP$h`!v>8TX>rXkXKxZx4$=j zZZ0McZ1BH}Z(ZW^Wk1rUb7y9~{JK@zk3BTPYBFR4TXyZI+Rc^x8)d|F=)<7aX?(F! z!`yd967E?AE`C;Ehgu{@tJ8Af!ewM36B!kSx3>?Hq(MSZUQuS^EOQ5cty;~&8+qU! zK)xc1yhKF^8FSYDbSbLVzGxcVUwiV$^kj?!`N z+qme3|mZ*pb!o$O9i0+s?J`S+WXIJ9&=8%}1h|704j?g6y&)qrO-V;>!g zpQjr_fUubzTkHtn;F`~wIOBbG7Pg{SpAP)?^KOio-GeMrQ_|?tt|jiSnr1|Iw4mR( zZ6_J$w{m{VpZrtc#gx~EuzksLCXVeybZCpFF{v0DNs`cNwIn7cVlc|IYu}F0&``X+ zz47$)q`t0}Rx#0pg@xHhq-n^xgo5iQIJog=D!sy)_}p8Bg@-naB&$WFGfOJ*3iQJ# zV>gSwTu1+Yo!OP-&aK<&%>VLh`uSFI{`@7n_U=PyXef>%;uU)yy$rKHb_sC)XvV7ir_i5sT?s7e&n)n`Foz6Yg>2#brbB4M)JuM?! z;^X7n_>S6|Dq4nzH*%C!wsNyCSAk{h`aMD*NqQE{oJ4iU;XF4go_}^9;8=YiROtD7 z>3qUmjF=V;_ZFrC(CdxlSL%rgtYp=SgVaYPFtK+bAO2j(l11b3c2!R!x8?$%BD|?&JEwtsFg9!c%X} zoeBuT41|w}_V+jfhq(uu4+}+)&tE*`wlv4EC)e@(=*G&Uv(M!s>OJa_e zCkA$6;;--e@!?ysoUYgqX<4MvhYAc$fDV zE?lT-2%}3*q#-JmrJPvL+jHI}B~Op+8;+M;j@)T5akW>`)_T#pU1yLqb``D~Hnn~2 zuap+uCe|gJ-G8Ss{lx@Qb}y&r;PH$aG2Gz}4s&@~SsA5eWw^Sz^TgjOrWb5JFZePrrGazYZiaWMDgLQjW1Bv5t{F+&F$Ng&W22 z`?{6*IEc8Yh0t?qWOl6n1mE6Mc=rCbY+Jd6%E%E+d!(23!e1r#-jYz!F)?T~8t&%i zQ>oRWktAwrs%c{(dTM!Nt|`f<8PzvVHDTY@07#NVYHAwatXRR5!@Bb0PZxP+<_rea z9wxCOh&Sesp&<1Zp5|0PB!^o^qy~K{0mw3|SN_EL^gIS9M3DT?I({-vBqzHRGa}U3 zhk`*;B2-j#bfcpg5f*}kps1+GN=G@g$R%avA}GM$V#Q`3{%GvbP{p&;W-@v9eEPTZ zh{)?mV`1tlZ`U6ER&a)i@(1=VHQ@;QLMl9mCq~$LZC*MfaX{nXy2_X=&K$a~CW#O4S+SpK0l+TvkdqFLOM6KNX zJV#4@I;)j(#*$pVz3pfZNM3r8MDvM`%H%^KdXS^+rq!kEbZJy8-qziL&!Cuyj z}X6_x*-K zm=@C*DbGzMATnMRi&E+*@$6Z4?>|O`@}MO za}uoz7dGp+@y;NYFIpsyBwi8~>3@qw|Ngf)dAp>kVr_{iyn0+@XQT^SMyAx9My zI7}99dS?24df#7S(whrJW{nU+R0)l}d`=~Yv6<30hrCoW1a1E$AtJdEqjYM-ZW11`!<_helH018L?cORFbjfzfDe;3)qlm_;R%u?Yrh z*ac=Np|4jVYnCkKX0=xn2Hz}H-B5P%W*$ebPOda-)ZVq8A>;Dd#>A1cc-k|c5B;9uJi+PRT_VJ9i4)2Z={rc19*XfADK@BTv!9W{#kdUUdyT{UxVPe&PzM)LA< z2@D9Z>u@$(a7z;P+F}+g`i0Q=&b0LPK+?D&fL5Io@TP6RZ z5AJ{H@kT^e4Mw)&sFD)OD=LUm5WU>IT!Jh(N-ddIX`IKle$PQ|9E+z7=fa+ESh%i$ zwZASRz+GVr-LYeb+4SpLsw2De;_GvWSi6KHf8XK13*N`ay@l$=Nj1?KF}MedKK~Z) zkP!ZuKc1g{+K%Wmr=gvu5f^h5qAw{ap`x;qNDD$WdFIxHa>d3UQ9Zppb!dNP3k_og6BqZrnd=J5URyP5LNdwleGFrRKZNbB*ldFAP0c)PW* zP8Ly^B_%O5qn+(~j^wjBk5Wr0S?*oX8nk%Il}=%0%?K48-8ha$(Yt$>puoUJ;7)05 z_Ebme#baE(nal%`d2HOYk8#5$Fvf6#!9BY%<%uV(ViOvGOPM9)=vy#rL=2lZq!E=c zotIi>k$xwi@NWGZBP9amo$&T{H8jXM0O5T`Gh;|C+n2n`(4nL0)2Xd0re*n2W5l#9zcHIbO@!UbUAR~l^d)XnY4k8LLYQe?NVh||yZ_81(R!@mgj=)RPgbOs1 zhV|>$aVa&8$HqTN(Xn6nr>qkm;x6$WJ27R_WMo-x^a>immYeBU89HtX)xR!d)er96 zH>Mkt9tmvF_ZqwSwmolONvBzrx%gRyD{Kj6*`GS0atICzA|xc_o+eR3LSJ#03+HY! zcW5bqE0Gj7#J}C42 z(NtePk6*hnjfAq7KH$>2|D=TjV~zZ_>L_jR>&ElXPQfz&!QRm)wln7MS;xxHzaXvB zj|ck1qCr@N_?e-R$)f$rutE)==aw?`~4s2})q zFQO+KWotq?vGdewB7nNP7dd{el=8Anyt6NHO%CO~=SR|S@G#YNuKBmi@q@oDH0bnn z=-$Wb3<0&ZRCCJf*|z0R20il*(0^q>&D!h3V=_HE)KV(BxWpF_vm+^43(HI_jS4zvm@Ioii##?AHh zdN%Gp#y6WU@K8b&KkeSgf$Md+g?f?DF+eqKs2OxyQ9*HOsp6veZf*|2!NH0gOl zmq|W#ih%f`JQ82asWUg}I$#__h7ET*R|3FbFmNY3n}EPTe0+Q`8jKhWMsjU9%F*Fs zmI07+w~8stzs%OPC-Dn+=anZ1v1;o%7QHveVxOTvLs2!vP|af+xYwYydo>bPks+#ta&(TCbT6k#>g)AvK5&WfmfnO`WwCGn9R`mJ=SFfW zoxAj>-@u_(`C6(wH&ozigV9KJRTX}Ie)n)}lL?JId_I+WgF7|pf3Qa$$lGJPv+V5! z%=+*XdbaYldyt}|G3oVsWnw8ehF^dGgUYNcWafMFz~l+UOWADvaXm9W`I0s*gH5qV z;T$Jf!a|M?W3>Ab<{ldAZ(X;JoV;7eWi`}AwxX4P5y_Wx>D_+_6Q7*yTzY~+#!!8I zJ^A_h&c_Wa@>9h4XJ(2snI%G0ToZ4;I#>L8JXwg^vZhT#PVRcQjP*E*Ejk<1ypozJ z=Dt5qoW4~qgs2u@Etn@xUd<7fQAvBpsMy9MEz9ca>O@vnmZ+$x5E^@OYdOP5k6mEf zX~9?j9nJdhj!_`R^YMab=^Eq?9sx~>9S+R6Xh`c`{rjJMv2h;;Bvo#*2d^|9tJzTX z=+VFV_4flzObFroJ^MJ5T~A?64f-k_;DxM^Pp@`Bt)=J{6ci8;5P+|*FB;{LSHp>n zbp{G`28Q+vBIE2ij^y;@m5J`GSa}eSu O(or??(i~=n<9oMJQBg*$o0g?(4sbTV z#_3brED3e==u!Uj&U<{e=>WB5DU_5I5I1HvueZ+O(06m`)2BB>`kLYe8k>`poLQCV n^?LI1^6>Zf$Is6XNs{<~5iGl5!6q6X00000NkvXXu0mjf649`D literal 0 HcmV?d00001 diff --git a/src/com/vaadin/demo/sampler/features/upload/UploadBasic.java b/src/com/vaadin/demo/sampler/features/upload/UploadBasic.java new file mode 100644 index 0000000000..4b98557370 --- /dev/null +++ b/src/com/vaadin/demo/sampler/features/upload/UploadBasic.java @@ -0,0 +1,43 @@ +package com.vaadin.demo.sampler.features.upload; + +import com.vaadin.demo.sampler.APIResource; +import com.vaadin.demo.sampler.Feature; +import com.vaadin.demo.sampler.NamedExternalResource; +import com.vaadin.ui.Upload; + +@SuppressWarnings("serial") +public class UploadBasic extends Feature { + + @Override + public String getDescription() { + return "Upload component provides a method to handle " + + "files uploaded from clients. " + + "In this example we simply be " + + "count line breaks of the uploaded file." + + "The data could just as well be saved on " + + "the server as file or inserted into a database."; + } + + @Override + public String getName() { + return "Basic upload"; + } + + @Override + public APIResource[] getRelatedAPI() { + return new APIResource[] { new APIResource(Upload.class) }; + } + + @SuppressWarnings("unchecked") + @Override + public Class[] getRelatedFeatures() { + return new Class[] { UploadWithProgressMonitoring.class }; + } + + @Override + public NamedExternalResource[] getRelatedResources() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/com/vaadin/demo/sampler/features/upload/UploadBasicExample.java b/src/com/vaadin/demo/sampler/features/upload/UploadBasicExample.java new file mode 100644 index 0000000000..1b1623ab1a --- /dev/null +++ b/src/com/vaadin/demo/sampler/features/upload/UploadBasicExample.java @@ -0,0 +1,74 @@ +package com.vaadin.demo.sampler.features.upload; + +import java.io.IOException; +import java.io.OutputStream; + +import com.vaadin.ui.Label; +import com.vaadin.ui.Upload; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.Upload.FinishedEvent; +import com.vaadin.ui.Upload.Receiver; + +@SuppressWarnings("serial") +public class UploadBasicExample extends VerticalLayout { + + private Label result = new Label(); + + private LineBreakCounter counter = new LineBreakCounter(); + + private Upload upload = new Upload("Upload a file", counter); + + public UploadBasicExample() { + addComponent(upload); + addComponent(result); + upload.addListener(new Upload.FinishedListener() { + public void uploadFinished(FinishedEvent event) { + result.setValue("Uploaded file contained " + + counter.getLineBreakCount() + " linebreaks"); + } + }); + + } + + public static class LineBreakCounter implements Receiver { + + private String fileName; + private String mtype; + private int counter; + + /** + * OutputStream that simply counts lineends + */ + private OutputStream stream = new OutputStream() { + private static final int searchedByte = '\n'; + + @Override + public void write(int b) throws IOException { + if (b == searchedByte) { + counter++; + } + } + }; + + public OutputStream receiveUpload(String filename, String MIMEType) { + counter = 0; + fileName = filename; + mtype = MIMEType; + return stream; + } + + public String getFileName() { + return fileName; + } + + public String getMimeType() { + return mtype; + } + + public int getLineBreakCount() { + return counter; + } + + } + +} diff --git a/src/com/vaadin/demo/sampler/features/upload/UploadWithProgressMonitoring.java b/src/com/vaadin/demo/sampler/features/upload/UploadWithProgressMonitoring.java new file mode 100644 index 0000000000..8c9f04f7c6 --- /dev/null +++ b/src/com/vaadin/demo/sampler/features/upload/UploadWithProgressMonitoring.java @@ -0,0 +1,47 @@ +package com.vaadin.demo.sampler.features.upload; + +import com.vaadin.demo.sampler.APIResource; +import com.vaadin.demo.sampler.Feature; +import com.vaadin.demo.sampler.NamedExternalResource; +import com.vaadin.ui.ProgressIndicator; +import com.vaadin.ui.Upload; + +@SuppressWarnings("serial") +public class UploadWithProgressMonitoring extends Feature { + + @Override + public String getDescription() { + return "Upload does not block the entire UI. While uploading a large" + + "file users can navigate to other views in the application." + + " Other advanced upload features used in this demo:
    " + + "
  • start upload once file is selected aka \"one-click-upload\"
  • " + + "
  • process the file during the upload
  • " + + "
  • trac events that occure during the update
  • " + + "
  • visualize upload progress with ProgressIndicator
  • " + + "
  • ability to cancel the upload
  • " + "
"; + } + + @Override + public String getName() { + return "Upload with advanced features"; + } + + @Override + public APIResource[] getRelatedAPI() { + return new APIResource[] { new APIResource(Upload.class), + new APIResource(ProgressIndicator.class) }; + } + + @SuppressWarnings("unchecked") + @Override + public Class[] getRelatedFeatures() { + return new Class[] { UploadBasic.class }; + } + + @Override + public NamedExternalResource[] getRelatedResources() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/com/vaadin/demo/sampler/features/upload/UploadWithProgressMonitoringExample.java b/src/com/vaadin/demo/sampler/features/upload/UploadWithProgressMonitoringExample.java new file mode 100644 index 0000000000..2af9a8432f --- /dev/null +++ b/src/com/vaadin/demo/sampler/features/upload/UploadWithProgressMonitoringExample.java @@ -0,0 +1,194 @@ +package com.vaadin.demo.sampler.features.upload; + +import java.io.IOException; +import java.io.OutputStream; + +import com.vaadin.ui.Button; +import com.vaadin.ui.CheckBox; +import com.vaadin.ui.FormLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.Panel; +import com.vaadin.ui.ProgressIndicator; +import com.vaadin.ui.Upload; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Upload.FailedEvent; +import com.vaadin.ui.Upload.FinishedEvent; +import com.vaadin.ui.Upload.Receiver; +import com.vaadin.ui.Upload.StartedEvent; +import com.vaadin.ui.Upload.SucceededEvent; + +@SuppressWarnings("serial") +public class UploadWithProgressMonitoringExample extends VerticalLayout { + + private Label state = new Label(); + private Label result = new Label(); + private Label fileName = new Label(); + private Label textualProgress = new Label(); + + private ProgressIndicator pi = new ProgressIndicator(); + + private LineBreakCounter counter = new LineBreakCounter(); + + private Upload upload = new Upload("Upload a file", counter); + + public UploadWithProgressMonitoringExample() { + upload.setImmediate(true); // make analyzing start immediatedly when + upload.setButtonCaption("Analyze file"); + // file is selected + addComponent(upload); + + CheckBox handBrake = new CheckBox("Simulate slow server"); + handBrake.setValue(true); + counter.setSlow(true); + handBrake + .setDescription("Sleep for 100ms after each kilobyte to simulate slower processing/bandwidth. This is to show progress indicator even with rather small files."); + handBrake.addListener(new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + counter.setSlow(event.getButton().booleanValue()); + } + }); + + final Button cancelProcessing = new Button("Cancel processing"); + cancelProcessing.addListener(new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + upload.interruptUpload(); + } + }); + cancelProcessing.setEnabled(false); + + addComponent(cancelProcessing); + + handBrake.setImmediate(true); + + addComponent(handBrake); + + Panel p = new Panel("Status"); + FormLayout l = new FormLayout(); + p.setContent(l); + state.setCaption("Current state"); + state.setValue("Idle"); + l.addComponent(state); + fileName.setCaption("File name"); + l.addComponent(fileName); + result.setCaption("Line breaks counted"); + l.addComponent(result); + pi.setCaption("Progress"); + pi.setVisible(false); + l.addComponent(pi); + textualProgress.setVisible(false); + l.addComponent(textualProgress); + + addComponent(p); + + upload.addListener(new Upload.StartedListener() { + public void uploadStarted(StartedEvent event) { + // this method gets called immediatedly after upload is + // started + pi.setValue(0f); + pi.setVisible(true); + pi.setPollingInterval(500); // hit server frequantly to get + textualProgress.setVisible(true); + // updates to client + state.setValue("Uploading"); + fileName.setValue(event.getFilename()); + + cancelProcessing.setEnabled(true); + } + }); + + upload.addListener(new Upload.ProgressListener() { + public void updateProgress(long readBytes, long contentLength) { + // this method gets called several times during the update + pi.setValue(new Float(readBytes / (float) contentLength)); + textualProgress.setValue("Processed " + readBytes + + " bytes of " + contentLength); + result.setValue(counter.getLineBreakCount() + " (counting...)"); + } + + }); + + upload.addListener(new Upload.SucceededListener() { + public void uploadSucceeded(SucceededEvent event) { + result.setValue(counter.getLineBreakCount() + " (total)"); + } + }); + + upload.addListener(new Upload.FailedListener() { + public void uploadFailed(FailedEvent event) { + result.setValue(counter.getLineBreakCount() + + " (counting interrupted at " + + Math.round(100 * (Float) pi.getValue()) + "%)"); + } + }); + + upload.addListener(new Upload.FinishedListener() { + public void uploadFinished(FinishedEvent event) { + state.setValue("Idle"); + pi.setVisible(false); + textualProgress.setVisible(false); + cancelProcessing.setEnabled(false); + } + }); + + } + + public static class LineBreakCounter implements Receiver { + + private String fileName; + private String mtype; + + private int counter; + private int total; + private boolean sleep; + + /** + * OutputStream that simply counts lineends + */ + private OutputStream stream = new OutputStream() { + private static final int searchedByte = '\n'; + + @Override + public void write(int b) throws IOException { + total++; + if (b == searchedByte) { + counter++; + } + if (sleep && total % 1000 == 0) { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + }; + + public OutputStream receiveUpload(String filename, String MIMEType) { + counter = 0; + total = 0; + fileName = filename; + mtype = MIMEType; + return stream; + } + + public String getFileName() { + return fileName; + } + + public String getMimeType() { + return mtype; + } + + public int getLineBreakCount() { + return counter; + } + + public void setSlow(boolean value) { + sleep = value; + } + + } + +} -- 2.39.5