Skip to content

Commit 0cdcbac

Browse files
authored
Merge pull request #5619 from kwvanderlinde/bugfix/5607-cast-exception
1.18 - Avoid potential for cast exceptions for token property table
2 parents e602917 + 5c72b2e commit 0cdcbac

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

src/main/java/net/rptools/maptool/client/ui/token/dialog/edit/EditTokenDialog.java

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
import javax.swing.event.DocumentEvent;
5252
import javax.swing.event.DocumentListener;
5353
import javax.swing.table.AbstractTableModel;
54-
import javax.swing.table.DefaultTableModel;
5554
import javax.swing.table.TableCellRenderer;
5655
import javax.swing.text.Position.Bias;
5756
import javax.swing.text.html.HTMLDocument;
@@ -138,6 +137,10 @@ public EditTokenDialog() {
138137
this(new TokenPropertiesDialog());
139138
}
140139

140+
public void initPropertyTable() {
141+
getPropertyTable().setModel(new TokenPropertyTableModel());
142+
}
143+
141144
public void initGMNotesEditorPane() {
142145
setGmNotesEnabled(MapTool.getPlayer().isGM());
143146
}
@@ -677,15 +680,9 @@ private void updatePropertiesTable(@Nullable Token token, final String propertyT
677680
EventQueue.invokeLater(
678681
() -> {
679682
PropertyTable pp = getPropertyTable();
680-
if (token != null) {
681-
var propertyList = MapTool.getCampaign().getTokenPropertyList(propertyType);
682-
683-
pp.setModel(
684-
new TokenPropertyTableModel(
685-
token, propertyType, propertyList, propertyCellRenderer));
686-
} else {
687-
pp.setModel(new DefaultTableModel());
688-
}
683+
var propertyList = MapTool.getCampaign().getTokenPropertyList(propertyType);
684+
pp.setModel(
685+
new TokenPropertyTableModel(token, propertyType, propertyList, propertyCellRenderer));
689686
pp.expandAll();
690687
});
691688
}
@@ -925,7 +922,15 @@ public boolean commit() {
925922
token.setSpeechMap(((KeyValueTableModel) getSpeechTable().getModel()).getMap());
926923

927924
/* Properties */
928-
((TokenPropertyTableModel) getPropertyTable().getModel()).applyTo(token);
925+
var tableModel = getPropertyTable().getModel();
926+
if (getPropertyTable().getModel() instanceof TokenPropertyTableModel tokenPropertyTableModel) {
927+
tokenPropertyTableModel.applyTo(token);
928+
} else {
929+
log.warn(
930+
"Property table model is not of the expected type; expected {} but got {}",
931+
TokenPropertyTableModel.class,
932+
tableModel.getClass());
933+
}
929934

930935
/* Charsheet */
931936
if (getCharSheetPanel().getImageId() != null) {
@@ -2165,16 +2170,21 @@ private static class TokenPropertyTableModel
21652170
private final List<TokenProperty> propertyList;
21662171
private final Map<String, String> propertyMap;
21672172

2173+
public TokenPropertyTableModel() {
2174+
propertyList = List.of();
2175+
propertyMap = Map.of();
2176+
}
2177+
21682178
public TokenPropertyTableModel(
2169-
Token model,
2179+
@Nullable Token model,
21702180
String propertyType,
21712181
List<TokenProperty> propertyList,
21722182
TableCellRenderer propertyCellRenderer) {
21732183
this.propertyList = propertyList;
21742184

21752185
this.propertyMap = new HashMap<>();
21762186
for (TokenProperty property : propertyList) {
2177-
String value = (String) model.getProperty(property.getName());
2187+
String value = model == null ? null : (String) model.getProperty(property.getName());
21782188
if (value == null) {
21792189
value = property.getDefaultValue();
21802190
}

0 commit comments

Comments
 (0)