From f583354764a5cdf6a5531ecfe6d35e98e308a8e0 Mon Sep 17 00:00:00 2001 From: Julian Horner <julianhorner@web.de> Date: Sat, 4 Jul 2020 17:49:43 +0200 Subject: [PATCH] Finish chapter 8 --- bin/.gitignore | 5 + bin/README.md | 1 + bin/azure-pipelines.yml | 31 ++++++ bin/pom.xml | 48 +++++++++ .../controller/DonateMoneyController.class | Bin 0 -> 4369 bytes .../controller/EditCampaignController.class | Bin 0 -> 2498 bytes .../EditDonationFormController.class | Bin 0 -> 3937 bytes .../controller/ListCampaignsController.class | Bin 0 -> 3458 bytes .../controller/ListDonationsController.class | Bin 0 -> 1476 bytes .../de/dpunkt/myaktion/controller/Pages.class | Bin 0 -> 1195 bytes .../myaktion/data/CampaignListProducer.class | Bin 0 -> 3902 bytes .../myaktion/data/CampaignProducer$Mode.class | Bin 0 -> 1848 bytes .../myaktion/data/CampaignProducer.class | Bin 0 -> 2683 bytes .../de/dpunkt/myaktion/model/Account.class | Bin 0 -> 2289 bytes .../de/dpunkt/myaktion/model/Campaign.class | Bin 0 -> 4151 bytes .../myaktion/model/Donation$Status.class | Bin 0 -> 1561 bytes .../de/dpunkt/myaktion/model/Donation.class | Bin 0 -> 3246 bytes bin/src/main/resources/messages_de.properties | 66 ++++++++++++ bin/src/main/resources/messages_en.properties | 66 ++++++++++++ bin/src/main/webapp/WEB-INF/beans.xml | 6 ++ bin/src/main/webapp/WEB-INF/faces-config.xml | 18 ++++ bin/src/main/webapp/contracts/de/screen.css | 35 +++++++ .../main/webapp/contracts/de/template.xhtml | 27 +++++ bin/src/main/webapp/contracts/en/screen.css | 35 +++++++ .../main/webapp/contracts/en/template.xhtml | 27 +++++ bin/src/main/webapp/donateMoney.xhtml | 74 +++++++++++++ bin/src/main/webapp/editCampaign.xhtml | 99 ++++++++++++++++++ bin/src/main/webapp/editDonationForm.xhtml | 41 ++++++++ bin/src/main/webapp/index.html | 5 + bin/src/main/webapp/index.xhtml | 14 +++ bin/src/main/webapp/listCampaigns.xhtml | 79 ++++++++++++++ bin/src/main/webapp/listDonations.xhtml | 76 ++++++++++++++ .../de/dpunkt/myaktion/model/Donation.java | 16 ++- .../myaktion/scheduler/SchedulerBean.java | 26 +++++ .../services/CampaignServiceBean.java | 27 ++--- .../myaktion/services/DonationService.java | 2 + .../services/DonationServiceBean.java | 30 +++++- src/main/resources/messages_de.properties | 5 +- src/main/resources/messages_en.properties | 2 + src/main/webapp/WEB-INF/jboss-ejb3.xml | 6 +- 40 files changed, 839 insertions(+), 28 deletions(-) create mode 100644 bin/.gitignore create mode 100644 bin/README.md create mode 100644 bin/azure-pipelines.yml create mode 100644 bin/pom.xml create mode 100644 bin/src/main/java/de/dpunkt/myaktion/controller/DonateMoneyController.class create mode 100644 bin/src/main/java/de/dpunkt/myaktion/controller/EditCampaignController.class create mode 100644 bin/src/main/java/de/dpunkt/myaktion/controller/EditDonationFormController.class create mode 100644 bin/src/main/java/de/dpunkt/myaktion/controller/ListCampaignsController.class create mode 100644 bin/src/main/java/de/dpunkt/myaktion/controller/ListDonationsController.class create mode 100644 bin/src/main/java/de/dpunkt/myaktion/controller/Pages.class create mode 100644 bin/src/main/java/de/dpunkt/myaktion/data/CampaignListProducer.class create mode 100644 bin/src/main/java/de/dpunkt/myaktion/data/CampaignProducer$Mode.class create mode 100644 bin/src/main/java/de/dpunkt/myaktion/data/CampaignProducer.class create mode 100644 bin/src/main/java/de/dpunkt/myaktion/model/Account.class create mode 100644 bin/src/main/java/de/dpunkt/myaktion/model/Campaign.class create mode 100644 bin/src/main/java/de/dpunkt/myaktion/model/Donation$Status.class create mode 100644 bin/src/main/java/de/dpunkt/myaktion/model/Donation.class create mode 100644 bin/src/main/resources/messages_de.properties create mode 100644 bin/src/main/resources/messages_en.properties create mode 100644 bin/src/main/webapp/WEB-INF/beans.xml create mode 100644 bin/src/main/webapp/WEB-INF/faces-config.xml create mode 100644 bin/src/main/webapp/contracts/de/screen.css create mode 100644 bin/src/main/webapp/contracts/de/template.xhtml create mode 100644 bin/src/main/webapp/contracts/en/screen.css create mode 100644 bin/src/main/webapp/contracts/en/template.xhtml create mode 100644 bin/src/main/webapp/donateMoney.xhtml create mode 100644 bin/src/main/webapp/editCampaign.xhtml create mode 100644 bin/src/main/webapp/editDonationForm.xhtml create mode 100644 bin/src/main/webapp/index.html create mode 100644 bin/src/main/webapp/index.xhtml create mode 100644 bin/src/main/webapp/listCampaigns.xhtml create mode 100644 bin/src/main/webapp/listDonations.xhtml create mode 100644 src/main/java/de/dpunkt/myaktion/scheduler/SchedulerBean.java diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 0000000..393434f --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1,5 @@ +/target/ +/.settings/ +/.metadata/ +.classpath +.project \ No newline at end of file diff --git a/bin/README.md b/bin/README.md new file mode 100644 index 0000000..9ae9e86 --- /dev/null +++ b/bin/README.md @@ -0,0 +1 @@ +ab \ No newline at end of file diff --git a/bin/azure-pipelines.yml b/bin/azure-pipelines.yml new file mode 100644 index 0000000..bbe87cb --- /dev/null +++ b/bin/azure-pipelines.yml @@ -0,0 +1,31 @@ +# Maven +# Build your Java project and run tests with Apache Maven. +# Add steps that analyze code, save build artifacts, deploy, and more: +# https://docs.microsoft.com/azure/devops/pipelines/languages/java + +trigger: +- master + +pool: + vmImage: 'ubuntu-latest' + +steps: +- task: Maven@3 + inputs: + mavenPomFile: 'pom.xml' + mavenOptions: '-Xmx3072m' + javaHomeOption: 'JDKVersion' + jdkVersionOption: '1.8' + jdkArchitectureOption: 'x64' + publishJUnitResults: true + testResultsFiles: '**/surefire-reports/TEST-*.xml' + goals: 'package' + +- task: AzureRmWebAppDeployment@4 + inputs: + ConnectionType: 'AzureRM' + azureSubscription: 'Azure for Students (d67e4eff-f95b-4837-b21e-2daef7374625)' + appType: 'webAppLinux' + WebAppName: 'tech-recruiting' + packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.war' + RuntimeStack: 'WILDFLY|14-jre8' diff --git a/bin/pom.xml b/bin/pom.xml new file mode 100644 index 0000000..0cb5aa5 --- /dev/null +++ b/bin/pom.xml @@ -0,0 +1,48 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>de.dpunkt</groupId> + <artifactId>my-aktion</artifactId> + <version>0.0.1</version> + <packaging>war</packaging> + + <dependencies> + <dependency> + <groupId>jakarta.platform</groupId> + <artifactId>jakarta.jakartaee-api</artifactId> + <version>8.0.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.eclipse.microprofile</groupId> + <artifactId>microprofile</artifactId> + <version>3.0</version> + <type>pom</type> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.primefaces</groupId> + <artifactId>primefaces</artifactId> + <version>8.0</version> + </dependency> + </dependencies> + + <build> + <finalName>my-aktion</finalName> + <plugins> + <plugin> + <groupId>org.wildfly.plugins</groupId> + <artifactId>wildfly-maven-plugin</artifactId> + <version>2.0.2.Final</version> + </plugin> + </plugins> + </build> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.source>1.8</maven.compiler.source> + <maven.compiler.target>1.8</maven.compiler.target> + <failOnMissingWebXml>false</failOnMissingWebXml> + </properties> +</project> \ No newline at end of file diff --git a/bin/src/main/java/de/dpunkt/myaktion/controller/DonateMoneyController.class b/bin/src/main/java/de/dpunkt/myaktion/controller/DonateMoneyController.class new file mode 100644 index 0000000000000000000000000000000000000000..0139d27612bbd3745352d2684725c81b3563c90a GIT binary patch literal 4369 zcmeHKTXP#V6g~=R)^;7zhJ;JXMGZHH%bK>KKvD{c(+uu7g^AP5@F?#pwwhgO(P}dZ z{|a6hU<Tg#Q4B}Ban~VByd6A+hdyXmm!nUgq;rnW`Qy)DeglA2*m7Wsz(%aSX2^tW zK4M3#>GP%^CGyZT!xMIBgpy59NuyN|aNXQek{Q0EBtL0A?sZ_Az?F1%z+}Jqb?*`P z40gp_3l{8i9V5)c_7(whpTI26j17}!p9KlO)LFmr^Q}2=mq69<W7ATB(gfx^IbPRj zA^YnDoL>KQxaP4iVxlkGK7pA|N2TKx-_pai2-G?$RjlK@nL9!XbC<w#jg@@@(=Fw5 z2Nns;<%`_YTImYBM4TTUO3h;x9C4p|DvU&sV$w*fUcke6jn=Ar15V9J#Hj^v?XKNy z*VJQDDnomm4nbVnHdMq^NMC3?nBWA54!Gvh!xav+3bFlNf@3~)y@16rJrDtpvsHYK zU3Ms9-XZIAy6kf|yCHXYLvDUU%hXpqrj|m;j5nYLneyWZ*B!;cJ9q7!yD9&R5i=el zjFdLneuXO7=6SKih@gz%@&8Q7=Y@p2Jhpn=^;CpMdH$ZMQIw@xQL8>+;aHh&Y8~Qx zhFUcSF0+712w6)RgEKUoF=Fj73WO&NjgyFLv=lUIop?rRnwdgl#cF*beSRP$_g%V^ z#K!7kIt{Hr$Rl;gDMMu)oJFWrOOhxlR$|vrO{65{|3qwZdiD&dy3ITu+gB1_wK29d zMzmJl#Rn<T9^XWBnvAzdm)t>@X5W;HomnZ-BZhB1da_BIZW%?Y!2-NehpVteV6kyN za<Gs7TnC-dgCy*6y=Qsa5JPzwot*MM?VL6P5ff;2{&iG@amQ?*o7PC6QfaJYp-Kgo z2@Fca858kJNF+W>q}s@M*n_!@B!|w1KpiO#Tk92Q5Qs|99L^Y{Nae(k64D*YBKbzn z$P%t2;k`UkTtLQo7?-IFGIt3CC772{uWA_~<b|w9c-4^R=Hqx3$MS}+hP$i4Dj`2k zisu+NG8&+a5q;)yE>>ksFuJKj-o{9sz*2gjf6t53;F`d--9#D@^0qt@u|U_eVKam@ zr$A3L*Ethc+AOD&MvquqY)czfiP&&yz7kwB?F~*GxI>^a)F1~iubH-f!htVQ2}h$! z2R6?nW|<zN(2l@RR`&NWgNflfU}A&`;U!qYGJ`D#TT@WMQiIEBy?*+ih3C`u99+SF z4P~#wJbqum)+(Y9+xsgld^`W*Pw?{Zsq8iUT2#RDDt_yk6ubtnr+se##h&vB*9#Eb zLWDQrtr3JNM9nx9A>1rPcpKgsLCAOUZUKkeg$OI~-Uvd@p$K8E5aE6JU<4uO@L>Um zyM+i%yuth=a}Gran}rA;JpqU9LWCPnz~O!&!p(o+aI4@Pz9~SMhL2GLrr<VwVl@G4 ZpW^>BENfT*T3G6+>Fe-0e1ST<@fS-n1APDh literal 0 HcmV?d00001 diff --git a/bin/src/main/java/de/dpunkt/myaktion/controller/EditCampaignController.class b/bin/src/main/java/de/dpunkt/myaktion/controller/EditCampaignController.class new file mode 100644 index 0000000000000000000000000000000000000000..98a98e86f79354ec86eec0488b81fd92e40489ad GIT binary patch literal 2498 zcmdT`>rNCg6h4L3S=LpMi#NPf5LvwJc;S~Cje^ECD;gI_{8>6>Da^E!PKSuk;FI_Q zCYtDfU&Uw8cslFIB8$65V&ac>=A8NZ_1t<opTE8T2mrHi(}O+&4-&)uh)LzIvrXm) z!Vlt9ZCF3rVjEU!<#Vm9(P1cz|1gktjzuw(O*QvZ?LmRSP_{f|s_8#lSr^=*DiKDq za9NlHd6sJP1jrKthjC?MnX=0)OvQoek#}z<-!6P1Fv@>W*JWa#8y%!v7y`%Y`Ihba z+XTj6q{_-j)YPU-<Vq;+E2S-SMkfS{^_p^aAaE!r-X<OXNt){rckqr>(%vP|Uzu4Z zP?*z!@L-g{;I?xQjnSqE$4KGck}@LE;id>E*HJ9PY-<`DjkZL|Em|5_ToW`9JY)tz zG2<JoDd<EXs;wYb^B`BZgFHb4EfR{J(1=;SMlEuPS24QM&VgyGy0lfDY1Q8|w(O8m ztc|4^UTVsjixyoGH1}c`?A5;m1)|$tdmtJjan;q}I(B*3<rKA=GHSPCQ5slaQCCbY zibKhzrAZnKgNemjH7U2+&{kbnW~fYPssgbp71FKZ7kp=FXxq_M`ZP_f`+_LSluKcY zxQ((j(8!L6e9f?Ax>(;T=Psa5N2SY>KjO_#OBc?DHBvRZfO1=V<jmpiU0{EA=*jAR z1C?L|PLyE?P7)Za)VEtqYlqve1r64*dKS`XMVLibA_Ru(nqyC8*jZ8jp)A-ni7juw z{`bw?wZT9)*e32ZTAA5xRuRq<_}WA7>nTuqQva(Oz{@4jb4+m&7U2ScaKEC_OUMY6 z8ag#xJd&;+#yj81*|p&6XGed;<a+h23*y^YO}SQtcdbzNu@r_GzP9DTWlVgYmiDve z!BxCU^DlYAJn#vW+uN82*LVC5w46fFQ;DrwH5aiLCvYC{n#KQ+emDgO;2=sKN_|ko zQG!D#mr-{5!<qgF4F00)M|lX2;yjFqS!5#kEPa5Hm&0T4;P|I(-6@<Mi<`%BF1Ju{ z8qT0Z;4GZOc{c;?z%bR3VPX%4$qo!xJ1`Vr3N7h_i<!qIe49qOf@1~;zzrN_jL{{y J0#)?#+IQP0|LFh# literal 0 HcmV?d00001 diff --git a/bin/src/main/java/de/dpunkt/myaktion/controller/EditDonationFormController.class b/bin/src/main/java/de/dpunkt/myaktion/controller/EditDonationFormController.class new file mode 100644 index 0000000000000000000000000000000000000000..9a971bb0e85c15b2f52f60cca6190f9e53afd478 GIT binary patch literal 3937 zcmd^CTW=dh6h33z*jZeXhJ;JYWtswYptXUPO93IJX`;AtT2v>IcpUGZ*wgIJEVHvw z!q4E(Ab|u=ec@Li@jnn}c9S}Z*G(;%h>C}uoilUh+cW3BfBgN+Zvb!`?o^<}U@b9z zGZIoYAB#QF46qr*soJ&8=s@gRsa4b0${HPpXqu~mwD+_UZhcLgXyxfv1<DL&Gl)>A zUh`r1G5VI45;RhT+h`Ixv(>uCfZb<skxnL7D7!7f6fZpa=}GYCU2%iKw8ee9qC;&M z%(Vx29c!fOea)cK?Hz8<`XY*j?5XdJ4pJYp6Dz0I=){#rsj@P{mfDkv?1s3kl(yL& z5(d?FOF2=Aaq1hXr2Uq`OZBB~2IUnUU<DQ!%namMHAb5%yw0Zn+ENA+9qwVkeI3Oz z%piGeG<_pVzT)2WW*>Qgekcqv#lqheJ>-i4HgX*|j&$4@=y;I_8WT<u@<>>}&n;o# zeoP`B#~`aUoYfjmw8pa$b2(%bYh!uFFE#gt(*o}zKf1*b+y0Bl6kws$9ZZ}9c6=Q> zdktNlTg?Tx2Qhln4@7h(Pb-Q;=}XI#G)6-XK<;c(-)h5i*RL;enebEvxFZ$8?a&U* zMH<@U+zq~wCf4l`7Z=KzItM-m=}mXCD3U)4a;-C@&m(0LOnG3Ofpj|H&S0OMbkBw4 z0x&|`*8%ULU5?`|6Ov_ijE=Ivat7z4vl_+54rMOq94-taNlv7CnVazZ`(&CdGo9PD z{|$YwTN{&y?S*I`;SVX2Lq0n~#y+qnd`u|kyX;<oeePO3XQRESpYvcI-mJkTxXfUo zK3tAnnVe};=6aAuT{N36J-NEAeJc5a3O~_@i)GuFRBqSXlj%38T$cm=aF@Y+eQ8** zDl9SxpQA!g%rewIP==xOQib;!Tc6aY|L+NmI>M)ky9#y2?o3LvW9P835B$fH9)lXG za&ypM*OC*YN4s~Anrn~t21G}v#>X}3qWj&^<uYqVT}C+3ZMmkso%K{STWBfQ*vQ19 zvg;C!Fn<4_0=MW_;dE)Mz-J`$@z$pTU!3^M$fK8-HuB26N##6&t3WM0{o<72GF*Tu zqAEm{ph}MiFK6@G;rk-ILi;nc=J;mmU8VOWn4|GkqHYrsqqp}f%zr=k+RyOD??jd0 z3XSfB8{eX_mUF?|@D5R=CEzp;BU~*&xL$~GZ3M!51qe3_5K8dD2!!he2)7Cl7%YuI zD7wXRA;O1bgMl7Oq?=rmMF^{f2p^3hL#q(s#uzee6d;u0CdplbM&>6T&6-4iOwT9u Q0DMW0N8a{n<}IK91H0FsVE_OC literal 0 HcmV?d00001 diff --git a/bin/src/main/java/de/dpunkt/myaktion/controller/ListCampaignsController.class b/bin/src/main/java/de/dpunkt/myaktion/controller/ListCampaignsController.class new file mode 100644 index 0000000000000000000000000000000000000000..25efcfb44fc620e81001d9d668aeee574518ff7e GIT binary patch literal 3458 zcmeHJ-EQ1O6h4zC^~P+PkT(3ZfldOnn-<muQhu6%R3#~FwJoTdM(X9no^GbGXRPr! zN_Yhxfm@z{8~!AaxZr|^;874~>^L#R8}CXH;-VKG`;0$-bAEl!AAkMy3ji#`Ck~7e zSWC3;MNCNV8QWuCz`Y<&<*xCf1GZ~~lAf=m(JBnN_PQc5Yb=VH=*wj7Xy1Wx0yEk7 zA(MUYi|uFJH@KB>Em*k4b%I2XJL?3<eF9VXWn!2#TP#fZ#QwKG{_x#r^M4}VKji*W zt048cCNSGA&MWp-2wZuTN+TlPk$WN$+abRzr83NFn-FMpJJOzyz$3y<wa!CsI05&F z5Z|9)6;hZ_37l&!Z4nq>QvrA25`pPsV>Yx_x&bediQgYf%@Y;w@qqd&iba?mNn@>0 zhbXy2-O0@zP6O_TOd}{}{x0itx)|_w?$vhT)%LMh7ipk)LeT;mG2`!0gB*N6Mia^$ z7^k+4Q`@T6KAkbwLqxIChGux7sL!mI=r*T?6(?Z({~ajcb!QDg^mt;kspqTM#^Hof z)F{fRIf%JC`H)4mm`)Uj!WV`nY0NbS7IRalzEPUydE8o}BB7}a_){T~?kT>(XO@Ph zjBe8hX=3afL{TPf2y@~Rr90WnN<w_aFlB1A&(pXD^zZT*5?%xA87*YL1~lT)LvaoT zDh__GU;Z;HW&Ho$e<OyjCc?dg#PFyBgmpIXl?xZ)l_t!<s|4m+-Qz!f?z<J+38uSP z#1GSGo9j(mskRX*A6ps2hKBOt=D67r*l{+xXV65k9Zd!5ZV(hMB5<j-bW*(rED-o+ zh*mUGDiqzd!k6VA>M)!HE(B^L5J!^&f!ABdUANMtw+Q@p)+W`MQn>j{EuYOTUsp04 z4elu&VKN2E4o<};Cd^E5IFA%cVC>5-+G@Z}0$&f|k%C}IV{2f8iw2VsN1jNSe2yxP zZ9tpA>gjsgvFJ2nx2IC=^LxUU+5CVJGn;yBUH+r}W6e0-tjXikTu0hYi=O7vd@i_V z+TS^F;5Lqgg}x4ah~6)xBJ>V?OrTlr%nl%7X`;>Z9zhQTP9L(riQ`2A3xJa&&eG@L zGEBgElpK`Cpn;bQFQD8++3rte`xjsu?+(f{@FK3WC@tgH1n=(8aPi6P-1qSEuNn3- zuJ%j2Uct4QqhKChLkUX?uHt%<fmSdqR5C2W8zqJ@WX*MWvx4DTCBwB57;aWFTpxkq zRwY9VmMX2dQDMdHN`|)w#NwR_hLsA2aq!T0V{j{rwu?{iqWm6S@8boqidPf!V;Mex Jk1*PI{sy=`1~vcy literal 0 HcmV?d00001 diff --git a/bin/src/main/java/de/dpunkt/myaktion/controller/ListDonationsController.class b/bin/src/main/java/de/dpunkt/myaktion/controller/ListDonationsController.class new file mode 100644 index 0000000000000000000000000000000000000000..54dac8bfbbff773e4685ebb5859376cb04efb919 GIT binary patch literal 1476 zcmb_c-A)uS6h2)RW*HYj1eG79;NNmHbK{j569X96EReWB;$?TH?3SHrCvAs-594c? zXrlK%h40|K@pMLH$)Xs;MgPBkJ?Hd0=j)G;p8?<rJocbMVBP2_Oqr13Av<DW%)>a# zW#5MB3F}*-WEd%FwMr7M!<I01LrLcL&HC?s52^&Fiu(zZ-EgOK$RmqehHJr+eXb2& z*lTVOAg>8b;7wzhwEHZ{`6wF0zrX)BMPTfikitGEFw$7vCs18iG56p)fyp!OO|6x# z!4#?N>`BdyN{)C;Bb8<%DeR(|R-J^W<|*~ZcYB=1JW7~GP{yJ@>vFmh^PqGxICU~O zb8>~oiW@4Gr75#fk6Ps5#~FGw$bn%CT-X9<TJU$q(hiYkN?Tgsg`yFY?u`zor(O)f zj{hIj=ElXm9jVNPXXq_z6=l?(WZWO$X6dDvW|}1;5|)}g;~L|QKdAG_DoxAZZmd#a zXf9)ZASBWq;0exIp4dTjK(}&Z-3g*7lP<C)@c^Yi-Y$eA-ZA{iORR5OEoAo!Kt4>s zbRB%SNnp0oI+I-a!kUxhWDCvS&eIOpyUsQO(=8RD#2E@5*S|KawkHgM&DIqp*BT~5 ztakbYW*V!*R@GpEK=Kc%aAk2K;I~z-BmPpj04)BYC=`i7VBt+Jtw?!O9tk5bL@%7| z%L?M+c}}S4tJf;zh_l(Ibeh1D!=-&CxMn))op^AcKz&dj9y~l(eM(0Wv?VYHWOo-u zZeSU(tYE1jFb|_JhNFk83e>QnM{o`MdQlfga0cLif{C}&lON#5mjX9~y}RZ5S?ud2 y3U0w|ToJefbJ!0v%wNDTcL75c7Llg{ci|q6KF*eKq}Z0R0X)K1Ll0K4J@^U0mbv-> literal 0 HcmV?d00001 diff --git a/bin/src/main/java/de/dpunkt/myaktion/controller/Pages.class b/bin/src/main/java/de/dpunkt/myaktion/controller/Pages.class new file mode 100644 index 0000000000000000000000000000000000000000..8f57b945cb4a1a75a73b833d27977b208d910158 GIT binary patch literal 1195 zcmd5+O>fgc5S?w)CUMiI6bh8jZTU(swh){EAysLLBITnZp;AxP#@?pe+Pl{7x}v`f z2_(34<Od;Uou)BDLgL0{?B{)YGy7)7-+zAo3IH!*y9{##o*Nwo2@^6nW#=r2co3zT zJhMS^!OpBuG6<ElTE#Kf!9E*vQ-%_O)tntOIS%@xQyy9ZE1mXWc+}kK?(ekU^#%mi zIy2J1Y9Yt32`o32G?qzwz~YQopo*VjVQiBnDHCI95Vv;QGocF92-J8at|+LSGj{vE zongD*JKF2N?^d9WRXN(OlFSvpr*tx{YDyhcVC^#Dl!ggw`El#0+wZjwE3i&rDRLsb zt0cc5u=qwuVc!y%Z)_hBC^c2Y%W#K4eRjc?)=F349w9$INX?Ck&v`^cm82rh%b}@O zqnIb=74@pa6HX%@#!MqAW#JhbOSdBKPt5nH=KC}Aw`ioep;B3zFdLpwiyHi6iryDB zu${hZr|(Mh|E}m&+esRWP*`fRlxr*(d!w_^DorPCZERCvXeJ|mEF|VR#uI#JS!|1J zpLR22-3hWNldiCda6!_mPNsl{OuB1~IK48;D$1z6Ncn$B@?ZlV)ZivOB(UE2bFAG| z)H`_fUY3lw9x`mSn|~Fu_<(8Q@a4ynJrOu^FFOCccep&>KxI1Qd&0?k`8MW#F2l3m zR&wGq4t7@<gL^kbV-0KqPB5<i0^Vi;77>*Z%|QjRSHMe%mkW3W@oE8ILwvn}Z=e!E zb8cb0o&Q?q@eRQH0vm^GcR#`XZ+RYy(PedU6Ju?{f-QK2Xbv9d@d-5WS;DiYzW`C? BQ5FCI literal 0 HcmV?d00001 diff --git a/bin/src/main/java/de/dpunkt/myaktion/data/CampaignListProducer.class b/bin/src/main/java/de/dpunkt/myaktion/data/CampaignListProducer.class new file mode 100644 index 0000000000000000000000000000000000000000..8d832d75f2b4e3af716427764f18f80db14965c3 GIT binary patch literal 3902 zcmeHKQEwbI5FRJj?A?-*Hf?}Xpl&E|DeY~Mcxs|bRa(@bOFsgKU?<j%cad*$_> z8u%^z1D-(w3EufnAjW%HHBm2|g|<BPVfWU)&!5NRna|@t|NixN0QeHV2w;K1{ldgi zCZvj<i;0L5jFP-mV;g11Vr->WQ6j8}wndf;IaGaF*l&$a${0-mEe4mWVX08V=$pgm z7+dNp&`6OUpebnl)15~Q*w+j$ZfjLoq3nT3OT6&cWdDi!@$pX#I`Ij4!C<NHX4s_8 z0nH|CX^_Ec)w$KLjo5rZfTb;|q<z3(vAc1=ptY?N3}BVP%1etL8>3AduCm~Vr^;ZV z(+MU#)>$r7;TFepqYqQeiu*k5?2nKq7^lJzC>QZq43V!V*qeH!S9_%AJhILcjRjZQ z@=Vxx#4U}+7dd(0^l0*K&w01!jOv}oHJw{#xi*$pNU3=&lw&_cUR(Yuth6$16!^l2 zZ7wLmc{HyPF~Gvb-5}Pv+w51o$gSpr+v6O=&YsBTVg^+-%kKpR${acuyK^9Q49|h> zWO*uMX?aoRXeeYUbxavsZTK|Jx*J>;yi^GuNrg#|@0K(-1z<HSJ?2tP^ccCI7#f{r z2s_Q$>2fARJJRH7gTmsjj>q*H3o`P^=&Z^O=Wt&Cb6Q3yypKpK+_tzJ$|P-{8de*` z9j-}pn_GBuOpi3_oYSIz4^>atz>;Vd=W<O1Nizj<*m)Sox>WPR)pJ%)Si{D7?186Y zeW}Knc<|K$e6EA1y5b4*+XGKBPgrw{^mSSYm*JgdcpKhju-5IrJe~*EP^NFX<9mh3 zaIee`(d@hUbceo<sfaj<*OShc9Z9MZw)+3QYN66$d5E_57O}Ov8+Fxj_2lzRt<eU~ z;Af8lqDj{_bdWH(GDDZ!@G)E5`(Ib&nTVdShK0m)R!>;N#(6}Qr(wPc+o_Y|jmo*= z!|!Nd5Ds){V*E-v`MOs7&~0CRW2$Ze46c7i2d~U<M@?iQN$noGO1~-sNRC$eXDV3I ztDs-isr0qBqg*LSl&I_ziAI=sbR59vq+<1i0o<kQkefDuh{W!6{YuT<X??X%<yZkX zf$mRq8(e_*;Q}mCE2vs+>Iva3YA;vqi-cmN;4AdLRNWq38zB4*E<ann@(Zl}QQ_XB zw_|bdYxG{8qKN%EwHSN=9}@GF^P?F|H)b&1p2>7`4%7M!rh7A(T5yXjTYyjCQ~C|* Y>ofZ8(z8Jiz&(0GXu)l`13g&$2WOz@bN~PV literal 0 HcmV?d00001 diff --git a/bin/src/main/java/de/dpunkt/myaktion/data/CampaignProducer$Mode.class b/bin/src/main/java/de/dpunkt/myaktion/data/CampaignProducer$Mode.class new file mode 100644 index 0000000000000000000000000000000000000000..4ef4b260264a2aea455e6609b7ee576882708bb0 GIT binary patch literal 1848 zcmeHIO>fgM7=FE#b<N5;1{-XASrdm%LJ0@NfdLxYhN#pHq?Sn>UB_*`C3di#Y2}Y0 z0fIX}3h_FjTBQ|+U`Gy#WBc*@`Q-7p?;pPaz(crOg((7?*6=80QbmXCm_@OO;w)E3 zE=q^&$VsiDm^l`0vovF}uU;D+=UkY3dpZ_Xs1R5v&LvFsqgUNS!5x9h?oP8q;A!h0 zY;O{ne!jCqVCIQb(mf-vyxux>)pkaz{$_LI0NrgDvD67PP64~dXfq4*r1JTVGQ#TQ zSj3d;G?NMQdC|=1ZX#0qm<F}ZKu|Z#1oZ|&pG>%`@|1F>ly<Z$=*UD!n~q9LrHZA& zY?C2w^@I_Mqy3)IDbC;JxEIrqC(K&flZmhseUw>TxR+R<V;?}q_z~+1x)zJDY->1b zYv|j$Mq@23^(m&z@d0&M2XT^NUgM{+jiIMVSXAd%w#p1;nrY+8I!ZkuwKK4j3jxJq zqM5d^7MtDXI>U_4wv#$dS<(8Sw$IXYG0ikfB$tlbJQD`_q^vVJciPaB{p%Z^9l44{ zPbxIm!yWu)dE&;=A>GTZ^E-&5O!=yphQ~|>wYD&lCGtH(rk)f1ZzA(lUN5<JABpQO zG{liIoD<%EnAe{%w*6T_0+@q^I?Tcq0!tGF(Cc5Lg&f+?)2=WbPZR=+EzMbSz>qvR z|G8Lk18E5aZJiq~UZ5zU$x##|T`zudTyHARLus8*?xhrl89o>is5g}oX4}h}uvJ(k z@aXR}9#y-%L2eV6A5(2)Dtg(I_}8j_2Nl_FJpjB4@Wz_jT7gS21At@IkGMXCm8szv z6gS#*feSvt+}p*=AE5EopMphv&mhL*uj0F2d<Sr?uu*}f0<{d+aRj)5Pk;ylD{ymb M74G1?g0ovc02Mw|$p8QV literal 0 HcmV?d00001 diff --git a/bin/src/main/java/de/dpunkt/myaktion/data/CampaignProducer.class b/bin/src/main/java/de/dpunkt/myaktion/data/CampaignProducer.class new file mode 100644 index 0000000000000000000000000000000000000000..3e85a4d05b3bec8f8f9a09f7d3f2b0eea3228324 GIT binary patch literal 2683 zcmeHJTW=gS82y|k-OZ3RZA!SbT->zK4K1?;La7KKsu09hn}WJ&BzSXXyc;(&p27A+ z4S$9g{sR&qka*;o-@wm69M5F5TV>jml1CoA<LmMHE<WG>@%K-^645Gs(4r|uH?4`f zsZhH6K<tZdEW2@D=snj>55%5RneN8IiSD{cbD>81E0e`VBu$H^8J#VUBtnn6U+z4R zk;9agMu}uw8jG{{d!I34cNopDXWBZU-L^;yIrG=|cmBM0`S%|fwWC8|MnS*6WR1~u zn#GdQ$NguccV!dD0dx8zrIq`H(W%bLHc;0w-J(TC3uEdV#$={V&$H=Y?rS4$mh8)z zM_HPyM0gMI++;h6Oznp}nBCfy+#TeSdw|f}9&YF&<&n@jb9_hg8Y1L9$Cc$u$I8Gt z$pMyz(nuWve`vB4<8KSB#XO7>VJ#o3MB2tX2F@rwI`La#iHkjfTts_fB>8eI!zuy7 zIsrnT0Lwhiq~+ekRJdrDJNQ99%wgB$X+$gZ$rP5}c^p<{p-S`2xXO<zYcTD|wudLO zDVB{e18IHA4x%iFMMuNQUB*Qj`e631NRQpqOY=lU%5hud(jcGk08A0N%<$^5bXI(J z6grker2#j@3i_f*+~n?%Zx+`173|_dd#_i(6Oh5|pnP}gJAq6+hW!(m`Bd&yxpp0i z>rRwn{k)H%_y0DpKNH#ZbPfsV9KA3{XXr&nOP&5$->Pt~dHq}HBZux5>5ep8K2aDg z_Ol3bEg;$$A5KoYU1b^FdPebu?w%h>H;_rG4mEv7bDfp3#<%HpM)^}HZhihl(gxIQ z6Seuyn3?y~tg^S`*jJIVc6`&OHyB-dGFy}fI5amhhos_kO&oU~PHx1?jc0>FR+vbB z4$()*>iN3DmJ-V7;=MvUmCBypS5_fLw|$){>k>k=(0@d>;Q3a+6eskSdfF?5vQBFE zg_1^?X!ih7=xHs@x-U4=w&(_<wf|6LQB=K`TJ#=@d2K_B-p4(Yl7!)=g23w07K*2( zO9a2-Z^$XSKr?h2qZUR})J6;Fxw1b;^Z5F;Gqix;vly-71j9G@na+K^c>YIP`mNmi z(&0|R>dWZQRl9(G5hF&g(5v`8itt(k!qr9uUUIGxrhr;;XhOKwh_FnT8#!EQ;Bcc6 z;mybRp^3w4Bf`~xVa2Tmgc<6<@+n%Ox4Z|?yN2&|w71cSLbL!@cG2GX^a9<)xQ&>- H>m&CMJedbK literal 0 HcmV?d00001 diff --git a/bin/src/main/java/de/dpunkt/myaktion/model/Account.class b/bin/src/main/java/de/dpunkt/myaktion/model/Account.class new file mode 100644 index 0000000000000000000000000000000000000000..dfe9a53daa28b1269b05072fbf8f60c46b818ebf GIT binary patch literal 2289 zcmeH|TW`}a6vt1x(o1ORC>wW}*D=&ekbndaT!aJ&B&4!EtW4t3b==NtVponku}_8s z61?-F5XVWn3k^~$O?%?S*W-VF=fwK^*Y9sX0N@GSFGIlrFV@VDsF40XJ)nNT{a`$i zBjZPhbYz5*exw2(`mY&N6KTp&bYM9N4XGUZ+x>mci~~hUBkn-6d%U${w2;FW4!Cx2 zd+>(J5eAArl@63%3MtGh2bS8MU0i*OA1OoKfyS}GJFS(jK*K3+e3F{SDm>r;VJaGn zkXke{)~X-!D1J`dYHyE|fU}Tl3>s55qC-wv0r%2;ylFmOl23~SipNAMLn3O}9x-^F ze;H#kCy!%sJX;*kQhEOrbE|2xgi&cF`<xu{8bv5Ehhu)0K{i>YWNh?=8Kp_~ciJh& z19H0WAkBd5m>`SIGZJx(zb2u|LeCOzu3G$^L3)we9U@{fkpUkF$%AvJnhX7Z(0O0? zc`EKg4KCN93QY%A+p|7oZKl!1TeUTb`ds%YI)^nZ#b~%owXpMSv1s;0?7*Y$V%~^W z_blhbvnaDG7Op(xW-D>gm3C(~qyo1b2<I@ud5SgH4@9JRid4_wrZ!&BcBXR+{~>X9 zdnO&ZJ8GgCe=lsIYneqQPFjY0r(Tg18G}Bi&eTJ@jA0${dBCS?2?}rlN;oP&IqNG) zU%`kfxY%Ayp0p(#0l43x_PKfKD=hy^&RoH^l<bsX1;@2C3RdAN&aA>UY^MrETw7G( zI@~y+aLjNshhaUJ;Wji+C=`wu@)S06749s+(8*P}y8y$(T!pm-7#`;;kOdf?<|q{K P*4TT}f=%p;SksL^rdD4m literal 0 HcmV?d00001 diff --git a/bin/src/main/java/de/dpunkt/myaktion/model/Campaign.class b/bin/src/main/java/de/dpunkt/myaktion/model/Campaign.class new file mode 100644 index 0000000000000000000000000000000000000000..472d6ce0793c7aad9619c2d80e9ac9080f2e20f8 GIT binary patch literal 4151 zcmeHJZFAf-5MCe2y|`DdO`GyoKut@zYvJ6cq0l6xq)7v5opgqT%+PO&E$-CVmdBPe z<d-o6Gw_`s#jujkxx0yIe4U$q;)^Xyt7jkWdbQ8r|NQ<Z04%|a8dNNB(!_H@$|L6$ zJ*JM&96!#YBk6=E^hk0MIic`b;B3$^ro0!`V8((=+BTq3&v|k9ih0t4nTUqWf;o4% zv?miD^;RrsN}BYTTn|MSp=sUS6xm_GaHZvoh$=5TJmO&%A^_D^n`)l<dt!?w7SyQc z<$LeBCHb!BJJ3gk`xaDPS7<Jc!ego@c`DJQv4<z4GE49Tk6afgSIhd*MDYMCYlu@_ z#bd}d3*KpW4lpJg7`hs~hvytd<!O?Lqz)fgv;3zhVW|j?nNK_s#yrrWAaNovI$^p@ z?8bhd5ubShP0%Q&-VyCFvf#6Bo~3S)rLNA>0`Ub)NhBl*sr33p;&%3Hj2Rl;jv?%- zly?=Y?tg;i-gy{{L=tV9Ngfc7M#{k<BL#cAk*C_QM5G{;$dj1ajXdjb%}6Eu9A_%i z=a_7Valkz;Nt(qh!8}E&OfpZ3gyg?|yF++NvdCw@@QC?cvXdbw23>CpP6&^V#StSE zgVrBMC>gg>!JVGbTTave?xt86W&ZgRWicI-^NXuQ{Y}NhhHLOq6RyB@3+CHrTa>!2 zTP~LGZWbQ0WS`>wt9qI6XmCIiuD%D8GqTUIb=)u8ABw(--Jym(a94N9tL@HN5_Py` zK~SP6Os&+BQd&@IA-VmrHf<xxL8GoiryRAZ6*J}osf`o5&@T9>e9a-@qWKQh18zDq zIe)4>^wO!Sm`CGWlZ?;X%DxaBix`CoB}W||Sa9R@iNxM+fvpG>jvllp^`oLNixAtW zZyN1f;B*e^@W_Jx>%D7fF_pUl8DO*&gE|Ikps|`Gsli&&E4k2GQATeluj=q!$%9Sf z;z89q@-N{jRD{(bRMc1V@tcT5wcXwmS>mxRu5Ou&#SNj=SPi~M8JU++4YpB3DyKDg zu10t**I;K%e&=@qlHK8HifVfwl~xKj03|4jd{p=_3soFda9r2##^7xa-WQ;$=P$y$ z`rU#{xcjmm&p`{vSKul>=W%8UQ7wGif55e$=idJfKKx7DeT>hlUa7(-IBw=v@F@`d z!eW30e4a(PX+XGbMEDG@k04YKHRoVLxMM`P4WEx73{TNEaOfHl?!es<gdqnL!lDu3 ziwQV9G$MRC0f%KHLU#fVYeocT0uE1%2>0OrNF;~3STy8f%ZRW9UyUFPb74YwW<+=h zUmFp=F>u&5A}qto2*U6bCWIf22&?cdR%TvnYlixGY~XTWL|TU@r$`&8NW-|8kX{;) XDzJ&QRe`6lt7;5pU<-bLXW;$|YF$Q? literal 0 HcmV?d00001 diff --git a/bin/src/main/java/de/dpunkt/myaktion/model/Donation$Status.class b/bin/src/main/java/de/dpunkt/myaktion/model/Donation$Status.class new file mode 100644 index 0000000000000000000000000000000000000000..942f08992d2d41687b398220a8f826f67b182683 GIT binary patch literal 1561 zcmcgsT~8B16ukqL(ruxLg5nnw;sYdRHzvjyF$Se2HYs4*O5&55?hbV5?#yOpme@b! zUog=`-~Ca>J6kFxQK`o8u=BBd?mc(T&OP70fBFIdk6^V3Qv@Cx9R>*#GB{=@EQojz zrJ3y8AQ`Z}6-ow)ig+B<lw@vuzipY#Oc4qM7V?mo$)jMud(1;ipxkM_*lX|9TdjJH zz?0^`W#1&=HTK@UZtZW^+ie0f&x92AIf3Q%<{4+(Y9Ws{8yg1%3fov^5h?_#XMnoa zO3%VPnf~xbYHn0~!Xp~0Bo%Rf7@BI;jd^08Qm@qMaT@V3W*R{$3;XPd)3u2ELqYtJ zAbu{$8jTb;R4PjoX2Tw}7|!3PsKR(Sp5J%s`mQSfx5>OxO=VaK4ViQ)yPW>4*DA`W z9i-eV4NrUl=%rFIXYvA6BS~Ws3QJ9va*d)$V|5l<rD<Je$@-A$0Tt42P+@2$BYr3( zp6w7JxMo>w$HRQOn;GlAAc`VCiZNsu%k7o^z&pG{>*wiC(~gqG1FYyo^&Nvk$<I|j zp^6hp{r^A{{j^I4O?F2v9pyn87Ai0cR|zcrqSaleSDSdh_OhhQb%$Zg5Lj%gki`c~ z3%5UgS+G4}&_>!S(;?px4mdY5vAi3Rq9NVg6vlFCUkR?64toOvm4=jDZ^z6Sj!t)r zK=7A7hL$z*$-4yR$1DkZ3ki0GG3Z?#>}s?15C}}8B~NXwz!jJQz`5vVd_RR^lyLTP z%bw10-e)MkU7Y&})vqoJ7IB<Gj2o}vSjpEOT+ee9U@1o}!wsAPZsOx1g1`#gMy7kX IFW~OZ4<=OW^#A|> literal 0 HcmV?d00001 diff --git a/bin/src/main/java/de/dpunkt/myaktion/model/Donation.class b/bin/src/main/java/de/dpunkt/myaktion/model/Donation.class new file mode 100644 index 0000000000000000000000000000000000000000..b68f89894d2b81abb326868d781b7b9d9af05993 GIT binary patch literal 3246 zcmchZZFAH%5XV=S^nB+WO-P`HKB1&Q9ZGEoX-X5Ck|$>9956!yGkvMpA~CTg*OoKQ z7wT8&Ogq!Q?}zGiWuLJ#QG>~3cyX3=Uj6m+YPG9>{{7=G09b@A3pxb6EcLyZg~EHy z4w)BlFGzB6puG5q9jH(WFO~t1yiF;X9$GL?V5+c<nAr24?Y`!|BG6^A%msFO!%dm* zMtp@pKafJEPg%?fOb_ch+bRvk9vV!g+~;AUp7URFo+%#SoZ-5Z5oZElcQeIQo)Ne| zd`HUb+r>=Ou$b?cV0YSztd%n~z=KePYL&p4Gyjsn_y)Sdf*Asn^~Y?bsZ4utnT-AR zLZm#C(IF40FXJSP3XjnwmFSN+Tc&n@XP?u6`w>ggC}I8q+v9XD;BM)4xAMAMczuor zl4n#%MPsJ?eX4Le|2096H>aa>T)l;^rgHyR%<h*vLwzQ+<SwUgc$K7#s-uM4{c?BS zVl>*Mw^%)nlPL5<MYBBNDLO@DD$RW*Q@SPc*eRE~O+%sPX_(Pm1pHMf@Y`OY3HDhY zspd47KFKqs-=Gy`LOY{ep`mT}Pg%E&SLgV0BiTwUIzpmDd7xL2=<;LaExp*v)#qo_ zYSZ4cQM(v<?^ZTU!^Z=dgewFtJ15hUKIxM~jIXD8yvx%ahKE<@FX^-BB}+p+9{oA4 z_CrihciU!`Dv4rh>F;s1HcFYcGhZdm9#8^Ni$rp6p@S${jWXd>B-#xFghb{lhhIX@ zI`Ng!w9<o{?TF7U`j88W8(cGp`TRsBnLygAmh|9j0-}Xm&oLSa%pm4Tu7UFgOZ!*{ zLRqZ{EF<z6D_sxn5|};x3$Xx|yIrlf;+%CkO>XNDuBz)od-S@#+B)(og?p`GDuDuG zTjr_HABFmmUZ@UOQ3)|l9t*+KjfiC#&n$RAVCih`#j8N+GYfviJH;qUELg)A<w>+) z<Ji5ZjCMqL5@s3Rc6P9~W-tqQm%!WC2hhP^7keGBpjWhgu#0vA21R=TKE!qcXH3Er zJ}=^E5oZ%@?LT4q=jlto!$*G?wpa1lE#7qD6YLL4EBF*X!x4ec;R}48RJdkPxM@_F zg}H`82USZ3lfo^d!k2Kpp-_Lt4FiK~RQL+6G!$wElfr^g!GZaPLd|f?z_4UgxDDSl z6lw;O!m?4p1+Sq{Gu$yStQr*-;9f(aW-uwN8x<De+lIpF43CToOYmJo;dF+d3<_g# fA7iKk-@~$wCDdBM-wzM3!X}P;80V|-5Z3<#mAh!P literal 0 HcmV?d00001 diff --git a/bin/src/main/resources/messages_de.properties b/bin/src/main/resources/messages_de.properties new file mode 100644 index 0000000..07544ff --- /dev/null +++ b/bin/src/main/resources/messages_de.properties @@ -0,0 +1,66 @@ +# index.xhtml +welcome.title= Workshop Java EE 7 +welcome.text=Java EE 7: Willkommen zu unserem Workshop! + +# listCampaigns.xhtml +listCampaigns.my_campaigns=Meine Aktionen +listCampaigns.name=Name +listCampaigns.target_amount=Spendenziel +listCampaigns.donated_so_far=bisher gespendet +listCampaigns.edit=Editieren +listCampaigns.list_donations=Spendenliste +listCampaigns.form=Formular +listCampaigns.add_campaign=Aktion hinzufügen + +# editCampaign.xhtml +editCampaign.add_new_campaign=Neue Aktion anlegen +editCampaign.edit_campaign=Aktionsdaten editieren +editCampaign.general=Allgemein +editCampaign.name=Name +editCampaign.campaign_name_validation=Der Name einer Aktion muss min. 4 und darf max. 30 Zeichen lang sein. +editCampaign.name_of_the_campaign=Name der Spendenaktion +editCampaign.target_amount=Spendenziel +editCampaign.target_amount_validation=Das Spendenziel für die Aktion muss min. 10 Euro sein. +editCampaign.donation_amount=Spendenbetrag +editCampaign.donation_amount_validation=Der Spendenbetrag muss min. 1 Euro sein. +editCampaign.bank_account=Bankverbindung +editCampaign.iban=IBAN +editCampaign.name_of_bank=Name der Bank +editCampaign.save=Speichern +editCampaign.cancel=Abbrechen + +# listDonations.xhtml +listDonations.donation_list=Spenderliste +listDonations.beneficiary_account=Empfängerkonto +listDonations.iban=IBAN +listDonations.name=Name +listDonations.name_of_bank=Name der Bank +listDonations.donation_amount=Spendenbetrag +listDonations.receipt=Quittung +listDonations.yes=ja +listDonations.no=nein +listDonations.status=Status +listDonations.status.TRANSFERRED=überwiesen +listDonations.status.IN_PROCESS=in Bearbeitung + +# editDonationForm.xhtml +editDonationForm.edit_donation_form=Spendenformular bearbeiten +editDonationForm.background_color=Hintergrundfarbe +editDonationForm.text_color=Textfarbe +editDonationForm.form_url=URL des Formulars +editDonationForm.update_url=Aktualisieren der URL + +# donateMoney.xhtml +donateMoney.donate_money=Geld spenden +donateMoney.name=Name +donateMoney.iban=IBAN +donateMoney.name_of_bank=Name der Bank +donateMoney.donation_amount=Spendenbetrag +donateMoney.i_want_a_receipt=Ja, ich möchte eine Spendenquittung +donateMoney.donate=Spenden +donateMoney.thank_you=Vielen Dank für die Spende! + +listCampaigns.ask_delete_campaign=Aktion wirklich löschen? +listCampaigns.delete_campaign=Aktion löschen +listCampaigns.yes=Ja +listCampaigns.no=Nein \ No newline at end of file diff --git a/bin/src/main/resources/messages_en.properties b/bin/src/main/resources/messages_en.properties new file mode 100644 index 0000000..5df0b5a --- /dev/null +++ b/bin/src/main/resources/messages_en.properties @@ -0,0 +1,66 @@ +# index.xhtml +welcome.title=Workshop Java EE 7 +welcome.text=Java EE 7: Welcome to our Workshop! + +# listCampaigns.xhtml +listCampaigns.my_campaigns=My campaigns +listCampaigns.name=Name +listCampaigns.target_amount=Target amount +listCampaigns.donated_so_far=Donated so far +listCampaigns.edit=Edit +listCampaigns.list_donations=List donations +listCampaigns.form=Form +listCampaigns.add_campaign=Add campaign + +# editCampaign.xhtml +editCampaign.add_new_campaign=Add a new campaign +editCampaign.edit_campaign=Edit campaign +editCampaign.general=General +editCampaign.name=Name +editCampaign.campaign_name_validation=The name of a campaign must be at least 4 and max. 30 characters long. +editCampaign.name_of_the_campaign=Name of the campaign +editCampaign.target_amount=Target amount +editCampaign.target_amount_validation=The target amount for the campaign must be at least 10 Euro. +editCampaign.donation_amount=Donation amount +editCampaign.donation_amount_validation=The donation amount must be at least 1 Euro. +editCampaign.bank_account=Bank account +editCampaign.iban=IBAN +editCampaign.name_of_bank=Name of Bank +editCampaign.save=Save +editCampaign.cancel=Cancel + +# listDonations.xhtml +listDonations.donation_list=List of donations +listDonations.beneficiary_account=Beneficiary account +listDonations.iban=IBAN +listDonations.name=Name +listDonations.name_of_bank=Name of Bank +listDonations.donation_amount=Donation amount +listDonations.receipt=Receipt +listDonations.yes=yes +listDonations.no=no +listDonations.status=Status +listDonations.status.TRANSFERRED=transferred +listDonations.status.IN_PROCESS=in process + +# editDonationForm.xhtml +editDonationForm.edit_donation_form=Edit donation form +editDonationForm.background_color=Background color +editDonationForm.text_color=Text color +editDonationForm.form_url=Form URL +editDonationForm.update_url=Update URL + +# donateMoney.xhtml +donateMoney.donate_money=Donate money +donateMoney.name=Name +donateMoney.iban=IBAN +donateMoney.name_of_bank=Name of bank +donateMoney.donation_amount=Donation amount +donateMoney.i_want_a_receipt=Yes, I would like a donation receipt +donateMoney.donate=Donate +donateMoney.thank_you=Thank you for your donation! + +listCampaigns.ask_delete_campaign=Really delete campaign? +listCampaigns.delete_campaign=Delete campaign +listCampaigns.yes=Yes +listCampaigns.no=No \ No newline at end of file diff --git a/bin/src/main/webapp/WEB-INF/beans.xml b/bin/src/main/webapp/WEB-INF/beans.xml new file mode 100644 index 0000000..51e8caf --- /dev/null +++ b/bin/src/main/webapp/WEB-INF/beans.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd" + bean-discovery-mode="all" version="2.0"> +</beans> \ No newline at end of file diff --git a/bin/src/main/webapp/WEB-INF/faces-config.xml b/bin/src/main/webapp/WEB-INF/faces-config.xml new file mode 100644 index 0000000..c5fd527 --- /dev/null +++ b/bin/src/main/webapp/WEB-INF/faces-config.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<faces-config version="2.3" + xmlns="http://xmlns.jcp.org/xml/ns/javaee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee + http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_3.xsd"> + <application> + <locale-config> + <default-locale>de</default-locale> + <supported-locale>en</supported-locale> + <supported-locale>de</supported-locale> + </locale-config> + <resource-bundle> + <base-name>messages</base-name> + <var>msg</var> + </resource-bundle> + </application> +</faces-config> \ No newline at end of file diff --git a/bin/src/main/webapp/contracts/de/screen.css b/bin/src/main/webapp/contracts/de/screen.css new file mode 100644 index 0000000..fd7253d --- /dev/null +++ b/bin/src/main/webapp/contracts/de/screen.css @@ -0,0 +1,35 @@ +body { + margin: 0; + padding: 0; + background-color: #EAECEE; + font-family: Verdana, sans-serif; + font-size: 0.9em; +} + +#container { + margin: 0 auto; + padding: 0 20px 10px 20px; + border: 1px solid #666666; + width: 865px; + padding-top: 10px; +} + +#header { + font-size: 1.3em; + border: 1px solid #666666; + background: #EAECEE; + padding: 0 15px 5px 15px; + margin-bottom: 50px; +} + +#footer { + clear: both; + text-align: center; + color: #666666; + font-size: 0.85em; + padding: 3em 0 0 0; +} + +h2 { + font-size: 1.2em; +} \ No newline at end of file diff --git a/bin/src/main/webapp/contracts/de/template.xhtml b/bin/src/main/webapp/contracts/de/template.xhtml new file mode 100644 index 0000000..17cdc03 --- /dev/null +++ b/bin/src/main/webapp/contracts/de/template.xhtml @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" + xmlns:h="http://xmlns.jcp.org/jsf/html" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets"> +<h:head> + <title>My-Aktion</title> + <meta charset="utf-8" /> + <h:outputStylesheet name="/screen.css" /> +</h:head> +<h:body> + <div id="container"> + <div id="header"> + <p> + Beispielanwendung <b>My-Aktion</b> – Workshop Java EE 7 + </p> + </div> + <div id="content"> + <ui:insert name="content"> + [Template content will be inserted here] + </ui:insert> + </div> + <div id="footer"> + <p>(C) 2013-2014 dpunkt.verlag GmbH, MIT Lizenz</p> + </div> + </div> +</h:body> +</html> \ No newline at end of file diff --git a/bin/src/main/webapp/contracts/en/screen.css b/bin/src/main/webapp/contracts/en/screen.css new file mode 100644 index 0000000..fd7253d --- /dev/null +++ b/bin/src/main/webapp/contracts/en/screen.css @@ -0,0 +1,35 @@ +body { + margin: 0; + padding: 0; + background-color: #EAECEE; + font-family: Verdana, sans-serif; + font-size: 0.9em; +} + +#container { + margin: 0 auto; + padding: 0 20px 10px 20px; + border: 1px solid #666666; + width: 865px; + padding-top: 10px; +} + +#header { + font-size: 1.3em; + border: 1px solid #666666; + background: #EAECEE; + padding: 0 15px 5px 15px; + margin-bottom: 50px; +} + +#footer { + clear: both; + text-align: center; + color: #666666; + font-size: 0.85em; + padding: 3em 0 0 0; +} + +h2 { + font-size: 1.2em; +} \ No newline at end of file diff --git a/bin/src/main/webapp/contracts/en/template.xhtml b/bin/src/main/webapp/contracts/en/template.xhtml new file mode 100644 index 0000000..56e9c61 --- /dev/null +++ b/bin/src/main/webapp/contracts/en/template.xhtml @@ -0,0 +1,27 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" + xmlns:h="http://xmlns.jcp.org/jsf/html" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets"> +<h:head> + <title>My-Aktion</title> + <meta charset="utf-8" /> + <h:outputStylesheet name="/screen.css" /> +</h:head> +<h:body> + <div id="container"> + <div id="header"> + <p> + Example application <b>My-Aktion</b> – Workshop Java EE 7 + </p> + </div> + <div id="content"> + <ui:insert name="content"> + [Template content will be inserted here] + </ui:insert> + </div> + <div id="footer"> + <p>(C) 2013-2014 dpunkt.verlag GmbH, MIT license</p> + </div> + </div> +</h:body> +</html> \ No newline at end of file diff --git a/bin/src/main/webapp/donateMoney.xhtml b/bin/src/main/webapp/donateMoney.xhtml new file mode 100644 index 0000000..000a55a --- /dev/null +++ b/bin/src/main/webapp/donateMoney.xhtml @@ -0,0 +1,74 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets" + xmlns:f="http://xmlns.jcp.org/jsf/core" + xmlns:p="http://primefaces.org/ui" + xmlns:h="http://xmlns.jcp.org/jsf/html"> +<h:head> + <title>#{msg['donateMoney.donate_money']}</title> + <meta charset="utf-8" /> + <f:metadata> + <f:viewParam id="bgColor" name="bgColor" + value="#{donateMoneyController.bgColor}"> + <f:validateRegex pattern="[A-Fa-f0-9]{6}" /> + </f:viewParam> + <f:viewParam id="textColor" name="textColor" + value="#{donateMoneyController.textColor}"> + <f:validateRegex pattern="[A-Fa-f0-9]{6}" /> + </f:viewParam> + <f:viewParam id="campaignId" name="campaignId" + converter="javax.faces.Long" + value="#{donateMoneyController.campaignId}"> + </f:viewParam> + </f:metadata> +</h:head> +<h:body style="margin:0; font-family: Verdana, sans-serif; font-size: 0.9em; + background-color: ##{donateMoneyController.bgColor}; + color: ##{donateMoneyController.textColor}"> + <h1>#{msg['donateMoney.donate_money']}</h1> + <p:messages globalOnly="true" /> + <p:message for="bgColor" style="color: red;" /> + <p:message for="textColor" style="color: red;" /> + <p:message for="campaignId" style="color: red;" /> + <h:form> + <h:panelGrid columns="3"> + <h:outputLabel value="#{msg['donateMoney.name']}:"> + </h:outputLabel> + <p:inputText id="name" + value="#{donateMoneyController.donation.donorName}"> + <f:validateRequired /> + </p:inputText> + <p:message for="name" style="color: red;" /> + <h:outputLabel value="#{msg['donateMoney.iban']}:"> + </h:outputLabel> + <p:inputText id="iban" + value="#{donateMoneyController.donation.account.iban}"> + <f:validateRequired /> + </p:inputText> + <p:message for="iban" style="color: red;" /> + <h:outputLabel value="#{msg['donateMoney.name_of_bank']}:"> + </h:outputLabel> + <p:inputText id="name_bank" + value="#{donateMoneyController.donation.account.nameOfBank}"> + <f:validateRequired /> + </p:inputText> + <p:message for="name_bank" style="color: red;" /> + <h:outputLabel value="#{msg['donateMoney.donation_amount']}:"> + </h:outputLabel> + <h:panelGroup> + <p:inputText id="donationAmount" + value="#{donateMoneyController.donation.amount}"> + <f:validateRequired /> + <f:convertNumber maxFractionDigits="2" minFractionDigits="2" /> + </p:inputText> EUR + </h:panelGroup> + <p:message for="donationAmount" style="color: red;" /> + </h:panelGrid> + <p:selectBooleanCheckbox + value="#{donateMoneyController.donation.receiptRequested}" /> + #{msg['donateMoney.i_want_a_receipt']}<br /> + <p:commandButton value="#{msg['donateMoney.donate']}" ajax="false" + action="#{donateMoneyController.doDonation}" /> + </h:form> +</h:body> +</html> \ No newline at end of file diff --git a/bin/src/main/webapp/editCampaign.xhtml b/bin/src/main/webapp/editCampaign.xhtml new file mode 100644 index 0000000..456c7ed --- /dev/null +++ b/bin/src/main/webapp/editCampaign.xhtml @@ -0,0 +1,99 @@ +<html xmlns="http://www.w3.org/1999/xhtml" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets" + xmlns:f="http://xmlns.jcp.org/jsf/core" + xmlns:p="http://primefaces.org/ui" + xmlns:h="http://xmlns.jcp.org/jsf/html"> +<body> + <f:view contracts="#{view.locale.language}"> + <ui:composition template="/template.xhtml"> + <ui:define name="content"> + <h1>#{campaignProducer.addMode ? + msg['editCampaign.add_new_campaign'] : + msg['editCampaign.edit_campaign']}</h1> + <h:form> + <p:messages closable="true" /> + <p:tabView id="tabView"> + <p:tab title="#{msg['editCampaign.general']}"> + <h:panelGrid columns="3"> + <h:outputLabel + value="#{msg['editCampaign.name']}:"> + </h:outputLabel> + <p:inputText id="a_name" + value="#{campaignProducer.selectedCampaign.name}" + validatorMessage="#{msg['editCampaign.campaign_name_validation']}"> + <f:passThroughAttribute name="placeholder" + value="#{msg['editCampaign.name_of_the_campaign']}" /> + <f:validateRequired /> + <f:validateLength minimum="4" maximum="30" /> + </p:inputText> + <p:message for="a_name" /> + <h:outputLabel + value="#{msg['editCampaign.target_amount']}:"> + </h:outputLabel> + <h:panelGroup> + <p:inputText id="a_targetAmount" + value="#{campaignProducer.selectedCampaign.targetAmount}" + validatorMessage="#{msg['editCampaign.target_amount_validation']}"> + <f:convertNumber maxFractionDigits="2" + minFractionDigits="2" /> + <f:validateRequired /> + <f:validateDoubleRange minimum="10.0" /> + </p:inputText> EUR + </h:panelGroup> + <p:message for="a_targetAmount" /> + <h:outputLabel + value="#{msg['editCampaign.donation_amount']}:"> + </h:outputLabel> + <h:panelGroup> + <p:inputText id="a_donationMinimum" + value="#{campaignProducer.selectedCampaign.donationMinimum}" + validatorMessage="#{msg['editCampaign.donation_amount_validation']}"> + <f:convertNumber maxFractionDigits="2" + minFractionDigits="2" /> + <f:validateRequired /> + <f:validateDoubleRange minimum="1.0" /> + </p:inputText> EUR + </h:panelGroup> + <p:message for="a_donationMinimum" /> + </h:panelGrid> + </p:tab> + <p:tab title="#{msg['editCampaign.bank_account']}"> + <h:panelGrid columns="3"> + <h:outputLabel + value="#{msg['editCampaign.name']}:"> + </h:outputLabel> + <p:inputText id="b_name" + value="#{campaignProducer.selectedCampaign.account.name}"> + <f:validateRequired /> + </p:inputText> + <p:message for="b_name" /> + <h:outputLabel + value="#{msg['editCampaign.iban']}:"> + </h:outputLabel> + <p:inputText id="b_iban" + value="#{campaignProducer.selectedCampaign.account.iban}"> + <f:validateRequired /> + </p:inputText> + <p:message for="b_iban" /> + <h:outputLabel + value="#{msg['editCampaign.name_of_bank']}:"> + </h:outputLabel> + <p:inputText id="b_name_bank" + value="#{campaignProducer.selectedCampaign.account.nameOfBank}"> + <f:validateRequired /> + </p:inputText> + <p:message for="b_name_bank" /> + </h:panelGrid> + </p:tab> + </p:tabView> + <p:commandButton value="#{msg['editCampaign.save']}" + ajax="false" action="#{editCampaignController.doSave}" /> + <p:commandButton value="#{msg['editCampaign.cancel']}" + immediate="true" ajax="false" + action="#{editCampaignController.doCancel}" /> + </h:form> + </ui:define> + </ui:composition> + </f:view> +</body> +</html> \ No newline at end of file diff --git a/bin/src/main/webapp/editDonationForm.xhtml b/bin/src/main/webapp/editDonationForm.xhtml new file mode 100644 index 0000000..78107ac --- /dev/null +++ b/bin/src/main/webapp/editDonationForm.xhtml @@ -0,0 +1,41 @@ +<html xmlns="http://www.w3.org/1999/xhtml" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets" + xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:p="http://primefaces.org/ui" + xmlns:h="http://xmlns.jcp.org/jsf/html"> +<body> + <f:view contracts="#{view.locale.language}"> + <ui:composition template="/template.xhtml"> + <ui:define name="content"> + <h1>#{msg['editDonationForm.edit_donation_form']}</h1> + <h:form> + <h:panelGrid columns="2"> + <h:outputLabel + value="#{msg['editDonationForm.background_color']}:"> + </h:outputLabel> + <p:colorPicker id="bgColor" + value="#{editDonationFormController.bgColor}" + widgetVar="bgPicker"> + </p:colorPicker> + <h:outputLabel + value="#{msg['editDonationForm.text_color']}:"> + </h:outputLabel> + <p:colorPicker id="textColor" + value="#{editDonationFormController.textColor}" + widgetVar="textPicker"> + </p:colorPicker> + <h:outputLabel + value="#{msg['editDonationForm.form_url']}:"> + </h:outputLabel> + <p:inputTextarea id="url" rows="6" cols="30" + readonly="true" + value="#{editDonationFormController.url}" /> + </h:panelGrid> + <p:commandButton value="#{msg['editDonationForm.update_url']}" update="url" /> + <p:commandButton value="OK" + action="#{editDonationFormController.doOk}" ajax="false" /> + </h:form> + </ui:define> + </ui:composition> + </f:view> +</body> +</html> \ No newline at end of file diff --git a/bin/src/main/webapp/index.html b/bin/src/main/webapp/index.html new file mode 100644 index 0000000..7949e11 --- /dev/null +++ b/bin/src/main/webapp/index.html @@ -0,0 +1,5 @@ +<html> +<head> + <meta http-equiv="Refresh" content="0; URL=listCampaigns.jsf"> +</head> +</html> \ No newline at end of file diff --git a/bin/src/main/webapp/index.xhtml b/bin/src/main/webapp/index.xhtml new file mode 100644 index 0000000..79287a7 --- /dev/null +++ b/bin/src/main/webapp/index.xhtml @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" + xmlns:f="http://xmlns.jcp.org/jsf/core" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets"> +<body> + <f:view contract="#{view.locale.language}"> + <ui:composition template="/template.xhtml"> + <ui:define name="content"> + <h1>#{msg['welcome.text']}</h1> + </ui:define> + </ui:composition> + </f:view> +</body> +</html> \ No newline at end of file diff --git a/bin/src/main/webapp/listCampaigns.xhtml b/bin/src/main/webapp/listCampaigns.xhtml new file mode 100644 index 0000000..f1b4fcc --- /dev/null +++ b/bin/src/main/webapp/listCampaigns.xhtml @@ -0,0 +1,79 @@ +<html xmlns="http://www.w3.org/1999/xhtml" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets" + xmlns:f="http://xmlns.jcp.org/jsf/core" + xmlns:p="http://primefaces.org/ui" + xmlns:h="http://xmlns.jcp.org/jsf/html"> +<body> + <f:view contracts="#{view.locale.language}"> + <ui:composition template="/template.xhtml"> + <ui:define name="content"> + <h1>#{msg['listCampaigns.my_campaigns']}</h1> + <h:form> + <p:dataTable value="#{campaignListProducer.campaigns}" + var="campaign"> + <p:column> + <p:commandButton onclick="PF('confirmation').show()" + actionListener="#{listCampaignsController.doDeleteCampaign(campaign)}" + icon="ui-icon-close" /> + </p:column> + <p:column> + <f:facet name="header"> + #{msg['listCampaigns.name']} + </f:facet> + <h:outputText value="#{campaign.name}" /> + </p:column> + <p:column> + <f:facet name="header"> + #{msg['listCampaigns.target_amount']} + </f:facet> + <h:outputText value="#{campaign.targetAmount}"> + <f:convertNumber type="currency" + currencyCode="EUR" /> + </h:outputText> + </p:column> + <p:column> + <f:facet name="header"> + #{msg['listCampaigns.donated_so_far']} + </f:facet> + <h:outputText value="#{campaign.amountDonatedSoFar}"> + <f:convertNumber type="currency" + currencyCode="EUR" /> + </h:outputText> + </p:column> + <p:column> + <p:commandLink value="#{msg['listCampaigns.edit']}" + ajax="false" + action="#{listCampaignsController.doEditCampaign(campaign)}" /> + </p:column> + <p:column> + <p:commandLink + value="#{msg['listCampaigns.list_donations']}" + ajax="false" + action="#{listCampaignsController.doListDonations(campaign)}" /> + </p:column> + <p:column> + <p:commandLink value="#{msg['listCampaigns.form']}" + ajax="false" + action="#{listCampaignsController.doEditDonationForm(campaign)}" /> + </p:column> + </p:dataTable> + <p:commandButton + value="#{msg['listCampaigns.add_campaign']}" + ajax="false" + action="#{listCampaignsController.doAddCampaign}" /> + <p:confirmDialog + message="#{msg['listCampaigns.ask_delete_campaign']}" + header="#{msg['listCampaigns.delete_campaign']}" + severity="alert" widgetVar="confirmation"> + <p:commandButton value="#{msg['listCampaigns.yes']}" + oncomplete="confirmation.hide()" ajax="false" + actionListener="#{listCampaignsController.commitDeleteCampaign}" /> + <p:commandButton value="#{msg['listCampaigns.no']}" + onclick="confirmation.hide()" /> + </p:confirmDialog> + </h:form> + </ui:define> + </ui:composition> + </f:view> +</body> +</html> \ No newline at end of file diff --git a/bin/src/main/webapp/listDonations.xhtml b/bin/src/main/webapp/listDonations.xhtml new file mode 100644 index 0000000..768c1d4 --- /dev/null +++ b/bin/src/main/webapp/listDonations.xhtml @@ -0,0 +1,76 @@ +<html xmlns="http://www.w3.org/1999/xhtml" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets" + xmlns:f="http://xmlns.jcp.org/jsf/core" + xmlns:p="http://primefaces.org/ui" + xmlns:h="http://xmlns.jcp.org/jsf/html"> +<body> + <f:view contracts="#{view.locale.language}"> + <ui:composition template="/template.xhtml"> + <ui:define name="content"> + <h1>#{msg['listDonations.donation_list']} + '#{campaignProducer.selectedCampaign.name}'</h1> + <h2>#{msg['listDonations.beneficiary_account']}: + #{campaignProducer.selectedCampaign.account.name}, + #{msg['listDonations.iban']}: + #{campaignProducer.selectedCampaign.account.iban}, + #{campaignProducer .selectedCampaign.account.nameOfBank}</h2> + <h:form> + <p:dataTable value="#{campaignProducer.selectedCampaign.donations}" + var="donation"> + <p:column> + <f:facet name="header"> + #{msg['listDonations.name']} + </f:facet> + <h:outputText value="#{donation.donorName}" /> + </p:column> + <p:column> + <f:facet name="header"> + #{msg['listDonations.iban']} + </f:facet> + <h:outputText value="#{donation.account.iban}" /> + </p:column> + <p:column> + <f:facet name="header"> + #{msg['listDonations.name_of_bank']} + </f:facet> + <h:outputText value="#{donation.account.nameOfBank}" /> + </p:column> + <p:column> + <f:facet name="header"> + #{msg['listDonations.donation_amount']} + </f:facet> + <h:outputText value="#{donation.amount}"> + <f:convertNumber type="currency" + currencyCode="EUR" /> + </h:outputText> + </p:column> + <p:column> + <f:facet name="header"> + #{msg['listDonations.receipt']} + </f:facet> + <h:outputText + value="#{donation.receiptRequested ? + msg['listDonations.yes'] + : msg['listDonations.no']}" /> + </p:column> + <p:column> + <f:facet name="header"> + #{msg['listDonations.status']} + </f:facet> + <h:outputText + value="#{msg['listDonations.status.TRANSFERRED']}" + rendered="#{donation.status == 'TRANSFERRED'}" /> + <h:outputText + value="#{msg['listDonations.status.IN_PROCESS']}" + rendered="#{donation.status == 'IN_PROCESS'}" /> + </p:column> + </p:dataTable> + <p:commandButton value="OK" + ajax="false" + action="#{listDonationsController.doOk}" /> + </h:form> + </ui:define> + </ui:composition> + </f:view> +</body> +</html> \ No newline at end of file diff --git a/src/main/java/de/dpunkt/myaktion/model/Donation.java b/src/main/java/de/dpunkt/myaktion/model/Donation.java index c72e126..b7b2a5d 100644 --- a/src/main/java/de/dpunkt/myaktion/model/Donation.java +++ b/src/main/java/de/dpunkt/myaktion/model/Donation.java @@ -12,6 +12,8 @@ import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; import javax.validation.constraints.DecimalMin; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; @@ -20,9 +22,15 @@ import javax.validation.constraints.Size; * @author Julian */ @Entity +@NamedQueries({ @NamedQuery(name = Donation.findByStatus, + query = "SELECT d FROM Donation d WHERE d.status = :status") }) public class Donation { //---------------------------------------------------------------------------------------------- + public static final String findByStatus = "Donation.findByStatus"; + + //============================================================================================== + @GeneratedValue @Id private Long id; @@ -30,21 +38,21 @@ public class Donation { @NotNull(message = "{donation.amount.notNull}") @DecimalMin(value = "1.00", message = "{donation.amount.decimalMin}") private BigDecimal amount; - + @NotNull @Size(min = 5, max = 40, message = "{donation.donorName.size}") private String donorName; @NotNull private Boolean receiptRequested; - + @NotNull private Status status; - + @NotNull @Embedded private Account account; - + @NotNull @ManyToOne private Campaign campaign; diff --git a/src/main/java/de/dpunkt/myaktion/scheduler/SchedulerBean.java b/src/main/java/de/dpunkt/myaktion/scheduler/SchedulerBean.java new file mode 100644 index 0000000..85d5571 --- /dev/null +++ b/src/main/java/de/dpunkt/myaktion/scheduler/SchedulerBean.java @@ -0,0 +1,26 @@ +/* + * Copyright 2019 (C) by Julian Horner. + * All Rights Reserved. + */ + +package de.dpunkt.myaktion.scheduler; + +import javax.ejb.Schedule; +import javax.ejb.Singleton; +import javax.inject.Inject; + +import de.dpunkt.myaktion.services.DonationService; + +/** + * @author Julian + */ +@Singleton +public class SchedulerBean { + @Inject + private DonationService donationService; + + @Schedule(hour = "*", minute = "*/5", persistent = false) + public void doTransferDonations() { + donationService.transferDonations(); + } +} \ No newline at end of file diff --git a/src/main/java/de/dpunkt/myaktion/services/CampaignServiceBean.java b/src/main/java/de/dpunkt/myaktion/services/CampaignServiceBean.java index 67d7782..06ffe96 100644 --- a/src/main/java/de/dpunkt/myaktion/services/CampaignServiceBean.java +++ b/src/main/java/de/dpunkt/myaktion/services/CampaignServiceBean.java @@ -13,27 +13,22 @@ import java.util.logging.Logger; import javax.annotation.Resource; import javax.annotation.security.RolesAllowed; import javax.ejb.SessionContext; -import javax.ejb.TransactionManagement; -import javax.ejb.TransactionManagementType; +import javax.ejb.Stateless; import javax.inject.Inject; -import javax.interceptor.Interceptors; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; -import javax.transaction.UserTransaction; import de.dpunkt.myaktion.model.Campaign; import de.dpunkt.myaktion.model.Organizer; import de.dpunkt.myaktion.util.Log.TecLog; -import de.dpunkt.myaktion.util.TransactionInterceptor; /** * @author Julian */ @RolesAllowed("Organizer") -@TransactionManagement(TransactionManagementType.BEAN) -@Interceptors(TransactionInterceptor.class) +@Stateless public class CampaignServiceBean implements CampaignService { - //---------------------------------------------------------------------------------------------- + // ---------------------------------------------------------------------------------------------- @Inject @TecLog @@ -45,7 +40,7 @@ public class CampaignServiceBean implements CampaignService { @Resource private SessionContext sessionContext; - //---------------------------------------------------------------------------------------------- + // ---------------------------------------------------------------------------------------------- @Override public List<Campaign> getAllCampaigns() { @@ -62,24 +57,22 @@ public class CampaignServiceBean implements CampaignService { return campaigns; } - //---------------------------------------------------------------------------------------------- + // ---------------------------------------------------------------------------------------------- @Override public void addCampaign(Campaign campaign) { Organizer organizer = getLoggedinOrganizer(); campaign.setOrganizer(organizer); - entityManager.persist(campaign); } - - //---------------------------------------------------------------------------------------------- + // ---------------------------------------------------------------------------------------------- @Override public void updateCampaign(Campaign campaign) { entityManager.merge(campaign); } - //---------------------------------------------------------------------------------------------- + // ---------------------------------------------------------------------------------------------- @Override public void deleteCampaign(Campaign campaign) { @@ -87,7 +80,7 @@ public class CampaignServiceBean implements CampaignService { entityManager.remove(managedCampaign); } - //---------------------------------------------------------------------------------------------- + // ---------------------------------------------------------------------------------------------- private BigDecimal getAmountDonatedSoFar(Campaign campaign) { TypedQuery<BigDecimal> query = @@ -101,7 +94,7 @@ public class CampaignServiceBean implements CampaignService { return result; } - //---------------------------------------------------------------------------------------------- + // ---------------------------------------------------------------------------------------------- private Organizer getLoggedinOrganizer() { String organizerEmail = sessionContext.getCallerPrincipal().getName(); @@ -110,5 +103,5 @@ public class CampaignServiceBean implements CampaignService { return organizer; } - //---------------------------------------------------------------------------------------------- + // ---------------------------------------------------------------------------------------------- } \ No newline at end of file diff --git a/src/main/java/de/dpunkt/myaktion/services/DonationService.java b/src/main/java/de/dpunkt/myaktion/services/DonationService.java index bf72371..9815011 100644 --- a/src/main/java/de/dpunkt/myaktion/services/DonationService.java +++ b/src/main/java/de/dpunkt/myaktion/services/DonationService.java @@ -19,5 +19,7 @@ public interface DonationService { void addDonation(Long campaignId, Donation donation); + void transferDonations(); + //---------------------------------------------------------------------------------------------- } \ No newline at end of file diff --git a/src/main/java/de/dpunkt/myaktion/services/DonationServiceBean.java b/src/main/java/de/dpunkt/myaktion/services/DonationServiceBean.java index a884bcc..836c64b 100644 --- a/src/main/java/de/dpunkt/myaktion/services/DonationServiceBean.java +++ b/src/main/java/de/dpunkt/myaktion/services/DonationServiceBean.java @@ -6,15 +6,20 @@ package de.dpunkt.myaktion.services; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.annotation.security.PermitAll; import javax.annotation.security.RolesAllowed; import javax.ejb.Stateless; import javax.inject.Inject; import javax.persistence.EntityManager; +import javax.persistence.TypedQuery; import de.dpunkt.myaktion.model.Campaign; import de.dpunkt.myaktion.model.Donation; +import de.dpunkt.myaktion.model.Donation.Status; +import de.dpunkt.myaktion.util.Log.TecLog; /** * @author Julian @@ -26,6 +31,10 @@ public class DonationServiceBean implements DonationService { @Inject EntityManager entityManager; + @Inject + @TecLog + private Logger logger; + //---------------------------------------------------------------------------------------------- @RolesAllowed("Organizer") @@ -33,7 +42,7 @@ public class DonationServiceBean implements DonationService { public List<Donation> getDonationList(Long campaignId) { Campaign managedCampaign = entityManager.find(Campaign.class, campaignId); List<Donation> donations = managedCampaign.getDonations(); - + donations.size(); // To avoid Lazy loading exception return donations; @@ -44,9 +53,24 @@ public class DonationServiceBean implements DonationService { public void addDonation(Long campaignId, Donation donation) { Campaign managedCampaign = entityManager.find(Campaign.class, campaignId); donation.setCampaign(managedCampaign); - + entityManager.persist(donation); } - + + @Override + @PermitAll + public void transferDonations() { + logger.log(Level.INFO, "log.transferDonation.start"); + + TypedQuery<Donation> query = + entityManager.createNamedQuery(Donation.findByStatus, Donation.class); + query.setParameter("status", Status.IN_PROCESS); + + List<Donation> donations = query.getResultList(); + donations.forEach(donation -> donation.setStatus(Status.TRANSFERRED)); + + logger.log(Level.INFO, "log.transferDonation.done", new Object[] { donations.size() }); + } + //---------------------------------------------------------------------------------------------- } diff --git a/src/main/resources/messages_de.properties b/src/main/resources/messages_de.properties index f120b42..1059e8d 100644 --- a/src/main/resources/messages_de.properties +++ b/src/main/resources/messages_de.properties @@ -63,9 +63,12 @@ donateMoney.thank_you=Vielen Dank f # logger log.donateMoney.thank_you={0} hat {1} Euro gespendet. +log.transferDonation.start=Zu bearbeitende Spenden werden überwiesen. +log.transferDonation.done=Es wurden {0} Spenden überwiesen. # login.xhtml login.email=E-Mail login.password=Passwort login.login=Anmelden -login.errorMsg=Passwort oder User sind falsch \ No newline at end of file +login.errorMsg=Passwort oder User sind falsch + diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties index c9a4483..7ab66a6 100644 --- a/src/main/resources/messages_en.properties +++ b/src/main/resources/messages_en.properties @@ -63,6 +63,8 @@ donateMoney.thank_you=Thank you for your donation! # logger log.donateMoney.thank_you={0} has donated {1} Euro. +log.transferDonation.start=Starting transfering donations. +log.transferDonation.done={0} donations have been transfered. # login.xhtml login.email=Email diff --git a/src/main/webapp/WEB-INF/jboss-ejb3.xml b/src/main/webapp/WEB-INF/jboss-ejb3.xml index 3abda74..c4f882b 100644 --- a/src/main/webapp/WEB-INF/jboss-ejb3.xml +++ b/src/main/webapp/WEB-INF/jboss-ejb3.xml @@ -5,9 +5,9 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:s="urn:security" xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee -http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd -http://java.sun.com/xml/ns/javaee -http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd" + http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd + http://java.sun.com/xml/ns/javaee + http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd" version="3.1" impl-version="2.0"> <assembly-descriptor> <s:security> -- GitLab