diff --git a/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_ConfigLoader.java b/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_ConfigLoader.java index 7c8bc3f..bbe8d91 100644 --- a/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_ConfigLoader.java +++ b/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_ConfigLoader.java @@ -2,21 +2,22 @@ package me.StevenLawson.BukkitTelnetClient; import java.io.*; import java.util.*; +import java.util.logging.Level; import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.commons.io.FileUtils; import org.w3c.dom.*; +import org.xml.sax.SAXException; public class BTC_ConfigLoader { private static final String SETTINGS_FILE = "settings.xml"; private final List playerCommands = new ArrayList<>(); - private final List servers = new ArrayList<>(); + private final Set servers = new HashSet<>(); public BTC_ConfigLoader() { @@ -44,10 +45,6 @@ public class BTC_ConfigLoader final List oldServers = importOldConfig(); this.servers.addAll(oldServers); - final HashSet uniqueServers = new HashSet<>(this.servers); - this.servers.clear(); - this.servers.addAll(uniqueServers); - generateXML(settings); if (verbose) @@ -77,10 +74,6 @@ public class BTC_ConfigLoader public boolean save() { - final HashSet uniqueServers = new HashSet<>(this.servers); - this.servers.clear(); - this.servers.addAll(uniqueServers); - return generateXML(new File(SETTINGS_FILE)); } @@ -89,9 +82,9 @@ public class BTC_ConfigLoader return this.playerCommands; } - public List getServers() + public Set getServers() { - return this.servers; + return servers; } private boolean generateXML(final File file) @@ -114,9 +107,9 @@ public class BTC_ConfigLoader return true; } - catch (Exception ex) + catch (IllegalArgumentException | ParserConfigurationException | TransformerException | DOMException ex) { - ex.printStackTrace(); + BukkitTelnetClient.LOGGER.log(Level.SEVERE, null, ex); } return false; @@ -143,10 +136,11 @@ public class BTC_ConfigLoader hadErrors = true; } } - catch (Exception ex) + catch (IOException | ParserConfigurationException | SAXException ex) { - ex.printStackTrace(); hadErrors = true; + + BukkitTelnetClient.LOGGER.log(Level.SEVERE, null, ex); } return hadErrors; @@ -165,7 +159,7 @@ public class BTC_ConfigLoader } catch (IOException ex) { - ex.printStackTrace(); + BukkitTelnetClient.LOGGER.log(Level.SEVERE, null, ex); } } @@ -187,7 +181,7 @@ public class BTC_ConfigLoader while ((line = in.readLine()) != null) { line = line.trim(); - oldServers.add(new ServerEntry("legacy", line)); + oldServers.add(new ServerEntry("legacy", line, false)); } } @@ -196,192 +190,9 @@ public class BTC_ConfigLoader } catch (IOException ex) { - ex.printStackTrace(); + BukkitTelnetClient.LOGGER.log(Level.SEVERE, null, ex); } return oldServers; } - - public static class PlayerCommandEntry - { - private final String name; - private final String format; - - public PlayerCommandEntry(String name, String format) - { - this.name = name; - this.format = format; - } - - public String getFormat() - { - return format; - } - - public String getName() - { - return name; - } - - public static Element listToXML(final List playerCommands, final Document doc) - { - final Element plcElement = doc.createElement("playerCommands"); - - for (final PlayerCommandEntry command : playerCommands) - { - final Element commandElement = doc.createElement("playerCommand"); - plcElement.appendChild(commandElement); - - final Element commandName = doc.createElement("name"); - commandName.appendChild(doc.createTextNode(command.getName())); - commandElement.appendChild(commandName); - - final Element commandFormat = doc.createElement("format"); - commandFormat.appendChild(doc.createTextNode(command.getFormat())); - commandElement.appendChild(commandFormat); - } - - return plcElement; - } - - public static boolean xmlToList(final List playerCommands, final Document doc) - { - NodeList playerCommandNodes = doc.getDocumentElement().getElementsByTagName("playerCommands"); - if (playerCommandNodes.getLength() < 1) - { - return false; - } - playerCommandNodes = playerCommandNodes.item(0).getChildNodes(); - - playerCommands.clear(); - - for (int i = 0; i < playerCommandNodes.getLength(); i++) - { - final Node node = playerCommandNodes.item(i); - if (node.getNodeType() == Node.ELEMENT_NODE) - { - final Element element = (Element) node; - - final PlayerCommandEntry command = new PlayerCommandEntry( - element.getElementsByTagName("name").item(0).getTextContent(), - element.getElementsByTagName("format").item(0).getTextContent() - ); - - playerCommands.add(command); - } - } - - return true; - } - } - - public static class ServerEntry - { - private final String name; - private final String address; - - public ServerEntry(final String name, final String address) - { - this.name = name; - this.address = address; - } - - public String getName() - { - return name; - } - - public String getAddress() - { - return address; - } - - @Override - public int hashCode() - { - int hash = 7; - hash = 67 * hash + Objects.hashCode(this.name); - hash = 67 * hash + Objects.hashCode(this.address); - return hash; - } - - @Override - public boolean equals(Object obj) - { - if (obj == null) - { - return false; - } - - if (getClass() != obj.getClass()) - { - return false; - } - - final ServerEntry other = (ServerEntry) obj; - - if (!Objects.equals(this.name, other.name)) - { - return false; - } - - if (!Objects.equals(this.address, other.address)) - { - return false; - } - - return true; - } - - public static Element listToXML(final List servers, final Document doc) - { - final Element serversElement = doc.createElement("servers"); - - for (final ServerEntry command : servers) - { - final Element commandElement = doc.createElement("server"); - serversElement.appendChild(commandElement); - - final Element serverName = doc.createElement("name"); - serverName.appendChild(doc.createTextNode(command.getName())); - commandElement.appendChild(serverName); - - final Element serverAddress = doc.createElement("address"); - serverAddress.appendChild(doc.createTextNode(command.getAddress())); - commandElement.appendChild(serverAddress); - } - - return serversElement; - } - - public static boolean xmlToList(final List servers, final Document doc) - { - NodeList serverNodes = doc.getDocumentElement().getElementsByTagName("servers"); - if (serverNodes.getLength() < 1) - { - return false; - } - serverNodes = serverNodes.item(0).getChildNodes(); - - servers.clear(); - - for (int i = 0; i < serverNodes.getLength(); i++) - { - final Node node = serverNodes.item(i); - if (node.getNodeType() == Node.ELEMENT_NODE) - { - final Element element = (Element) node; - - final ServerEntry server = new ServerEntry( - element.getElementsByTagName("name").item(0).getTextContent(), - element.getElementsByTagName("address").item(0).getTextContent() - ); - - servers.add(server); - } - } - - return true; - } - } } diff --git a/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_ConnectionManager.java b/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_ConnectionManager.java index c75370e..e591880 100644 --- a/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_ConnectionManager.java +++ b/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_ConnectionManager.java @@ -2,9 +2,7 @@ package me.StevenLawson.BukkitTelnetClient; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; +import java.io.*; import java.util.Map; import java.util.logging.Level; import javax.swing.Timer; diff --git a/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_MainPanel.form b/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_MainPanel.form index 1ff2164..3d2b5db 100644 --- a/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_MainPanel.form +++ b/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_MainPanel.form @@ -156,15 +156,15 @@ + + + - - - diff --git a/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_MainPanel.java b/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_MainPanel.java index b165375..30bfca5 100644 --- a/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_MainPanel.java +++ b/src/main/java/me/StevenLawson/BukkitTelnetClient/BTC_MainPanel.java @@ -1,41 +1,16 @@ package me.StevenLawson.BukkitTelnetClient; -import java.awt.EventQueue; -import java.awt.Toolkit; +import java.awt.*; import java.awt.datatransfer.StringSelection; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.BufferedReader; -import java.io.BufferedWriter; +import java.awt.event.*; import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; import java.io.PrintStream; import java.net.URL; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.Map; -import java.util.logging.Level; -import javax.swing.JCheckBox; -import javax.swing.JMenuItem; -import javax.swing.JPopupMenu; -import javax.swing.JScrollBar; -import javax.swing.JTable; -import javax.swing.ListSelectionModel; -import javax.swing.SwingUtilities; +import java.util.*; +import javax.swing.*; import javax.swing.Timer; import javax.swing.table.DefaultTableModel; -import javax.swing.text.BadLocationException; -import javax.swing.text.SimpleAttributeSet; -import javax.swing.text.StyleConstants; -import javax.swing.text.StyleContext; -import javax.swing.text.StyledDocument; +import javax.swing.text.*; public class BTC_MainPanel extends javax.swing.JFrame { @@ -442,28 +417,55 @@ public class BTC_MainPanel extends javax.swing.JFrame public final void loadServerList() { txtServer.removeAllItems(); - - for (BTC_ConfigLoader.ServerEntry serverEntry : BukkitTelnetClient.config.getServers()) + for (final ServerEntry serverEntry : BukkitTelnetClient.config.getServers()) { - txtServer.addItem(serverEntry.getAddress()); + txtServer.addItem(serverEntry); + if (serverEntry.isLastUsed()) + { + txtServer.setSelectedItem(serverEntry); + } } } public final void saveServersAndTriggerConnect() { - final String selectedServer = (String) txtServer.getSelectedItem(); + final Object selectedItem = txtServer.getSelectedItem(); - if (selectedServer == null || selectedServer.isEmpty()) + ServerEntry entry; + if (selectedItem instanceof ServerEntry) { - writeToConsole("Invalid server address."); - return; + entry = (ServerEntry) selectedItem; + } + else + { + String serverName = JOptionPane.showInputDialog(this, "Enter server name:", "Server Name", JOptionPane.PLAIN_MESSAGE).trim(); + + if (serverName.isEmpty()) + { + serverName = "Unnamed"; + } + + entry = new ServerEntry(serverName, selectedItem.toString()); + + BukkitTelnetClient.config.getServers().add(entry); } - BukkitTelnetClient.config.getServers().add(new BTC_ConfigLoader.ServerEntry("legacy", selectedServer)); + for (final ServerEntry existingEntry : BukkitTelnetClient.config.getServers()) + { + if (entry.equals(existingEntry)) + { + entry = existingEntry; + } + existingEntry.setLastUsed(false); + } + + entry.setLastUsed(true); BukkitTelnetClient.config.save(); - connectionManager.triggerConnect(selectedServer); + loadServerList(); + + connectionManager.triggerConnect(entry.getAddress()); } @SuppressWarnings("unchecked") @@ -477,7 +479,7 @@ public class BTC_MainPanel extends javax.swing.JFrame mainOutput = new javax.swing.JTextPane(); btnDisconnect = new javax.swing.JButton(); btnSend = new javax.swing.JButton(); - txtServer = new javax.swing.JComboBox(); + txtServer = new javax.swing.JComboBox(); chkAutoScroll = new javax.swing.JCheckBox(); txtCommand = new javax.swing.JTextField(); btnConnect = new javax.swing.JButton(); @@ -525,13 +527,6 @@ public class BTC_MainPanel extends javax.swing.JFrame chkAutoScroll.setSelected(true); chkAutoScroll.setText("AutoScroll"); - chkAutoScroll.addActionListener(new java.awt.event.ActionListener() - { - public void actionPerformed(java.awt.event.ActionEvent evt) - { - chkAutoScrollActionPerformed(evt); - } - }); txtCommand.setEnabled(false); txtCommand.addKeyListener(new java.awt.event.KeyAdapter() @@ -736,11 +731,6 @@ public class BTC_MainPanel extends javax.swing.JFrame } }//GEN-LAST:event_txtCommandKeyPressed - private void chkAutoScrollActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_chkAutoScrollActionPerformed - {//GEN-HEADEREND:event_chkAutoScrollActionPerformed -// updateTextPane(""); - }//GEN-LAST:event_chkAutoScrollActionPerformed - private void btnConnectActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_btnConnectActionPerformed {//GEN-HEADEREND:event_btnConnectActionPerformed if (!btnConnect.isEnabled()) @@ -796,7 +786,7 @@ public class BTC_MainPanel extends javax.swing.JFrame private javax.swing.JSplitPane splitPane; private javax.swing.JTable tblPlayers; private javax.swing.JTextField txtCommand; - private javax.swing.JComboBox txtServer; + private javax.swing.JComboBox txtServer; // End of variables declaration//GEN-END:variables public javax.swing.JButton getBtnConnect() @@ -824,7 +814,7 @@ public class BTC_MainPanel extends javax.swing.JFrame return txtCommand; } - public javax.swing.JComboBox getTxtServer() + public javax.swing.JComboBox getTxtServer() { return txtServer; } diff --git a/src/main/java/me/StevenLawson/BukkitTelnetClient/PlayerCommandEntry.java b/src/main/java/me/StevenLawson/BukkitTelnetClient/PlayerCommandEntry.java new file mode 100644 index 0000000..02d1557 --- /dev/null +++ b/src/main/java/me/StevenLawson/BukkitTelnetClient/PlayerCommandEntry.java @@ -0,0 +1,77 @@ +package me.StevenLawson.BukkitTelnetClient; + +import java.util.List; +import org.w3c.dom.*; + +public class PlayerCommandEntry +{ + private final String name; + private final String format; + + public PlayerCommandEntry(String name, String format) + { + this.name = name; + this.format = format; + } + + public String getFormat() + { + return format; + } + + public String getName() + { + return name; + } + + public static Element listToXML(final List playerCommands, final Document doc) + { + final Element plcElement = doc.createElement("playerCommands"); + + for (final PlayerCommandEntry command : playerCommands) + { + final Element commandElement = doc.createElement("playerCommand"); + plcElement.appendChild(commandElement); + + final Element commandName = doc.createElement("name"); + commandName.appendChild(doc.createTextNode(command.getName())); + commandElement.appendChild(commandName); + + final Element commandFormat = doc.createElement("format"); + commandFormat.appendChild(doc.createTextNode(command.getFormat())); + commandElement.appendChild(commandFormat); + } + + return plcElement; + } + + public static boolean xmlToList(final List playerCommands, final Document doc) + { + NodeList playerCommandNodes = doc.getDocumentElement().getElementsByTagName("playerCommands"); + if (playerCommandNodes.getLength() < 1) + { + return false; + } + playerCommandNodes = playerCommandNodes.item(0).getChildNodes(); + + playerCommands.clear(); + + for (int i = 0; i < playerCommandNodes.getLength(); i++) + { + final Node node = playerCommandNodes.item(i); + if (node.getNodeType() == Node.ELEMENT_NODE) + { + final Element element = (Element) node; + + final PlayerCommandEntry command = new PlayerCommandEntry( + element.getElementsByTagName("name").item(0).getTextContent(), + element.getElementsByTagName("format").item(0).getTextContent() + ); + + playerCommands.add(command); + } + } + + return true; + } +} diff --git a/src/main/java/me/StevenLawson/BukkitTelnetClient/ServerEntry.java b/src/main/java/me/StevenLawson/BukkitTelnetClient/ServerEntry.java new file mode 100644 index 0000000..8c2476c --- /dev/null +++ b/src/main/java/me/StevenLawson/BukkitTelnetClient/ServerEntry.java @@ -0,0 +1,153 @@ +package me.StevenLawson.BukkitTelnetClient; + +import java.util.*; +import org.w3c.dom.*; + +public class ServerEntry +{ + private String name; + private String address; + private boolean lastUsed = false; + + public ServerEntry(final String name, final String address) + { + this.name = name; + this.address = address; + } + + public ServerEntry(final String name, final String address, final boolean lastUsed) + { + this.name = name; + this.address = address; + this.lastUsed = lastUsed; + } + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getAddress() + { + return address; + } + + public void setAddress(String address) + { + this.address = address; + } + + public boolean isLastUsed() + { + return lastUsed; + } + + public void setLastUsed(boolean lastUsed) + { + this.lastUsed = lastUsed; + } + + @Override + public int hashCode() + { + int hash = 7; + hash = 67 * hash + Objects.hashCode(this.name); + hash = 67 * hash + Objects.hashCode(this.address); + return hash; + } + + @Override + public boolean equals(Object obj) + { + if (obj == null) + { + return false; + } + + if (getClass() != obj.getClass()) + { + return false; + } + + final ServerEntry other = (ServerEntry) obj; + + if (!Objects.equals(this.getName(), other.getName())) + { + return false; + } + + if (!Objects.equals(this.getAddress(), other.getAddress())) + { + return false; + } + + return true; + } + + public static Element listToXML(final Set servers, final Document doc) + { + final Element serversElement = doc.createElement("servers"); + + for (final ServerEntry command : servers) + { + final Element commandElement = doc.createElement("server"); + serversElement.appendChild(commandElement); + + final Element serverName = doc.createElement("name"); + serverName.appendChild(doc.createTextNode(command.getName())); + commandElement.appendChild(serverName); + + final Element serverAddress = doc.createElement("address"); + serverAddress.appendChild(doc.createTextNode(command.getAddress())); + commandElement.appendChild(serverAddress); + + final Element serverLastUsed = doc.createElement("lastUsed"); + serverLastUsed.appendChild(doc.createTextNode(Boolean.toString(command.isLastUsed()))); + commandElement.appendChild(serverLastUsed); + } + + return serversElement; + } + + public static boolean xmlToList(final Set servers, final Document doc) + { + NodeList serverNodes = doc.getDocumentElement().getElementsByTagName("servers"); + if (serverNodes.getLength() < 1) + { + return false; + } + serverNodes = serverNodes.item(0).getChildNodes(); + + servers.clear(); + + for (int i = 0; i < serverNodes.getLength(); i++) + { + final Node node = serverNodes.item(i); + if (node.getNodeType() == Node.ELEMENT_NODE) + { + final Element element = (Element) node; + + final ServerEntry server = new ServerEntry( + element.getElementsByTagName("name").item(0).getTextContent(), + element.getElementsByTagName("address").item(0).getTextContent(), + Boolean.valueOf(element.getElementsByTagName("lastUsed").item(0).getTextContent()) + ); + + servers.add(server); + } + } + + return true; + } + + @Override + public String toString() + { + return String.format("%s (%s)", this.name, this.address); + } +}