Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,28 @@
<version>7.0.3</version>
<scope>compile</scope>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.38</version>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>2.4</version>
</dependency>
</dependencies>

<pluginRepositories>
<pluginRepository>
<id>jitpack</id>
<url>https://jitpack.io</url>
</pluginRepository>
<pluginRepository>
<id>maven-central</id>
<url>https://repo.maven.apache.org/maven2</url>
</pluginRepository>
</pluginRepositories>

<build>
Expand All @@ -55,7 +70,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.3.0-SNAPSHOT</version>
<version>3.3.0</version>

<configuration>
<artifactSet>
Expand Down
23 changes: 20 additions & 3 deletions src/main/java/xyz/sirblobman/votifier/tester/VoteForm.form
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="xyz.sirblobman.votifier.tester.VoteForm">
<grid id="27dc6" binding="panel1" default-binding="true" layout-manager="GridLayoutManager" row-count="9" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<grid id="27dc6" binding="panel1" default-binding="true" layout-manager="GridLayoutManager" row-count="10" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<xy x="20" y="20" width="500" height="400"/>
<xy x="20" y="20" width="517" height="386"/>
</constraints>
<properties>
<preferredSize width="600" height="600"/>
Expand Down Expand Up @@ -121,7 +121,7 @@
</hspacer>
<component id="58a21" class="javax.swing.JButton" binding="submitButton" default-binding="true">
<constraints>
<grid row="8" column="0" row-span="1" col-span="2" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
<grid row="9" column="0" row-span="1" col-span="2" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text value="Submit"/>
Expand All @@ -135,9 +135,26 @@
</constraints>
<properties>
<lineWrap value="true"/>
<text value=""/>
<wrapStyleWord value="true"/>
</properties>
</component>
<component id="fa390" class="javax.swing.JCheckBox" binding="saveAfterClose">
<constraints>
<grid row="8" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text value=""/>
</properties>
</component>
<component id="b0a1b" class="javax.swing.JLabel">
<constraints>
<grid row="8" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text value="Save after close"/>
</properties>
</component>
</children>
</grid>
</form>
130 changes: 97 additions & 33 deletions src/main/java/xyz/sirblobman/votifier/tester/VoteForm.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,14 @@

import java.awt.event.ActionEvent;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import java.util.logging.Logger;
import javax.swing.*;

public class VoteForm {
public static void main(String[] args) {
JFrame frame = new JFrame("VoteForm");
frame.setContentPane(new VoteForm().panel1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}

Logger logger = Logger.getLogger(VoteForm.class.getName());

private JFrame frame;

private JPanel panel1;
private JTextField textFieldHostName;
private JTextField textFieldPort;
Expand All @@ -27,8 +19,58 @@ public static void main(String[] args) {
private JTextField textFieldTimestamp;
private JTextArea textAreaPublicKey;
private JButton submitButton;

private JCheckBox saveAfterClose;

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
try {
new VoteForm();
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "An error occurred while initializing the form: " + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
});
}


public VoteForm() {
JFrame frame = new JFrame("VoteForm");
frame.setContentPane(this.panel1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);

frame.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
if(VoteForm.this.saveAfterClose.isSelected()) {
String hostName = textFieldHostName.getText();
String portString = textFieldPort.getText();
String publicKey = textAreaPublicKey.getText();
String serviceName = textFieldServiceName.getText();
String username = textFieldUsername.getText();
String address = textFieldAddress.getText();
String timestampString = textFieldTimestamp.getText();

int port;
try {
port = Integer.parseInt(portString);
} catch (NumberFormatException e) {
port = 8192; // Default port
}

long timestamp;
try {
timestamp = Long.parseLong(timestampString);
} catch (NumberFormatException e) {
timestamp = System.currentTimeMillis(); // Default to current time
}

VoteFormData data = new VoteFormData(hostName, port, publicKey, serviceName, username, address, timestamp, true);
data.save();
}
}
});
resetForm();
submitButton.addActionListener(this::onSubmit);
}
Expand All @@ -38,14 +80,38 @@ private void print(String message) {
}

private void displayError(String message) {
JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE);
JOptionPane.showMessageDialog(null, message + " (Check console for more details)", "Error", JOptionPane.ERROR_MESSAGE);
}

private void resetForm() {
if(new java.io.File("votifier_tester.yml").exists()) {
try {
String yamlContent = new String(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get("votifier_tester.yml")));
VoteFormData data = VoteFormData.fromYaml(yamlContent);

this.textFieldHostName.setText(data.getHostName());
this.textFieldPort.setText(Integer.toString(data.getPort()));
this.textAreaPublicKey.setText(data.getPublicKey());
this.textFieldServiceName.setText(data.getServiceName());
this.textFieldUsername.setText(data.getUsername());
this.textFieldAddress.setText(data.getAddress());
this.textFieldTimestamp.setText(Long.toString(data.getTimestamp()));
this.saveAfterClose.setSelected(data.isSaveAfterClose());
} catch (Exception e) {
displayError("Failed to load votifier_tester.yml: " + e.getMessage());
logger.severe("Failed to load votifier_tester.yml: " + e);
this.loadDefaultValues();
}
} else {
this.loadDefaultValues();
}
}

private void loadDefaultValues() {
this.textFieldHostName.setText("");
this.textFieldPort.setText("8192");
this.textAreaPublicKey.setText("");

this.textFieldServiceName.setText("SirBlobman_Votifier_Testing");
this.textFieldUsername.setText("Steve");
this.textFieldAddress.setText("127.0.0.1");
Expand Down Expand Up @@ -107,19 +173,15 @@ private void onSubmit(ActionEvent e) {
displayError("Timestamp must be a valid millisecond time stamp.");
return;
}

print("Server Information:");
print(" Host Name: " + hostname);
print(" Port: " + port);
print(" Public Key: " + publicKey);

print("Vote Information:");
print(" Service Name: " + serviceName);
print(" Username: " + username);
print(" Address: " + address);
print(" Timestamp: " + timestamp);

print("");

logger.info("Submitting vote with the following details:");
logger.info(" Host Name: " + hostname);
logger.info(" Port: " + port);
logger.info(" Public Key: " + publicKey);
logger.info(" Service Name: " + serviceName);
logger.info(" Username: " + username);
logger.info(" Address: " + address);
logger.info(" Timestamp: " + timestamp);

Vote vote = new Vote(serviceName, username, address, timestamp);
Server server = new Server(hostname, port, publicKey);
Expand All @@ -128,11 +190,13 @@ private void onSubmit(ActionEvent e) {
this.submitButton.setEnabled(false);
server.sendVote(vote);
} catch(IOException ex) {
ex.printStackTrace();
logger.severe("Failed to send vote: " + ex.getMessage());
displayError(ex.getMessage());
}

resetForm();

if(!this.saveAfterClose.isSelected()) {
resetForm();
}
this.submitButton.setEnabled(true);
}

Expand Down
59 changes: 59 additions & 0 deletions src/main/java/xyz/sirblobman/votifier/tester/VoteFormData.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package xyz.sirblobman.votifier.tester;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.yaml.snakeyaml.LoaderOptions;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class VoteFormData {
String hostName;
int port;
String publicKey;
String serviceName;
String username;
String address;
long timestamp;
boolean saveAfterClose;

void save() {
File file = new File("votifier_tester.yml");
if(!file.exists()) {
try {
file.createNewFile();
} catch (Exception e) {
throw new RuntimeException("Failed to create votifier_tester.yml file", e);
}
}
Yaml yaml = new Yaml();
try {
yaml.dump(this, new java.io.FileWriter(file));
} catch (Exception e) {
throw new RuntimeException("Failed to save data to votifier_tester.yml", e);
}

}
public static VoteFormData fromYaml(String yaml) {
LoaderOptions loaderOptions = new LoaderOptions();
loaderOptions.setTagInspector(tag -> tag.getClassName().equals(VoteFormData.class.getName()));
Constructor constructor = new Constructor(VoteFormData.class, loaderOptions);
Yaml yamlParser = new Yaml(constructor);
try {
return yamlParser.loadAs(yaml, VoteFormData.class);
} catch (Exception e) {
System.out.println(e);
throw new RuntimeException("Failed to parse YAML data", e);
}
}
}
Binary file added src/main/resources/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.