diff options
| author | Willem Dalton <144246261+WillemDalton@users.noreply.github.com> | 2025-11-05 15:26:56 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-05 15:26:56 -0500 |
| commit | 17aba16fbb3272a73b1a1b6b1c459e3597fc066e (patch) | |
| tree | 01ed290f8b3c524fc033d22fc25c9a6193c8cf10 /src | |
| parent | bac8ea587a6bd569d74a173ea8eeb59b7edc7417 (diff) | |
| parent | 58d32481c71e5aee7c89dab3afc3b1e3bdb8c074 (diff) | |
| download | designproject-design-6-17aba16fbb3272a73b1a1b6b1c459e3597fc066e.tar.gz designproject-design-6-17aba16fbb3272a73b1a1b6b1c459e3597fc066e.tar.bz2 designproject-design-6-17aba16fbb3272a73b1a1b6b1c459e3597fc066e.zip | |
Merge pull request #13 from RIT-SWEN-262/singleton-daos
Singleton daos
Diffstat (limited to 'src')
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(); |
