From f97b040d8f4521e02f58af104b88df7dec014337 Mon Sep 17 00:00:00 2001 From: "sil_cra_dor@yahoo.com" Date: Wed, 13 Jan 2021 21:13:49 +0200 Subject: [PATCH 1/2] push Technologies --- .run/Tomcat 9.0.40.run.xml | 23 +++- .vs/ProiectColectiv/v16/.suo | Bin 0 -> 47616 bytes .vs/VSWorkspaceState.json | 16 +++ .vs/slnx.sqlite | Bin 0 -> 163840 bytes .../ubb/services/TechnologiesServicempl.java | 18 +++ .../java/ro/ubb/controllers/Technologies.java | 20 +++ .../java/ro/ubb/constants/Technologies.java | 17 +++ .../implementations/TechnologiesDaolmpl.java | 120 ++++++++++++++++++ .../ro/ubb/interfaces/TechnologiesDao.java | 4 + .../main/java/ro/ubb/models/Technologies.java | 27 ++++ 10 files changed, 242 insertions(+), 3 deletions(-) create mode 100644 .vs/ProiectColectiv/v16/.suo create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/slnx.sqlite create mode 100644 EmployeeManagementApp/EmployeeAppBusiness/src/main/java/ro/ubb/services/TechnologiesServicempl.java create mode 100644 EmployeeManagementApp/EmployeeAppFront/src/main/java/ro/ubb/controllers/Technologies.java create mode 100644 EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/constants/Technologies.java create mode 100644 EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/implementations/TechnologiesDaolmpl.java create mode 100644 EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/interfaces/TechnologiesDao.java create mode 100644 EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/models/Technologies.java diff --git a/.run/Tomcat 9.0.40.run.xml b/.run/Tomcat 9.0.40.run.xml index 48a1bed5..5aec9311 100644 --- a/.run/Tomcat 9.0.40.run.xml +++ b/.run/Tomcat 9.0.40.run.xml @@ -1,10 +1,11 @@ - + + diff --git a/.vs/ProiectColectiv/v16/.suo b/.vs/ProiectColectiv/v16/.suo new file mode 100644 index 0000000000000000000000000000000000000000..618411ad6efd358a9260e3fdaba1da60d02f6a84 GIT binary patch literal 47616 zcmeHQ349aP_D;*LAR>rRK&rBdZB19&3fR4%EtIw(N)XdFEum>rk`|~1MMPX5pn^{p z5q&Q31QhTIsDBq+9aZ_$Zf>xyneKnb+vr*UA0}6nv0haA(AO*MtxE{C^;CtNw zpZ5flJE86W@2kyn`%k$EnE@xazZ2R1r=M;Ab?slSi>*)=azAhp&Kb@=fbE}km+hZn zZ2zp&Z2vt0W&3Y||H}5y`+T*3UT=eYPPg{o4rxjO*#4PkZ2$DzOFqwo#f6|PgaXZg z<^ap2CHz*>c^mlW0Ota2fp!4nw1n*qa3!Dz7#;&Z7Kj7lfdqiziSUzvWZ)`b zAi(g!@UI3^fK(|g9exIo31k7;0OJmYe+_UgkOSlb3?B|Z4;TUD0|fxXN5UTkTnCH> zt_K)C2EG9p3)~2d0~l_EUj!5bB~n-^{4!uXU;e_nYmcN)MXHxm!f_iYPR2R~~@!E9d;75(%HOm#;Cps$)t~+`U zJWAm2Sf@1H0xBYJ$GC-{>p(~jcwGlL;R4-wfd{YB6$_lPqn-zn|CM=Et@J10ndIx} z$oG@Ww}baKf)CHadsy(_QOB8>@FrE5>)H^5F?n>pRWj(4Zza#EmHs7&dz6DETn3)Y zlvYSjzD}40lpu66-oOS*X3#SW)SXntdwJA@KIzJQx$}zmvnz0E2?u7lv*mwgm%p$1 z=P1ms5-|IT6|0Ksv7c1`ILFgk|5Ffmj`TDw^f{OF=14yr7da=?N1;%{&+#kAjWq;211|mC%OK+KQEB~LdBB~ z{@$-8{glUebAi-<&K><}f0X@rbFBXy&nVB)TK_2bAumri8Y8a-Bdrmma5;`;7>9>L z66kBp74H;}tg*66-6SJN-0p;wHR9Iog3u;Dwdkws?>7$o5Z}E#<^o>pyvAwgEbK`kW6G z;|;X-0DS^TKjmxk{6metILj!(Ta*a%6JPI>5CDD3wq^R-+CL@j>WwB~;& z^u3g|&}pF`BTx|IyC2DaP{uE}0r%@_|HD9=G8j57^y36gf*9ZZNcyBry@1yAhl4g{ zPjuSod*=X2KLyXBPD3mG-hQS(#y9^HLj4QJXsz^rKwO#s(USfcLBoTaR2=Ic>B>$e zibv2-2%*f4P7D2L-}TRL`oDp$Km31;pxF{$*WJW#NSSF9JGfqgNm=Q7qXMmWC;vNc`3}E+|EM{Mo;3q*ClZB#=lK$^~?#;A^k9F^~ z@Xud1EwF9q)pu3u*CmS{%z0w|f^Jjt*OQA5__gcOqLeo&OW2OrxK7{#tY{;ZcvUM< zQg@$x5)(lCYlfStL#6XYKOOaeHOGeR$rfrxHQry$)R3sOiDVfsl|c0LJ97de}j$N&36eOF+IK#lE{Etk9*`7#I2Ma^w+_a7B_ zSLP^ZS7L)BXKO_$`?WIUH|vqJr`WuF;-o8gZn*jA2Yc3THC0>_Req#n|CJv;GPNva z|FY!RRm?y+r)6Kt)BwH3CprJ!`A@Muh^>yLEp}kJ$SvBZur1nMQVRYvq&-5&Q!+NJUKZX#+3(2r2f}~zUFG)gi~cAf^L{nbDF>gYc|@4w=r+$HPFUO7KzaY91W_~pYMn6qGa_#tLXU0uWD1jn#I-LjM1 z|1~ZD>N@^pqdix-@vLd!u4U$NDB3mqK8G;ITH%`%C9`JQv$3ys`68mL^{I|K%f7rj zKdDW-2QAGH+}rEg*gaQ#cMVHGE)m(Uzf?vGy_yBR3%UC;^tPf5G!p!OJm$UWn0uuP zzWTEwB>qP`MX?^rPZRAfInp@r6FGaWwE2uctK3y)+SR14;=Md_ z{(Uw4HURU0VOkvfY&tFT&p0uv>M@Y?zlwrO;%Gr@St@K&vkB~t z7sBzZFQ7I37a*=Y{}1l@d!YSyD$0-ZN{3gO;6RiyrCPGPbdzyY&7n%N;(oabqoc}X z|M%8F?|%w~*B%txz|xv?l-?s9CVQUUR%*7GdK(M+ z0dyvri+$Oj$$Y8I38`gF6zX43Twt5lTK|;o&t1+X+SyT}OJ0<7Zdn4RMxARyLPJ=e z`}sltV#MVflWsWrm%6MpikJek{UC zn@%N)N6_a8p-niQHu{NTWR)Z7lP+^eEB&t#caHQdZS=j*06@Pk?ON%71KP6vi(apf z1QZAUqnkE0Ix!+{YL?OBFnQMjJ&I?s|6+R5lMU>>(BGIX6V*}FC{U8> zUHUC*{2YROlX@1p&-X5e$UDDe$eT<172aTcLi+o6wTYRec z9J+7P`mAm@;idU^PT%_ZueY?mAal`ggEoHneAm4xJ$DovlOvHmE^V7RT7fVtU;`?F znGLMJji|rO5R8SBFkKe)nE~l9)%jl})Qfw#f$48b{&`V#wD>M&iRtCH(tFIBG5_-a^&axj*v^p~Y9DWPJ~QZ%4!yB%SpJNZiv1~}>)$(PWX+Zm zW1r(a7A@^EQuj`-z}~QRE1d}(p=f^}C#-Z9n@pFhTa6)Tr)_gjs5^JvdWS42O>NR&`RF~ z+FT<@r;WZ({@Z1Y5TEM%SPt4;<4EU=|7dvoan*m&_@zwP>A^d9vGqUIUvHh!DtFA= z*SB~k{^5^4S)V#-;uF#H?%cm{i0z#{R3*BkS8Ja0J~el`@_)3gV%droShBT-Y$+wL zx~HwX_x&fF{ZEWq)(K&Ow12jJf9&64eT+Y(e-+*&2hdsNxfC3!g;32izyp!qch!7wvMwf_P5WxMkumPc7B%+@k*DleBR-WLBPR?;P0>mTL)9S(l*>-?QzDcd$irfI#O z<38!P0CGdld!zIBTU$T*Mr7J`lT$)xbliLNM?CAYe>Cr$_k++uaPhrANd8E^W;!SK@Id$ z6;V(Y3ECo?)e)6#vYPDX;;0NW)JHa}(Oz>?%$PA!#DXe2iaa8`!clCqTg*if;iDkQ zMYKV2QF{I&!qZVts_mvhR#SDA-Drsj&#Nx7n2WD9)fC#wP1Zq00|pr5i{lfblVamc z`oyHM5%R;8Z!yH^7++;9vX~l|)>tY)T1oHRI^9-LX|$W{tx2uGe6vZ{OxOAWUzs9h zPUggFqs3fRBR}A#=qAmfv4R@5jXa1n=SeWWCSFU>aM5pECs$jGpyw;VkuuXN%u2Wp zR@@tqyS6pMkGr^06H*I{v>42|GliYmoVqmSo5@)kNSL_(SES1OIlu77#bjj;h|7$Q zOdAjv8yOv)p^r?>j7|mboT^Vx(r0C5rN>U2IxyGlD9*z6K4K08syLzUkxtSDYt;HW z*#=U-0q`w_S6YJ@1RF)Is{r_J(Dr%F0lECec;e9?)e-y8_R`JDzH}tQ`0OEi2+x$i z$hv>N&y@G@oGvmcOCKE>n-HCqq)*f*CT8fTVJ7!;NJg?AzuHuP3f^LJ44#^v+yRfx zMQsnX{>PyeL}ORPG_-{{?9>s7f6=gd(BmvsxR#1DCLk3^$4WLmS`L5dh&>Iwe+hKX zuIXF8sDY#2|>zlL5_9a%V&}j$Tj$q9v?gK=7q!zkk4XMVB zsQAqz-vQ>u3d0vw!xc07I>Fqo0FBEUZe6#cs)#i(1h2Yfbd`r%IwLY$Ya( zO5OG=wLb(&YBg5sq1KXWN0q(CV;ZfoMq|7e_M+oZZB99}`?D6hj5D%um>8LqP*NHhZ!(s~CdHXdu?b00dVO?4 ztbQt+n$mUAg{aNE5GCWx>UukS)I*`?zV`%ILZ8D(P`yl3Rl75L80g_q4VBFCq7z&j z{o>q%`sEtAw$g%~F5}FbhICWbP>J)CRnT)9w|;75LrVRQD*wrL6y~I}tfREsJO)Chor;$Sz&3R({^rR6Ez?IqgkO6)9;{s{tF9IY}05 zjlBS~UKxSU>6zB|Z;$~VO$THbNPiRT`i)9x#+rT=mAeg}`woQe{hT7Fsib59$coUm zl%Gt=H5c1$4qIte)F`t9CJ6;q)g@+I)Ckc!q0nZtIHC&8l{i$JEAx!SMnk*Fqc6vO3p$-K z_Kr@gQ(1rMYyEh=-IrO5X2#!9vtz0SNMg748SIQkwISL>&)-kSDv__<>A=r zYrBoS_2*{0U;kH4_W^si9_jq8apaNx<3AYXn%}3+{ulm?6(eT+zISc&IrCmzJ3HsA z*9t#xGk3)H+5Lv)9NOFO)q(quaC+uZ=lERrOB{BTqBl$0;WBgSXj}(^7k(l3maJe@_t z+*J5!(s>5_On`g2a6cLDE5kV4TK!re2gn760SwQBPxd7rC;$ophI5F$4j2tw4{&`I z!wvAq0yhHVfSUk@7r`$EN&u4-RtA4OV3z(f9#Mh+%Kg74;=di>VqMO(tARg=r4&iHIsH% zubF%4x?6SKCbXTIexNgw@4*EyKjd9wJ@^0id}1T^ADO7g(Lh7`kK;^JeePvMkoP~i zr-A)PaMvHT@yC772WNd*HRIm{vyQJEePOGF9!tBg{h;l!qKR7*w;cFnUtIF1g@xR5 z&!fJa`roe*XB6D~Hu%2(rdEEQGuxUvYYAsrF8bG7-EKWNGb7>qKOC*Tj=aOsGym?K z;<1Aa=d_*jzq?m|s#cbPeE*>l+kZUN2?-~<{j-Pl_5D3^ZSFQJatm_rZ$JKI;bR9v z-~Bmf+~O5aMYeH#Jo5WZw{3iB&&2 z4YmLB>gU_C*WGf+k@iqqV_J_J=iIuZ`>Th?)ownvD@-jP1KoezpYP9cKlLhbOWc*4 z-*O~>g6~hc^oe}8`W&S>Eu~1g;GRZ8WADBXcsRH)@vDyHY`nWbzQ3D*$8q0vx-sDR zNJh$CRe?DRlk*e zQok&JC}zo%cNHwz)#Z_-mdTxGrOUZrpXE}Uu;l+9E}K%_@p#cY7nOfB+u-=T`q3kA zCmx7j+^$u7VG7|Arug+W6_o!HBaC?>3+Ln|pt@y!Ppol#MA9mp!%ajX#q| zzWktW)HzrE^3vkGH*Z)hm!`5UF|2;q)Z?FM3Fqzmz4A!tZQtAjkNvi9;~l-S#vbd` zeQ0I>**CO5I`4b)%C+x}{&C;NxcezI@Th&t?+4efFPeQ?&wteU52YkM+Mf#>r?|m(-b=zImSDy-dev4yI?_M=C-q=w4^m8xfg{8hlL5)W} zmUGy*-|+oweewS$6>W&f3Gi#(7Vu3abzcmyB81;%9xiB6#BX~m_m(VJe&ClsK3*07 zzGddB^gApCaffQBZ|%_X{$|4?^7|)G+o7HZ%Mtuf;2B^AuoB=z;#uH1VCiYzetp+J zWlQ$fhh}Zx@z=6}cMZr`J9h4ozaN|)z9HVwV)ypkWL?SY3)lHGR-cUTzpIU(zO>Np zbE!kUe%QNdM%(d+N3Us~IC@`u%h5mY-ISVQJK(szW6rSo%}|9rS{}6(O8s+;kNwY2 zb@`c={hwn6Njr1O({cY{%GfD0C->nQ!!x84<{tj+e;gx7@jaiz5Yp#-M&^9fW4VTg zf&Pus{6|ar<9w8VAp0+egLaBv^f|jzcch^JFUkLSN>Q0{%|VB zZA;zWiora8Zn*x)HT`PkPi>EL-sO}Z@Bbv{Dtq!*?=K(o&W^V6<8IFnU)gu-%fVU85(zLT7OU;ST0nA{mOgv4ANkChXuaY#YdICT9=%$qpchY-u1MMH(>sQ%a{eC+IX&&? zocZs{BfI9e;qBYD^t`Ml?>|v}LTCT};=8RL8U9+c!%uH3n)Tpc&$d6hj@c;JYT0+q z+F+i4XsN$i_#Y~zy*ct9m*668F_=T%;wi&7;t#(8M5m3ucL_M?yOfalRNu! z-x&Gi)*cUc=(;6g{>l{>HMA^Gw*Em&|5uOvN083YZc=MKJ}dtT9{G=!@{glL z2Ts)bDEF`{F!uQK{lmC=_z&9W(neTo{fh>DfB4Th;j0twsSy7MGX4$#ecAp}TmJjz z|7f>N8)mKP9|Zcc{4v<&|GxDfu5)W|efYtWVSRUOGE^_9yywn|vv&7hwQX0Db=&g3 zomv*p(OYYKvLuytSZhA=zCgae%KL)FiRq>$&nn>T_kWf41NHF_?lw{0YGBiS|F@yv GPyBzL4jMB6 literal 0 HcmV?d00001 diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 00000000..b4acb70f --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,16 @@ +{ + "ExpandedNodes": [ + "", + "\\EmployeeManagementApp", + "\\EmployeeManagementApp\\EmployeeAppPersistence", + "\\EmployeeManagementApp\\EmployeeAppPersistence\\src", + "\\EmployeeManagementApp\\EmployeeAppPersistence\\src\\main", + "\\EmployeeManagementApp\\EmployeeAppPersistence\\src\\main\\java", + "\\EmployeeManagementApp\\EmployeeAppPersistence\\src\\main\\java\\ro", + "\\EmployeeManagementApp\\EmployeeAppPersistence\\src\\main\\java\\ro\\ubb", + "\\EmployeeManagementApp\\EmployeeAppPersistence\\src\\main\\java\\ro\\ubb\\constants", + "\\EmployeeManagementApp\\EmployeeAppPersistence\\src\\main\\java\\ro\\ubb\\exceptions" + ], + "SelectedNode": "\\EmployeeManagementApp\\EmployeeAppPersistence\\src\\main\\java\\ro\\ubb\\interfaces\\TechnologiesAreasDao.java", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..8f48f931dd516e6e62bfc8a611dfd979392f9687 GIT binary patch literal 163840 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 V9nCFz)$p0(fok|dka2VT{{UAmnc@Hd literal 0 HcmV?d00001 diff --git a/EmployeeManagementApp/EmployeeAppBusiness/src/main/java/ro/ubb/services/TechnologiesServicempl.java b/EmployeeManagementApp/EmployeeAppBusiness/src/main/java/ro/ubb/services/TechnologiesServicempl.java new file mode 100644 index 00000000..e48f8181 --- /dev/null +++ b/EmployeeManagementApp/EmployeeAppBusiness/src/main/java/ro/ubb/services/TechnologiesServicempl.java @@ -0,0 +1,18 @@ +package ro.ubb.services; + +import ro.ubb.exceptions.DbException; +import ro.ubb.implementations.TechnologiesDaoImpl; +import ro.ubb.interfaces.TechnologiesDao; +import ro.ubb.interfaces.TechnologiesService; + +import java.util.List; + +public class TechnologiesServiceImpl implements TechnologiesService { + + @Override + public List getAllTechnologies() throws DbException { + TechnologiesDao TechnologiesDao=new TechnologiesDaoImpl(); + + return TechnologiesDao.getAllTechnologiesNames(); + } +} diff --git a/EmployeeManagementApp/EmployeeAppFront/src/main/java/ro/ubb/controllers/Technologies.java b/EmployeeManagementApp/EmployeeAppFront/src/main/java/ro/ubb/controllers/Technologies.java new file mode 100644 index 00000000..74ebd1c3 --- /dev/null +++ b/EmployeeManagementApp/EmployeeAppFront/src/main/java/ro/ubb/controllers/Technologies.java @@ -0,0 +1,20 @@ +package ro.ubb.controllers; + +import ro.ubb.dtos.TechnologiesDto; +import ro.ubb.exceptions.DbException; +import ro.ubb.mappers.TechnologiesDtoMapper; +import ro.ubb.services.TechnologiesServiceImpl; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.List; + +@Path("/technologies") +public class TechnologiesController { + + @GET + @Path("/technologies") + @Produces(MediaType.APPLICATION_JSON) + public List getAllTechnologies() { + return new technologiesServiceImpl().getAllTechnologies(); + } diff --git a/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/constants/Technologies.java b/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/constants/Technologies.java new file mode 100644 index 00000000..0a1d95bd --- /dev/null +++ b/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/constants/Technologies.java @@ -0,0 +1,17 @@ +package ro.ubb.constants; + +public enum Technologies { + DATABASES("Databases"), + FRAMEWORKS("Frameworks"), + PROGRAMMING_LANGUAGE("Programming language"); + + private final String Technologies; + + Technologies(String Technologies) { + this.Technologies = Technologies; + } + + public String getTechnologies() { + return Technologies; + } +} \ No newline at end of file diff --git a/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/implementations/TechnologiesDaolmpl.java b/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/implementations/TechnologiesDaolmpl.java new file mode 100644 index 00000000..9151e3e6 --- /dev/null +++ b/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/implementations/TechnologiesDaolmpl.java @@ -0,0 +1,120 @@ +package ro.ubb.implementations; + +import ro.ubb.exceptions.DbException; +import ro.ubb.interfaces.GenericDao; +import ro.ubb.interfaces.TechnologiesDao; +import ro.ubb.models.Region; +import ro.ubb.models.Technologies; +import ro.ubb.utilities.DatabaseConnection; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +public class TechnologiesDaoImpl implements GenericDao, TechnologiesDao { + @Override + public Technologies find(int id) throws DbException { + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + + try { + DatabaseConnection databaseConnection = new DatabaseConnection(); + Connection connection = databaseConnection.getConnection(); + + String querySelect = "SELECT Technologies_Area FROM skills " ; + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(querySelect); + + int skillID; + String skillName; + String technologyAreaName; + Technologies technologies = null; + + if (resultSet.next()) { + skillID = resultSet.getInt("ID"); + skillName = resultSet.getString("Skill_Name"); + + technologyAreaName = resultSet.getString("Technologies_Area"); + Technologies[] technologies = Technologies.values(); + for (Technologies area : technologies) { + if (area.getTechnologies().equals(technologiesName)) { + technologies = area; + } + } + } else + return null; + + Skill skill = new Skill(); + skill.setId(skillID); + skill.setSkillName(skillName); + skill.setTechnologies(technologies); + + return skill; + } catch (SQLException sqlException) { + throw new DbException("Something went wrong with the database"); + } + } + + @Override + public Technologies save(Object entity) throws DbException { + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + + try { + DatabaseConnection databaseConnection = new DatabaseConnection(); + Connection connection = databaseConnection.getConnection(); + + Technologies technologies = (Technologies) entity; + + String queryInsert = "INSERT INTO technology(Name) VALUES (?); "; + PreparedStatement statement = connection.prepareStatement(queryInsert); + statement.setString(1, technologies.getTechName()); + int result = statement.executeUpdate(); + + if (result == 1) + return technologies; + else + return null; + } catch (SQLException sqlException) { + throw new DbException("Something went wrong with the database"); + } + } + + @Override + public Technologies delete(int id) throws DbException { + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + + try { + DatabaseConnection databaseConnection = new DatabaseConnection(); + Connection connection = databaseConnection.getConnection(); + + String queryDelete = "DELETE FROM technology WHERE ID = ?"; + PreparedStatement preparedStatement = connection.prepareStatement(queryDelete); + preparedStatement.setInt(1, id); + Technologies technologies = (Technologies) find(id); + int result = preparedStatement.executeUpdate(); + + if (result == 1) + return technologies; + else + return null; + } catch (SQLException sqlException) { + throw new DbException("Something went wrong with the database"); + } + } + + @Override + public Technologies update(Object entity) throws DbException { + return null; + } +} diff --git a/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/interfaces/TechnologiesDao.java b/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/interfaces/TechnologiesDao.java new file mode 100644 index 00000000..4875179b --- /dev/null +++ b/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/interfaces/TechnologiesDao.java @@ -0,0 +1,4 @@ +package ro.ubb.interfaces; + +public interface TechnologiesDao { +} diff --git a/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/models/Technologies.java b/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/models/Technologies.java new file mode 100644 index 00000000..cdeee1ff --- /dev/null +++ b/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/models/Technologies.java @@ -0,0 +1,27 @@ +package ro.ubb.models; + +public class Technologies { + private int idTech; + private String techName; + + public Technologies(int idTech, String techName) { + this.idTech = idTech; + this.techName = techName; + } + + public int getIdTech() { + return idTech; + } + + public void setIdTech(int idTech) { + this.idTech = idTech; + } + + public String getTechName() { + return techName; + } + + public void setTechName(String techName) { + this.techName = techName; + } +} From fff76af5641fc5cce8fd8d4c120aec2bf8ff1ee2 Mon Sep 17 00:00:00 2001 From: "sil_cra_dor@yahoo.com" Date: Fri, 15 Jan 2021 10:45:33 +0200 Subject: [PATCH 2/2] push Silviu --- .../ubb/interfaces/TechnologiesService.java | 12 ++ ...empl.java => TechnologiesServiceImpl.java} | 6 +- ...ogies.java => TechnologiesController.java} | 7 +- .../implementations/TechnologiesDaoImpl.java | 74 +++++++++++ .../implementations/TechnologiesDaolmpl.java | 120 ------------------ .../ro/ubb/interfaces/TechnologiesDao.java | 5 + 6 files changed, 97 insertions(+), 127 deletions(-) create mode 100644 EmployeeManagementApp/EmployeeAppBusiness/src/main/java/ro/ubb/interfaces/TechnologiesService.java rename EmployeeManagementApp/EmployeeAppBusiness/src/main/java/ro/ubb/services/{TechnologiesServicempl.java => TechnologiesServiceImpl.java} (63%) rename EmployeeManagementApp/EmployeeAppFront/src/main/java/ro/ubb/controllers/{Technologies.java => TechnologiesController.java} (63%) create mode 100644 EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/implementations/TechnologiesDaoImpl.java delete mode 100644 EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/implementations/TechnologiesDaolmpl.java diff --git a/EmployeeManagementApp/EmployeeAppBusiness/src/main/java/ro/ubb/interfaces/TechnologiesService.java b/EmployeeManagementApp/EmployeeAppBusiness/src/main/java/ro/ubb/interfaces/TechnologiesService.java new file mode 100644 index 00000000..c192b52a --- /dev/null +++ b/EmployeeManagementApp/EmployeeAppBusiness/src/main/java/ro/ubb/interfaces/TechnologiesService.java @@ -0,0 +1,12 @@ +package ro.ubb.interfaces; + +import ro.ubb.exceptions.DbException; + +import java.util.List; + +public interface TechnologiesService { + + List findAll() throws DbException; + + +} diff --git a/EmployeeManagementApp/EmployeeAppBusiness/src/main/java/ro/ubb/services/TechnologiesServicempl.java b/EmployeeManagementApp/EmployeeAppBusiness/src/main/java/ro/ubb/services/TechnologiesServiceImpl.java similarity index 63% rename from EmployeeManagementApp/EmployeeAppBusiness/src/main/java/ro/ubb/services/TechnologiesServicempl.java rename to EmployeeManagementApp/EmployeeAppBusiness/src/main/java/ro/ubb/services/TechnologiesServiceImpl.java index e48f8181..32a70369 100644 --- a/EmployeeManagementApp/EmployeeAppBusiness/src/main/java/ro/ubb/services/TechnologiesServicempl.java +++ b/EmployeeManagementApp/EmployeeAppBusiness/src/main/java/ro/ubb/services/TechnologiesServiceImpl.java @@ -10,9 +10,9 @@ public class TechnologiesServiceImpl implements TechnologiesService { @Override - public List getAllTechnologies() throws DbException { - TechnologiesDao TechnologiesDao=new TechnologiesDaoImpl(); + public List findAll() throws DbException { + TechnologiesDao technologiesDao=new TechnologiesDaoImpl(); - return TechnologiesDao.getAllTechnologiesNames(); + return (technologiesDao).findAll(); } } diff --git a/EmployeeManagementApp/EmployeeAppFront/src/main/java/ro/ubb/controllers/Technologies.java b/EmployeeManagementApp/EmployeeAppFront/src/main/java/ro/ubb/controllers/TechnologiesController.java similarity index 63% rename from EmployeeManagementApp/EmployeeAppFront/src/main/java/ro/ubb/controllers/Technologies.java rename to EmployeeManagementApp/EmployeeAppFront/src/main/java/ro/ubb/controllers/TechnologiesController.java index 74ebd1c3..52a1c9a6 100644 --- a/EmployeeManagementApp/EmployeeAppFront/src/main/java/ro/ubb/controllers/Technologies.java +++ b/EmployeeManagementApp/EmployeeAppFront/src/main/java/ro/ubb/controllers/TechnologiesController.java @@ -1,8 +1,6 @@ package ro.ubb.controllers; -import ro.ubb.dtos.TechnologiesDto; import ro.ubb.exceptions.DbException; -import ro.ubb.mappers.TechnologiesDtoMapper; import ro.ubb.services.TechnologiesServiceImpl; import javax.ws.rs.*; @@ -15,6 +13,7 @@ public class TechnologiesController { @GET @Path("/technologies") @Produces(MediaType.APPLICATION_JSON) - public List getAllTechnologies() { - return new technologiesServiceImpl().getAllTechnologies(); + public List getAllTechnologies() throws DbException { + return new TechnologiesServiceImpl().findAll(); } +} diff --git a/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/implementations/TechnologiesDaoImpl.java b/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/implementations/TechnologiesDaoImpl.java new file mode 100644 index 00000000..3fabcd19 --- /dev/null +++ b/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/implementations/TechnologiesDaoImpl.java @@ -0,0 +1,74 @@ +package ro.ubb.implementations; + +import ro.ubb.constants.TechnologyArea; +import ro.ubb.exceptions.DbException; +import ro.ubb.interfaces.GenericDao; +import ro.ubb.interfaces.TechnologiesDao; +import ro.ubb.models.Technologies; +import ro.ubb.utilities.DatabaseConnection; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; + +public class TechnologiesDaoImpl implements GenericDao, TechnologiesDao { + @Override + public List findAll() throws DbException { + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + + try { + DatabaseConnection databaseConnection = new DatabaseConnection(); + Connection connection = databaseConnection.getConnection(); + + String querySelect = "SELECT Technologies_Area FROM skills " ; + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(querySelect); + + + String technologyAreaName; + + List names=new ArrayList<>(); + + if (resultSet.next()) { + + technologyAreaName = resultSet.getString("Technologies_Area"); + TechnologyArea[] technologyAreas = TechnologyArea.values(); + for (TechnologyArea area : technologyAreas) { + if (area.getTechnologyArea().equals(technologyAreaName)) { + names.add(area.name()); + } + } + } else + return null; + + return names; + } catch (SQLException sqlException) { + throw new DbException("Something went wrong with the database"); + } + } + + @Override + public Object find(int id) throws DbException { + return null; + } + + @Override + public Object save(Object entity) throws DbException { + return null; + } + + @Override + public Object delete(int id) throws DbException { + return null; + } + + + @Override + public Technologies update(Object entity) throws DbException { + return null; + } +} diff --git a/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/implementations/TechnologiesDaolmpl.java b/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/implementations/TechnologiesDaolmpl.java deleted file mode 100644 index 9151e3e6..00000000 --- a/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/implementations/TechnologiesDaolmpl.java +++ /dev/null @@ -1,120 +0,0 @@ -package ro.ubb.implementations; - -import ro.ubb.exceptions.DbException; -import ro.ubb.interfaces.GenericDao; -import ro.ubb.interfaces.TechnologiesDao; -import ro.ubb.models.Region; -import ro.ubb.models.Technologies; -import ro.ubb.utilities.DatabaseConnection; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; - -public class TechnologiesDaoImpl implements GenericDao, TechnologiesDao { - @Override - public Technologies find(int id) throws DbException { - try { - Class.forName("com.mysql.cj.jdbc.Driver"); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - - try { - DatabaseConnection databaseConnection = new DatabaseConnection(); - Connection connection = databaseConnection.getConnection(); - - String querySelect = "SELECT Technologies_Area FROM skills " ; - Statement statement = connection.createStatement(); - ResultSet resultSet = statement.executeQuery(querySelect); - - int skillID; - String skillName; - String technologyAreaName; - Technologies technologies = null; - - if (resultSet.next()) { - skillID = resultSet.getInt("ID"); - skillName = resultSet.getString("Skill_Name"); - - technologyAreaName = resultSet.getString("Technologies_Area"); - Technologies[] technologies = Technologies.values(); - for (Technologies area : technologies) { - if (area.getTechnologies().equals(technologiesName)) { - technologies = area; - } - } - } else - return null; - - Skill skill = new Skill(); - skill.setId(skillID); - skill.setSkillName(skillName); - skill.setTechnologies(technologies); - - return skill; - } catch (SQLException sqlException) { - throw new DbException("Something went wrong with the database"); - } - } - - @Override - public Technologies save(Object entity) throws DbException { - try { - Class.forName("com.mysql.cj.jdbc.Driver"); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - - try { - DatabaseConnection databaseConnection = new DatabaseConnection(); - Connection connection = databaseConnection.getConnection(); - - Technologies technologies = (Technologies) entity; - - String queryInsert = "INSERT INTO technology(Name) VALUES (?); "; - PreparedStatement statement = connection.prepareStatement(queryInsert); - statement.setString(1, technologies.getTechName()); - int result = statement.executeUpdate(); - - if (result == 1) - return technologies; - else - return null; - } catch (SQLException sqlException) { - throw new DbException("Something went wrong with the database"); - } - } - - @Override - public Technologies delete(int id) throws DbException { - try { - Class.forName("com.mysql.cj.jdbc.Driver"); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - - try { - DatabaseConnection databaseConnection = new DatabaseConnection(); - Connection connection = databaseConnection.getConnection(); - - String queryDelete = "DELETE FROM technology WHERE ID = ?"; - PreparedStatement preparedStatement = connection.prepareStatement(queryDelete); - preparedStatement.setInt(1, id); - Technologies technologies = (Technologies) find(id); - int result = preparedStatement.executeUpdate(); - - if (result == 1) - return technologies; - else - return null; - } catch (SQLException sqlException) { - throw new DbException("Something went wrong with the database"); - } - } - - @Override - public Technologies update(Object entity) throws DbException { - return null; - } -} diff --git a/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/interfaces/TechnologiesDao.java b/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/interfaces/TechnologiesDao.java index 4875179b..7ff37481 100644 --- a/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/interfaces/TechnologiesDao.java +++ b/EmployeeManagementApp/EmployeeAppPersistence/src/main/java/ro/ubb/interfaces/TechnologiesDao.java @@ -1,4 +1,9 @@ package ro.ubb.interfaces; +import ro.ubb.exceptions.DbException; + +import java.util.List; + public interface TechnologiesDao { + List findAll() throws DbException; }