From 7be47e73cd2541354feda4d462e3b5827fb33039 Mon Sep 17 00:00:00 2001 From: git-leon Date: Wed, 4 Aug 2021 15:00:08 -0400 Subject: [PATCH 1/3] migrated jdbc lecturedemo and hyave proof of concept for speakling to mysql database --- .idea/compiler.xml | 1 + .idea/jarRepositories.xml | 20 +++++ .idea/vcs.xml | 6 ++ pom.xml | 31 +++++-- src/main/java/MainApplication.java | 119 +++++++++++++++++++++++++++ target/classes/MainApplication.class | Bin 0 -> 4693 bytes 6 files changed, 168 insertions(+), 9 deletions(-) create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/vcs.xml create mode 100644 src/main/java/MainApplication.java create mode 100644 target/classes/MainApplication.class diff --git a/.idea/compiler.xml b/.idea/compiler.xml index f006a55..5a76f28 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,6 +6,7 @@ + diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index d97c43d..ba50188 100644 --- a/pom.xml +++ b/pom.xml @@ -4,15 +4,28 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.zipcoder.lab - jdbcdao + org.example + intro-to-jdbc 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.0 + + 1.8 + 1.8 + + + + - - - junit - junit - 4.10 - - + + + mysql + mysql-connector-java + 8.0.18 + + \ No newline at end of file diff --git a/src/main/java/MainApplication.java b/src/main/java/MainApplication.java new file mode 100644 index 0000000..8157416 --- /dev/null +++ b/src/main/java/MainApplication.java @@ -0,0 +1,119 @@ + +import com.mysql.cj.jdbc.Driver; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.StringJoiner; + +/** + * @author git-leon + * @version 1.0.0 + * @date 8/2/21 9:49 AM + */ +public class MainApplication { + + public static void main(String[] args) { + registerJDBCDriver(); + Connection mysqlDbConnection = getConnection("mysql"); + executeStatement(mysqlDbConnection, "DROP DATABASE IF EXISTS databaseName;"); + executeStatement(mysqlDbConnection, "CREATE DATABASE IF NOT EXISTS databaseName;"); + executeStatement(mysqlDbConnection, "USE databaseName;"); + executeStatement(mysqlDbConnection, new StringBuilder() + .append("CREATE TABLE IF NOT EXISTS databaseName.pokemonTable(") + .append("id int auto_increment primary key,") + .append("name text not null,") + .append("primary_type int not null,") + .append("secondary_type int null);") + .toString()); + executeStatement(mysqlDbConnection, new StringBuilder() + .append("INSERT INTO databaseName.pokemonTable(") + .append("id, name, primary_type, secondary_type) ") + .append("VALUES (12, 'Ivysaur', 3, 7);") + .toString()); + + executeStatement(mysqlDbConnection, new StringBuilder() + .append("INSERT INTO databaseName.pokemonTable(") + .append("id, name, primary_type, secondary_type) ") + .append("VALUES (13, 'Ivysaurr', 3, 7);") + .toString()); + + String getPokemonTable = "SELECT * FROM databaseName.pokemonTable;"; + ResultSet resultSet = executeQuery(mysqlDbConnection, getPokemonTable); + printResults(resultSet); + + } + + static ResultSet executeQuery(Connection connection, String sqlQuery) { + try { + Statement statement = getScrollableStatement(connection); + return statement.executeQuery(sqlQuery); + } catch (SQLException e) { + throw new Error(e); + } + } + + static void printResults(ResultSet resultSet) { + try { + for (int rowNumber = 0; resultSet.next(); rowNumber++) { + String firstColumnData = resultSet.getString(1); + String secondColumnData = resultSet.getString(2); + String thirdColumnData = resultSet.getString(3); + System.out.println(new StringJoiner("\n") + .add("Row number = " + rowNumber) + .add("First Column = " + firstColumnData) + .add("Second Column = " + secondColumnData) + .add("Third column = " + thirdColumnData)); + } + } catch (SQLException e) { + throw new Error(e); + } + } + + static void executeStatement(Connection connection, String sqlStatement) { + try { + Statement statement = getScrollableStatement(connection); + statement.execute(sqlStatement); + } catch (SQLException e) { + throw new Error(e); + } + } + + static Statement getScrollableStatement(Connection connection) { + int resultSetType = ResultSet.TYPE_SCROLL_INSENSITIVE; + int resultSetConcurrency = ResultSet.CONCUR_READ_ONLY; + try { // scrollable statements can be iterated more than once without closing + return connection.createStatement(resultSetType, resultSetConcurrency); + } catch (SQLException e) { + throw new Error(e); + } + } + + static Connection getConnection(String dbVendor) { + String username = "root"; + String password = ""; + String url = new StringBuilder() + .append("jdbc:") + .append(dbVendor) + .append("://127.0.0.1/") + .append("?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC") + .toString(); + try { + return DriverManager.getConnection(url, username, password); + } catch (SQLException e) { + throw new Error(e); + } + } + + static void registerJDBCDriver() { + // Attempt to register JDBC Driver + try { + DriverManager.registerDriver(Driver.class.newInstance()); + } catch (InstantiationException | IllegalAccessException | SQLException e1) { + throw new RuntimeException(e1); + } + } + +} diff --git a/target/classes/MainApplication.class b/target/classes/MainApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..0eef2a7b175a643ca1601d905dd912bc749ae2e1 GIT binary patch literal 4693 zcmaJ^`F|8=8UIdplbLKbglq!2pdBd3W|OcDN3nrGbD^P|gX}_^R>jF?2m`w_VRkl< zTBX&t3Rc^qRO?kd@fNCvP_(VL*88mf4}L!W?#GYy`_Ak!3!xnE%slV&KF9aD-hKUl zFTVm{C;k~iKk^~$#e#y<;(12FqIf={;JpeSmGQn1YLQp)e(^l3;4uY{EBJtd4+_E) z3Z7K(l!6Z__^^U=;^=v?d_*iy*Wsi1n2cv+JR8C~JXeQqToB90Yw-zOl<~ZRPlm7o zpHlFGkoRfv@fii5Rq#0lpAX?hToOXQAmfX5_!7RX;42Egs^GGMuPOL?2;aarWqd1y zZ{s^MzAL`3$ha!wB^lofp%2f=_`ZxENT}Isn1-`YLLl0CL_%=Ln$;yVBn(p@&u3?J zJEhHJNQoq@w3a!d*@pNo5QENfBPXFTF{T;j!2Ep1NNbK^nR_TGOOk}O(T5W!v;{4m z(agDc(ykxEHn{fwT@JNlu#ZZAsckCxed8dq?q%;y(Zn{zZr z&+2BS#$=I7jS_)vDW6UrN{pOI>+=N&LusG;3LP&PR!lVjSv>o4<&rq2^t$J0(! zTYRRMO%kv-95d{kGh}7*S#wx(GzqJ7I`z!@Nev9ET|ud}tjw-`bOBdo~76j&jKS$1=o4d#u^tnhJHK{gFZxOUt|@V0qh;YP!_j+Z5DG-g#M zv#RAC>!@L-ZMTM0W_VV!7uA#cVmJGSKwWk8GmdIn{GZQcNNq1L9d#IgSBP)3%}aF3 z@NM&4ClR@UA4=FVI-VSvN~xpcsfh|-E6tP;HDyuGzs-O;V??qo9EQQ9Y^xbJ6(CPxw@Ln$?;9+;XKyS-U-Vgi$4 zOyi+2(wLR;BSCqEx#osR^i6+%VJj$yZ^X7OTcp*iVZ4SPhw&5qRL0N3_&I*T9_}*c z9fK0w27b`ubYPgJkT~;8meZ7VnlTXLLhV;Y9DfzYukkvS91#6R^|}l9*gBGKzwwhA zQlj6eX}2qpNycx&_$_`H#_#b5mQl%pQZHi>hw(@JiF3xbEH+rM6i&>}r2A-0Up(Hs zefPGz`L{PNVP-$8^ss59IobLhJFjoyx2VV=E6a(cnNG^c>W^5ao;+?Gb4n};eNIa+ zvPtR=_r+Z7Kc;1J`WDtaE4g^6|8QzZ#-BwA{zXD-+RDb=nvADU#Dzt1ukdC3HH^RE z??v22JiMJS-oQU3sO4~snmLDN8SX4CwTDWUOorxV2GVIgm-Df-m!(YQDI%-;HXCm0 zCJaWIePZSWM=dL>gm$^>RWN!vP-LuZVZ2Xh^YiSE5_)dmQhi;v&@x0@b*!S~=4he8 z`xwbl&I8|sh~8d}fVh+~Jm2bPO&#Y*6Vt}KjhO5t?j7hMUKPYNauc1!6CGXA79ViQ zMYi}X4_kSPC|pwvD?TYkGUe!6mdZQ)%7>0?c2Yl;=RETCuUkn?8JmDMOGLNdUW7NQ zZYfdf^}<n}+6yzvMBR*LTmP|j2O>+5Pm8IEKLb*6sWtEjY?s1>E?o6Ws?aDHt_o1&)*1u!j8i+%=JEg#rb3tLUrsKq^o?X!T{GAm$({(d=GmJ z7{V~WYB7QXq}<2OHHZL$q@7ux`5h8rHw+1|p1lnjLV%6mb>pps<~!?!qeEQ!=2Mq7Pw; z%2v^YBvO2%XdI>~;!g|ROHkqid}p}FWIV_doWh0s|i%jb08L$@_DiOkc#H5JsWUkJpo)97nt`H5>cV{#*$@gsTb4{WKtg2ME+V8QlHM5?P~`!*&Ds6D{&)G$B|M5u{3(N;pTo))UKO@zIR zCiLKh>(fq}(1Va$RsyWuq$l_cun(FrrD|YFzW@Bb*$~T6`uDNp2gnah2#`@9CF!o gD@T{|uKA*+H!vjg%xf=KnF`}F>{@Q*NUDPKe}ny&`2YX_ literal 0 HcmV?d00001 From 0f03ab692ac334dc48f9425ebb28e47fc3dd1117 Mon Sep 17 00:00:00 2001 From: git-leon Date: Wed, 4 Aug 2021 15:45:48 -0400 Subject: [PATCH 2/3] create and read completed --- pom.xml | 6 ++ src/main/java/MainApplication.java | 20 ++--- src/main/java/daos/PokemonRepository.java | 82 ++++++++++++++++++++ src/main/java/daos/Repo.java | 43 ++++++++++ src/main/java/models/Pokemon.java | 72 +++++++++++++++++ target/classes/MainApplication.class | Bin 4693 -> 4759 bytes target/classes/daos/PokemonRepository.class | Bin 0 -> 4120 bytes target/classes/daos/Repo.class | Bin 0 -> 1299 bytes target/classes/models/Pokemon.class | Bin 0 -> 2136 bytes 9 files changed, 209 insertions(+), 14 deletions(-) create mode 100644 src/main/java/daos/PokemonRepository.java create mode 100644 src/main/java/daos/Repo.java create mode 100644 src/main/java/models/Pokemon.java create mode 100644 target/classes/daos/PokemonRepository.class create mode 100644 target/classes/daos/Repo.class create mode 100644 target/classes/models/Pokemon.class diff --git a/pom.xml b/pom.xml index ba50188..2c16393 100644 --- a/pom.xml +++ b/pom.xml @@ -22,6 +22,12 @@ + + + com.fasterxml.jackson.core + jackson-databind + 2.12.3 + mysql mysql-connector-java diff --git a/src/main/java/MainApplication.java b/src/main/java/MainApplication.java index 8157416..c4def4b 100644 --- a/src/main/java/MainApplication.java +++ b/src/main/java/MainApplication.java @@ -1,5 +1,7 @@ import com.mysql.cj.jdbc.Driver; +import daos.PokemonRepository; +import models.Pokemon; import java.sql.Connection; import java.sql.DriverManager; @@ -18,6 +20,7 @@ public class MainApplication { public static void main(String[] args) { registerJDBCDriver(); Connection mysqlDbConnection = getConnection("mysql"); + PokemonRepository pokemonRepository = new PokemonRepository(mysqlDbConnection); executeStatement(mysqlDbConnection, "DROP DATABASE IF EXISTS databaseName;"); executeStatement(mysqlDbConnection, "CREATE DATABASE IF NOT EXISTS databaseName;"); executeStatement(mysqlDbConnection, "USE databaseName;"); @@ -28,21 +31,10 @@ public static void main(String[] args) { .append("primary_type int not null,") .append("secondary_type int null);") .toString()); - executeStatement(mysqlDbConnection, new StringBuilder() - .append("INSERT INTO databaseName.pokemonTable(") - .append("id, name, primary_type, secondary_type) ") - .append("VALUES (12, 'Ivysaur', 3, 7);") - .toString()); - - executeStatement(mysqlDbConnection, new StringBuilder() - .append("INSERT INTO databaseName.pokemonTable(") - .append("id, name, primary_type, secondary_type) ") - .append("VALUES (13, 'Ivysaurr', 3, 7);") - .toString()); - String getPokemonTable = "SELECT * FROM databaseName.pokemonTable;"; - ResultSet resultSet = executeQuery(mysqlDbConnection, getPokemonTable); - printResults(resultSet); + pokemonRepository.create(new Pokemon(12L, "Ivysaur", 3, 7)); + pokemonRepository.create(new Pokemon(13L, "Ivysaurr", 3, 7)); + System.out.println(pokemonRepository.readAll()); } diff --git a/src/main/java/daos/PokemonRepository.java b/src/main/java/daos/PokemonRepository.java new file mode 100644 index 0000000..0f5754e --- /dev/null +++ b/src/main/java/daos/PokemonRepository.java @@ -0,0 +1,82 @@ +package daos; + +import com.sun.deploy.net.MessageHeader; +import models.Pokemon; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author git-leon + * @version 1.0.0 + * @date 8/4/21 3:05 PM + */ +public class PokemonRepository implements Repo { + private Connection connection; + + public PokemonRepository(Connection connection) { + this.connection = connection; + } + + @Override + public Connection getConnection() { + return connection; + } + + public void create(Pokemon pokemon) { + executeStatement(String.format(new StringBuilder() + .append("INSERT INTO databaseName.pokemonTable(") + .append("id, name, primary_type, secondary_type) ") + .append("VALUES (%s, '%s', %s, %s);") + .toString(), + pokemon.getId(), + pokemon.getName(), + pokemon.getPrimaryType(), + pokemon.getSecondaryType())); + } + + public List readAll() { + ResultSet resultSet = executeQuery("SELECT * FROM databaseName.pokemonTable;"); + List list = new ArrayList<>(); + try { + while (resultSet.next()) { + String id = resultSet.getString(1); + String name = resultSet.getString(2); + String primaryType = resultSet.getString(3); + String secondaryType = resultSet.getString(4); + list.add(new Pokemon( + Long.parseLong(id), + name, + Integer.parseInt(primaryType), + Integer.parseInt(secondaryType))); + } + } catch (SQLException throwables) { + throw new RuntimeException(throwables); + } + return list; + } + + public Pokemon read(Long pokemonId) { + return readAll() + .stream() + .filter(pokemon -> pokemon.getId().equals(pokemonId)) + .findAny() + .get(); + } + + public void update(Long id, Pokemon newPokemonData) { + + } + + public void delete(Long id) { + + } + + public void delete(Pokemon pokemon) { + + } + +} diff --git a/src/main/java/daos/Repo.java b/src/main/java/daos/Repo.java new file mode 100644 index 0000000..f1238f0 --- /dev/null +++ b/src/main/java/daos/Repo.java @@ -0,0 +1,43 @@ +package daos; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +/** + * @author git-leon + * @version 1.0.0 + * @date 8/4/21 3:15 PM + */ +public interface Repo { + default void executeStatement(String sqlStatement) { + try { + Statement statement = getScrollableStatement(); + statement.execute(sqlStatement); + } catch (SQLException e) { + throw new Error(e); + } + } + + default Statement getScrollableStatement() { + int resultSetType = ResultSet.TYPE_SCROLL_INSENSITIVE; + int resultSetConcurrency = ResultSet.CONCUR_READ_ONLY; + try { // scrollable statements can be iterated more than once without closing + return getConnection().createStatement(resultSetType, resultSetConcurrency); + } catch (SQLException e) { + throw new Error(e); + } + } + + default ResultSet executeQuery(String sqlQuery) { + try { + Statement statement = getScrollableStatement(); + return statement.executeQuery(sqlQuery); + } catch (SQLException e) { + throw new Error(e); + } + } + + Connection getConnection(); +} diff --git a/src/main/java/models/Pokemon.java b/src/main/java/models/Pokemon.java new file mode 100644 index 0000000..912220a --- /dev/null +++ b/src/main/java/models/Pokemon.java @@ -0,0 +1,72 @@ +package models; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * @author git-leon + * @version 1.0.0 + * @date 8/4/21 3:03 PM + */ +public class Pokemon { + private Long id; + private String name; + private int primaryType; + private int secondaryType; + + public Pokemon() { + } + + public Pokemon(Long id, String name, int primaryType, int secondaryType) { + this.id = id; + this.name = name; + this.primaryType = primaryType; + this.secondaryType = secondaryType; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getPrimaryType() { + return primaryType; + } + + public void setPrimaryType(int primaryType) { + this.primaryType = primaryType; + } + + public int getSecondaryType() { + return secondaryType; + } + + public void setSecondaryType(int secondaryType) { + this.secondaryType = secondaryType; + } + + @Override + public String toString() { + try { + return new ObjectMapper().writeValueAsString(this); + } catch (JsonProcessingException e) { + return "Pokemon{" + + "id=" + id + + ", name='" + name + '\'' + + ", primaryType=" + primaryType + + ", secondaryType=" + secondaryType + + '}'; + } + } +} diff --git a/target/classes/MainApplication.class b/target/classes/MainApplication.class index 0eef2a7b175a643ca1601d905dd912bc749ae2e1..0ea7286391a3e3730791460d2dcdbf972d53f07c 100644 GIT binary patch delta 2462 zcmZuydt6gx7=F%n#yK3$fE^5hX`-RxHe4o!iJBLzG(du~$fyP^0|%oqP)b`Dvoy={ zq}|i5c2Bd$h)PSlXm`u(e!u7M*B|}YuiNvTjcM6n-{t*o&-=X3`)+^9En{PQ|9bWX z0OdHSVGfpSn2i-GE)#uB!Q~npxI)F1Vt$p1l`5`Quu4M~maDi%^w+9btzwOe>r|{2 zhU*pF;NX?wqia})8&%w-VHnnn%gmuAr;3|15!--`!hDN{TXCCs<@PMxfjbr4rQmK2 zCD@dO3xp z$sDjn%+I7_Ot1ZUX{Y&JwY_H_q(BI5k( zI^MvW64aC}qTnqZZ{r;u?_!^V_jJ6E{W{vQM8O9-8gRhepW$;>;X@rC;bR@2;8QbS z88xyBpV8s^@Y3SWo{r{VqOE4^==$*el*xeI~HUy&z zcIx;B-8Q$cbgfZG7o}ZHLWM z(VaJM!a@ldEs9d9P1~JW1yXD_Gg5q1NDS3nwkLDuXD_jLc={o2*lD{m0h?h@K&~EyqtV-sj2f?@B%peYOsmxrh^gK|WHt6f zH=J=~8#$uM6^%jKmaLrehSVL^0_YO<&#g?HB~OYbnO! z3XHe>FHZW18q`|;_hA9*$bf+^oQ`@jrc%jgBsoEhy9Fo1Jqe7i@p%U@#)hpmgE5pe z`uZ_;hsCB2CttE#TpN(N-^;q?qqPj#L@0Ro(C*;fXJR4W$fh%A;cSk0HyVjRe1_v3 zEaHvla?F_3C}`q|^KgC=jZ|md0c^I%rg;W1PQqvkDraFn9(g!{(Wzi$rclNw(*LQ<>q@M`G_0m=E%&Ww(cOR< z*oc#`39~E?XONXV^x*=;7LhtPE@pTak@yl^gl3LpT5m)PTKW9O6vZMRHY11&*$ZN` zA^!oJ^gGtgCcl{^m?bhvFdt5a+no;gBpc46XEnkzE8t1bVov0yT`M9iP;?Hak&}s) zOCh)jxQHosWawRoh2EVGy&G-m&?~UjrJ%94rl74SG@&fF%YJa0D`x+7y2m|Y0F&+5 zS}VYnrPQeMc~=@*K0$$6m#KD@Dsxfe230-;%SeF{8Xp29Q->joLX~WHaAdQHb3yu> z7uXeaN-@@%q&oR4ltOrb2*qm^MtQYyJQ+*YhZ86j55Go*Xr?5EQ(NZsC2-=_sj|Rc zD5t=eFipH^@DnK(Fiq@ClngSJ!}Q1_O9ePL#*A-brk}^qU%(>)W?Hl5RXH(~L9?<; z@Kr&PEMjk`rXm)_8JL7_j%+-ehbTvO%fABQpBJ)%p7j5am;B*PdAW?cC9D7njj3@| z?!>eNrc)uO4Ps^^%kC^{U$B`)q0LD3C#CwK8j*}j8~22`tDTN5p;H|eeo>!u7?q`1 V##2JDltZn8zDzD$!l@0H{sXr0-W>n{ delta 2303 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 literal 0 HcmV?d00001 diff --git a/target/classes/daos/Repo.class b/target/classes/daos/Repo.class new file mode 100644 index 0000000000000000000000000000000000000000..97016f8c7a5dcf4e4dbcd88f2aa75c8ed2b833d9 GIT binary patch literal 1299 zcmZ{jT~8B16o%hv3)|Ax(o#wbMNvS@XZ^rWz#D=INr6BKM(>to0*ht0Znp}T{sC|O z3EtwBK@+|Ax0v`3)OXf(cM~z2ZfDLp^PYE}nf>SWcr4wKS$MtzkyPY#$Ps z(=e~%^)zncmP+2%a7V*}K)*bZM%R^1S9j&Hv|NF~TH{E6rPo`!bx?1*j%gh%PVEXL zR_uK#kZYKh+~^+fNoPmjYcW!2*oNNP)g4pK{a~sSDi;3;c3!rq=l59@5L`PHNo_S& zPYl_1P1|BN;U1bDfplYEw>$N1*|r(XP$Q5~o&RwvkY$1KVqI^0PDnwZbRgZP;n=N~ zau^XP)uti_BHpr&>~vdhQ@T5+ZTb{z0>vPibDn?sA{;I!9CpPIeKh7 z=n=9!z>wLh;$0zN0D;%9@Yo zKX>c7K<|=ineJnOaunUpp<};RC+6M1fxuu0gS#;t$txA>Z;8VpQqrf!VXhTL%^6?+b^r*3*dX8iqXB*1jobt!|q$jKPqU@E>!*`jhE6j{=US+e+NbP*g zHIAy}FV;1#@G qjdRlzj84+k^}tyOtv>>-518a-AcL`{X*TZ?U?XdHDIH{FU1>@sUb=}X?h-q)UD$+> z_$<8UMUiMGF^LbrheG_1Z5k&{r%LBMm-C$Gch2*V`_I3B{SBaw-7FT-IEMv15VI;~ zP0YhI9%Ye2L(Jneo}{s!MHY<=z7W45=4l3BivKEurub(Wd@a6}#`82b6~xT0f_&>h z|54X^y0x#hY-_)vAYti!LqQ?3)Ak(G-xkksfx+iO?2c~6u zYYO6(bcsM{nF^$ z7NM3Z5gZ>hG7s^ZO}R0-Z+J~sR;VmTLc-dTZm>CbDxDln^XR5u{QTJAlk(F%9t12z z6NLMcVwNekqCH|8*riz>99vFQeAqn0+v5$)Gjw7p2`OV_rvj_nxQGmf?#yJNU6pKRk*#~65~-@;tmW8iar;5VD9QIKuhhfc?MYRZeK zVYhFJB2>JO4^&*ldnzuWsNyn8Dz2cUU}gI4UES07OslKC*gG&f9`6|#j*1u9QgCPb zk#_+rxHwW~Q2mobv)45o1v4S(&t`X3#W&a%(^inFl|{R&OETYK*K6g7Uj5K-sjgai zOtW0CV};S)DE{%3mx^Ev16x@bDU=<%*PF#t1uTMwxI|{S1pi)Cp!P z#8gnlN|-AO5}yRQHWj3X8`D7IlOPp>ES~`)Pc9v}2>~dxm?%i%_lb_wrh?qU?NcC^ z`J9s=w+M3k3=nxF0l703BsmFEp9*q!I!HuO!PDF$$o(@wL?Z&iuLZ4irl1ayt5Q5e%offE<2YS@X^4E`La>k+qEMI%#z~Izzi@Mi`6J#S xKQNW*j#Dh4!bPcTTzQBb9-T1euz^qTsUN=`3h6UOQmFh_e~;_;Ig8=*{{X6IkZ}M2 literal 0 HcmV?d00001 From d9b1a7a52c7e04dde71afea31c830289af5119aa Mon Sep 17 00:00:00 2001 From: Zach Date: Wed, 4 Aug 2021 18:45:01 -0400 Subject: [PATCH 3/3] Completed CRUD functions --- pom.xml | 6 ++ src/main/java/MainApplication.java | 37 ++++--- src/main/java/daos/PokemonRepository.java | 82 -------------- src/main/java/daos/VehicleRepo.java | 106 +++++++++++++++++++ src/main/java/models/Pokemon.java | 72 ------------- src/main/java/models/Vehicle.java | 103 ++++++++++++++++++ src/test/java/daos/DELETEME.txt | 0 src/test/java/daos/VehicleRepo.java | 12 +++ src/test/java/models/DELETEME.txt | 0 src/test/java/models/testVehicle.java | 53 ++++++++++ target/classes/MainApplication.class | Bin 4759 -> 5158 bytes target/classes/daos/PokemonRepository.class | Bin 4120 -> 0 bytes target/classes/daos/VehicleRepo.class | Bin 0 -> 4628 bytes target/classes/models/Pokemon.class | Bin 2136 -> 0 bytes target/classes/models/Vehicle.class | Bin 0 -> 2845 bytes target/test-classes/models/testVehicle.class | Bin 0 -> 1795 bytes 16 files changed, 301 insertions(+), 170 deletions(-) delete mode 100644 src/main/java/daos/PokemonRepository.java create mode 100644 src/main/java/daos/VehicleRepo.java delete mode 100644 src/main/java/models/Pokemon.java create mode 100644 src/main/java/models/Vehicle.java delete mode 100644 src/test/java/daos/DELETEME.txt create mode 100644 src/test/java/daos/VehicleRepo.java delete mode 100644 src/test/java/models/DELETEME.txt create mode 100644 src/test/java/models/testVehicle.java delete mode 100644 target/classes/daos/PokemonRepository.class create mode 100644 target/classes/daos/VehicleRepo.class delete mode 100644 target/classes/models/Pokemon.class create mode 100644 target/classes/models/Vehicle.class create mode 100644 target/test-classes/models/testVehicle.class diff --git a/pom.xml b/pom.xml index 2c16393..9f3f6a3 100644 --- a/pom.xml +++ b/pom.xml @@ -33,5 +33,11 @@ mysql-connector-java 8.0.18 + + junit + junit + 4.13.1 + test + \ No newline at end of file diff --git a/src/main/java/MainApplication.java b/src/main/java/MainApplication.java index c4def4b..472a2aa 100644 --- a/src/main/java/MainApplication.java +++ b/src/main/java/MainApplication.java @@ -1,7 +1,7 @@ import com.mysql.cj.jdbc.Driver; -import daos.PokemonRepository; -import models.Pokemon; +import daos.VehicleRepo; +import models.Vehicle; import java.sql.Connection; import java.sql.DriverManager; @@ -20,21 +20,26 @@ public class MainApplication { public static void main(String[] args) { registerJDBCDriver(); Connection mysqlDbConnection = getConnection("mysql"); - PokemonRepository pokemonRepository = new PokemonRepository(mysqlDbConnection); - executeStatement(mysqlDbConnection, "DROP DATABASE IF EXISTS databaseName;"); - executeStatement(mysqlDbConnection, "CREATE DATABASE IF NOT EXISTS databaseName;"); - executeStatement(mysqlDbConnection, "USE databaseName;"); + VehicleRepo vehicleRepo = new VehicleRepo(mysqlDbConnection); + executeStatement(mysqlDbConnection, "DROP DATABASE IF EXISTS daolab;"); + executeStatement(mysqlDbConnection, "CREATE DATABASE IF NOT EXISTS daolab;"); + executeStatement(mysqlDbConnection, "USE daolab;"); executeStatement(mysqlDbConnection, new StringBuilder() - .append("CREATE TABLE IF NOT EXISTS databaseName.pokemonTable(") - .append("id int auto_increment primary key,") - .append("name text not null,") - .append("primary_type int not null,") - .append("secondary_type int null);") + .append("CREATE TABLE IF NOT EXISTS daolab.vehicle(") + .append("primaryId int auto_increment primary key,") + .append("make text not null,") + .append("model text not null,") + .append("color text not null,") + .append("vtype text not null,") + .append("mpg int not null);") .toString()); - pokemonRepository.create(new Pokemon(12L, "Ivysaur", 3, 7)); - pokemonRepository.create(new Pokemon(13L, "Ivysaurr", 3, 7)); - System.out.println(pokemonRepository.readAll()); + Vehicle vehicle = new Vehicle(12L, "Nissan", "Maxima", "Charcoal", "Car", 40 ); + vehicleRepo.create(vehicle); + vehicleRepo.create(new Vehicle(13L, "Ford", "F150", "Blue", "Truck", 22 )); + vehicleRepo.update(12L, new Vehicle("Ford", "F150", "Blue", "Truck", 10 )); + vehicleRepo.delete(vehicle); + System.out.println(vehicleRepo.readAll()); } @@ -84,8 +89,8 @@ static Statement getScrollableStatement(Connection connection) { } static Connection getConnection(String dbVendor) { - String username = "root"; - String password = ""; + String username = "carl"; + String password = "carlpass"; String url = new StringBuilder() .append("jdbc:") .append(dbVendor) diff --git a/src/main/java/daos/PokemonRepository.java b/src/main/java/daos/PokemonRepository.java deleted file mode 100644 index 0f5754e..0000000 --- a/src/main/java/daos/PokemonRepository.java +++ /dev/null @@ -1,82 +0,0 @@ -package daos; - -import com.sun.deploy.net.MessageHeader; -import models.Pokemon; - -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author git-leon - * @version 1.0.0 - * @date 8/4/21 3:05 PM - */ -public class PokemonRepository implements Repo { - private Connection connection; - - public PokemonRepository(Connection connection) { - this.connection = connection; - } - - @Override - public Connection getConnection() { - return connection; - } - - public void create(Pokemon pokemon) { - executeStatement(String.format(new StringBuilder() - .append("INSERT INTO databaseName.pokemonTable(") - .append("id, name, primary_type, secondary_type) ") - .append("VALUES (%s, '%s', %s, %s);") - .toString(), - pokemon.getId(), - pokemon.getName(), - pokemon.getPrimaryType(), - pokemon.getSecondaryType())); - } - - public List readAll() { - ResultSet resultSet = executeQuery("SELECT * FROM databaseName.pokemonTable;"); - List list = new ArrayList<>(); - try { - while (resultSet.next()) { - String id = resultSet.getString(1); - String name = resultSet.getString(2); - String primaryType = resultSet.getString(3); - String secondaryType = resultSet.getString(4); - list.add(new Pokemon( - Long.parseLong(id), - name, - Integer.parseInt(primaryType), - Integer.parseInt(secondaryType))); - } - } catch (SQLException throwables) { - throw new RuntimeException(throwables); - } - return list; - } - - public Pokemon read(Long pokemonId) { - return readAll() - .stream() - .filter(pokemon -> pokemon.getId().equals(pokemonId)) - .findAny() - .get(); - } - - public void update(Long id, Pokemon newPokemonData) { - - } - - public void delete(Long id) { - - } - - public void delete(Pokemon pokemon) { - - } - -} diff --git a/src/main/java/daos/VehicleRepo.java b/src/main/java/daos/VehicleRepo.java new file mode 100644 index 0000000..4c88f0e --- /dev/null +++ b/src/main/java/daos/VehicleRepo.java @@ -0,0 +1,106 @@ +package daos; + +import models.Vehicle; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author git-leon + * @version 1.0.0 + * @date 8/4/21 3:05 PM + */ +public class VehicleRepo implements Repo { + private Connection connection; + + public VehicleRepo(Connection connection) { + this.connection = connection; + } + + @Override + public Connection getConnection() { + return connection; + } + + public void create(Vehicle vehicle) { + executeStatement(String.format(new StringBuilder() + .append("INSERT INTO daolab.vehicle(") + .append("primaryId, make, model, color, vtype, mpg) ") + .append("VALUES (%s, '%s', '%s', '%s', '%s', %s);") + .toString(), + vehicle.getId(), + vehicle.getMake(), + vehicle.getModel(), + vehicle.getColor(), + vehicle.getvType(), + vehicle.getMpg())); + } + + public List readAll() { + ResultSet resultSet = executeQuery("SELECT * FROM daolab.vehicle;"); + List list = new ArrayList<>(); + try { + while (resultSet.next()) { + String id = resultSet.getString(1); + String make = resultSet.getString(2); + String model = resultSet.getString(3); + String color = resultSet.getString(4); + String vtype = resultSet.getString(5); + String mpg = resultSet.getString(6); + list.add(new Vehicle( + Long.parseLong(id), + make, + model, + color, + vtype, + Integer.parseInt(mpg))); + } + } catch (SQLException throwables) { + throw new RuntimeException(throwables); + } + return list; + } + + public Vehicle read(Long primaryId) { + return readAll() + .stream() + .filter(vehicle -> vehicle.getId().equals(primaryId)) + .findAny() + .get(); + } + + public void update(Long id, Vehicle newVehicleData) { + executeStatement(String.format(new StringBuilder() + .append("UPDATE vehicle SET make= '%s',") + .append("model = '%s',") + .append("color = '%s',") + .append("vtype = '%s',") + .append("mpg = %s ") + .append("WHERE primaryId = %s;") + .toString(), + + newVehicleData.getMake(), + newVehicleData.getModel(), + newVehicleData.getColor(), + newVehicleData.getvType(), + newVehicleData.getMpg(), + id)); + } + + public void delete(Long id) { + executeStatement(String.format(new StringBuilder() + .append("DELETE FROM vehicle ") + .append("WHERE primaryId = %s;") + .toString(), + id + )); + } + + public void delete(Vehicle vehicle) { + delete(vehicle.getId()); + } + +} diff --git a/src/main/java/models/Pokemon.java b/src/main/java/models/Pokemon.java deleted file mode 100644 index 912220a..0000000 --- a/src/main/java/models/Pokemon.java +++ /dev/null @@ -1,72 +0,0 @@ -package models; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -/** - * @author git-leon - * @version 1.0.0 - * @date 8/4/21 3:03 PM - */ -public class Pokemon { - private Long id; - private String name; - private int primaryType; - private int secondaryType; - - public Pokemon() { - } - - public Pokemon(Long id, String name, int primaryType, int secondaryType) { - this.id = id; - this.name = name; - this.primaryType = primaryType; - this.secondaryType = secondaryType; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getPrimaryType() { - return primaryType; - } - - public void setPrimaryType(int primaryType) { - this.primaryType = primaryType; - } - - public int getSecondaryType() { - return secondaryType; - } - - public void setSecondaryType(int secondaryType) { - this.secondaryType = secondaryType; - } - - @Override - public String toString() { - try { - return new ObjectMapper().writeValueAsString(this); - } catch (JsonProcessingException e) { - return "Pokemon{" + - "id=" + id + - ", name='" + name + '\'' + - ", primaryType=" + primaryType + - ", secondaryType=" + secondaryType + - '}'; - } - } -} diff --git a/src/main/java/models/Vehicle.java b/src/main/java/models/Vehicle.java new file mode 100644 index 0000000..94bd52f --- /dev/null +++ b/src/main/java/models/Vehicle.java @@ -0,0 +1,103 @@ +package models; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * @author git-leon + * @version 1.0.0 + * @date 8/4/21 3:03 PM + */ +public class Vehicle { + private Long id; + private String make; + private String model; + private String color; + private String vType; + private int mpg; + + public Vehicle() { + } + + public Vehicle(String make, String model, String color, String vType, int mpg) { + this.id = null; + this.make = make; + this.model = model; + this.color = color; + this.vType = vType; + this.mpg = mpg; + } + + public Vehicle(Long id, String make, String model, String color, String vType, int mpg) { + this.id = id; + this.make = make; + this.model = model; + this.color = color; + this.vType = vType; + this.mpg = mpg; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getMake() { + return make; + } + + public void setMake(String make) { + this.make = make; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + public String getColor() { + return color; + } + + public void setColor(String color) { + this.color = color; + } + + public String getvType() { + return vType; + } + + public void setvType(String vType) { + this.vType = vType; + } + + public int getMpg() { + return mpg; + } + + public void setMpg(int mpg) { + this.mpg = mpg; + } + + @Override + public String toString() { + try { + return new ObjectMapper().writeValueAsString(this); + } catch (JsonProcessingException e) { + return "Pokemon{" + + "id=" + id + + ", Make='" + make + '\'' + + ", Model=" + model + + ", Color=" + color + + ", VehicleType= " + vType + + ", Mpg= " + mpg + + '}'; + } + } +} diff --git a/src/test/java/daos/DELETEME.txt b/src/test/java/daos/DELETEME.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/test/java/daos/VehicleRepo.java b/src/test/java/daos/VehicleRepo.java new file mode 100644 index 0000000..c1e316b --- /dev/null +++ b/src/test/java/daos/VehicleRepo.java @@ -0,0 +1,12 @@ +package daos; + +import com.mysql.cj.jdbc.Driver; +import org.junit.Test; + +import java.sql.*; +import java.util.StringJoiner; + + +public class VehicleRepo { + +} diff --git a/src/test/java/models/DELETEME.txt b/src/test/java/models/DELETEME.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/test/java/models/testVehicle.java b/src/test/java/models/testVehicle.java new file mode 100644 index 0000000..29efc28 --- /dev/null +++ b/src/test/java/models/testVehicle.java @@ -0,0 +1,53 @@ +package models; + + +import org.junit.Assert; +import org.junit.Test; + +public class testVehicle { + + @Test + public void testVehicleMake(){ + Vehicle vehicle = new Vehicle(20L, "Jenson", "Wagner", "Red", "Three Wheeler", 20); + String expected = "Jenson"; + String actual = vehicle.getMake(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void testVehicleModel(){ + Vehicle vehicle = new Vehicle(20L, "Jenson", "Wagner", "Red", "Three Wheeler", 20); + String expected = "Wagner"; + String actual = vehicle.getModel(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void testVehicleColor(){ + Vehicle vehicle = new Vehicle(20L, "Jenson", "Wagner", "Red", "Three Wheeler", 20); + String expected = "Red"; + String actual = vehicle.getColor(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void testVehicleVType(){ + Vehicle vehicle = new Vehicle(20L, "Jenson", "Wagner", "Red", "Three Wheeler", 20); + String expected = "Three Wheeler"; + String actual = vehicle.getvType(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void testVehicleMpg(){ + Vehicle vehicle = new Vehicle(20L, "Jenson", "Wagner", "Red", "Three Wheeler", 20); + Integer expected = 20; + Integer actual = vehicle.getMpg(); + + Assert.assertEquals(expected, actual); + } +} diff --git a/target/classes/MainApplication.class b/target/classes/MainApplication.class index 0ea7286391a3e3730791460d2dcdbf972d53f07c..98800e50af25a2f1c2ef8770bce3b1f802e0569c 100644 GIT binary patch delta 2643 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 diff --git a/target/classes/daos/PokemonRepository.class b/target/classes/daos/PokemonRepository.class deleted file mode 100644 index ea1e44d8a38990ed32fe83aae7ab49eb27357eff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4120 zcma)930oW26+I(_2E<@6wy|;ASa!gG1juQdwlR)VjKP*879--6IITNK1B^YIk!MD> z>Aoc0_ohp_w`uDxX=^tLi)ohbZJM?}s9%@!W=7J0AYVQ{-n{j`bI(2RzNc6Id*?*} zZ^6Ifh~r{2`tX>Hcg4|wi%od9_+Dzldzzq%>b#7690yPkg(ixHI2N%aYI+=(aV1Uz zMiYwSYs#?V*o%uTDB-FoY#B}*F3O^~CYD|oOK-Gb8Sj{)f*U{6QZ%B#i&)z(Ej=#08cx)&>7qRZQw>T;(&ec2*G7*&JA0+?L#txIU% zI?O>XEsPijVOH#yUEN4$b;l)$h+Ys5c&r$zxtPwmwr(zRBx$mNbIOLB(_9IAYqMr5y<$6qfP@Dg zlrY53&GZsSK=F|+b5Csb{v_?T=3F&@WkM}^i)4IW#uq3gV#?`@rs|e$y477r&9=6p zf=dZU0*!clWi7JRzjbGt4}y~6g21WTe1^1KDtIBir_R_`TO!1}OznE0q0_3Xay?a` z1(K)*&j-W#t%h2hFR0xDaQ86@uVa@-c~o*%+0JX@x=?jzoo0u`MhXV-MFmNu81UN8 zzHCmFb)%r!5{_mjb7M2JiOl5eRDzDG^QxmwQcyzyEnYPG6nqI^me8jc1`DD*X~b9ICx0d<9>{ z*A#pmPb&BZo|5rR1>eHA6?{iDzN_GS_`ZT4;D-c~8_SN3&L)zH@tLWKoq=<&r|~16 zM{h4rtRuFqE{j7&i7EIoexl$ee#*#gKCm)=rr_uJg@Evkf?wiSg3w=6lnQR)HZzoG zQY5JG8KUDgw`R(ws~5HE0TUK}qu_oVSMV&JBL$}{%XM5^Elp_dl2vfpVtBqCxA|FV z$Et!gtjoBgU<1EZ@B&_x@sfg<@jC^-7Z^IX&sh|;Hz2YYlSUP2^%&FJ8XIm*s@W}k%47}-)e#tL z)8R};U>OO!YpiBWS6dX?m9MErS({oQ4}F<1xL^i1ZKt)|=1drpT?KJ$!Lo}gNw|L- zuP^$^%R}qylv$*PCg6r!X*aZd+0~fFT&<{?G`DXXbAn|hn0mgf*~=93cGLVVguJRz zqd!qoyWt0mS)f@s=iLHgt4$14QTcJMQZ3S*YCD?9KRe(%CvLBEVHdq*#SnWd$?Xmc z8KvH^C*HDprZO2pL4#VL7B&%7A(x(2E_V<2Y~|+i?$DUyGFKKQ+*Og8cdGqfaVc_e zIF3KykK*a^r){rd?hth~q55NWfCI-pqYGuzdyb^1ZLOf^8CQnD&!zR7^6)I^hAV_w zkU^)+g~_bFNsjkriJ1u6Q2J12mLKydu>?af#p%vFmgJ>EaRUN zdg}Pu&L0VPzxF&FrV!(h(9i#fxRCi0Zf1P|gDi*G8fSlm-*|ErQZn^CBDdL!AkA_Y zU+du8JBoc=)rn(lb^5b$FW$r!*LhYYT6;5p0Qff3{7M{aOg@LmEmnMUF|YHWXGZZS z1ZE`Mhqtmv0D2lRZ;La@4K&QHBHGcof>?(viY68-XqI0g^f44R0q<9yA;$Oahk9L*^e~CObM-uqV5Ly@b7QBDIcA2~Xi%D!PvS5lp5Uz3=g8 zD&|)jQ?g%)4Q$}R+~69z)^M;Z+SRy*ySid5R`G^)yfK1DZvOAtn`oWfz@fRpRU}>- zxJ3+YxP*D4je5}<$8MrX5=)9BgZxP}L@(2f{V~SsUJSDwVU!*s+0&%^0^5(#pG)*) zo?hkYlfhXc$}?!<+7oP@pa%N6>H*fGT#>{{)*3l-7!R@*o_7Ib%&9|I=Uk)dL*pi=*u`z)7wFU13^X!uZ;lr5>gjI9b#Wi%86=l6Qt!l zca!LTF4*-!S`ddos_Dp=@mbGA!XK=fkjRTL!3CHlrxAW1CeywP_px8NP-iR~!Xwog z6DBIBV@DIyJDBkF+8!5aH$d?~KxDHxKqRyG84s2?@V;v!AydsBCmdpsed#w~&YS-z cUg1|Hm%rjw{Ef_hm~9c@kC2p);$wLH|GKIMsQ>@~ diff --git a/target/classes/daos/VehicleRepo.class b/target/classes/daos/VehicleRepo.class new file mode 100644 index 0000000000000000000000000000000000000000..02b94b442147043f9e570de523093fc8bc53780c GIT binary patch literal 4628 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 DxI%n# literal 0 HcmV?d00001 diff --git a/target/classes/models/Pokemon.class b/target/classes/models/Pokemon.class deleted file mode 100644 index ddf9a8c045179c5b365eda218a5bfbd6a5a6186d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2136 zcmaKtYj4|R6vzM0eW}xB>18a-AcL`{X*TZ?U?XdHDIH{FU1>@sUb=}X?h-q)UD$+> z_$<8UMUiMGF^LbrheG_1Z5k&{r%LBMm-C$Gch2*V`_I3B{SBaw-7FT-IEMv15VI;~ zP0YhI9%Ye2L(Jneo}{s!MHY<=z7W45=4l3BivKEurub(Wd@a6}#`82b6~xT0f_&>h z|54X^y0x#hY-_)vAYti!LqQ?3)Ak(G-xkksfx+iO?2c~6u zYYO6(bcsM{nF^$ z7NM3Z5gZ>hG7s^ZO}R0-Z+J~sR;VmTLc-dTZm>CbDxDln^XR5u{QTJAlk(F%9t12z z6NLMcVwNekqCH|8*riz>99vFQeAqn0+v5$)Gjw7p2`OV_rvj_nxQGmf?#yJNU6pKRk*#~65~-@;tmW8iar;5VD9QIKuhhfc?MYRZeK zVYhFJB2>JO4^&*ldnzuWsNyn8Dz2cUU}gI4UES07OslKC*gG&f9`6|#j*1u9QgCPb zk#_+rxHwW~Q2mobv)45o1v4S(&t`X3#W&a%(^inFl|{R&OETYK*K6g7Uj5K-sjgai zOtW0CV};S)DE{%3mx^Ev16x@bDU=<%*PF#t1uTMwxI|{S1pi)Cp!P z#8gnlN|-AO5}yRQHWj3X8`D7IlOPp>ES~`)Pc9v}2>~dxm?%i%_lb_wrh?qU?NcC^ z`J9s=w+M3k3=nxF0l703BsmFEp9*q!I!HuO!PDF$$o(@wL?Z&iuLZ4irl1ayt5Q5e%offE<2YS@X^4E`La>k+qEMI%#z~Izzi@Mi`6J#S xKQNW*j#Dh4!bPcTTzQBb9-T1euz^qTsUN=`3h6UOQmFh_e~;_;Ig8=*{{X6IkZ}M2 diff --git a/target/classes/models/Vehicle.class b/target/classes/models/Vehicle.class new file mode 100644 index 0000000000000000000000000000000000000000..0f9bf0e6c3acc6b076250ca7f1d42dcdfd10df56 GIT binary patch literal 2845 zcmbW3ZBrXn6vzLYhfN6K!SHOcO(}#B9%AW(RvMHdSZbhDXtb7Umt>_2Nj8&&TF3FD z_}&-3s52&=X=nTZekjNPxx0lBHhs}y=G?P)&pr2d@A;n%|Ni&-9{|^3M(`olyD)~Y z#M~9LA?BW#uf=3T*o+{Ibun8Z+z(+pf+*I*cp&39Vs^sVmGNO1xiG#BG^hZx`(< z$LG7hR2b|pRSq<08yfW6R@tgAb1FHLW3p8)(9oB)%I4N_Y2U2w8v8|+-p(7voKdyp z*_{m3pIJ45QrpzhIrEv7FPenPCeP!%-^_+!?X{*;=YGFr=U1up!2`3t!P|``XIdiM z`wiBdmjmY*ge=6Ro2meVXBMB7AjIWPz)))f_r0VDOA4n>VF`9!&aOIDli9Z}XWbgg ztn2EMK`P23N=+q;JO+~Lc;UM3Y{!zbl-IL)yOjRPsMXEti&8OtXylJ-b~&B5t7iHh zz3r-6Blz?%ml7znDyo;7%n>nL+Y_8Pa)+*7e7bkM5RiCbe zSZ}$ZGW9#(y25>ZeuaB_mh?<~#~n`N$CIn?N;giqwe-)KyIx}5$N0SjbofLU^n4-> zHBudFq(Ib2ji`|_;n)vN0D7$6)Few7*o?G;M_GfB^(Bh$OwJ6NDM0_#_Et zX(hq$jMOQWTn>GeDH zo#&IrgawcNlBPmn-6 z$SqHho8BOSc90A~mOFrm+yvwkPmo|c$ciV(r`{mJc91oKtaktrwF}5CPY}HwWWy8W zGj9;R9b}UrTOB||wgR$*+qCjEXw^vQPfoOo^?@fyh8Nzhkqc+~&k^fGg5)}YNY@Am ze7XSbN literal 0 HcmV?d00001 diff --git a/target/test-classes/models/testVehicle.class b/target/test-classes/models/testVehicle.class new file mode 100644 index 0000000000000000000000000000000000000000..acd046992fd50ba0be34e154f350a7b215892eae GIT binary patch literal 1795 zcmbu9T~pIg5Qg6rXhI24Nhf0W~U+DL=c3nUjOd$wnHpWXAOKYxAu0bmyEF|=b;#aIKk@-bo<$ApGS4QUNi z8m422;Er5oVhp$|t$T90FP8@~Jj5eu&8e7I@mN80-f}E|K|x(=B&VQ$$=wqQTC21<5E*{2^oabFjuI+l~UAgU#N2F~D2Obp^w1==VjxP$r zWB%BdTk`T^#gbzR7n_t#=rGX1T)~8bc2z9sc!HmxVM)bv9m`nJ@d8UaUdkmS-K#R;D;-&^aex;uglyHJZtNa#)WoW~ zvaZ7x)nn5xiH)~xHnlnu>R0~EX5Xa#_J#JrRsEkQBju+SgkO=0kqTEo6G6Osy^F=7 z@YsWHmW}226bBVB944&vITs=dJhGT3i&X?6%|Hm!Jgx|!tva3Hx)pS$GGVZ)45Bid zR0%(%3l-)Ln4|`6I!A%Zk!;NO+?qmzM^S;eBu;(HG3!I|3wqC>&(`Sezal; z@p84%O2(jC7g}%=J>{xR=tUnZ_p^n5T6Juy(#~L+>((W>RLRv`o68_a2e~>~rHfqM zSLC{V2`)`?wbbV7AxAH{`p7jvuE8sE4PAn(QF67`=1P)dm|Q7xjgo8Zid@MvuFrwK z#{Z?SxN(ZOL~G-_HeH%DQ=Hp0l9(aeY>00BOl3x(vR>+~m)%5oTB>aLg340VS_C7% E0Zj5q+W-In literal 0 HcmV?d00001