diff --git a/README.md b/README.md index fc222ca..d51e34c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ -![Logo](https://cdn.discordapp.com/icons/671688550311526413/67359a4a386c62bb66eaf4641ab8de5c.png?size=128) +
+![Logo](https://cdn.discordapp.com/icons/671688550311526413/67359a4a386c62bb66eaf4641ab8de5c.png?size=128) # Welsh Vocabulary Tutor +
+ + > This is the group repository for Group 20 doing the CS22120 Group Project 2020. diff --git a/docs/design_spec/DesignSpecGroup20.pdf b/docs/design_spec/DesignSpecGroup20.pdf index 4f4c9ea..aa2a717 100644 Binary files a/docs/design_spec/DesignSpecGroup20.pdf and b/docs/design_spec/DesignSpecGroup20.pdf differ diff --git a/docs/design_spec/src/DesignSpecGroup20.docx b/docs/design_spec/src/DesignSpecGroup20.docx index 69303a5..0f20105 100644 Binary files a/docs/design_spec/src/DesignSpecGroup20.docx and b/docs/design_spec/src/DesignSpecGroup20.docx differ diff --git a/src/Welsh Vocabulary Tutor/src/main/java/module-info.java b/src/Welsh Vocabulary Tutor/src/main/java/module-info.java index 2ba6f08..1013357 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/module-info.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/module-info.java @@ -4,12 +4,17 @@ module uk.ac.aber.cs22120.group20 { requires com.fasterxml.jackson.core; requires com.fasterxml.jackson.databind; requires junit; + requires org.junit.jupiter.api; opens uk.ac.aber.cs22120.group20.javafx to javafx.fxml; opens uk.ac.aber.cs22120.group20 to javafx.fxml; opens uk.ac.aber.cs22120.group20.json to com.fasterxml.jackson.databind; + opens uk.ac.aber.cs22120.group20.selfassessment to javafx.fxml; + + exports uk.ac.aber.cs22120.group20.json to com.fasterxml.jackson.databind; exports uk.ac.aber.cs22120.group20.javafx to javafx.graphics, javafx.fxml; +// exports uk.ac.aber.cs22120.group20.test to junit; } \ No newline at end of file diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/AddWordController.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/AddWordController.java index 781b755..1ed3a23 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/AddWordController.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/AddWordController.java @@ -17,68 +17,81 @@ import uk.ac.aber.cs22120.group20.json.DictionaryEntry; public class AddWordController { - @FXML - private TextField welsh; - @FXML - private TextField english; - @FXML - private ComboBox wordType; + @FXML + private TextField welsh; + @FXML + private TextField english; + @FXML + private ComboBox wordType; - public TextField getWelsh() { - return welsh; - } + public TextField getWelsh() { + return welsh; + } - public TextField getEnglish() { - return english; - } + public TextField getEnglish() { + return english; + } - @FXML - private void initialize() { + @FXML + private void initialize() { - wordType.getItems().addAll("Masculine noun", "Feminine noun", "Verb", "Other"); - wordType.setValue("Type"); + wordType.getItems().addAll("Masculine noun", "Feminine noun", "Verb", "Other"); + wordType.setValue("Type"); - } + } - @FXML - protected void addButtonClick(ActionEvent actionEvent) { - boolean entryFound = false; - // one or more blank fields - if (english.getText() == null || welsh.getText() == null || wordType.getValue().equals("Type")) { - Alert error = new Alert(Alert.AlertType.ERROR); - error.setTitle("Error"); - error.setHeaderText("Entry Not Saved"); - error.setContentText("One or more fields are blank"); + @FXML + protected void addButtonClick(ActionEvent actionEvent) { + String trueWordType; + if (wordType.getValue() == "Masculine noun") { + trueWordType = "nm"; + } else if (wordType.getValue() == "Feminine noun") { + trueWordType = "nf"; + } else if (wordType.getValue() == "Verb") { + trueWordType = "verb"; + } else { + trueWordType = "other"; + } + boolean entryFound = false; + // one or more blank fields + if (english.getText() == null || welsh.getText() == null || wordType.getValue().equals("Type")) { + Alert error = new Alert(Alert.AlertType.ERROR); + error.setTitle("Error"); + error.setHeaderText("Entry Not Saved"); + error.setContentText("One or more fields are blank"); - error.showAndWait(); - } else { - for (DictionaryEntry entry : Application.dictionary) { - entryFound = false; - DictionaryEntry newEntry = new DictionaryEntry(english.getText(), welsh.getText(), wordType.getValue()); - if (entry.equals(newEntry)) { - Alert alert = new Alert(Alert.AlertType.ERROR); - alert.setTitle("Error"); - alert.setHeaderText("Entry Not Saved"); - alert.setContentText("This entry already exists"); + error.showAndWait(); + } else { + for (DictionaryEntry entry : Application.dictionary) { + entryFound = false; + DictionaryEntry newEntry = new DictionaryEntry(english.getText(), welsh.getText(), trueWordType); + if (entry.equals(newEntry)) { + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("Error"); + alert.setHeaderText("Entry Not Saved"); + alert.setContentText("This entry already exists"); - alert.showAndWait(); - entryFound = true; - break; - } else { - continue; - } + alert.showAndWait(); + entryFound = true; + break; + } else { + continue; } - if (!entryFound) { - Alert alert = new Alert(Alert.AlertType.INFORMATION); - alert.setTitle("Success"); - alert.setHeaderText("Entry Saved"); - alert.setContentText("Entry Added - English: " + english.getText() + " Welsh: " + welsh.getText() + " Type: " + wordType.getValue()); + } + if (!entryFound) { + Alert alert = new Alert(Alert.AlertType.INFORMATION); + alert.setTitle("Success"); + alert.setHeaderText("Entry Saved"); + alert.setContentText("Entry Added - English: " + english.getText() + " Welsh: " + welsh.getText() + " Type: " + wordType.getValue()); - alert.showAndWait(); - DictionaryEntry dictionaryEntry = new DictionaryEntry(english.getText(), welsh.getText(), wordType.getValue()); - Application.dictionary.contains(dictionaryEntry); - Application.dictionary.add(dictionaryEntry); + alert.showAndWait(); + + + DictionaryEntry dictionaryEntry = new DictionaryEntry(english.getText(), welsh.getText(), trueWordType); + dictionaryEntry.setPracticeWord(true); + Application.dictionary.contains(dictionaryEntry); + Application.dictionary.add(dictionaryEntry); // output of what was saved for testing // System.out.print(english.getText()); @@ -86,16 +99,17 @@ public class AddWordController { // System.out.println(wordType.getValue()); // Resets values to blank for next word to be entered - english.clear(); - welsh.clear(); - wordType.setValue("Type"); + english.clear(); + welsh.clear(); + wordType.setValue("Type"); + trueWordType = null; - } - } + } + } - } + } // @Override // public boolean equals(Object obj) { @@ -104,42 +118,42 @@ public class AddWordController { // } - @FXML - private void switchToPrimary() throws IOException { - Application.setRoot("Primary"); - } + @FXML + private void switchToPrimary() throws IOException { + Application.setRoot("Primary"); + } - // add character methods for characters ch, dd, ff, ng, ll, ph, rh, th - public void addCharch(ActionEvent actionEvent) { - welsh.appendText("ch"); - } + // add character methods for characters ch, dd, ff, ng, ll, ph, rh, th + public void addCharch(ActionEvent actionEvent) { + welsh.appendText("ch"); + } - public void addChardd(ActionEvent actionEvent) { - welsh.appendText("dd"); - } + public void addChardd(ActionEvent actionEvent) { + welsh.appendText("dd"); + } - public void addCharff(ActionEvent actionEvent) { - welsh.appendText("ff"); - } + public void addCharff(ActionEvent actionEvent) { + welsh.appendText("ff"); + } - public void addCharng(ActionEvent actionEvent) { - welsh.appendText("ng"); - } + public void addCharng(ActionEvent actionEvent) { + welsh.appendText("ng"); + } - public void addCharll(ActionEvent actionEvent) { - welsh.appendText("ll"); - } + public void addCharll(ActionEvent actionEvent) { + welsh.appendText("ll"); + } - public void addCharph(ActionEvent actionEvent) { - welsh.appendText("ph"); - } + public void addCharph(ActionEvent actionEvent) { + welsh.appendText("ph"); + } - public void addCharrh(ActionEvent actionEvent) { - welsh.appendText("rh"); - } + public void addCharrh(ActionEvent actionEvent) { + welsh.appendText("rh"); + } - public void addCharth(ActionEvent actionEvent) { - welsh.appendText("th"); - } + public void addCharth(ActionEvent actionEvent) { + welsh.appendText("th"); + } } diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/Application.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/Application.java index 4fddb90..9020ee6 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/Application.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/Application.java @@ -93,7 +93,7 @@ public class Application extends javafx.application.Application { * @see ScreenSwitch.SceneEnum */ static void setRoot(String fxml) throws IOException { - ScreenSwitch.setLegacyScene(fxml); + ScreenSwitch.swap(ScreenSwitch.SceneEnum.dictionaryScene); } // /** diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/DictionaryController.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/DictionaryController.java index c4b29cb..8bc416e 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/DictionaryController.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/DictionaryController.java @@ -44,183 +44,189 @@ import java.util.ResourceBundle; * @see DictionaryEntry * @see Application */ -public class DictionaryController implements Initializable { - public static Stage primaryStage = null; +//public class DictionaryController implements Initializable { +public class DictionaryController { + public static Stage primaryStage = null; - @FXML - private ImageView alphaSort; - @FXML - private TextField searchBox; - @FXML - private TableView table; - @FXML - private TableColumn english = new TableColumn<>(); - @FXML - private TableColumn welsh = new TableColumn<>(); + @FXML + private ImageView alphaSort; + @FXML + private TextField searchBox; + @FXML + private TableView table; + @FXML + private TableColumn english = new TableColumn<>(); + @FXML + private TableColumn welsh = new TableColumn<>(); - public ObservableList list = FXCollections.observableArrayList(); + public ObservableList list = FXCollections.observableArrayList(); - @FXML - private void switchLangSort() { - if (table.getSortOrder().contains(english)) { - if (welsh.getSortType().equals(TableColumn.SortType.ASCENDING)) { - alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png")); - } - else if (welsh.getSortType().equals(TableColumn.SortType.DESCENDING)) { - alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png")); - } - table.getSortOrder().clear(); - table.getSortOrder().add(welsh); - } - else if (table.getSortOrder().contains(welsh)) { - if (english.getSortType().equals(TableColumn.SortType.ASCENDING)) { - alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png")); - } - else if (english.getSortType().equals(TableColumn.SortType.DESCENDING)) { - alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png")); - } - table.getSortOrder().clear(); - table.getSortOrder().add(english); - } - table.sort(); - } + /** + * + */ + @FXML + private void switchLangSort() { + if (table.getSortOrder().contains(english)) { + if (welsh.getSortType().equals(TableColumn.SortType.ASCENDING)) { + alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png")); + } + else if (welsh.getSortType().equals(TableColumn.SortType.DESCENDING)) { + alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png")); + } + table.getSortOrder().clear(); + table.getSortOrder().add(welsh); + } + else if (table.getSortOrder().contains(welsh)) { + if (english.getSortType().equals(TableColumn.SortType.ASCENDING)) { + alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png")); + } + else if (english.getSortType().equals(TableColumn.SortType.DESCENDING)) { + alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png")); + } + table.getSortOrder().clear(); + table.getSortOrder().add(english); + } + table.sort(); + } - @FXML - private void switchAlphaSort() { - if (table.getSortOrder().contains(english)) { - if (english.getSortType().equals(TableColumn.SortType.ASCENDING)) { - english.setSortType(TableColumn.SortType.DESCENDING); - alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png")); - } else { - english.setSortType(TableColumn.SortType.ASCENDING); - alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png")); - } - } else if (table.getSortOrder().contains(welsh)) { - if (welsh.getSortType().equals(TableColumn.SortType.ASCENDING)) { - welsh.setSortType(TableColumn.SortType.DESCENDING); - alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png")); - } else { - welsh.setSortType(TableColumn.SortType.ASCENDING); - alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png")); - } - } - } + /** + * + */ + @FXML + private void switchAlphaSort() { + if (table.getSortOrder().contains(english)) { + if (english.getSortType().equals(TableColumn.SortType.ASCENDING)) { + english.setSortType(TableColumn.SortType.DESCENDING); + alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png")); + } else { + english.setSortType(TableColumn.SortType.ASCENDING); + alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png")); + } + } else if (table.getSortOrder().contains(welsh)) { + if (welsh.getSortType().equals(TableColumn.SortType.ASCENDING)) { + welsh.setSortType(TableColumn.SortType.DESCENDING); + alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-reversed-50.png")); + } else { + welsh.setSortType(TableColumn.SortType.ASCENDING); + alphaSort.setImage(new Image("file:src/main/resources/assets/icons/black_icons/50px/sort-alpha-up-50.png")); + } + } + } - /** - * Switches to the primary scene. - * - * @throws IOException - */ - @FXML - private void switchToPracticeList() throws IOException { - Application.setRoot("practicelist"); - } + /** + * Switches to the primary scene. + * + * @throws IOException + */ + @FXML + private void switchToPracticeList() throws IOException { + ScreenSwitch.swap(ScreenSwitch.SceneEnum.practiceListScene); + } - /** - * Initializes the table of dictionary entries. - *

- * An observable list of DictionaryEntries is loaded from the Application class into a local instance of ObservableList. - * It also sets up Lambda expressions related to live searching functionality and the display of DictionaryEntries. - * - * @param url - * @param resourceBundle - * @see Application - * @see DictionaryEntry - */ - @Override - public void initialize(URL url, ResourceBundle resourceBundle) { - list.addAll(Application.dictionary); + /** + * Initializes the table of dictionary entries. + *

+ * An observable list of DictionaryEntries is loaded from the Application class into a local instance of ObservableList. + * It also sets up Lambda expressions related to live searching functionality and the display of DictionaryEntries. + * + // * @param url + // * @param resourceBundle + * @see Application + * @see DictionaryEntry + */ + public void initialize() { + list.addAll(Application.dictionary); - table.setRowFactory(tv -> { - TableRow row = new TableRow() { - @Override - protected void updateItem(DictionaryEntry dictionaryEntry, boolean b) { - super.updateItem(dictionaryEntry, b); - if (!isEmpty()) { - if (dictionaryEntry.isPracticeWord()) { - setStyle("-fx-background-color: gray;"); - } else { - setStyle(" "); - } - } - } - }; - row.setOnMouseClicked(mouseEvent -> { - if (mouseEvent.getClickCount() == 1 && (!row.isEmpty())) { - if (row.getItem().isPracticeWord()) { - Application.dictionary.get(list.indexOf(row.getItem())).setPracticeWord(false); - ArrayList toRemove = new ArrayList(); - for (DictionaryEntry entry : Application.practiseList) { - if (entry.equals(row.getItem())) { - toRemove.add(entry); - } - } - Application.practiseList.removeAll(toRemove); + table.setRowFactory(tv -> { + TableRow row = new TableRow() { + @Override + protected void updateItem(DictionaryEntry dictionaryEntry, boolean b) { + super.updateItem(dictionaryEntry, b); + if (!isEmpty()) { + if (dictionaryEntry.isPracticeWord()) { + setStyle("-fx-background-color: gray;"); + } else { + setStyle(" "); + } + } + } + }; + row.setOnMouseClicked(mouseEvent -> { + if (mouseEvent.getClickCount() == 1 && (!row.isEmpty())) { + if (row.getItem().isPracticeWord()) { + Application.dictionary.get(list.indexOf(row.getItem())).setPracticeWord(false); + ArrayList toRemove = new ArrayList(); + for (DictionaryEntry entry : Application.practiseList) { + if (entry.equals(row.getItem())) { + toRemove.add(entry); + } + } + Application.practiseList.removeAll(toRemove); // row.getItem().setPracticeWord(false); - } else if (!row.getItem().isPracticeWord()) { - Application.dictionary.get(list.indexOf(row.getItem())).setPracticeWord(true); - Application.practiseList.add(row.getItem()); + } else if (!row.getItem().isPracticeWord()) { + Application.dictionary.get(list.indexOf(row.getItem())).setPracticeWord(true); + Application.practiseList.add(row.getItem()); // row.getItem().setPracticeWord(true); - } - table.getSelectionModel().clearSelection(); - } - }); - return row; - } - ); - welsh.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> { - if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("nm")) { - return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nm}"); - } else if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("nf")) { - return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nf}"); + } + table.getSelectionModel().clearSelection(); + } + }); + return row; + } + ); + welsh.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> { + if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("nm")) { + return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nm}"); + } else if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("nf")) { + return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh() + " {nf}"); + } else { + return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh()); + } + }); + + english.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> { + if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("verb")) { + return new SimpleStringProperty("to " + dictionaryEntryStringCellDataFeatures.getValue().getEnglish()); + } else { + return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getEnglish()); + } + }); + + FilteredList filteredList = new FilteredList<>(list, p -> true); // Wrap list in a FilteredList + + searchBox.textProperty().addListener((observable, oldSearchTerm, newSearchTerm) -> { + filteredList.setPredicate(dictionaryEntry -> { // returns true on a filter match, false if no match + boolean result = false; + + table.refresh(); // This fixes the table highlighting issue + + if (newSearchTerm == null || newSearchTerm.isEmpty()) { // If filter text is empty, display all dictionary entries + result = true; } else { - return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getWelsh()); - } - }); - - english.setCellValueFactory(dictionaryEntryStringCellDataFeatures -> { - if (dictionaryEntryStringCellDataFeatures.getValue().getWordType().equals("verb")) { - return new SimpleStringProperty("to " + dictionaryEntryStringCellDataFeatures.getValue().getEnglish()); - } else { - return new SimpleStringProperty(dictionaryEntryStringCellDataFeatures.getValue().getEnglish()); - } - }); - - FilteredList filteredList = new FilteredList<>(list, p -> true); // Wrap list in a FilteredList - - searchBox.textProperty().addListener((observable, oldSearchTerm, newSearchTerm) -> { - filteredList.setPredicate(dictionaryEntry -> { // returns true on a filter match, false if no match - boolean result = false; - - table.refresh(); // This fixes the table highlighting issue - - if (newSearchTerm == null || newSearchTerm.isEmpty()) { // If filter text is empty, display all dictionary entries - result = true; - } else { - // need all same case for compare. - final String lowerCaseSearchFilter = newSearchTerm.toLowerCase(); - if (dictionaryEntry.getWelsh().toLowerCase().contains(lowerCaseSearchFilter)) { - result = true; // Filter matches Welsh - } else if (dictionaryEntry.getEnglish().toLowerCase().contains(lowerCaseSearchFilter)) { - result = true; // Filter matches English + // need all same case for compare. + final String lowerCaseSearchFilter = newSearchTerm.toLowerCase(); + if (dictionaryEntry.getWelsh().toLowerCase().contains(lowerCaseSearchFilter)) { + result = true; // Filter matches Welsh + } else if (dictionaryEntry.getEnglish().toLowerCase().contains(lowerCaseSearchFilter)) { + result = true; // Filter matches English // } else if (dictionaryEntry.getWordType().toLowerCase().contains(lowerCaseSearchFilter)) { // result = true; // Filter matches Word Type - } else if (dictionaryEntry.getWordType().equals("verb") && ("to " + dictionaryEntry.getEnglish()).toLowerCase().contains(lowerCaseSearchFilter)) { - result = true; // Filter matches ['to' + a word] or [a word] if word is a verb - } - } - return result; - }); - }); + } else if (dictionaryEntry.getWordType().equals("verb") && ("to " + dictionaryEntry.getEnglish()).toLowerCase().contains(lowerCaseSearchFilter)) { + result = true; // Filter matches ['to' + a word] or [a word] if word is a verb + } + } + return result; + }); + }); - SortedList sortedList = new SortedList<>(filteredList); //Wrap the filtered list in a SortedList - sortedList.comparatorProperty().bind(table.comparatorProperty()); //Bind the sorted list comparator to the table comparator + SortedList sortedList = new SortedList<>(filteredList); //Wrap the filtered list in a SortedList + sortedList.comparatorProperty().bind(table.comparatorProperty()); //Bind the sorted list comparator to the table comparator // welsh.setCellValueFactory(new PropertyValueFactory("welsh")); // english.setCellValueFactory(new PropertyValueFactory("english")); - table.setItems(sortedList); - table.getSortOrder().add(english); - } + table.setItems(sortedList); + table.getSortOrder().add(english); + } } diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/FlashcardController.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/FlashcardController.java index 1d2429b..90ed52d 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/FlashcardController.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/FlashcardController.java @@ -9,11 +9,33 @@ import javafx.scene.shape.Rectangle; import javafx.scene.text.Text; import javafx.scene.transform.Rotate; import javafx.util.Duration; -import uk.ac.aber.cs22120.group20.javafx.Application; - +import uk.ac.aber.cs22120.group20.json.DictionaryEntry; +import uk.ac.aber.cs22120.group20.selfassessment.AssessmentGenerator; import java.io.IOException; +/** + * A class that servers as the controller for the programs Flashcard JavaFX scene, handling all of its events and attributes. This scene is defined as "flashcard.fxml". + * + * @author Brad Corbett [brc9] + * @author Henry Dugmore [hjd3] + * @author Kain Bryan-Jones [kab74] + * @author Luke Wybar [law39] + * @author Marcin Jakob [maj83] + * @author Oscar Pocock [osp1] + * @author Tom Perry [top19] + * @author Waylen Watts [ncw] + * @version 0.1 Initial development. + * @see Application + * @see DictionaryEntry + * @see SharedCodeController + */ + public class FlashcardController { + + // /////////////////// // + // Instance Variables. // + // /////////////////// // + int index = 0; Node card; @@ -31,6 +53,14 @@ public class FlashcardController { @FXML private ImageView right_arrow; + // //////// // + // Methods. // + // //////// // + + /** + * Method that initializes 'flashcard.fxml' by setting up the icons and text. This method is called automatically whenever the flashcard scene starts. + * + */ @FXML private void initialize() { testWord.setText(Application.practiseList.getFirst().getWelsh()); @@ -39,22 +69,28 @@ public class FlashcardController { updateCounter(); card = flashcard; - Image left = new Image("file:src/main/resources/assets/icons/black_icons/50px/left-50.png"); - Image right = new Image("file:src/main/resources/assets/icons/black_icons/50px/right-50.png"); - - left_arrow.setImage(left); - right_arrow.setImage(right); + left_arrow.setImage(new Image(getClass().getResourceAsStream("/assets/icons/black_icons/50px/left-50.png"))); + right_arrow.setImage(new Image(getClass().getResourceAsStream("/assets/icons/black_icons/50px/right-50.png"))); } + /** + * Event that rotates the scenes flashcard using RotateTransition whenever the user clicks the flashcard. + * @see RotateTransition + */ @FXML private void handleFlashcardClick() { RotateTransition rotator = RotateCard(card); - rotator.play(); + rotator.play(); // Play the rotate transition. } + /** + * Event that switches to the previous flashcard whenever the user clicks the 'leftArrow' icon. + * @see Application + * @see DictionaryEntry + */ @FXML private void handlePreviousCard() { - + // If statement to check the start of the practiceList hasn't been reached before moving to the previous card. if (index > 0) { index--; } @@ -63,8 +99,14 @@ public class FlashcardController { wordType.setText("Welsh"); } + /** + * Event that switches to the next flashcard whenever the user clicks the 'right-arrow' icon. + * @see Application + * @see DictionaryEntry + */ @FXML private void handleNextCard() { + // If statement to check the end of the practiceList hasn't been reached before moving to the next card. if (index < Application.practiseList.size()-1) { index++; } @@ -74,28 +116,42 @@ public class FlashcardController { wordType.setText("Welsh"); } + /** + * Method that updates the onscreen counter of the current flashcard. + * @see Application + * @see DictionaryEntry + */ private void updateCounter() { counter.setText((index + 1) + "/" + Application.practiseList.size()); } + /** + * Method that creates a RotateTransition animation for flipping the flashcard 180 degrees. + * @param card FXML rectangle element that will be flipped. + * @return RotateTransition that will flip the rectangle 180 degrees. + * @see Application + * @see DictionaryEntry + * @see RotateTransition + */ private RotateTransition RotateCard(Node card) { RotateTransition rotate = new RotateTransition(Duration.millis(1000), card); + // Make the text on the card go invisible whilst the cardFlip is happening. testWord.setVisible(false); wordType.setVisible(false); + // Set the axis and angle of the rotation. rotate.setAxis(Rotate.Y_AXIS); rotate.setFromAngle(0); rotate.setToAngle(180); rotate.setInterpolator(Interpolator.LINEAR); rotate.setCycleCount(1); - rotate.setOnFinished(event -> { + rotate.setOnFinished(event -> { // Once the transition is completed, update the text on the flashcard. - testWord.setText("Welsh word: \t" + Application.practiseList.get(index).getWelsh()); - if (wordType.getText().equals("Welsh")) { + if (wordType.getText().equals("Welsh")) { // If the word currently on the flashcard is welsh, display the english translation. testWord.setText(Application.practiseList.get(index).getEnglish()); wordType.setText("English"); - } else { + } else { // Else display the welsh translation. testWord.setText(Application.practiseList.get(index).getWelsh()); wordType.setText("Welsh"); } @@ -108,7 +164,7 @@ public class FlashcardController { @FXML private void switchToAddWord() throws IOException { - Application.setRoot("addword"); + AssessmentGenerator.generateAssessment(Application.practiseList); } } diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/PracticeListController.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/PracticeListController.java index 581c12e..f14cc6d 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/PracticeListController.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/PracticeListController.java @@ -41,7 +41,7 @@ import java.util.ResourceBundle; * @see DictionaryEntry * @see Application */ -public class PracticeListController implements Initializable { +public class PracticeListController { public static Stage primaryStage = null; @FXML @@ -63,13 +63,12 @@ public class PracticeListController implements Initializable { * An observable list of DictionaryEntries is loaded from the Application class into a local instance of ObservableList. * It also sets up Lambda expressions related to live searching functionality and the display of DictionaryEntries. * - * @param url - * @param resourceBundle +// * @param url +// * @param resourceBundle * @see Application * @see DictionaryEntry */ - @Override - public void initialize(URL url, ResourceBundle resourceBundle) { + public void initialize() { // list.addAll(Application.dictionary); list.addAll(Application.practiseList); // for (DictionaryEntry entry : Application.dictionary) { @@ -228,7 +227,7 @@ public class PracticeListController implements Initializable { */ @FXML private void switchToFlashCard() throws IOException { - Application.setRoot("flashcard"); + ScreenSwitch.swap(ScreenSwitch.SceneEnum.flashcardScene); } } diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/ScreenSwitch.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/ScreenSwitch.java index 101ec8d..a0e2174 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/ScreenSwitch.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/ScreenSwitch.java @@ -88,8 +88,9 @@ public class ScreenSwitch extends SharedCodeController { }catch (IOException e){ // If an error occurs, print out error message on STDIO and crash gracefully System.err.print("Loading the FXML file "); System.err.print(newScene.getFXML()); - System.err.println("Failed!"); + System.err.println(" Failed!"); System.err.println(e.toString()); + e.printStackTrace(System.err); System.exit(-1); } return root; @@ -113,6 +114,7 @@ public class ScreenSwitch extends SharedCodeController { flashcardScene("flashcard.fxml"), practiceListScene("practicelist.fxml"), matchMeaningScene("matchthemeaning.fxml"), + sixMeaningScene("sixmeanings.fxml"), translationScene("translation.fxml"), ; diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/SharedCodeController.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/SharedCodeController.java index bd071cf..91a3a71 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/SharedCodeController.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/javafx/SharedCodeController.java @@ -1,5 +1,12 @@ package uk.ac.aber.cs22120.group20.javafx; +import javafx.fxml.FXML; +import javafx.scene.control.Alert; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.shape.Rectangle; +import javafx.scene.text.Text; + /** * Abstract class that contains all the shared FXML elements between the * different controller classes including the sliding menu and the test score counter, to reduce code @@ -9,4 +16,122 @@ package uk.ac.aber.cs22120.group20.javafx; * @See */ abstract public class SharedCodeController { + + static int sideBarWidth = 50; + + @FXML + Rectangle sideBar; + + @FXML + Text dictionaryText; + @FXML + Text practiceListTest; + @FXML + Text flashcardsText; + @FXML + Text studyText; + @FXML + Text addDefinitionText; + @FXML + Text currentPageText; + + @FXML + ImageView expandMenuIcon; + @FXML + ImageView dictionaryIcon; + @FXML + ImageView practiceListIcon; + @FXML + ImageView flashcardIcon; + @FXML + ImageView studyIcon; + @FXML + ImageView searchIcon; + @FXML + ImageView addDefinitionIcon; + @FXML + ImageView currentPageIcon; + + public void setup() { + initializeIcons(); + sideBar.setWidth(sideBarWidth); + + if (sideBarWidth != 50) + initializeMenuText(); + } + + private void initializeIcons() { + expandMenuIcon.setImage(new Image("file:src/main/resources/assets/icons/white_icons/50px/menu-50.png")); + dictionaryIcon.setImage(new Image("file:src/main/resources/assets/icons/white_icons/50px/read-50.png")); + practiceListIcon.setImage(new Image("file:src/main/resources/assets/icons/white_icons/50px/rating-50.png")); + flashcardIcon.setImage(new Image("file:src/main/resources/assets/icons/white_icons/50px/flashcard-50.png")); + studyIcon.setImage(new Image("file:src/main/resources/assets/icons/white_icons/50px/pass-fail-50.png")); + addDefinitionIcon.setImage(new Image("file:src/main/resources/assets/icons/white_icons/50px/add-50.png")); + } + + private void initializeMenuText() { + dictionaryText.setText("Dictionary"); + practiceListTest.setText("Practice List"); + flashcardsText.setText("Flashcards"); + studyText.setText("Study"); + addDefinitionText.setText("Add"); + } + + private void disableMenuText() { + dictionaryText.setText(""); + practiceListTest.setText(""); + flashcardsText.setText(""); + studyText.setText(""); + addDefinitionText.setText(""); + } + + @FXML + private void expandMenuClick() { + if(sideBar.getWidth() == 50) { + + sideBar.setWidth(sideBarWidth = 230); + initializeMenuText(); + } else { + sideBar.setWidth(sideBarWidth = 50); + disableMenuText(); + } + } + + @FXML + private void dictionaryIconClick() { + ScreenSwitch.swap(ScreenSwitch.SceneEnum.dictionaryScene); + } + + @FXML + private void practiceListIconClick() { + ScreenSwitch.swap(ScreenSwitch.SceneEnum.practiceListScene); + } + + @FXML + private void flashcardIconClick() { + + if(Application.practiseList.size() == 0) { + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("Error"); + alert.setHeaderText("Unable to use Flashcard"); + alert.setContentText("The practice list is currently empty, please add some practice words to use the Flashcard feature."); + alert.showAndWait(); + } else{ + ScreenSwitch.swap(ScreenSwitch.SceneEnum.flashcardScene); + } + } + + @FXML + private void studyIconClick() { + + ScreenSwitch.swap(ScreenSwitch.SceneEnum.translationScene); + } + + @FXML + private void addWordIconClick(){ + + ScreenSwitch.swap(ScreenSwitch.SceneEnum.addWordScene); + } + } + diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/json/DictionaryEntry.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/json/DictionaryEntry.java index cf31597..d01c015 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/json/DictionaryEntry.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/json/DictionaryEntry.java @@ -84,7 +84,9 @@ public class DictionaryEntry { this.practiceWord = practiceWord; } - public boolean equals(DictionaryEntry entry) { - return entry.getEnglish().equals(this.getEnglish()) && entry.getWelsh().equals(this.getWelsh()) && entry.getWordType().equals(this.getWordType()); + @Override + public boolean equals(Object entry) { + DictionaryEntry otherEntry = (DictionaryEntry) entry; + return otherEntry.getEnglish().equals(this.getEnglish()) && otherEntry.getWelsh().equals(this.getWelsh()) && otherEntry.getWordType().equals(this.getWordType()); } } diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/AssessmentGenerator.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/AssessmentGenerator.java index 34133c1..67a916f 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/AssessmentGenerator.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/AssessmentGenerator.java @@ -1,53 +1,69 @@ package uk.ac.aber.cs22120.group20.selfassessment; +import javafx.scene.control.Alert; +import javafx.scene.control.Button; +import javafx.scene.control.ButtonBar; +import javafx.scene.control.ButtonType; import uk.ac.aber.cs22120.group20.javafx.Application; +import uk.ac.aber.cs22120.group20.javafx.ScreenSwitch; import uk.ac.aber.cs22120.group20.json.DictionaryEntry; -import java.util.LinkedList; -import java.util.Random; + +import java.util.*; + /** * Class that contains methods to create a randomised list of questions that will * contain a random distribution of question types. + * * @Author * @Version * @See */ public class AssessmentGenerator { - static boolean isEnglish; + static boolean isEnglish; + static LinkedList listOfAssessment = new LinkedList<>(); + static int currentAssessment = 0; + /** + * Method that will generate a randomized list of questions consisting of random distribution of questions + * types, using the dictionary’s practice words as the parameter. + * + * @param practiseList + * @return + */ + public static LinkedList generateAssessment(LinkedList practiseList) { + LinkedList listOfAssessment = new LinkedList<>(); + Random rand = new Random(); - /** - * Method that will generate a randomized list of questions consisting of random distribution of questions - * types, using the dictionary’s practice words as the parameter. - * @param wordList - * @return - */ - public LinkedList generateAssessment(LinkedList wordList){ - LinkedList listOfAssessment = new LinkedList<>(); - LinkedList practiseList = Application.practiseList; - Random rand = new Random(); + //int wordToTranslatePlace; + if (practiseList.size()<10){ + Alert alert = new Alert(Alert.AlertType.ERROR); + alert.setTitle("Error"); + alert.setHeaderText("Not enough words in practice list"); + alert.setResizable(false); + alert.setContentText("Please add more words to your practice list on the dictionary page before trying to test yourself!"); + Optional result = alert.showAndWait(); + ScreenSwitch.swap(ScreenSwitch.SceneEnum.dictionaryScene); + }else { + for (int numberToGenerate = 0; numberToGenerate < 10; numberToGenerate++) { + Question generatedAssessment = null; + int quizType = rand.nextInt(3); + switch (quizType) { + case (0): //0 Means translation test. + //wordToTranslatePlace = rand.nextInt(Application.practiseList.size()); + //wordToTranslate = Application.practiseList.get(wordToTranslatePlace); - int wordToTranslatePlace; + generatedAssessment = generateTranslationTest(practiseList); + break; + case (1): //1 Means six meanings test. + //wordToTranslatePlace = rand.nextInt(Application.practiseList.size()); + //wordToTranslate = Application.practiseList.get(wordToTranslatePlace); - for (int numberToGenerate = 0; numberToGenerate < 10; numberToGenerate++) { - Question generatedAssessment = null; - int quizType = rand.nextInt(3); - switch (quizType) { - case (0): //0 Means translation test. - //wordToTranslatePlace = rand.nextInt(Application.practiseList.size()); - //wordToTranslate = Application.practiseList.get(wordToTranslatePlace); - - generatedAssessment = generateWordEnter(practiseList); - - break; - case (1): //1 Means six meanings test. - //wordToTranslatePlace = rand.nextInt(Application.practiseList.size()); - //wordToTranslate = Application.practiseList.get(wordToTranslatePlace); - - generatedAssessment = generateSixMeanings(practiseList); - case (2): //2 Means match meanings test. + generatedAssessment = generateSixMeanings(practiseList); + break; + case (2): //2 Means match meanings test. // LinkedList wordsToTranslate = new LinkedList<>(); // for (int i = 0; i < 3; i++) { // wordToTranslatePlace = rand.nextInt(Application.practiseList.size()); @@ -55,80 +71,131 @@ public class AssessmentGenerator { // wordsToTranslate.toArray(); // } - generatedAssessment = generateWordMatch(practiseList); - } - listOfAssessment.add(generatedAssessment); - } - } + generatedAssessment = generateMatchMeaning(practiseList); + break; + } + listOfAssessment.add(generatedAssessment); + } + AssessmentGenerator.listOfAssessment = listOfAssessment; + goToNextQuestion(); + } + return listOfAssessment; + } - /** - * Method - * that will generate a list of questions that are the type ‘Match The Meanings’, using the dictionary's - * practice words as the parameter. - * @return - */ - public Question generateWordMatch(LinkedList a){ - return null; + /** + * Method + * that will generate a list of questions that are the type ‘Match The Meanings’, using the dictionary's + * practice words as the parameter. + * + * @return + */ + public static Question generateMatchMeaning(LinkedList practiceList) { + Random rand = new Random(); + LinkedList answerList = new LinkedList<>(); - } + int successfulAnswersSelected = 0; + while (successfulAnswersSelected < 4) { + DictionaryEntry selectedAnswer; + selectedAnswer = practiceList.get(rand.nextInt(practiceList.size())); + if (answerList.contains(selectedAnswer)) { + continue; + } + answerList.add(selectedAnswer); + successfulAnswersSelected++; + } - /** - * Method - * that will generate a list of questions that are the type ‘6 Meanings’, using the dictionary's practice - * words as the parameter. - * @return - */ - public static Question generateSixMeanings(LinkedList practiseList){ + Question generatedQuestion = new MatchTheMeaningQuestion(answerList.toArray(DictionaryEntry[]::new)); + return generatedQuestion; + } - //CHANGE DICTIONARY TO PRACTISE LIST + /** + * Method + * that will generate a list of questions that are the type ‘6 Meanings’, using the dictionary's practice + * words as the parameter. + * + * @return + */ + public static Question generateSixMeanings(LinkedList practiseList) { + Question returnValue; + ArrayList listOfAnswers = new ArrayList<>(); + Random rand = new Random(); + DictionaryEntry wordToTranslate = practiseList.get(rand.nextInt(practiseList.size())); + SixMeaningsQuestion generatedQuestion = new SixMeaningsQuestion(wordToTranslate, Application.dictionary); + return generatedQuestion; + } - Random rand = new Random(); + /** + * Method that + * will generate a list of questions that are the type ‘Translation’, using the dictionary's practice words as + * the parameter. + * + * @return + */ + public static Question generateTranslationTest(LinkedList practiceList) { + Random rand = new Random(); + DictionaryEntry selectedCorrectAnswer; + selectedCorrectAnswer = practiceList.get(rand.nextInt(practiceList.size())); + Question generatedQuestion = new TranslationQuestion(selectedCorrectAnswer); + return generatedQuestion; + } - boolean isDuplicate = false; - - do{ - int rand_q=rand.nextInt(Application.dictionary.size()-1); - - DictionaryEntry pickedQuestion = Application.dictionary.get(rand_q); - - //If size of list is greater than 1 check for duplicates... - if(MatchTheMeaningQuestion.setOfQuestions.size()>=1){ - - for (DictionaryEntry setOfQuestion : MatchTheMeaningQuestion.setOfQuestions) { - - //If it is duplicate change isDuplicate to true and break - if (setOfQuestion.equals(pickedQuestion)) { - isDuplicate = true; - break; - } + public static void goToNextQuestion() { + if (currentAssessment < 10) { + Question currentQuestion = listOfAssessment.get(currentAssessment); + if (currentQuestion instanceof MatchTheMeaningQuestion) { + MatchTheMeaningController.answer = ((MatchTheMeaningQuestion) currentQuestion).getCorrectAnswer(); + ScreenSwitch.swap(ScreenSwitch.SceneEnum.matchMeaningScene); + } else if (currentQuestion instanceof SixMeaningsQuestion) { + SixMeaningsController.allQuestions = ((SixMeaningsQuestion) currentQuestion).getCorrectAnswer(); + ScreenSwitch.swap(ScreenSwitch.SceneEnum.sixMeaningScene); + } else if (currentQuestion instanceof TranslationQuestion) { + TranslationController.answer = ((TranslationQuestion) currentQuestion).getCorrectAnswer(); + ScreenSwitch.swap(ScreenSwitch.SceneEnum.translationScene); + } else { + System.err.print("The question has not been recognised"); + System.err.println(currentQuestion); } - //If duplicate wasn't found add entry to the list - if(!isDuplicate){ - MatchTheMeaningQuestion.setOfQuestions.add(pickedQuestion); + currentAssessment++; + } else { + + StringBuilder sb = new StringBuilder(); + sb.append("You scored: ") + .append(Question.correctAnswers).append("/") + .append(Question.correctAnswers + Question.wrongAnswers) + .append("\n Would you like to test yourself again?"); + + ButtonType yesBtn = new ButtonType("Yes"); + ButtonType noBtn = new ButtonType("No"); + + + + Alert alert = new Alert(Alert.AlertType.CONFIRMATION); + alert.setTitle("You finished the tests"); + alert.setHeaderText("You finished the tests\n Well Done!"); + alert.setResizable(false); + alert.setContentText(sb.toString()); + alert.getButtonTypes().clear(); + alert.getButtonTypes().addAll(yesBtn, noBtn); + + Optional result = alert.showAndWait(); + + + + if (result.isEmpty() || result.get() == noBtn) { + currentAssessment=0; + Question.resetScore(); + ScreenSwitch.swap(ScreenSwitch.SceneEnum.dictionaryScene); + + } else { + currentAssessment = 0; + Question.resetScore(); + generateAssessment(Application.practiseList); } + } - //... otherwise, add entry to the - }else{ - MatchTheMeaningQuestion.setOfQuestions.add(pickedQuestion); - } - - isDuplicate =false; - - }while(MatchTheMeaningQuestion.setOfQuestions.size()<5); - } - - /** - * Method that - * will generate a list of questions that are the type ‘Translation’, using the dictionary's practice words as - * the parameter. - * @return - */ - public Question generateWordEnter(LinkedList a){ - return null; - } - + } } diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/MatchTheMeaningController.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/MatchTheMeaningController.java index 1f9fa2d..83a599d 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/MatchTheMeaningController.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/MatchTheMeaningController.java @@ -30,10 +30,10 @@ import java.util.*; */ -public class MatchTheMeaningController extends Question implements Initializable{ +public class MatchTheMeaningController implements Initializable{ - private ArrayList setOfQuestions=new ArrayList<>(); + public static ArrayList answer =new ArrayList<>(); private ArrayList orderList = new ArrayList<>(Arrays.asList(0,1,2,3)); private boolean isEnglish; @@ -81,14 +81,6 @@ public class MatchTheMeaningController extends Question implements Initializable private Label WrongAnswer; - /** - * Pick randomly dictionary entry and add it to question list where are stored questions for this test. - */ - private void getQuestions(){ - - setOfQuestions.addAll(AssessmentGenerator.generateWordMatch()); - - } /** * Set chosen words from dictionary on the scene. @@ -100,6 +92,8 @@ public class MatchTheMeaningController extends Question implements Initializable private void setWords(ArrayList questions, ArrayList orderList){ + isEnglish = AssessmentGenerator.isEnglish; + if(isEnglish){ LeftWord1.setText(questions.get(0).getEnglish()); LeftWord2.setText(questions.get(1).getEnglish()); @@ -109,9 +103,9 @@ public class MatchTheMeaningController extends Question implements Initializable Collections.shuffle(orderList); RightWord1.setText(questions.get(orderList.get(0)).getWelsh()); - RightWord1.setText(questions.get(orderList.get(1)).getWelsh()); - RightWord1.setText(questions.get(orderList.get(2)).getWelsh()); - RightWord1.setText(questions.get(orderList.get(3)).getWelsh()); + RightWord2.setText(questions.get(orderList.get(1)).getWelsh()); + RightWord3.setText(questions.get(orderList.get(2)).getWelsh()); + RightWord4.setText(questions.get(orderList.get(3)).getWelsh()); }else { LeftWord1.setText(questions.get(0).getWelsh()); @@ -122,9 +116,9 @@ public class MatchTheMeaningController extends Question implements Initializable Collections.shuffle(orderList); RightWord1.setText(questions.get(orderList.get(0)).getEnglish()); - RightWord1.setText(questions.get(orderList.get(1)).getEnglish()); - RightWord1.setText(questions.get(orderList.get(2)).getEnglish()); - RightWord1.setText(questions.get(orderList.get(3)).getEnglish()); + RightWord2.setText(questions.get(orderList.get(1)).getEnglish()); + RightWord3.setText(questions.get(orderList.get(2)).getEnglish()); + RightWord4.setText(questions.get(orderList.get(3)).getEnglish()); } } @@ -147,28 +141,21 @@ public class MatchTheMeaningController extends Question implements Initializable listOfAnswers.add(LeftWord4.getText()); } - checkAnswer(setOfQuestions,listOfAnswers,isEnglish); + Question.checkAnswer(answer,listOfAnswers,isEnglish); - CorrectAnswer.setText(Integer.toString(correctAnswers)); - WrongAnswer.setText(Integer.toString(wrongAnswers)); - setOfQuestions.clear(); - this.prepare(); + answer.clear(); + AssessmentGenerator.goToNextQuestion(); } - /** - * Method responsible for preparing questions and scene. - */ - private void prepare(){ - getQuestions(); - setWords(setOfQuestions,orderList); - } @Override public void initialize(URL url, ResourceBundle resourceBundle) { - this.prepare(); + setWords(answer,orderList); + CorrectAnswer.setText(Integer.toString(Question.correctAnswers)); + WrongAnswer.setText(Integer.toString(Question.wrongAnswers)); } } diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/MatchTheMeaningQuestion.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/MatchTheMeaningQuestion.java index 856bcc6..94b30ec 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/MatchTheMeaningQuestion.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/MatchTheMeaningQuestion.java @@ -2,12 +2,17 @@ package uk.ac.aber.cs22120.group20.selfassessment; import uk.ac.aber.cs22120.group20.json.DictionaryEntry; -public class MatchTheMeaningQuestion { - DictionaryEntry[] correctAnswer; +import java.util.ArrayList; +import java.util.Arrays; + +public class MatchTheMeaningQuestion extends Question { + private ArrayList correctAnswer = new ArrayList<>(); public MatchTheMeaningQuestion(DictionaryEntry[] correctAnswer){ - this.correctAnswer = correctAnswer; + this.correctAnswer.addAll(Arrays.asList(correctAnswer)); } - + public ArrayList getCorrectAnswer() { + return correctAnswer; + } } diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/Question.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/Question.java index d3e1cee..dd81d8d 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/Question.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/Question.java @@ -15,8 +15,8 @@ import java.util.ArrayList; */ public class Question { - public int correctAnswers = 0; - public int wrongAnswers =0; + public static int correctAnswers = 0; + public static int wrongAnswers =0; /** * @@ -24,7 +24,7 @@ public class Question { * @param listOfAnswers * @param isEnglish */ - public void checkAnswer(ArrayList listOfCorrectQuestions, ArrayListlistOfAnswers, boolean isEnglish){ + public static void checkAnswer(ArrayList listOfCorrectQuestions, ArrayListlistOfAnswers, boolean isEnglish){ if(isEnglish){ for(int i=0; i wordSet = new LinkedList<>(); + private ArrayList wordSet = new ArrayList<>(); + public static ArrayList allQuestions = new ArrayList<>(); private ArrayList orderList = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4, 5)); - private int correct = 0; - private int incorrect = 0; private String wordCounterpart; + private boolean isEnglish = AssessmentGenerator.isEnglish; @FXML @@ -70,132 +69,102 @@ public class SixMeaningsController extends TranslationController implements Init private Text possibleAnswer6; @FXML - void temp(MouseEvent event) { - + void answer1(MouseEvent event) { + wordCounterpart = possibleAnswer1.getText(); + checkAnswers(); + } + @FXML + void answer2(MouseEvent event) { + wordCounterpart = possibleAnswer2.getText(); + checkAnswers(); + } + @FXML + void answer3(MouseEvent event) { + wordCounterpart = possibleAnswer3.getText(); + checkAnswers(); + } + @FXML + void answer4(MouseEvent event) { + wordCounterpart = possibleAnswer4.getText(); + checkAnswers(); + } + @FXML + void answer5(MouseEvent event) { + wordCounterpart = possibleAnswer5.getText(); + checkAnswers(); + } + @FXML + void answer6(MouseEvent event) { + wordCounterpart = possibleAnswer6.getText(); checkAnswers(); } - private void getWords(LinkedList practiceList) { - boolean isDuplicate = false; - do { - int word = rand.nextInt(practiceList.size() - 1); - DictionaryEntry chosenWord = practiceList.get(word); - if (wordSet.size() >= 1) { + private void setWords(boolean isEnglish){ - for (DictionaryEntry setOfQuestion : wordSet) { + if(isEnglish){ - if (setOfQuestion.equals(chosenWord)) { - isDuplicate = true; - break; - } - } + wordSet.add(allQuestions.get(0)); + //WelshWord1 Is the question word and as a result is always right. + wordToTranslate.setText(wordSet.get(0).getEnglish()); + //This stores the correct answer for the english word. - //If duplicate wasn't found add entry to the list - if (!isDuplicate) { - wordSet.add(chosenWord); - } + Collections.shuffle(orderList); - //... otherwise, add entry to the - } else { - wordSet.add(chosenWord); - } + possibleAnswer1.setText(allQuestions.get(orderList.get(0)).getWelsh()); + possibleAnswer2.setText(allQuestions.get(orderList.get(1)).getWelsh()); + possibleAnswer3.setText(allQuestions.get(orderList.get(2)).getWelsh()); + possibleAnswer4.setText(allQuestions.get(orderList.get(3)).getWelsh()); + possibleAnswer5.setText(allQuestions.get(orderList.get(4)).getWelsh()); + possibleAnswer6.setText(allQuestions.get(orderList.get(5)).getWelsh()); + }else { - isDuplicate = false; + wordSet.add(allQuestions.get(0)); + //WelshWord1 Is the question word and as a result is always right. + wordToTranslate.setText(wordSet.get(0).getWelsh()); + //This stores the correct answer for the english word. - } while (wordSet.size() < 6); + Collections.shuffle(orderList); + + possibleAnswer1.setText(allQuestions.get(orderList.get(0)).getEnglish()); + possibleAnswer2.setText(allQuestions.get(orderList.get(1)).getEnglish()); + possibleAnswer3.setText(allQuestions.get(orderList.get(2)).getEnglish()); + possibleAnswer4.setText(allQuestions.get(orderList.get(3)).getEnglish()); + possibleAnswer5.setText(allQuestions.get(orderList.get(4)).getEnglish()); + possibleAnswer6.setText(allQuestions.get(orderList.get(5)).getEnglish()); + + } } - private void setWordsE(LinkedList questions, ArrayList orderList) { - //WelshWord1 Is the question word and as a result is always right. - wordToTranslate.setText(questions.get(0).getWelsh()); - //This stores the correct answer for the english word. - wordCounterpart = questions.get(0).getEnglish(); - possibleAnswer1.setText(questions.get(orderList.get(0)).getEnglish()); - possibleAnswer2.setText(questions.get(orderList.get(1)).getEnglish()); - possibleAnswer3.setText(questions.get(orderList.get(2)).getEnglish()); - possibleAnswer4.setText(questions.get(orderList.get(3)).getEnglish()); - possibleAnswer5.setText(questions.get(orderList.get(4)).getEnglish()); - possibleAnswer6.setText(questions.get(orderList.get(5)).getEnglish()); - Collections.shuffle(orderList); //I know that this does not belong here it was moved here for debug purposes. It lives five lines up. - } + private void checkAnswers() { - private void setWordsW(LinkedList questions, ArrayList orderList) { - //WelshWord1 Is the question word and as a result is always right. - wordToTranslate.setText(questions.get(0).getEnglish()); - //This stores the correct answer for the english word. - wordCounterpart = questions.get(0).getWelsh(); - possibleAnswer1.setText(questions.get(orderList.get(0)).getWelsh()); - possibleAnswer2.setText(questions.get(orderList.get(1)).getWelsh()); - possibleAnswer3.setText(questions.get(orderList.get(2)).getWelsh()); - possibleAnswer4.setText(questions.get(orderList.get(3)).getWelsh()); - possibleAnswer5.setText(questions.get(orderList.get(4)).getWelsh()); - possibleAnswer6.setText(questions.get(orderList.get(5)).getWelsh()); + ArrayList answer = new ArrayList<>(); - Collections.shuffle(orderList); //I know that this does not belong here it was moved here for debug purposes. It lives five lines up. - } + answer.add(wordCounterpart); + + Question.checkAnswer(wordSet,answer,isEnglish); - public void checkAnswers() { - String option1 = possibleAnswer1.toString(); - String option2 = possibleAnswer2.toString(); - String option3 = possibleAnswer3.toString(); - String option4 = possibleAnswer4.toString(); - String option5 = possibleAnswer5.toString(); - String option6 = possibleAnswer6.toString(); - - if (option1 == wordCounterpart) { - correct++; - } else incorrect++; - - if (option2 == wordCounterpart) { - correct++; - } else incorrect++; - - if (option3 == wordCounterpart) { - correct++; - } else incorrect++; - - if (option4 == wordCounterpart) { - correct++; - } else incorrect++; - - if (option5 == wordCounterpart) { - correct++; - } else incorrect++; - - if (option6 == wordCounterpart) { - correct++; - } else incorrect++; - - correctAnswer.setText(Integer.toString(correct)); - - wrongAnswer.setText(Integer.toString(incorrect)); wordSet.clear(); - this.prepare(); - } + AssessmentGenerator.goToNextQuestion(); - - private void prepare() { - getWords(Application.dictionary); - Random rd = new Random(); - System.out.println(rd.nextBoolean()); - if (rd.nextBoolean() == true) { - setWordsE(wordSet, orderList); - } else setWordsW(wordSet, orderList); } @Override public void initialize(URL url, ResourceBundle resourceBundle) { - this.prepare(); + setWords(isEnglish); + + correctAnswer.setText(Integer.toString(Question.correctAnswers)); + + wrongAnswer.setText(Integer.toString(Question.wrongAnswers)); } diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/SixMeaningsQuestion.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/SixMeaningsQuestion.java index 1f13dbe..d5384a2 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/SixMeaningsQuestion.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/SixMeaningsQuestion.java @@ -1,11 +1,40 @@ package uk.ac.aber.cs22120.group20.selfassessment; +import uk.ac.aber.cs22120.group20.javafx.Application; import uk.ac.aber.cs22120.group20.json.DictionaryEntry; -public class SixMeaningsQuestion { - private DictionaryEntry correctAnswer; +import java.util.ArrayList; +import java.util.Dictionary; +import java.util.LinkedList; +import java.util.Random; - private SixMeaningsQuestion(DictionaryEntry correctAnswer) { +public class SixMeaningsQuestion extends Question{ + private DictionaryEntry correctAnswer; + private LinkedList dictionary; + + public SixMeaningsQuestion(DictionaryEntry correctAnswer, LinkedList dictionary) { this.correctAnswer = correctAnswer; + this.dictionary = dictionary; + } + + public ArrayList getCorrectAnswer() { + Random rand = new Random(); + + ArrayList result = new ArrayList<>(); + + result.add(correctAnswer); + int successfulAnswersSelected = 0; + while(successfulAnswersSelected<5){ + DictionaryEntry selectedAnswer; + selectedAnswer = dictionary.get(rand.nextInt(dictionary.size()-1)); + if (result.contains(selectedAnswer)){ + continue; + } + result.add(selectedAnswer); + successfulAnswersSelected++; + } + + + return result; } } diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/TranslationController.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/TranslationController.java index 9bad3f2..4b61372 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/TranslationController.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/TranslationController.java @@ -18,19 +18,12 @@ import uk.ac.aber.cs22120.group20.javafx.Application; * Controller for the translationTest fxml file. * * @author Brad Corbett brc9 - * @version 0.9 + * @version 0.1 * */ -public class TranslationController extends Question { - ArrayList practiceList = new ArrayList<>(); - - - /** - * Represents the words that have already been used, and are no longer to be generated. - */ - ArrayList numbersUsed = new ArrayList(); - int correctGuessesInt = 0; - int incorrectGuessesInt = 0; +public class TranslationController { + private ArrayList practiceList = new ArrayList<>(); + public static DictionaryEntry answer = new DictionaryEntry(); /** * Represents the word that will be randomly chosen from the practiceList. @@ -57,8 +50,6 @@ public class TranslationController extends Question { Random rand = new Random(); - boolean englishOrWelsh = false; // False means English to Welsh, true means Welsh to English - /** * Loads the test for the first time, filling the practice list with words from the dictionary, @@ -70,35 +61,23 @@ public class TranslationController extends Question { submitButton.setImage(new Image ("file:src/main/resources/assets/icons/black_icons/50px/right-50.png")); - for(DictionaryEntry entry : Application.dictionary){ - if(entry.isPracticeWord()){ - practiceList.add(entry); - } - } + correctGuesses.setText("Correct Guesses: " + Question.correctAnswers); + incorrectGuesses.setText("Incorrect Guesses: " + Question.wrongAnswers); - chosenWord = (rand.nextInt(practiceList.size())); - numbersUsed.add(chosenWord); - englishOrWelsh = rand.nextBoolean(); - - correctGuesses.setText("Correct Guesses: 0"); - incorrectGuesses.setText("Incorrect Guesses: 0"); - - if(englishOrWelsh){ - wordToTranslate.setText(practiceList.get(chosenWord).getWelsh()); + if(AssessmentGenerator.isEnglish){ + wordToTranslate.setText(answer.getEnglish()); } else{ - wordToTranslate.setText(practiceList.get(chosenWord).getEnglish()); + wordToTranslate.setText(answer.getWelsh()); } } /** - * Takes the word that the user has entered as their attempt at translate, compares - * it to the correct translation, and depending on if it is correct or not, increment how many - * right or wrong answers they have so far. After checking if the user got it right, - * it will generate a new word for the user to translate, provided they have words left to translate. + * Takes the word the user inputs and compares it to the correct answer using + * the checkAnswer function in the QuestionClass. */ @FXML void translateWord() { @@ -107,37 +86,12 @@ public class TranslationController extends Question { usersInput.add(translationBox.getText()); ArrayList correctTranslation = new ArrayList<>(); - correctTranslation.add(practiceList.get(chosenWord)); + correctTranslation.add(answer); - checkAnswer(correctTranslation, usersInput, englishOrWelsh); + Question.checkAnswer(correctTranslation, usersInput, AssessmentGenerator.isEnglish); + + AssessmentGenerator.goToNextQuestion(); - - - - correctGuesses.setText("Correct Guesses: " + correctAnswer); - incorrectGuesses.setText("Incorrect Guesses: " + wrongAnswer); - - - - - - do{ - chosenWord = (rand.nextInt(practiceList.size())); - }while((numbersUsed.contains(chosenWord)) && numbersUsed.size() < practiceList.size()); - - numbersUsed.add(chosenWord); - - if(numbersUsed.size() > practiceList.size()){ - wordToTranslate.setText("Test Complete"); - submitButton.setVisible(false); - } - - if(englishOrWelsh){ - wordToTranslate.setText(practiceList.get(chosenWord).getWelsh()); - } - else{ - wordToTranslate.setText(practiceList.get(chosenWord).getEnglish()); - } } } diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/TranslationQuestion.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/TranslationQuestion.java index 7088458..432e896 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/TranslationQuestion.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/selfassessment/TranslationQuestion.java @@ -4,10 +4,14 @@ import uk.ac.aber.cs22120.group20.json.DictionaryEntry; import java.util.LinkedList; -public class TranslationQuestion { - DictionaryEntry correctAnswer; +public class TranslationQuestion extends Question { + private DictionaryEntry correctAnswer; public TranslationQuestion(DictionaryEntry correctAnswer){ this.correctAnswer = correctAnswer; } + + public DictionaryEntry getCorrectAnswer() { + return correctAnswer; + } } diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/AddWordTest.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/AddWordTest.java deleted file mode 100644 index 63ad0af..0000000 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/AddWordTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package uk.ac.aber.cs22120.group20.test; - -/** - * Class that contains methods to test that the Add Word Screen only saves words to the dictionary when - * all fields are filled and the entry does not already exist in as an entry in the dictionary. - * @Author - * @Version - * @See - */ -public class AddWordText { - - /** - * Test to check if the correct error is thrown when there are one or more blank fields and that the entry - * does not save to the dictionary. - */ - @test - public void testBlankFields() { - - } - - /** - * Test to check if the correct error is thrown when the entry attempting to be added already exists within - * the dictionary and that the entry is not saved. - */ - @test - public void testDuplicateEntry() { - - } -} \ No newline at end of file diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/FlashcardControllerTest.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/FlashcardControllerTest.java new file mode 100644 index 0000000..0e1637c --- /dev/null +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/FlashcardControllerTest.java @@ -0,0 +1,5 @@ +import static org.junit.jupiter.api.Assertions.*; + +class FlashcardControllerTest { + +} \ No newline at end of file diff --git a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/JSONTest.java b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/JSONTest.java index 5317909..3cefe57 100644 --- a/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/JSONTest.java +++ b/src/Welsh Vocabulary Tutor/src/main/java/uk/ac/aber/cs22120/group20/test/JSONTest.java @@ -1,5 +1,19 @@ package uk.ac.aber.cs22120.group20.test; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.Assert; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import uk.ac.aber.cs22120.group20.json.DictionaryEntry; +import uk.ac.aber.cs22120.group20.json.JsonProcessing; + +import java.io.File; +import java.io.FileWriter; +import java.util.Arrays; +import java.util.LinkedList; + /** * Class that contains methods which will be used to test that the JSON package classes are * correctly loading and saving to and from the JSON file. @@ -8,21 +22,55 @@ package uk.ac.aber.cs22120.group20.test; * @See */ public class JSONTest { + LinkedList testList; + LinkedList loadedList; + File testFile; + JsonProcessing processor = new JsonProcessing(); + + + @Before + public void setupTest() { + + // Populate a test list with DictionaryEntrys that is to be used for the loading/saving tests. + testList = new LinkedList<>(Arrays.asList(new DictionaryEntry("abbey","abaty","nm"), new DictionaryEntry("about to", "ar fin", "other"), + new DictionaryEntry("above","uwchben","other"), new DictionaryEntry("abroad","dramor","other"), + new DictionaryEntry("abstract","haniaethol","other"))); + + // Create a JSON test file in the test package + testFile = new File("src/main/java/uk/ac/aber/cs22120/group20/test/jsontest.json"); + + // Save the testList to the testFile. + processor.writeOutJson("src/main/java/uk/ac/aber/cs22120/group20/test/jsontest.json", testList); + } /** * JUnit test to check that the JSON file has been correctly loaded. */ - @test public void testLoad(){ + @Test + public void testLoad(){ + // Load the DictionaryEntry's from testFile and check if the loaded list matches the test list. + loadedList = processor.readInJson(testFile); + Assert.assertArrayEquals(testList.toArray(),loadedList.toArray()); } /** * JUnit test to check that any changes to the list of definitions are * updated and saved to the JSON file accordingly. */ - @test public void testSave(){ + @Test public void testSave(){ + // Add an additional word to the testList and save it to jsontest. + testList.add(new DictionaryEntry("beer", "cwrw", "nm")); + processor.writeOutJson("src/main/java/uk/ac/aber/cs22120/group20/test/jsontest.json", testList); + // Load the DictionaryEntry's back from the file and check that they match the testList. + loadedList = processor.readInJson(testFile); + Assert.assertArrayEquals(testList.toArray(), loadedList.toArray()); } + @After + public void deleteFile() { + testFile.delete(); + } } diff --git a/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/sixmeanings.fxml b/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/sixmeanings.fxml index 3c6e533..a19ddb1 100644 --- a/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/sixmeanings.fxml +++ b/src/Welsh Vocabulary Tutor/src/main/resources/uk/ac/aber/cs22120/group20/sixmeanings.fxml @@ -23,17 +23,17 @@ - - - - - -