Skip to content

Commit

Permalink
Bug Fix: Loading a filter with a formula/jump column compare crashes …
Browse files Browse the repository at this point in the history
…jEveAssets (BugId: 943, 942)
  • Loading branch information
GoldenGnu committed Jun 13, 2021
1 parent c310d4a commit ed426c0
Show file tree
Hide file tree
Showing 22 changed files with 84 additions and 43 deletions.
2 changes: 1 addition & 1 deletion src/main/java/net/nikr/eve/jeveasset/Program.java
Expand Up @@ -119,7 +119,7 @@ private enum ProgramAction {
public static final String PROGRAM_VERSION = "6.9.1 DEV BUILD 1";
public static final String PROGRAM_NAME = "jEveAssets";
public static final String PROGRAM_HOMEPAGE = "https://eve.nikr.net/jeveasset";
public static final boolean PROGRAM_DEV_BUILD = false;
public static final boolean PROGRAM_DEV_BUILD = true;

private static boolean debug = false;
private static boolean forceUpdate = false;
Expand Down
Expand Up @@ -573,9 +573,11 @@ private void loadSettings() {
List<Integer> selections = new ArrayList<>();
for (String column : list) {
try {
EnumTableColumn<?> enumColumn = exportFilterControl.valueOf(column);
int index = columnIndex.indexOf(enumColumn);
selections.add(index);
EnumTableColumn<E> enumColumn = exportFilterControl.toColumn(column);
if (enumColumn != null) {
int index = columnIndex.indexOf(enumColumn);
selections.add(index);
}
} catch (IllegalArgumentException ex) {
//ignore missing columns...
}
Expand Down
Expand Up @@ -30,14 +30,14 @@

public abstract class ExportFilterControl<E> {

protected abstract EnumTableColumn<?> valueOf(String column);
protected abstract EnumTableColumn<E> toColumn(String column);
protected abstract List<EnumTableColumn<E>> getShownColumns();
protected abstract void saveSettings(final String msg);

public Map<String, List<Filter>> getAllFilters() {
return new HashMap<String, List<Filter>>();
return new HashMap<>();
}
public List<Filter> getCurrentFilters() {
return new ArrayList<Filter>();
return new ArrayList<>();
}
}
Expand Up @@ -37,8 +37,13 @@
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTable;
import net.nikr.eve.jeveasset.data.settings.Settings;
import net.nikr.eve.jeveasset.data.settings.SettingsUpdateListener;
import net.nikr.eve.jeveasset.gui.shared.filter.Filter.AllColumn;
import net.nikr.eve.jeveasset.gui.shared.menu.JFormulaDialog.Formula;
import net.nikr.eve.jeveasset.gui.shared.menu.JMenuJumps.Jump;
import net.nikr.eve.jeveasset.gui.shared.table.ColumnManager.FormulaColumn;
import net.nikr.eve.jeveasset.gui.shared.table.ColumnManager.JumpColumn;
import net.nikr.eve.jeveasset.gui.shared.table.EnumTableColumn;
import net.nikr.eve.jeveasset.gui.shared.table.containers.NumberValue;

Expand Down Expand Up @@ -287,8 +292,44 @@ public void setFilterShown(boolean shown) {
gui.setFilterShown(shown);
}

@Override
protected final EnumTableColumn<E> toColumn(String column) {
try {
EnumTableColumn<E> enumTableColumn = valueOf(column);
if (enumTableColumn != null) {
return enumTableColumn;
}
} catch (IllegalArgumentException e) {
//No problem
}
return toColumn(column, name);
}

public static <E> EnumTableColumn<E> toColumn(String column, String toolName) {
return toColumn(Settings.get(), column, toolName);
}

public static <E> EnumTableColumn<E> toColumn(Settings setting, String column, String toolName) {
if (setting == null) {
return null;
}
for (Formula formula : setting.getTableFormulas(toolName)) {
if (formula.getColumnName().equals(column)) {
return new FormulaColumn<>(formula);
}
}
for (Jump jump : setting.getTableJumps(toolName)) {
if (jump.getName().equals(column)) {
return new JumpColumn<>(jump);
}
}
return null;
}

protected abstract List<EnumTableColumn<E>> getColumns();

protected abstract EnumTableColumn<E> valueOf(String column) throws IllegalArgumentException;

protected abstract Object getColumnValue(E item, String column);

/**
Expand Down
Expand Up @@ -376,7 +376,10 @@ void setFilter(final Filter filter) {
jColumn.setSelectedItem(filter.getColumn());
jCompare.setSelectedItem(filter.getCompareType());
if (isColumnCompare()) {
jCompareColumn.setSelectedItem(filterControl.valueOf(filter.getText()));
EnumTableColumn<E> enumColumn = filterControl.toColumn(filter.getText());
if (enumColumn != null) {
jCompareColumn.setSelectedItem(enumColumn);
}
} else if (isDateCompare()) {
setDateString(Formater.columnStringToDate(filter.getText()));
} else {
Expand Down
Expand Up @@ -331,7 +331,7 @@ protected Object getColumnValue(final MyAsset item, final String column) {
}

@Override
protected EnumTableColumn<?> valueOf(final String column) {
protected EnumTableColumn<MyAsset> valueOf(final String column) {
return AssetTableFormat.valueOf(column);
}

Expand Down
Expand Up @@ -241,7 +241,7 @@ public ContractsFilterControl(EventList<MyContractItem> exportEventList) {

@Override
protected Object getColumnValue(MyContractItem contract, String column) {
EnumTableColumn<?> tableColumn = valueOf(column);
EnumTableColumn<MyContractItem> tableColumn = valueOf(column);
if (tableColumn instanceof ContractsExtendedTableFormat) {
ContractsExtendedTableFormat format = (ContractsExtendedTableFormat) tableColumn;
return format.getColumnValue(contract);
Expand All @@ -251,7 +251,7 @@ protected Object getColumnValue(MyContractItem contract, String column) {
}

@Override
protected EnumTableColumn<?> valueOf(String column) {
protected EnumTableColumn<MyContractItem> valueOf(String column) {
try {
return ContractsTableFormat.valueOf(column);
} catch (IllegalArgumentException exception) {
Expand Down
Expand Up @@ -180,7 +180,7 @@ protected Object getColumnValue(final Item item, final String column) {
}

@Override
protected EnumTableColumn<?> valueOf(final String column) {
protected EnumTableColumn<Item> valueOf(final String column) {
return ItemTableFormat.valueOf(column);
}

Expand Down
Expand Up @@ -243,7 +243,7 @@ protected Object getColumnValue(final MyIndustryJob item, final String column) {
}

@Override
protected EnumTableColumn<?> valueOf(final String column) {
protected EnumTableColumn<MyIndustryJob> valueOf(final String column) {
return IndustryJobTableFormat.valueOf(column);
}

Expand Down
Expand Up @@ -231,7 +231,7 @@ protected Object getColumnValue(final IndustrySlot value, final String column) {
}

@Override
protected EnumTableColumn<?> valueOf(final String column) {
protected EnumTableColumn<IndustrySlot> valueOf(final String column) {
return IndustrySlotTableFormat.valueOf(column);
}

Expand Down
Expand Up @@ -172,7 +172,7 @@ protected Object getColumnValue(final MyJournal journal, final String column) {
}

@Override
protected EnumTableColumn<?> valueOf(final String column) {
protected EnumTableColumn<MyJournal> valueOf(final String column) {
return JournalTableFormat.valueOf(column);
}

Expand Down
Expand Up @@ -62,6 +62,7 @@
import net.nikr.eve.jeveasset.gui.shared.components.ListComboBoxModel;
import net.nikr.eve.jeveasset.gui.shared.filter.ExportDialog;
import net.nikr.eve.jeveasset.gui.shared.filter.ExportFilterControl;
import net.nikr.eve.jeveasset.gui.shared.filter.FilterControl;
import net.nikr.eve.jeveasset.gui.shared.menu.JMenuInfo;
import net.nikr.eve.jeveasset.gui.shared.menu.MenuData;
import net.nikr.eve.jeveasset.gui.shared.menu.MenuManager.TableMenu;
Expand Down Expand Up @@ -613,7 +614,7 @@ public void actionPerformed(final ActionEvent e) {

private class LoadoutsFilterControl extends ExportFilterControl<Loadout> {
@Override
protected EnumTableColumn<?> valueOf(final String column) {
protected EnumTableColumn<Loadout> toColumn(final String column) {
try {
return LoadoutTableFormat.valueOf(column);
} catch (IllegalArgumentException exception) {
Expand All @@ -624,7 +625,7 @@ protected EnumTableColumn<?> valueOf(final String column) {
} catch (IllegalArgumentException exception) {

}
throw new RuntimeException("Fail to parse filter column: " + column);
return FilterControl.toColumn(column, NAME);
}

@Override
Expand Down
Expand Up @@ -52,6 +52,7 @@
import net.nikr.eve.jeveasset.gui.shared.components.ListComboBoxModel;
import net.nikr.eve.jeveasset.gui.shared.filter.ExportDialog;
import net.nikr.eve.jeveasset.gui.shared.filter.ExportFilterControl;
import net.nikr.eve.jeveasset.gui.shared.filter.FilterControl;
import net.nikr.eve.jeveasset.gui.shared.menu.JMenuInfo;
import net.nikr.eve.jeveasset.gui.shared.menu.MenuData;
import net.nikr.eve.jeveasset.gui.shared.menu.MenuManager.TableMenu;
Expand Down Expand Up @@ -387,7 +388,7 @@ public void actionPerformed(final ActionEvent e) {
private class MaterialsFilterControl extends ExportFilterControl<Material> {

@Override
protected EnumTableColumn<?> valueOf(final String column) {
protected EnumTableColumn<Material> toColumn(final String column) {
try {
return MaterialTableFormat.valueOf(column);
} catch (IllegalArgumentException exception) {
Expand All @@ -398,7 +399,7 @@ protected EnumTableColumn<?> valueOf(final String column) {
} catch (IllegalArgumentException exception) {

}
throw new RuntimeException("Fail to parse filter column: " + column);
return FilterControl.toColumn(column, NAME);
}

@Override
Expand Down
Expand Up @@ -730,7 +730,7 @@ protected Object getColumnValue(final MyMarketOrder marketOrder, final String co
}

@Override
protected EnumTableColumn<?> valueOf(final String column) {
protected EnumTableColumn<MyMarketOrder> valueOf(final String column) {
return MarketTableFormat.valueOf(column);
}

Expand Down
Expand Up @@ -27,6 +27,7 @@
import ca.odell.glazedlists.swing.DefaultEventSelectionModel;
import ca.odell.glazedlists.swing.DefaultEventTableModel;
import ca.odell.glazedlists.swing.TableComparatorChooser;
import com.sun.scenario.effect.FilterContext;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
Expand Down Expand Up @@ -63,6 +64,7 @@
import net.nikr.eve.jeveasset.gui.shared.filter.ExportDialog;
import net.nikr.eve.jeveasset.gui.shared.filter.ExportFilterControl;
import net.nikr.eve.jeveasset.gui.shared.filter.Filter;
import net.nikr.eve.jeveasset.gui.shared.filter.FilterControl;
import net.nikr.eve.jeveasset.gui.shared.menu.JMenuInfo;
import net.nikr.eve.jeveasset.gui.shared.menu.JMenuInfo.InfoItem;
import net.nikr.eve.jeveasset.gui.shared.menu.MenuData;
Expand Down Expand Up @@ -677,13 +679,13 @@ public List<Filter> getFilters() {
private class OverviewFilterControl extends ExportFilterControl<Overview> {

@Override
protected EnumTableColumn<?> valueOf(final String column) {
protected EnumTableColumn<Overview> toColumn(final String column) {
try {
return OverviewTableFormat.valueOf(column);
} catch (IllegalArgumentException exception) {

}
throw new RuntimeException("Fail to parse filter column: " + column);
return FilterControl.toColumn(column, NAME);
}

@Override
Expand Down
Expand Up @@ -377,7 +377,7 @@ public ReprocessedFilterControl(EventList<ReprocessedInterface> exportEventList)

@Override
protected Object getColumnValue(final ReprocessedInterface reprocessed, final String column) {
EnumTableColumn<?> tableColumn = valueOf(column);
EnumTableColumn<ReprocessedInterface> tableColumn = valueOf(column);
if (tableColumn instanceof ReprocessedExtendedTableFormat) {
ReprocessedExtendedTableFormat format = (ReprocessedExtendedTableFormat) tableColumn;
return format.getColumnValue(reprocessed);
Expand All @@ -387,7 +387,7 @@ protected Object getColumnValue(final ReprocessedInterface reprocessed, final St
}

@Override
protected EnumTableColumn<?> valueOf(final String column) {
protected EnumTableColumn<ReprocessedInterface> valueOf(final String column) {
try {
return ReprocessedTableFormat.valueOf(column);
} catch (IllegalArgumentException exception) {
Expand Down
Expand Up @@ -1356,7 +1356,7 @@ public StockpileFilterControl(EventList<StockpileItem> exportEventList) {

@Override
protected Object getColumnValue(final StockpileItem item, final String column) {
EnumTableColumn<?> tableColumn = valueOf(column);
EnumTableColumn<StockpileItem> tableColumn = valueOf(column);
if (tableColumn instanceof StockpileExtendedTableFormat) {
StockpileExtendedTableFormat format = (StockpileExtendedTableFormat) tableColumn;
return format.getColumnValue(item);
Expand All @@ -1366,7 +1366,7 @@ protected Object getColumnValue(final StockpileItem item, final String column) {
}

@Override
protected EnumTableColumn<?> valueOf(final String column) {
protected EnumTableColumn<StockpileItem> valueOf(String column) {
try {
return StockpileTableFormat.valueOf(column);
} catch (IllegalArgumentException exception) {
Expand Down
Expand Up @@ -299,7 +299,7 @@ protected Object getColumnValue(final MyTransaction transaction, final String co
}

@Override
protected EnumTableColumn<?> valueOf(final String column) {
protected EnumTableColumn<MyTransaction> valueOf(final String column) {
return TransactionTableFormat.valueOf(column);
}

Expand Down
Expand Up @@ -861,7 +861,7 @@ protected Object getColumnValue(final TreeAsset item, final String column) {
}

@Override
protected EnumTableColumn<?> valueOf(final String column) {
protected EnumTableColumn<TreeAsset> valueOf(final String column) {
return TreeTableFormat.valueOf(column);
}

Expand Down
Expand Up @@ -249,7 +249,7 @@ protected Object getColumnValue(final Value value, final String column) {
}

@Override
protected EnumTableColumn<?> valueOf(final String column) {
protected EnumTableColumn<Value> valueOf(final String column) {
return ValueTableFormat.valueOf(column);
}

Expand Down
17 changes: 4 additions & 13 deletions src/main/java/net/nikr/eve/jeveasset/io/local/SettingsReader.java
Expand Up @@ -77,10 +77,9 @@
import net.nikr.eve.jeveasset.gui.shared.filter.Filter.AllColumn;
import net.nikr.eve.jeveasset.gui.shared.filter.Filter.CompareType;
import net.nikr.eve.jeveasset.gui.shared.filter.Filter.LogicType;
import net.nikr.eve.jeveasset.gui.shared.filter.FilterControl;
import net.nikr.eve.jeveasset.gui.shared.menu.JFormulaDialog.Formula;
import net.nikr.eve.jeveasset.gui.shared.menu.JMenuJumps.Jump;
import net.nikr.eve.jeveasset.gui.shared.table.ColumnManager.FormulaColumn;
import net.nikr.eve.jeveasset.gui.shared.table.ColumnManager.JumpColumn;
import net.nikr.eve.jeveasset.gui.shared.table.EnumTableColumn;
import net.nikr.eve.jeveasset.gui.shared.table.EnumTableFormatAdaptor.ResizeMode;
import net.nikr.eve.jeveasset.gui.shared.table.EnumTableFormatAdaptor.SimpleColumn;
Expand Down Expand Up @@ -1636,17 +1635,9 @@ public static EnumTableColumn<?> getColumn(final String column, final String tab
} catch (IllegalArgumentException exception) {

}
if (settings != null) {
for (Formula formula : settings.getTableFormulas(tableName)) {
if (formula.getColumnName().equals(column)) {
return new FormulaColumn<>(formula);
}
}
for (Jump jump : settings.getTableJumps(tableName)) {
if (jump.getName().equals(column)) {
return new JumpColumn<>(jump);
}
}
EnumTableColumn<?> enumTableColumn = FilterControl.toColumn(settings, column, tableName);
if (enumTableColumn != null) {
return enumTableColumn;
}
//All
if (column.equals("ALL") || column.equals("all")) {
Expand Down
Expand Up @@ -843,7 +843,7 @@ public static class Item { }
public class TestFilterControl extends FilterControl<Item> {

@Override
protected EnumTableColumn<?> valueOf(final String column) {
protected EnumTableColumn<Item> valueOf(final String column) {
return TestEnum.valueOf(column);
}

Expand Down

0 comments on commit ed426c0

Please sign in to comment.