Ui stuff
This commit is contained in:
14
src/main/java/vslab1/src/Input/Commands/ECommandType.java
Normal file
14
src/main/java/vslab1/src/Input/Commands/ECommandType.java
Normal file
@@ -0,0 +1,14 @@
|
||||
/**
|
||||
* @author Aaron Moser
|
||||
*/
|
||||
package vslab1.src.Input.Commands;
|
||||
|
||||
public enum ECommandType {
|
||||
Exit,
|
||||
ShowNodes,
|
||||
ShowFiles,
|
||||
PublishFile,
|
||||
GetFile,
|
||||
AddPeer,
|
||||
Help
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
/**
|
||||
* @author Aaron Moser
|
||||
*/
|
||||
package vslab1.src.Input.Commands;
|
||||
|
||||
public interface ExecutableCommand {
|
||||
public String toString();
|
||||
public ECommandType getType();
|
||||
public void execute();
|
||||
}
|
||||
24
src/main/java/vslab1/src/Input/Commands/ExitCommand.java
Normal file
24
src/main/java/vslab1/src/Input/Commands/ExitCommand.java
Normal file
@@ -0,0 +1,24 @@
|
||||
/**
|
||||
* @author Aaron Moser
|
||||
*/
|
||||
package vslab1.src.Input.Commands;
|
||||
|
||||
import vslab1.src.Terminatable;
|
||||
|
||||
public record ExitCommand(Terminatable[] threadsToTerminate) implements ExecutableCommand {
|
||||
|
||||
@Override
|
||||
public ECommandType getType() {
|
||||
return ECommandType.Exit;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
for (Terminatable thread : threadsToTerminate) {
|
||||
if (thread != null) {
|
||||
thread.terminate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7,6 +7,7 @@ package vslab1.src.Input;
|
||||
import vslab1.src.Terminatable;
|
||||
import vslab1.src.FileReaderWriter.FileReaderWriter;
|
||||
import vslab1.src.FileReaderWriter.FileReaderWriter.EUpdateFlag;
|
||||
import vslab1.src.Input.Commands.ExitCommand;
|
||||
import vslab1.src.Peers.EOnlineState;
|
||||
import vslab1.src.Peers.Peer;
|
||||
import vslab1.src.Sending.SendingQueue;
|
||||
@@ -20,6 +21,8 @@ import java.io.File;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Scanner;
|
||||
|
||||
@@ -64,7 +67,9 @@ public class InputThread extends Thread implements Terminatable {
|
||||
String command = inputArgs[0];
|
||||
|
||||
switch (command) {
|
||||
case "exit": {
|
||||
case "Exit": {
|
||||
Terminatable[] threadsArray = {senderThread, receiverThread, requestExecuterThread, timeoutThread, this};
|
||||
new ExitCommand(null).execute();
|
||||
// Terminates sender thread, receiver thread and this thread.
|
||||
if (senderThread != null) {
|
||||
senderThread.terminate();
|
||||
@@ -175,13 +180,20 @@ public class InputThread extends Thread implements Terminatable {
|
||||
FileReaderWriter.getThisPeer(EUpdateFlag.Update);
|
||||
}
|
||||
}break;
|
||||
case "Help": {
|
||||
if (inputArgs.length > 1) {
|
||||
System.err.println("Too many arguments.");
|
||||
} else {
|
||||
|
||||
}
|
||||
}break;
|
||||
default: {
|
||||
System.err.println("Unknown command.");
|
||||
}break;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import vslab1.src.Sending.SenderThread;
|
||||
import vslab1.src.Sending.SendingQueue;
|
||||
import vslab1.src.Timeout.JobList;
|
||||
import vslab1.src.Timeout.TimeoutThread;
|
||||
import vslab1.src.View.MainFrame;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
@@ -25,6 +26,8 @@ public class Main {
|
||||
|
||||
FileReaderWriter.createInfoFilesIfNotExisting(Constants.PEERCONFIGFILEPATH);
|
||||
|
||||
MainFrame frame = new MainFrame();
|
||||
|
||||
DatagramSocket datagramSocket = NetworkController.getSocket(inputScanner);
|
||||
|
||||
SendingQueue sendingQueue = new SendingQueue();
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
/**
|
||||
* @author Aaron Moser
|
||||
*/
|
||||
package vslab1.src.View.ColorTheme;
|
||||
|
||||
public enum EColorTheme {
|
||||
Light,
|
||||
Dark,
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package vslab1.src.View.Language.Constants;
|
||||
|
||||
public class LanguageConstants {
|
||||
public final static String[] titleStrings = {
|
||||
"Peer to Peer Dateifreigabe",
|
||||
"Peer to Peer Filesharing"
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
9
src/main/java/vslab1/src/View/Language/ELanguage.java
Normal file
9
src/main/java/vslab1/src/View/Language/ELanguage.java
Normal file
@@ -0,0 +1,9 @@
|
||||
/**
|
||||
* @author Aaron Moser
|
||||
*/
|
||||
package vslab1.src.View.Language;
|
||||
|
||||
public enum ELanguage {
|
||||
German,
|
||||
English,
|
||||
}
|
||||
49
src/main/java/vslab1/src/View/MainFrame.java
Normal file
49
src/main/java/vslab1/src/View/MainFrame.java
Normal file
@@ -0,0 +1,49 @@
|
||||
/**
|
||||
* @author Aaron Moser
|
||||
*/
|
||||
package vslab1.src.View;
|
||||
|
||||
import java.awt.Dimension;
|
||||
import java.awt.GridBagLayout;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
|
||||
import vslab1.src.View.Language.ELanguage;
|
||||
import vslab1.src.View.Panels.EPanelType;
|
||||
import vslab1.src.View.Panels.PanelOrganizer;
|
||||
import vslab1.src.View.Panels.StartPanel.StartPanel;
|
||||
|
||||
public class MainFrame extends JFrame {
|
||||
|
||||
private Settings settings = null;
|
||||
|
||||
private PanelOrganizer panelOrganizer = null;
|
||||
|
||||
public MainFrame() {
|
||||
this.settings = new Settings(ELanguage.English);
|
||||
|
||||
this.panelOrganizer = new PanelOrganizer(new StartPanel(settings));
|
||||
|
||||
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
this.setTitle("Peer to Peer Filesharing");
|
||||
//this.setLocation(null);
|
||||
|
||||
this.setMainPanelTo(EPanelType.StartPanel);
|
||||
}
|
||||
|
||||
public void setMainPanelTo(EPanelType panelType) {
|
||||
switch (panelType) {
|
||||
case StartPanel: {
|
||||
this.getContentPane().removeAll();
|
||||
this.getContentPane().add(panelOrganizer.startPanel());
|
||||
}break;
|
||||
default: {
|
||||
System.err.println("setMainPanelTo was called with unknown panel type.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.setSize(new Dimension(1400, 700));
|
||||
this.update(getGraphics());
|
||||
this.setVisible(true);
|
||||
}
|
||||
}
|
||||
8
src/main/java/vslab1/src/View/Panels/EPanelType.java
Normal file
8
src/main/java/vslab1/src/View/Panels/EPanelType.java
Normal file
@@ -0,0 +1,8 @@
|
||||
/**
|
||||
* @author Aaron Moser
|
||||
*/
|
||||
package vslab1.src.View.Panels;
|
||||
|
||||
public enum EPanelType {
|
||||
StartPanel,
|
||||
}
|
||||
9
src/main/java/vslab1/src/View/Panels/Panel.java
Normal file
9
src/main/java/vslab1/src/View/Panels/Panel.java
Normal file
@@ -0,0 +1,9 @@
|
||||
/**
|
||||
* @author Aaron Moser
|
||||
*/
|
||||
package vslab1.src.View.Panels;
|
||||
|
||||
public interface Panel {
|
||||
public void updateLanguage();
|
||||
public void updateColorTheme();
|
||||
}
|
||||
28
src/main/java/vslab1/src/View/Panels/PanelOrganizer.java
Normal file
28
src/main/java/vslab1/src/View/Panels/PanelOrganizer.java
Normal file
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* @author Aaron Moser
|
||||
*/
|
||||
package vslab1.src.View.Panels;
|
||||
|
||||
import vslab1.src.View.ColorTheme.EColorTheme;
|
||||
import vslab1.src.View.Panels.StartPanel.StartPanel;
|
||||
|
||||
public record PanelOrganizer(StartPanel startPanel) {
|
||||
public Panel getPanelInstance(EPanelType panelType) {
|
||||
switch (panelType) {
|
||||
case StartPanel: {
|
||||
return startPanel;
|
||||
}
|
||||
default: {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void updateLanguage() {
|
||||
startPanel.updateLanguage();
|
||||
}
|
||||
|
||||
public void updateColorTheme() {
|
||||
startPanel.updateColorTheme();
|
||||
}
|
||||
}
|
||||
119
src/main/java/vslab1/src/View/Panels/StartPanel/StartPanel.java
Normal file
119
src/main/java/vslab1/src/View/Panels/StartPanel/StartPanel.java
Normal file
@@ -0,0 +1,119 @@
|
||||
/**
|
||||
* @author Aaron Moser
|
||||
*/
|
||||
package vslab1.src.View.Panels.StartPanel;
|
||||
|
||||
import java.awt.GridBagConstraints;
|
||||
import java.awt.GridBagLayout;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
|
||||
import vslab1.src.View.Settings;
|
||||
import vslab1.src.View.Panels.Panel;
|
||||
|
||||
public class StartPanel extends JPanel implements Panel {
|
||||
|
||||
private Settings settings = null;
|
||||
|
||||
private JLabel ipLabel = null;
|
||||
private JLabel portLabel = null;
|
||||
|
||||
private JTextField ipTextField = null;
|
||||
private JTextField portTextField = null;
|
||||
|
||||
private JButton submitButton = null;
|
||||
|
||||
public StartPanel(Settings settings) {
|
||||
this.settings = settings;
|
||||
build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateLanguage() {
|
||||
if (ipLabel != null) {
|
||||
ipLabel.setText(StartPanelLanguageConstants.ipLabelStrings[settings.getActiveLanguageOrdinal()]);
|
||||
}
|
||||
if (portLabel != null) {
|
||||
portLabel.setText(StartPanelLanguageConstants.portLabelStrings[settings.getActiveLanguageOrdinal()]);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateColorTheme() {
|
||||
// TODO Auto-generated method stub
|
||||
throw new UnsupportedOperationException("Unimplemented method 'changeColorTheme'");
|
||||
}
|
||||
|
||||
private void build() {
|
||||
this.setLayout(new GridBagLayout());
|
||||
addIPLabel(0,0);
|
||||
addIPTextField(1,0);
|
||||
addPortLabel(2,0);
|
||||
addPortTextField(3,0);
|
||||
addSubmitButton(4, 0);
|
||||
}
|
||||
|
||||
private void addIPLabel(int row, int column) {
|
||||
ipLabel = new JLabel(StartPanelLanguageConstants.ipLabelStrings[settings.getActiveLanguageOrdinal()]);
|
||||
|
||||
GridBagConstraints ipLabelConstraints = new GridBagConstraints();
|
||||
ipLabelConstraints.gridx = column;
|
||||
ipLabelConstraints.gridy = row;
|
||||
ipLabelConstraints.anchor = GridBagConstraints.NORTHWEST;
|
||||
this.add(ipLabel, ipLabelConstraints);
|
||||
}
|
||||
|
||||
private void addIPTextField(int row, int column) {
|
||||
ipTextField = new JTextField(20);
|
||||
|
||||
GridBagConstraints ipTextFieldConstraints = new GridBagConstraints();
|
||||
ipTextFieldConstraints.gridx = column;
|
||||
ipTextFieldConstraints.gridy = row;
|
||||
ipTextFieldConstraints.anchor = GridBagConstraints.NORTHWEST;
|
||||
this.add(ipTextField, ipTextFieldConstraints);
|
||||
}
|
||||
|
||||
private void addPortLabel(int row, int column) {
|
||||
portLabel = new JLabel(StartPanelLanguageConstants.portLabelStrings[settings.getActiveLanguageOrdinal()]);
|
||||
|
||||
GridBagConstraints portLabelConstraints = new GridBagConstraints();
|
||||
portLabelConstraints.gridx = column;
|
||||
portLabelConstraints.gridy = row;
|
||||
portLabelConstraints.anchor = GridBagConstraints.NORTHWEST;
|
||||
this.add(portLabel, portLabelConstraints);
|
||||
}
|
||||
|
||||
private void addPortTextField(int row, int column) {
|
||||
portTextField = new JTextField(20);
|
||||
|
||||
GridBagConstraints portTextFieldConstraints = new GridBagConstraints();
|
||||
portTextFieldConstraints.gridx = column;
|
||||
portTextFieldConstraints.gridy = row;
|
||||
portTextFieldConstraints.anchor = GridBagConstraints.NORTHWEST;
|
||||
this.add(portTextField, portTextFieldConstraints);
|
||||
}
|
||||
|
||||
private void addSubmitButton(int row, int column) {
|
||||
submitButton = new JButton(StartPanelLanguageConstants.submitButtonStrings[settings.getActiveLanguageOrdinal()]);
|
||||
|
||||
submitButton.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
GridBagConstraints submitButtonConstraints = new GridBagConstraints();
|
||||
submitButtonConstraints.gridx = column;
|
||||
submitButtonConstraints.gridy = row;
|
||||
submitButtonConstraints.anchor = GridBagConstraints.NORTHWEST;
|
||||
this.add(submitButton, submitButtonConstraints);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package vslab1.src.View.Panels.StartPanel;
|
||||
|
||||
public class StartPanelLanguageConstants {
|
||||
public final static String[] ipLabelStrings = {
|
||||
"IP Adresse eingeben:",
|
||||
"Enter IP address:"
|
||||
};
|
||||
|
||||
public final static String[] portLabelStrings = {
|
||||
"Port eingeben:",
|
||||
"Enter port:"
|
||||
};
|
||||
|
||||
public final static String[] submitButtonStrings = {
|
||||
"Peer starten",
|
||||
"Start peer"
|
||||
};
|
||||
}
|
||||
23
src/main/java/vslab1/src/View/Settings.java
Normal file
23
src/main/java/vslab1/src/View/Settings.java
Normal file
@@ -0,0 +1,23 @@
|
||||
package vslab1.src.View;
|
||||
|
||||
import vslab1.src.View.Language.ELanguage;
|
||||
|
||||
public class Settings {
|
||||
private ELanguage activeLanguage = ELanguage.English;
|
||||
|
||||
public Settings(ELanguage initLanguage) {
|
||||
activeLanguage = initLanguage;
|
||||
}
|
||||
|
||||
public ELanguage getActiveLanguage() {
|
||||
return activeLanguage;
|
||||
}
|
||||
|
||||
public void setActiveLanguage(ELanguage language) {
|
||||
this.activeLanguage = language;
|
||||
}
|
||||
|
||||
public int getActiveLanguageOrdinal() {
|
||||
return activeLanguage.ordinal();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user