summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/design/controller/userinput/menus/CourseSearch.java8
-rw-r--r--src/main/java/design/controller/userinput/menus/HolePlayMenu.java2
-rw-r--r--src/main/java/design/controller/userinput/menus/ManageClubs.java2
-rw-r--r--src/main/java/design/controller/userinput/menus/ManageCourses.java2
-rw-r--r--src/main/java/design/controller/userinput/menus/SearchMenu.java4
-rw-r--r--src/main/java/design/controller/userinput/menus/SelectUser.java2
-rw-r--r--src/main/java/design/controller/userinput/menus/UserSettings.java2
-rw-r--r--src/main/java/design/model/course_search/CurrentSearchQuery.java19
-rw-r--r--src/main/java/design/persistence/CSVMasterDatabase.java24
-rw-r--r--src/main/java/design/persistence/JSONPersonalDatabase.java13
-rw-r--r--src/main/java/design/persistence/MasterDatabase.java5
-rw-r--r--src/main/java/design/persistence/PersonalDatabase.java5
12 files changed, 52 insertions, 36 deletions
diff --git a/src/main/java/design/controller/userinput/menus/CourseSearch.java b/src/main/java/design/controller/userinput/menus/CourseSearch.java
index 9d67b51..b84247a 100644
--- a/src/main/java/design/controller/userinput/menus/CourseSearch.java
+++ b/src/main/java/design/controller/userinput/menus/CourseSearch.java
@@ -19,10 +19,14 @@ import java.util.Scanner;
* The actual SEARCH feature of course searching.
*/
public class CourseSearch extends Menu {
- private final CurrentSearchQuery query = CurrentSearchQuery.INSTANCE;
- private final PersonalDatabase personalDB = PersonalDatabase.INSTANCE;
+ private final CurrentSearchQuery query;
+ private final PersonalDatabase personalDB = PersonalDatabase.instance();
private final Golfer golfer = Session.getCurrentGolfer();
+ public CourseSearch(CurrentSearchQuery query) {
+ this.query = query;
+ }
+
@Override
public String getTitle() {
return "select course";
diff --git a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
index c824341..e0d1572 100644
--- a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
+++ b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
@@ -21,7 +21,7 @@ public class HolePlayMenu extends Menu {
public HolePlayMenu() {
this.round = createRound();
- this.ctx = new HolePlayContext(Session.getCurrentGolfer(), round, PersonalDatabase.INSTANCE);
+ this.ctx = new HolePlayContext(Session.getCurrentGolfer(), round, PersonalDatabase.instance());
}
@Override
diff --git a/src/main/java/design/controller/userinput/menus/ManageClubs.java b/src/main/java/design/controller/userinput/menus/ManageClubs.java
index 6290444..27b011c 100644
--- a/src/main/java/design/controller/userinput/menus/ManageClubs.java
+++ b/src/main/java/design/controller/userinput/menus/ManageClubs.java
@@ -14,7 +14,7 @@ import java.util.Scanner;
public class ManageClubs extends Menu {
private final Golfer golfer = Session.getCurrentGolfer();
- private final PersonalDatabase personalDB = PersonalDatabase.INSTANCE;
+ private final PersonalDatabase personalDB = PersonalDatabase.instance();
@Override
public String getTitle() {
diff --git a/src/main/java/design/controller/userinput/menus/ManageCourses.java b/src/main/java/design/controller/userinput/menus/ManageCourses.java
index 4306560..b592cd2 100644
--- a/src/main/java/design/controller/userinput/menus/ManageCourses.java
+++ b/src/main/java/design/controller/userinput/menus/ManageCourses.java
@@ -12,7 +12,7 @@ import java.util.List;
public class ManageCourses extends Menu {
private final Golfer golfer = Session.getCurrentGolfer();
- private final PersonalDatabase personalDB = PersonalDatabase.INSTANCE;
+ private final PersonalDatabase personalDB = PersonalDatabase.instance();
@Override
public String getTitle() {
diff --git a/src/main/java/design/controller/userinput/menus/SearchMenu.java b/src/main/java/design/controller/userinput/menus/SearchMenu.java
index 72b39ed..7933f24 100644
--- a/src/main/java/design/controller/userinput/menus/SearchMenu.java
+++ b/src/main/java/design/controller/userinput/menus/SearchMenu.java
@@ -10,7 +10,7 @@ import java.util.List;
* The main control panel for course searching.
*/
public class SearchMenu extends Menu {
- private final CurrentSearchQuery query = CurrentSearchQuery.INSTANCE;
+ private final CurrentSearchQuery query = new CurrentSearchQuery();
@Override
public String getTitle() {
@@ -22,7 +22,7 @@ public class SearchMenu extends Menu {
List<MenuOption> menuOptions = new java.util.ArrayList<>();
menuOptions.add(new MenuOption("return to main menu", () -> new MainMenu().present()));
- menuOptions.add(new MenuOption("search...", () -> new CourseSearch().present()));
+ menuOptions.add(new MenuOption("search...", () -> new CourseSearch(query).present()));
menuOptions.add(new MenuOption("sort by difficulty", () -> addFilter(new SortByDifficulty())));
menuOptions.add(new MenuOption("sort by hole count", () -> addFilter(new SortByHoles())));
diff --git a/src/main/java/design/controller/userinput/menus/SelectUser.java b/src/main/java/design/controller/userinput/menus/SelectUser.java
index e8b3874..4b7928c 100644
--- a/src/main/java/design/controller/userinput/menus/SelectUser.java
+++ b/src/main/java/design/controller/userinput/menus/SelectUser.java
@@ -13,7 +13,7 @@ import java.util.List;
import java.util.Scanner;
public class SelectUser extends Menu {
- private final PersonalDatabase personalDB = PersonalDatabase.INSTANCE;
+ private final PersonalDatabase personalDB = PersonalDatabase.instance();
private final Action doAfter;
private final Scanner scanner = new Scanner(System.in);
diff --git a/src/main/java/design/controller/userinput/menus/UserSettings.java b/src/main/java/design/controller/userinput/menus/UserSettings.java
index 04ec4d0..47b0a5b 100644
--- a/src/main/java/design/controller/userinput/menus/UserSettings.java
+++ b/src/main/java/design/controller/userinput/menus/UserSettings.java
@@ -15,7 +15,7 @@ import java.util.Scanner;
public class UserSettings extends Menu {
private final Golfer golfer = Session.getCurrentGolfer();
- private final PersonalDatabase personalDatabase = PersonalDatabase.INSTANCE;
+ private final PersonalDatabase personalDatabase = PersonalDatabase.instance();
private final Scanner scanner = new Scanner(System.in);
@Override
diff --git a/src/main/java/design/model/course_search/CurrentSearchQuery.java b/src/main/java/design/model/course_search/CurrentSearchQuery.java
index 999dfcb..b7f0686 100644
--- a/src/main/java/design/model/course_search/CurrentSearchQuery.java
+++ b/src/main/java/design/model/course_search/CurrentSearchQuery.java
@@ -10,12 +10,11 @@ import java.util.stream.Collectors;
* Represents the state of our current search.
*/
public class CurrentSearchQuery {
- public static final CurrentSearchQuery INSTANCE = new CurrentSearchQuery();
// initialize our search with the master db data
- MasterDatabase db = MasterDatabase.INSTANCE;
+ MasterDatabase db = MasterDatabase.instance();
private CourseList query = db.getCourseList();
- private final List<CourseSorter> filters = new ArrayList<CourseSorter>();
+ private final List<CourseSorter> filters = new ArrayList<>();
// reset the query
public void reset() {
@@ -34,22 +33,22 @@ public class CurrentSearchQuery {
// print out the filters we're currently using and the order
public String printFilters() {
- String filterResult = "";
+ StringBuilder filterResult = new StringBuilder();
// no filters? let the user know.
- if (filters.size() == 0) {
+ if (filters.isEmpty()) {
return "nothing";
}
for (CourseSorter f : filters) {
- filterResult += f.toString() + " --> ";
+ filterResult.append(f.toString()).append(" --> ");
}
// remove last arrow and add padding
- filterResult = filterResult.substring(0, filterResult.length() - 5);
- filterResult += "\n";
+ filterResult = new StringBuilder(filterResult.substring(0, filterResult.length() - 5));
+ filterResult.append("\n");
- return filterResult;
+ return filterResult.toString();
}
// get all the filters
@@ -128,7 +127,7 @@ public class CurrentSearchQuery {
// make a CourseList group, a sublist of a group, and filter it.
private ICourse makeGroup(List<ICourse> group, List<CourseSorter> filters, int level) {
// base case, group only has one course in it (already sorted)
- if (group.size() == 1) return group.get(0);
+ if (group.size() == 1) return group.getFirst();
// group has more than 1 course in it, it needs to be sorted more if possible.
CourseList subList = new CourseList();
diff --git a/src/main/java/design/persistence/CSVMasterDatabase.java b/src/main/java/design/persistence/CSVMasterDatabase.java
index adbf759..f98a08e 100644
--- a/src/main/java/design/persistence/CSVMasterDatabase.java
+++ b/src/main/java/design/persistence/CSVMasterDatabase.java
@@ -20,11 +20,20 @@ import design.model.course_search.*;
public class CSVMasterDatabase implements MasterDatabase {
+ private static CSVMasterDatabase INSTANCE;
+
+ public static synchronized CSVMasterDatabase instance() {
+ if (INSTANCE == null) {
+ INSTANCE = new CSVMasterDatabase("data/golf_courses_1000.csv");
+ }
+ return INSTANCE;
+ }
+
private final List<Course> cache;
private final CsvMapper mapper;
private final File file;
- public CSVMasterDatabase(String filename) {
+ private CSVMasterDatabase(String filename) {
this.cache = new ArrayList<>();
this.mapper = new CsvMapper();
this.file = new File(filename);
@@ -40,7 +49,7 @@ public class CSVMasterDatabase implements MasterDatabase {
}
}
- public void load() throws IOException {
+ private void load() throws IOException {
MappingIterator<Course> it = mapper
.readerFor(Course.class)
.with(CsvSchema.emptySchema().withHeader())
@@ -70,17 +79,6 @@ public class CSVMasterDatabase implements MasterDatabase {
return courses;
}
- public CourseList getCourses(String s) {
- CourseList courses = new CourseList();
- for (Course c : cache)
- {
- if(c.getName().toLowerCase().contains(s.toLowerCase()))
- courses.add(c);
- }
-
- return courses;
- }
-
private static class CourseDeserializer extends JsonDeserializer<Course> {
int curID = 0;
diff --git a/src/main/java/design/persistence/JSONPersonalDatabase.java b/src/main/java/design/persistence/JSONPersonalDatabase.java
index db613d9..70aa1ab 100644
--- a/src/main/java/design/persistence/JSONPersonalDatabase.java
+++ b/src/main/java/design/persistence/JSONPersonalDatabase.java
@@ -23,11 +23,20 @@ import java.util.Map;
public class JSONPersonalDatabase implements PersonalDatabase {
+ private static JSONPersonalDatabase INSTANCE;
+
+ public static JSONPersonalDatabase instance() {
+ if (INSTANCE == null) {
+ INSTANCE = new JSONPersonalDatabase("data/personaldb.json");
+ }
+ return INSTANCE;
+ }
+
private final Map<String, Golfer> cache;
private final ObjectMapper mapper;
private final File file;
- public JSONPersonalDatabase(String filename) {
+ private JSONPersonalDatabase(String filename) {
this.file = new File(filename);
this.cache = new HashMap<>();
this.mapper = new ObjectMapper();
@@ -101,7 +110,7 @@ public class JSONPersonalDatabase implements PersonalDatabase {
}
private static class CourseIdDeserializer extends JsonDeserializer<Course> {
- MasterDatabase masterDB = MasterDatabase.INSTANCE;
+ MasterDatabase masterDB = MasterDatabase.instance();
@Override
public Course deserialize(JsonParser p, DeserializationContext context) throws IOException {
diff --git a/src/main/java/design/persistence/MasterDatabase.java b/src/main/java/design/persistence/MasterDatabase.java
index 3436ee0..59e3ebd 100644
--- a/src/main/java/design/persistence/MasterDatabase.java
+++ b/src/main/java/design/persistence/MasterDatabase.java
@@ -4,7 +4,10 @@ import design.model.Course;
import design.model.course_search.CourseList;
public interface MasterDatabase {
- MasterDatabase INSTANCE = new CSVMasterDatabase("data/golf_courses_1000.csv");
+
+ static MasterDatabase instance() {
+ return CSVMasterDatabase.instance();
+ }
Course[] getCourses();
CourseList getCourseList(); // unique from courses as this is a composite of ICourses.
diff --git a/src/main/java/design/persistence/PersonalDatabase.java b/src/main/java/design/persistence/PersonalDatabase.java
index 428694b..adb865d 100644
--- a/src/main/java/design/persistence/PersonalDatabase.java
+++ b/src/main/java/design/persistence/PersonalDatabase.java
@@ -4,7 +4,10 @@ import design.model.Golfer;
import java.io.IOException;
public interface PersonalDatabase {
- PersonalDatabase INSTANCE = new JSONPersonalDatabase("data/personaldb.json");
+
+ static PersonalDatabase instance() {
+ return JSONPersonalDatabase.instance();
+ }
Golfer[] getGolfers();