Fixed bugs in ConfigEntryList.

This commit is contained in:
StevenLawson 2014-08-27 18:31:14 -04:00
parent 5ff5f765c3
commit 15ac9c013f
2 changed files with 57 additions and 29 deletions

View file

@ -457,6 +457,10 @@ public class BTC_MainPanel extends javax.swing.JFrame
public final void saveServersAndTriggerConnect() public final void saveServersAndTriggerConnect()
{ {
final Object selectedItem = txtServer.getSelectedItem(); final Object selectedItem = txtServer.getSelectedItem();
if (selectedItem == null)
{
return;
}
ServerEntry entry; ServerEntry entry;
if (selectedItem instanceof ServerEntry) if (selectedItem instanceof ServerEntry)

View file

@ -57,19 +57,28 @@ public abstract class ConfigEntryList<E extends ConfigEntry>
for (final Method method : getEntryClass().getDeclaredMethods()) for (final Method method : getEntryClass().getDeclaredMethods())
{ {
final ParameterGetter annotation = method.getDeclaredAnnotation(ParameterGetter.class); final ParameterGetter annotation = method.getDeclaredAnnotation(ParameterGetter.class);
if (annotation != null) if (annotation == null)
{ {
continue;
}
final Element parameter = doc.createElement(annotation.name());
Object value = null;
try try
{ {
final Element parameter = doc.createElement(annotation.name()); value = method.invoke(entry);
parameter.appendChild(doc.createTextNode(method.invoke(entry).toString()));
item.appendChild(parameter);
} }
catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | DOMException ex) catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex)
{ {
BukkitTelnetClient.LOGGER.log(Level.SEVERE, null, ex); BukkitTelnetClient.LOGGER.log(Level.SEVERE, null, ex);
} }
if (value != null)
{
parameter.appendChild(doc.createTextNode(value.toString()));
} }
item.appendChild(parameter);
} }
} }
@ -79,32 +88,47 @@ public abstract class ConfigEntryList<E extends ConfigEntry>
public boolean fromXML(final Document doc) public boolean fromXML(final Document doc)
{ {
NodeList itemNodes = doc.getDocumentElement().getElementsByTagName(getParentElementName()); NodeList itemNodes = doc.getDocumentElement().getElementsByTagName(getParentElementName());
if (itemNodes.getLength() < 1) if (itemNodes.getLength() == 0)
{ {
return false; return false;
} }
itemNodes.item(0).getChildNodes(); itemNodes = itemNodes.item(0).getChildNodes();
getList().clear(); getList().clear();
for (int i = 0; i < itemNodes.getLength(); i++) for (int i = 0; i < itemNodes.getLength(); i++)
{ {
final Node node = itemNodes.item(0); final Node itemNode = itemNodes.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) if (itemNode.getNodeType() == Node.ELEMENT_NODE)
{ {
final Element element = (Element) node; final E newEntry;
try try
{ {
final E newEntry = getEntryClass().newInstance(); newEntry = getEntryClass().newInstance();
}
catch (InstantiationException | IllegalAccessException ex)
{
BukkitTelnetClient.LOGGER.log(Level.SEVERE, null, ex);
return false;
}
final Element itemElement = (Element) itemNode;
for (final Method method : getEntryClass().getDeclaredMethods()) for (final Method method : getEntryClass().getDeclaredMethods())
{ {
final ParameterSetter annotation = method.getDeclaredAnnotation(ParameterSetter.class); final ParameterSetter annotation = method.getDeclaredAnnotation(ParameterSetter.class);
if (annotation != null) if (annotation == null)
{ {
final String valueStr = element.getElementsByTagName(annotation.name()).item(0).getTextContent(); continue;
}
final NodeList tags = itemElement.getElementsByTagName(annotation.name());
if (tags.getLength() > 0)
{
final String valueStr = itemElement.getElementsByTagName(annotation.name()).item(0).getTextContent();
final Class<?> _type = method.getParameterTypes()[0]; final Class<?> _type = method.getParameterTypes()[0];
try
{
if (_type == Boolean.class) if (_type == Boolean.class)
{ {
method.invoke(newEntry, Boolean.valueOf(valueStr)); method.invoke(newEntry, Boolean.valueOf(valueStr));
@ -114,17 +138,17 @@ public abstract class ConfigEntryList<E extends ConfigEntry>
method.invoke(newEntry, valueStr); method.invoke(newEntry, valueStr);
} }
} }
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex)
getList().add(newEntry);
}
catch (Exception ex)
{ {
BukkitTelnetClient.LOGGER.log(Level.SEVERE, null, ex); BukkitTelnetClient.LOGGER.log(Level.SEVERE, null, ex);
} }
} }
} }
getList().add(newEntry);
}
}
return true; return true;
} }