From ee7d915190a1b4722cf5c2a06665f6b0082e0071 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 18 Sep 2022 20:44:11 +0300 Subject: [PATCH 1/4] attempt1 --- .../sber/mironov/ClientType/ClientType.java | 57 +++++++++++++++++ main/java/ru/sber/mironov/Clients/Client.java | 18 ++++++ .../sber/mironov/Clients/HoldingClient.java | 17 +++++ .../mironov/Clients/IndividualClient.java | 26 ++++++++ .../mironov/Clients/LegalEntityClient.java | 19 ++++++ .../ClientsJsonParser/ClientsJsonParser.java | 30 +++++++++ main/java/ru/sber/mironov/Main.java | 64 +++++++++++++++++++ main/resources/Clients.json | 1 + .../ClientsJsonParserTest.java | 36 +++++++++++ test/resources/Clients.json | 1 + 10 files changed, 269 insertions(+) create mode 100644 main/java/ru/sber/mironov/ClientType/ClientType.java create mode 100644 main/java/ru/sber/mironov/Clients/Client.java create mode 100644 main/java/ru/sber/mironov/Clients/HoldingClient.java create mode 100644 main/java/ru/sber/mironov/Clients/IndividualClient.java create mode 100644 main/java/ru/sber/mironov/Clients/LegalEntityClient.java create mode 100644 main/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java create mode 100644 main/java/ru/sber/mironov/Main.java create mode 100644 main/resources/Clients.json create mode 100644 test/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java create mode 100644 test/resources/Clients.json diff --git a/main/java/ru/sber/mironov/ClientType/ClientType.java b/main/java/ru/sber/mironov/ClientType/ClientType.java new file mode 100644 index 0000000..9a957a3 --- /dev/null +++ b/main/java/ru/sber/mironov/ClientType/ClientType.java @@ -0,0 +1,57 @@ +package ru.sber.mironov.ClientType; + +import org.json.JSONObject; +import ru.sber.mironov.Clients.Client; +import ru.sber.mironov.Clients.HoldingClient; +import ru.sber.mironov.Clients.IndividualClient; +import ru.sber.mironov.Clients.LegalEntityClient; + +import java.util.List; + +public enum ClientType { + INDIVIDUAL("INDIVIDUAL") { + private List parseClient(JSONObject client) { + String name = client.getString("name"); + String inn = client.getString("inn"); + return List.of(name, inn); + } + + public Client createClient(JSONObject client) { + return new IndividualClient(this.parseClient(client)); + } + }, + LEGAL_ENTITY("LEGAL_ENTITY") { + private List parseClient(JSONObject client) { + String name = client.getString("name"); + String inn = client.getString("inn"); + return List.of(name, inn); + } + + public Client createClient(JSONObject client) { + return new LegalEntityClient(this.parseClient(client)); + } + }, + HOLDING("HOLDING") { + List parseClient(JSONObject client) { + String name = client.getString("name"); + String inn = client.getString("inn"); + return List.of(name, inn); + } + + public Client createClient(JSONObject client) { + return new HoldingClient(parseClient(client)); + } + }; + public final String type; + + /*List parseClient(JSONObject client) { + String name = client.getString("name"); + String inn = client.getString("inn"); + return List.of(name, inn); + }*/ + ClientType(String description) { + this.type = description; + } + + public abstract Client createClient(JSONObject client); +} diff --git a/main/java/ru/sber/mironov/Clients/Client.java b/main/java/ru/sber/mironov/Clients/Client.java new file mode 100644 index 0000000..bef72d4 --- /dev/null +++ b/main/java/ru/sber/mironov/Clients/Client.java @@ -0,0 +1,18 @@ +package ru.sber.mironov.Clients; + +import ru.sber.mironov.ClientType.ClientType; + +public class Client { + public final String name; + public final String inn; + public final ClientType type; + + public Client(String name, String inn, ClientType type) { + this.name = name; + this.inn = inn; + this.type = type; + } + public String toString() { + return name.toString() + " " + inn.toString() + " " + type.type; + } +} diff --git a/main/java/ru/sber/mironov/Clients/HoldingClient.java b/main/java/ru/sber/mironov/Clients/HoldingClient.java new file mode 100644 index 0000000..a8f8e49 --- /dev/null +++ b/main/java/ru/sber/mironov/Clients/HoldingClient.java @@ -0,0 +1,17 @@ +package ru.sber.mironov.Clients; + + +import ru.sber.mironov.ClientType.ClientType; + +import java.util.List; + +public class HoldingClient extends Client { + public HoldingClient(String name, String inn, ClientType type) { + super(name, inn, type); + } + + public HoldingClient(List client) { + super((String) client.get(0), (String) client.get(1), ClientType.HOLDING); + } + +} diff --git a/main/java/ru/sber/mironov/Clients/IndividualClient.java b/main/java/ru/sber/mironov/Clients/IndividualClient.java new file mode 100644 index 0000000..1620f79 --- /dev/null +++ b/main/java/ru/sber/mironov/Clients/IndividualClient.java @@ -0,0 +1,26 @@ +package ru.sber.mironov.Clients; + +import org.json.JSONObject; +import ru.sber.mironov.ClientType.ClientType; + + +import java.util.List; + +public class IndividualClient extends Client { + + public IndividualClient(String name, String inn, ClientType type) { + super(name, inn, type); + } + + public IndividualClient(String description) { + super("Gera", "1688", ClientType.INDIVIDUAL); + } + + public IndividualClient(List client) { + super((String)client.get(0), (String)client.get(1), ClientType.INDIVIDUAL); + } + + private static void parse(JSONObject client) { + + } +} diff --git a/main/java/ru/sber/mironov/Clients/LegalEntityClient.java b/main/java/ru/sber/mironov/Clients/LegalEntityClient.java new file mode 100644 index 0000000..7f7a3f2 --- /dev/null +++ b/main/java/ru/sber/mironov/Clients/LegalEntityClient.java @@ -0,0 +1,19 @@ +package ru.sber.mironov.Clients; + + + +import ru.sber.mironov.ClientType.ClientType; + +import java.util.List; + +public class LegalEntityClient extends Client { + + + public LegalEntityClient(String name, String inn, ClientType type) { + super(name, inn, type); + } + + public LegalEntityClient(List client) { + super((String) client.get(0), (String) client.get(1), ClientType.LEGAL_ENTITY); + } +} diff --git a/main/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java b/main/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java new file mode 100644 index 0000000..0891b29 --- /dev/null +++ b/main/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java @@ -0,0 +1,30 @@ +package ru.sber.mironov.ClientsJsonParser; + +import org.apache.commons.io.FileUtils; +import org.json.JSONArray; +import org.json.JSONObject; +import ru.sber.mironov.ClientType.ClientType; +import ru.sber.mironov.Clients.Client; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; + +public class ClientsJsonParser { + public static ArrayList parseClientsJson(File file) throws IOException { + String content = FileUtils.readFileToString(file, "utf-8"); + JSONArray clients = new JSONArray(content); + //System.out.println(clients); + ArrayList people = new ArrayList<>(); + for (var o : clients) { + //System.out.println(o); + //System.out.println(o.toString()); + //JSONObject x = new JSONObject(o); + //System.out.println(((JSONObject) o).getString("ClientType")); + ClientType ct = ClientType.valueOf(((JSONObject) o).getString("ClientType")); + //System.out.println(ct.type); + people.add(ct.createClient((JSONObject) o)); + } + return people; + } +} diff --git a/main/java/ru/sber/mironov/Main.java b/main/java/ru/sber/mironov/Main.java new file mode 100644 index 0000000..271d6c0 --- /dev/null +++ b/main/java/ru/sber/mironov/Main.java @@ -0,0 +1,64 @@ +package ru.sber.mironov; + +import netscape.javascript.JSObject; +import org.json.JSONArray; +import org.json.JSONObject; +import ru.sber.mironov.ClientType.ClientType; +import ru.sber.mironov.Clients.Client; +import ru.sber.mironov.Clients.HoldingClient; +import ru.sber.mironov.Clients.IndividualClient; +import ru.sber.mironov.Clients.LegalEntityClient; +import ru.sber.mironov.ClientsJsonParser.ClientsJsonParser; + +import org.apache.commons.io.FileUtils; +import org.json.JSONObject; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class Main { + public static void main(String[] args) throws IOException { + + //ArrayList clients = (ArrayList) List.of(new IndividualClient("Alex", "1688", ClientType.INDIVIDUAL), + // new LegalEntityClient("Vadim", "1432", ClientType.LEGAL_ENTITY), + // new HoldingClient("Gera", "2001", ClientType.HOLDING)); + /*JSONObject first = new JSONObject(); + JSONObject second = new JSONObject(); + JSONObject third = new JSONObject(); + + first.put("name", "Alex"); + first.put("inn", "1688"); + first.put("ClientType", ClientType.INDIVIDUAL); + + second.put("name", "Vadim"); + second.put("inn", "1432"); + second.put("ClientType", ClientType.LEGAL_ENTITY); + + third.put("name", "Gera"); + third.put("inn", "2001"); + third.put("ClientType", ClientType.HOLDING); + + JSONArray arr = new JSONArray(); + arr.put(first); + arr.put(second); + arr.put(third);*/ + //Files.writeString(Paths.get("src/main/resources/Clients.json"), arr.toString()); + + File file = new File(args[0]); + var people = ClientsJsonParser.parseClientsJson(file); + for (Client x : people) { + System.out.println(x); + } + + } +} + + diff --git a/main/resources/Clients.json b/main/resources/Clients.json new file mode 100644 index 0000000..2d068ee --- /dev/null +++ b/main/resources/Clients.json @@ -0,0 +1 @@ +[{"ClientType":"INDIVIDUAL","name":"Alex","inn":"1688"},{"ClientType":"LEGAL_ENTITY","name":"Vadim","inn":"1432"},{"ClientType":"HOLDING","name":"Gera","inn":"2001"}] \ No newline at end of file diff --git a/test/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java b/test/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java new file mode 100644 index 0000000..13e60c5 --- /dev/null +++ b/test/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java @@ -0,0 +1,36 @@ +package ru.sber.mironov.ClientsJsonParser; + +import org.junit.Test; +import org.junit.Before; +import org.junit.After; +import org.junit.Assert; +import ru.sber.mironov.ClientType.ClientType; +import ru.sber.mironov.Clients.Client; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; + + +public class ClientsJsonParserTest { + private ArrayList people; + + @Before + public void setUpPeople() throws IOException { + String fileName = "./src/test/resources/Clients.json"; + File file = new File(fileName); + people = ClientsJsonParser.parseClientsJson(file); + } + + @After + public void tearDown() { + people.clear(); + } + + @Test + public void parseClientsJson() { + Assert.assertEquals(this.people.get(0).name, "Alex"); + Assert.assertEquals(this.people.get(0).inn, "1688"); + Assert.assertEquals(this.people.get(0).type, ClientType.INDIVIDUAL); + } +} \ No newline at end of file diff --git a/test/resources/Clients.json b/test/resources/Clients.json new file mode 100644 index 0000000..2d068ee --- /dev/null +++ b/test/resources/Clients.json @@ -0,0 +1 @@ +[{"ClientType":"INDIVIDUAL","name":"Alex","inn":"1688"},{"ClientType":"LEGAL_ENTITY","name":"Vadim","inn":"1432"},{"ClientType":"HOLDING","name":"Gera","inn":"2001"}] \ No newline at end of file From 6595aca29b2d0c17352d7b8b8ca88de044afe683 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 18 Sep 2022 21:05:34 +0300 Subject: [PATCH 2/4] fix structure --- build.gradle | 25 +++++++++++++++++++ .../sber/mironov/ClientType/ClientType.java | 0 .../java/ru/sber/mironov/Clients/Client.java | 0 .../sber/mironov/Clients/HoldingClient.java | 0 .../mironov/Clients/IndividualClient.java | 0 .../mironov/Clients/LegalEntityClient.java | 0 .../ClientsJsonParser/ClientsJsonParser.java | 0 .../main}/java/ru/sber/mironov/Main.java | 0 {main => src/main}/resources/Clients.json | 0 .../ClientsJsonParserTest.java | 0 {test => src/test}/resources/Clients.json | 0 11 files changed, 25 insertions(+) create mode 100644 build.gradle rename {main => src/main}/java/ru/sber/mironov/ClientType/ClientType.java (100%) rename {main => src/main}/java/ru/sber/mironov/Clients/Client.java (100%) rename {main => src/main}/java/ru/sber/mironov/Clients/HoldingClient.java (100%) rename {main => src/main}/java/ru/sber/mironov/Clients/IndividualClient.java (100%) rename {main => src/main}/java/ru/sber/mironov/Clients/LegalEntityClient.java (100%) rename {main => src/main}/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java (100%) rename {main => src/main}/java/ru/sber/mironov/Main.java (100%) rename {main => src/main}/resources/Clients.json (100%) rename {test => src/test}/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java (100%) rename {test => src/test}/resources/Clients.json (100%) diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..001bb83 --- /dev/null +++ b/build.gradle @@ -0,0 +1,25 @@ +plugins { + id 'java' +} + +group 'org.example' +version '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.json:json:20220320' + // https://mvnrepository.com/artifact/junit/junit + testImplementation group: 'junit', name: 'junit', version: '4.13.2' + + // https://mvnrepository.com/artifact/commons-io/commons-io + implementation group: 'commons-io', name: 'commons-io', version: '2.6' + +} + +test { + useJUnit() +} + diff --git a/main/java/ru/sber/mironov/ClientType/ClientType.java b/src/main/java/ru/sber/mironov/ClientType/ClientType.java similarity index 100% rename from main/java/ru/sber/mironov/ClientType/ClientType.java rename to src/main/java/ru/sber/mironov/ClientType/ClientType.java diff --git a/main/java/ru/sber/mironov/Clients/Client.java b/src/main/java/ru/sber/mironov/Clients/Client.java similarity index 100% rename from main/java/ru/sber/mironov/Clients/Client.java rename to src/main/java/ru/sber/mironov/Clients/Client.java diff --git a/main/java/ru/sber/mironov/Clients/HoldingClient.java b/src/main/java/ru/sber/mironov/Clients/HoldingClient.java similarity index 100% rename from main/java/ru/sber/mironov/Clients/HoldingClient.java rename to src/main/java/ru/sber/mironov/Clients/HoldingClient.java diff --git a/main/java/ru/sber/mironov/Clients/IndividualClient.java b/src/main/java/ru/sber/mironov/Clients/IndividualClient.java similarity index 100% rename from main/java/ru/sber/mironov/Clients/IndividualClient.java rename to src/main/java/ru/sber/mironov/Clients/IndividualClient.java diff --git a/main/java/ru/sber/mironov/Clients/LegalEntityClient.java b/src/main/java/ru/sber/mironov/Clients/LegalEntityClient.java similarity index 100% rename from main/java/ru/sber/mironov/Clients/LegalEntityClient.java rename to src/main/java/ru/sber/mironov/Clients/LegalEntityClient.java diff --git a/main/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java b/src/main/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java similarity index 100% rename from main/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java rename to src/main/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java diff --git a/main/java/ru/sber/mironov/Main.java b/src/main/java/ru/sber/mironov/Main.java similarity index 100% rename from main/java/ru/sber/mironov/Main.java rename to src/main/java/ru/sber/mironov/Main.java diff --git a/main/resources/Clients.json b/src/main/resources/Clients.json similarity index 100% rename from main/resources/Clients.json rename to src/main/resources/Clients.json diff --git a/test/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java b/src/test/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java similarity index 100% rename from test/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java rename to src/test/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java diff --git a/test/resources/Clients.json b/src/test/resources/Clients.json similarity index 100% rename from test/resources/Clients.json rename to src/test/resources/Clients.json From 652561c412e34f247f272c1a39edee0c1a982c22 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 21 Sep 2022 14:25:05 +0300 Subject: [PATCH 3/4] parse json by myself --- build.gradle | 5 -- .../sber/mironov/ClientType/ClientType.java | 19 +++--- .../mironov/Clients/IndividualClient.java | 5 +- .../ClientsJsonParser/ClientsJsonParser.java | 28 ++++++--- src/main/java/ru/sber/mironov/Main.java | 60 ++++++++++++------- .../mironov/MyJsonLibrary/MyJsonArray.java | 32 ++++++++++ .../mironov/MyJsonLibrary/MyJsonObject.java | 33 ++++++++++ .../ClientsJsonParserTest.java | 11 ++-- 8 files changed, 139 insertions(+), 54 deletions(-) create mode 100644 src/main/java/ru/sber/mironov/MyJsonLibrary/MyJsonArray.java create mode 100644 src/main/java/ru/sber/mironov/MyJsonLibrary/MyJsonObject.java diff --git a/build.gradle b/build.gradle index 001bb83..63d620b 100644 --- a/build.gradle +++ b/build.gradle @@ -10,13 +10,8 @@ repositories { } dependencies { - implementation 'org.json:json:20220320' // https://mvnrepository.com/artifact/junit/junit testImplementation group: 'junit', name: 'junit', version: '4.13.2' - - // https://mvnrepository.com/artifact/commons-io/commons-io - implementation group: 'commons-io', name: 'commons-io', version: '2.6' - } test { diff --git a/src/main/java/ru/sber/mironov/ClientType/ClientType.java b/src/main/java/ru/sber/mironov/ClientType/ClientType.java index 9a957a3..b07d2a4 100644 --- a/src/main/java/ru/sber/mironov/ClientType/ClientType.java +++ b/src/main/java/ru/sber/mironov/ClientType/ClientType.java @@ -1,44 +1,46 @@ package ru.sber.mironov.ClientType; -import org.json.JSONObject; + import ru.sber.mironov.Clients.Client; import ru.sber.mironov.Clients.HoldingClient; import ru.sber.mironov.Clients.IndividualClient; import ru.sber.mironov.Clients.LegalEntityClient; +import ru.sber.mironov.MyJsonLibrary.MyJsonObject; + import java.util.List; public enum ClientType { INDIVIDUAL("INDIVIDUAL") { - private List parseClient(JSONObject client) { + private List parseClient(MyJsonObject client) { String name = client.getString("name"); String inn = client.getString("inn"); return List.of(name, inn); } - public Client createClient(JSONObject client) { + public Client createClient(MyJsonObject client) { return new IndividualClient(this.parseClient(client)); } }, LEGAL_ENTITY("LEGAL_ENTITY") { - private List parseClient(JSONObject client) { + private List parseClient(MyJsonObject client) { String name = client.getString("name"); String inn = client.getString("inn"); return List.of(name, inn); } - public Client createClient(JSONObject client) { + public Client createClient(MyJsonObject client) { return new LegalEntityClient(this.parseClient(client)); } }, HOLDING("HOLDING") { - List parseClient(JSONObject client) { + List parseClient(MyJsonObject client) { String name = client.getString("name"); String inn = client.getString("inn"); return List.of(name, inn); } - public Client createClient(JSONObject client) { + public Client createClient(MyJsonObject client) { return new HoldingClient(parseClient(client)); } }; @@ -53,5 +55,6 @@ public Client createClient(JSONObject client) { this.type = description; } - public abstract Client createClient(JSONObject client); + public abstract Client createClient(MyJsonObject client); } + diff --git a/src/main/java/ru/sber/mironov/Clients/IndividualClient.java b/src/main/java/ru/sber/mironov/Clients/IndividualClient.java index 1620f79..96f686e 100644 --- a/src/main/java/ru/sber/mironov/Clients/IndividualClient.java +++ b/src/main/java/ru/sber/mironov/Clients/IndividualClient.java @@ -1,6 +1,6 @@ package ru.sber.mironov.Clients; -import org.json.JSONObject; + import ru.sber.mironov.ClientType.ClientType; @@ -20,7 +20,4 @@ public IndividualClient(List client) { super((String)client.get(0), (String)client.get(1), ClientType.INDIVIDUAL); } - private static void parse(JSONObject client) { - - } } diff --git a/src/main/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java b/src/main/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java index 0891b29..de57d46 100644 --- a/src/main/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java +++ b/src/main/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java @@ -1,19 +1,29 @@ package ru.sber.mironov.ClientsJsonParser; -import org.apache.commons.io.FileUtils; -import org.json.JSONArray; -import org.json.JSONObject; + import ru.sber.mironov.ClientType.ClientType; import ru.sber.mironov.Clients.Client; +import ru.sber.mironov.MyJsonLibrary.MyJsonArray; -import java.io.File; +import java.io.BufferedReader; +import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; public class ClientsJsonParser { - public static ArrayList parseClientsJson(File file) throws IOException { - String content = FileUtils.readFileToString(file, "utf-8"); - JSONArray clients = new JSONArray(content); + public static ArrayList parseClientsJson(String filePath) throws IOException { + StringBuilder fileData = new StringBuilder(); + BufferedReader reader = new BufferedReader( + new FileReader(filePath)); + char[] buf = new char[1024]; + int numRead = 0; + while ((numRead = reader.read(buf)) != -1) { + String readData = String.valueOf(buf, 0, numRead); + fileData.append(readData); + } + reader.close(); + String content = fileData.toString(); + MyJsonArray clients = new MyJsonArray(content); //System.out.println(clients); ArrayList people = new ArrayList<>(); for (var o : clients) { @@ -21,9 +31,9 @@ public static ArrayList parseClientsJson(File file) throws IOException { //System.out.println(o.toString()); //JSONObject x = new JSONObject(o); //System.out.println(((JSONObject) o).getString("ClientType")); - ClientType ct = ClientType.valueOf(((JSONObject) o).getString("ClientType")); + ClientType ct = ClientType.valueOf(o.getString("ClientType")); //System.out.println(ct.type); - people.add(ct.createClient((JSONObject) o)); + people.add(ct.createClient(o)); } return people; } diff --git a/src/main/java/ru/sber/mironov/Main.java b/src/main/java/ru/sber/mironov/Main.java index 271d6c0..36b4dda 100644 --- a/src/main/java/ru/sber/mironov/Main.java +++ b/src/main/java/ru/sber/mironov/Main.java @@ -1,31 +1,16 @@ package ru.sber.mironov; -import netscape.javascript.JSObject; -import org.json.JSONArray; -import org.json.JSONObject; -import ru.sber.mironov.ClientType.ClientType; -import ru.sber.mironov.Clients.Client; -import ru.sber.mironov.Clients.HoldingClient; -import ru.sber.mironov.Clients.IndividualClient; -import ru.sber.mironov.Clients.LegalEntityClient; import ru.sber.mironov.ClientsJsonParser.ClientsJsonParser; -import org.apache.commons.io.FileUtils; -import org.json.JSONObject; - -import java.io.File; -import java.io.FileReader; import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) throws IOException { + String[] a = {"1", "2", "3"}; + ArrayList q = new ArrayList<>(List.of(a)); + //ArrayList clients = (ArrayList) List.of(new IndividualClient("Alex", "1688", ClientType.INDIVIDUAL), // new LegalEntityClient("Vadim", "1432", ClientType.LEGAL_ENTITY), @@ -52,12 +37,43 @@ public static void main(String[] args) throws IOException { arr.put(third);*/ //Files.writeString(Paths.get("src/main/resources/Clients.json"), arr.toString()); - File file = new File(args[0]); - var people = ClientsJsonParser.parseClientsJson(file); - for (Client x : people) { - System.out.println(x); + /*String filePath = args[0]; + StringBuilder fileData = new StringBuilder(); + BufferedReader reader = new BufferedReader( + new FileReader(filePath)); + char[] buf = new char[1024]; + int numRead = 0; + while ((numRead = reader.read(buf)) != -1) { + String readData = String.valueOf(buf, 0, numRead); + fileData.append(readData); } + reader.close(); + String content = fileData.toString(); + System.out.println(content); + + Pattern pattern = Pattern.compile("\\{.+?}"); + Matcher matcher = pattern.matcher(content); + ArrayList c = new ArrayList<>(); + while (matcher.find()) { + c.add(content.substring(matcher.start(), matcher.end())); + System.out.println(content.substring(matcher.start(), matcher.end())); + } + + Pattern pattern1 = Pattern.compile("\".+?\":\".+?\""); + for (var s : c) { + Matcher matcher1 = pattern1.matcher(s); + while (matcher1.find()) { + System.out.println(s.substring(matcher1.start(), matcher1.end())); + String[] str = s.substring(matcher1.start(), matcher1.end()).split(":"); + for (int i = 0; i < 2; ++i) { + str[i] = str[i].substring(1, str[i].length() - 1); + } + System.out.println(Arrays.toString(str)); + } + }*/ + var people = ClientsJsonParser.parseClientsJson((args[0])); + System.out.println(people); } } diff --git a/src/main/java/ru/sber/mironov/MyJsonLibrary/MyJsonArray.java b/src/main/java/ru/sber/mironov/MyJsonLibrary/MyJsonArray.java new file mode 100644 index 0000000..c997bb1 --- /dev/null +++ b/src/main/java/ru/sber/mironov/MyJsonLibrary/MyJsonArray.java @@ -0,0 +1,32 @@ +package ru.sber.mironov.MyJsonLibrary; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.function.Consumer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class MyJsonArray implements Iterable { + ArrayList jsonObjects; + + public MyJsonArray(String content) { + ArrayList clients = new ArrayList<>(); + Pattern pattern = Pattern.compile("\\{.+?}"); + Matcher matcher = pattern.matcher(content); + + while (matcher.find()) { + clients.add(new MyJsonObject(content.substring(matcher.start(), matcher.end()))); + } + jsonObjects = clients; + } + + @Override + public Iterator iterator() { + return jsonObjects.iterator(); + } + + @Override + public void forEach(Consumer action) { + jsonObjects.forEach(action); + } +} diff --git a/src/main/java/ru/sber/mironov/MyJsonLibrary/MyJsonObject.java b/src/main/java/ru/sber/mironov/MyJsonLibrary/MyJsonObject.java new file mode 100644 index 0000000..e608d2f --- /dev/null +++ b/src/main/java/ru/sber/mironov/MyJsonLibrary/MyJsonObject.java @@ -0,0 +1,33 @@ +package ru.sber.mironov.MyJsonLibrary; + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class MyJsonObject { + private final Map map; + + public MyJsonObject(Map map) { + this.map = map; + } + + public MyJsonObject(String str) { + Map newMap = new HashMap<>(); + Pattern pattern = Pattern.compile("\".+?\":\".+?\""); + Matcher matcher = pattern.matcher(str); + while (matcher.find()) { + String[] s = str.substring(matcher.start(), matcher.end()).split(":"); + for(int i = 0; i < 2; ++i) { + s[i] = s[i].substring(1, s[i].length()-1); + } + + newMap.put(s[0], s[1]); + } + map = newMap; + } + + public String getString(String key) { + return map.get(key); + } +} diff --git a/src/test/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java b/src/test/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java index 13e60c5..379247f 100644 --- a/src/test/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java +++ b/src/test/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java @@ -1,13 +1,12 @@ package ru.sber.mironov.ClientsJsonParser; -import org.junit.Test; -import org.junit.Before; import org.junit.After; import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; import ru.sber.mironov.ClientType.ClientType; import ru.sber.mironov.Clients.Client; -import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -17,9 +16,9 @@ public class ClientsJsonParserTest { @Before public void setUpPeople() throws IOException { - String fileName = "./src/test/resources/Clients.json"; - File file = new File(fileName); - people = ClientsJsonParser.parseClientsJson(file); + String fileName = "src/test/resources/Clients.json"; + + people = ClientsJsonParser.parseClientsJson(fileName); } @After From e5bc16aa784263f8a5695c5900d8c84db5d24333 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 30 Sep 2022 21:51:29 +0300 Subject: [PATCH 4/4] first commit --- build.gradle | 20 -- pom.xml | 24 +++ src/main/java/ru/sber/mironov/Car.java | 44 ++++ .../sber/mironov/ClientType/ClientType.java | 60 ------ .../java/ru/sber/mironov/Clients/Client.java | 18 -- .../sber/mironov/Clients/HoldingClient.java | 17 -- .../mironov/Clients/IndividualClient.java | 23 --- .../mironov/Clients/LegalEntityClient.java | 19 -- .../ClientsJsonParser/ClientsJsonParser.java | 40 ---- src/main/java/ru/sber/mironov/Garage.java | 128 ++++++++++++ src/main/java/ru/sber/mironov/Main.java | 75 +------ src/main/java/ru/sber/mironov/MyGarage.java | 4 + .../mironov/MyJsonLibrary/MyJsonArray.java | 32 --- .../mironov/MyJsonLibrary/MyJsonObject.java | 33 --- src/main/java/ru/sber/mironov/Owner.java | 31 +++ src/main/resources/Clients.json | 1 - .../ClientsJsonParserTest.java | 35 ---- .../sber/mironov/GarageTest/GarageTest.java | 191 ++++++++++++++++++ src/test/resources/Clients.json | 1 - 19 files changed, 423 insertions(+), 373 deletions(-) delete mode 100644 build.gradle create mode 100644 pom.xml create mode 100644 src/main/java/ru/sber/mironov/Car.java delete mode 100644 src/main/java/ru/sber/mironov/ClientType/ClientType.java delete mode 100644 src/main/java/ru/sber/mironov/Clients/Client.java delete mode 100644 src/main/java/ru/sber/mironov/Clients/HoldingClient.java delete mode 100644 src/main/java/ru/sber/mironov/Clients/IndividualClient.java delete mode 100644 src/main/java/ru/sber/mironov/Clients/LegalEntityClient.java delete mode 100644 src/main/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java create mode 100644 src/main/java/ru/sber/mironov/Garage.java create mode 100644 src/main/java/ru/sber/mironov/MyGarage.java delete mode 100644 src/main/java/ru/sber/mironov/MyJsonLibrary/MyJsonArray.java delete mode 100644 src/main/java/ru/sber/mironov/MyJsonLibrary/MyJsonObject.java create mode 100644 src/main/java/ru/sber/mironov/Owner.java delete mode 100644 src/main/resources/Clients.json delete mode 100644 src/test/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java create mode 100644 src/test/java/ru/sber/mironov/GarageTest/GarageTest.java delete mode 100644 src/test/resources/Clients.json diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 63d620b..0000000 --- a/build.gradle +++ /dev/null @@ -1,20 +0,0 @@ -plugins { - id 'java' -} - -group 'org.example' -version '1.0-SNAPSHOT' - -repositories { - mavenCentral() -} - -dependencies { - // https://mvnrepository.com/artifact/junit/junit - testImplementation group: 'junit', name: 'junit', version: '4.13.2' -} - -test { - useJUnit() -} - diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..cfd30dd --- /dev/null +++ b/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + org.example + SberJavaHomeWork2 + 1.0-SNAPSHOT + + 17 + 17 + + + + junit + junit + 4.13.2 + test + + + + + \ No newline at end of file diff --git a/src/main/java/ru/sber/mironov/Car.java b/src/main/java/ru/sber/mironov/Car.java new file mode 100644 index 0000000..1e7e0f0 --- /dev/null +++ b/src/main/java/ru/sber/mironov/Car.java @@ -0,0 +1,44 @@ +package ru.sber.mironov; + +public class Car { + private final long carId; + private final String brand; + private final String modelName; + private final int maxVelocity; + private final int power; + private final int ownerId; + + public Car(long carId, String brand, String modelName, int maxVelocity, int power, int ownerId) { + this.carId = carId; + this.brand = brand; + this.modelName = modelName; + this.maxVelocity = maxVelocity; + this.power = power; + this.ownerId = ownerId; + } + + + public String getBrand() { + return brand; + } + + public String getModelName() { + return modelName; + } + + public int getMaxVelocity() { + return maxVelocity; + } + + public int getOwnerId() { + return ownerId; + } + + public long getCarId() { + return carId; + } + + public int getPower() { + return power; + } +} diff --git a/src/main/java/ru/sber/mironov/ClientType/ClientType.java b/src/main/java/ru/sber/mironov/ClientType/ClientType.java deleted file mode 100644 index b07d2a4..0000000 --- a/src/main/java/ru/sber/mironov/ClientType/ClientType.java +++ /dev/null @@ -1,60 +0,0 @@ -package ru.sber.mironov.ClientType; - - -import ru.sber.mironov.Clients.Client; -import ru.sber.mironov.Clients.HoldingClient; -import ru.sber.mironov.Clients.IndividualClient; -import ru.sber.mironov.Clients.LegalEntityClient; -import ru.sber.mironov.MyJsonLibrary.MyJsonObject; - - -import java.util.List; - -public enum ClientType { - INDIVIDUAL("INDIVIDUAL") { - private List parseClient(MyJsonObject client) { - String name = client.getString("name"); - String inn = client.getString("inn"); - return List.of(name, inn); - } - - public Client createClient(MyJsonObject client) { - return new IndividualClient(this.parseClient(client)); - } - }, - LEGAL_ENTITY("LEGAL_ENTITY") { - private List parseClient(MyJsonObject client) { - String name = client.getString("name"); - String inn = client.getString("inn"); - return List.of(name, inn); - } - - public Client createClient(MyJsonObject client) { - return new LegalEntityClient(this.parseClient(client)); - } - }, - HOLDING("HOLDING") { - List parseClient(MyJsonObject client) { - String name = client.getString("name"); - String inn = client.getString("inn"); - return List.of(name, inn); - } - - public Client createClient(MyJsonObject client) { - return new HoldingClient(parseClient(client)); - } - }; - public final String type; - - /*List parseClient(JSONObject client) { - String name = client.getString("name"); - String inn = client.getString("inn"); - return List.of(name, inn); - }*/ - ClientType(String description) { - this.type = description; - } - - public abstract Client createClient(MyJsonObject client); -} - diff --git a/src/main/java/ru/sber/mironov/Clients/Client.java b/src/main/java/ru/sber/mironov/Clients/Client.java deleted file mode 100644 index bef72d4..0000000 --- a/src/main/java/ru/sber/mironov/Clients/Client.java +++ /dev/null @@ -1,18 +0,0 @@ -package ru.sber.mironov.Clients; - -import ru.sber.mironov.ClientType.ClientType; - -public class Client { - public final String name; - public final String inn; - public final ClientType type; - - public Client(String name, String inn, ClientType type) { - this.name = name; - this.inn = inn; - this.type = type; - } - public String toString() { - return name.toString() + " " + inn.toString() + " " + type.type; - } -} diff --git a/src/main/java/ru/sber/mironov/Clients/HoldingClient.java b/src/main/java/ru/sber/mironov/Clients/HoldingClient.java deleted file mode 100644 index a8f8e49..0000000 --- a/src/main/java/ru/sber/mironov/Clients/HoldingClient.java +++ /dev/null @@ -1,17 +0,0 @@ -package ru.sber.mironov.Clients; - - -import ru.sber.mironov.ClientType.ClientType; - -import java.util.List; - -public class HoldingClient extends Client { - public HoldingClient(String name, String inn, ClientType type) { - super(name, inn, type); - } - - public HoldingClient(List client) { - super((String) client.get(0), (String) client.get(1), ClientType.HOLDING); - } - -} diff --git a/src/main/java/ru/sber/mironov/Clients/IndividualClient.java b/src/main/java/ru/sber/mironov/Clients/IndividualClient.java deleted file mode 100644 index 96f686e..0000000 --- a/src/main/java/ru/sber/mironov/Clients/IndividualClient.java +++ /dev/null @@ -1,23 +0,0 @@ -package ru.sber.mironov.Clients; - - -import ru.sber.mironov.ClientType.ClientType; - - -import java.util.List; - -public class IndividualClient extends Client { - - public IndividualClient(String name, String inn, ClientType type) { - super(name, inn, type); - } - - public IndividualClient(String description) { - super("Gera", "1688", ClientType.INDIVIDUAL); - } - - public IndividualClient(List client) { - super((String)client.get(0), (String)client.get(1), ClientType.INDIVIDUAL); - } - -} diff --git a/src/main/java/ru/sber/mironov/Clients/LegalEntityClient.java b/src/main/java/ru/sber/mironov/Clients/LegalEntityClient.java deleted file mode 100644 index 7f7a3f2..0000000 --- a/src/main/java/ru/sber/mironov/Clients/LegalEntityClient.java +++ /dev/null @@ -1,19 +0,0 @@ -package ru.sber.mironov.Clients; - - - -import ru.sber.mironov.ClientType.ClientType; - -import java.util.List; - -public class LegalEntityClient extends Client { - - - public LegalEntityClient(String name, String inn, ClientType type) { - super(name, inn, type); - } - - public LegalEntityClient(List client) { - super((String) client.get(0), (String) client.get(1), ClientType.LEGAL_ENTITY); - } -} diff --git a/src/main/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java b/src/main/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java deleted file mode 100644 index de57d46..0000000 --- a/src/main/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParser.java +++ /dev/null @@ -1,40 +0,0 @@ -package ru.sber.mironov.ClientsJsonParser; - - -import ru.sber.mironov.ClientType.ClientType; -import ru.sber.mironov.Clients.Client; -import ru.sber.mironov.MyJsonLibrary.MyJsonArray; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; - -public class ClientsJsonParser { - public static ArrayList parseClientsJson(String filePath) throws IOException { - StringBuilder fileData = new StringBuilder(); - BufferedReader reader = new BufferedReader( - new FileReader(filePath)); - char[] buf = new char[1024]; - int numRead = 0; - while ((numRead = reader.read(buf)) != -1) { - String readData = String.valueOf(buf, 0, numRead); - fileData.append(readData); - } - reader.close(); - String content = fileData.toString(); - MyJsonArray clients = new MyJsonArray(content); - //System.out.println(clients); - ArrayList people = new ArrayList<>(); - for (var o : clients) { - //System.out.println(o); - //System.out.println(o.toString()); - //JSONObject x = new JSONObject(o); - //System.out.println(((JSONObject) o).getString("ClientType")); - ClientType ct = ClientType.valueOf(o.getString("ClientType")); - //System.out.println(ct.type); - people.add(ct.createClient(o)); - } - return people; - } -} diff --git a/src/main/java/ru/sber/mironov/Garage.java b/src/main/java/ru/sber/mironov/Garage.java new file mode 100644 index 0000000..e7ddba5 --- /dev/null +++ b/src/main/java/ru/sber/mironov/Garage.java @@ -0,0 +1,128 @@ +package ru.sber.mironov; + +import java.util.*; + +import static java.util.stream.Collectors.toList; + +public interface Garage { + HashMap> mapOwnerToCars = new HashMap<>(); + HashMap mapCarToOwner = new HashMap<>(); + HashMap> mapBrandToCar = new HashMap<>(); + HashMap cars = new HashMap<>(); + HashMap owners = new HashMap<>(); + + default Collection allCarsUniqueOwners() { + return mapOwnerToCars.keySet().stream() + .filter(o -> mapOwnerToCars.get(o).size() == 1) + .distinct() + .collect(toList()); + } + + /** + * Complexity should be less than O(n) + */ + default Collection topThreeCarsByMaxVelocity() { + ArrayList sorted = new ArrayList<>(); + for (Car car : cars.values()) { + sorted.add(car); + sorted.sort(Comparator.comparingInt(Car::getMaxVelocity)); + if (sorted.size() > 3) { + sorted.remove(0); + } + } + return sorted; + } + + /** + * Complexity should be O(1) + */ + default Collection allCarsOfBrand(String brand) { + return mapBrandToCar.get(brand); + } + + /** + * Complexity should be less than O(n) + */ + default Collection carsWithPowerMoreThan(int power) { + return mapOwnerToCars.values().stream() + .flatMap(Collection::stream) + .filter(car -> car.getPower() >= power) + .distinct() + .collect(toList()); + + } + + /** + * Complexity should be O(1) + */ + default Collection allCarsOfOwner(Owner owner) { + return mapOwnerToCars.get(owner); + } + + /** + * @return mean value of owner age that has cars with given brand + */ + default int meanOwnersAgeOfCarBrand(String brand) { + return (int) mapBrandToCar.get(brand).stream() + .map(mapCarToOwner::get) + .mapToInt(Owner::getAge) + .average().getAsDouble(); + } + + /** + * @return mean value of cars for all owners + */ + default int meanCarNumberForEachOwner() { + return (int) mapOwnerToCars.keySet().stream() + .mapToInt(owner -> mapOwnerToCars.get(owner).size()) + .average().getAsDouble(); + } + + /** + * Complexity should be less than O(n) + * + * @return removed car + */ + default Car removeCar(int carId) { + Car deleteCar = cars.get((long) carId); + Owner deleteOwner = owners.get((long) deleteCar.getOwnerId()); + + mapOwnerToCars.get(deleteOwner).remove(deleteCar); + if (mapOwnerToCars.get(deleteOwner).isEmpty()) { + mapOwnerToCars.remove(deleteOwner); + owners.remove(deleteOwner.getOwnerId()); + } + + mapBrandToCar.get(deleteCar.getBrand()).remove(deleteCar); + if (mapBrandToCar.get(deleteCar.getBrand()).isEmpty()) { + mapBrandToCar.remove(deleteCar.getBrand()); + } + + mapCarToOwner.remove(deleteCar); + + + cars.remove((long)carId); + return deleteCar; + } + + /** + * Complexity should be less than O(n) + */ + default void addCar(Car car, Owner owner) { + + put(mapOwnerToCars, owner, car); + put(mapBrandToCar, car.getBrand(), car); + + mapCarToOwner.put(car, owner); + cars.put(car.getCarId(), car); + owners.put(owner.getOwnerId(), owner); + } + + private void put(HashMap> collectionHashMap, K key, V value) { + if (collectionHashMap.containsKey(key)) { + collectionHashMap.get(key).add(value); + } else { + collectionHashMap.put(key, new ArrayList<>(Collections.singletonList(value))); + } + } +} diff --git a/src/main/java/ru/sber/mironov/Main.java b/src/main/java/ru/sber/mironov/Main.java index 36b4dda..ee9e587 100644 --- a/src/main/java/ru/sber/mironov/Main.java +++ b/src/main/java/ru/sber/mironov/Main.java @@ -1,80 +1,7 @@ package ru.sber.mironov; -import ru.sber.mironov.ClientsJsonParser.ClientsJsonParser; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - public class Main { - public static void main(String[] args) throws IOException { - String[] a = {"1", "2", "3"}; - ArrayList q = new ArrayList<>(List.of(a)); - - - //ArrayList clients = (ArrayList) List.of(new IndividualClient("Alex", "1688", ClientType.INDIVIDUAL), - // new LegalEntityClient("Vadim", "1432", ClientType.LEGAL_ENTITY), - // new HoldingClient("Gera", "2001", ClientType.HOLDING)); - /*JSONObject first = new JSONObject(); - JSONObject second = new JSONObject(); - JSONObject third = new JSONObject(); - - first.put("name", "Alex"); - first.put("inn", "1688"); - first.put("ClientType", ClientType.INDIVIDUAL); - - second.put("name", "Vadim"); - second.put("inn", "1432"); - second.put("ClientType", ClientType.LEGAL_ENTITY); - - third.put("name", "Gera"); - third.put("inn", "2001"); - third.put("ClientType", ClientType.HOLDING); + public static void main(String[] args) { - JSONArray arr = new JSONArray(); - arr.put(first); - arr.put(second); - arr.put(third);*/ - //Files.writeString(Paths.get("src/main/resources/Clients.json"), arr.toString()); - - /*String filePath = args[0]; - StringBuilder fileData = new StringBuilder(); - BufferedReader reader = new BufferedReader( - new FileReader(filePath)); - char[] buf = new char[1024]; - int numRead = 0; - while ((numRead = reader.read(buf)) != -1) { - String readData = String.valueOf(buf, 0, numRead); - fileData.append(readData); - } - reader.close(); - String content = fileData.toString(); - System.out.println(content); - - Pattern pattern = Pattern.compile("\\{.+?}"); - Matcher matcher = pattern.matcher(content); - ArrayList c = new ArrayList<>(); - while (matcher.find()) { - c.add(content.substring(matcher.start(), matcher.end())); - System.out.println(content.substring(matcher.start(), matcher.end())); - } - - Pattern pattern1 = Pattern.compile("\".+?\":\".+?\""); - for (var s : c) { - Matcher matcher1 = pattern1.matcher(s); - while (matcher1.find()) { - System.out.println(s.substring(matcher1.start(), matcher1.end())); - String[] str = s.substring(matcher1.start(), matcher1.end()).split(":"); - for (int i = 0; i < 2; ++i) { - str[i] = str[i].substring(1, str[i].length() - 1); - } - System.out.println(Arrays.toString(str)); - } - }*/ - - var people = ClientsJsonParser.parseClientsJson((args[0])); - System.out.println(people); } } - - diff --git a/src/main/java/ru/sber/mironov/MyGarage.java b/src/main/java/ru/sber/mironov/MyGarage.java new file mode 100644 index 0000000..17659e7 --- /dev/null +++ b/src/main/java/ru/sber/mironov/MyGarage.java @@ -0,0 +1,4 @@ +package ru.sber.mironov; + +public class MyGarage implements Garage{ +} diff --git a/src/main/java/ru/sber/mironov/MyJsonLibrary/MyJsonArray.java b/src/main/java/ru/sber/mironov/MyJsonLibrary/MyJsonArray.java deleted file mode 100644 index c997bb1..0000000 --- a/src/main/java/ru/sber/mironov/MyJsonLibrary/MyJsonArray.java +++ /dev/null @@ -1,32 +0,0 @@ -package ru.sber.mironov.MyJsonLibrary; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.function.Consumer; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class MyJsonArray implements Iterable { - ArrayList jsonObjects; - - public MyJsonArray(String content) { - ArrayList clients = new ArrayList<>(); - Pattern pattern = Pattern.compile("\\{.+?}"); - Matcher matcher = pattern.matcher(content); - - while (matcher.find()) { - clients.add(new MyJsonObject(content.substring(matcher.start(), matcher.end()))); - } - jsonObjects = clients; - } - - @Override - public Iterator iterator() { - return jsonObjects.iterator(); - } - - @Override - public void forEach(Consumer action) { - jsonObjects.forEach(action); - } -} diff --git a/src/main/java/ru/sber/mironov/MyJsonLibrary/MyJsonObject.java b/src/main/java/ru/sber/mironov/MyJsonLibrary/MyJsonObject.java deleted file mode 100644 index e608d2f..0000000 --- a/src/main/java/ru/sber/mironov/MyJsonLibrary/MyJsonObject.java +++ /dev/null @@ -1,33 +0,0 @@ -package ru.sber.mironov.MyJsonLibrary; - -import java.util.HashMap; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class MyJsonObject { - private final Map map; - - public MyJsonObject(Map map) { - this.map = map; - } - - public MyJsonObject(String str) { - Map newMap = new HashMap<>(); - Pattern pattern = Pattern.compile("\".+?\":\".+?\""); - Matcher matcher = pattern.matcher(str); - while (matcher.find()) { - String[] s = str.substring(matcher.start(), matcher.end()).split(":"); - for(int i = 0; i < 2; ++i) { - s[i] = s[i].substring(1, s[i].length()-1); - } - - newMap.put(s[0], s[1]); - } - map = newMap; - } - - public String getString(String key) { - return map.get(key); - } -} diff --git a/src/main/java/ru/sber/mironov/Owner.java b/src/main/java/ru/sber/mironov/Owner.java new file mode 100644 index 0000000..021aefc --- /dev/null +++ b/src/main/java/ru/sber/mironov/Owner.java @@ -0,0 +1,31 @@ +package ru.sber.mironov; + +public class Owner { + private final long ownerId; + private final String name; + private final String lastName; + private final int age; + + public Owner(long ownerId, String name, String lastName, int age) { + this.ownerId = ownerId; + this.name = name; + this.lastName = lastName; + this.age = age; + } + + public String getName() { + return name; + } + + public String getLastName() { + return lastName; + } + + public long getOwnerId() { + return ownerId; + } + + public int getAge() { + return age; + } +} diff --git a/src/main/resources/Clients.json b/src/main/resources/Clients.json deleted file mode 100644 index 2d068ee..0000000 --- a/src/main/resources/Clients.json +++ /dev/null @@ -1 +0,0 @@ -[{"ClientType":"INDIVIDUAL","name":"Alex","inn":"1688"},{"ClientType":"LEGAL_ENTITY","name":"Vadim","inn":"1432"},{"ClientType":"HOLDING","name":"Gera","inn":"2001"}] \ No newline at end of file diff --git a/src/test/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java b/src/test/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java deleted file mode 100644 index 379247f..0000000 --- a/src/test/java/ru/sber/mironov/ClientsJsonParser/ClientsJsonParserTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package ru.sber.mironov.ClientsJsonParser; - -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import ru.sber.mironov.ClientType.ClientType; -import ru.sber.mironov.Clients.Client; - -import java.io.IOException; -import java.util.ArrayList; - - -public class ClientsJsonParserTest { - private ArrayList people; - - @Before - public void setUpPeople() throws IOException { - String fileName = "src/test/resources/Clients.json"; - - people = ClientsJsonParser.parseClientsJson(fileName); - } - - @After - public void tearDown() { - people.clear(); - } - - @Test - public void parseClientsJson() { - Assert.assertEquals(this.people.get(0).name, "Alex"); - Assert.assertEquals(this.people.get(0).inn, "1688"); - Assert.assertEquals(this.people.get(0).type, ClientType.INDIVIDUAL); - } -} \ No newline at end of file diff --git a/src/test/java/ru/sber/mironov/GarageTest/GarageTest.java b/src/test/java/ru/sber/mironov/GarageTest/GarageTest.java new file mode 100644 index 0000000..c622271 --- /dev/null +++ b/src/test/java/ru/sber/mironov/GarageTest/GarageTest.java @@ -0,0 +1,191 @@ +package ru.sber.mironov.GarageTest; + +import org.junit.Test; +import org.junit.Before; +import org.junit.After; +import org.junit.Assert; +import ru.sber.mironov.Car; +import ru.sber.mironov.Garage; +import ru.sber.mironov.Owner; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Stream; + +import static java.util.stream.Collectors.toList; + +class Pair { + final Owner owner; + final Car car; + + Pair(Owner owner, Car car) { + this.owner = owner; + this.car = car; + } +} + +public class GarageTest implements Garage { + private ArrayList owners; + private ArrayList cars; + + private ArrayList pairs; + + + @Before + public void setUpOwnersAndCars() { + Owner o0 = new Owner(6789, "Anton", "qu", 102); + Owner o1 = new Owner(1234, "Lexa", "Pak", 37); + Owner o2 = new Owner(4321, "Petya", "Lisicin", 42); + Owner o3 = new Owner(1894, "Vadim", "Kamushkin", 24); + Owner o4 = new Owner(1290, "Olga", "Miroshina", 37); + Owner o5 = new Owner(4560, "Svetlana", "Gorkova", 40); + Owner o6 = new Owner(4567, "Polina", "kravec", 18); + + Car c0 = new Car(111, "Renault", "duster", 170, 80, 6789); + Car c1 = new Car(222, "Lada", "kalina", 40, 30, 6789); + Car c2 = new Car(333, "shevrolet", "niva", 10, 5, 6789); + + Car c3 = new Car(123, "Lada", "priora", 100, 20, 1234); + Car c4 = new Car(456, "Nissan", "suny", 221, 30, 1234); + + Car c5 = new Car(789, "skoda", "rapid", 220, 10, 4321); + Car c6 = new Car(901, "mazda", "bongo", 100, 71, 4321); + + Car c7 = new Car(112, "Opel", "astra", 190, 50, 1894); + + Car c8 = new Car(124, "ford", "focus", 170, 50, 1290); + + Car c9 = new Car(378, "audi", "s5", 250, 100, 4560); + + Car c10 = new Car(192, "Nissan", "Tiida", 180, 60, 4567); + + pairs = new ArrayList<>(); + pairs.add(new Pair(o0, c0)); + pairs.add(new Pair(o0, c1)); + pairs.add(new Pair(o0, c2)); + pairs.add(new Pair(o1, c3)); + pairs.add(new Pair(o1, c4)); + pairs.add(new Pair(o2, c5)); + pairs.add(new Pair(o2, c6)); + pairs.add(new Pair(o3, c7)); + pairs.add(new Pair(o4, c8)); + pairs.add(new Pair(o5, c9)); + pairs.add(new Pair(o6, c10)); + + owners = new ArrayList<>(Arrays.asList(o0, o1, o2, o3, o4, o5, o6)); + cars = new ArrayList<>(Arrays.asList(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10)); + + + } + + @Test + public void addCarTest() { + this.addCar(cars.get(0), owners.get(0)); + this.addCar(cars.get(1), owners.get(0)); + this.addCar(cars.get(2), owners.get(0)); + Assert.assertEquals(this.removeCar((int) cars.get(0).getCarId()), cars.get(0)); + Assert.assertEquals(this.removeCar((int) cars.get(1).getCarId()), cars.get(1)); + Assert.assertEquals(this.removeCar((int) cars.get(2).getCarId()), cars.get(2)); + } + + + @After + public void tearDown() { + owners.clear(); + cars.clear(); + pairs.clear(); + } + + @Test + public void testTestAllCarsUniqueOwners() { + for (Pair p : pairs) { + addCar(p.car, p.owner); + } + Assert.assertEquals(allCarsUniqueOwners().stream() + .sorted(Comparator.comparingLong(Owner::getOwnerId)) + .collect(toList()), + Stream.of(owners.get(3), owners.get(4), owners.get(5), owners.get(6)) + .sorted(Comparator.comparingLong(Owner::getOwnerId)) + .collect(toList())); + for (Pair p : pairs) { + Assert.assertEquals(removeCar((int) p.car.getCarId()), p.car); + } + } + + @Test + public void testTestTopThreeCarsByMaxVelocity() { + for (Pair p : pairs) { + addCar(p.car, p.owner); + } + Assert.assertEquals(topThreeCarsByMaxVelocity(), List.of(cars.get(5), cars.get(4), cars.get(9))); + for (Pair p : pairs) { + Assert.assertEquals(removeCar((int) p.car.getCarId()), p.car); + } + } + + @Test + public void testTestAllCarsOfBrand() { + for (Pair p : pairs) { + addCar(p.car, p.owner); + } + Assert.assertEquals(allCarsOfBrand("Lada").stream() + .sorted(Comparator.comparingLong(Car::getCarId)).collect(toList()), Stream.of(cars.get(1), cars.get(3)) + .sorted(Comparator.comparingLong(Car::getCarId)).collect(toList())); + for (Pair p : pairs) { + Assert.assertEquals(removeCar((int) p.car.getCarId()), p.car); + } + } + + @Test + public void testTestCarsWithPowerMoreThan() { + for (Pair p : pairs) { + addCar(p.car, p.owner); + } + Assert.assertEquals(carsWithPowerMoreThan(40).stream() + .sorted(Comparator.comparingLong(Car::getCarId)).collect(toList()), Stream.of(cars.get(0), cars.get(6), cars.get(7), + cars.get(8), cars.get(9), cars.get(10)) + .sorted(Comparator.comparingLong(Car::getCarId)).collect(toList())); + for (Pair p : pairs) { + Assert.assertEquals(removeCar((int) p.car.getCarId()), p.car); + } + } + + @Test + public void testTestAllCarsOfOwner() { + for (Pair p : pairs) { + addCar(p.car, p.owner); + } + Assert.assertEquals(allCarsOfOwner(owners.get(0)).stream() + .sorted(Comparator.comparingLong(Car::getCarId)).collect(toList()), Stream.of(cars.get(0), cars.get(1), cars.get(2)) + .sorted(Comparator.comparingLong(Car::getCarId)).collect(toList())); + for (Pair p : pairs) { + Assert.assertEquals(removeCar((int) p.car.getCarId()), p.car); + } + } + + @Test + public void testTestMeanOwnersAgeOfCarBrand() { + for (Pair p : pairs) { + addCar(p.car, p.owner); + } + Assert.assertEquals(meanOwnersAgeOfCarBrand("Nissan"), 27); + for (Pair p : pairs) { + Assert.assertEquals(removeCar((int) p.car.getCarId()), p.car); + } + } + + @Test + public void testTestMeanCarNumberForEachOwner() { + for (Pair p : pairs) { + addCar(p.car, p.owner); + } + Assert.assertEquals(meanCarNumberForEachOwner(), 1); + for (Pair p : pairs) { + Assert.assertEquals(removeCar((int) p.car.getCarId()), p.car); + } + } + + +} diff --git a/src/test/resources/Clients.json b/src/test/resources/Clients.json deleted file mode 100644 index 2d068ee..0000000 --- a/src/test/resources/Clients.json +++ /dev/null @@ -1 +0,0 @@ -[{"ClientType":"INDIVIDUAL","name":"Alex","inn":"1688"},{"ClientType":"LEGAL_ENTITY","name":"Vadim","inn":"1432"},{"ClientType":"HOLDING","name":"Gera","inn":"2001"}] \ No newline at end of file