From 44c2350a507a5fcb6c70a346eaa25b5804c73001 Mon Sep 17 00:00:00 2001 From: ducrz Date: Tue, 17 May 2022 15:35:32 -0300 Subject: [PATCH] =?UTF-8?q?Fim=20Desafio=20de=20Projeto:=20Explorando=20Pa?= =?UTF-8?q?dr=C3=B5es=20de=20Projetos=20na=20Pr=C3=A1tica=20com=20Java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md | 20 ++ .../assets/tela-api.png | Bin 0 -> 79429 bytes .../desafio-de-projeto.txt | 85 +++++ .../lab-padroes-projeto-java/.classpath | 10 + .../lab-padroes-projeto-java/.project | 17 + .../.settings/org.eclipse.jdt.core.prefs | 15 + .../org.hibernate.eclipse.console.prefs | 3 + .../lab-padroes-projeto-java/README.md | 6 + .../lab-padroes-projeto-java/bin/.gitignore | 2 + .../bin/subsistema1/crm/CrmService.class | Bin 0 -> 749 bytes .../src/one/digitalinnovation/gof/Test.java | 57 ++++ .../digitalinnovation/gof/facade/Facade.java | 14 + .../gof/singleton/SingletonEager.java | 19 ++ .../gof/singleton/SingletonLazy.java | 22 ++ .../gof/singleton/SingletonLazyHolder.java | 23 ++ .../gof/strategy/Comportamento.java | 5 + .../gof/strategy/ComportamentoAgressivo.java | 10 + .../gof/strategy/ComportamentoDefensivo.java | 10 + .../gof/strategy/ComportamentoNormal.java | 10 + .../digitalinnovation/gof/strategy/Robo.java | 14 + .../src/subsistema1/crm/CrmService.java | 16 + .../src/subsistema2/cep/CepApi.java | 22 ++ .../lab-padroes-projeto-spring/.gitignore | 33 ++ .../.mvn/wrapper/MavenWrapperDownloader.java | 117 +++++++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 50710 bytes .../.mvn/wrapper/maven-wrapper.properties | 2 + .../lab-padroes-projeto-spring/mvnw | 310 ++++++++++++++++++ .../lab-padroes-projeto-spring/mvnw.cmd | 182 ++++++++++ .../lab-padroes-projeto-spring/pom.xml | 82 +++++ .../digitalinnovation/gof/Application.java | 25 ++ .../gof/controller/ClienteRestController.java | 58 ++++ .../digitalinnovation/gof/model/Cliente.java | 43 +++ .../gof/model/ClienteRepository.java | 9 + .../digitalinnovation/gof/model/Endereco.java | 110 +++++++ .../gof/model/EnderecoRepository.java | 9 + .../gof/service/ClienteService.java | 24 ++ .../gof/service/ViaCepService.java | 23 ++ .../gof/service/impl/ClienteServiceImpl.java | 83 +++++ ...bPadroesProjetoSpringApplicationTests.java | 13 + 39 files changed, 1503 insertions(+) create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/README.md create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/assets/tela-api.png create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/desafio-de-projeto.txt create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/.classpath create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/.project create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/.settings/org.eclipse.jdt.core.prefs create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/.settings/org.hibernate.eclipse.console.prefs create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/README.md create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/bin/.gitignore create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/bin/subsistema1/crm/CrmService.class create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/Test.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/facade/Facade.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/singleton/SingletonEager.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/singleton/SingletonLazy.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/singleton/SingletonLazyHolder.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/Comportamento.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/ComportamentoAgressivo.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/ComportamentoDefensivo.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/ComportamentoNormal.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/Robo.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/subsistema1/crm/CrmService.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/subsistema2/cep/CepApi.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/.gitignore create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/.mvn/wrapper/maven-wrapper.jar create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/.mvn/wrapper/maven-wrapper.properties create mode 100755 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/mvnw create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/mvnw.cmd create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/pom.xml create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/Application.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/controller/ClienteRestController.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/model/Cliente.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/model/ClienteRepository.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/model/Endereco.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/model/EnderecoRepository.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/service/ClienteService.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/service/ViaCepService.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/service/impl/ClienteServiceImpl.java create mode 100644 Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/test/java/one/digitalinnovation/gof/LabPadroesProjetoSpringApplicationTests.java diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/README.md b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/README.md new file mode 100644 index 0000000..4d1d41f --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/README.md @@ -0,0 +1,20 @@ +# Desafio de Projeto: Explorando Padrões de Projetos na Prática com Java + +Desafio de Projeto do **Bootcamp GFT START #5 JAVA**, promovido pela [Digital Innovation One](https://www.dio.me). + + +## Descrição do Desafio + +Agora é a sua hora de brilhar! Crie uma solução que explore o conceito de Padrões de Projeto na pŕatica. Para isso, você pode reproduzir um dos projetos que criamos durante as aulas ou, caso se sinta preparado, desenvolver uma nova ideia do zero ;-) + +**Desafio:** Explorando Padrões de Projetos na Prática com Java + + +***Tela da API e POST sendo feito*** +![API POST](./assets/tela-api.png) + + + + + + diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/assets/tela-api.png b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/assets/tela-api.png new file mode 100644 index 0000000000000000000000000000000000000000..4748a94f0f10e74eedfc6d379d91c332f1a14d56 GIT binary patch literal 79429 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 mXGVXV^@gP*?0b*j9I-pusM6 zS*-g75n-$Rbgt2U_2XQH>x&xAZh|iFp2GtTe>X32mwPN!w~;jO_awHbG1eo*Dl96d z-BrxGh+E;+RK6vRDFyOHZ>?{~#o7COe)7fjoKWB4*G-(xNpe4!FMxu|xW5(WPe=B{ zj+E{sAhlkx%|9Hs+4!kguM%N2Ut~QM0ug~OcUX-4AQxL- zb63ywt$JZ>^!wBRSudM6o2IYM*I>ZU)MEs$XErup+(`4w312wECgI^$pzPHt3kL*g z##e&RWo-7}$CztluygBJcRQyUC2kpVW`Kf7c?$JHi@dGA#&2Ih6AZRv@SNM#@Gt^M;jZ zyr3jH6>rZwc|Ua(5J&bi=^K~iHZ3(Qh;U0zIc}8xS=tqCr0ZLj`!Z_SIe#i1@8z?1 z*_70CVZ!+ry}Gri;p`N)S1boLr8nKq#G*_NEYZ-w%$KEa>{0`4o&u!%7>Jb92#pW5*W`R{Ybja7og>&Q)2rB{&G9nu zXiOx=_Et?ObpDwyr?7WF+K7JO9_ZjzxVVsA%0G*>qw09kfw4}-B7OHmxx6`>viQZI zC0bjr4=6qJ59tOnbyW8ggl$s46+Uu1<9^t+hJ3)~n5|x@-np0H#u_Oa>8GT9SnH5M zVz0N~^w@Z^*fN%H&t_q|Co|uTZOHLg7y5Qo`x56S8S1g=9hXGFW{Rb*Yv0uwsN!0R zTNcBz6-j%bp>r6Sksfzz>ebg41+<1N(yc}Pu>qpFMlMNeh&lGp8~*Ge6&-S}qb>nY0P?zerdSs~yEWB+kP@87JsqjEA%atF9c z{9wStBF<)KC$+_Wg`k$t%QB;%>~*_{Re4kcV}wPH1X8-Snq7H&x25+g*X<0Q7mF3v zu(MWVMqdhrXX$wYGU0lm4LD+gY{I)8|Dd@mb@RuG#ZVdtraY!`MJ6>Owc99>o!zTh zD<}L76?$!K|6i=QGF;nO;gbC2u+m&AV`sThrnwQSJA6NB-B0QPYRl-#4%ZO>x|?Hm z4fmSJcnr_{7Y)8K6nAzfEw{G=)~;!RT&|D~dpJaf7pX96E^Mi+By+I`O4k0mm~TfH zv9JrBWtLK4QK`shWD7=|$Q?hLbz*KQci&z-&|gt9{q>V$ZEa(PPXG-ONfLPsXmmte zY_+@grUVnyp2*+s*YNxq=8Jxn0zw!QcUQ$u?i@vY*S}94k&jb2l5c+I0)XVI=oOMm z4^P2Dk?_0qo8e=cn9G}JJN}GNuWPPgO;xK0O5{X6IbWH3An&S#9Ac1Hf5$)`jfTc< z)GB#sk8fb=XGHD^@6-Ai`-lnaP4?FcM0lOmI@`0X+DK&rwHYXR&;#U(MgnSik++Bko*;ROLx27U#f#?J930Idd&kIDgxLX}>j!NLS?+5fc zU*Vw(kO35j`WdP2(#dE#8d~7DP)i;6ssNMG&FwuZ{H{uU*#yP(%Hp!id~2eSwUPH7 z6SuxNB0?@MZdq4(f)fK5U?ka@4MNXYe?5yA0@i@3gg(`~@)m4arOJKMef9EwiS95E zML;NL-`_HqkC8Ig$xo6Y&q!lRS|MSEH$imri-q+z;-v9wRCq$mg-2fg2d=j}6FW)M z4|T5PTKkRY2~nh{nm|iS)Rcnq^oMeDeE8N2Cn&}$IPkIo>K6?GCJYeR?vxo^!OHK(=eU91U!{T+1 zX{1g^B$P}Q4l^Akoz9{J&p6L=4+VxEbN9V;iM`Lw)JzyJhJukU19NoRi~AG%~yexu+{4ca=3Z;v=fqBR-%8G zzgZd^yc+v2q@W+Ofx;LE1tk8^@1ZtK-Ci=wY|Kn;%-o1xSFVv@ud3%lEv0N0zGP_dcPl;m2`L2>4AiQOH2 zi%sL2NIJOTNds=2fmNS5SY8%GS8K-+ELm6O&a@jzDsNv|g1UM3{WsbsFVtb;!IMlB z9QO4Oyv_7KdD|=+B3QI)1=#&jpt!X*zo6Tjm>FeeOgH4ZuXdF7L+?vjDEn=zKigvv zdYG4SRq4v*)Spp+fLSWQV_Kj4(hSE32XEyXD~1J<-tXGVwI_Tx`cFJ$_9xvr&3Yo= zq`t`;?d>>Wz{~QenpS|fVd_o|Q=pfN^R-3|X6E-bS}eqV#C|mKb2+ZUyJ2ewS{XmTER#*4SK(3akMC;fLE~%g#)>+0LG%MK2O#A*AJ0Vy5 zKWP_z`we3VNOKrweo5x;9xzKc@T)UnE|AUb7bd)P!Gw0Z=xBCX$r1fz?JA;(e*c8Jl%h%Yw%BYILp(`0o3Ci9oGRj_(fe&qYuXdfCoU=%-|-p#GOarBYi& z58z#RgC^o?!T^3A6o^`r2ZN3Xe$>j$bPvM<2oj#k41?ZB-!O5+Ts2aHQiGuL zk62)$;eR0qmxYHwd>d4$L8l_w)VBM7;NH!ov$mTNQ+%LnwLTTO{wDQx$VtjuCuXC1 zUs2*#_7AxUy4+!k3_YN$eeeEL`GbQOC;i>U!{dz>@)k>yiOsV8zyOhbS3>O;eCxQ- zC%P5kuG3Ql+}-&qMo_fnd*gF1Ag>qEKQB~rI1btX%p(@X*M2HE$|}mjD5$Sn&eOs4 z5SLrG5x#SyPrmrb`HJu}XD1fpqzVYGHVqU5EP^Z7lLusfD`scBCcj}}dkj3YEPUl{`cfhp1~k__ zb_>`!;X~jXZrj6a=hHVT?)5kxp)cQF&Yrh7x&g7gl9}8DsJ3z-WhpTgT779kUcL zR7JP{L)HwkSsdNH zUsPE_jkdU}9E|*IB8T@rvLI5?oF;C0#tbnZYRk&i)E^6xxrl6wE7mn8Ukmu(pd?D2 zCaP0uh2)+$uYCZ04mTNB3P)&bOQ ztuZN(%1h;`#j$EY57xanR}?@@3T75!{pu)B4Dh%wH>ON~{& zn67`T*eu$s0s}JLgnq!V6dBNd0yF!mm8PL`i~j|`+q?tfLljRx(@^G|3;u>Q08(0* ztilm52&V@^Am$V#W&C#ZMyu^)i&$*^)KA%cSP0+&O<`GWVX^Utx7tpF0Nm%O#rTF+ z|I8TzUt#29nePd&KSfoxXMzB)VWMH|m>T38)UCxfC!QY*2y*4xN_ZZNPN34+-wVx$ux1$7s^-n z-u!Zy^bd7ByN#&hqU5au-6F0>5YNre4Rj7jZ|n9)r^*c{LzQlCjQ37Tk6QxNYRXTr z!l1S~^y)$@lZJI4NYVSlcdJNRK|^HCQhy!m;H99(M3Gc!>2~4>-wz5E_!{dExmvyS zE7j5zvvA9sD{y`k85YNQ=6m>yjE_XnU9t#~M zEL>4FrNBJih56*vc-5|Gtw{PTgN+LI1=;;`{M;I}?!Xf+N8<6R9jslGJVO8KLRmS@ zWz@`u}Q1es+TP?;hO=KbRVt!EEN!K$F}xZr*KAmluxN&H^c@NRYFC`avRIAj(l?4Tj8#v>PG+N%ehYWchjR_X}2a+6AnCr@3e*(NoF zM!#W?-Yo|zFr^>#L}rnB=u_`+yunl$ke^g1qEj-vNWOH>EtrKF{WmYTH345m{bO+_ z$2DynthJrQld2rN05GsoUiDS#CZRN{@|A-!kik|p%WH@@bSoMoQcFGv5lB1*YQ{)yjZbPr+FjT z`QwCWd1LGmX<_B3-_BHutU<&Jl-~cW;v!^0E+Dr}Ci(@qKPX?h^yP=tWsAjW$bYkd`qt$S4d2WnTg#H2LFnLqBa5a2*Q6$bykD}O1Ai>SZw6NWsgCvV zXs5GWvmBHzc0vx2zf)xoe|(MWj_Z&VWzh3|Y+DW0X0T_!QECT`n9IN^_@QQ-`(Z0f>pTMm)8AEdad@*mHfWIU-H;c7a8YzB&AUL z`^hFL`xF6ufg{AB4)uM(_&?i|;A9qNmA_;ukZM5|0C;WBwqhh}M_`@Bn3(}7$F*dn zW0{JRj8i8kK=Sm)%pCp;2&1t4FbeuvPV4iCm-;UfO`0dD+7E8hC2(tjl|DqMxstMcg+Nbz`(7i${ue)=RwBQn0tsxXLn+Eu-9T9miKzmx`d(3p}WRkp8O-#4|mCe>oh1^t!ANkPW4@H^A@6)!== zIc@8HdUoIbDRfyHL;YVaj?n8Gy?%CAljB~%=k8jN?G|(s&OBeP2C_rsL65$@Zefkti-1h^cwOv zhGJ*K`*3G%8JfsdVgW!h;04F4w%>V{m#o!O`#SM;Dt9-CtMVHe1HwS+odb7<@_xO0 z?aZ0w*8t~#7WZtmZn}e9V}IrE5+7YJp#(Jh13sI5`n_Lk=!FzV4<4mPA-*IW#OgvyLyyqq?tP0_Oa|MP%@2lTMl+#g)-`$SbP_1hn-v&aES0RKG^5oEAc5(2$Sy}?gHxnNCP_bZX^zo8%o_X~f zVZLC<=uq>8gzw5|LDj2jrRYiB+%}hDr}MghKc~D3)F9kJ@8*qhsn~k|LJf39#+dk~ zE;SdHuiWTzHuNvQVSo|ueMu%aZa?3(Mirgo(z(>Eb87+XIH=1Sc41e;CO%ATh{w8r zJ@fz)3C(PYlID~`p}JccmylVnK{vN`x({tsVj6- z>^bZzfmX6WVV$bzf7{;aV|Uy#3yX5Omh~-7uuEp0aICYy?wWWeSU2=8**B5>`cd0s zC~E(%;oo)@oc{65K8aGAQu^fGJ*e&f*#}h0RHW5Jg!`hH+m;@$J)R)bg6KY=5)kI= zFeouZS{xY?{`9D?sPadsjD6`z0{BsbW&Fm;IQlH zQo23)Sot>kVOIsphI3Cia|rLO;Hb4ut`({{raEr3kA-8+@YXvo|CZ#> z*nfBJ8XL3Vg4Dysyvon4ekSKLNWvN?=ZkF#H+WrD1b-FwjF=1)Y~}d2w{~3UtF#}2 zh+3Ebx4v&6S|d{h1%zY3xljL*4<(t%TzzO~B6N`f+~E}kzk*JI67qrFt=jgC-_6tP zbf^Ez(I3iq4-(4^FPmg)m)i;dsJyOhfBle)jWx6lR}amb%hzLg)}}xT$Jx0{`EFmt z2>MDnx~+XHTjU#vL(sing239H2p$S@-)5tSqcVG$4duPQe}&g}TV(7HT=TY4+ZoaS zXpHeDNT87Cdr3qdzW+@I(o4F&_x1H9N^+x7`O~K0K6xjNExq!MRo4l`FQ5@(46xa; z?7j1#gR&!M1%mQy&OPT_v1#JMpJ-{3dlwxpO$V7rZT=Fwta}p!TnD5EH7l-im~*(@ zQm5?Q%-w#gLCC`I=RJC@6;e}EA7EeJ!$vypYFd0cY*{ho`{IM?y!(Uk z>rPy_)Fu)r@c`Mpd_Ih$(kbF5?wZb!G zl{LNStRK=FLQj~Q9w(mIr3#tfz-w{KGDL^wk6jEYm9dfPmeRDzY%S4M9kbR*ipEpg*X`E`3$? zkzIx~Lqkg$Vm2@h;b7lvDBiB_3y|BoY+u3lsr=K!_%+uj|43XSkUgCpK~VGLwZkCJ zR^N5kwj=(z+ckI456dYbk6UzicTF1hDzbWGMo}yjLey`SC~@=D%pi^U0hWezz4&CX zyR2GaN!xZJbhpefNp-H_=E0?eCJ^81sIrTcXV=f|A+Lv$3L&{Nry+I6dyYq7*7N>< zIQTpF|BA`XIEdFpy+d`O06ak4jNEa&&TpRNNH06OuRfxF{O&l2gW+@%j0H=kPXk2E zO$DyL|KCDzW^?2dW2d?!Jq>2(<%zvjR8mQDB&t|99BJ?U@p_O2kljHKo+1CG@OX?;bIjJ>Hc&WDSZ)sMlYoL5*X{-WnWfY zkEVLdqRWIU#IjWjl+wD){d(T>df5y=1ovYV!sQRX8=<$q&@iYYxQy61Z?Q}m%x$eK zvz5|l%Dhpf0%aEvFD1iqaQ7s40@QGayW47Pt^_wXz_}(rr`xx^fDisxV(oce^2LVO z|FFXCuRwRjyicS;SDvuat=udZRH<_yJe<6Zz2>h-qTNNDnw@GwVqxZbS%OglDwbCx zhydc}Rz4bXb~0NJH`OpPnw7V`okpJxIaUZ}qrhJZl~`3AY_~mTk!LP#6DLYdRA7Xl z6o{p^Z52T%_+%{r;on614;>Eq?Z;nPdzvm0d9khyrCWR7IjAw=h6Gnt5?irDF%@sn z)YLp^pEKn##s|p`=4-EJ2_f12M`RV)9op>S2V|P#nS}S9B~edH1;mh8f>=j-4OH16 zpR>B%_h{Dao$eKP)tG-Ij*qS@&Nol}72J)>1b#w6?VJ7OKi}d86!JLMFWtpjz5?@Z z57;1%<)=cp2Ps7xkzoTOv3LdDbZZ*I1fO~IKkNOE;#p!+N!OF>zEwsH#=Pr; zl;_Ce&__L;Y3sf9#Ae79fP2lCR;D*Jo)8G|`}KZc_?2TfmWwVzz%z*{g%-h4K4{R3 z?qX;B$777)+|+Ip2yu9^4ZJ~r{tN9wA`(*KB2Uzxv#+h9xZ+jO0QU^%3+JrL_Q7`N zNc?3&iMOC%4OS~A$fRfLw6?|ARBlO0k{;`{e1r82edr2qcljp8j~9` kj9?KhDWO00+aHJSOs~HS@ZF;MYn2Pb`))G+)Ohv(02z + + + + + + + + + diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/.project b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/.project new file mode 100644 index 0000000..9a1e28a --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/.project @@ -0,0 +1,17 @@ + + + lab-padroes-projeto-java + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/.settings/org.eclipse.jdt.core.prefs b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..4611eee --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=16 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=16 diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/.settings/org.hibernate.eclipse.console.prefs b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/.settings/org.hibernate.eclipse.console.prefs new file mode 100644 index 0000000..21fefff --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/.settings/org.hibernate.eclipse.console.prefs @@ -0,0 +1,3 @@ +default.configuration= +eclipse.preferences.version=1 +hibernate3.enabled=false diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/README.md b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/README.md new file mode 100644 index 0000000..0940254 --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/README.md @@ -0,0 +1,6 @@ +# Explorando Padrões de Projetos na Prática com Java + +Repositório com as implementações dos padrões de projeto explorados no Lab "Explorando Padrões de Projetos na Prática com Java". Especificamente, este projeto explorou alguns padrões usando Java puro: +- Singleton +- Strategy +- Facade diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/bin/.gitignore b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/bin/.gitignore new file mode 100644 index 0000000..9abd0e5 --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/bin/.gitignore @@ -0,0 +1,2 @@ +/subsistema2/ +/one/ diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/bin/subsistema1/crm/CrmService.class b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/bin/subsistema1/crm/CrmService.class new file mode 100644 index 0000000000000000000000000000000000000000..32c2da02068d75d95033ca51875d009fd7a1eb5d GIT binary patch literal 749 zcmbVKO>fgc6r4@mI58nO0-JM719lW^mFA>+eLP+}n&eie^WpzxPNpr~ z!nTX?7uDIQk7N1*m!e literal 0 HcmV?d00001 diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/Test.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/Test.java new file mode 100644 index 0000000..b63b632 --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/Test.java @@ -0,0 +1,57 @@ +package one.digitalinnovation.gof; + +import one.digitalinnovation.gof.facade.Facade; +import one.digitalinnovation.gof.singleton.SingletonEager; +import one.digitalinnovation.gof.singleton.SingletonLazy; +import one.digitalinnovation.gof.singleton.SingletonLazyHolder; +import one.digitalinnovation.gof.strategy.Comportamento; +import one.digitalinnovation.gof.strategy.ComportamentoAgressivo; +import one.digitalinnovation.gof.strategy.ComportamentoDefensivo; +import one.digitalinnovation.gof.strategy.ComportamentoNormal; +import one.digitalinnovation.gof.strategy.Robo; + +public class Test { + + public static void main(String[] args) { + + // Singleton + + SingletonLazy lazy = SingletonLazy.getInstancia(); + System.out.println(lazy); + lazy = SingletonLazy.getInstancia(); + System.out.println(lazy); + + SingletonEager eager = SingletonEager.getInstancia(); + System.out.println(eager); + eager = SingletonEager.getInstancia(); + System.out.println(eager); + + SingletonLazyHolder lazyHolder = SingletonLazyHolder.getInstancia(); + System.out.println(lazyHolder); + lazyHolder = SingletonLazyHolder.getInstancia(); + System.out.println(lazyHolder); + + // Strategy + + Comportamento defensivo = new ComportamentoDefensivo(); + Comportamento normal = new ComportamentoNormal(); + Comportamento agressivo = new ComportamentoAgressivo(); + + Robo robo = new Robo(); + robo.setComportamento(normal); + robo.mover(); + robo.mover(); + robo.setComportamento(defensivo); + robo.mover(); + robo.setComportamento(agressivo); + robo.mover(); + robo.mover(); + robo.mover(); + + // Facade + + Facade facade = new Facade(); + facade.migrarCliente("Eduardo", "12630000"); + } + +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/facade/Facade.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/facade/Facade.java new file mode 100644 index 0000000..6333839 --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/facade/Facade.java @@ -0,0 +1,14 @@ +package one.digitalinnovation.gof.facade; + +import subsistema1.crm.CrmService; +import subsistema2.cep.CepApi; + +public class Facade { + + public void migrarCliente(String nome, String cep) { + String cidade = CepApi.getInstancia().recuperarCidade(cep); + String estado = CepApi.getInstancia().recuperarEstado(cep); + + CrmService.gravarCliente(nome, cep, cidade, estado); + } +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/singleton/SingletonEager.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/singleton/SingletonEager.java new file mode 100644 index 0000000..9ab44b4 --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/singleton/SingletonEager.java @@ -0,0 +1,19 @@ +package one.digitalinnovation.gof.singleton; + +/** + * Singleton "apressado". + * + * @author falvojr + */ +public class SingletonEager { + + private static SingletonEager instancia = new SingletonEager(); + + private SingletonEager() { + super(); + } + + public static SingletonEager getInstancia() { + return instancia; + } +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/singleton/SingletonLazy.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/singleton/SingletonLazy.java new file mode 100644 index 0000000..540929c --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/singleton/SingletonLazy.java @@ -0,0 +1,22 @@ +package one.digitalinnovation.gof.singleton; + +/** + * Singleton "preguicoso". + * + * @author falvojr + */ +public class SingletonLazy { + + private static SingletonLazy instancia; + + private SingletonLazy() { + super(); + } + + public static SingletonLazy getInstancia() { + if (instancia == null) { + instancia = new SingletonLazy(); + } + return instancia; + } +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/singleton/SingletonLazyHolder.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/singleton/SingletonLazyHolder.java new file mode 100644 index 0000000..20a339f --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/singleton/SingletonLazyHolder.java @@ -0,0 +1,23 @@ +package one.digitalinnovation.gof.singleton; + +/** + * Singleton "Lazy Holder". + * + * @see Referencia + * + * @author falvojr + */ +public class SingletonLazyHolder { + + private static class InstanceHolder { + public static SingletonLazyHolder instancia = new SingletonLazyHolder(); + } + + private SingletonLazyHolder() { + super(); + } + + public static SingletonLazyHolder getInstancia() { + return InstanceHolder.instancia; + } +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/Comportamento.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/Comportamento.java new file mode 100644 index 0000000..98ac3b1 --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/Comportamento.java @@ -0,0 +1,5 @@ +package one.digitalinnovation.gof.strategy; + +public interface Comportamento { + void mover(); +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/ComportamentoAgressivo.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/ComportamentoAgressivo.java new file mode 100644 index 0000000..5e6532f --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/ComportamentoAgressivo.java @@ -0,0 +1,10 @@ +package one.digitalinnovation.gof.strategy; + +public class ComportamentoAgressivo implements Comportamento { + + @Override + public void mover() { + System.out.println("Movendo-se agressivamente..."); + } + +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/ComportamentoDefensivo.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/ComportamentoDefensivo.java new file mode 100644 index 0000000..8ed1fbe --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/ComportamentoDefensivo.java @@ -0,0 +1,10 @@ +package one.digitalinnovation.gof.strategy; + +public class ComportamentoDefensivo implements Comportamento { + + @Override + public void mover() { + System.out.println("Movendo-se defensivamente..."); + } + +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/ComportamentoNormal.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/ComportamentoNormal.java new file mode 100644 index 0000000..1eb507e --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/ComportamentoNormal.java @@ -0,0 +1,10 @@ +package one.digitalinnovation.gof.strategy; + +public class ComportamentoNormal implements Comportamento { + + @Override + public void mover() { + System.out.println("Movendo-se normalmente..."); + } + +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/Robo.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/Robo.java new file mode 100644 index 0000000..b37f1fb --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/one/digitalinnovation/gof/strategy/Robo.java @@ -0,0 +1,14 @@ +package one.digitalinnovation.gof.strategy; + +public class Robo { + + private Comportamento comportamento; + + public void setComportamento(Comportamento comportamento) { + this.comportamento = comportamento; + } + + public void mover() { + comportamento.mover(); + } +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/subsistema1/crm/CrmService.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/subsistema1/crm/CrmService.java new file mode 100644 index 0000000..7868d4b --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/subsistema1/crm/CrmService.java @@ -0,0 +1,16 @@ +package subsistema1.crm; + +public class CrmService { + + private CrmService() { + super(); + } + + public static void gravarCliente(String nome, String cep, String cidade, String estado) { + System.out.println("Cliente salvo no sistema de CRM:"); + System.out.println(nome); + System.out.println(cep); + System.out.println(cidade); + System.out.println(estado); + } +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/subsistema2/cep/CepApi.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/subsistema2/cep/CepApi.java new file mode 100644 index 0000000..b2233a1 --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-java/src/subsistema2/cep/CepApi.java @@ -0,0 +1,22 @@ +package subsistema2.cep; + +public class CepApi { + + private static CepApi instancia = new CepApi(); + + private CepApi() { + super(); + } + + public static CepApi getInstancia() { + return instancia; + } + + public String recuperarCidade(String cep) { + return "Cachoeira Paulista"; + } + + public String recuperarEstado(String cep) { + return "SP"; + } +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/.gitignore b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/.mvn/wrapper/MavenWrapperDownloader.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..e76d1f3 --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/.mvn/wrapper/maven-wrapper.jar b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054 GIT binary patch literal 50710 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 EfAhh=DF6Tf literal 0 HcmV?d00001 diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/.mvn/wrapper/maven-wrapper.properties b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..abd303b --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.2/apache-maven-3.8.2-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/mvnw b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/mvnw new file mode 100755 index 0000000..a16b543 --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/mvnw.cmd b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/mvnw.cmd new file mode 100644 index 0000000..c8d4337 --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/pom.xml b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/pom.xml new file mode 100644 index 0000000..1a0883e --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/pom.xml @@ -0,0 +1,82 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.5.4 + + + digitalinnovation.one + lab-padroes-projeto-spring + 0.0.1-SNAPSHOT + lab-padroes-projeto-spring + Exemplos de Padrões de Projeto em Spring + + + 11 + 1.5.10 + 2020.0.3 + + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + org.springdoc + springdoc-openapi-ui + ${openapi.version} + + + + + com.h2database + h2 + runtime + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/Application.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/Application.java new file mode 100644 index 0000000..a5d0665 --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/Application.java @@ -0,0 +1,25 @@ +package one.digitalinnovation.gof; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * Projeto Spring Boot gerado via Spring Initializr. + * Os seguintes módulos foram selecionados: + * - Spring Data JPA + * - Spring Web + * - H2 Database + * - OpenFeign + * + * @author falvojr + */ +@EnableFeignClients +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/controller/ClienteRestController.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/controller/ClienteRestController.java new file mode 100644 index 0000000..b58bb8a --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/controller/ClienteRestController.java @@ -0,0 +1,58 @@ +package one.digitalinnovation.gof.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import one.digitalinnovation.gof.model.Cliente; +import one.digitalinnovation.gof.service.ClienteService; + +/** + * Esse {@link RestController} representa nossa Facade, pois abstrai toda + * a complexidade de integrações (Banco de Dados H2 e API do ViaCEP) em uma + * interface simples e coesa (API REST). + * + * @author falvojr + */ +@RestController +@RequestMapping("clientes") +public class ClienteRestController { + + @Autowired + private ClienteService clienteService; + + @GetMapping + public ResponseEntity> buscarTodos() { + return ResponseEntity.ok(clienteService.buscarTodos()); + } + + @GetMapping("/{id}") + public ResponseEntity buscarPorId(@PathVariable Long id) { + return ResponseEntity.ok(clienteService.buscarPorId(id)); + } + + @PostMapping + public ResponseEntity inserir(@RequestBody Cliente cliente) { + clienteService.inserir(cliente); + return ResponseEntity.ok(cliente); + } + + @PutMapping("/{id}") + public ResponseEntity atualizar(@PathVariable Long id, @RequestBody Cliente cliente) { + clienteService.atualizar(id, cliente); + return ResponseEntity.ok(cliente); + } + + @DeleteMapping("/{id}") + public ResponseEntity deletar(@PathVariable Long id) { + clienteService.deletar(id); + return ResponseEntity.ok().build(); + } +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/model/Cliente.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/model/Cliente.java new file mode 100644 index 0000000..3d8dcb3 --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/model/Cliente.java @@ -0,0 +1,43 @@ +package one.digitalinnovation.gof.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.ManyToOne; + +@Entity +public class Cliente { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + private String nome; + @ManyToOne + private Endereco endereco; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getNome() { + return nome; + } + + public void setNome(String nome) { + this.nome = nome; + } + + public Endereco getEndereco() { + return endereco; + } + + public void setEndereco(Endereco endereco) { + this.endereco = endereco; + } + +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/model/ClienteRepository.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/model/ClienteRepository.java new file mode 100644 index 0000000..ea7df26 --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/model/ClienteRepository.java @@ -0,0 +1,9 @@ +package one.digitalinnovation.gof.model; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ClienteRepository extends CrudRepository { + +} \ No newline at end of file diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/model/Endereco.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/model/Endereco.java new file mode 100644 index 0000000..eb5dbf4 --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/model/Endereco.java @@ -0,0 +1,110 @@ +package one.digitalinnovation.gof.model; + +import javax.persistence.Entity; +import javax.persistence.Id; + +/** + * Os atributos desse modelo foram gerados automaticamente pelo site + * jsonschema2pojo.org. Para isso, usamos o JSON de retorno da API do ViaCEP. + * + * @see jsonschema2pojo.org + * @see ViaCEP + * + * @author falvojr + */ +@Entity +public class Endereco { + + @Id + private String cep; + private String logradouro; + private String complemento; + private String bairro; + private String localidade; + private String uf; + private String ibge; + private String gia; + private String ddd; + private String siafi; + + public String getCep() { + return cep; + } + + public void setCep(String cep) { + this.cep = cep; + } + + public String getLogradouro() { + return logradouro; + } + + public void setLogradouro(String logradouro) { + this.logradouro = logradouro; + } + + public String getComplemento() { + return complemento; + } + + public void setComplemento(String complemento) { + this.complemento = complemento; + } + + public String getBairro() { + return bairro; + } + + public void setBairro(String bairro) { + this.bairro = bairro; + } + + public String getLocalidade() { + return localidade; + } + + public void setLocalidade(String localidade) { + this.localidade = localidade; + } + + public String getUf() { + return uf; + } + + public void setUf(String uf) { + this.uf = uf; + } + + public String getIbge() { + return ibge; + } + + public void setIbge(String ibge) { + this.ibge = ibge; + } + + public String getGia() { + return gia; + } + + public void setGia(String gia) { + this.gia = gia; + } + + public String getDdd() { + return ddd; + } + + public void setDdd(String ddd) { + this.ddd = ddd; + } + + public String getSiafi() { + return siafi; + } + + public void setSiafi(String siafi) { + this.siafi = siafi; + } + +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/model/EnderecoRepository.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/model/EnderecoRepository.java new file mode 100644 index 0000000..6852ccf --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/model/EnderecoRepository.java @@ -0,0 +1,9 @@ +package one.digitalinnovation.gof.model; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface EnderecoRepository extends CrudRepository { + +} \ No newline at end of file diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/service/ClienteService.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/service/ClienteService.java new file mode 100644 index 0000000..3f10575 --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/service/ClienteService.java @@ -0,0 +1,24 @@ +package one.digitalinnovation.gof.service; + +import one.digitalinnovation.gof.model.Cliente; + +/** + * Interface que define o padrão Strategy no domínio de cliente. Com + * isso, se necessário, podemos ter multiplas implementações dessa mesma + * interface. + * + * @author falvojr + */ +public interface ClienteService { + + Iterable buscarTodos(); + + Cliente buscarPorId(Long id); + + void inserir(Cliente cliente); + + void atualizar(Long id, Cliente cliente); + + void deletar(Long id); + +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/service/ViaCepService.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/service/ViaCepService.java new file mode 100644 index 0000000..912c7ae --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/service/ViaCepService.java @@ -0,0 +1,23 @@ +package one.digitalinnovation.gof.service; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +import one.digitalinnovation.gof.model.Endereco; + +/** + * Client HTTP, criado via OpenFeign, para o consumo da API do + * ViaCEP. + * + * @see Spring Cloud OpenFeign + * @see ViaCEP + * + * @author falvojr + */ +@FeignClient(name = "viacep", url = "https://viacep.com.br/ws") +public interface ViaCepService { + + @GetMapping("/{cep}/json/") + Endereco consultarCep(@PathVariable("cep") String cep); +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/service/impl/ClienteServiceImpl.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/service/impl/ClienteServiceImpl.java new file mode 100644 index 0000000..dd079cd --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/main/java/one/digitalinnovation/gof/service/impl/ClienteServiceImpl.java @@ -0,0 +1,83 @@ +package one.digitalinnovation.gof.service.impl; + +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import one.digitalinnovation.gof.model.Cliente; +import one.digitalinnovation.gof.model.ClienteRepository; +import one.digitalinnovation.gof.model.Endereco; +import one.digitalinnovation.gof.model.EnderecoRepository; +import one.digitalinnovation.gof.service.ClienteService; +import one.digitalinnovation.gof.service.ViaCepService; + +/** + * Implementação da Strategy {@link ClienteService}, a qual pode ser + * injetada pelo Spring (via {@link Autowired}). Com isso, como essa classe é um + * {@link Service}, ela será tratada como um Singleton. + * + * @author falvojr + */ +@Service +public class ClienteServiceImpl implements ClienteService { + + // Singleton: Injetar os componentes do Spring com @Autowired. + @Autowired + private ClienteRepository clienteRepository; + @Autowired + private EnderecoRepository enderecoRepository; + @Autowired + private ViaCepService viaCepService; + + // Strategy: Implementar os métodos definidos na interface. + // Facade: Abstrair integrações com subsistemas, provendo uma interface simples. + + @Override + public Iterable buscarTodos() { + // Buscar todos os Clientes. + return clienteRepository.findAll(); + } + + @Override + public Cliente buscarPorId(Long id) { + // Buscar Cliente por ID. + Optional cliente = clienteRepository.findById(id); + return cliente.get(); + } + + @Override + public void inserir(Cliente cliente) { + salvarClienteComCep(cliente); + } + + @Override + public void atualizar(Long id, Cliente cliente) { + // Buscar Cliente por ID, caso exista: + Optional clienteBd = clienteRepository.findById(id); + if (clienteBd.isPresent()) { + salvarClienteComCep(cliente); + } + } + + @Override + public void deletar(Long id) { + // Deletar Cliente por ID. + clienteRepository.deleteById(id); + } + + private void salvarClienteComCep(Cliente cliente) { + // Verificar se o Endereco do Cliente já existe (pelo CEP). + String cep = cliente.getEndereco().getCep(); + Endereco endereco = enderecoRepository.findById(cep).orElseGet(() -> { + // Caso não exista, integrar com o ViaCEP e persistir o retorno. + Endereco novoEndereco = viaCepService.consultarCep(cep); + enderecoRepository.save(novoEndereco); + return novoEndereco; + }); + cliente.setEndereco(endereco); + // Inserir Cliente, vinculando o Endereco (novo ou existente). + clienteRepository.save(cliente); + } + +} diff --git a/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/test/java/one/digitalinnovation/gof/LabPadroesProjetoSpringApplicationTests.java b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/test/java/one/digitalinnovation/gof/LabPadroesProjetoSpringApplicationTests.java new file mode 100644 index 0000000..f2c1e1f --- /dev/null +++ b/Desafios-de-Projeto/Explorando-Padroes-de-Projetos-na-Pratica-com-Java/lab-padroes-projeto-spring/src/test/java/one/digitalinnovation/gof/LabPadroesProjetoSpringApplicationTests.java @@ -0,0 +1,13 @@ +package one.digitalinnovation.gof; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class LabPadroesProjetoSpringApplicationTests { + + @Test + void contextLoads() { + } + +}