From 30c1ed38789d44de612c052198012ed5c3ba7d38 Mon Sep 17 00:00:00 2001 From: frigoref Date: Tue, 23 Jul 2024 00:21:21 +0200 Subject: [PATCH] issues_12447 #7 PlayerUnitsPanel.java - reintroduce usage of getUnitTypes - introduce panel != null check in loop UnitSeparator.java - introduce methode ortUnitCategories(unitCategories, territory, currentPlayer) - comment fix for Javadoc parse error --- .../odds/calculator/PlayerUnitsPanel.java | 29 ++++++++++--------- .../strategy/triplea/util/UnitSeparator.java | 11 ++++++- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/game-app/game-core/src/main/java/games/strategy/triplea/odds/calculator/PlayerUnitsPanel.java b/game-app/game-core/src/main/java/games/strategy/triplea/odds/calculator/PlayerUnitsPanel.java index af62e4c714..775a2302e1 100644 --- a/game-app/game-core/src/main/java/games/strategy/triplea/odds/calculator/PlayerUnitsPanel.java +++ b/game-app/game-core/src/main/java/games/strategy/triplea/odds/calculator/PlayerUnitsPanel.java @@ -65,8 +65,6 @@ public void init( final Territory territory) { this.isLandBattle = isLandBattle; unitPanels.clear(); - unitCategories = - UnitSeparator.getSortedUnitCategories(units, territory, uiContext.getMapData(), gamePlayer); removeAll(); final Predicate predicate; @@ -84,6 +82,8 @@ public void init( costs = new TuvCostsCalculator().getCostsForTuv(gamePlayer); } + unitCategories = getAllUnitCategories(gamePlayer, units); + UnitSeparator.sortUnitCategories(unitCategories, territory, gamePlayer); GamePlayer previousPlayer = null; JPanel panel = null; for (final UnitCategory category : unitCategories) { @@ -95,10 +95,12 @@ public void init( add(panel); previousPlayer = category.getOwner(); } - final var unitPanel = new UnitPanel(uiContext, category, costs); - unitPanel.addChangeListener(this::notifyListeners); - panel.add(unitPanel); - unitPanels.add(unitPanel); + if (panel != null) { + final var unitPanel = new UnitPanel(uiContext, category, costs); + unitPanel.addChangeListener(this::notifyListeners); + panel.add(unitPanel); + unitPanels.add(unitPanel); + } } } @@ -114,10 +116,11 @@ public void init( * production frontier and then any unit types the player owns on the map. Then populate the list * of units into the categories. */ - private Set categorize(final GamePlayer gamePlayer, final List units) { + private List getAllUnitCategories( + final GamePlayer gamePlayer, final List units) { // Get player unit types from production frontier and unit types on the map - final Set categories = new LinkedHashSet<>(); + final List categories = new ArrayList<>(); for (final UnitType t : getUnitTypes(gamePlayer)) { final UnitCategory category = new UnitCategory(t, gamePlayer); categories.add(category); @@ -136,15 +139,15 @@ private Set categorize(final GamePlayer gamePlayer, final List unitCategories = UnitSeparator.categorize(units); + final Set unitCategoriesWithUnits = UnitSeparator.categorize(units); for (final UnitCategory category : categories) { - for (final UnitCategory unitCategory : unitCategories) { - if (category.equals(unitCategory)) { - category.getUnits().addAll(unitCategory.getUnits()); + for (final UnitCategory unitCategoryWithUnits : unitCategoriesWithUnits) { + if (category.equals(unitCategoryWithUnits)) { + category.getUnits().addAll(unitCategoryWithUnits.getUnits()); } } } - categories.addAll(unitCategories); + categories.addAll(unitCategoriesWithUnits); return categories; } diff --git a/game-app/game-core/src/main/java/games/strategy/triplea/util/UnitSeparator.java b/game-app/game-core/src/main/java/games/strategy/triplea/util/UnitSeparator.java index 4213be374c..13f6ad371e 100644 --- a/game-app/game-core/src/main/java/games/strategy/triplea/util/UnitSeparator.java +++ b/game-app/game-core/src/main/java/games/strategy/triplea/util/UnitSeparator.java @@ -105,9 +105,18 @@ public static void sortUnitCategories( unitCategories.sort(getComparatorUnitCategories(gameData)); } + /** + * Sorts a list of UnitCategory with Territory and GamePlayer + * + */ + public static void sortUnitCategories( + final List unitCategories, final Territory t, final GamePlayer currentPlayer) { + unitCategories.sort(getComparatorUnitCategories(t, currentPlayer)); + } + /** * Returns Comparator for unit categories with current GameData Try to - * use a method returning List instead + * use a method returning List of UnitCategory> instead */ public static Comparator getComparatorUnitCategories(final GameData gameData) { return getComparatorUnitCategories(