All checks were successful
KnarCraft/Minecraft-Server-Launcher/pipeline/head This commit looks good
253 lines
10 KiB
Java
253 lines
10 KiB
Java
package net.knarcraft.minecraftserverlauncher.userinterface;
|
|
|
|
import net.knarcraft.minecraftserverlauncher.Main;
|
|
import net.knarcraft.minecraftserverlauncher.server.ServerHandler;
|
|
import net.knarcraft.minecraftserverlauncher.server.ServerTypeHandler;
|
|
import net.knarcraft.minecraftserverlauncher.server.servertypes.ServerType;
|
|
|
|
import javax.naming.ConfigurationException;
|
|
import javax.swing.*;
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
import java.io.File;
|
|
|
|
/**
|
|
* Represents a visual server tab used to configure a server
|
|
*
|
|
* @author Kristian Knarvik <kristian.knarvik@knett.no>
|
|
* @version 1.0.0
|
|
* @since 1.0.0
|
|
*/
|
|
public class ServerTab implements ActionListener {
|
|
private final JComboBox<String> serverTypes;
|
|
private final JComboBox<String> serverVersions;
|
|
private final JComboBox<String> maxRam;
|
|
private final JCheckBox enabledCheckbox;
|
|
private final JButton browseButton;
|
|
private final JTextField directory;
|
|
private final JPanel panel;
|
|
|
|
/**
|
|
* Initializes a new server tab with the given name
|
|
*
|
|
* @param name <p>The name of the new server tab</p>
|
|
* @throws ConfigurationException <p>If unable to create the new tab</p>
|
|
*/
|
|
public ServerTab(String name) throws ConfigurationException {
|
|
panel = new JPanel();
|
|
Main.getController().getGUI().getPane().addTab(name, null, panel, null);
|
|
SpringLayout sl_panel_3 = new SpringLayout();
|
|
panel.setLayout(sl_panel_3);
|
|
|
|
JLabel lblServerType = new JLabel("Server type");
|
|
sl_panel_3.putConstraint(SpringLayout.WEST, lblServerType, 10, SpringLayout.WEST, panel);
|
|
panel.add(lblServerType);
|
|
|
|
JLabel lblServerVersion = new JLabel("Server version");
|
|
sl_panel_3.putConstraint(SpringLayout.NORTH, lblServerVersion, 6, SpringLayout.SOUTH, lblServerType);
|
|
sl_panel_3.putConstraint(SpringLayout.WEST, lblServerVersion, 10, SpringLayout.WEST, panel);
|
|
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblServerVersion, 26, SpringLayout.SOUTH, lblServerType);
|
|
panel.add(lblServerVersion);
|
|
|
|
serverTypes = new JComboBox<>(ServerTypeHandler.getTypeNames());
|
|
sl_panel_3.putConstraint(SpringLayout.NORTH, serverTypes, 10, SpringLayout.NORTH, panel);
|
|
sl_panel_3.putConstraint(SpringLayout.WEST, serverTypes, 5, SpringLayout.EAST, lblServerVersion);
|
|
sl_panel_3.putConstraint(SpringLayout.EAST, serverTypes, 154, SpringLayout.WEST, serverTypes);
|
|
sl_panel_3.putConstraint(SpringLayout.NORTH, lblServerType, 0, SpringLayout.NORTH, serverTypes);
|
|
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblServerType, 0, SpringLayout.SOUTH, serverTypes);
|
|
panel.add(serverTypes);
|
|
serverTypes.addActionListener(this);
|
|
|
|
serverVersions = new JComboBox<>(ServerTypeHandler.getServerTypes().get(0).getVersions());
|
|
sl_panel_3.putConstraint(SpringLayout.NORTH, serverVersions, 6, SpringLayout.SOUTH, serverTypes);
|
|
sl_panel_3.putConstraint(SpringLayout.EAST, serverVersions, 0, SpringLayout.EAST, serverTypes);
|
|
sl_panel_3.putConstraint(SpringLayout.WEST, serverVersions, 6, SpringLayout.EAST, lblServerVersion);
|
|
sl_panel_3.putConstraint(SpringLayout.NORTH, lblServerVersion, 0, SpringLayout.NORTH, serverVersions);
|
|
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblServerVersion, 0, SpringLayout.SOUTH, serverVersions);
|
|
panel.add(serverVersions);
|
|
serverVersions.addActionListener(this);
|
|
|
|
JLabel lblMaxRam = new JLabel("Max ram");
|
|
sl_panel_3.putConstraint(SpringLayout.NORTH, lblMaxRam, 0, SpringLayout.NORTH, serverTypes);
|
|
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblMaxRam, 0, SpringLayout.SOUTH, serverTypes);
|
|
sl_panel_3.putConstraint(SpringLayout.WEST, lblMaxRam, 6, SpringLayout.EAST, serverTypes);
|
|
panel.add(lblMaxRam);
|
|
|
|
maxRam = new JComboBox<>(ServerHandler.getRamList());
|
|
sl_panel_3.putConstraint(SpringLayout.NORTH, maxRam, 0, SpringLayout.NORTH, serverTypes);
|
|
sl_panel_3.putConstraint(SpringLayout.WEST, maxRam, 6, SpringLayout.EAST, lblMaxRam);
|
|
sl_panel_3.putConstraint(SpringLayout.EAST, maxRam, -10, SpringLayout.EAST, panel);
|
|
panel.add(maxRam);
|
|
maxRam.addActionListener(this);
|
|
|
|
enabledCheckbox = new JCheckBox("Enabled");
|
|
sl_panel_3.putConstraint(SpringLayout.WEST, enabledCheckbox, 10, SpringLayout.WEST, panel);
|
|
panel.add(enabledCheckbox);
|
|
enabledCheckbox.addActionListener(this);
|
|
|
|
JLabel lblDirectory = new JLabel("Directory");
|
|
sl_panel_3.putConstraint(SpringLayout.WEST, lblDirectory, 6, SpringLayout.EAST, enabledCheckbox);
|
|
panel.add(lblDirectory);
|
|
|
|
directory = new JTextField();
|
|
sl_panel_3.putConstraint(SpringLayout.WEST, directory, 6, SpringLayout.EAST, lblDirectory);
|
|
sl_panel_3.putConstraint(SpringLayout.SOUTH, lblDirectory, 0, SpringLayout.SOUTH, directory);
|
|
sl_panel_3.putConstraint(SpringLayout.NORTH, lblDirectory, 0, SpringLayout.NORTH, directory);
|
|
sl_panel_3.putConstraint(SpringLayout.NORTH, enabledCheckbox, 0, SpringLayout.NORTH, directory);
|
|
sl_panel_3.putConstraint(SpringLayout.SOUTH, enabledCheckbox, 0, SpringLayout.SOUTH, directory);
|
|
panel.add(directory);
|
|
directory.setColumns(10);
|
|
directory.addActionListener(this);
|
|
|
|
browseButton = new JButton("Browse");
|
|
sl_panel_3.putConstraint(SpringLayout.EAST, directory, -6, SpringLayout.WEST, browseButton);
|
|
sl_panel_3.putConstraint(SpringLayout.NORTH, browseButton, 3, SpringLayout.SOUTH, serverVersions);
|
|
sl_panel_3.putConstraint(SpringLayout.EAST, browseButton, -10, SpringLayout.EAST, panel);
|
|
sl_panel_3.putConstraint(SpringLayout.SOUTH, directory, 0, SpringLayout.SOUTH, browseButton);
|
|
sl_panel_3.putConstraint(SpringLayout.NORTH, directory, 0, SpringLayout.NORTH, browseButton);
|
|
panel.add(browseButton);
|
|
browseButton.addActionListener(this);
|
|
}
|
|
|
|
/**
|
|
* Updates the server tab components according to the received parameters
|
|
*
|
|
* @param path <p>The new path of the server tab</p>
|
|
* @param isEnabled <p>Whether to mark the server as enabled</p>
|
|
* @param typeName <p>The name of the selected server type</p>
|
|
* @param serverVersion <p>The version of the server</p>
|
|
* @param maxRam <p>The maximum usable ram for the server</p>
|
|
*/
|
|
public void setData(String path, boolean isEnabled, String typeName, String serverVersion, String maxRam) throws ConfigurationException {
|
|
this.directory.setText(path);
|
|
this.enabledCheckbox.setSelected(isEnabled);
|
|
this.serverTypes.setSelectedItem(typeName);
|
|
this.updateServerVersion();
|
|
this.serverVersions.setSelectedItem(serverVersion);
|
|
this.maxRam.setSelectedItem(maxRam);
|
|
}
|
|
|
|
/**
|
|
* Gets the JPanel containing the server tab's elements
|
|
*
|
|
* @return <p>The JPanel containing the server tab's elements</p>
|
|
*/
|
|
public JPanel getPanel() {
|
|
return this.panel;
|
|
}
|
|
|
|
/**
|
|
* Gets the file path selected by the user
|
|
*
|
|
* @return <p>The file path selected by the user</p>
|
|
*/
|
|
public String getPath() {
|
|
return this.directory.getText();
|
|
}
|
|
|
|
/**
|
|
* Gets the maximum RAM selected by the user
|
|
*
|
|
* @return <p>The maximum RAM selected by the user</p>
|
|
*/
|
|
public String getMaxRam() {
|
|
Object selected = this.maxRam.getSelectedItem();
|
|
if (selected != null) {
|
|
return selected.toString();
|
|
} else {
|
|
return "512M";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gets the server type selected by the user
|
|
*
|
|
* @return <p>The server type selected by the user</p>
|
|
*/
|
|
public String getType() {
|
|
Object selected = this.serverTypes.getSelectedItem();
|
|
if (selected != null) {
|
|
return selected.toString();
|
|
} else {
|
|
return "Vanilla";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gets the server version selected by the user
|
|
*
|
|
* @return <p>The server version selected by the user</p>
|
|
*/
|
|
public String getVersion() {
|
|
Object selected = this.serverVersions.getSelectedItem();
|
|
if (selected != null) {
|
|
return selected.toString();
|
|
} else {
|
|
return "Latest";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Checks whether this server is enabled
|
|
*
|
|
* @return <p>True if this server is enabled</p>
|
|
*/
|
|
public boolean isEnabled() {
|
|
return this.enabledCheckbox.isSelected();
|
|
}
|
|
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
if (e.getSource() == browseButton) {
|
|
browse();
|
|
} else if (e.getSource() == serverTypes) {
|
|
try {
|
|
updateServerVersion();
|
|
} catch (ConfigurationException e1) {
|
|
e1.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Asks the user for server location and updates the GUI if given a valid value
|
|
*/
|
|
private void browse() {
|
|
File chosenFolder = Main.getController().getGUI().askForDirectory("Server folder");
|
|
if (chosenFolder != null) {
|
|
directory.setText(chosenFolder.toString());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Updates server version choices according to the server type
|
|
*/
|
|
private void updateServerVersion() throws ConfigurationException {
|
|
serverVersions.removeAllItems();
|
|
String selectedServerTypes = null;
|
|
Object selectedType = serverTypes.getSelectedItem();
|
|
if (selectedType != null) {
|
|
selectedServerTypes = selectedType.toString();
|
|
}
|
|
if (selectedServerTypes == null) {
|
|
return;
|
|
}
|
|
if (selectedServerTypes.equals("Custom")) {
|
|
serverVersions.setEditable(true);
|
|
} else {
|
|
serverVersions.setEditable(false);
|
|
ServerType current = null;
|
|
for (ServerType servertype : ServerTypeHandler.getServerTypes()) {
|
|
if (servertype.getName().equals(selectedServerTypes)) {
|
|
current = servertype;
|
|
}
|
|
}
|
|
if (current != null) {
|
|
for (String version : current.getVersions()) {
|
|
serverVersions.addItem(version);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|