From f95143418a719778863b027e53985ca6f7fab200 Mon Sep 17 00:00:00 2001 From: Alex Eng Date: Tue, 3 Jun 2014 16:24:36 +1000 Subject: [PATCH 01/37] fix Dialog 'Invalid translation' popup --- .../client/resources/TableEditorMessages.java | 3 ++ .../ui/ShortcutContextAwareDialogBox.java | 24 +++++++++++ .../client/ui/ValidationWarningPanel.java | 11 +++-- .../client/ui/ValidationWarningPanel.ui.xml | 40 ++++++++++--------- 4 files changed, 53 insertions(+), 25 deletions(-) diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/resources/TableEditorMessages.java b/zanata-war/src/main/java/org/zanata/webtrans/client/resources/TableEditorMessages.java index 92044607de..493d2ed388 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/resources/TableEditorMessages.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/resources/TableEditorMessages.java @@ -135,6 +135,9 @@ String validationNotificationHeading(@PluralCount int warningCount, @DefaultMessage("You are trying to save an invalid translation") String validationErrorMessage(); + @DefaultMessage("Invalid translation") + String invalidTranslation(); + @DefaultMessage("Translation") String translation(); diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ShortcutContextAwareDialogBox.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ShortcutContextAwareDialogBox.java index fc8a326bf2..37facd14a8 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ShortcutContextAwareDialogBox.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ShortcutContextAwareDialogBox.java @@ -35,6 +35,30 @@ public ShortcutContextAwareDialogBox(final boolean autoHide, keyShortcutPresenter.register(hideSelfShortcut); } + public ShortcutContextAwareDialogBox(final boolean autoHide, + final boolean modal, ShortcutContext modalContext, + KeyShortcutPresenter keyShortcutPresenter, boolean enableEscKeyClose) { + super(autoHide, modal); + this.modalContext = modalContext; + this.keyShortcutPresenter = keyShortcutPresenter; + + if(enableEscKeyClose) { + // intercept esc key so that Firefox won't close event service + // connection + KeyShortcutEventHandler handler = + createKeyShortcutEventHandler(autoHide, modal); + KeyShortcut hideSelfShortcut = + KeyShortcut.Builder + .builder() + .addKey(new Keys(Keys.NO_MODIFIER, KeyCodes.KEY_ESCAPE)) + .setContext(modalContext) + .setKeyEvent(KeyShortcut.KeyEvent.KEY_DOWN) + .setPreventDefault(true).setStopPropagation(true) + .setHandler(handler).build(); + keyShortcutPresenter.register(hideSelfShortcut); + } + } + private KeyShortcutEventHandler createKeyShortcutEventHandler( boolean autoHide, boolean modal) { KeyShortcutEventHandler handler; diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationWarningPanel.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationWarningPanel.java index 5608aec786..25200197ed 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationWarningPanel.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationWarningPanel.java @@ -23,8 +23,6 @@ import java.util.List; import java.util.Map; -import net.customware.gwt.presenter.client.EventBus; - import org.zanata.webtrans.client.events.CopyDataToEditorEvent; import org.zanata.webtrans.client.keys.ShortcutContext; import org.zanata.webtrans.client.keys.TimedAction; @@ -38,7 +36,6 @@ import org.zanata.webtrans.shared.model.TransUnit; import org.zanata.webtrans.shared.model.TransUnitId; import org.zanata.webtrans.shared.model.ValidationAction; - import com.google.common.collect.Lists; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; @@ -50,6 +47,8 @@ import com.google.gwt.user.client.ui.HTMLPanel; import com.google.inject.Inject; +import net.customware.gwt.presenter.client.EventBus; + /** * * @author Alex Eng aeng@redhat.com @@ -98,9 +97,7 @@ public ValidationWarningPanel(TableEditorMessages messages, final NavigationService navigationService, final TimerFactory timer, final EventBus eventBus) { super(false, true, ShortcutContext.ValidationWarningPopup, - keyShortcutPresenter); - - setStyleName("new-zanata"); + keyShortcutPresenter, false); returnToEditor = new Button(messages.returnToEditor()); saveAsFuzzy = new Button(messages.saveAsFuzzy()); @@ -118,6 +115,7 @@ public void run() { }); setGlassEnabled(true); + getCaption().setText(messages.invalidTranslation()); setWidget(container); hide(); } @@ -157,6 +155,7 @@ public void onClick(ClickEvent event) { public void onClick(ClickEvent event) { // clear data in navigation service to ensure first run of // copyTranslationToEditor() = false + timer.cancel(); navigationService.clearData(); listener.gotoRow(documentInfo, transUnitId); timer.schedule(CHECK_EDITOR_SELECTED_DURATION); diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationWarningPanel.ui.xml b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationWarningPanel.ui.xml index a18495c2da..1c35d8a330 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationWarningPanel.ui.xml +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationWarningPanel.ui.xml @@ -6,27 +6,29 @@ - -

- -

+ + +

+ +

-

- -

- +

+ +

+ -

- -

- +

+ +

+ -
- - or - -
+
+ + or + +
+
From e9a0929623be996026db63858cdac5a08d75a7ed Mon Sep 17 00:00:00 2001 From: Alex Eng Date: Wed, 4 Jun 2014 09:12:30 +1000 Subject: [PATCH 02/37] Remove unused images and seam component --- zanata-war/src/etc/graphics.svg | 1573 ----------------- .../webtrans/client/resources/Resources.java | 3 - .../main/resources/images/combo_box_arrow.png | Bin 294 -> 0 bytes .../_16x16/actions/admin_icon.png | Bin 656 -> 0 bytes .../crystal_project/_16x16/actions/help.png | Bin 3567 -> 0 bytes .../crystal_project/_16x16/apps/bug.png | Bin 3692 -> 0 bytes .../crystal_project/_16x16/apps/error.png | Bin 3575 -> 0 bytes .../crystal_project/_16x16/apps/kdf.png | Bin 3558 -> 0 bytes .../crystal_project/_16x16/apps/kllckety.png | Bin 684 -> 0 bytes .../crystal_project/_16x16/apps/locale.png | Bin 808 -> 0 bytes .../_16x16/apps/package_editors.png | Bin 523 -> 0 bytes .../_16x16/filesystems/file_doc.png | Bin 402 -> 0 bytes .../_48x48/apps/package_editors.png | Bin 2072 -> 0 bytes .../src/main/resources/images/favicon.ico | Bin 551 -> 0 bytes .../src/main/resources/images/first_entry.png | Bin 415 -> 0 bytes .../src/main/resources/images/last_entry.png | Bin 430 -> 0 bytes .../src/main/resources/images/logo-small.png | Bin 4781 -> 0 bytes zanata-war/src/main/resources/images/logo.png | Bin 7844 -> 0 bytes .../src/main/resources/images/next_entry.png | Bin 312 -> 0 bytes .../src/main/resources/images/next_mode.png | Bin 446 -> 0 bytes .../src/main/resources/images/prev_entry.png | Bin 311 -> 0 bytes .../src/main/resources/images/prev_mode.png | Bin 429 -> 0 bytes .../src/main/resources/images/z-logo-16px.png | Bin 551 -> 0 bytes .../WEB-INF/layout/login_provider.xhtml | 15 +- zanata-war/src/main/webapp/admin/search.xhtml | 2 +- zanata-war/src/main/webapp/project/home.xhtml | 4 +- .../main/webapp/resources/images/spacer.gif | Bin 43 -> 0 bytes .../webapp/resources/richext/spacer.xhtml | 22 - .../src/main/webapp/version-group/home.xhtml | 2 +- 29 files changed, 12 insertions(+), 1609 deletions(-) delete mode 100644 zanata-war/src/etc/graphics.svg delete mode 100644 zanata-war/src/main/resources/images/combo_box_arrow.png delete mode 100644 zanata-war/src/main/resources/images/crystal_project/_16x16/actions/admin_icon.png delete mode 100644 zanata-war/src/main/resources/images/crystal_project/_16x16/actions/help.png delete mode 100644 zanata-war/src/main/resources/images/crystal_project/_16x16/apps/bug.png delete mode 100755 zanata-war/src/main/resources/images/crystal_project/_16x16/apps/error.png delete mode 100644 zanata-war/src/main/resources/images/crystal_project/_16x16/apps/kdf.png delete mode 100644 zanata-war/src/main/resources/images/crystal_project/_16x16/apps/kllckety.png delete mode 100644 zanata-war/src/main/resources/images/crystal_project/_16x16/apps/locale.png delete mode 100644 zanata-war/src/main/resources/images/crystal_project/_16x16/apps/package_editors.png delete mode 100755 zanata-war/src/main/resources/images/crystal_project/_16x16/filesystems/file_doc.png delete mode 100644 zanata-war/src/main/resources/images/crystal_project/_48x48/apps/package_editors.png delete mode 100644 zanata-war/src/main/resources/images/favicon.ico delete mode 100644 zanata-war/src/main/resources/images/first_entry.png delete mode 100644 zanata-war/src/main/resources/images/last_entry.png delete mode 100644 zanata-war/src/main/resources/images/logo-small.png delete mode 100644 zanata-war/src/main/resources/images/logo.png delete mode 100644 zanata-war/src/main/resources/images/next_entry.png delete mode 100644 zanata-war/src/main/resources/images/next_mode.png delete mode 100644 zanata-war/src/main/resources/images/prev_entry.png delete mode 100644 zanata-war/src/main/resources/images/prev_mode.png delete mode 100644 zanata-war/src/main/resources/images/z-logo-16px.png delete mode 100644 zanata-war/src/main/webapp/resources/images/spacer.gif delete mode 100644 zanata-war/src/main/webapp/resources/richext/spacer.xhtml diff --git a/zanata-war/src/etc/graphics.svg b/zanata-war/src/etc/graphics.svg deleted file mode 100644 index 5994c25474..0000000000 --- a/zanata-war/src/etc/graphics.svg +++ /dev/null @@ -1,1573 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - TableEditor row backgrounds Fuzzy Translated New - - - - - - - - - Normal Filtered - Untranslated / New - Need Review - Approved - Side panel background Border - - - - - - - - - Flies - - - - - - - - - - - - - - - - ✔ - ✔ - - - - - diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/resources/Resources.java b/zanata-war/src/main/java/org/zanata/webtrans/client/resources/Resources.java index b5a516a644..e55f2b2735 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/resources/Resources.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/resources/Resources.java @@ -27,9 +27,6 @@ * Resources used by the entire application. */ public interface Resources extends ClientBundle { - @Source("images/crystal_project/_16x16/filesystems/file_doc.png") - ImageResource documentImage(); - @Source("images/loading.gif") ImageResource spinner(); diff --git a/zanata-war/src/main/resources/images/combo_box_arrow.png b/zanata-war/src/main/resources/images/combo_box_arrow.png deleted file mode 100644 index 824999ab2ba74e0c678af9671c695ebba61ac2c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 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 diff --git a/zanata-war/src/main/resources/images/crystal_project/_16x16/apps/bug.png b/zanata-war/src/main/resources/images/crystal_project/_16x16/apps/bug.png deleted file mode 100644 index 5fc4b25caf5c1c9cb7719f9bbc4272b9490ae808..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3692 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 KMNUMnLSTYHEZI~5 diff --git a/zanata-war/src/main/resources/images/crystal_project/_16x16/apps/error.png b/zanata-war/src/main/resources/images/crystal_project/_16x16/apps/error.png deleted file mode 100755 index b5b93b7518d27538045d4084a9956b10c00372f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3575 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 diff --git a/zanata-war/src/main/resources/images/crystal_project/_16x16/apps/kdf.png b/zanata-war/src/main/resources/images/crystal_project/_16x16/apps/kdf.png deleted file mode 100644 index 7de3f48b15c23906af428907b8a822e382411f8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3558 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 diff --git a/zanata-war/src/main/resources/images/crystal_project/_16x16/apps/kllckety.png b/zanata-war/src/main/resources/images/crystal_project/_16x16/apps/kllckety.png deleted file mode 100644 index 5f34ab07d773551167a2ba8b0d49419eddd9380a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 684 zcmV;d0#p5oP)7IM*R=qA-@CW3;*_;Dsb9mq_WsYKZ{Pm+R zzVlH)bsqxG6i!x{C%3+QKeU}evyuy{VAYuQ%bou6!?$0_q>c|i|McU}LK`4w42nhZ z0)PB{&iL>?v!e%;lweeJ%-90w&#w6OCx1`Gs_)NE(BOcAHDC=CtLXZg%LF&Qf!?5F zK?lWTWs?P~Axd;E_}wdPHdqSQ?gzY8WV~VHgKQ8AskYOYZ@Kcu0f9EEx z&|XOi#=(#V7_OBPLnGc1$c11FzGQ6bae4nm!ni`r0e1Kiz!{a6P0gOOD!p*Sv+CcpywX{xS6@jjX!$UYYfVP7W(5s$C zTO2)!HP&q~qL3j0p{0>n5tw!`pTTSnhf|nLAVxUb(&=p~G6O5TImJ~M7?UUpRZAl= zgur4Bckjad4$N-DbP8RA39mV{0};cP3xpPfVEhS|OkGpUolXK(2Vn}6ccGnwtzqj3 zqwr=2rH2q46@sTC<;dCg6&lvH=;|dGPu8%wg!@-$+oG#0^u?0pKi7Q!Sh=++9L-?S zEU>m``TCMSPYch_M`LDi+#tj diff --git a/zanata-war/src/main/resources/images/crystal_project/_16x16/apps/locale.png b/zanata-war/src/main/resources/images/crystal_project/_16x16/apps/locale.png deleted file mode 100644 index 291b52e8aa07fbf189864db33cd8aeca2042c797..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmV+@1K0eCP)Gu9!|}k2Ke{|woCDB~49%P~`nns&nc+s;Z6{~;o5wrb zvZp(b6(&yf42}s+?QJw<`tC1VcLb0T=1Lzx=c9fc@1*Di)m!Z8YZcfWVF;vN>dREOipxi z=QoR$icOqEPhXt*TAzLYg+RErwVF3FNMhDjD?D>%fYM+N$MUIc+B7|n#|B&3+-@*E zb%OoFfTkOF)oM-&KpgI@-3k&x5(x@N+j;fnC;9o;4N9X$oul8$&OK4&?YE{WSGT!2dzXAJ&)lsgZr{02PhS`L zjyAHI&V!Zv?`evrf^V;?f+W>qih^{wer=I&ua$}Gd&HrFNM~s;w$MA!gQ{r+^*U15 zNbBiSng}Jt!UpMhhxOJl@aZ1vMOmZLxC!2# zmN9i83H-qGRZXP mt&1gx5QV>4Hg=puijkGzNCYW>XecQWibP`xc^wCM4wDDq1&}Cs3OWj}BU%EA6hi1| zF>Ek4!C(hrVeb#SL$S8wAA&$kHJW?wnRDmN6;%bmw(U6ihbR;ZVontP`m$}?0GN{p z?N*EVp~Wj4;hJL;MuMvz;CCxg52YJFE!;a)Mb~o;#hOU|EEo&-t^7 zVb@rJU>HW6kKm1|w^b^rDj(Y(wU&p|?DF8@BOX6_iu0w%`(}3xKc&FR=Lvc)E9oSv z5&OF@xq4-d^_w?Xm``9B2BUUODX463#|m05FP`u6_R!(zo5!(hQfqr0e(jyEKvl6U zi{AGR)i(#ct5(TmGHet#Vn_P3_#=UB+bk_D<2Vj7yU4ZmThxyO=sO|6#q7-Q34$Qt zTy}+ey-sQ_#hu$lVAKVfa$!iIs=PXQP3=PsulIxNxw{;7q9IUXCIBvHlj8(i_qG-` zHaDp^KB3W1iiH9?bFw=F1tNkNGUkE_@VU`w?Cy7{b diff --git a/zanata-war/src/main/resources/images/crystal_project/_16x16/filesystems/file_doc.png b/zanata-war/src/main/resources/images/crystal_project/_16x16/filesystems/file_doc.png deleted file mode 100755 index 43ec054ac277e93582d41fbd423ed31b2a0a3d99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 402 zcmV;D0d4+?P)j)f+F02`d1F zO$3f@Gx-{Eeq{V25F(1@ais*jT8+w$$#Z`a`;L+41o_-*0j)KT<1qdhl0Q_a*#@N| z0%j!3krMDck8-I*XAmq}Fn`a6Q8?RPEf9twwq-FI4#^)xo|8S8lPoi+BtflSM{CW? zAf)3*PkRv1exLI6Hl@{{Y_?!q7N5S)$^N2w@f1W5CF`f4wdTIj;JR4k)dyt0RHshk w)$SSr!!R&S6QvY|M8{L7aMKi$H|#(019a$gPo0Qhs{jB107*qoM6N<$g5GAaf&c&j diff --git a/zanata-war/src/main/resources/images/crystal_project/_48x48/apps/package_editors.png b/zanata-war/src/main/resources/images/crystal_project/_48x48/apps/package_editors.png deleted file mode 100644 index 22c39a9f258e533211c2faea49f2497258a8f3ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2072 zcmV+z22q70QUgW+`VdT>O{ric)%LV{|vRbXf z4u`}3HOLf0JkNvUxM(Xp85tS4apOi0Aw^A>g=3TO5>-FN`!Gp-k$^rm* z{9mcrN;ZA#8@iakS(XK$(uB5e-;Pqd9a^n6I`+-NM|`3%C>@hCF4mmD3*)P+tI7cg zn;8rS7z~EE{>SYTsY0wkihLl^7fEL8(s8--q zR+Mg~h_=~`3Hwz!@xFcgP*YO_ilU-lt1Lg_RC4TpJ$XXu5W-q@bv3H1t79~t%=`!k%9Ycr+I2}s5W@2OjtX7Ab=br}v ztgbBM+}~Yj_}!n^)+Jvn(3WCD!hTg6C@Cp{-5xpH3tw=Pg#r+7!*}isU}esa5?e7Q z{P%F<`gQ#6FMmaS-OJc&GlHTh*|n4SeTo5yO+&mjwhg^#Vvkzx6I_kwp zIE1f)E7-AP2Ple)Ta)T|DkX-Z*oFq_So znVG@R&dT2n`Jl&}y|QomZ9<6Cz&&;>^2e&mQdFy*oyTq5F?Q>ge5G{QKcO zY%I!0AP~UV*cf#BYJRbh?w3lz5&87v`YXXQQH`68ZUsXllFw znxfJ2Su4JG=q2z*D|}xv0Qj|M{UpA&5fi=e<$|J(-0ohCct=rLS%KVK3tX=AprJu` zcNbo%kJx-hM(p`m4zD&3&@?UI4ZPmboM0$~t=qQ1WX{Duo0`GUG=LGwT@g;?i1o`o0I^`H$8Qz z<=VB=JD=SNgHDhBJ~s?T6I_jrpB+6~S5jPDtd9|e=P_GVg^g>4nwq;%xx6d@i%W~f zp6+fuVX?rVH-Kg`apA&+>z>a&^`)hy&04J%D=RCqUivtlS=1lX5$D9?e*asmq2T1l zAAN-B=_#~)`pL)rp8h(9Va8~h=7mcwj^mJwm;S<@ju)Ih(H!Z%Yn5=+?nshaNJ~?6 zJt1ILgTeQBo}Xk{Ht2G>{wMy~?)A$d$7ad%zATp!?0000~`eo!BL}Jm>$?_lG@%x&-JRmtpj#^QeAdW@r(lOHFqb~Am$| zgW!U_%O?XxI14-?i-Fp&gD|6$#_S59AbW|YuPgg)9#Ixvh546%?F5=4@9E+gVsZND zq`h9ujv}r5wWBx%YZ_`9qy?=Ho-+&k*Vt;-)v>7TkW*Ld7slGgJmX3vRff zl`u2qT|!s3V8peAv_!!@XAj&t{PUa)+rLbeEpNWfJ9or`r}MzM$L+W4<|c0czK3Z` zBliP?efuT9c=Xr$bAFB!_m$8*J2b-h{=oF2xxfqhTwmiv->J0`H|EcpNoJqAx#KbLh* G2~7Z00j;M1 diff --git a/zanata-war/src/main/resources/images/last_entry.png b/zanata-war/src/main/resources/images/last_entry.png deleted file mode 100644 index c712df36f36db8687180e67f9cf45688ad60e571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 430 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 Hu0mjfjO++M diff --git a/zanata-war/src/main/resources/images/logo.png b/zanata-war/src/main/resources/images/logo.png deleted file mode 100644 index bd9d26d30367f686c70826d89740710ee9b21a50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7844 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 V?~6~l4mipnd1)0Xn1soH{{tuQVtW7p diff --git a/zanata-war/src/main/resources/images/next_entry.png b/zanata-war/src/main/resources/images/next_entry.png deleted file mode 100644 index a41b216d2336e8e1aa9d843e9c3a688e6b886f1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^azM<*!3HE3m%q~oQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?i-Fp&gD|6$#_S59AbW|YuPgg)9#IxvmcpfdHKA4ms^fB;?uH?Bz2}S38 z_x{;^pS`cyzIO?yb?kbEGmU~9Hm&{jRei(lk3KCNp&=HWKBB+2UA3qa-8O66N&(yT z+*}*NC72$^-R>-I*S*qjJROyf zyT>x;N&MJde(2cxgEkNP59oXl%V=%ff3j$q^ac*A-Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2ipu4 z1P&~{Naaxg00BNpL_t(I%f->ZOIu+W#qrNu+zc69`xofap@q5$>5yh|D&6`YbP&3T zSvnXIx(c$f20usEr1caXD9iGGaKIeJ) zPYQX1MzdAI2dv|BedhIbQCOu~E2D)PuCa-^EKRQZy$^CXielh-h;fT}w$NN&Z8Vo3 z6|mRv3T^zr8_W*XcxJXf8o9V_4I&)I8^FfWV&k%}@n0NgY4WsEtv$qV9As%S*`Gg> z2maOR2!Yt!E=EFt$D-B9yXhA%-(%&|$M#XBS__!MpKio>_dUHUKNoy?abEPLWlUfU zvNVbK-fcdPEjJgN9|~NcFIdRZWG`pFjuM__Y4Ytpz(v5G_OYF%$xfbO| zgW!U_%O?XxI14-?i-Fp&gD|6$#_S59AbW|YuPgg)9#Iw^al6vI??9pLo-U3d7N?I+ z(&auBAmVUdc2*1LKc4Om-wl!JpSaI-bu0*s*v9=UxMkymNe}uZX0RVy8{d86(d};+ zroZ3$yrA;Ka`jMg8UN{44;Z}@9=+c_lQUdf-=>_!tm~XhrV>-vtWT{+b~oQ=5Mx>$ zKIw}{| zgW!U_%O?XxI14-?i-Fp&gD|6$#_S59AbW|YuPgg)9#Iy4anT4{6QC)&o-U3d7N?J1 zGW3XcWH|Qmey5)oOE`OYsbHWCmym#?(vo0Pr*zkl6%T?+v|s6H@a@{YQ&cYh!$Sp) zT_xgHr2$;BK5DY(RJ|tH`EnhN=6m!<+ibG4{`IA` zbNBL1G3=k&dv)q9?`40der8{hApbYwu>1?k)zZL%c@$wr3vHH09 z^Q>Iw+ax$0*LWxAIL=w>d8EIpgHdL2+gbHxVQar72(;G!jLG#iXn)~k={zopr0EKI;VgLXD diff --git a/zanata-war/src/main/resources/images/z-logo-16px.png b/zanata-war/src/main/resources/images/z-logo-16px.png deleted file mode 100644 index 3cc17b49cd949b659c9f2482ad7375acc55e8767..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(eDP)~`eo!BL}Jm>$?_lG@%x&-JRmtpj#^QeAdW@r(lOHFqb~Am$

- +
+
@@ -73,38 +74,38 @@ title="Fedora" height="40" width="40" onclick="updateLoginType(this, 'Fedora', true, '#{messages['jsf.login.openid.fedora']}')"/> - +    - +    - +    - +    - +    - +    diff --git a/zanata-war/src/main/webapp/admin/search.xhtml b/zanata-war/src/main/webapp/admin/search.xhtml index c0d8dcaf99..2c7c6cb278 100644 --- a/zanata-war/src/main/webapp/admin/search.xhtml +++ b/zanata-war/src/main/webapp/admin/search.xhtml @@ -112,7 +112,7 @@ - +
- +   @@ -93,7 +93,7 @@ - +   #h)yUAf^t80Ld^gF}W}@SOWlZ0R#L1 diff --git a/zanata-war/src/main/webapp/resources/richext/spacer.xhtml b/zanata-war/src/main/webapp/resources/richext/spacer.xhtml deleted file mode 100644 index d93ef63bdf..0000000000 --- a/zanata-war/src/main/webapp/resources/richext/spacer.xhtml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - -
-
- - -
- diff --git a/zanata-war/src/main/webapp/version-group/home.xhtml b/zanata-war/src/main/webapp/version-group/home.xhtml index 78b6caf6ba..0073ba8af3 100644 --- a/zanata-war/src/main/webapp/version-group/home.xhtml +++ b/zanata-war/src/main/webapp/version-group/home.xhtml @@ -45,7 +45,7 @@
- +   Date: Wed, 4 Jun 2014 10:44:42 +1000 Subject: [PATCH 03/37] cleanup of unused dependency --- zanata-war/pom.xml | 118 +++++++++++++++------------------------------ 1 file changed, 38 insertions(+), 80 deletions(-) diff --git a/zanata-war/pom.xml b/zanata-war/pom.xml index e3f02edd04..7da703fe43 100644 --- a/zanata-war/pom.xml +++ b/zanata-war/pom.xml @@ -143,39 +143,50 @@ org.json:json com.googlecode.log4jdbc:log4jdbc - - - + antlr:antlr + com.google.guava:guava-gwt + com.ibm.icu:icu4j - com.sun.faces:jsf-impl + commons-codec:commons-codec + commons-collections:commons-collections + commons-lang:commons-lang + javax.el:el-api javax.servlet.jsp:jsp-api - mysql:mysql-connector-java + org.richfaces.core:richfaces-core-impl + com.sun.faces:jsf-impl + org.apache.solr:solr-core org.apache.solr:solr-solrj - org.codehaus.jackson:jackson-xc + org.drools:drools-compiler + org.antlr:antlr + org.hibernate:hibernate-ehcache + org.hibernate:hibernate-search-analyzers org.hibernate:hibernate-search + org.hibernate:hibernate-testing - org.htmlparser:htmlparser org.jboss.arquillian.junit:arquillian-junit-container org.jboss.arquillian.protocol:arquillian-protocol-servlet org.jboss.as:jboss-as-arquillian-container-managed + org.jboss.resteasy:resteasy-jackson-provider + org.codehaus.jackson:jackson-xc + org.jboss.seam:jboss-seam-debug + org.jboss.seam:jboss-seam-mail - org.openxri:openxri-client - org.openxri:openxri-syntax - org.richfaces.core:richfaces-core-impl + org.tuckey:urlrewritefilter - org.zanata:zanata-rest-client + + ${jdbc.groupId}:${jdbc.artifactId} @@ -1120,12 +1131,6 @@ zanata-rest-client test - - org.zanata - zanata-rest-client - test-jar - test - @@ -1182,9 +1187,9 @@ - org.jboss.seam jboss-seam-debug + test @@ -1280,9 +1285,24 @@ ecj org.eclipse.jdt.core.compiler + + org.antlr + antlr + + + antlr + antlr + + + org.antlr + antlr + 3.3 + provided + + @@ -1642,15 +1662,6 @@ test - - - org.jboss.arquillian.config arquillian-config-api @@ -1891,19 +1902,6 @@ - - org.htmlparser - htmlparser - 1.6 - - - - tools - com.sun - - - - org.openid4java openid4java @@ -1920,46 +1918,6 @@ - - org.openxri - openxri-client - 1.2.0 - - - xalan - xalan - - - xerces - xercesImpl - - - org.slf4j - slf4j-jcl - - - commons-logging - commons-logging - - - - - - org.openxri - openxri-syntax - 1.2.0 - - - org.slf4j - slf4j-jcl - - - commons-logging - commons-logging - - - - org.picketbox picketbox From 7aa7e94721f2d8b36aac51e84c1a96fe0c75cf15 Mon Sep 17 00:00:00 2001 From: Alex Eng Date: Wed, 4 Jun 2014 15:38:15 +1000 Subject: [PATCH 04/37] update jboss-deployment-structure --- pom.xml | 6 +++++ zanata-war/pom.xml | 23 +++++++++++++++++-- .../WEB-INF/jboss-deployment-structure.xml | 9 +++++++- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index be2c47e2a8..cc66db9a7f 100644 --- a/pom.xml +++ b/pom.xml @@ -398,6 +398,12 @@ ${hibernate.search.scope} + + org.hibernate.common + hibernate-commons-annotations + 4.0.1.Final + + org.hibernate hibernate-core diff --git a/zanata-war/pom.xml b/zanata-war/pom.xml index 7da703fe43..345e51d23b 100644 --- a/zanata-war/pom.xml +++ b/zanata-war/pom.xml @@ -168,7 +168,7 @@ org.antlr:antlr org.hibernate:hibernate-ehcache - + org.hibernate.common:hibernate-commons-annotations org.hibernate:hibernate-search-analyzers org.hibernate:hibernate-search @@ -187,6 +187,8 @@ org.tuckey:urlrewritefilter ${jdbc.groupId}:${jdbc.artifactId} + + dom4j:dom4j @@ -1206,6 +1208,7 @@ org.jboss.resteasy resteasy-jaxrs + provided javassist @@ -1220,15 +1223,18 @@ org.jboss.resteasy resteasy-jaxb-provider + provided org.jboss.resteasy resteasy-jackson-provider + provided org.jboss.resteasy resteasy-multipart-provider + provided @@ -1260,6 +1266,7 @@ org.jboss.spec.javax.transaction jboss-transaction-api_1.1_spec + provided org.jboss @@ -1303,6 +1310,12 @@ provided + + dom4j + dom4j + 1.6.1 + + @@ -1533,7 +1546,11 @@ - + + org.hibernate.common + hibernate-commons-annotations + provided + org.hibernate hibernate-search-analyzers @@ -1636,6 +1653,7 @@ org.javassist javassist + provided @@ -1927,6 +1945,7 @@ javax.validation validation-api + provided diff --git a/zanata-war/src/main/webapp-jboss/WEB-INF/jboss-deployment-structure.xml b/zanata-war/src/main/webapp-jboss/WEB-INF/jboss-deployment-structure.xml index 16f51099db..0407cbcc86 100644 --- a/zanata-war/src/main/webapp-jboss/WEB-INF/jboss-deployment-structure.xml +++ b/zanata-war/src/main/webapp-jboss/WEB-INF/jboss-deployment-structure.xml @@ -14,15 +14,22 @@ + + - + + + + + + From a01965f65132c01973214e6057f1fcf3efd5ee44 Mon Sep 17 00:00:00 2001 From: Alex Eng Date: Wed, 4 Jun 2014 15:41:12 +1000 Subject: [PATCH 05/37] remove version for hibernate-commons-annotations --- pom.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pom.xml b/pom.xml index cc66db9a7f..be2c47e2a8 100644 --- a/pom.xml +++ b/pom.xml @@ -398,12 +398,6 @@ ${hibernate.search.scope} - - org.hibernate.common - hibernate-commons-annotations - 4.0.1.Final - - org.hibernate hibernate-core From 94da9ae65ffe85c42f41379472b421fd40e6c8f7 Mon Sep 17 00:00:00 2001 From: "Carlos A. Munoz" Date: Wed, 4 Jun 2014 16:16:51 +1000 Subject: [PATCH 06/37] Add a JBoss SSO Login module. --- .../zanata/security/JBossSSOLoginModule.java | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 zanata-war/src/main/java/org/zanata/security/JBossSSOLoginModule.java diff --git a/zanata-war/src/main/java/org/zanata/security/JBossSSOLoginModule.java b/zanata-war/src/main/java/org/zanata/security/JBossSSOLoginModule.java new file mode 100644 index 0000000000..61fba535b3 --- /dev/null +++ b/zanata-war/src/main/java/org/zanata/security/JBossSSOLoginModule.java @@ -0,0 +1,145 @@ +/* + * Copyright 2014, Red Hat, Inc. and individual contributors as indicated by the + * @author tags. See the copyright.txt file in the distribution for a full + * listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this software; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF + * site: http://www.fsf.org. + */ +package org.zanata.security; + +import java.io.IOException; +import java.util.Map; + +import javax.security.auth.Subject; +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.NameCallback; +import javax.security.auth.callback.PasswordCallback; +import javax.security.auth.login.LoginException; +import javax.security.auth.spi.LoginModule; + +import lombok.extern.slf4j.Slf4j; + +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.DefaultHttpClient; +import org.codehaus.jackson.JsonNode; +import org.codehaus.jackson.map.ObjectMapper; +import org.jboss.seam.security.SimplePrincipal; +import org.zanata.util.HashUtil; + +/** + * Login Module that works for JBoss SSO. The current implementation uses the + * REST endpoint for authentication. + * The server url can be configured using the 'serverURL' option when + * configuring the JAAS Login Module. + * @author Carlos Munoz camunoz@redhat.com + */ +@Slf4j +public class JBossSSOLoginModule implements LoginModule { + + private CallbackHandler callbackHandler; + private Subject subject; + private Map options; + private String username; + private char[] password; + private String jbossSSOServerUrl = "https://sso.jboss.org"; + + @Override + public void initialize(Subject subject, CallbackHandler callbackHandler, + Map sharedState, Map options) { + this.callbackHandler = callbackHandler; + this.subject = subject; + this.options = options; + if (options.containsKey("serverURL")) { + jbossSSOServerUrl = (String) options.get("serverURL"); + } + } + + @Override + public boolean login() throws LoginException { + try { + NameCallback cbName = new NameCallback("Enter username"); + PasswordCallback cbPassword = + new PasswordCallback("Enter password", false); + + // Get the username and password from the callback handler + callbackHandler.handle(new Callback[] { cbName, cbPassword }); + username = cbName.getName(); + password = cbPassword.getPassword(); + } catch (Exception ex) { + LoginException le = new LoginException(ex.getMessage()); + le.initCause(ex); + throw le; + } + + // Send the request to JBoss.org's REST service + HttpClient httpClient = new DefaultHttpClient(); + StringBuilder requestUrl = + new StringBuilder(jbossSSOServerUrl + "/rest/auth?"); + String passwordHash = + HashUtil.md5Hex(username + + HashUtil.md5Hex(new String(password))); + requestUrl.append("u=" + username); + requestUrl.append("&h=" + passwordHash); + HttpGet getAuthRequest = new HttpGet(requestUrl.toString()); + + try { + HttpResponse authResponse = httpClient.execute(getAuthRequest); + if (authResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + // read json + ObjectMapper mapper = new ObjectMapper(); + JsonNode parsedResponse = + mapper.readTree(authResponse.getEntity().getContent()); + // TODO These values should be used to pre-populate the + // registration form when a user first registers + //parsedResponse.get("fullname"); + //parsedResponse.get("email"); + log.info("JBoss.org user " + username + + " successfully authenticated"); + return true; + } + else { + log.info("JBoss.org user " + username + + " failed authentication"); + return false; + } + } catch (IOException ex) { + LoginException le = new LoginException(ex.getMessage()); + le.initCause(ex); + throw le; + } + } + + @Override + public boolean commit() throws LoginException { + subject.getPrincipals().add(new SimplePrincipal(username)); + return true; + } + + @Override + public boolean abort() throws LoginException { + return true; + } + + @Override + public boolean logout() throws LoginException { + return true; + } +} From 98ea6cd231e8709ed2ec6a7154800535249149f7 Mon Sep 17 00:00:00 2001 From: Alex Eng Date: Thu, 5 Jun 2014 10:41:40 +1000 Subject: [PATCH 07/37] reorganise jboss-deployment --- zanata-war/pom.xml | 15 +++++++-------- .../WEB-INF/jboss-deployment-structure.xml | 10 ++++++---- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/zanata-war/pom.xml b/zanata-war/pom.xml index 345e51d23b..beb4d84889 100644 --- a/zanata-war/pom.xml +++ b/zanata-war/pom.xml @@ -1310,10 +1310,16 @@ provided + + antlr + antlr + provided + + dom4j dom4j - 1.6.1 + provided @@ -1653,7 +1659,6 @@ org.javassist javassist - provided @@ -1948,12 +1953,6 @@ provided - - antlr - antlr - provided - - se.jiderhamn classloader-leak-prevention diff --git a/zanata-war/src/main/webapp-jboss/WEB-INF/jboss-deployment-structure.xml b/zanata-war/src/main/webapp-jboss/WEB-INF/jboss-deployment-structure.xml index 0407cbcc86..0e999af587 100644 --- a/zanata-war/src/main/webapp-jboss/WEB-INF/jboss-deployment-structure.xml +++ b/zanata-war/src/main/webapp-jboss/WEB-INF/jboss-deployment-structure.xml @@ -9,6 +9,8 @@ + + @@ -19,17 +21,17 @@ + + - - - - + + From be946277a66bcbe82d238b91a1edcb54913bc663 Mon Sep 17 00:00:00 2001 From: "Carlos A. Munoz" Date: Tue, 10 Jun 2014 11:51:26 +1000 Subject: [PATCH 08/37] Add explicit dependencies. JBoss SSO Login module code refactoring to bring it in line with other JAAS LoginModules. Stop maven dependency plugin from failing the build. --- zanata-war/pom.xml | 10 ++++- .../zanata/security/JBossSSOLoginModule.java | 40 +++++++++---------- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/zanata-war/pom.xml b/zanata-war/pom.xml index e3f02edd04..a6e276325b 100644 --- a/zanata-war/pom.xml +++ b/zanata-war/pom.xml @@ -123,7 +123,6 @@ - true javax.xml.bind:jaxb-api @@ -1890,6 +1889,15 @@ 3.0.2.Final + + org.apache.httpcomponents + httpcore + + + org.apache.httpcomponents + httpclient + + org.htmlparser diff --git a/zanata-war/src/main/java/org/zanata/security/JBossSSOLoginModule.java b/zanata-war/src/main/java/org/zanata/security/JBossSSOLoginModule.java index 61fba535b3..67a02a7b0b 100644 --- a/zanata-war/src/main/java/org/zanata/security/JBossSSOLoginModule.java +++ b/zanata-war/src/main/java/org/zanata/security/JBossSSOLoginModule.java @@ -60,6 +60,7 @@ public class JBossSSOLoginModule implements LoginModule { private String username; private char[] password; private String jbossSSOServerUrl = "https://sso.jboss.org"; + private boolean loginSuccessful; @Override public void initialize(Subject subject, CallbackHandler callbackHandler, @@ -74,6 +75,7 @@ public void initialize(Subject subject, CallbackHandler callbackHandler, @Override public boolean login() throws LoginException { + loginSuccessful = false; try { NameCallback cbName = new NameCallback("Enter username"); PasswordCallback cbPassword = @@ -83,26 +85,22 @@ public boolean login() throws LoginException { callbackHandler.handle(new Callback[] { cbName, cbPassword }); username = cbName.getName(); password = cbPassword.getPassword(); - } catch (Exception ex) { - LoginException le = new LoginException(ex.getMessage()); - le.initCause(ex); - throw le; - } - // Send the request to JBoss.org's REST service - HttpClient httpClient = new DefaultHttpClient(); - StringBuilder requestUrl = - new StringBuilder(jbossSSOServerUrl + "/rest/auth?"); - String passwordHash = - HashUtil.md5Hex(username - + HashUtil.md5Hex(new String(password))); - requestUrl.append("u=" + username); - requestUrl.append("&h=" + passwordHash); - HttpGet getAuthRequest = new HttpGet(requestUrl.toString()); + // Send the request to JBoss.org's REST service + HttpClient httpClient = new DefaultHttpClient(); + StringBuilder requestUrl = + new StringBuilder(jbossSSOServerUrl + "/rest/auth?"); + String passwordHash = + HashUtil.md5Hex(username + + HashUtil.md5Hex(new String(password))); + requestUrl.append("u=" + username); + requestUrl.append("&h=" + passwordHash); + HttpGet getAuthRequest = new HttpGet(requestUrl.toString()); - try { HttpResponse authResponse = httpClient.execute(getAuthRequest); - if (authResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + loginSuccessful = + authResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK; + if (loginSuccessful) { // read json ObjectMapper mapper = new ObjectMapper(); JsonNode parsedResponse = @@ -113,14 +111,13 @@ public boolean login() throws LoginException { //parsedResponse.get("email"); log.info("JBoss.org user " + username + " successfully authenticated"); - return true; } else { log.info("JBoss.org user " + username + " failed authentication"); - return false; } - } catch (IOException ex) { + return loginSuccessful; + } catch (Exception ex) { LoginException le = new LoginException(ex.getMessage()); le.initCause(ex); throw le; @@ -129,6 +126,9 @@ public boolean login() throws LoginException { @Override public boolean commit() throws LoginException { + if(!loginSuccessful) { + return false; + } subject.getPrincipals().add(new SimplePrincipal(username)); return true; } From c343ba7ca150a15e0232d0a940cf09978bcc40d1 Mon Sep 17 00:00:00 2001 From: Alex Eng Date: Wed, 11 Jun 2014 09:41:40 +1000 Subject: [PATCH 09/37] Allow firing of onValueChange from plain text area --- .../webtrans/client/ui/EditorTextArea.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/EditorTextArea.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/EditorTextArea.java index d158bfffb3..d91522d45d 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/EditorTextArea.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/EditorTextArea.java @@ -26,14 +26,28 @@ import com.google.gwt.event.dom.client.KeyDownHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.TextArea; public class EditorTextArea extends TextArea implements TextAreaWrapper { private static final int INITIAL_LINE_NUMBER = 2; + private static final int CHECK_INTERVAL = 1000; private String oldValue; private boolean editing; + // this timer is used to fire validation and change editing state in a + // 1second interval + // @see setEditing(boolean) + private final Timer typingTimer = new Timer() { + @Override + public void run() { + ValueChangeEvent.fireIfNotEqual(EditorTextArea.this, oldValue, + getText()); + oldValue = getText(); + } + }; + public EditorTextArea(String displayString) { super(); oldValue = displayString; @@ -81,9 +95,10 @@ public void refresh() { public void setEditing(boolean isEditing) { editing = isEditing; if (isEditing) { - ValueChangeEvent.fireIfNotEqual(EditorTextArea.this, oldValue, - getText()); + typingTimer.scheduleRepeating(CHECK_INTERVAL); setFocus(true); + } else { + typingTimer.cancel(); } } From 8caaa8ce1b8bcfd36b9c69bb20977eef06521932 Mon Sep 17 00:00:00 2001 From: Alex Eng Date: Wed, 11 Jun 2014 10:13:02 +1000 Subject: [PATCH 10/37] replace spacing with -    + -    + -    + -    + -    + -    + diff --git a/zanata-war/src/main/webapp/project/home.xhtml b/zanata-war/src/main/webapp/project/home.xhtml index 8613daa91d..7bc3973763 100644 --- a/zanata-war/src/main/webapp/project/home.xhtml +++ b/zanata-war/src/main/webapp/project/home.xhtml @@ -85,7 +85,7 @@ -   + @@ -93,7 +93,7 @@ -   + -   + Date: Wed, 11 Jun 2014 10:20:35 +1000 Subject: [PATCH 11/37] add comment for hibernate-commons-annotations --- zanata-war/pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zanata-war/pom.xml b/zanata-war/pom.xml index beb4d84889..329d7c29a2 100644 --- a/zanata-war/pom.xml +++ b/zanata-war/pom.xml @@ -166,9 +166,10 @@ org.drools:drools-compiler org.antlr:antlr + + org.hibernate.common:hibernate-commons-annotations org.hibernate:hibernate-ehcache - org.hibernate.common:hibernate-commons-annotations org.hibernate:hibernate-search-analyzers org.hibernate:hibernate-search From f5efbfbd56530692caeda23365162b7b09880378 Mon Sep 17 00:00:00 2001 From: Sean Flanigan Date: Wed, 11 Jun 2014 10:59:49 +1000 Subject: [PATCH 12/37] Add explicit serialVersionUID to subclasses of AbstractStatistic --- .../java/org/zanata/ui/model/statistic/MessageStatistic.java | 2 ++ .../main/java/org/zanata/ui/model/statistic/WordStatistic.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/zanata-war/src/main/java/org/zanata/ui/model/statistic/MessageStatistic.java b/zanata-war/src/main/java/org/zanata/ui/model/statistic/MessageStatistic.java index dd36ab96f2..41e335dfee 100644 --- a/zanata-war/src/main/java/org/zanata/ui/model/statistic/MessageStatistic.java +++ b/zanata-war/src/main/java/org/zanata/ui/model/statistic/MessageStatistic.java @@ -5,6 +5,8 @@ */ public class MessageStatistic extends AbstractStatistic { + private static final long serialVersionUID = 1L; + public MessageStatistic() { super(); } diff --git a/zanata-war/src/main/java/org/zanata/ui/model/statistic/WordStatistic.java b/zanata-war/src/main/java/org/zanata/ui/model/statistic/WordStatistic.java index 640883b551..ad99f8fa5f 100644 --- a/zanata-war/src/main/java/org/zanata/ui/model/statistic/WordStatistic.java +++ b/zanata-war/src/main/java/org/zanata/ui/model/statistic/WordStatistic.java @@ -8,6 +8,8 @@ */ public class WordStatistic extends AbstractStatistic { + private static final long serialVersionUID = -8807499518683834883L; + @Getter @Setter private double remainingHours; From f92660147109ce9d8165d23d596b6c4952593c59 Mon Sep 17 00:00:00 2001 From: Alex Eng Date: Wed, 11 Jun 2014 15:02:29 +1000 Subject: [PATCH 13/37] Fix position on textflow in editor after validation popup --- .../client/ui/ValidationWarningPanel.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationWarningPanel.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationWarningPanel.java index 25200197ed..99868626e9 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationWarningPanel.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ValidationWarningPanel.java @@ -89,7 +89,9 @@ interface ValidationWarningPanelUiBinder extends private final EventBus eventBus; - private static int CHECK_EDITOR_SELECTED_DURATION = 500; + private static int CHECK_EDITOR_SELECTED_DURATION = 300; + + private boolean saveAsFuzzyOpt; @Inject public ValidationWarningPanel(TableEditorMessages messages, @@ -131,10 +133,14 @@ private void copyTranslationToEditor() { && selectedTransUnit.getId().equals(transUnitId)) { timer.cancel(); eventBus.fireEvent(new CopyDataToEditorEvent(targets)); - hide(); + if(saveAsFuzzyOpt) { + listener.saveAsFuzzy(transUnitId); + } + saveAsFuzzyOpt = false; } else { timer.schedule(CHECK_EDITOR_SELECTED_DURATION); } + hide(); } public void setListener(TargetContentsDisplay.Listener listener) { @@ -146,8 +152,9 @@ private void addListenerToButtons() { saveAsFuzzy.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - hide(); - listener.saveAsFuzzy(transUnitId); + listener.gotoRow(documentInfo, transUnitId); + saveAsFuzzyOpt = true; + copyTranslationToEditor(); } }); returnToEditor.addClickHandler(new ClickHandler() { @@ -158,7 +165,8 @@ public void onClick(ClickEvent event) { timer.cancel(); navigationService.clearData(); listener.gotoRow(documentInfo, transUnitId); - timer.schedule(CHECK_EDITOR_SELECTED_DURATION); + saveAsFuzzyOpt = false; + copyTranslationToEditor(); } }); } @@ -177,6 +185,7 @@ public void center(TransUnitId transUnitId, DocumentInfo documentInfo, private void refreshView(Map> errorMessages) { translations.clear(); errorList.clear(); + saveAsFuzzyOpt = false; for (String target : targets) { SafeHtmlBuilder builder = new SafeHtmlBuilder(); From 642e2a7855ffee19c0b8830f8d8a33a1e876b956 Mon Sep 17 00:00:00 2001 From: Sean Flanigan Date: Wed, 11 Jun 2014 15:28:42 +1000 Subject: [PATCH 14/37] Clear ehcaches before and after each JPA test --- zanata-war/src/test/java/org/zanata/ZanataJpaTest.java | 6 +++++- .../zanata/rest/service/TranslationResourceRestTest.java | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/zanata-war/src/test/java/org/zanata/ZanataJpaTest.java b/zanata-war/src/test/java/org/zanata/ZanataJpaTest.java index bdd7453c24..0c8c171ebb 100644 --- a/zanata-war/src/test/java/org/zanata/ZanataJpaTest.java +++ b/zanata-war/src/test/java/org/zanata/ZanataJpaTest.java @@ -6,6 +6,7 @@ import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; +import net.sf.ehcache.CacheManager; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.junit.After; @@ -23,7 +24,8 @@ import org.zanata.testng.TestMethodListener; @Listeners(TestMethodListener.class) -@Test +// single threaded because of ehcache (perhaps other reasons too) +@Test(singleThreaded = true) public abstract class ZanataJpaTest { private static final Logger log = LoggerFactory.getLogger(ZanataJpaTest.class); private static final String PERSIST_NAME = "zanataTestDatasourcePU"; @@ -36,6 +38,7 @@ public abstract class ZanataJpaTest { @Before protected void setupEM() { log.debug("Setting up EM"); + CacheManager.getInstance().clearAll(); em = emf.createEntityManager(); em.getTransaction().begin(); } @@ -50,6 +53,7 @@ protected void shutdownEM() { em.close(); } em = null; + CacheManager.getInstance().clearAll(); } protected EntityManager getEm() { diff --git a/zanata-war/src/test/java/org/zanata/rest/service/TranslationResourceRestTest.java b/zanata-war/src/test/java/org/zanata/rest/service/TranslationResourceRestTest.java index eee215bcfc..5c32fbc863 100644 --- a/zanata-war/src/test/java/org/zanata/rest/service/TranslationResourceRestTest.java +++ b/zanata-war/src/test/java/org/zanata/rest/service/TranslationResourceRestTest.java @@ -84,6 +84,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +// single threaded because of ehcache (perhaps other reasons too) @Test(singleThreaded = true) public class TranslationResourceRestTest extends ZanataRestTest { private static final Logger log = LoggerFactory From 2c5b438a816b0d2c3667144c0ca4c13acde06a06 Mon Sep 17 00:00:00 2001 From: Sean Flanigan Date: Wed, 28 May 2014 15:19:05 +1000 Subject: [PATCH 15/37] Add iText for PDF/email support in JavaMelody --- zanata-war/pom.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/zanata-war/pom.xml b/zanata-war/pom.xml index 57a64bc42a..54f7247552 100644 --- a/zanata-war/pom.xml +++ b/zanata-war/pom.xml @@ -138,6 +138,8 @@ com.google.protobuf:protobuf-java com.google.code.findbugs:jsr305 + + com.lowagie:itext org.jboss.as:jboss-as-controller @@ -1463,6 +1465,19 @@ 1.48.0 + + com.lowagie + itext + 2.1.7 + runtime + + + org.bouncycastle + bctsp-jdk14 + + + + org.fedorahosted.openprops openprops From 94cac7259a6e7d740fdd4c33822ca025d4e84e5d Mon Sep 17 00:00:00 2001 From: Sean Flanigan Date: Thu, 12 Jun 2014 18:00:56 +1000 Subject: [PATCH 16/37] Moved Seam bom to be the last bom --- pom.xml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index be2c47e2a8..debdae2ea7 100644 --- a/pom.xml +++ b/pom.xml @@ -111,19 +111,20 @@ pom - - org.jboss.seam - bom - ${seam.version} + org.jboss.as + jboss-as-parent + ${jboss.as.version} pom import + - org.jboss.as - jboss-as-parent - ${jboss.as.version} + org.jboss.seam + bom + ${seam.version} pom import From 06ad789f4ae8af1ca458ec0e282c351b550d68eb Mon Sep 17 00:00:00 2001 From: Sean Flanigan Date: Fri, 13 Jun 2014 17:56:02 +1000 Subject: [PATCH 17/37] Mark more dependencies as provided --- pom.xml | 8 ++++---- zanata-war/pom.xml | 5 +++++ .../webapp-jboss/WEB-INF/jboss-deployment-structure.xml | 1 + zanata-war/src/main/webapp-jboss/WEB-INF/web.xml | 6 ------ 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index debdae2ea7..a2896d9e9a 100644 --- a/pom.xml +++ b/pom.xml @@ -210,6 +210,7 @@ com.google.gwt.inject gin 1.5.0 + provided com.google.inject @@ -251,11 +252,13 @@ de.novanic.gwteventservice gwteventservice ${gwteventservice.version} + provided de.novanic.gwteventservice eventservice-rpc ${gwteventservice.version} + provided de.novanic.gwteventservice @@ -513,7 +516,7 @@ net.customware.gwt.presenter gwt-presenter 1.1.1 - compile + provided @@ -786,9 +789,6 @@ jboss7 - - true - org.slf4j diff --git a/zanata-war/pom.xml b/zanata-war/pom.xml index 329d7c29a2..80a9144a30 100644 --- a/zanata-war/pom.xml +++ b/zanata-war/pom.xml @@ -1263,6 +1263,7 @@ org.jboss.spec.javax.faces jboss-jsf-api_2.1_spec + provided org.jboss.spec.javax.transaction @@ -1343,6 +1344,7 @@ com.sun.faces jsf-impl + provided @@ -1660,6 +1662,7 @@ org.javassist javassist + provided @@ -1946,6 +1949,7 @@ org.picketbox picketbox 4.0.14.Final + provided @@ -1980,6 +1984,7 @@ com.beust jcommander 1.12 + provided commons-io diff --git a/zanata-war/src/main/webapp-jboss/WEB-INF/jboss-deployment-structure.xml b/zanata-war/src/main/webapp-jboss/WEB-INF/jboss-deployment-structure.xml index 0e999af587..f0a682330e 100644 --- a/zanata-war/src/main/webapp-jboss/WEB-INF/jboss-deployment-structure.xml +++ b/zanata-war/src/main/webapp-jboss/WEB-INF/jboss-deployment-structure.xml @@ -31,6 +31,7 @@ + diff --git a/zanata-war/src/main/webapp-jboss/WEB-INF/web.xml b/zanata-war/src/main/webapp-jboss/WEB-INF/web.xml index 8a3edaf30f..2dd4f4dd91 100644 --- a/zanata-war/src/main/webapp-jboss/WEB-INF/web.xml +++ b/zanata-war/src/main/webapp-jboss/WEB-INF/web.xml @@ -66,12 +66,6 @@ DEFAULT --> - - org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL - ${war_bundles_jsf_impl} - - - diff --git a/zanata-war/src/main/webapp/iteration/request_to_join_group.xhtml b/zanata-war/src/main/webapp/iteration/request_to_join_group.xhtml deleted file mode 100644 index 6cc054ccde..0000000000 --- a/zanata-war/src/main/webapp/iteration/request_to_join_group.xhtml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - #{messages['jsf.RequestJoinGroup']} - - - - - - diff --git a/zanata-war/src/main/webapp/version-group/request_to_join.xhtml b/zanata-war/src/main/webapp/version-group/request_to_join.xhtml index 6cc054ccde..d05e170d10 100644 --- a/zanata-war/src/main/webapp/version-group/request_to_join.xhtml +++ b/zanata-war/src/main/webapp/version-group/request_to_join.xhtml @@ -2,7 +2,11 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + xmlns:s="http://jboss.org/schema/seam/taglib" + xmlns:f="http://java.sun.com/jsf/core" + xmlns:h="http://java.sun.com/jsf/html" + xmlns:rich="http://richfaces.org/rich" + template="../WEB-INF/template/template_2x.xhtml"> @@ -10,7 +14,89 @@ name="page_title">#{messages['jsf.RequestJoinGroup']} - + + + +

+ + + +

+ + + + #{messages['jsf.ProjectName']} + #{selectableVersion.projectIteration.project.name} + + + #{messages['jsf.Version']} + #{selectableVersion.projectIteration.slug} + + + + #{messages['jsf.Actions']} + + + + + + +

#{messages['jsf.ClickSendMessageToProceedRequest']}

+ + + #{messages['jsf.email.From']} + + + + + #{messages['jsf.email.ReplyAddress']} +
#{messages['jsf.email.ReplyAddress.description']}
+ +
+ + + #{messages['jsf.email.Subject']} + + + + + #{messages['jsf.AdditionalInfo']} + + + + #{messages['jsf.email.joingrouprequest.AdditionalInfoMessage']} + + +

+ + +
+ +
+
+ + + +
+ +
+
From eb8e744f325c706b24c1f31709bf4e336f096862 Mon Sep 17 00:00:00 2001 From: Sean Flanigan Date: Wed, 18 Jun 2014 14:04:37 +1000 Subject: [PATCH 32/37] Fix Hibernate/H2 warnings in tests --- .../org/zanata/database/CustomH2Dialect.java | 36 +++++++++++++++++++ .../test/resources/META-INF/persistence.xml | 5 +-- 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 zanata-war/src/test/java/org/zanata/database/CustomH2Dialect.java diff --git a/zanata-war/src/test/java/org/zanata/database/CustomH2Dialect.java b/zanata-war/src/test/java/org/zanata/database/CustomH2Dialect.java new file mode 100644 index 0000000000..444988b928 --- /dev/null +++ b/zanata-war/src/test/java/org/zanata/database/CustomH2Dialect.java @@ -0,0 +1,36 @@ +package org.zanata.database; + +import org.hibernate.dialect.H2Dialect; + +// This class is a workaround for https://hibernate.atlassian.net/browse/HHH-7002 +public class CustomH2Dialect extends H2Dialect { + + @Override + public String getDropSequenceString(String sequenceName) { + // Adding the "if exists" clause to avoid warnings + return "drop sequence if exists " + sequenceName; + } + + @Override + public boolean dropConstraints() { + // We don't need to drop constraints before dropping tables; that just + // leads to error messages about missing tables when we don't have a + // schema in the database + return false; + } + + @Override + public boolean supportsIfExistsBeforeTableName() { + return true; + } + + @Override + public boolean supportsIfExistsAfterTableName() { + return false; + } + + @Override + public String getCascadeConstraintsString() { + return " CASCADE "; + } +} diff --git a/zanata-war/src/test/resources/META-INF/persistence.xml b/zanata-war/src/test/resources/META-INF/persistence.xml index 04a2944334..bbcf1986c9 100755 --- a/zanata-war/src/test/resources/META-INF/persistence.xml +++ b/zanata-war/src/test/resources/META-INF/persistence.xml @@ -64,7 +64,8 @@ - + + @@ -79,7 +80,7 @@ + value="org.zanata.database.CustomH2Dialect" /> Date: Thu, 19 Jun 2014 09:32:38 +1000 Subject: [PATCH 33/37] Add more sort options into version doc list: https://bugzilla.redhat.com/show_bug.cgi?id=1110959 --- .../src/main/java/org/zanata/action/VersionHomeAction.java | 6 ++++++ .../src/main/java/org/zanata/ui/AbstractListFilter.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/zanata-war/src/main/java/org/zanata/action/VersionHomeAction.java b/zanata-war/src/main/java/org/zanata/action/VersionHomeAction.java index a8ec58f472..0df803b13d 100644 --- a/zanata-war/src/main/java/org/zanata/action/VersionHomeAction.java +++ b/zanata-war/src/main/java/org/zanata/action/VersionHomeAction.java @@ -188,12 +188,18 @@ public class VersionHomeAction extends AbstractSortAction implements @Getter private SortingType documentSortingList = new SortingType( Lists.newArrayList(SortingType.SortOption.ALPHABETICAL, + SortingType.SortOption.HOURS, + SortingType.SortOption.PERCENTAGE, + SortingType.SortOption.WORDS, SortingType.SortOption.LAST_SOURCE_UPDATE, SortingType.SortOption.LAST_TRANSLATED)); @Getter private SortingType sourceDocumentSortingList = new SortingType( Lists.newArrayList(SortingType.SortOption.ALPHABETICAL, + SortingType.SortOption.HOURS, + SortingType.SortOption.PERCENTAGE, + SortingType.SortOption.WORDS, SortingType.SortOption.LAST_SOURCE_UPDATE)); @Getter diff --git a/zanata-war/src/main/java/org/zanata/ui/AbstractListFilter.java b/zanata-war/src/main/java/org/zanata/ui/AbstractListFilter.java index 88975be673..562a0c48d1 100644 --- a/zanata-war/src/main/java/org/zanata/ui/AbstractListFilter.java +++ b/zanata-war/src/main/java/org/zanata/ui/AbstractListFilter.java @@ -36,7 +36,7 @@ public abstract class AbstractListFilter { @Getter @Setter - private int pageSize = 10; + private int pageSize = 100; @Getter @Setter From b2a10a06eea4571442b184d8312a9ac520726e92 Mon Sep 17 00:00:00 2001 From: Damian Jansen Date: Wed, 7 May 2014 16:24:26 +1000 Subject: [PATCH 34/37] Convert to assertj and clean up Account tests - Annotate feature inventory - Replace hamcrest with assertj - Remove some unnecessary steps - Add 'throws Exception' on tests - Start using static variables for page messages --- .../org/zanata/page/account/RegisterPage.java | 15 +- .../org/zanata/page/account/SignInPage.java | 3 + .../DashboardAccountTab.java | 11 ++ .../org/zanata/page/utility/HomePage.java | 4 + .../feature/account/ChangePasswordTest.java | 134 +++++++++--------- .../account/InactiveUserLoginTest.java | 19 ++- .../account/InvalidEmailAddressTest.java | 12 +- .../zanata/feature/account/ProfileTest.java | 22 ++- .../zanata/feature/account/RegisterTest.java | 102 +++++++------ .../account/UsernameValidationTest.java | 8 +- .../account/ValidEmailAddressTest.java | 12 +- 11 files changed, 205 insertions(+), 137 deletions(-) diff --git a/functional-test/src/main/java/org/zanata/page/account/RegisterPage.java b/functional-test/src/main/java/org/zanata/page/account/RegisterPage.java index a58c9b39ab..5b03450f05 100644 --- a/functional-test/src/main/java/org/zanata/page/account/RegisterPage.java +++ b/functional-test/src/main/java/org/zanata/page/account/RegisterPage.java @@ -38,8 +38,19 @@ */ public class RegisterPage extends CorePage { - public final String USERNAMEVALIDATIONERROR = "Between 3 and 20 lowercase "+ - "letters, numbers and underscores only"; + public static final String USERNAME_VALIDATION_ERROR = + "Between 3 and 20 lowercase letters, numbers and underscores only"; + + public static final String USERNAME_UNAVAILABLE_ERROR = + "This username is not available"; + + public static final String MALFORMED_EMAIL_ERROR = + "not a well-formed email address"; + + public static final String REQUIRED_FIELD_ERROR = "value is required"; + + public static final String USERNAME_LENGTH_ERROR = + "size must be between 3 and 20"; @FindBy(id = "loginForm:name") private WebElement nameField; diff --git a/functional-test/src/main/java/org/zanata/page/account/SignInPage.java b/functional-test/src/main/java/org/zanata/page/account/SignInPage.java index f560ea4b21..490f6bb656 100644 --- a/functional-test/src/main/java/org/zanata/page/account/SignInPage.java +++ b/functional-test/src/main/java/org/zanata/page/account/SignInPage.java @@ -32,6 +32,9 @@ @Slf4j public class SignInPage extends CorePage { + + public static final String LOGIN_FAILED_ERROR = "Login failed"; + @FindBy(id = "loginForm:username") private WebElement usernameField; diff --git a/functional-test/src/main/java/org/zanata/page/dashboard/dashboardsettings/DashboardAccountTab.java b/functional-test/src/main/java/org/zanata/page/dashboard/dashboardsettings/DashboardAccountTab.java index 18b5d2d875..c83f342a69 100644 --- a/functional-test/src/main/java/org/zanata/page/dashboard/dashboardsettings/DashboardAccountTab.java +++ b/functional-test/src/main/java/org/zanata/page/dashboard/dashboardsettings/DashboardAccountTab.java @@ -30,6 +30,17 @@ */ public class DashboardAccountTab extends DashboardBasePage { + public static final String INCORRECT_OLD_PASSWORD_ERROR = + "Old password is incorrect, please check and try again."; + + public static final String FIELD_EMPTY_ERROR = "may not be empty"; + + public static final String PASSWORD_LENGTH_ERROR = + "size must be between 6 and 20"; + + public static final String EMAIL_TAKEN_ERROR = + "This email address is already taken"; + @FindBy(id = "email-update-form:emailField:email") private WebElement emailField; diff --git a/functional-test/src/main/java/org/zanata/page/utility/HomePage.java b/functional-test/src/main/java/org/zanata/page/utility/HomePage.java index 897ad94b94..21a18c327b 100644 --- a/functional-test/src/main/java/org/zanata/page/utility/HomePage.java +++ b/functional-test/src/main/java/org/zanata/page/utility/HomePage.java @@ -30,6 +30,10 @@ public class HomePage extends BasePage { + public static final String SIGNUP_SUCCESS_MESSAGE = + "You will soon receive an email " + + "with a link to activate your account."; + @FindBy(id = "main_body_content") private WebElement mainBodyContent; diff --git a/functional-test/src/test/java/org/zanata/feature/account/ChangePasswordTest.java b/functional-test/src/test/java/org/zanata/feature/account/ChangePasswordTest.java index cb58474245..0b43dd7699 100644 --- a/functional-test/src/test/java/org/zanata/feature/account/ChangePasswordTest.java +++ b/functional-test/src/test/java/org/zanata/feature/account/ChangePasswordTest.java @@ -20,24 +20,21 @@ */ package org.zanata.feature.account; -import org.hamcrest.Matchers; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; +import org.zanata.feature.Feature; import org.zanata.feature.testharness.ZanataTestCase; import org.zanata.feature.testharness.TestPlan.BasicAcceptanceTest; import org.zanata.feature.testharness.TestPlan.DetailedTest; import org.zanata.page.dashboard.DashboardBasePage; import org.zanata.page.dashboard.dashboardsettings.DashboardAccountTab; -import org.zanata.page.utility.HomePage; import org.zanata.util.AddUsersRule; import org.zanata.workflow.BasicWorkFlow; import org.zanata.workflow.LoginWorkFlow; -import java.util.List; - -import static org.hamcrest.MatcherAssert.assertThat; +import static org.assertj.core.api.Assertions.assertThat; /** * @author Damian Jansen fieldErrors = - new LoginWorkFlow().signIn("translator", "translator") - .goToSettingsTab() - .gotoSettingsAccountTab() - .typeOldPassword("nottherightpassword") - .typeNewPassword("somenewpassword") - .clickUpdatePasswordButton() - .getFieldErrors(); - - assertThat("Incorrect password message displayed", - fieldErrors, - Matchers.contains(incorrectPassword)); + public void changePasswordCurrentPasswordFailure() throws Exception { + DashboardAccountTab dashboardAccountTab = new LoginWorkFlow() + .signIn("translator", "translator") + .goToSettingsTab() + .gotoSettingsAccountTab() + .typeOldPassword("nottherightpassword") + .typeNewPassword("somenewpassword") + .clickUpdatePasswordButton(); + + assertThat(dashboardAccountTab.getFieldErrors()) + .contains(DashboardAccountTab.INCORRECT_OLD_PASSWORD_ERROR) + .as("The old password incorrect error is shown"); } + @Feature(summary = "The user must enter a non-empty new password " + + "to change it", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 86823) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) - public void changePasswordRequiredFieldsAreNotEmpty() { - String mayNotBeEmpty = "may not be empty"; - List fieldErrors = - new LoginWorkFlow().signIn("translator", "translator") - .goToSettingsTab() - .gotoSettingsAccountTab() - .clickUpdatePasswordButton() - .getFieldErrors(); - - assertThat("Incorrect password message displayed", - fieldErrors, - Matchers.contains(mayNotBeEmpty, mayNotBeEmpty)); + public void changePasswordRequiredFieldsAreNotEmpty() throws Exception { + DashboardAccountTab dashboardAccountTab = new LoginWorkFlow() + .signIn("translator", "translator") + .goToSettingsTab() + .gotoSettingsAccountTab() + .clickUpdatePasswordButton(); + + assertThat(dashboardAccountTab.getFieldErrors()) + .contains(DashboardAccountTab.FIELD_EMPTY_ERROR) + .as("Empty password message displayed"); } + @Feature(summary = "The user must enter a new password of between 6 and " + + "20 characters in length to change it", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 86823) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) - public void changePasswordAreOfRequiredLength() { - String passwordSizeError = "size must be between 6 and 20"; + public void changePasswordAreOfRequiredLength() throws Exception { String tooShort = "test5"; String tooLong = "t12345678901234567890"; - DashboardAccountTab dashboardAccountTab = - new LoginWorkFlow().signIn("translator", "translator") - .goToSettingsTab() - .gotoSettingsAccountTab() - .typeOldPassword("translator"); - - List fieldErrors = - dashboardAccountTab - .typeNewPassword(tooShort) - .clickUpdatePasswordButton() - .waitForFieldErrors(); - assertThat("Incorrect password message displayed", - fieldErrors, - Matchers.hasItem(passwordSizeError)); - - fieldErrors = - dashboardAccountTab - .typeNewPassword(tooLong) - .clickUpdatePasswordButton() - .waitForFieldErrors(); - assertThat("Incorrect password message displayed", - fieldErrors, - Matchers.hasItem(passwordSizeError)); + DashboardAccountTab dashboardAccountTab = new LoginWorkFlow() + .signIn("translator", "translator") + .goToSettingsTab() + .gotoSettingsAccountTab() + .typeOldPassword("translator") + .typeNewPassword(tooShort) + .clickUpdatePasswordButton(); + + assertThat(dashboardAccountTab.getFieldErrors()) + .contains(DashboardAccountTab.PASSWORD_LENGTH_ERROR) + .as("Incorrect password length message displayed"); + + dashboardAccountTab = dashboardAccountTab + .typeNewPassword(tooLong) + .clickUpdatePasswordButton(); + + assertThat(dashboardAccountTab.getFieldErrors()) + .contains(DashboardAccountTab.PASSWORD_LENGTH_ERROR) + .as("Incorrect password length message displayed"); } } diff --git a/functional-test/src/test/java/org/zanata/feature/account/InactiveUserLoginTest.java b/functional-test/src/test/java/org/zanata/feature/account/InactiveUserLoginTest.java index f7c4e4eec9..6cd6eb0e7d 100644 --- a/functional-test/src/test/java/org/zanata/feature/account/InactiveUserLoginTest.java +++ b/functional-test/src/test/java/org/zanata/feature/account/InactiveUserLoginTest.java @@ -20,18 +20,18 @@ */ package org.zanata.feature.account; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; - import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; +import org.zanata.feature.Feature; import org.zanata.feature.testharness.ZanataTestCase; import org.zanata.feature.testharness.TestPlan.DetailedTest; import org.zanata.page.account.SignInPage; import org.zanata.util.AddUsersRule; import org.zanata.workflow.LoginWorkFlow; +import static org.assertj.core.api.Assertions.assertThat; + /** * @author Carlos Munoz camunoz@redhat.com @@ -42,15 +42,20 @@ public class InactiveUserLoginTest extends ZanataTestCase { @Rule public AddUsersRule addUsersRule = new AddUsersRule(); + @Feature(summary = "The user needs to verify their account before they may " + + "log in", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 181714) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) - public void loginWithInactiveUser() { + public void loginWithInactiveUser() throws Exception { new LoginWorkFlow().signIn("admin", "admin").goToAdministration() .goToManageUserPage().editUserAccount("translator") .clickEnabled().saveUser().logout(); - SignInPage signInPage = - new LoginWorkFlow().signInFailure("translator", "translator"); - assertThat(signInPage.getNotificationMessage(), is("Login failed")); + SignInPage signInPage = new LoginWorkFlow() + .signInFailure("translator", "translator"); + assertThat(signInPage.getNotificationMessage()) + .isEqualTo(SignInPage.LOGIN_FAILED_ERROR) + .as("The inactive user cannot log in"); } } diff --git a/functional-test/src/test/java/org/zanata/feature/account/InvalidEmailAddressTest.java b/functional-test/src/test/java/org/zanata/feature/account/InvalidEmailAddressTest.java index 9ec3cc2ede..8fa5b0e297 100644 --- a/functional-test/src/test/java/org/zanata/feature/account/InvalidEmailAddressTest.java +++ b/functional-test/src/test/java/org/zanata/feature/account/InvalidEmailAddressTest.java @@ -30,6 +30,7 @@ import org.junit.experimental.theories.Theory; import org.junit.rules.Timeout; import org.junit.runner.RunWith; +import org.zanata.feature.Feature; import org.zanata.feature.testharness.ZanataTestCase; import org.zanata.feature.testharness.TestPlan.DetailedTest; import org.zanata.page.account.RegisterPage; @@ -177,18 +178,21 @@ public void setUp() { new BasicWorkFlow().goToHome().deleteCookiesAndRefresh(); } + @Feature(summary = "The user must enter a valid email address to " + + "register with Zanata", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 0) @Theory - public void invalidEmailRejection(InvalidEmailAddressRFC2822 emailAddress) { + public void invalidEmailRejection(InvalidEmailAddressRFC2822 emailAddress) + throws Exception { log.info(testName.getMethodName() + " : " + emailAddress); - String errorMsg = "not a well-formed email address"; - RegisterPage registerPage = new BasicWorkFlow() .goToHome() .goToRegistration() .enterEmail(emailAddress.toString()); registerPage.defocus(); - assertThat(errorMsg).isIn(registerPage.waitForFieldErrors()) + assertThat(registerPage.waitForFieldErrors()) + .contains(RegisterPage.MALFORMED_EMAIL_ERROR) .as("The email formation error is displayed"); } diff --git a/functional-test/src/test/java/org/zanata/feature/account/ProfileTest.java b/functional-test/src/test/java/org/zanata/feature/account/ProfileTest.java index 0a7d2a78c6..6fc0b01643 100644 --- a/functional-test/src/test/java/org/zanata/feature/account/ProfileTest.java +++ b/functional-test/src/test/java/org/zanata/feature/account/ProfileTest.java @@ -23,8 +23,10 @@ import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; +import org.zanata.feature.Feature; import org.zanata.feature.testharness.ZanataTestCase; import org.zanata.feature.testharness.TestPlan.DetailedTest; +import org.zanata.page.account.RegisterPage; import org.zanata.page.dashboard.dashboardsettings.DashboardAccountTab; import org.zanata.page.dashboard.dashboardsettings.DashboardClientTab; import org.zanata.page.dashboard.dashboardsettings.DashboardProfileTab; @@ -49,8 +51,10 @@ public class ProfileTest extends ZanataTestCase { private static final String serverUrl = PropertiesHolder .getProperty(Constants.zanataInstance.value()); + @Feature(summary = "The user can view their account details", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 86819) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) - public void verifyProfileData() { + public void verifyProfileData() throws Exception { DashboardClientTab dashboardClientTab = new LoginWorkFlow() .signIn("admin", "admin") .goToSettingsTab() @@ -72,8 +76,10 @@ public void verifyProfileData() { .as("The configuration api key is correct"); } + @Feature(summary = "The user can change their API key", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 0) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) - public void changeUsersApiKey() { + public void changeUsersApiKey() throws Exception { DashboardClientTab dashboardClientTab = new LoginWorkFlow() .signIn("translator", "translator") .goToSettingsTab() @@ -95,8 +101,10 @@ public void changeUsersApiKey() { .as("The configuration api key matches the label"); } + @Feature(summary = "The user can change their display name", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 86822) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) - public void changeUsersName() { + public void changeUsersName() throws Exception { DashboardProfileTab dashboardProfileTab = new LoginWorkFlow() .signIn("translator", "translator") .goToSettingsTab() @@ -110,8 +118,10 @@ public void changeUsersName() { .as("The user's name has been changed"); } + @Feature(summary = "The user's email address change is validated", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 86822) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) - public void emailValidationIsUsedOnProfileEdit() { + public void emailValidationIsUsedOnProfileEdit() throws Exception { DashboardAccountTab dashboardAccountTab = new LoginWorkFlow() .signIn("translator", "translator") .goToSettingsTab() @@ -120,7 +130,7 @@ public void emailValidationIsUsedOnProfileEdit() { .clickUpdateEmailButton(); assertThat(dashboardAccountTab.waitForFieldErrors()) - .contains("This email address is already taken") + .contains(DashboardAccountTab.EMAIL_TAKEN_ERROR) .as("The email is rejected, being already taken"); dashboardAccountTab = dashboardAccountTab @@ -131,7 +141,7 @@ public void emailValidationIsUsedOnProfileEdit() { .clickUpdateEmailButton(); assertThat(dashboardAccountTab.waitForFieldErrors()) - .contains("not a well-formed email address") + .contains(RegisterPage.MALFORMED_EMAIL_ERROR) .as("The email is rejected, being of invalid format"); } } diff --git a/functional-test/src/test/java/org/zanata/feature/account/RegisterTest.java b/functional-test/src/test/java/org/zanata/feature/account/RegisterTest.java index d2b02afed8..808e1955d0 100644 --- a/functional-test/src/test/java/org/zanata/feature/account/RegisterTest.java +++ b/functional-test/src/test/java/org/zanata/feature/account/RegisterTest.java @@ -20,18 +20,16 @@ */ package org.zanata.feature.account; -import static org.hamcrest.MatcherAssert.assertThat; - import java.util.HashMap; import java.util.List; import java.util.Map; -import org.hamcrest.Matchers; import org.junit.Before; import org.junit.ClassRule; import org.junit.Ignore; import org.junit.Test; import org.junit.experimental.categories.Category; +import org.zanata.feature.Feature; import org.zanata.feature.testharness.ZanataTestCase; import org.zanata.feature.testharness.TestPlan.BasicAcceptanceTest; import org.zanata.feature.testharness.TestPlan.DetailedTest; @@ -42,6 +40,8 @@ import org.zanata.util.rfc2822.InvalidEmailAddressRFC2822; import org.zanata.workflow.BasicWorkFlow; +import static org.assertj.core.api.Assertions.assertThat; + /** * @author Damian Jansen djansen@redhat.com @@ -72,63 +72,73 @@ public void before() { homePage.deleteCookiesAndRefresh(); } + @Feature(summary = "The user can register an account with Zanata", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 86816) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) @Category(BasicAcceptanceTest.class) - public void registerSuccessful() { - String successMessage = "You will soon receive an email with a link "+ - "to activate your account."; + public void registerSuccessful() throws Exception { RegisterPage registerPage = homePage .goToRegistration() .setFields(fields); - assertThat("No errors are shown", registerPage.getFieldErrors().size(), - Matchers.equalTo(0)); + assertThat(registerPage.getFieldErrors().size()).isEqualTo(0) + .as("No errors are shown"); homePage = registerPage.register(); - assertThat("Signup is successful", homePage.getNotificationMessage(), - Matchers.equalTo(successMessage)); + assertThat(homePage.getNotificationMessage()) + .isEqualTo(HomePage.SIGNUP_SUCCESS_MESSAGE) + .as("Sign up is successful"); } + @Feature(summary = "The user must enter a username of between 3 and " + + "20 (inclusive) characters to register", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 0) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) - public void usernameLengthValidation() { + public void usernameLengthValidation() throws Exception { fields.put("email", "length.test@test.com"); RegisterPage registerPage = homePage.goToRegistration(); fields.put("username", "bo"); registerPage = registerPage.setFields(fields); - registerPage.defocus(); - assertThat("Size errors are shown for string too short", - containsUsernameError(registerPage.getFieldErrors())); + + assertThat(containsUsernameError(registerPage.getFieldErrors())) + .isTrue() + .as("Size errors are shown for string too short"); fields.put("username", "testusername"); registerPage = registerPage.setFields(fields); - registerPage.defocus(); - assertThat("Size errors are not shown", - !containsUsernameError(registerPage.getFieldErrors())); + + assertThat(containsUsernameError(registerPage.getFieldErrors())) + .isFalse() + .as("Size errors are not shown"); fields.put("username", "12345678901234567890a"); registerPage = registerPage.setFields(fields); - registerPage.defocus(); - assertThat("Size errors are shown for string too long", - containsUsernameError(registerPage.getFieldErrors())); + + assertThat(containsUsernameError(registerPage.getFieldErrors())) + .isTrue() + .as("Size errors are shown for string too long"); } + @Feature(summary = "The user must enter a unique username to register", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 0) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) - public void usernamePreExisting() { - String errorMsg = "This username is not available"; + public void usernamePreExisting() throws Exception { RegisterPage registerPage = homePage .goToRegistration() .enterUserName("admin"); registerPage.defocus(); - assertThat("Username not available message is shown", - registerPage.waitForFieldErrors(), Matchers.hasItem(errorMsg)); + assertThat(registerPage.waitForFieldErrors()) + .contains(RegisterPage.USERNAME_UNAVAILABLE_ERROR) + .as("Username not available message is shown"); } + @Feature(summary = "The user must enter a valid email address to register", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 0) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) - public void emailValidation() { - String errorMsg = "not a well-formed email address"; + public void emailValidation() throws Exception { fields.put("email", InvalidEmailAddressRFC2822.PLAIN_ADDRESS.toString()); fields.put("username", "emailvalidation"); @@ -137,33 +147,35 @@ public void emailValidation() { .setFields(fields); registerPage.defocus(); - assertThat("Email validation errors are shown", - registerPage.getFieldErrors(), Matchers.hasItem(errorMsg)); + assertThat(registerPage.getFieldErrors()) + .contains(RegisterPage.MALFORMED_EMAIL_ERROR) + .as("Email validation errors are shown"); } + @Feature(summary = "The user must enter all necessary fields to register", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 0) @Test(timeout = ZanataTestCase.MAX_SHORT_TEST_DURATION) @Ignore("RHBZ-1024150") - public void requiredFields() { - String errorMsg = "value is required"; + public void requiredFields() throws Exception { fields.put("name", ""); fields.put("username", ""); fields.put("email", ""); fields.put("password", ""); - RegisterPage registerPage = homePage.goToRegistration().setFields(fields); registerPage.defocus(); - assertThat("Value is required shows for all fields", - registerPage.waitForFieldErrors(), - Matchers.contains(errorMsg, - registerPage.USERNAMEVALIDATIONERROR, - errorMsg, errorMsg)); + assertThat(registerPage.waitForFieldErrors()).containsExactly( + RegisterPage.REQUIRED_FIELD_ERROR, + RegisterPage.USERNAME_VALIDATION_ERROR, + RegisterPage.REQUIRED_FIELD_ERROR, + RegisterPage.REQUIRED_FIELD_ERROR) + .as("Value is required shows for all fields"); } - /* - * Bugs - */ + @Feature(summary = "The user must enter at least one alphanumeric " + + "character in their username", + bugzilla = 981498) @Test(expected = AssertionError.class) public void bug981498_underscoreRules() { fields.put("email", "bug981498test@example.com"); @@ -171,9 +183,10 @@ public void bug981498_underscoreRules() { RegisterPage registerPage = homePage.goToRegistration().setFields(fields); registerPage.defocus(); - assertThat("A username of all underscores is not valid", - registerPage.getFieldErrors(), - Matchers.hasItem(registerPage.USERNAMEVALIDATIONERROR)); + + assertThat(registerPage.getFieldErrors()) + .contains(RegisterPage.USERNAME_VALIDATION_ERROR) + .as("A username of all underscores is not valid"); } /* @@ -181,8 +194,7 @@ public void bug981498_underscoreRules() { * the given input. */ private boolean containsUsernameError(List errors) { - return errors.contains("Between 3 and 20 lowercase "+ - "letters, numbers and underscores only") || - errors.contains("size must be between 3 and 20"); + return errors.contains(RegisterPage.USERNAME_VALIDATION_ERROR) || + errors.contains(RegisterPage.USERNAME_LENGTH_ERROR); } } diff --git a/functional-test/src/test/java/org/zanata/feature/account/UsernameValidationTest.java b/functional-test/src/test/java/org/zanata/feature/account/UsernameValidationTest.java index 7591b2ea09..4f121eb440 100644 --- a/functional-test/src/test/java/org/zanata/feature/account/UsernameValidationTest.java +++ b/functional-test/src/test/java/org/zanata/feature/account/UsernameValidationTest.java @@ -29,6 +29,7 @@ import org.junit.experimental.theories.Theory; import org.junit.rules.Timeout; import org.junit.runner.RunWith; +import org.zanata.feature.Feature; import org.zanata.feature.testharness.ZanataTestCase; import org.zanata.feature.testharness.TestPlan.DetailedTest; import org.zanata.page.account.RegisterPage; @@ -106,8 +107,11 @@ public void setUp() { new BasicWorkFlow().goToHome().deleteCookiesAndRefresh(); } + @Feature(summary = "The user must enter acceptable username characters" + + "to register", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 0) @Theory - public void usernameCharacterValidation(String username) { + public void usernameCharacterValidation(String username) throws Exception { log.info(testName.getMethodName() + " : " + username); RegisterPage registerPage = new BasicWorkFlow() .goToHome() @@ -116,7 +120,7 @@ public void usernameCharacterValidation(String username) { registerPage.defocus(); assertThat(registerPage.waitForFieldErrors()) - .contains(registerPage.USERNAMEVALIDATIONERROR) + .contains(RegisterPage.USERNAME_VALIDATION_ERROR) .as("Username validation errors are shown"); } } diff --git a/functional-test/src/test/java/org/zanata/feature/account/ValidEmailAddressTest.java b/functional-test/src/test/java/org/zanata/feature/account/ValidEmailAddressTest.java index 69aa6e29c7..6e0626abe5 100644 --- a/functional-test/src/test/java/org/zanata/feature/account/ValidEmailAddressTest.java +++ b/functional-test/src/test/java/org/zanata/feature/account/ValidEmailAddressTest.java @@ -29,6 +29,7 @@ import org.junit.experimental.theories.Theory; import org.junit.rules.Timeout; import org.junit.runner.RunWith; +import org.zanata.feature.Feature; import org.zanata.feature.testharness.ZanataTestCase; import org.zanata.feature.testharness.TestPlan.DetailedTest; import org.zanata.page.account.RegisterPage; @@ -102,18 +103,21 @@ public void setUp() { new BasicWorkFlow().goToHome().deleteCookiesAndRefresh(); } + @Feature(summary = "The system will allow all acceptable forms of " + + "email address for registration", + tcmsTestPlanIds = 5316, tcmsTestCaseIds = 0) @Theory - public void validEmailAcceptance(ValidEmailAddressRFC2822 emailAddress) { + public void validEmailAcceptance(ValidEmailAddressRFC2822 emailAddress) + throws Exception { log.info(testName.getMethodName() + " : " + emailAddress); - String errorMsg = "not a well-formed email address"; RegisterPage registerPage = new BasicWorkFlow() .goToHome() .goToRegistration() .enterEmail(emailAddress.toString()) .registerFailure(); - registerPage.defocus(); - assertThat(errorMsg).isNotIn(registerPage.getFieldErrors()) + assertThat(RegisterPage.MALFORMED_EMAIL_ERROR) + .isNotIn(registerPage.getFieldErrors()) .as("Email validation errors are not shown"); } From 5b0bed830c522d901913211d6b4e439ae80a895e Mon Sep 17 00:00:00 2001 From: Alex Eng Date: Thu, 19 Jun 2014 10:30:03 +1000 Subject: [PATCH 35/37] fix unit test --- .../src/test/java/org/zanata/ui/InMemoryListFilterTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/zanata-war/src/test/java/org/zanata/ui/InMemoryListFilterTest.java b/zanata-war/src/test/java/org/zanata/ui/InMemoryListFilterTest.java index a8caaf7b4f..171d9f2c6a 100644 --- a/zanata-war/src/test/java/org/zanata/ui/InMemoryListFilterTest.java +++ b/zanata-war/src/test/java/org/zanata/ui/InMemoryListFilterTest.java @@ -52,6 +52,7 @@ protected boolean include(Integer elem, String filter) { return elem.toString().contains(filter); } }; + listFilter.setPageSize(10); } @Test From e770711314b8c3111f10259a0a1781d3a4457c37 Mon Sep 17 00:00:00 2001 From: Patrick Huang Date: Thu, 19 Jun 2014 15:14:10 +1000 Subject: [PATCH 36/37] rhbz1111012 - edit selected user --- zanata-war/src/main/webapp/WEB-INF/pages.xml | 2 +- zanata-war/src/main/webapp/admin/usermanager.xhtml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/zanata-war/src/main/webapp/WEB-INF/pages.xml b/zanata-war/src/main/webapp/WEB-INF/pages.xml index d8d1c192ee..d8f3a79055 100644 --- a/zanata-war/src/main/webapp/WEB-INF/pages.xml +++ b/zanata-war/src/main/webapp/WEB-INF/pages.xml @@ -302,7 +302,7 @@ - +
diff --git a/zanata-war/src/main/webapp/admin/usermanager.xhtml b/zanata-war/src/main/webapp/admin/usermanager.xhtml index c9aefb5cbf..a332710381 100644 --- a/zanata-war/src/main/webapp/admin/usermanager.xhtml +++ b/zanata-war/src/main/webapp/admin/usermanager.xhtml @@ -110,10 +110,10 @@ #{messages['jsf.Actions']} + action="#{userAction.editUser(user)}"/> From ae5f06bc9ad1559a0866fa3003e5e27581dc66ba Mon Sep 17 00:00:00 2001 From: Alex Eng Date: Fri, 20 Jun 2014 15:07:36 +1000 Subject: [PATCH 37/37] Fix edit user after filter --- zanata-war/src/main/webapp/WEB-INF/pages.xml | 2 +- .../src/main/webapp/admin/usermanager.xhtml | 21 +++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/zanata-war/src/main/webapp/WEB-INF/pages.xml b/zanata-war/src/main/webapp/WEB-INF/pages.xml index d8f3a79055..61b7fec5ab 100644 --- a/zanata-war/src/main/webapp/WEB-INF/pages.xml +++ b/zanata-war/src/main/webapp/WEB-INF/pages.xml @@ -302,7 +302,7 @@ - + diff --git a/zanata-war/src/main/webapp/admin/usermanager.xhtml b/zanata-war/src/main/webapp/admin/usermanager.xhtml index a332710381..c1e4db065e 100644 --- a/zanata-war/src/main/webapp/admin/usermanager.xhtml +++ b/zanata-war/src/main/webapp/admin/usermanager.xhtml @@ -31,6 +31,13 @@ focus(); } + + + + + + + @@ -109,13 +116,15 @@ #{messages['jsf.Actions']} - + + + + -