From d537d17e23ce3dbf458c9986489565760d213db4 Mon Sep 17 00:00:00 2001 From: SamB440 Date: Thu, 19 Dec 2019 14:57:26 +0000 Subject: [PATCH] Discovery interface, implement region saving --- .../data/account/RPGRegionsAccount.java | 8 +++--- .../managers/data/region/Discovery.java | 9 +++++++ .../managers/data/region/WorldDiscovery.java | 24 ++++++++++++++++++ .../managers/data/sql/SqlStorage.java | 25 ++++++++++++++++--- 4 files changed, 60 insertions(+), 6 deletions(-) create mode 100644 src/main/java/net/islandearth/rpgregions/managers/data/region/Discovery.java create mode 100644 src/main/java/net/islandearth/rpgregions/managers/data/region/WorldDiscovery.java diff --git a/src/main/java/net/islandearth/rpgregions/managers/data/account/RPGRegionsAccount.java b/src/main/java/net/islandearth/rpgregions/managers/data/account/RPGRegionsAccount.java index 9348bae..a4e4b6e 100644 --- a/src/main/java/net/islandearth/rpgregions/managers/data/account/RPGRegionsAccount.java +++ b/src/main/java/net/islandearth/rpgregions/managers/data/account/RPGRegionsAccount.java @@ -1,5 +1,7 @@ package net.islandearth.rpgregions.managers.data.account; +import net.islandearth.rpgregions.managers.data.region.Discovery; + import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -7,13 +9,13 @@ import java.util.UUID; public class RPGRegionsAccount { private UUID uuid; - private List discoveredRegions = new ArrayList<>(); + private List discoveredRegions = new ArrayList<>(); - public RPGRegionsAccount(UUID uuid, List discoveredRegions) { + public RPGRegionsAccount(UUID uuid, List discoveredRegions) { this.discoveredRegions = discoveredRegions; } - public List getDiscoveredRegions() { + public List getDiscoveredRegions() { return discoveredRegions; } } \ No newline at end of file diff --git a/src/main/java/net/islandearth/rpgregions/managers/data/region/Discovery.java b/src/main/java/net/islandearth/rpgregions/managers/data/region/Discovery.java new file mode 100644 index 0000000..cffd443 --- /dev/null +++ b/src/main/java/net/islandearth/rpgregions/managers/data/region/Discovery.java @@ -0,0 +1,9 @@ +package net.islandearth.rpgregions.managers.data.region; + +import java.util.Date; + +public interface Discovery { + Date getDate(); + + String getRegion(); +} diff --git a/src/main/java/net/islandearth/rpgregions/managers/data/region/WorldDiscovery.java b/src/main/java/net/islandearth/rpgregions/managers/data/region/WorldDiscovery.java new file mode 100644 index 0000000..57bb0b6 --- /dev/null +++ b/src/main/java/net/islandearth/rpgregions/managers/data/region/WorldDiscovery.java @@ -0,0 +1,24 @@ +package net.islandearth.rpgregions.managers.data.region; + +import java.util.Date; + +public class WorldDiscovery implements Discovery { + + private Date date; + private String region; + + public WorldDiscovery(Date date, String region) { + this.date = date; + this.region = region; + } + + @Override + public Date getDate() { + return date; + } + + @Override + public String getRegion() { + return region; + } +} diff --git a/src/main/java/net/islandearth/rpgregions/managers/data/sql/SqlStorage.java b/src/main/java/net/islandearth/rpgregions/managers/data/sql/SqlStorage.java index 3306557..68d85e6 100644 --- a/src/main/java/net/islandearth/rpgregions/managers/data/sql/SqlStorage.java +++ b/src/main/java/net/islandearth/rpgregions/managers/data/sql/SqlStorage.java @@ -5,8 +5,11 @@ import com.google.common.collect.ImmutableMap; import net.islandearth.rpgregions.RPGRegions; import net.islandearth.rpgregions.managers.data.StorageManager; import net.islandearth.rpgregions.managers.data.account.RPGRegionsAccount; +import net.islandearth.rpgregions.managers.data.region.Discovery; +import net.islandearth.rpgregions.managers.data.region.WorldDiscovery; import org.bukkit.plugin.java.JavaPlugin; +import java.sql.Date; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; @@ -41,9 +44,9 @@ public class SqlStorage implements StorageManager { future.complete(cachedAccounts.get(uuid)); } else { DB.getResultsAsync("SELECT region FROM Discoveries WHERE uuid = ?", getDatabaseUuid(uuid)).whenComplete((results, error) -> { - List regions = new ArrayList<>(); + List regions = new ArrayList<>(); for (DbRow row : results) { - regions.add(row.getString("region")); + regions.add(new WorldDiscovery(Date.valueOf(row.getString("time")), row.getString("region"))); } RPGRegionsAccount account = new RPGRegionsAccount(uuid, regions); @@ -61,7 +64,23 @@ public class SqlStorage implements StorageManager { @Override public void removeCachedAccount(UUID uuid) { - //TODO save new regions + RPGRegionsAccount account = cachedAccounts.get(uuid); + List current = new ArrayList<>(); + DB.getResultsAsync("SELECT region FROM Discoveries WHERE uuid = ?", getDatabaseUuid(uuid)).whenComplete((results, error) -> { + for (DbRow row : results) { + current.add(new WorldDiscovery(Date.valueOf(row.getString("time")), row.getString("region"))); + } + }); + + for (Discovery region : account.getDiscoveredRegions()) { + if (!current.contains(region)) { + try { + DB.executeInsert("INSERT INTO Discoveries (uuid, region, time) VALUES (?, ?, ?)", uuid, region.getRegion(), region.getDate().toString()); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } cachedAccounts.remove(uuid); } }