From c02ca30caa06fec46bf6796dbd17c8cdb6d3a077 Mon Sep 17 00:00:00 2001 From: wsbrenk Date: Mon, 20 May 2024 18:10:22 +0200 Subject: [PATCH] #2063 download missing world details --- src/main/java/core/db/DBManager.java | 5 +-- src/main/java/core/db/WorldDetailsTable.java | 4 +- .../java/core/model/WorldDetailsManager.java | 42 +++++++++++++++++-- src/main/java/core/net/MyConnector.java | 5 +++ src/main/java/module/ifa/RightPanel.java | 2 +- src/main/resources/release_notes.md | 5 ++- 6 files changed, 52 insertions(+), 11 deletions(-) diff --git a/src/main/java/core/db/DBManager.java b/src/main/java/core/db/DBManager.java index 635dcd69e..1bbdf8501 100644 --- a/src/main/java/core/db/DBManager.java +++ b/src/main/java/core/db/DBManager.java @@ -1560,7 +1560,6 @@ public void setTransferType(TransferType type) { * * @return the world detail league [ ] */ -// WorldDetail public List getAllWorldDetailLeagues() { return ((WorldDetailsTable) getTable(WorldDetailsTable.TABLENAME)) .getAllWorldDetailLeagues(); @@ -1571,11 +1570,11 @@ public List getAllWorldDetailLeagues() { * * @param leagues the leagues */ - public void saveWorldDetailLeagues(List leagues) { + public void storeWorldDetailLeagues(List leagues) { WorldDetailsTable table = (WorldDetailsTable) getTable(WorldDetailsTable.TABLENAME); table.truncateTable(); for (WorldDetailLeague league : leagues) { - table.insertWorldDetailsLeague(league); + table.storeWorldDetailsLeague(league); } } diff --git a/src/main/java/core/db/WorldDetailsTable.java b/src/main/java/core/db/WorldDetailsTable.java index f4ad8c39d..3fc566447 100644 --- a/src/main/java/core/db/WorldDetailsTable.java +++ b/src/main/java/core/db/WorldDetailsTable.java @@ -26,7 +26,7 @@ protected String createSelectStatement() { return createSelectStatement(""); } - void insertWorldDetailsLeague(WorldDetailLeague league){ + void storeWorldDetailsLeague(WorldDetailLeague league){ if(league == null) return; store(league); @@ -44,7 +44,7 @@ List getAllWorldDetailLeagues(){ @Override protected void insertDefaultValues(){ for ( var league : WorldDetailLeague.allLeagues){ - insertWorldDetailsLeague(league); + storeWorldDetailsLeague(league); } } } diff --git a/src/main/java/core/model/WorldDetailsManager.java b/src/main/java/core/model/WorldDetailsManager.java index f9d3315de..fb02c8030 100644 --- a/src/main/java/core/model/WorldDetailsManager.java +++ b/src/main/java/core/model/WorldDetailsManager.java @@ -1,9 +1,12 @@ package core.model; import core.db.DBManager; +import core.file.xml.XMLManager; +import core.file.xml.XMLWorldDetailsParser; +import core.net.MyConnector; +import core.util.HOLogger; -import java.util.HashMap; -import java.util.List; +import java.util.*; public class WorldDetailsManager { @@ -48,12 +51,45 @@ public WorldDetailLeague getWorldDetailLeagueByLeagueId(Integer leagueId) { return leagueMap.get(leagueId); } + /** + * Get world detail information of country id. + * If cache is empty, it will be initialized by the details stored in the database. + * If this information does not contain the requested country id, the world details will be downloaded + * from hattrick. The downloaded object will be added to the cache and the database. + * @param countryId Country Id + * @return WorldDetailLeague + */ public WorldDetailLeague getWorldDetailLeagueByCountryId(Integer countryId) { if (countryMap.isEmpty()) { initialize(); } + var ret = countryMap.get(countryId); + if (ret == null) { + ret = downloadWorldDetailLeague(countryId); + countryMap.put(countryId, ret); + DBManager.instance().storeWorldDetailLeagues(Collections.singletonList(ret)); + } + return ret; + } - return countryMap.get(countryId); + /** + * Download missing world detail information + * @param countryId Country Id + * @return WorldDetailLeague + */ + private WorldDetailLeague downloadWorldDetailLeague(Integer countryId) { + WorldDetailLeague ret = null; + try { + var worldDetails = MyConnector.instance().getWorldDetailsByCountryId(countryId); + var leagues = XMLWorldDetailsParser.parseDetails(XMLManager.parseString(worldDetails)); + if (!leagues.isEmpty()) { + ret = leagues.get(0); + } + } + catch (Exception e) { + HOLogger.instance().warning(getClass(), "Error downloading world details from " + countryId); + } + return ret; } public final List getLeagues() { diff --git a/src/main/java/core/net/MyConnector.java b/src/main/java/core/net/MyConnector.java index 73034fe4c..d4a7a9e40 100644 --- a/src/main/java/core/net/MyConnector.java +++ b/src/main/java/core/net/MyConnector.java @@ -508,6 +508,11 @@ public String getWorldDetails(int leagueId) throws IOException { return getCHPPWebFile(url); } + public String getWorldDetailsByCountryId(int countryId) throws IOException { + String url = htUrl + "?file=worlddetails&version=1.9&countryID=" + countryId; + return getCHPPWebFile(url); + } + // /////////////////////////////////////////////////////////////////////////////// // Update Checker // ////////////////////////////////////////////////////////////////////////////// diff --git a/src/main/java/module/ifa/RightPanel.java b/src/main/java/module/ifa/RightPanel.java index 015f1cddd..2f613625f 100644 --- a/src/main/java/module/ifa/RightPanel.java +++ b/src/main/java/module/ifa/RightPanel.java @@ -135,7 +135,7 @@ public void actionPerformed(ActionEvent arg0) { worldDetails = MyConnector.instance().getWorldDetails(0); List leagues = XMLWorldDetailsParser.parseDetails(XMLManager .parseString(worldDetails)); - DBManager.instance().saveWorldDetailLeagues(leagues); + DBManager.instance().storeWorldDetailLeagues(leagues); WorldDetailsManager.instance().refresh(); } catch (IOException e1) { e1.printStackTrace(); diff --git a/src/main/resources/release_notes.md b/src/main/resources/release_notes.md index c25fe3996..1298ddef6 100644 --- a/src/main/resources/release_notes.md +++ b/src/main/resources/release_notes.md @@ -18,11 +18,12 @@ ### Squad * Fix length of owner notes in players' database table (#1816) -* player avatar image can be reloaded (#1815) +* Player avatar image can be reloaded (#1815) * Fix error player download nickname null pointer exception (#1938) * Fix initial sorting by player group (#1909) * Show stamina sub skill (#383) -* fix error on player details display after initial download (#2044) +* Fix error on player details display after initial download (#2044) +* Update missing world details in database (#2063) ### Team Analyzer * Restore size of match prediction dialog box (#1898)