From f10fdf4a2db83c35fbc981b68f4845cdd375fec4 Mon Sep 17 00:00:00 2001 From: "Renat I. Kashapov" Date: Sat, 17 Oct 2020 10:46:34 +0300 Subject: [PATCH 1/9] Deleted .idea and .gradle from index --- .../executionHistory/executionHistory.lock | Bin 17 -> 0 bytes .gradle/6.3/fileChanges/last-build.bin | Bin 1 -> 0 bytes .gradle/6.3/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .gradle/6.3/gc.properties | 0 .../6.5/executionHistory/executionHistory.bin | Bin 20071 -> 0 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 0 bytes .gradle/6.5/fileChanges/last-build.bin | Bin 1 -> 0 bytes .gradle/6.5/fileHashes/fileHashes.bin | Bin 18697 -> 0 bytes .gradle/6.5/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .gradle/6.5/gc.properties | 0 .../buildOutputCleanup.lock | Bin 17 -> 0 bytes .gradle/buildOutputCleanup/cache.properties | 2 -- .gradle/checksums/checksums.lock | Bin 17 -> 0 bytes .gradle/vcs-1/gc.properties | 0 .idea/.gitignore | 3 --- .idea/compiler.xml | 10 --------- .idea/gradle.xml | 18 ---------------- .idea/jarRepositories.xml | 20 ------------------ .idea/misc.xml | 7 ------ .idea/vcs.xml | 6 ------ 20 files changed, 66 deletions(-) delete mode 100644 .gradle/6.3/executionHistory/executionHistory.lock delete mode 100644 .gradle/6.3/fileChanges/last-build.bin delete mode 100644 .gradle/6.3/fileHashes/fileHashes.lock delete mode 100644 .gradle/6.3/gc.properties delete mode 100644 .gradle/6.5/executionHistory/executionHistory.bin delete mode 100644 .gradle/6.5/executionHistory/executionHistory.lock delete mode 100644 .gradle/6.5/fileChanges/last-build.bin delete mode 100644 .gradle/6.5/fileHashes/fileHashes.bin delete mode 100644 .gradle/6.5/fileHashes/fileHashes.lock delete mode 100644 .gradle/6.5/gc.properties delete mode 100644 .gradle/buildOutputCleanup/buildOutputCleanup.lock delete mode 100644 .gradle/buildOutputCleanup/cache.properties delete mode 100644 .gradle/checksums/checksums.lock delete mode 100644 .gradle/vcs-1/gc.properties delete mode 100644 .idea/.gitignore delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/gradle.xml delete mode 100644 .idea/jarRepositories.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/vcs.xml diff --git a/.gradle/6.3/executionHistory/executionHistory.lock b/.gradle/6.3/executionHistory/executionHistory.lock deleted file mode 100644 index a7604be1ef6e9a790cafe5f2e4f8b638218152b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZRUG;}#Ck+sR10RnOWA&mnv diff --git a/.gradle/6.3/fileChanges/last-build.bin b/.gradle/6.3/fileChanges/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/.gradle/6.3/fileHashes/fileHashes.lock b/.gradle/6.3/fileHashes/fileHashes.lock deleted file mode 100644 index 2b22044621848a8e6f14688644e644e50c0b6932..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZP$SDwo3m;F4I0Rl__B^Cou diff --git a/.gradle/6.3/gc.properties b/.gradle/6.3/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/.gradle/6.5/executionHistory/executionHistory.bin b/.gradle/6.5/executionHistory/executionHistory.bin deleted file mode 100644 index ca603136957a3946fa69672fa1e9609598fd0231..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20071 zcmeI)PiWIn90%}p9d(Mbco+`Eiwvi*CH-UCO$Ax$=9K->)jGjLNYmFPTh_#vv~`M3 zWCy`I9S)fY124i*CklEQ{s9jIZ|c>f2T{a>HxV>#8n#gn9qU2l8|cd;@4esey-#1$ zLm)ARX=ZqTV1izm}eOOR=eWy%R5ikZM#43H1~G7&kx+QeSM$Ph7tl0fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZafqy|D z#4x^H_Q!rY#sf&-dBO zg&pB@eP^PHhJr+8Ma_|@WRix(YF65ET(Xp6_n9L@U9rAyF%j<`5_<>xyWLpD4&Lc9 z5T8;_%bY2eR83|rRnOES*P4KTNqBp8!nh&@g>XDO&a4@Ba>5`D&#PKm{!Z#+2M#^` zdGC||;`PDK^^IR&?}}tsM$YQ*!#Q{}9AcfXWr+~1cS$jb&li~Vhrt&11x_q5)* z^x;-b!qy~6#nf&XRJZR7mP*VLz}t-iti3OD2dvw$HshQ_Lzv&C334WH!>lB00Iag zfB*srAbC+xP(l(Q_F9 diff --git a/.gradle/6.5/fileHashes/fileHashes.lock b/.gradle/6.5/fileHashes/fileHashes.lock deleted file mode 100644 index b89035bdbee3e3b6d10f21e051d4d887347333a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZQ}>QJ4zd*P?03=qHu05u&1g#Z8m diff --git a/.gradle/6.5/gc.properties b/.gradle/6.5/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock deleted file mode 100644 index 125640c0661a242e02c3c8aa44ade74fd4ef2016..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZRcxr{wXET`Ur0RkcbB@6>C diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties deleted file mode 100644 index b774acd..0000000 --- a/.gradle/buildOutputCleanup/cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Thu Oct 08 23:16:29 MSK 2020 -gradle.version=6.3 diff --git a/.gradle/checksums/checksums.lock b/.gradle/checksums/checksums.lock deleted file mode 100644 index 2cf264e3089226e34e453839915ee03153a95c53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZR+wZ?0Uv*dYO1}FdkGnxbN diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index c8b5c9a..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index 87ca0fc..0000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100644 index fdc392f..0000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index b0ec460..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From 2f18960bceca04f3d7051f7ea9f96d1309a8fd45 Mon Sep 17 00:00:00 2001 From: "Renat I. Kashapov" Date: Mon, 2 Nov 2020 09:08:59 +0300 Subject: [PATCH 2/9] V 10. Added vim swap files to gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 8f242ff..38a19dd 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,9 @@ # Mobile Tools for Java (J2ME) .mtj.tmp/ +# vim swap files +*.swp + # Package Files # *.jar !gradle-wrapper.jar From aa842219424e5d5639ae2f790ef2da820393b984 Mon Sep 17 00:00:00 2001 From: "Renat I. Kashapov" Date: Thu, 5 Nov 2020 09:52:18 +0300 Subject: [PATCH 3/9] V11. A.java deleted --- src/main/java/A.java | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 src/main/java/A.java diff --git a/src/main/java/A.java b/src/main/java/A.java deleted file mode 100644 index 6be5562..0000000 --- a/src/main/java/A.java +++ /dev/null @@ -1,5 +0,0 @@ -public class A { - public static void main(String ... args){ - System.out.println("Hello, gradle + git!"); - } -} From fda16797e5d29d8ed6295fcce9b93245af9ce783 Mon Sep 17 00:00:00 2001 From: "Renat I. Kashapov" Date: Mon, 28 Dec 2020 10:17:25 +0300 Subject: [PATCH 4/9] v12. HW is started. + build.gradle. --- hw08-MyGSON/build.gradle | 27 +++++++++++++++++++ .../src/main/java/ru/otus/Application.java | 7 +++++ settings.gradle | 1 + 3 files changed, 35 insertions(+) create mode 100644 hw08-MyGSON/build.gradle create mode 100644 hw08-MyGSON/src/main/java/ru/otus/Application.java diff --git a/hw08-MyGSON/build.gradle b/hw08-MyGSON/build.gradle new file mode 100644 index 0000000..f8263a6 --- /dev/null +++ b/hw08-MyGSON/build.gradle @@ -0,0 +1,27 @@ +plugins { + id 'java' + id 'application' +} + +group 'ru.otus' +version '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} + +dependencies { + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' + // https://mvnrepository.com/artifact/com.google.code.gson/gson + compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6' + // https://mvnrepository.com/artifact/javax.json/javax.json-api + compile group: 'javax.json', name: 'javax.json-api', version: '1.1.4' + +} + +test { + useJUnitPlatform() +} + +mainClassName = 'ru.otus.Application' \ No newline at end of file diff --git a/hw08-MyGSON/src/main/java/ru/otus/Application.java b/hw08-MyGSON/src/main/java/ru/otus/Application.java new file mode 100644 index 0000000..b3ea117 --- /dev/null +++ b/hw08-MyGSON/src/main/java/ru/otus/Application.java @@ -0,0 +1,7 @@ +package ru.otus; + +public class Application { + static public void main(String ... args){ + + } +} diff --git a/settings.gradle b/settings.gradle index 9a32c0b..331e52e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,3 @@ rootProject.name = 'otus_hw' +include 'hw08-MyGSON' From 00cc6a7394aa7933bbdc81283cfb3be0f2e7cdbc Mon Sep 17 00:00:00 2001 From: "Renat I. Kashapov" Date: Tue, 29 Dec 2020 16:24:11 +0300 Subject: [PATCH 5/9] v13. Some module change. --- hw08-MyGSON/build.gradle | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/hw08-MyGSON/build.gradle b/hw08-MyGSON/build.gradle index f8263a6..8307f42 100644 --- a/hw08-MyGSON/build.gradle +++ b/hw08-MyGSON/build.gradle @@ -1,6 +1,5 @@ plugins { id 'java' - id 'application' } group 'ru.otus' @@ -22,6 +21,4 @@ dependencies { test { useJUnitPlatform() -} - -mainClassName = 'ru.otus.Application' \ No newline at end of file +} \ No newline at end of file From 5bb82c339db81aff721e0f4770fd88b04a8ac876 Mon Sep 17 00:00:00 2001 From: "Renat I. Kashapov" Date: Tue, 29 Dec 2020 22:05:15 +0300 Subject: [PATCH 6/9] v13.1. Some module change. --- hw08-MyGSON/build.gradle | 13 ++++++++- .../src/main/java/ru/otus/Application.java | 7 ----- hw08-MyGSON/src/main/java/ru/otus/MyGSON.java | 11 ++++++++ .../src/main/java/ru/otus/SomeClass.java | 7 +++++ .../src/test/java/ru/otus/MyGSONTest.java | 27 +++++++++++++++++++ 5 files changed, 57 insertions(+), 8 deletions(-) delete mode 100644 hw08-MyGSON/src/main/java/ru/otus/Application.java create mode 100644 hw08-MyGSON/src/main/java/ru/otus/MyGSON.java create mode 100644 hw08-MyGSON/src/main/java/ru/otus/SomeClass.java create mode 100644 hw08-MyGSON/src/test/java/ru/otus/MyGSONTest.java diff --git a/hw08-MyGSON/build.gradle b/hw08-MyGSON/build.gradle index 8307f42..b39b1a0 100644 --- a/hw08-MyGSON/build.gradle +++ b/hw08-MyGSON/build.gradle @@ -16,7 +16,18 @@ dependencies { compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6' // https://mvnrepository.com/artifact/javax.json/javax.json-api compile group: 'javax.json', name: 'javax.json-api', version: '1.1.4' - + // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api + testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.0' + // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine + testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.7.0' + // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params + testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.7.0' + // https://mvnrepository.com/artifact/org.assertj/assertj-core + testCompile group: 'org.assertj', name: 'assertj-core', version: '3.18.1' + // https://mvnrepository.com/artifact/org.mockito/mockito-core + testCompile group: 'org.mockito', name: 'mockito-core', version: '3.6.28' + // https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter + testCompile group: 'org.mockito', name: 'mockito-junit-jupiter', version: '3.6.28' } test { diff --git a/hw08-MyGSON/src/main/java/ru/otus/Application.java b/hw08-MyGSON/src/main/java/ru/otus/Application.java deleted file mode 100644 index b3ea117..0000000 --- a/hw08-MyGSON/src/main/java/ru/otus/Application.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.otus; - -public class Application { - static public void main(String ... args){ - - } -} diff --git a/hw08-MyGSON/src/main/java/ru/otus/MyGSON.java b/hw08-MyGSON/src/main/java/ru/otus/MyGSON.java new file mode 100644 index 0000000..d87d48f --- /dev/null +++ b/hw08-MyGSON/src/main/java/ru/otus/MyGSON.java @@ -0,0 +1,11 @@ +package ru.otus; + +public class MyGSON { + + private String jSONString; + + String toJSON (Object obj){ + jSONString = "aaa"; + return jSONString; + } +} diff --git a/hw08-MyGSON/src/main/java/ru/otus/SomeClass.java b/hw08-MyGSON/src/main/java/ru/otus/SomeClass.java new file mode 100644 index 0000000..5616d83 --- /dev/null +++ b/hw08-MyGSON/src/main/java/ru/otus/SomeClass.java @@ -0,0 +1,7 @@ +package ru.otus; + +public class SomeClass { + int a = 5; + String b = "Hello, Otus!"; + float[] c = {1F, 2F, 3F}; +} diff --git a/hw08-MyGSON/src/test/java/ru/otus/MyGSONTest.java b/hw08-MyGSON/src/test/java/ru/otus/MyGSONTest.java new file mode 100644 index 0000000..b354084 --- /dev/null +++ b/hw08-MyGSON/src/test/java/ru/otus/MyGSONTest.java @@ -0,0 +1,27 @@ +package ru.otus; + +import com.google.gson.Gson; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class MyGSONTest { + + SomeClass someObject = new SomeClass(); + + @BeforeEach + void setUp() { + } + + @Test + void toJSONTest(){ + String jsonString; + Gson gson = new Gson(); + jsonString = gson.toJson(someObject); + System.out.println(jsonString); + assertEquals(1l,1l); + } + +} \ No newline at end of file From 99c71e41258e917457bf02d283a7fc348323deb0 Mon Sep 17 00:00:00 2001 From: "Renat I. Kashapov" Date: Wed, 30 Dec 2020 10:29:22 +0300 Subject: [PATCH 7/9] v13.2. Some module change. --- hw08-MyGSON/build.gradle | 2 -- hw08-MyGSON/src/main/java/ru/otus/MyGSON.java | 11 ----------- hw08-MyGSON/src/main/java/ru/otus/MyGson.java | 15 +++++++++++++++ .../src/main/java/ru/otus/SomeClass.java | 17 ++++++++++++++--- .../otus/{MyGSONTest.java => MyGsonTest.java} | 14 +++++++++++++- 5 files changed, 42 insertions(+), 17 deletions(-) delete mode 100644 hw08-MyGSON/src/main/java/ru/otus/MyGSON.java create mode 100644 hw08-MyGSON/src/main/java/ru/otus/MyGson.java rename hw08-MyGSON/src/test/java/ru/otus/{MyGSONTest.java => MyGsonTest.java} (53%) diff --git a/hw08-MyGSON/build.gradle b/hw08-MyGSON/build.gradle index b39b1a0..4be7075 100644 --- a/hw08-MyGSON/build.gradle +++ b/hw08-MyGSON/build.gradle @@ -10,8 +10,6 @@ repositories { } dependencies { - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' // https://mvnrepository.com/artifact/com.google.code.gson/gson compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6' // https://mvnrepository.com/artifact/javax.json/javax.json-api diff --git a/hw08-MyGSON/src/main/java/ru/otus/MyGSON.java b/hw08-MyGSON/src/main/java/ru/otus/MyGSON.java deleted file mode 100644 index d87d48f..0000000 --- a/hw08-MyGSON/src/main/java/ru/otus/MyGSON.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.otus; - -public class MyGSON { - - private String jSONString; - - String toJSON (Object obj){ - jSONString = "aaa"; - return jSONString; - } -} diff --git a/hw08-MyGSON/src/main/java/ru/otus/MyGson.java b/hw08-MyGSON/src/main/java/ru/otus/MyGson.java new file mode 100644 index 0000000..26d95ae --- /dev/null +++ b/hw08-MyGSON/src/main/java/ru/otus/MyGson.java @@ -0,0 +1,15 @@ +package ru.otus; + +import java.lang.reflect.Field; + +public class MyGson { + + private String jSONString; + + String toJson(Object obj){ + Class clazz = obj.getClass(); + Field [] fields = clazz.getDeclaredFields(); + jSONString = "aaa"; + return jSONString; + } +} diff --git a/hw08-MyGSON/src/main/java/ru/otus/SomeClass.java b/hw08-MyGSON/src/main/java/ru/otus/SomeClass.java index 5616d83..e9f0aba 100644 --- a/hw08-MyGSON/src/main/java/ru/otus/SomeClass.java +++ b/hw08-MyGSON/src/main/java/ru/otus/SomeClass.java @@ -1,7 +1,18 @@ package ru.otus; +import java.util.List; + public class SomeClass { - int a = 5; - String b = "Hello, Otus!"; - float[] c = {1F, 2F, 3F}; + private int a; + private List b; + private float[] c; + private String d; + private double e; + + public void setA(int a) { this.a = a; } + public void setB(List b) { this.b = b; } + public void setC(float [] c) { this.c = c;} + public void setD(String d) { this.d = d;} + public void setE(double e) {this.e = e;} + } diff --git a/hw08-MyGSON/src/test/java/ru/otus/MyGSONTest.java b/hw08-MyGSON/src/test/java/ru/otus/MyGsonTest.java similarity index 53% rename from hw08-MyGSON/src/test/java/ru/otus/MyGSONTest.java rename to hw08-MyGSON/src/test/java/ru/otus/MyGsonTest.java index b354084..812cfe6 100644 --- a/hw08-MyGSON/src/test/java/ru/otus/MyGSONTest.java +++ b/hw08-MyGSON/src/test/java/ru/otus/MyGsonTest.java @@ -5,9 +5,12 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.util.ArrayList; +import java.util.List; + import static org.junit.jupiter.api.Assertions.*; -class MyGSONTest { +class MyGsonTest { SomeClass someObject = new SomeClass(); @@ -17,10 +20,19 @@ void setUp() { @Test void toJSONTest(){ + List list = new ArrayList<>(); + for (int i = 1; i < 4; i++) { list.add(Integer.toString(i)); } + someObject.setA(5); + someObject.setB(list); + someObject.setC(new float[] {1F, 2F, 3F}); + someObject.setD("Hello, Otus!"); + someObject.setE(Math.E); String jsonString; Gson gson = new Gson(); jsonString = gson.toJson(someObject); System.out.println(jsonString); + MyGson myGson = new MyGson(); + jsonString = myGson.toJson(someObject); assertEquals(1l,1l); } From 4979e959e6d4437ec735e1b9f1e0a2f1754955fd Mon Sep 17 00:00:00 2001 From: "Renat I. Kashapov" Date: Sat, 9 Jan 2021 15:46:04 +0300 Subject: [PATCH 8/9] v14 Iteration 1. --- hw08-MyGSON/build.gradle | 3 + hw08-MyGSON/src/main/java/ru/otus/MyGson.java | 287 +++++++++++++++++- .../src/main/java/ru/otus/SomeClass.java | 146 ++++++++- .../src/test/java/ru/otus/MyGsonTest.java | 28 +- 4 files changed, 439 insertions(+), 25 deletions(-) diff --git a/hw08-MyGSON/build.gradle b/hw08-MyGSON/build.gradle index 4be7075..b922f72 100644 --- a/hw08-MyGSON/build.gradle +++ b/hw08-MyGSON/build.gradle @@ -26,6 +26,9 @@ dependencies { testCompile group: 'org.mockito', name: 'mockito-core', version: '3.6.28' // https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter testCompile group: 'org.mockito', name: 'mockito-junit-jupiter', version: '3.6.28' + // https://mvnrepository.com/artifact/org.glassfish/javax.json + compile group: 'org.glassfish', name: 'javax.json', version: '1.1.4' + } test { diff --git a/hw08-MyGSON/src/main/java/ru/otus/MyGson.java b/hw08-MyGSON/src/main/java/ru/otus/MyGson.java index 26d95ae..031b1ff 100644 --- a/hw08-MyGSON/src/main/java/ru/otus/MyGson.java +++ b/hw08-MyGSON/src/main/java/ru/otus/MyGson.java @@ -1,15 +1,290 @@ package ru.otus; +import javax.json.Json; +import javax.json.JsonArrayBuilder; +import javax.json.JsonObjectBuilder; import java.lang.reflect.Field; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; public class MyGson { - private String jSONString; + static final private Set> supportedNonJsonficationClassesSet = new HashSet<>(); - String toJson(Object obj){ + static { + supportedNonJsonficationClassesSet.add(Boolean.class); + supportedNonJsonficationClassesSet.add(Byte.class); + supportedNonJsonficationClassesSet.add(Character.class); + supportedNonJsonficationClassesSet.add(Double.class); + supportedNonJsonficationClassesSet.add(Float.class); + supportedNonJsonficationClassesSet.add(Integer.class); + supportedNonJsonficationClassesSet.add(Long.class); + supportedNonJsonficationClassesSet.add(Short.class); + supportedNonJsonficationClassesSet.add(String.class); + supportedNonJsonficationClassesSet.add(Number.class); + } + + public String toJson(Object obj) { + switch (defineObjectSort(obj)) { + case "ArrayOrCollection": + return myGsonCreateArrayBuilder(obj).build().toString(); + case "PrimitiveOrWrapperOrString": + return obj.toString(); + case "Custom": + return myGsonCreateObjectBuilder(obj).build().toString(); + default: + return "null"; + } + } + + private void putPrimitiveToJsonArrayBuilder(JsonArrayBuilder jsonArrayBuilder, Object primitive) throws IllegalAccessException { + switch (primitive.getClass().getName()) { + case "boolean": + case "java.lang.Boolean": + jsonArrayBuilder.add((boolean) primitive); + break; + case "byte": + case "java.lang.Byte": + jsonArrayBuilder.add((byte) primitive); + break; + case "char": + case "java.lang.Character": + jsonArrayBuilder.add((char) primitive); + break; + case "double": + case "java.lang.Double": + jsonArrayBuilder.add((double) primitive); + break; + case "float": + case "java.lang.Float": + jsonArrayBuilder.add((float) primitive); + break; + case "int": + case "java.lang.Integer": + jsonArrayBuilder.add((int) primitive); + break; + case "long": + case "java.lang.Long": + jsonArrayBuilder.add((long) primitive); + break; + case "short": + case "java.lang.Short": + jsonArrayBuilder.add((short) primitive); + break; + case "java.lang.String": + jsonArrayBuilder.add((String) primitive); + break; + default: + } + + } + + private void putPrimitiveFieldToJson(JsonObjectBuilder jsonObjectBuilder, Object obj, Field field) throws IllegalAccessException { + switch (field.getType().getName()) { + case "java.lang.Boolean": + jsonObjectBuilder.add(field.getName(),(Boolean) field.get(obj)); + break; + case "boolean": + jsonObjectBuilder.add(field.getName(), field.getBoolean(obj)); + break; + case "java.lang.Byte": + jsonObjectBuilder.add(field.getName(),(Byte)field.get(obj)); + break; + case "byte": + jsonObjectBuilder.add(field.getName(), field.getByte(obj)); + break; + case "java.lang.Character": + jsonObjectBuilder.add(field.getName(),(Character)field.get(obj)); + break; + case "char": + jsonObjectBuilder.add(field.getName(), field.getChar(obj)); + break; + case "java.lang.Double": + jsonObjectBuilder.add(field.getName(),(Double)field.get(obj)); + break; + case "double": + jsonObjectBuilder.add(field.getName(), field.getDouble(obj)); + break; + case "java.lang.Float": + jsonObjectBuilder.add(field.getName(),(Float)field.get(obj)); + break; + case "float": + jsonObjectBuilder.add(field.getName(), field.getFloat(obj)); + break; + case "java.lang.Long": + jsonObjectBuilder.add(field.getName(),(Long)field.get(obj)); + break; + case "long": + jsonObjectBuilder.add(field.getName(), field.getLong(obj)); + break; + case "java.lang.Integer": + jsonObjectBuilder.add(field.getName(), (Integer) field.get(obj)); + break; + case "int": + jsonObjectBuilder.add(field.getName(), field.getInt(obj)); + break; + case "java.lang.Short": + jsonObjectBuilder.add(field.getName(), (Short) field.get(obj)); + break; + case "short": + jsonObjectBuilder.add(field.getName(), field.getShort(obj)); + break; + default: + jsonObjectBuilder.add(field.getName(), field.get(obj).toString()); + } + } + + private String defineObjectSort(Object obj) { + if (obj == null) { + return "Null"; + } + if (obj.getClass().isArray() || obj instanceof Collection) { + return "ArrayOrCollection"; + } else { + if (obj.getClass().isPrimitive() || supportedNonJsonficationClassesSet.contains(obj.getClass())) { + return "PrimitiveOrWrapperOrString"; + } + } + return "Custom"; + } + + private JsonObjectBuilder myGsonCreateObjectBuilder(Object obj) { + JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder(); Class clazz = obj.getClass(); - Field [] fields = clazz.getDeclaredFields(); - jSONString = "aaa"; - return jSONString; + Field[] fields = clazz.getDeclaredFields(); + for (Field field : fields) { + field.setAccessible(true); + try { + switch (defineObjectSort(field.get(obj))) { + case "Custom": + jsonObjectBuilder.add(field.getName(), myGsonCreateObjectBuilder(field.get(obj))); + break; + case "ArrayOrCollection": + jsonObjectBuilder.add(field.getName(), myGsonCreateArrayBuilder(field.get(obj))); + break; + case "PrimitiveOrWrapperOrString": + putPrimitiveFieldToJson(jsonObjectBuilder, obj, field); + break; + case "Null": + default: + } + } catch (IllegalAccessException illegalAccessException) { + System.out.println("Accessibility to field " + field.getName() + " doesn't set."); + } + field.setAccessible(false); + } + return jsonObjectBuilder; + } + + private JsonArrayBuilder myGsonCreateArrayBuilder(Object obj) { + JsonArrayBuilder jsonArrayBuilder = Json.createArrayBuilder(); + if (obj instanceof Collection) { + Iterator iterator = ((Collection) obj).iterator(); + while (iterator.hasNext()) { + Object object = iterator.next(); + switch (defineObjectSort(object)) { + case "Null": + break; + case "ArrayOrCollection": + jsonArrayBuilder.add(myGsonCreateArrayBuilder(object)); + break; + case "PrimitiveOrWrapperOrString": + try { + putPrimitiveToJsonArrayBuilder(jsonArrayBuilder, object); + } catch (IllegalAccessException illegalAccessException) { + illegalAccessException.printStackTrace(); + } + break; + case "Custom": + jsonArrayBuilder.add(myGsonCreateObjectBuilder(object)); + break; + default: + } + } + } else { + if (obj.getClass().getComponentType().isPrimitive() + || supportedNonJsonficationClassesSet.contains(obj.getClass().getComponentType())) { + putPrimitiveArrayToJsonArrayBuilder(jsonArrayBuilder, obj); + } else { + Object[] objectArray = (Object[]) obj; + for (Object object : objectArray) { + jsonArrayBuilder.add(myGsonCreateObjectBuilder(object)); + } + } + + } + return jsonArrayBuilder; + } + + private void putPrimitiveArrayToJsonArrayBuilder(JsonArrayBuilder jsonArrayBuilder, Object primitiveArray) { + switch (primitiveArray.getClass().getComponentType().getName()) { + case "boolean": + case "java.lang.Boolean": + boolean[] booleans = (boolean[]) primitiveArray; + for (boolean booleanExemplar : booleans) { + jsonArrayBuilder.add(booleanExemplar); + } + break; + case "byte": + case "java.lang.Byte": + byte[] bytes = (byte[]) primitiveArray; + for (byte byteExemplar : bytes) { + jsonArrayBuilder.add(byteExemplar); + } + break; + case "char": + case "java.lang.Character": + char[] chars = (char[]) primitiveArray; + for (char charExemplar : chars) { + jsonArrayBuilder.add(charExemplar); + } + break; + case "double": + case "java.lang.Double": + double[] doubles = (double[]) primitiveArray; + for (double doubleExemplar : doubles) { + jsonArrayBuilder.add(doubleExemplar); + } + break; + case "float": + case "java.lang.Float": + float[] floats = (float[]) primitiveArray; + for (float floatExemplar : floats) { + jsonArrayBuilder.add(floatExemplar); + } + break; + case "int": + case "java.lang.Integer": + int[] ints = (int[]) primitiveArray; + for (int intExemplar : ints) { + jsonArrayBuilder.add(intExemplar); + } + break; + case "long": + case "java.lang.Long": + long[] longs = (long[]) primitiveArray; + for (long longExemplar : longs) { + jsonArrayBuilder.add(longExemplar); + } + break; + case "short": + case "java.lang.Short": + short[] shorts = (short[]) primitiveArray; + for (short shortExemplar : shorts) { + jsonArrayBuilder.add(shortExemplar); + } + break; + case "java.lang.String": + String[] strings = (String[]) primitiveArray; + for (String stringExemplar : strings) { + jsonArrayBuilder.add(stringExemplar); + } + break; + + default: + } + } -} +} \ No newline at end of file diff --git a/hw08-MyGSON/src/main/java/ru/otus/SomeClass.java b/hw08-MyGSON/src/main/java/ru/otus/SomeClass.java index e9f0aba..6dc1315 100644 --- a/hw08-MyGSON/src/main/java/ru/otus/SomeClass.java +++ b/hw08-MyGSON/src/main/java/ru/otus/SomeClass.java @@ -1,18 +1,152 @@ package ru.otus; +import java.util.Arrays; import java.util.List; public class SomeClass { private int a; - private List b; + private List b; private float[] c; private String d; private double e; + private Short f; - public void setA(int a) { this.a = a; } - public void setB(List b) { this.b = b; } - public void setC(float [] c) { this.c = c;} - public void setD(String d) { this.d = d;} - public void setE(double e) {this.e = e;} + public void setA(int a) { + this.a = a; + } + public void setB(List b) { + this.b = b; + } + + public void setC(float[] c) { + this.c = c; + } + + public void setD(String d) { + this.d = d; + } + + public void setE(double e) { + this.e = e; + } + + public void setF(Short f) { + this.f = f; + } + + private SomeClass(int a, List b, float[] c, String d, double e, Short f) { + this.a = a; + this.b = b.subList(0, b.size()); + this.c = c.clone(); + this.d = d; + this.e = e; + this.f = f; + } + + public static class Builder { + private int a; + private List b; + private float[] c; + private String d; + private double e; + private Short f; + + SomeClass build() { + return new SomeClass(this.a, this.b, this.c, this.d, this.e, this.f); + } + + public Builder setA(int a) { + this.a = a; + return this; + } + + public Builder setB(List b) { + this.b = b; + return this; + } + + public Builder setC(float[] c) { + this.c = c; + return this; + } + + public Builder setD(String d) { + this.d = d; + return this; + } + + public Builder setE(double e) { + this.e = e; + return this; + } + + public Builder setF(Short f) { + this.f = f; + return this; + } + } + + public int getA() { + return a; + } + + public List getB(){ + return b.subList(0,b.size()); + } + + public float[] getC(){ + return c.clone(); + } + + public String getD(){ + return d; + } + + public double getE(){ + return e; + } + + public Short getF(){ + return Short.valueOf(f); + } + + @Override + public boolean equals(Object obj) { + boolean result = true; + if (this == obj){ + return result; + } + if(this.getClass().equals(obj.getClass())){ + SomeClass someObject = (SomeClass) obj; + if (this.a==someObject.getA()){ + if (this.b.equals(someObject.getB())){ + if (Arrays.equals(this.c,someObject.getC())){ + if (this.d.equals(someObject.getD())){ + if(this.e == someObject.getE()){ + if (this.f.equals(someObject.getF())){ + + } else { + result = false; + } + } else { + result = false; + } + } else { + result = false; + } + } else { + result = false; + } + } else { + result = false; + } + } else { + result = false; + } + } else { + result = false; + } + return result; + } } diff --git a/hw08-MyGSON/src/test/java/ru/otus/MyGsonTest.java b/hw08-MyGSON/src/test/java/ru/otus/MyGsonTest.java index 812cfe6..42dc8eb 100644 --- a/hw08-MyGSON/src/test/java/ru/otus/MyGsonTest.java +++ b/hw08-MyGSON/src/test/java/ru/otus/MyGsonTest.java @@ -1,7 +1,6 @@ package ru.otus; import com.google.gson.Gson; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -12,7 +11,8 @@ class MyGsonTest { - SomeClass someObject = new SomeClass(); + SomeClass someObject; + SomeClass anotherObject; @BeforeEach void setUp() { @@ -20,20 +20,22 @@ void setUp() { @Test void toJSONTest(){ - List list = new ArrayList<>(); + SomeClass.Builder someClassBuilder = new SomeClass.Builder(); + List list = new ArrayList<>(); + list.add(Boolean.TRUE); for (int i = 1; i < 4; i++) { list.add(Integer.toString(i)); } - someObject.setA(5); - someObject.setB(list); - someObject.setC(new float[] {1F, 2F, 3F}); - someObject.setD("Hello, Otus!"); - someObject.setE(Math.E); - String jsonString; + someObject = someClassBuilder + .setA(5) + .setB(list) + .setC(new float[] {1F,2F,3F}) + .setD("Hello, Otus!") + .setE(Math.E) + .setF((short) 27) + .build(); Gson gson = new Gson(); - jsonString = gson.toJson(someObject); - System.out.println(jsonString); MyGson myGson = new MyGson(); - jsonString = myGson.toJson(someObject); - assertEquals(1l,1l); + anotherObject = gson.fromJson(gson.toJson(someObject), SomeClass.class); + assertEquals(someObject,anotherObject); } } \ No newline at end of file From 3a508e3b346f60d778ca8e32c7beb53e3b8803c5 Mon Sep 17 00:00:00 2001 From: 1121977 Date: Thu, 22 Apr 2021 16:57:43 +0300 Subject: [PATCH 9/9] README update --- README.md | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index c29a8be..5fdd5a6 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,12 @@ -# Примеры для курса "Разработчик Java" в OTUS +Напишите свой json object writer (object to JSON string) аналогичный gson на основе javax.json. -Группа 2020-09 +Gson это делает так: Gson gson = new Gson(); AnyObject obj = new AnyObject(22, "test", 10); String json = gson.toJson(obj); -### Преподаватели -Сергей Петрелевич
-Стрекалов Павел
-Александр Оруджев
-Вячеслав Лапин
-Виталий Куценко
-Дмитрий Коган +Сделайте так: MyGson myGson = new MyGson(); AnyObject obj = new AnyObject(22, "test", 10); String myJson = myGson.toJson(obj); -Студент: -Kashapov Renat (Кашапов Ренат)
-renat.kashapov@gmail.com \ No newline at end of file +Должно получиться: AnyObject obj2 = gson.fromJson(myJson, AnyObject.class); System.out.println(obj.equals(obj2)); + +Поддержите: + +примитивные типы и Wrapper-ы (Integer, Float и т.д.) строки массивы примитивных типов коллекции (interface Collection) +Не забываться, что obj может быть null :)