- Refactoring

- Reformatting
- Improved unit
This commit is contained in:
Administrator 2021-07-05 14:02:11 +02:00
parent 7aeee2e593
commit 07dbc7d494
7 changed files with 89 additions and 81 deletions

View File

@ -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<Visit> getContactPersons(int id) {
List<Visit> places_where_id_was_indoor;
places_where_id_was_indoor = visits.stream()
List<Visit> filtered_visits;
filtered_visits = visits.stream()
.filter(visit -> visit.getPlace().isIndoor())
.filter(visit -> visit.getPerson().getId() == id)
.toList();
List<Visit> 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<Visit> 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<Visit> 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<Visit> place_date_visits = visits.stream()
List<Visit> filtered_visits = visits.stream()
.filter(visit -> visit.getPlace().getId() == id)
.filter(visit -> visit.isInTimePeriod(finalD))
.toList();
List<Visit> all = new ArrayList<>();
for (Visit visit : place_date_visits) {
List<Visit> 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();
}
}
}

View File

@ -23,6 +23,7 @@ public class Person {
/**
* Constructor
*
* @param id ID of person
* @param name Name of person
*/

View File

@ -9,26 +9,23 @@ 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 indoor is place indoor

View File

@ -11,32 +11,27 @@ 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 person person who visits
@ -109,7 +104,6 @@ public class Visit {
/**
* @param start Start 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) {

View File

@ -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;
@ -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;
}

View File

@ -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 {
/**

View File

@ -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\""));
}
}