Skip to content

Commit 2c7dd4d

Browse files
authored
Merge pull request #1 from Team846/apBranch
Merging 2024 offseason work New features: - Automatically saves log files - Dialog to open files - Error messages popup
2 parents 73d8b71 + d4fc6e0 commit 2c7dd4d

14 files changed

Lines changed: 310 additions & 71 deletions

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
target
22
target/classes/com/funkylogclient/Message.class
33
pom.xml
4-
4+
logs846

src/main/java/com/funkylogclient/FunkyLogSorter.java

Lines changed: 75 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33
import java.io.File;
44
import java.io.FileWriter;
55
import java.io.IOException;
6-
import java.time.LocalDate;
76
import java.time.LocalDateTime;
87
import java.time.format.DateTimeFormatter;
9-
import java.util.ArrayList;
10-
import java.util.Comparator;
11-
import java.util.LinkedHashSet;
128
import java.util.LinkedList;
139

10+
import javafx.animation.PauseTransition;
11+
import javafx.scene.control.Alert;
12+
import javafx.scene.control.Alert.AlertType;
1413
import javafx.stage.FileChooser;
1514
import javafx.stage.Stage;
15+
import javafx.util.Duration;
1616

1717
public class FunkyLogSorter {
1818
private static int MAX_LEN = 1200;
@@ -26,6 +26,11 @@ public class FunkyLogSorter {
2626
public static LinkedList<Message> messages = new LinkedList<>();
2727
public static LinkedList<Message> filtered = new LinkedList<>();
2828

29+
public static int num_open_alerts = 0;
30+
31+
public static String log_file_directory = System.getProperty("user.dir") + "/logs846";
32+
public static FileWriter log_file;
33+
2934
public static void clear() {
3035
messages.clear();
3136
filtered.clear();
@@ -35,7 +40,7 @@ public static void reFilter() {
3540
filtered.clear();
3641

3742
for (Message m : messages) {
38-
if (!checkMessageBySearch(m)) {
43+
if (!checkMessageBySearch(m)) {
3944
continue;
4045
} else if (allowLogs && m.isLog()) {
4146
filtered.add(m);
@@ -48,7 +53,8 @@ public static void reFilter() {
4853
}
4954

5055
private static boolean checkMessageBySearch(Message msg) {
51-
if (searchTerm.equals("")) return true;
56+
if (searchTerm.equals(""))
57+
return true;
5258

5359
return msg.getSender().contains(searchTerm) || msg.getContent().contains(searchTerm);
5460
}
@@ -73,7 +79,39 @@ public static void addMessage(Message m) {
7379

7480
messages.add(m);
7581

76-
if (!checkMessageBySearch(m)) {
82+
if (log_file != null) {
83+
try {
84+
log_file.write(m.toString() + "\n");
85+
} catch (IOException exc) {
86+
exc.printStackTrace();
87+
}
88+
}
89+
90+
if (m.isError()) {
91+
if (num_open_alerts < 5) {
92+
Alert alert = new Alert(AlertType.ERROR);
93+
alert.setTitle("FunkyLogs Error Notification");
94+
alert.setHeaderText(m.getSender());
95+
alert.setContentText(m.getContent());
96+
97+
alert.setX(alert.getX() + (num_open_alerts * 70));
98+
alert.setY(alert.getY() + (num_open_alerts * 70));
99+
100+
alert.show();
101+
102+
PauseTransition delay = new PauseTransition(Duration.seconds(5));
103+
104+
delay.setOnFinished(event -> {
105+
alert.close();
106+
FunkyLogSorter.num_open_alerts--;
107+
});
108+
109+
delay.play();
110+
111+
}
112+
}
113+
114+
if (!checkMessageBySearch(m)) {
77115

78116
} else if (allowLogs && m.isLog()) {
79117
filtered.add(m);
@@ -114,6 +152,31 @@ public static void logAllMessages() {
114152
System.out.println("END\n");
115153
}
116154

155+
public static String makeLogFileName() {
156+
LocalDateTime dateTime = LocalDateTime.now();
157+
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss");
158+
String dateString = dateTime.format(formatter);
159+
return dateString + ".log846";
160+
}
161+
162+
public static String getLogFileDirectory() {
163+
return log_file_directory;
164+
}
165+
166+
public static void makeNewLogFile() {
167+
try {
168+
File directory = new File(log_file_directory);
169+
if (!directory.exists()) {
170+
directory.mkdir();
171+
}
172+
if (log_file != null)
173+
log_file.close();
174+
log_file = new FileWriter(log_file_directory + "/" + makeLogFileName());
175+
} catch (IOException exc) {
176+
exc.printStackTrace();
177+
}
178+
}
179+
117180
public static String stringifyAllMessages() {
118181
StringBuilder result = new StringBuilder();
119182
for (Message m : messages) {
@@ -127,14 +190,14 @@ public static void saveToFile(Stage pstage) {
127190
FileChooser fileChooser = new FileChooser();
128191
fileChooser.setTitle("Save Log File");
129192

193+
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("FunkyLogs File", ".log846");
194+
fileChooser.getExtensionFilters().add(extFilter);
195+
130196
LocalDateTime dateTime = LocalDateTime.now();
131197
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss");
132198
String dateString = dateTime.format(formatter);
133199

134-
fileChooser.setInitialFileName(dateString + ".txt");
135-
136-
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("Text documents", ".txt");
137-
fileChooser.getExtensionFilters().add(extFilter);
200+
fileChooser.setInitialFileName(dateString + ".log846");
138201

139202
File file = fileChooser.showSaveDialog(pstage);
140203

@@ -159,7 +222,7 @@ public static void createTestWarning(Stage pstage) {
159222
}
160223

161224
public static void createTestError(Stage pstage) {
162-
addMessage(new Message("2;TestSender;This is an Error;0.0;0;0.0"));
225+
addMessage(new Message("2;TestSender;This is an Error;0.0;0;0.0"));
163226
logAllMessages();
164227
}
165228

src/main/java/com/funkylogclient/FunkyLogs.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public class FunkyLogs extends Application {
3636

3737
@Override
3838
public void start(Stage primaryStage) {
39+
FunkyLogSorter.makeNewLogFile();
3940
primaryStage.setTitle("FunkyLogs v1.0.0");
4041

4142
root = new BorderPane();
@@ -72,22 +73,29 @@ public void start(Stage primaryStage) {
7273
mScrollPane.setFitToWidth(true);
7374
mScrollPane.setFitToHeight(true);
7475
messageZone.heightProperty().addListener((observable, oldValue, newValue) -> {
75-
if (FunkyLogs.auto_scroll) mScrollPane.setVvalue(1.0);
76+
if (FunkyLogs.auto_scroll)
77+
mScrollPane.setVvalue(1.0);
7678
});
7779
mScrollPane.setStyle(Styles.SCROLL_PANE_STYLE);
7880

7981
center.getChildren().add(mScrollPane);
8082

8183
root.setCenter(center);
8284

83-
root.setRight(RightSidebar.getRightSidebar(getClass().getResource("logo.png"),
84-
getClass().getResource("exit.png"), primaryStage,
85-
(observable, prev, value) -> { FunkyLogs.auto_scroll = value; },
86-
(observable, prev, value) -> { FunkyLogs.serverIP = value; },
87-
(observable, prev, value) -> { FunkyLogs.port = Integer.parseInt(value); },
88-
(ev) -> {
89-
UDPClient.setConnectionAddress(FunkyLogs.serverIP, FunkyLogs.port);
90-
}));
85+
root.setRight(RightSidebar.getRightSidebar(getClass().getResource("logo.png"),
86+
getClass().getResource("exit.png"), primaryStage,
87+
(observable, prev, value) -> {
88+
FunkyLogs.auto_scroll = value;
89+
},
90+
(observable, prev, value) -> {
91+
FunkyLogs.serverIP = value;
92+
},
93+
(observable, prev, value) -> {
94+
FunkyLogs.port = Integer.parseInt(value);
95+
},
96+
(ev) -> {
97+
UDPClient.setConnectionAddress(FunkyLogs.serverIP, FunkyLogs.port);
98+
}));
9199

92100
Scene scene = new Scene(root, Color.TRANSPARENT);
93101
primaryStage.initStyle(StageStyle.TRANSPARENT);
@@ -109,7 +117,7 @@ protected Void call() throws Exception {
109117
}
110118
Thread.sleep(200);
111119
try {
112-
FunkyLogs.updateMessageZone();
120+
FunkyLogs.updateMessageZone(primaryStage);
113121
} catch (Exception exc) {
114122
System.out.println(exc);
115123
}
@@ -123,7 +131,7 @@ protected Void call() throws Exception {
123131
updateThread.start();
124132
}
125133

126-
private static void updateMessageZone() {
134+
private static void updateMessageZone(Stage stage) {
127135
Platform.runLater(() -> {
128136
FunkyLogs.messageZone.getChildren().clear();
129137
@SuppressWarnings("unchecked")
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.funkylogclient;
2+
3+
import java.io.File;
4+
import java.io.FileNotFoundException;
5+
import java.util.LinkedList;
6+
import java.util.Scanner;
7+
8+
import javafx.stage.Stage;
9+
import javafx.stage.FileChooser;
10+
11+
public class LogFileProcesser {
12+
13+
private static Scanner input;
14+
private static File file;
15+
16+
public static void selectFile(Stage stage) {
17+
try {
18+
FileChooser fileChooser = new FileChooser();
19+
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("FunkyLogs File", "*.log846");
20+
fileChooser.getExtensionFilters().add(extFilter);
21+
fileChooser.setTitle("Open Log File");
22+
23+
fileChooser.setInitialDirectory(new File(FunkyLogSorter.getLogFileDirectory()));
24+
25+
file = fileChooser.showOpenDialog(stage);
26+
readFile(file, stage);
27+
} catch (Exception e) {
28+
System.out.println(e.getMessage());
29+
}
30+
31+
}
32+
33+
public void setFile(String pathname) {
34+
file = new File(pathname);
35+
}
36+
37+
public File getFile() {
38+
if (file != null)
39+
System.out.println(file.getAbsolutePath());
40+
return file;
41+
}
42+
43+
public static void readFile(File file, Stage primaryStage) {
44+
try {
45+
input = new Scanner(file);
46+
} catch (FileNotFoundException ex) {
47+
System.out.println("File not found");
48+
System.exit(1);
49+
}
50+
LinkedList<Message> messages = new LinkedList<Message>();
51+
while (input.hasNextLine()) {
52+
Message log = new Message(input.nextLine());
53+
if (log.getValid()) {
54+
messages.add(log);
55+
}
56+
}
57+
SavedFunkyLogs.displaySavedLogs(messages, primaryStage, file.getName());
58+
}
59+
60+
}

src/main/java/com/funkylogclient/Message.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22

33
import javafx.geometry.Insets;
44
import javafx.scene.Node;
5-
import javafx.scene.layout.Background;
65
import javafx.scene.layout.HBox;
76
import javafx.scene.layout.VBox;
8-
import javafx.scene.shape.Rectangle;
97
import javafx.scene.text.Text;
108

119
public class Message {
@@ -18,20 +16,25 @@ public class Message {
1816
private double period_timestamp;
1917
private int period;
2018

19+
private boolean isValid;
20+
2121
public Message(String unparsed) {
2222
try {
2323
String[] split = unparsed.split(";");
24-
2524
type = Integer.parseInt(split[0]);
2625
time = Double.parseDouble(split[3]);
2726
sender = split[1];
2827
content = split[2];
28+
29+
isValid = true;
2930
} catch (Exception exc) {
3031
System.out.println("Error in parsing message: " + unparsed);
3132

3233
content = new String();
3334
sender = new String("Unknown");
3435
time = 0.0;
36+
37+
isValid = false;
3538
}
3639
}
3740

@@ -44,6 +47,10 @@ public Message(int type, String sender, String content, double time, int period,
4447
this.period_timestamp = period_timestamp;
4548
}
4649

50+
public Boolean getValid() {
51+
return isValid;
52+
}
53+
4754
public String getContent() {
4855
return content;
4956
}
@@ -79,8 +86,9 @@ public boolean isError() {
7986
@Override
8087
public String toString() {
8188
String output = "";
82-
output += type + ";" + sender + ";" + content + ";" + "<" + time + ">" + ";" + period + ";" + "<" + period_timestamp + ">";
83-
89+
output += type + ";" + sender + ";" + content + ";" + time + ";" + period + ";"
90+
+ period_timestamp;
91+
8492
return output;
8593
}
8694

0 commit comments

Comments
 (0)