From 07dbc7d494212d0db05082de64578bfc2421b4cc Mon Sep 17 00:00:00 2001 From: H4CK3R-01 Date: Mon, 5 Jul 2021 14:02:11 +0200 Subject: [PATCH] - Refactoring - Reformatting - Improved unit --- src/de/dhbw/contactdb/Main.java | 101 ++++++++++-------- src/de/dhbw/contactdb/Person.java | 3 +- src/de/dhbw/contactdb/Place.java | 17 ++- src/de/dhbw/contactdb/Visit.java | 25 ++--- src/de/dhbw/contactdb/utils/Parser.java | 7 +- .../dhbw/contactdb/utils/db_new_entity.java | 2 +- src/de/dhbw/unit/ProjectTest.java | 15 ++- 7 files changed, 89 insertions(+), 81 deletions(-) diff --git a/src/de/dhbw/contactdb/Main.java b/src/de/dhbw/contactdb/Main.java index 481c998..bb9450b 100644 --- a/src/de/dhbw/contactdb/Main.java +++ b/src/de/dhbw/contactdb/Main.java @@ -46,6 +46,7 @@ public class Main { /** * Main function + * Parse commandline parameters * * @param args String that contains program arguments */ @@ -53,28 +54,7 @@ public class Main { Parser.parse("/de/dhbw/contactdb/db/contacts2021.db"); if (args.length == 1) { - if (args[0].contains("--personensuche")) { - System.out.println(searchForPerson(getSearchString(args[0]))); - } else if (args[0].contains("--ortssuche")) { - System.out.println(searchForPlace(getSearchString(args[0]))); - } else if (args[0].contains("--kontaktpersonen")) { - int id = Integer.parseInt(getSearchString(args[0])); - - System.out.println(getContactPersons(id).stream() - .filter(visit -> visit.getPerson().getId() != id) - .map(visit -> visit.getPerson().getName()) - .sorted() - .distinct() - .collect(Collectors.joining(", "))); - } else if (args[0].contains("--besucher")) { - System.out.println(getVisitors(args[0]).stream() - .map(visit -> visit.getPerson().getName()) - .sorted() - .distinct() - .collect(Collectors.joining(", "))); - } else { - argument_error(); - } + parseArguments(args[0]); } else { argument_error(); } @@ -87,14 +67,14 @@ public class Main { * @author florian kaiser */ private static void argument_error() { - System.out.println("Invalid parameter! \nUsage [Option]=\"[Value]\"\n--personensuche\n--ortssuche\n--kontaktpersonen\n--besucher"); + System.err.println("Invalid parameter! \nUsage [Option]=\"[Value]\"\n--personensuche\n--ortssuche\n--kontaktpersonen\n--besucher"); } /** * Searches the HashMap places for a specific string - * @param search String that contains search value * + * @param search String that contains search value * @author florian kaiser */ public static String searchForPlace(String search) { @@ -110,8 +90,8 @@ public class Main { /** * Searches the HashMap persons for a specific string - * @param search String that contains search value * + * @param search String that contains search value * @author florian kaiser */ public static String searchForPerson(String search) { @@ -131,26 +111,25 @@ public class Main { * * @param id Contains the id of a person * @return List that contains visits - * * @author florian kaiser */ public static List getContactPersons(int id) { - List places_where_id_was_indoor; - places_where_id_was_indoor = visits.stream() + List filtered_visits; + filtered_visits = visits.stream() .filter(visit -> visit.getPlace().isIndoor()) .filter(visit -> visit.getPerson().getId() == id) .toList(); - List contacts_of_id = new ArrayList<>(); - for (Visit filtered_b : places_where_id_was_indoor) { - for (Visit b : visits) { - if (b.isOverlapping(filtered_b.getStart(), filtered_b.getEnd()) && filtered_b.getPlace().getId() == b.getPlace().getId()) { - contacts_of_id.add(b); + List contacts = new ArrayList<>(); + for (Visit visit_1 : filtered_visits) { + for (Visit visit_2 : visits) { + if (visit_2.isOverlapping(visit_1.getStart(), visit_1.getEnd()) && visit_1.getPlace().getId() == visit_2.getPlace().getId()) { + contacts.add(visit_2); } } } - return contacts_of_id; + return contacts; } @@ -160,20 +139,19 @@ public class Main { * * @param s contains program argument (id of place and date string, separated by comma) * @return List that contains visits - * * @author florian kaiser */ public static List getVisitors(String s) { - int id = Integer.parseInt(s.split("=")[1].split(",")[0].replaceAll("\"", "")); + int id = Integer.parseInt(s.split(",")[0].replaceAll("\"", "")); LocalDateTime d; try { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"); - d = LocalDateTime.parse(s.split("=")[1].split(",")[1].replaceAll("\"", ""), formatter); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd't'HH:mm:ss"); + d = LocalDateTime.parse(s.split(",")[1].replaceAll("\"", ""), formatter); } catch (DateTimeParseException e1) { try { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm"); - d = LocalDateTime.parse(s.split("=")[1].split(",")[1].replaceAll("\"", ""), formatter); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd't'HH:mm"); + d = LocalDateTime.parse(s.split(",")[1].replaceAll("\"", ""), formatter); } catch (DateTimeParseException e2) { argument_error(); System.exit(-2); @@ -182,21 +160,21 @@ public class Main { } LocalDateTime finalD = d; - List place_date_visits = visits.stream() + List filtered_visits = visits.stream() .filter(visit -> visit.getPlace().getId() == id) .filter(visit -> visit.isInTimePeriod(finalD)) .toList(); - List all = new ArrayList<>(); - for (Visit visit : place_date_visits) { + List visitors = new ArrayList<>(); + for (Visit visit : filtered_visits) { if (visit.getPlace().isIndoor()) { - all.addAll(getContactPersons(visit.getPerson().getId())); + visitors.addAll(getContactPersons(visit.getPerson().getId())); } else { - all.add(visit); + visitors.add(visit); } } - return all; + return visitors; } @@ -222,4 +200,35 @@ public class Main { return s; } + + + /** + * Parse commandline arguments and run specific functions after + * + * @param args Commandline arguments + */ + public static void parseArguments(String args) { + if (args.contains("--personensuche")) { + System.out.println(searchForPerson(getSearchString(args))); + } else if (args.contains("--ortssuche")) { + System.out.println(searchForPlace(getSearchString(args))); + } else if (args.contains("--kontaktpersonen")) { + int id = Integer.parseInt(getSearchString(args)); + + System.out.println(getContactPersons(id).stream() + .filter(visit -> visit.getPerson().getId() != id) + .map(visit -> visit.getPerson().getName()) + .sorted() + .distinct() + .collect(Collectors.joining(", "))); + } else if (args.contains("--besucher")) { + System.out.println(getVisitors(getSearchString(args)).stream() + .map(visit -> visit.getPerson().getName()) + .sorted() + .distinct() + .collect(Collectors.joining(", "))); + } else { + argument_error(); + } + } } \ No newline at end of file diff --git a/src/de/dhbw/contactdb/Person.java b/src/de/dhbw/contactdb/Person.java index 6087af6..0f38dd8 100644 --- a/src/de/dhbw/contactdb/Person.java +++ b/src/de/dhbw/contactdb/Person.java @@ -23,7 +23,8 @@ public class Person { /** * Constructor - * @param id ID of person + * + * @param id ID of person * @param name Name of person */ public Person(int id, String name) { diff --git a/src/de/dhbw/contactdb/Place.java b/src/de/dhbw/contactdb/Place.java index d1f29c0..444791e 100644 --- a/src/de/dhbw/contactdb/Place.java +++ b/src/de/dhbw/contactdb/Place.java @@ -9,28 +9,25 @@ package de.dhbw.contactdb; * @since 21.06.2021 */ public class Place { + /** + * is place indoor + */ + private final boolean indoor; /** * ID of place */ private int id; - - /** * name of place */ private String name; - /** - * is place indoor - */ - private final boolean indoor; - - /** * Constructor - * @param id ID of place - * @param name Name of place + * + * @param id ID of place + * @param name Name of place * @param indoor is place indoor */ public Place(int id, String name, boolean indoor) { diff --git a/src/de/dhbw/contactdb/Visit.java b/src/de/dhbw/contactdb/Visit.java index 2694ecf..c1e5afa 100644 --- a/src/de/dhbw/contactdb/Visit.java +++ b/src/de/dhbw/contactdb/Visit.java @@ -11,36 +11,31 @@ import java.time.LocalDateTime; * @since 21.06.2021 */ public class Visit { + /** + * place where person is + */ + private final Place place; /** * start date of visit */ private LocalDateTime start; - - /** * end date of visit */ private LocalDateTime end; - - /** * person who visits */ private Person person; - /** - * place where person is - */ - private final Place place; - - /** * Constructor - * @param start start date of visit - * @param end end date of visit + * + * @param start start date of visit + * @param end end date of visit * @param person person who visits - * @param place place where person is + * @param place place where person is */ public Visit(LocalDateTime start, LocalDateTime end, Person person, Place place) { this.start = start; @@ -108,8 +103,7 @@ public class Visit { /** * @param start Start of timespan - * @param end End of timespan - * + * @param end End of timespan * @return boolean if timespan between start and end is overlapping timespan between this visits start and end */ public boolean isOverlapping(LocalDateTime start, LocalDateTime end) { @@ -119,7 +113,6 @@ public class Visit { /** * @param inputTime time - * * @return boolean if time is between this visits start and end */ public boolean isInTimePeriod(LocalDateTime inputTime) { diff --git a/src/de/dhbw/contactdb/utils/Parser.java b/src/de/dhbw/contactdb/utils/Parser.java index c6684ea..2144f92 100644 --- a/src/de/dhbw/contactdb/utils/Parser.java +++ b/src/de/dhbw/contactdb/utils/Parser.java @@ -1,9 +1,9 @@ package de.dhbw.contactdb.utils; -import de.dhbw.contactdb.Place; -import de.dhbw.contactdb.Visit; import de.dhbw.contactdb.Main; import de.dhbw.contactdb.Person; +import de.dhbw.contactdb.Place; +import de.dhbw.contactdb.Visit; import java.io.BufferedReader; import java.io.IOException; @@ -36,7 +36,7 @@ public class Parser { public static void parse(String filename) { InputStream db = Main.class.getResourceAsStream(filename); - if(db == null) { + if (db == null) { System.err.println("Cannot find database!"); System.exit(-3); } @@ -48,7 +48,6 @@ public class Parser { if (line.toLowerCase().contains("start_date")) new_entity = db_new_entity.VISIT; else if (line.toLowerCase().contains("location_id")) new_entity = db_new_entity.PLACE; else if (line.toLowerCase().contains("person_id")) new_entity = db_new_entity.PERSON; - continue; } diff --git a/src/de/dhbw/contactdb/utils/db_new_entity.java b/src/de/dhbw/contactdb/utils/db_new_entity.java index 4980965..6cccee5 100644 --- a/src/de/dhbw/contactdb/utils/db_new_entity.java +++ b/src/de/dhbw/contactdb/utils/db_new_entity.java @@ -6,8 +6,8 @@ package de.dhbw.contactdb.utils; * * @author florian kaiser * @version 1.0 - * @since 21.06.2021 * @see de.dhbw.contactdb.utils.Parser + * @since 21.06.2021 */ public enum db_new_entity { /** diff --git a/src/de/dhbw/unit/ProjectTest.java b/src/de/dhbw/unit/ProjectTest.java index a547c3b..1d21180 100644 --- a/src/de/dhbw/unit/ProjectTest.java +++ b/src/de/dhbw/unit/ProjectTest.java @@ -1,14 +1,14 @@ package de.dhbw.unit; import de.dhbw.contactdb.Main; -import de.dhbw.contactdb.ProjektTester; import de.dhbw.contactdb.utils.Parser; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import java.util.stream.Collectors; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; public class ProjectTest { @BeforeAll @@ -38,7 +38,7 @@ public class ProjectTest { @Test public void testVisitors() { - assertEquals("Anna, Charlotte, Emilia, Leonie, Marie, Mia", Main.getVisitors("=3,\"2021-05-15T11:00:00\"").stream() + assertEquals("Anna, Charlotte, Emilia, Leonie, Marie, Mia", Main.getVisitors("3,\"2021-05-15t11:00:00\"").stream() .map(visit -> visit.getPerson().getName()) .sorted() .distinct() @@ -49,4 +49,13 @@ public class ProjectTest { public void testImport() { assertNotNull(Main.class.getResourceAsStream("/de/dhbw/contactdb/db/contacts2021.db")); } + + @Test + public void testGetSearchString() { + assertEquals("3,2021-05-15t11:00:00", Main.getSearchString("=3,\"2021-05-15T11:00:00\"")); + assertEquals("3", Main.getSearchString("=3")); + assertEquals("3", Main.getSearchString("=\"3\"")); + assertEquals("ila", Main.getSearchString("=ila")); + assertEquals("ila", Main.getSearchString("=\"ila\"")); + } } \ No newline at end of file