diff --git a/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStoreCopydb.java b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStoreCopydb.java index 958ad8f8..5fd19314 100644 --- a/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStoreCopydb.java +++ b/src/com/massivecraft/massivecore/command/massivecore/CmdMassiveCoreStoreCopydb.java @@ -14,7 +14,7 @@ import com.massivecraft.massivecore.store.Coll; import com.massivecraft.massivecore.store.Db; import com.massivecraft.massivecore.store.Entity; import com.massivecraft.massivecore.store.MStore; -import com.massivecraft.massivecore.xlib.gson.JsonElement; +import com.massivecraft.massivecore.xlib.gson.JsonObject; public class CmdMassiveCoreStoreCopydb extends MassiveCommand { @@ -88,7 +88,7 @@ public class CmdMassiveCoreStoreCopydb extends MassiveCommand for (String id : ids) { - Entry data = fromDb.load(fromColl, id); + Entry data = fromDb.load(fromColl, id); toDb.save(toColl, id, data.getKey()); } } diff --git a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreMain.java b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreMain.java index 24f7683d..0c1d5be8 100644 --- a/src/com/massivecraft/massivecore/engine/EngineMassiveCoreMain.java +++ b/src/com/massivecraft/massivecore/engine/EngineMassiveCoreMain.java @@ -19,9 +19,9 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result; +import org.bukkit.event.player.PlayerChatTabCompleteEvent; import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerLoginEvent; -import org.bukkit.event.player.PlayerChatTabCompleteEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerTeleportEvent; @@ -48,7 +48,7 @@ import com.massivecraft.massivecore.store.SenderColl; import com.massivecraft.massivecore.util.IdUtil; import com.massivecraft.massivecore.util.MUtil; import com.massivecraft.massivecore.util.SmokeUtil; -import com.massivecraft.massivecore.xlib.gson.JsonElement; +import com.massivecraft.massivecore.xlib.gson.JsonObject; public class EngineMassiveCoreMain extends EngineAbstract { @@ -379,13 +379,13 @@ public class EngineMassiveCoreMain extends EngineAbstract // This section handles the automatic sync of a players corresponding massive store entries on login. // If possible the database IO is made during the AsyncPlayerPreLoginEvent to offloat the main server thread. - protected Map, Entry>> idToRemoteEntries = new ConcurrentHashMap, Entry>>(); + protected Map, Entry>> idToRemoteEntries = new ConcurrentHashMap<>(); // Intended to be ran asynchronously. public void storeRemoteEntries(final String playerId) { // Create remote entries ... - Map, Entry> remoteEntries = createRemoteEntries(playerId); + Map, Entry> remoteEntries = createRemoteEntries(playerId); // ... store them ... this.idToRemoteEntries.put(playerId, remoteEntries); @@ -407,10 +407,10 @@ public class EngineMassiveCoreMain extends EngineAbstract // Intended to be ran synchronously. // It will use remoteEntries from AsyncPlayerPreLoginEvent if possible. // If no such remoteEntries are available it will create them and thus lock the main server thread a bit. - public Map, Entry> getRemoteEntries(String playerId) + public Map, Entry> getRemoteEntries(String playerId) { // If there are stored remote entries we used those ... - Map, Entry> ret = idToRemoteEntries.remove(playerId); + Map, Entry> ret = idToRemoteEntries.remove(playerId); if (ret != null) return ret; // ... otherwise we create brand new ones. @@ -418,15 +418,15 @@ public class EngineMassiveCoreMain extends EngineAbstract } // Used by the two methods above. - public Map, Entry> createRemoteEntries(String playerId) + public Map, Entry> createRemoteEntries(String playerId) { // Create Ret - Map, Entry> ret = new HashMap, Entry>(); + Map, Entry> ret = new HashMap, Entry>(); // Fill Ret for (final SenderColl coll : Coll.getSenderInstances()) { - Entry remoteEntry = coll.getDb().load(coll, playerId); + Entry remoteEntry = coll.getDb().load(coll, playerId); ret.put(coll, remoteEntry); } @@ -468,13 +468,13 @@ public class EngineMassiveCoreMain extends EngineAbstract final String playerId = player.getUniqueId().toString(); // ... get remote entries ... - Map, Entry> remoteEntries = getRemoteEntries(playerId); + Map, Entry> remoteEntries = getRemoteEntries(playerId); // ... and sync each of them. - for (Entry, Entry> entry : remoteEntries.entrySet()) + for (Entry, Entry> entry : remoteEntries.entrySet()) { SenderColl coll = entry.getKey(); - Entry remoteEntry = entry.getValue(); + Entry remoteEntry = entry.getValue(); coll.syncId(playerId, null, remoteEntry); } } diff --git a/src/com/massivecraft/massivecore/store/Coll.java b/src/com/massivecraft/massivecore/store/Coll.java index 83031b12..7c0df308 100644 --- a/src/com/massivecraft/massivecore/store/Coll.java +++ b/src/com/massivecraft/massivecore/store/Coll.java @@ -3,7 +3,6 @@ package com.massivecraft.massivecore.store; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -17,10 +16,12 @@ import org.bukkit.plugin.Plugin; import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.MassivePlugin; import com.massivecraft.massivecore.NaturalOrderComparator; +import com.massivecraft.massivecore.collections.MassiveList; import com.massivecraft.massivecore.mixin.Mixin; import com.massivecraft.massivecore.util.Txt; import com.massivecraft.massivecore.xlib.gson.Gson; import com.massivecraft.massivecore.xlib.gson.JsonElement; +import com.massivecraft.massivecore.xlib.gson.JsonObject; public class Coll> extends CollAbstract { @@ -107,6 +108,7 @@ public class Coll> extends CollAbstract return this.pusher; } + @Override public String getDebugName() { String ret = this.getPlugin().getName() + "::" + this.getBasename(); @@ -125,7 +127,6 @@ public class Coll> extends CollAbstract // Loaded protected Map id2entity; - protected Map entity2id; @Override public String fixId(Object oid) @@ -134,7 +135,7 @@ public class Coll> extends CollAbstract String ret = null; if (oid instanceof String) ret = (String) oid; - else if (oid.getClass() == this.getEntityClass()) ret = this.entity2id.get(oid); + else if (oid.getClass() == this.getEntityClass()) ret = ((Entity) oid).getId(); if (ret == null) return null; return this.isLowercasing() ? ret.toLowerCase() : ret; @@ -164,13 +165,15 @@ public class Coll> extends CollAbstract return this.id2entity.containsKey(id); } - @Override public Map getEntity2id() { return Collections.unmodifiableMap(this.entity2id); } - @Override public String getId(Object entity) { return this.entity2id.get(entity); } - @Override public boolean containsEntity(Object entity) { return this.entity2id.containsKey(entity); }; + @Override + public boolean containsEntity(Object entity) + { + return this.id2entity.containsValue(entity); + } @Override public Collection getAll() { - return Collections.unmodifiableCollection(this.entity2id.keySet()); + return Collections.unmodifiableCollection(this.id2entity.values()); } // -------------------------------------------- // @@ -202,7 +205,8 @@ public class Coll> extends CollAbstract // Should that instance be saved or not? // If it is default it should not be saved. - @Override public boolean isDefault(E entity) + @Override + public boolean isDefault(E entity) { return entity.isDefault(); } @@ -211,14 +215,12 @@ public class Coll> extends CollAbstract // COPY AND CREATE // -------------------------------------------- // - @SuppressWarnings({ "rawtypes", "unchecked" }) - public void copy(E ofrom, E oto) + @Override + public void copy(E efrom, E eto) { - if (ofrom == null) throw new NullPointerException("ofrom"); - if (oto == null) throw new NullPointerException("oto"); + if (efrom == null) throw new NullPointerException("efrom"); + if (eto == null) throw new NullPointerException("eto"); - Entity efrom = (Entity)ofrom; - Entity eto = (Entity)oto; eto.load(efrom); } @@ -267,7 +269,7 @@ public class Coll> extends CollAbstract { // Check entity if (entity == null) return null; - String previousEntityId = this.getId(entity); + String previousEntityId = entity.getId(); if (previousEntityId != null) return previousEntityId; String id; @@ -292,7 +294,6 @@ public class Coll> extends CollAbstract // Attach this.id2entity.put(id, entity); - this.entity2id.put(entity, id); // Identify Modification if (noteModification) @@ -311,7 +312,7 @@ public class Coll> extends CollAbstract { if (entity == null) throw new NullPointerException("entity"); - String id = this.getId(entity); + String id = entity.getId(); if (id == null) { // It seems the entity is already detached. @@ -383,6 +384,7 @@ public class Coll> extends CollAbstract protected Map identifiedModifications; + @Override public synchronized void putIdentifiedModificationFixed(String id, Modification modification) { if (id == null) throw new NullPointerException("id"); @@ -392,7 +394,8 @@ public class Coll> extends CollAbstract this.identifiedModifications.put(id, modification); } - protected synchronized void removeIdentifiedModificationFixed(String id) + @Override + public synchronized void removeIdentifiedModificationFixed(String id) { if (id == null) throw new NullPointerException("id"); this.identifiedModifications.remove(id); @@ -443,8 +446,6 @@ public class Coll> extends CollAbstract if (entity == null) return null; entity.clearSyncLogFields(); - this.entity2id.remove(entity); - // Remove entity reference info entity.setColl(null); entity.setId(null); @@ -474,7 +475,7 @@ public class Coll> extends CollAbstract if (entity == null) return; entity.clearSyncLogFields(); - JsonElement raw = this.getGson().toJsonTree(entity, this.getEntityClass()); + JsonObject raw = this.getGson().toJsonTree(entity, this.getEntityClass()).getAsJsonObject(); entity.setLastRaw(raw); if (this.isDefault(entity)) @@ -494,7 +495,7 @@ public class Coll> extends CollAbstract } @Override - public synchronized void loadFromRemoteFixed(String id, Entry remoteEntry) + public synchronized void loadFromRemoteFixed(String id, Entry remoteEntry) { if (id == null) throw new NullPointerException("id"); @@ -513,7 +514,7 @@ public class Coll> extends CollAbstract } } - JsonElement raw = remoteEntry.getKey(); + JsonObject raw = remoteEntry.getKey(); Long mtime = remoteEntry.getValue(); if ( ! this.remoteEntryIsOk(id, remoteEntry)) return; @@ -542,7 +543,7 @@ public class Coll> extends CollAbstract entity.setLastDefault(false); } - public boolean remoteEntryIsOk(String id, Entry remoteEntry) + public boolean remoteEntryIsOk(String id, Entry remoteEntry) { Long mtime = remoteEntry.getValue(); if (mtime == null) @@ -557,7 +558,7 @@ public class Coll> extends CollAbstract return false; } - JsonElement raw = remoteEntry.getKey(); + JsonObject raw = remoteEntry.getKey(); if (raw == null) { this.logLoadError(id, "Raw data was null. Is the file completely empty?"); @@ -711,12 +712,12 @@ public class Coll> extends CollAbstract protected boolean examineHasLocalAlterFixed(String id, E entity) { - JsonElement lastRaw = entity.getLastRaw(); - JsonElement currentRaw = null; + JsonObject lastRaw = entity.getLastRaw(); + JsonObject currentRaw = null; try { - currentRaw = this.getGson().toJsonTree(entity); + currentRaw = this.getGson().toJsonTree(entity, this.getEntityClass()).getAsJsonObject(); } catch (Exception e) { @@ -731,7 +732,7 @@ public class Coll> extends CollAbstract } @Override - public Modification syncIdFixed(String id, Modification modification, Entry remoteEntry) + public Modification syncIdFixed(String id, Modification modification, Entry remoteEntry) { if (id == null) throw new NullPointerException("id"); if (modification == null || modification == Modification.UNKNOWN) @@ -884,9 +885,12 @@ public class Coll> extends CollAbstract if (this.isWarningOnLocalAlter() && modification == Modification.LOCAL_ALTER) { MassiveCore.get().log( - "A local alter was made in " + this.getName() + " on " + id, - "This was unintended, the developers should be informed." + "A local alter was spotted in " + this.getDebugName() + " on " + id ); + E entity = this.get(id); + JsonObject lastRaw = entity.getLastRaw(); + JsonObject currentRaw = this.getGson().toJsonTree(entity, this.getEntityClass()).getAsJsonObject(); + this.logModification(lastRaw, currentRaw); } if (modification.isModified()) @@ -897,6 +901,40 @@ public class Coll> extends CollAbstract } } + protected void logModification(JsonObject lastRaw, JsonObject currentRaw) + { + List changes = new MassiveList<>(); + + // Check removal and modification. + for (Entry entry : lastRaw.entrySet()) + { + String name = entry.getKey(); + JsonElement currentValue = currentRaw.get(name); + if (currentValue == null) + { + changes.add(String.format("Removed %s", name)); + continue; + } + JsonElement lastValue = entry.getValue(); + if (MStore.equal(currentValue, lastValue)) return; + changes.add(String.format("Changed %s: %s -> %s", name, lastValue, currentValue)); + } + + // Check for addition + for (Entry entry : currentRaw.entrySet()) + { + String name = entry.getKey(); + if (lastRaw.has(name)) continue; + changes.add(String.format("Added %s: %s", name, entry.getValue())); + } + + // Log + for (String change : changes) + { + MassiveCore.get().log(change); + } + } + @Override public void syncIdentified() { @@ -918,13 +956,13 @@ public class Coll> extends CollAbstract @Override public void initLoadAllFromRemote() { - Map> idToEntryMap = this.getDb().loadAll(this); + Map> idToEntryMap = this.getDb().loadAll(this); if (idToEntryMap == null) return; - for (Entry> idToEntry : idToEntryMap.entrySet()) + for (Entry> idToEntry : idToEntryMap.entrySet()) { String id = idToEntry.getKey(); - Entry remoteEntry = idToEntry.getValue(); + Entry remoteEntry = idToEntry.getValue(); loadFromRemoteFixed(id, remoteEntry); } } @@ -972,7 +1010,6 @@ public class Coll> extends CollAbstract // STORAGE this.id2entity = (sorted) ? new ConcurrentSkipListMap(NaturalOrderComparator.get()) : new ConcurrentHashMap(); - this.entity2id = (Entity.class.isAssignableFrom(entityClass) && sorted) ? new ConcurrentSkipListMap((Comparator) ComparatorEntityId.get()) : new ConcurrentHashMap(); // ENTITY DATA this.identifiedModifications = new ConcurrentHashMap(); @@ -995,7 +1032,7 @@ public class Coll> extends CollAbstract if (this.supportsPusher()) { - //this.getPusher().init(); + this.getPusher().init(); } this.initLoadAllFromRemote(); @@ -1011,7 +1048,7 @@ public class Coll> extends CollAbstract if (this.supportsPusher()) { - //this.getPusher().deinit(); + this.getPusher().deinit(); } // TODO: Save outwards only? We may want to avoid loads at this stage... diff --git a/src/com/massivecraft/massivecore/store/CollAbstract.java b/src/com/massivecraft/massivecore/store/CollAbstract.java index 0484ffd8..9e1ed21e 100644 --- a/src/com/massivecraft/massivecore/store/CollAbstract.java +++ b/src/com/massivecraft/massivecore/store/CollAbstract.java @@ -7,7 +7,7 @@ import java.util.Map.Entry; import com.massivecraft.massivecore.Predicate; import com.massivecraft.massivecore.util.MUtil; -import com.massivecraft.massivecore.xlib.gson.JsonElement; +import com.massivecraft.massivecore.xlib.gson.JsonObject; public abstract class CollAbstract> implements CollInterface @@ -131,7 +131,25 @@ public abstract class CollAbstract> implements CollInterface if (oid == null) throw new NullPointerException("oid"); return this.detachIdFixed(this.fixIdOrThrow(oid)); } + + // -------------------------------------------- // + // IDENTIFIED MODIFICATIONS + // -------------------------------------------- // + @Override + public void putIdentifiedModification(Object oid, Modification modification) + { + if (oid == null) throw new NullPointerException("oid"); + this.putIdentifiedModificationFixed(this.fixIdOrThrow(oid), modification); + } + + @Override + public void removeIdentifiedModification(Object oid) + { + if (oid == null) throw new NullPointerException("oid"); + this.removeIdentifiedModificationFixed(this.fixIdOrThrow(oid)); + } + // -------------------------------------------- // // SYNC LOG // -------------------------------------------- // @@ -163,7 +181,7 @@ public abstract class CollAbstract> implements CollInterface } @Override - public void loadFromRemote(Object oid, Entry remoteEntry) + public void loadFromRemote(Object oid, Entry remoteEntry) { if (oid == null) throw new NullPointerException("oid"); this.loadFromRemoteFixed(this.fixIdOrThrow(oid), remoteEntry); @@ -241,7 +259,7 @@ public abstract class CollAbstract> implements CollInterface } @Override - public Modification syncId(Object oid, Modification modification, Entry remoteEntry) + public Modification syncId(Object oid, Modification modification, Entry remoteEntry) { if (oid == null) throw new NullPointerException("oid"); return this.syncIdFixed(this.fixIdOrThrow(oid), modification, remoteEntry); diff --git a/src/com/massivecraft/massivecore/store/CollInterface.java b/src/com/massivecraft/massivecore/store/CollInterface.java index fb9baabd..b1fd5537 100644 --- a/src/com/massivecraft/massivecore/store/CollInterface.java +++ b/src/com/massivecraft/massivecore/store/CollInterface.java @@ -10,7 +10,7 @@ import org.bukkit.plugin.Plugin; import com.massivecraft.massivecore.Named; import com.massivecraft.massivecore.Predicate; -import com.massivecraft.massivecore.xlib.gson.JsonElement; +import com.massivecraft.massivecore.xlib.gson.JsonObject; public interface CollInterface> extends Named { @@ -35,6 +35,8 @@ public interface CollInterface> extends Named public boolean supportsPusher(); public PusherColl getPusher(); + public String getDebugName(); + // -------------------------------------------- // // STORAGE // -------------------------------------------- // @@ -52,8 +54,6 @@ public interface CollInterface> extends Named public boolean containsId(Object oid); public boolean containsIdFixed(String id); - public Map getEntity2id(); - public String getId(Object entity); public boolean containsEntity(Object entity); public Collection getAll(); @@ -138,13 +138,12 @@ public interface CollInterface> extends Named // -------------------------------------------- // // IDENTIFIED MODIFICATIONS // -------------------------------------------- // + + public void putIdentifiedModification(Object oid, Modification modification); + public void putIdentifiedModificationFixed(String id, Modification modification); - /* - public Set localAttachIds(); - public Set localDetachIds(); - public Set changedIds(); - public void clearIdentifiedChanges(Object oid); - */ + public void removeIdentifiedModification(Object oid); + public void removeIdentifiedModificationFixed(String id); // -------------------------------------------- // // SYNC LOG @@ -169,13 +168,13 @@ public interface CollInterface> extends Named public E removeAtLocal(Object oid); public void removeAtRemote(Object oid); public void saveToRemote(Object oid); - public void loadFromRemote(Object oid, Entry remoteEntry); + public void loadFromRemote(Object oid, Entry remoteEntry); // Fixed id public E removeAtLocalFixed(String id); public void removeAtRemoteFixed(String id); public void saveToRemoteFixed(String id); - public void loadFromRemoteFixed(String id, Entry remoteEntry); + public void loadFromRemoteFixed(String id, Entry remoteEntry); // -------------------------------------------- // // SYNC EXAMINE AND DO @@ -198,12 +197,12 @@ public interface CollInterface> extends Named // Sync public Modification syncId(Object oid); public Modification syncId(Object oid, Modification modification); - public Modification syncId(Object oid, Modification modification, Entry remoteEntry); + public Modification syncId(Object oid, Modification modification, Entry remoteEntry); // Sync fixed public Modification syncIdFixed(String id); public Modification syncIdFixed(String id, Modification modification); - public Modification syncIdFixed(String id, Modification modification, Entry remoteEntry); + public Modification syncIdFixed(String id, Modification modification, Entry remoteEntry); public void syncIdentified(); public void syncAll(); diff --git a/src/com/massivecraft/massivecore/store/Db.java b/src/com/massivecraft/massivecore/store/Db.java index bfd73b63..7ac05dfe 100644 --- a/src/com/massivecraft/massivecore/store/Db.java +++ b/src/com/massivecraft/massivecore/store/Db.java @@ -2,10 +2,10 @@ package com.massivecraft.massivecore.store; import java.util.Collection; import java.util.Map; -import java.util.Set; import java.util.Map.Entry; +import java.util.Set; -import com.massivecraft.massivecore.xlib.gson.JsonElement; +import com.massivecraft.massivecore.xlib.gson.JsonObject; public interface Db { @@ -36,9 +36,9 @@ public interface Db public long getMtime(Coll coll, String id); public Collection getIds(Coll coll); public Map getId2mtime(Coll coll); - public Entry load(Coll coll, String id); - public Map> loadAll(Coll coll); - public long save(Coll coll, String id, JsonElement data); + public Entry load(Coll coll, String id); + public Map> loadAll(Coll coll); + public long save(Coll coll, String id, JsonObject data); public void delete(Coll coll, String id); public boolean supportsPusher(); public PusherColl getPusher(Coll coll); diff --git a/src/com/massivecraft/massivecore/store/DbAbstract.java b/src/com/massivecraft/massivecore/store/DbAbstract.java index 72559e8a..51138589 100644 --- a/src/com/massivecraft/massivecore/store/DbAbstract.java +++ b/src/com/massivecraft/massivecore/store/DbAbstract.java @@ -2,10 +2,10 @@ package com.massivecraft.massivecore.store; import java.util.Collection; import java.util.Map; -import java.util.Set; import java.util.Map.Entry; +import java.util.Set; -import com.massivecraft.massivecore.xlib.gson.JsonElement; +import com.massivecraft.massivecore.xlib.gson.JsonObject; public abstract class DbAbstract implements Db { @@ -58,17 +58,17 @@ public abstract class DbAbstract implements Db return this.getDriver().getId2mtime(coll); } - public Entry load(Coll coll, String id) + public Entry load(Coll coll, String id) { return this.getDriver().load(coll, id); } - public Map> loadAll(Coll coll) + public Map> loadAll(Coll coll) { return this.getDriver().loadAll(coll); } - public long save(Coll coll, String id, JsonElement data) + public long save(Coll coll, String id, JsonObject data) { return this.getDriver().save(coll, id, data); } diff --git a/src/com/massivecraft/massivecore/store/Driver.java b/src/com/massivecraft/massivecore/store/Driver.java index 23265cf1..7de09c69 100644 --- a/src/com/massivecraft/massivecore/store/Driver.java +++ b/src/com/massivecraft/massivecore/store/Driver.java @@ -5,7 +5,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import com.massivecraft.massivecore.xlib.gson.JsonElement; +import com.massivecraft.massivecore.xlib.gson.JsonObject; public interface Driver { @@ -42,18 +42,18 @@ public interface Driver // Load the raw data for X. The second part of the entry is the remote mtime at the load. // return == null will never happen. // return.getKey() == null || return.getValue() == 0 means something failed. - public Entry load(Coll coll, String id); + public Entry load(Coll coll, String id); // Load all database content at once // NOTE: This method is assumed to be based on the one above. - // NOTE: Values where JsonElement == null and Long == 0 may occur. - public Map> loadAll(Coll coll); + // NOTE: Values where JsonObject == null and Long == 0 may occur. + public Map> loadAll(Coll coll); // Save raw data as X // Return value is the new mtime (we caused the change). // return == null will never happen. // return == 0 means something failed. Usually failures are not catched, though. System.currentTimeMillis() is returned most of the time. - public long save(Coll coll, String id, JsonElement data); + public long save(Coll coll, String id, JsonObject data); // Delete X public void delete(Coll coll, String id); diff --git a/src/com/massivecraft/massivecore/store/DriverFlatfile.java b/src/com/massivecraft/massivecore/store/DriverFlatfile.java index 8c5b7b7b..40c199c2 100644 --- a/src/com/massivecraft/massivecore/store/DriverFlatfile.java +++ b/src/com/massivecraft/massivecore/store/DriverFlatfile.java @@ -15,7 +15,7 @@ import java.util.Map.Entry; import java.util.Set; import com.massivecraft.massivecore.util.DiscUtil; -import com.massivecraft.massivecore.xlib.gson.JsonElement; +import com.massivecraft.massivecore.xlib.gson.JsonObject; import com.massivecraft.massivecore.xlib.gson.JsonParser; public class DriverFlatfile extends DriverAbstract @@ -141,21 +141,21 @@ public class DriverFlatfile extends DriverAbstract } @Override - public Entry load(Coll coll, String id) + public Entry load(Coll coll, String id) { File file = fileFromId(coll, id); return loadFile(file); } - public Entry loadFile(File file) + public Entry loadFile(File file) { long mtime = file.lastModified(); - JsonElement raw = loadFileJson(file); + JsonObject raw = loadFileJson(file); - return new SimpleEntry(raw, mtime); + return new SimpleEntry(raw, mtime); } - public JsonElement loadFileJson(File file) + public JsonObject loadFileJson(File file) { String content = DiscUtil.readCatch(file); if (content == null) return null; @@ -163,14 +163,14 @@ public class DriverFlatfile extends DriverAbstract content = content.trim(); if (content.length() == 0) return null; - return new JsonParser().parse(content); + return new JsonParser().parse(content).getAsJsonObject(); } @Override - public Map> loadAll(Coll coll) + public Map> loadAll(Coll coll) { // Create Ret - Map> ret = null; + Map> ret = null; // Get Directory File directory = getDirectory(coll); @@ -180,7 +180,7 @@ public class DriverFlatfile extends DriverAbstract File[] files = directory.listFiles(JsonFileFilter.get()); // Create Ret - ret = new LinkedHashMap>(files.length); + ret = new LinkedHashMap>(files.length); // For Each Found for (File file : files) @@ -189,7 +189,7 @@ public class DriverFlatfile extends DriverAbstract String id = idFromFile(file); // Get Entry - Entry entry = loadFile(file); + Entry entry = loadFile(file); // NOTE: The entry can be a failed one with null and 0. // NOTE: We add it anyways since it's an informative failure. // NOTE: This is supported by our defined specification. @@ -203,7 +203,7 @@ public class DriverFlatfile extends DriverAbstract } @Override - public long save(Coll coll, String id, JsonElement data) + public long save(Coll coll, String id, JsonObject data) { File file = fileFromId(coll, id); String content = coll.getGson().toJson(data); diff --git a/src/com/massivecraft/massivecore/store/DriverMongo.java b/src/com/massivecraft/massivecore/store/DriverMongo.java index 2b609920..7b37838f 100644 --- a/src/com/massivecraft/massivecore/store/DriverMongo.java +++ b/src/com/massivecraft/massivecore/store/DriverMongo.java @@ -1,17 +1,17 @@ package com.massivecraft.massivecore.store; +import java.util.AbstractMap.SimpleEntry; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.AbstractMap.SimpleEntry; import java.util.Map.Entry; +import java.util.Set; import com.massivecraft.massivecore.MassiveCoreMConf; -import com.massivecraft.massivecore.xlib.gson.JsonElement; +import com.massivecraft.massivecore.xlib.gson.JsonObject; import com.massivecraft.massivecore.xlib.mongodb.BasicDBObject; import com.massivecraft.massivecore.xlib.mongodb.DB; import com.massivecraft.massivecore.xlib.mongodb.DBCollection; @@ -171,16 +171,16 @@ public class DriverMongo extends DriverAbstract } @Override - public Entry load(Coll coll, String id) + public Entry load(Coll coll, String id) { DBCollection dbcoll = fixColl(coll); BasicDBObject raw = (BasicDBObject)dbcoll.findOne(new BasicDBObject(ID_FIELD, id)); return loadRaw(raw); } - public Entry loadRaw(BasicDBObject raw) + public Entry loadRaw(BasicDBObject raw) { - if (raw == null) return new SimpleEntry(null, 0L); + if (raw == null) return new SimpleEntry(null, 0L); // Throw away the id field raw.removeField(ID_FIELD); @@ -196,16 +196,16 @@ public class DriverMongo extends DriverAbstract } // Convert MongoDB --> GSON - JsonElement element = GsonMongoConverter.mongo2GsonObject(raw); + JsonObject element = GsonMongoConverter.mongo2GsonObject(raw); - return new SimpleEntry(element, mtime); + return new SimpleEntry(element, mtime); } @Override - public Map> loadAll(Coll coll) + public Map> loadAll(Coll coll) { // Declare Ret - Map> ret = null; + Map> ret = null; // Fix Coll DBCollection dbcoll = fixColl(coll); @@ -216,7 +216,7 @@ public class DriverMongo extends DriverAbstract try { // Create Ret - ret = new LinkedHashMap>(cursor.count()); + ret = new LinkedHashMap>(cursor.count()); // For Each Found while (cursor.hasNext()) @@ -229,7 +229,7 @@ public class DriverMongo extends DriverAbstract String id = rawId.toString(); // Get Entry - Entry entry = loadRaw(raw); + Entry entry = loadRaw(raw); // NOTE: The entry can be a failed one with null and 0. // NOTE: We add it anyways since it's an informative failure. // NOTE: This is supported by our defined specification. @@ -249,7 +249,7 @@ public class DriverMongo extends DriverAbstract } @Override - public long save(Coll coll, String id, JsonElement data) + public long save(Coll coll, String id, JsonObject data) { DBCollection dbcoll = fixColl(coll); diff --git a/src/com/massivecraft/massivecore/store/Entity.java b/src/com/massivecraft/massivecore/store/Entity.java index d9c7a60c..e4d8796a 100644 --- a/src/com/massivecraft/massivecore/store/Entity.java +++ b/src/com/massivecraft/massivecore/store/Entity.java @@ -3,7 +3,7 @@ package com.massivecraft.massivecore.store; import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.store.accessor.Accessor; import com.massivecraft.massivecore.xlib.gson.Gson; -import com.massivecraft.massivecore.xlib.gson.JsonElement; +import com.massivecraft.massivecore.xlib.gson.JsonObject; /** * Usage of this class is highly optional. You may persist anything. If you are @@ -35,9 +35,9 @@ public class Entity> return coll.getUniverse(); } - private volatile transient JsonElement lastRaw = null; - public JsonElement getLastRaw() { return this.lastRaw; } - public void setLastRaw(JsonElement lastRaw) { this.lastRaw = lastRaw; } + private volatile transient JsonObject lastRaw = null; + public JsonObject getLastRaw() { return this.lastRaw; } + public void setLastRaw(JsonObject lastRaw) { this.lastRaw = lastRaw; } private volatile transient long lastMtime = 0; public long getLastMtime() { return this.lastMtime; } diff --git a/src/com/massivecraft/massivecore/store/SenderColl.java b/src/com/massivecraft/massivecore/store/SenderColl.java index 2ab0447c..452a8f10 100644 --- a/src/com/massivecraft/massivecore/store/SenderColl.java +++ b/src/com/massivecraft/massivecore/store/SenderColl.java @@ -78,7 +78,7 @@ public class SenderColl> extends Coll implements Se } else if (oid.getClass() == this.entityClass) { - ret = this.entity2id.get(oid); + ret = ((Entity) oid).getId(); } if (ret == null)