-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSearchCatalogue.java
More file actions
122 lines (101 loc) · 4.65 KB
/
SearchCatalogue.java
File metadata and controls
122 lines (101 loc) · 4.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package MediaCatalogue;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class SearchCatalogue extends Application {
private TableView<ObservableList<String>> searchResultView = new TableView<>();
private TextField searchField;
@Override
public void start(Stage primaryStage) {
searchField = new TextField();
searchField.setPromptText("Enter search query");
Button searchButton = new Button("Search");
searchButton.setOnAction(event -> searchCatalog());
VBox root = new VBox(10);
root.setAlignment(Pos.CENTER);
root.getChildren().addAll(searchField, searchButton, searchResultView);
Scene scene = new Scene(root, 600, 400);
primaryStage.setScene(scene);
primaryStage.setTitle("Search Catalogue");
primaryStage.show();
}
private void searchCatalog() {
String query = searchField.getText().toLowerCase();
ObservableList<ObservableList<String>> searchResults = FXCollections.observableArrayList();
try (BufferedReader gameReader = new BufferedReader(new FileReader("game.csv"));
BufferedReader movieReader = new BufferedReader(new FileReader("movie.csv"));
BufferedReader musicAlbumReader = new BufferedReader(new FileReader("musicAlbum.csv"));
BufferedReader bookReader = new BufferedReader(new FileReader("book.csv"))) {
searchResults.addAll(searchFile(gameReader, query, "Platform"));
searchResults.addAll(searchFile(movieReader, query, "Duration"));
searchResults.addAll(searchFile(musicAlbumReader, query, "NumTracks"));
searchResults.addAll(searchFile(bookReader, query, "NumPages"));
} catch (IOException e) {
e.printStackTrace();
}
populateSearchResults(searchResults);
}
private ObservableList<ObservableList<String>> searchFile(BufferedReader reader, String query, String otherInfoColumn) throws IOException {
ObservableList<ObservableList<String>> results = FXCollections.observableArrayList();
String line;
while ((line = reader.readLine()) != null) {
String[] values = line.split(",");
for (String value : values) {
if (value.toLowerCase().contains(query)) {
ObservableList<String> row = FXCollections.observableArrayList(values);
row.add(otherInfoColumn);
results.add(row);
break;
}
}
}
return results;
}
private void populateSearchResults(ObservableList<ObservableList<String>> searchResults) {
searchResultView.getItems().clear();
searchResultView.getColumns().clear();
if (!searchResults.isEmpty()) {
for (String columnName : searchResults.get(0)) {
final int columnIndex = searchResults.get(0).indexOf(columnName);
if (columnIndex <= 4) {
TableColumn<ObservableList<String>, String> column = new TableColumn<>();
switch (columnIndex) {
case 0:
column.setText("Title");
break;
case 1:
column.setText("Rating");
break;
case 2:
column.setText("Genre");
break;
case 3:
column.setText("Year");
break;
case 4:
column.setText("Publisher");
break;
}
column.setCellValueFactory(data -> new javafx.beans.property.SimpleStringProperty(data.getValue().get(columnIndex)));
searchResultView.getColumns().add(column);
}
}
searchResultView.setItems(searchResults);
}
}
public static void main(String[] args) {
launch(args);
}
}