package net.knarcraft.serverlauncher.userinterface; import net.knarcraft.serverlauncher.server.Server; import net.knarcraft.serverlauncher.server.ServerType; import net.knarcraft.serverlauncher.profile.Profile; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.net.URI; import java.net.URISyntaxException; import java.util.Objects; import java.util.Scanner; public class GUI implements ActionListener { private JFrame frame; //Menu private JCheckBoxMenuItem chckbxmntmRunInBackground, chckbxmntmDelayStartup, chckbxmntmDownloadJars; //Options private JMenuItem mntmErrors, mntmSetup, mntmManualUpdate; //Help private JMenuItem mntmRunInBackground, mntmDelayStartup, mntmDownloadJars; //Info/options private JMenuItem mntmAbout, mntmStory; //Info/about //Basic controls private JButton btnStartServer, btnStopServer, addServer, backup, addProfile, delProfile; private JComboBox profiles; private final JLabel lblStatuslabel = new JLabel("Servers are stopped"); //Server controls private JComboBox targetServer, targetPlayer; private JButton btnKick, btnBan, btnOp, btnDeop, btnCustomCommand, btnSaveserver, btnReload, btnServerConsoles; private JTextField customCommand; //Text private String setupText; private String runInBackgroundText; private String delayStartupText; private String downloadJarsText; private String aboutText; private JTabbedPane serversPane; /** * Create the application. */ public GUI() { initialize(); loadMessages(); Server.setGui(this); } public JFrame getFrame() { return this.frame; } public void setStatus(String text) { this.lblStatuslabel.setText(text); } public JTabbedPane getPane() { return this.serversPane; } public void addProfile(String name) { this.profiles.addItem(name); } public void removeProfile(int index) { this.profiles.removeItemAt(index); } public Profile currentProfile() { Object selected = profiles.getSelectedItem(); if (selected != null) { return Profile.getProfile(selected.toString()); } return null; } /** * Initialize the contents of the frame. */ private void initialize() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | UnsupportedLookAndFeelException | InstantiationException | IllegalAccessException e) { e.printStackTrace(); } frame = new JFrame(); frame.setBounds(100, 100, 398, 219); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setResizable(false); JMenuBar menuBar = new JMenuBar(); frame.setJMenuBar(menuBar); JMenu mnOptions = new JMenu("Options"); menuBar.add(mnOptions); chckbxmntmRunInBackground = new JCheckBoxMenuItem("Run in background on exit"); mnOptions.add(chckbxmntmRunInBackground); chckbxmntmRunInBackground.addActionListener(this); chckbxmntmDelayStartup = new JCheckBoxMenuItem("Delay Startup"); mnOptions.add(chckbxmntmDelayStartup); chckbxmntmDelayStartup.addActionListener(this); chckbxmntmDownloadJars = new JCheckBoxMenuItem("Download jars"); mnOptions.add(chckbxmntmDownloadJars); chckbxmntmDownloadJars.addActionListener(this); JMenu mnHelp = new JMenu("Help"); menuBar.add(mnHelp); mntmErrors = new JMenuItem("Errors"); mnHelp.add(mntmErrors); mntmErrors.addActionListener(this); mntmSetup = new JMenuItem("Setup"); mnHelp.add(mntmSetup); mntmSetup.addActionListener(this); mntmManualUpdate = new JMenuItem("Manual update"); mnHelp.add(mntmManualUpdate); mntmManualUpdate.addActionListener(this); JMenu mnInfo = new JMenu("Info"); menuBar.add(mnInfo); JMenu mnOptionsInfo = new JMenu("Options"); mnInfo.add(mnOptionsInfo); mntmRunInBackground = new JMenuItem("Run in background on exit"); mnOptionsInfo.add(mntmRunInBackground); mntmRunInBackground.addActionListener(this); mntmDelayStartup = new JMenuItem("Delay Startup"); mnOptionsInfo.add(mntmDelayStartup); mntmDelayStartup.addActionListener(this); mntmDownloadJars = new JMenuItem("Download jars"); mnOptionsInfo.add(mntmDownloadJars); mntmDownloadJars.addActionListener(this); JMenu mnAbout = new JMenu("About"); mnInfo.add(mnAbout); mntmAbout = new JMenuItem("About"); mnAbout.add(mntmAbout); mntmAbout.addActionListener(this); mntmStory = new JMenuItem("Story"); mnAbout.add(mntmStory); frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.X_AXIS)); mntmStory.addActionListener(this); JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); frame.getContentPane().add(tabbedPane); JPanel panelBasic = new JPanel(); tabbedPane.addTab("Control panel", null, panelBasic, null); SpringLayout sl_panel = new SpringLayout(); panelBasic.setLayout(sl_panel); JLabel lblBasicControls = new JLabel("Basic controls"); sl_panel.putConstraint(SpringLayout.NORTH, lblBasicControls, 10, SpringLayout.NORTH, panelBasic); panelBasic.add(lblBasicControls); btnStartServer = new JButton("Start servers"); sl_panel.putConstraint(SpringLayout.WEST, lblBasicControls, 0, SpringLayout.WEST, btnStartServer); sl_panel.putConstraint(SpringLayout.SOUTH, lblBasicControls, -6, SpringLayout.NORTH, btnStartServer); sl_panel.putConstraint(SpringLayout.NORTH, btnStartServer, 30, SpringLayout.NORTH, panelBasic); sl_panel.putConstraint(SpringLayout.WEST, btnStartServer, 10, SpringLayout.WEST, panelBasic); panelBasic.add(btnStartServer); btnStartServer.addActionListener(this); btnStopServer = new JButton("Stop servers"); sl_panel.putConstraint(SpringLayout.NORTH, btnStopServer, 0, SpringLayout.NORTH, btnStartServer); sl_panel.putConstraint(SpringLayout.WEST, btnStopServer, 6, SpringLayout.EAST, btnStartServer); panelBasic.add(btnStopServer); btnStopServer.addActionListener(this); JLabel lblProfile = new JLabel("Profile"); sl_panel.putConstraint(SpringLayout.NORTH, lblProfile, 6, SpringLayout.SOUTH, btnStartServer); sl_panel.putConstraint(SpringLayout.WEST, lblProfile, 10, SpringLayout.WEST, panelBasic); panelBasic.add(lblProfile); addProfile = new JButton("+"); sl_panel.putConstraint(SpringLayout.NORTH, addProfile, 6, SpringLayout.SOUTH, lblProfile); sl_panel.putConstraint(SpringLayout.WEST, addProfile, 10, SpringLayout.WEST, panelBasic); panelBasic.add(addProfile); addProfile.addActionListener(this); delProfile = new JButton("-"); sl_panel.putConstraint(SpringLayout.NORTH, delProfile, 0, SpringLayout.NORTH, addProfile); sl_panel.putConstraint(SpringLayout.WEST, delProfile, 6, SpringLayout.EAST, addProfile); panelBasic.add(delProfile); delProfile.addActionListener(this); profiles = new JComboBox<>(); sl_panel.putConstraint(SpringLayout.NORTH, profiles, 1, SpringLayout.NORTH, addProfile); sl_panel.putConstraint(SpringLayout.WEST, profiles, 6, SpringLayout.EAST, delProfile); sl_panel.putConstraint(SpringLayout.EAST, profiles, 124, SpringLayout.EAST, delProfile); panelBasic.add(profiles); profiles.addActionListener(this); sl_panel.putConstraint(SpringLayout.NORTH, lblStatuslabel, 8, SpringLayout.SOUTH, addProfile); sl_panel.putConstraint(SpringLayout.WEST, lblStatuslabel, 10, SpringLayout.WEST, panelBasic); sl_panel.putConstraint(SpringLayout.EAST, lblStatuslabel, 386, SpringLayout.WEST, panelBasic); panelBasic.add(lblStatuslabel); addServer = new JButton("Add server"); sl_panel.putConstraint(SpringLayout.NORTH, addServer, 0, SpringLayout.NORTH, btnStartServer); sl_panel.putConstraint(SpringLayout.WEST, addServer, 6, SpringLayout.EAST, btnStopServer); panelBasic.add(addServer); addServer.addActionListener(this); backup = new JButton("Backup"); sl_panel.putConstraint(SpringLayout.NORTH, backup, 0, SpringLayout.NORTH, btnStartServer); sl_panel.putConstraint(SpringLayout.WEST, backup, 6, SpringLayout.EAST, addServer); panelBasic.add(backup); backup.addActionListener(this); JPanel controlServers = new JPanel(); tabbedPane.addTab("Control servers", null, controlServers, null); SpringLayout sl_panel_1 = new SpringLayout(); controlServers.setLayout(sl_panel_1); targetServer = new JComboBox(); sl_panel_1.putConstraint(SpringLayout.NORTH, targetServer, 10, SpringLayout.NORTH, controlServers); sl_panel_1.putConstraint(SpringLayout.SOUTH, targetServer, 30, SpringLayout.NORTH, controlServers); controlServers.add(targetServer); targetPlayer = new JComboBox(); sl_panel_1.putConstraint(SpringLayout.NORTH, targetPlayer, 6, SpringLayout.SOUTH, targetServer); sl_panel_1.putConstraint(SpringLayout.SOUTH, targetPlayer, 26, SpringLayout.SOUTH, targetServer); targetPlayer.setEditable(true); controlServers.add(targetPlayer); btnKick = new JButton("Kick"); sl_panel_1.putConstraint(SpringLayout.NORTH, btnKick, 9, SpringLayout.NORTH, controlServers); sl_panel_1.putConstraint(SpringLayout.WEST, btnKick, 6, SpringLayout.EAST, targetServer); sl_panel_1.putConstraint(SpringLayout.SOUTH, btnKick, 32, SpringLayout.NORTH, controlServers); sl_panel_1.putConstraint(SpringLayout.EAST, btnKick, 84, SpringLayout.EAST, targetServer); controlServers.add(btnKick); btnKick.addActionListener(this); btnBan = new JButton("Ban"); sl_panel_1.putConstraint(SpringLayout.NORTH, btnBan, 35, SpringLayout.NORTH, controlServers); sl_panel_1.putConstraint(SpringLayout.WEST, btnBan, 6, SpringLayout.EAST, targetPlayer); sl_panel_1.putConstraint(SpringLayout.EAST, btnBan, 84, SpringLayout.EAST, targetPlayer); controlServers.add(btnBan); btnBan.addActionListener(this); btnOp = new JButton("OP"); sl_panel_1.putConstraint(SpringLayout.NORTH, btnOp, 9, SpringLayout.NORTH, controlServers); sl_panel_1.putConstraint(SpringLayout.WEST, btnOp, 287, SpringLayout.WEST, controlServers); sl_panel_1.putConstraint(SpringLayout.SOUTH, btnOp, 32, SpringLayout.NORTH, controlServers); sl_panel_1.putConstraint(SpringLayout.EAST, btnOp, 370, SpringLayout.WEST, controlServers); controlServers.add(btnOp); btnOp.addActionListener(this); btnDeop = new JButton("DEOP"); sl_panel_1.putConstraint(SpringLayout.WEST, btnDeop, 287, SpringLayout.WEST, controlServers); sl_panel_1.putConstraint(SpringLayout.NORTH, btnDeop, 35, SpringLayout.NORTH, controlServers); sl_panel_1.putConstraint(SpringLayout.EAST, btnDeop, 370, SpringLayout.WEST, controlServers); controlServers.add(btnDeop); btnDeop.addActionListener(this); JLabel lblTargetServer = new JLabel("Target server"); sl_panel_1.putConstraint(SpringLayout.WEST, targetServer, 6, SpringLayout.EAST, lblTargetServer); sl_panel_1.putConstraint(SpringLayout.EAST, targetServer, 121, SpringLayout.EAST, lblTargetServer); sl_panel_1.putConstraint(SpringLayout.NORTH, lblTargetServer, 10, SpringLayout.NORTH, controlServers); sl_panel_1.putConstraint(SpringLayout.WEST, lblTargetServer, 10, SpringLayout.WEST, controlServers); controlServers.add(lblTargetServer); JLabel lblTargetPlayer = new JLabel("Target player"); sl_panel_1.putConstraint(SpringLayout.WEST, targetPlayer, 7, SpringLayout.EAST, lblTargetPlayer); sl_panel_1.putConstraint(SpringLayout.EAST, targetPlayer, 122, SpringLayout.EAST, lblTargetPlayer); sl_panel_1.putConstraint(SpringLayout.NORTH, lblTargetPlayer, 12, SpringLayout.SOUTH, lblTargetServer); sl_panel_1.putConstraint(SpringLayout.WEST, lblTargetPlayer, 0, SpringLayout.WEST, lblTargetServer); controlServers.add(lblTargetPlayer); btnCustomCommand = new JButton("Custom command"); sl_panel_1.putConstraint(SpringLayout.WEST, btnCustomCommand, 250, SpringLayout.WEST, controlServers); sl_panel_1.putConstraint(SpringLayout.EAST, btnCustomCommand, 0, SpringLayout.EAST, btnOp); controlServers.add(btnCustomCommand); btnCustomCommand.addActionListener(this); customCommand = new JTextField(); sl_panel_1.putConstraint(SpringLayout.WEST, customCommand, 10, SpringLayout.WEST, controlServers); sl_panel_1.putConstraint(SpringLayout.EAST, customCommand, -6, SpringLayout.WEST, btnCustomCommand); sl_panel_1.putConstraint(SpringLayout.NORTH, btnCustomCommand, -1, SpringLayout.NORTH, customCommand); controlServers.add(customCommand); customCommand.setColumns(10); btnSaveserver = new JButton("Save server"); sl_panel_1.putConstraint(SpringLayout.NORTH, customCommand, 6, SpringLayout.SOUTH, btnSaveserver); sl_panel_1.putConstraint(SpringLayout.NORTH, btnSaveserver, 6, SpringLayout.SOUTH, btnBan); sl_panel_1.putConstraint(SpringLayout.WEST, btnSaveserver, 0, SpringLayout.WEST, btnKick); sl_panel_1.putConstraint(SpringLayout.EAST, btnSaveserver, 91, SpringLayout.WEST, btnKick); controlServers.add(btnSaveserver); btnSaveserver.addActionListener(this); btnReload = new JButton("Reload"); sl_panel_1.putConstraint(SpringLayout.NORTH, btnReload, 6, SpringLayout.SOUTH, btnDeop); sl_panel_1.putConstraint(SpringLayout.WEST, btnReload, 10, SpringLayout.WEST, btnDeop); sl_panel_1.putConstraint(SpringLayout.EAST, btnReload, 0, SpringLayout.EAST, btnOp); controlServers.add(btnReload); btnReload.addActionListener(this); btnServerConsoles = new JButton("View server consoles"); sl_panel_1.putConstraint(SpringLayout.NORTH, btnServerConsoles, 0, SpringLayout.NORTH, btnSaveserver); sl_panel_1.putConstraint(SpringLayout.WEST, btnServerConsoles, 0, SpringLayout.WEST, lblTargetServer); sl_panel_1.putConstraint(SpringLayout.EAST, btnServerConsoles, 0, SpringLayout.EAST, targetServer); controlServers.add(btnServerConsoles); btnServerConsoles.addActionListener(this); JPanel panel_2 = new JPanel(); tabbedPane.addTab("Servers", null, panel_2, null); SpringLayout sl_panel_2 = new SpringLayout(); panel_2.setLayout(sl_panel_2); JTabbedPane tabbedPane_1 = new JTabbedPane(JTabbedPane.TOP); sl_panel_2.putConstraint(SpringLayout.NORTH, tabbedPane_1, 0, SpringLayout.NORTH, panel_2); sl_panel_2.putConstraint(SpringLayout.WEST, tabbedPane_1, 0, SpringLayout.WEST, panel_2); sl_panel_2.putConstraint(SpringLayout.SOUTH, tabbedPane_1, 150, SpringLayout.NORTH, panel_2); sl_panel_2.putConstraint(SpringLayout.EAST, tabbedPane_1, 396, SpringLayout.WEST, panel_2); panel_2.add(tabbedPane_1); this.serversPane = tabbedPane_1; frame.setVisible(true); } public void addServer(String name, Server server) { JPanel panel = new JPanel(); this.serversPane.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.NORTH, lblServerType, 10, SpringLayout.NORTH, panel); sl_panel_3.putConstraint(SpringLayout.WEST, lblServerType, 10, SpringLayout.WEST, panel); sl_panel_3.putConstraint(SpringLayout.SOUTH, lblServerType, 30, SpringLayout.NORTH, panel); panel.add(lblServerType); JComboBox comboBox_3 = new JComboBox<>(ServerType.getTypeNames()); sl_panel_3.putConstraint(SpringLayout.NORTH, comboBox_3, 10, SpringLayout.NORTH, panel); sl_panel_3.putConstraint(SpringLayout.WEST, comboBox_3, 16, SpringLayout.EAST, lblServerType); panel.add(comboBox_3); 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); JComboBox comboBox_4 = new JComboBox<>(ServerType.getServerTypes().get(0).getVersions()); sl_panel_3.putConstraint(SpringLayout.NORTH, comboBox_4, 6, SpringLayout.SOUTH, comboBox_3); sl_panel_3.putConstraint(SpringLayout.WEST, comboBox_4, 0, SpringLayout.WEST, comboBox_3); panel.add(comboBox_4); JLabel lblMaxRam = new JLabel("Max ram"); sl_panel_3.putConstraint(SpringLayout.EAST, comboBox_3, -13, SpringLayout.WEST, lblMaxRam); sl_panel_3.putConstraint(SpringLayout.NORTH, lblMaxRam, 10, SpringLayout.NORTH, panel); sl_panel_3.putConstraint(SpringLayout.SOUTH, lblMaxRam, -92, SpringLayout.SOUTH, panel); sl_panel_3.putConstraint(SpringLayout.EAST, lblMaxRam, -111, SpringLayout.EAST, panel); panel.add(lblMaxRam); JComboBox comboBox_5 = new JComboBox<>(Server.getRamList()); sl_panel_3.putConstraint(SpringLayout.NORTH, comboBox_5, 10, SpringLayout.NORTH, panel); sl_panel_3.putConstraint(SpringLayout.WEST, comboBox_5, 6, SpringLayout.EAST, lblMaxRam); sl_panel_3.putConstraint(SpringLayout.EAST, comboBox_5, 86, SpringLayout.EAST, lblMaxRam); panel.add(comboBox_5); JCheckBox chckbxEnabled = new JCheckBox("Enabled"); sl_panel_3.putConstraint(SpringLayout.NORTH, chckbxEnabled, 6, SpringLayout.SOUTH, lblServerVersion); sl_panel_3.putConstraint(SpringLayout.EAST, chckbxEnabled, 0, SpringLayout.EAST, lblServerType); panel.add(chckbxEnabled); JButton btnRemoveServer = new JButton("Remove server"); sl_panel_3.putConstraint(SpringLayout.NORTH, btnRemoveServer, 5, SpringLayout.SOUTH, lblMaxRam); sl_panel_3.putConstraint(SpringLayout.SOUTH, btnRemoveServer, -64, SpringLayout.SOUTH, panel); sl_panel_3.putConstraint(SpringLayout.SOUTH, comboBox_5, -5, SpringLayout.NORTH, btnRemoveServer); sl_panel_3.putConstraint(SpringLayout.EAST, comboBox_4, -13, SpringLayout.WEST, btnRemoveServer); sl_panel_3.putConstraint(SpringLayout.WEST, btnRemoveServer, 239, SpringLayout.WEST, panel); sl_panel_3.putConstraint(SpringLayout.EAST, btnRemoveServer, 0, SpringLayout.EAST, comboBox_5); panel.add(btnRemoveServer); JLabel lblDirectory = new JLabel("Directory"); sl_panel_3.putConstraint(SpringLayout.NORTH, lblDirectory, 1, SpringLayout.NORTH, chckbxEnabled); sl_panel_3.putConstraint(SpringLayout.SOUTH, lblDirectory, 0, SpringLayout.SOUTH, chckbxEnabled); panel.add(lblDirectory); JTextField textField_1 = new JTextField(); sl_panel_3.putConstraint(SpringLayout.NORTH, textField_1, 4, SpringLayout.SOUTH, btnRemoveServer); sl_panel_3.putConstraint(SpringLayout.SOUTH, textField_1, -37, SpringLayout.SOUTH, panel); sl_panel_3.putConstraint(SpringLayout.EAST, lblDirectory, -6, SpringLayout.WEST, textField_1); sl_panel_3.putConstraint(SpringLayout.WEST, textField_1, 130, SpringLayout.WEST, panel); panel.add(textField_1); textField_1.setColumns(10); JButton btnBrowse = new JButton("Browse"); sl_panel_3.putConstraint(SpringLayout.EAST, textField_1, -6, SpringLayout.WEST, btnBrowse); sl_panel_3.putConstraint(SpringLayout.NORTH, btnBrowse, 3, SpringLayout.SOUTH, btnRemoveServer); sl_panel_3.putConstraint(SpringLayout.WEST, btnBrowse, 293, SpringLayout.WEST, panel); sl_panel_3.putConstraint(SpringLayout.EAST, btnBrowse, 0, SpringLayout.EAST, comboBox_5); panel.add(btnBrowse); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == chckbxmntmRunInBackground) { background(); } else if (e.getSource() == chckbxmntmDelayStartup) { delay(); } else if (e.getSource() == chckbxmntmDownloadJars) { downloadJars(); } else if (e.getSource() == mntmErrors) { goToURL("https://knarcraft.net/Bungeeminecraftserverlauncher/Info/"); } else if (e.getSource() == mntmSetup) { JOptionPane.showMessageDialog(null, setupText, "Setup", JOptionPane.INFORMATION_MESSAGE); } else if (e.getSource() == mntmManualUpdate) { goToURL("https://knarcraft.net/Downloads/Bungeeminecraftserverlauncher/"); } else if (e.getSource() == mntmRunInBackground) { JOptionPane.showMessageDialog(null, runInBackgroundText, "Run in background", JOptionPane.INFORMATION_MESSAGE); } else if (e.getSource() == mntmDelayStartup) { JOptionPane.showMessageDialog(null, delayStartupText, "Run in background", JOptionPane.INFORMATION_MESSAGE); } else if (e.getSource() == mntmDownloadJars) { JOptionPane.showMessageDialog(null, downloadJarsText, "Run in background", JOptionPane.INFORMATION_MESSAGE); } else if (e.getSource() == mntmAbout) { JOptionPane.showMessageDialog(null, aboutText, "Run in background", JOptionPane.INFORMATION_MESSAGE); } else if (e.getSource() == mntmStory) { goToURL("https://knarcraft.net/Bungeeminecraftserverlauncher/Story/"); } else if (e.getSource() == btnStartServer) { Server.startServers(); } else if (e.getSource() == btnStopServer) { stop(); } else if (e.getSource() == addServer) { String serverName = JOptionPane.showInputDialog("Name of server: "); new Server(serverName, this); } else if (e.getSource() == backup) { backup(); } else if (e.getSource() == addProfile) { Profile.addProfile(JOptionPane.showInputDialog("Profile name: ")); } else if (e.getSource() == delProfile) { Object selected = profiles.getSelectedItem(); if (selected != null) { Profile.deleteProfile(selected.toString()); } } /* //Server controls private JComboBox targetServer, targetPlayer; private JButton btnKick, btnBan, btnOp, btnDeop, btnCustomCommand, btnSaveserver, btnReload, btnServerConsoles; private JTextField customCommand;*/ } private void stop() { try { setStatus("Servers are stopping"); Server.stop(); setStatus("Servers are stopped"); } catch (IOException e1) { JOptionPane.showMessageDialog(null, "Could not stop server", "Error", JOptionPane.ERROR_MESSAGE); } } /** * Asks the user for a delay if checked, and sets the value to the current profile. */ private void delay() { Object selected = profiles.getSelectedItem(); if (selected != null) { Profile profile = Profile.getProfile(selected.toString()); if (chckbxmntmDelayStartup.isSelected()) { Objects.requireNonNull(profile).setDelayStartup(Integer.parseInt(JOptionPane.showInputDialog("Seconds to delay: "))); } else { Objects.requireNonNull(profile).setDelayStartup(0); } } else { JOptionPane.showMessageDialog(null, "No profile selected", "Error", JOptionPane.ERROR_MESSAGE); } } private void background() { Object selected = profiles.getSelectedItem(); if (selected != null) { Profile profile = Profile.getProfile(selected.toString()); Objects.requireNonNull(profile).setRunInBackground(chckbxmntmRunInBackground.isSelected()); } else { JOptionPane.showMessageDialog(null, "No profile selected", "Error", JOptionPane.ERROR_MESSAGE); } } private void downloadJars() { Object selected = profiles.getSelectedItem(); if (selected != null) { Profile profile = Profile.getProfile(selected.toString()); Objects.requireNonNull(profile).setDownloadJars(chckbxmntmDownloadJars.isSelected()); } else { JOptionPane.showMessageDialog(null, "No profile selected", "Error", JOptionPane.ERROR_MESSAGE); } } private void backup() { JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new java.io.File(".")); chooser.setDialogTitle("Backup folder"); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); chooser.setAcceptAllFileFilterUsed(false); if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { File path = chooser.getSelectedFile(); for (Server server : currentProfile().getServers()) { if (!server.getPath().equals("") && server.isEnabled()) { String name = server.getName(); File srcFolder = new File(server.getPath()); File destFolder = new File(path, name); if (!destFolder.exists()) { if (destFolder.mkdirs()) { try { copyFolder(srcFolder, destFolder); } catch (IOException e) { e.printStackTrace(); return; } } else { return; } } } } } } private static void goToURL(String url) { java.awt.Desktop desktop = java.awt.Desktop.getDesktop(); try { desktop.browse(new URI(url)); } catch (URISyntaxException | IOException e1) { e1.printStackTrace(); } } private void loadMessages() { try (Scanner in = new Scanner(new File("config/menumsg.csv"))) { while (in.hasNextLine()) { String[] line = in.nextLine().split("="); String content = line[1].replaceAll("_BREAK_",System.getProperty("line.separator")); switch (line[0]) { case "setup": setupText = content; break; case "runinbk": runInBackgroundText = content; break; case "delaystartup": delayStartupText = content; break; case "downloadjars": downloadJarsText = content; break; case "about": aboutText = content; } } } catch (FileNotFoundException e) { JOptionPane.showMessageDialog(null, "Messages file could not be read", "Setup", JOptionPane.ERROR_MESSAGE); } } private void copyFolder(File src, File dest) throws IOException{ if (!src.isDirectory()) { InputStream in = new FileInputStream(src); OutputStream out = new FileOutputStream(dest); byte[] buffer = new byte[1024]; int length; while ((length = in.read(buffer)) > 0){ out.write(buffer, 0, length); } in.close(); out.close(); this.setStatus("File copied from " + src + " to " + dest); } else { if(!dest.exists()){ if (dest.mkdir()) { this.setStatus("Directory copied from " + src + " to " + dest); } else { return; } } String files[] = src.list(); if (files != null) { for (String file : files) { File srcFile = new File(src, file); File destFile = new File(dest, file); copyFolder(srcFile, destFile); } } } } }