Remove stuff I never use and make the database system GSON centric.
This commit is contained in:
parent
f6206d0392
commit
00304be8a2
@ -90,7 +90,7 @@ permissions:
|
||||
mcore.kit.rank0:
|
||||
default: false
|
||||
children:
|
||||
massivechat.kit.default:
|
||||
mcore.kit.default:
|
||||
default: true
|
||||
children:
|
||||
massivechat.kit.rank0: true
|
||||
mcore.kit.rank0: true
|
@ -18,9 +18,8 @@ import com.massivecraft.mcore.MCore;
|
||||
import com.massivecraft.mcore.MPlugin;
|
||||
import com.massivecraft.mcore.Predictate;
|
||||
import com.massivecraft.mcore.store.accessor.Accessor;
|
||||
import com.massivecraft.mcore.store.idstrategy.IdStrategy;
|
||||
import com.massivecraft.mcore.store.storeadapter.StoreAdapter;
|
||||
import com.massivecraft.mcore.xlib.gson.Gson;
|
||||
import com.massivecraft.mcore.xlib.gson.JsonElement;
|
||||
|
||||
public class Coll<E> implements CollInterface<E>
|
||||
{
|
||||
@ -64,15 +63,9 @@ public class Coll<E> implements CollInterface<E>
|
||||
}
|
||||
}
|
||||
|
||||
protected Db<?> db;
|
||||
@Override public Db<?> getDb() { return this.db; }
|
||||
@Override public Driver<?> getDriver() { return this.db.getDriver(); }
|
||||
|
||||
protected IdStrategy idStrategy;
|
||||
@Override public IdStrategy getIdStrategy() { return this.idStrategy; }
|
||||
|
||||
protected StoreAdapter storeAdapter;
|
||||
@Override public StoreAdapter getStoreAdapter() { return this.storeAdapter; }
|
||||
protected Db db;
|
||||
@Override public Db getDb() { return this.db; }
|
||||
@Override public Driver getDriver() { return this.db.getDriver(); }
|
||||
|
||||
protected Object collDriverObject;
|
||||
@Override public Object getCollDriverObject() { return this.collDriverObject; }
|
||||
@ -260,7 +253,7 @@ public class Coll<E> implements CollInterface<E>
|
||||
// Check/Fix id
|
||||
if (oid == null)
|
||||
{
|
||||
id = this.getIdStrategy().generate(this);
|
||||
id = MStore.createId();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -333,7 +326,7 @@ public class Coll<E> implements CollInterface<E>
|
||||
// -------------------------------------------- //
|
||||
|
||||
protected Map<String, Long> lastMtime;
|
||||
protected Map<String, Object> lastRaw;
|
||||
protected Map<String, JsonElement> lastRaw;
|
||||
protected Set<String> lastDefault;
|
||||
|
||||
protected synchronized void clearSynclog(Object oid)
|
||||
@ -393,7 +386,7 @@ public class Coll<E> implements CollInterface<E>
|
||||
E entity = this.id2entity.get(id);
|
||||
if (entity == null) return;
|
||||
|
||||
Object raw = this.getStoreAdapter().read(this, entity);
|
||||
JsonElement raw = this.getGson().toJsonTree(entity, this.getEntityClass());
|
||||
this.lastRaw.put(id, raw);
|
||||
|
||||
if (this.isDefault(entity))
|
||||
@ -416,10 +409,10 @@ public class Coll<E> implements CollInterface<E>
|
||||
|
||||
this.clearIdentifiedChanges(id);
|
||||
|
||||
Entry<?, Long> entry = this.getDb().getDriver().load(this, id);
|
||||
Entry<JsonElement, Long> entry = this.getDriver().load(this, id);
|
||||
if (entry == null) return;
|
||||
|
||||
Object raw = entry.getKey();
|
||||
JsonElement raw = entry.getKey();
|
||||
if (raw == null) return;
|
||||
|
||||
Long mtime = entry.getValue();
|
||||
@ -427,7 +420,7 @@ public class Coll<E> implements CollInterface<E>
|
||||
|
||||
E entity = this.get(id, true, false);
|
||||
|
||||
this.getStoreAdapter().write(this, raw, entity);
|
||||
this.copy(this.getGson().fromJson(raw, this.getEntityClass()), entity);
|
||||
|
||||
// this.lastRaw.put(id, this.getStoreAdapter().read(this, entity));
|
||||
// Store adapter again since result of a database read may be "different" from entity read.
|
||||
@ -500,11 +493,13 @@ public class Coll<E> implements CollInterface<E>
|
||||
|
||||
return ModificationState.NONE;
|
||||
}
|
||||
|
||||
protected boolean examineHasLocalAlter(String id, E entity)
|
||||
{
|
||||
Object lastRaw = this.lastRaw.get(id);
|
||||
Object currentRaw = this.storeAdapter.read(this, entity);
|
||||
return (this.getDriver().equal(currentRaw, lastRaw) == false);
|
||||
JsonElement lastRaw = this.lastRaw.get(id);
|
||||
JsonElement currentRaw = this.getGson().toJsonTree(entity, this.getEntityClass());
|
||||
|
||||
return !MStore.equal(lastRaw, currentRaw);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -602,7 +597,7 @@ public class Coll<E> implements CollInterface<E>
|
||||
// CONSTRUCT
|
||||
// -------------------------------------------- //
|
||||
|
||||
public Coll(String name, Class<E> entityClass, Db<?> db, Plugin plugin, boolean creative, boolean lowercasing, String idStrategyName, Comparator<? super String> idComparator, Comparator<? super E> entityComparator)
|
||||
public Coll(String name, Class<E> entityClass, Db db, Plugin plugin, boolean creative, boolean lowercasing, String idStrategyName, Comparator<? super String> idComparator, Comparator<? super E> entityComparator)
|
||||
{
|
||||
// Setup the name and the parsed parts
|
||||
this.name = name;
|
||||
@ -625,12 +620,6 @@ public class Coll<E> implements CollInterface<E>
|
||||
// SUPPORTING SYSTEM
|
||||
this.plugin = plugin;
|
||||
this.db = db;
|
||||
this.storeAdapter = this.db.getDriver().getStoreAdapter();
|
||||
this.idStrategy = this.db.getDriver().getIdStrategy(idStrategyName);
|
||||
if (this.idStrategy == null)
|
||||
{
|
||||
throw new IllegalArgumentException("UNKNOWN: The id stragegy \""+idStrategyName+"\" is unknown to the driver \""+db.getDriver().getName()+"\".");
|
||||
}
|
||||
this.collDriverObject = db.getCollDriverObject(this);
|
||||
|
||||
// STORAGE
|
||||
@ -644,7 +633,7 @@ public class Coll<E> implements CollInterface<E>
|
||||
|
||||
// SYNCLOG
|
||||
this.lastMtime = new ConcurrentSkipListMap<String, Long>(idComparator);
|
||||
this.lastRaw = new ConcurrentSkipListMap<String, Object>(idComparator);
|
||||
this.lastRaw = new ConcurrentSkipListMap<String, JsonElement>(idComparator);
|
||||
this.lastDefault = new ConcurrentSkipListSet<String>(idComparator);
|
||||
|
||||
final Coll<E> me = this;
|
||||
@ -654,12 +643,12 @@ public class Coll<E> implements CollInterface<E>
|
||||
};
|
||||
}
|
||||
|
||||
public Coll(String name, Class<E> entityClass, Db<?> db, Plugin plugin, boolean creative, boolean lowercasing)
|
||||
public Coll(String name, Class<E> entityClass, Db db, Plugin plugin, boolean creative, boolean lowercasing)
|
||||
{
|
||||
this(name, entityClass, db, plugin, creative, lowercasing, "uuid", null, null);
|
||||
}
|
||||
|
||||
public Coll(String name, Class<E> entityClass, Db<?> db, Plugin plugin)
|
||||
public Coll(String name, Class<E> entityClass, Db db, Plugin plugin)
|
||||
{
|
||||
this(name, entityClass, db, plugin, false, false);
|
||||
}
|
||||
|
@ -7,8 +7,6 @@ import java.util.Map;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import com.massivecraft.mcore.Predictate;
|
||||
import com.massivecraft.mcore.store.idstrategy.IdStrategy;
|
||||
import com.massivecraft.mcore.store.storeadapter.StoreAdapter;
|
||||
|
||||
public interface CollInterface<E>
|
||||
{
|
||||
@ -25,10 +23,8 @@ public interface CollInterface<E>
|
||||
// -------------------------------------------- //
|
||||
public Plugin getPlugin();
|
||||
|
||||
public Db<?> getDb();
|
||||
public Driver<?> getDriver();
|
||||
public StoreAdapter getStoreAdapter();
|
||||
public IdStrategy getIdStrategy();
|
||||
public Db getDb();
|
||||
public Driver getDriver();
|
||||
public Object getCollDriverObject();
|
||||
|
||||
// -------------------------------------------- //
|
||||
|
@ -2,7 +2,7 @@ package com.massivecraft.mcore.store;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public interface Db<R>
|
||||
public interface Db
|
||||
{
|
||||
public String getName();
|
||||
|
||||
@ -10,7 +10,7 @@ public interface Db<R>
|
||||
|
||||
public Set<String> getCollnames();
|
||||
|
||||
public Driver<R> getDriver();
|
||||
public Driver getDriver();
|
||||
|
||||
public Object getCollDriverObject(Coll<?> coll);
|
||||
}
|
@ -2,7 +2,7 @@ package com.massivecraft.mcore.store;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public abstract class DbAbstract<R> implements Db<R>
|
||||
public abstract class DbAbstract implements Db
|
||||
{
|
||||
@Override
|
||||
public Set<String> getCollnames()
|
||||
|
@ -3,9 +3,8 @@ package com.massivecraft.mcore.store;
|
||||
import java.io.File;
|
||||
|
||||
import com.massivecraft.mcore.util.DiscUtil;
|
||||
import com.massivecraft.mcore.xlib.gson.JsonElement;
|
||||
|
||||
public class DbGson extends DbAbstract<JsonElement>
|
||||
public class DbGson extends DbAbstract
|
||||
{
|
||||
// -------------------------------------------- //
|
||||
// FIELDS
|
||||
|
@ -1,9 +1,8 @@
|
||||
package com.massivecraft.mcore.store;
|
||||
|
||||
import com.massivecraft.mcore.xlib.mongodb.BasicDBObject;
|
||||
import com.massivecraft.mcore.xlib.mongodb.DB;
|
||||
|
||||
public class DbMongo extends DbAbstract<BasicDBObject>
|
||||
public class DbMongo extends DbAbstract
|
||||
{
|
||||
// -------------------------------------------- //
|
||||
// FIELDS
|
||||
|
@ -5,33 +5,18 @@ import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import com.massivecraft.mcore.store.idstrategy.IdStrategy;
|
||||
import com.massivecraft.mcore.store.storeadapter.StoreAdapter;
|
||||
import com.massivecraft.mcore.xlib.gson.JsonElement;
|
||||
|
||||
public interface Driver<R>
|
||||
public interface Driver
|
||||
{
|
||||
// Returns the name of the driver.
|
||||
public String getName();
|
||||
|
||||
// This is the rawdata format this driver works with.
|
||||
// Could for example be JsonElement or DBObject
|
||||
public Class<R> getRawdataClass();
|
||||
|
||||
// Comparison of raw data should be done through this method
|
||||
public boolean equal(Object rawOne, Object rawTwo);
|
||||
|
||||
// This is some sort of database specific id strategy with built in adapter
|
||||
public boolean registerIdStrategy(IdStrategy idStrategy);
|
||||
public IdStrategy getIdStrategy(String idStrategyName);
|
||||
|
||||
// Get the default store adapter for the driver.
|
||||
public StoreAdapter getStoreAdapter();
|
||||
|
||||
// Get a database instance from the driver
|
||||
public Db<R> getDb(String uri);
|
||||
public Db getDb(String uri);
|
||||
|
||||
// What collections are in the database?
|
||||
public Set<String> getCollnames(Db<?> db);
|
||||
public Set<String> getCollnames(Db db);
|
||||
|
||||
// Is id X in the collection?
|
||||
public boolean containsId(Coll<?> coll, String id);
|
||||
@ -46,12 +31,12 @@ public interface Driver<R>
|
||||
public Map<String, Long> getId2mtime(Coll<?> coll);
|
||||
|
||||
// Load the raw data for X. The second part of the entry is the remote mtime at the load.
|
||||
public Entry<R, Long> load(Coll<?> coll, String id);
|
||||
public Entry<JsonElement, Long> load(Coll<?> coll, String id);
|
||||
|
||||
// Save raw data as X
|
||||
// Return value is the new mtime (we caused the change).
|
||||
// If the mtime is null something failed.
|
||||
public Long save(Coll<?> coll, String id, final Object rawData);
|
||||
public Long save(Coll<?> coll, String id, JsonElement data);
|
||||
|
||||
// Delete X
|
||||
public void delete(Coll<?> coll, String id);
|
||||
|
@ -1,32 +1,21 @@
|
||||
package com.massivecraft.mcore.store;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.massivecraft.mcore.store.idstrategy.IdStrategy;
|
||||
|
||||
public abstract class DriverAbstract<R> implements Driver<R>
|
||||
public abstract class DriverAbstract implements Driver
|
||||
{
|
||||
// -------------------------------------------- //
|
||||
// FIELDS
|
||||
// -------------------------------------------- //
|
||||
|
||||
private final String name;
|
||||
@Override public String getName() { return this.name; }
|
||||
|
||||
// -------------------------------------------- //
|
||||
// CONSTRUCT
|
||||
// -------------------------------------------- //
|
||||
|
||||
public DriverAbstract(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
protected String name;
|
||||
@Override public String getName() { return this.name; }
|
||||
|
||||
protected Map<String, IdStrategy> idStrategies = new HashMap<String, IdStrategy>();
|
||||
@Override
|
||||
public boolean registerIdStrategy(IdStrategy idStrategy)
|
||||
{
|
||||
if (idStrategies.containsKey(idStrategy.getName())) return false;
|
||||
idStrategies.put(idStrategy.getName(), idStrategy);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IdStrategy getIdStrategy(String idStrategyName)
|
||||
{
|
||||
return idStrategies.get(idStrategyName);
|
||||
}
|
||||
}
|
||||
|
@ -11,44 +11,33 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.massivecraft.mcore.store.idstrategy.IdStrategyOid;
|
||||
import com.massivecraft.mcore.store.idstrategy.IdStrategyUuid;
|
||||
import com.massivecraft.mcore.store.storeadapter.StoreAdapter;
|
||||
import com.massivecraft.mcore.store.storeadapter.StoreAdapterGson;
|
||||
import com.massivecraft.mcore.util.DiscUtil;
|
||||
import com.massivecraft.mcore.xlib.gson.JsonElement;
|
||||
import com.massivecraft.mcore.xlib.gson.JsonParser;
|
||||
|
||||
public class DriverGson extends DriverAbstract<JsonElement>
|
||||
public class DriverGson extends DriverAbstract
|
||||
{
|
||||
protected final static String DOTJSON = ".json";
|
||||
|
||||
// -------------------------------------------- //
|
||||
// IMPLEMENTATION
|
||||
// CONSTANTS
|
||||
// -------------------------------------------- //
|
||||
|
||||
@Override public Class<JsonElement> getRawdataClass() { return JsonElement.class; }
|
||||
private static final String DOTJSON = ".json";
|
||||
public static final String NAME = "gson";
|
||||
|
||||
// -------------------------------------------- //
|
||||
// INSTANCE & CONSTRUCT
|
||||
// -------------------------------------------- //
|
||||
|
||||
private static DriverGson i = new DriverGson();
|
||||
public static DriverGson get() { return i; }
|
||||
private DriverGson() { super(NAME); }
|
||||
|
||||
// -------------------------------------------- //
|
||||
// OVERRIDE
|
||||
// -------------------------------------------- //
|
||||
|
||||
@Override
|
||||
public boolean equal(Object rawOne, Object rawTwo)
|
||||
{
|
||||
JsonElement one = (JsonElement)rawOne;
|
||||
JsonElement two = (JsonElement)rawTwo;
|
||||
|
||||
if (one == null && two == null) return true;
|
||||
if (one == null || two == null) return false;
|
||||
|
||||
return one.toString().equals(two.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public StoreAdapter getStoreAdapter()
|
||||
{
|
||||
return StoreAdapterGson.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Db<JsonElement> getDb(String uri)
|
||||
public Db getDb(String uri)
|
||||
{
|
||||
// "gson://" is 7 chars
|
||||
File folder = new File(uri.substring(7));
|
||||
@ -57,7 +46,7 @@ public class DriverGson extends DriverAbstract<JsonElement>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getCollnames(Db<?> db)
|
||||
public Set<String> getCollnames(Db db)
|
||||
{
|
||||
Set<String> ret = new LinkedHashSet<String>();
|
||||
|
||||
@ -92,7 +81,7 @@ public class DriverGson extends DriverAbstract<JsonElement>
|
||||
// Scan the collection folder for .json files
|
||||
File collDir = getCollDir(coll);
|
||||
if ( ! collDir.isDirectory()) return ret;
|
||||
for(File file : collDir.listFiles(JsonFileFilter.get()))
|
||||
for (File file : collDir.listFiles(JsonFileFilter.get()))
|
||||
{
|
||||
ret.add(idFromFile(file));
|
||||
}
|
||||
@ -130,10 +119,10 @@ public class DriverGson extends DriverAbstract<JsonElement>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long save(Coll<?> coll, String id, Object rawData)
|
||||
public Long save(Coll<?> coll, String id, JsonElement data)
|
||||
{
|
||||
File file = fileFromId(coll, id);
|
||||
String content = coll.getGson().toJson((JsonElement)rawData);
|
||||
String content = coll.getGson().toJson(data);
|
||||
if (DiscUtil.writeCatch(file, content) == false) return null;
|
||||
return file.lastModified();
|
||||
}
|
||||
@ -168,32 +157,5 @@ public class DriverGson extends DriverAbstract<JsonElement>
|
||||
return idFile;
|
||||
}
|
||||
|
||||
//----------------------------------------------//
|
||||
// CONSTRUCTORS
|
||||
//----------------------------------------------//
|
||||
|
||||
public static String NAME = "gson";
|
||||
|
||||
private DriverGson()
|
||||
{
|
||||
super(NAME);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// INSTANCE
|
||||
// -------------------------------------------- //
|
||||
|
||||
protected static DriverGson instance;
|
||||
public static DriverGson get()
|
||||
{
|
||||
return instance;
|
||||
}
|
||||
|
||||
static
|
||||
{
|
||||
instance = new DriverGson();
|
||||
instance.registerIdStrategy(IdStrategyOid.get());
|
||||
instance.registerIdStrategy(IdStrategyUuid.get());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -9,10 +9,7 @@ import java.util.Set;
|
||||
import java.util.AbstractMap.SimpleEntry;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.massivecraft.mcore.store.idstrategy.IdStrategyOid;
|
||||
import com.massivecraft.mcore.store.idstrategy.IdStrategyUuid;
|
||||
import com.massivecraft.mcore.store.storeadapter.StoreAdapter;
|
||||
import com.massivecraft.mcore.store.storeadapter.StoreAdapterMongo;
|
||||
import com.massivecraft.mcore.xlib.gson.JsonElement;
|
||||
import com.massivecraft.mcore.xlib.mongodb.BasicDBObject;
|
||||
import com.massivecraft.mcore.xlib.mongodb.DB;
|
||||
import com.massivecraft.mcore.xlib.mongodb.DBCollection;
|
||||
@ -20,7 +17,7 @@ import com.massivecraft.mcore.xlib.mongodb.DBCursor;
|
||||
import com.massivecraft.mcore.xlib.mongodb.MongoClient;
|
||||
import com.massivecraft.mcore.xlib.mongodb.MongoClientURI;
|
||||
|
||||
public class DriverMongo extends DriverAbstract<BasicDBObject>
|
||||
public class DriverMongo extends DriverAbstract
|
||||
{
|
||||
// -------------------------------------------- //
|
||||
// CONSTANTS
|
||||
@ -34,66 +31,27 @@ public class DriverMongo extends DriverAbstract<BasicDBObject>
|
||||
public final static BasicDBObject dboKeysMtime = new BasicDBObject().append(MTIME_FIELD, 1);
|
||||
public final static BasicDBObject dboKeysIdandMtime = new BasicDBObject().append(ID_FIELD, 1).append(MTIME_FIELD, 1);
|
||||
|
||||
|
||||
//----------------------------------------------//
|
||||
// CONSTRUCT
|
||||
//----------------------------------------------//
|
||||
|
||||
private DriverMongo()
|
||||
{
|
||||
super("mongodb");
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// INSTANCE
|
||||
// INSTANCE & CONSTRUCT
|
||||
// -------------------------------------------- //
|
||||
|
||||
protected static DriverMongo instance;
|
||||
public static DriverMongo get()
|
||||
{
|
||||
return instance;
|
||||
}
|
||||
|
||||
static
|
||||
{
|
||||
instance = new DriverMongo();
|
||||
instance.registerIdStrategy(IdStrategyOid.get());
|
||||
instance.registerIdStrategy(IdStrategyUuid.get());
|
||||
}
|
||||
protected static DriverMongo i = new DriverMongo();
|
||||
public static DriverMongo get() { return i; }
|
||||
private DriverMongo() { super("mongodb"); }
|
||||
|
||||
// -------------------------------------------- //
|
||||
// IMPLEMENTATION
|
||||
// -------------------------------------------- //
|
||||
|
||||
@Override public Class<BasicDBObject> getRawdataClass() { return BasicDBObject.class; }
|
||||
|
||||
@Override
|
||||
public boolean equal(Object rawOne, Object rawTwo)
|
||||
{
|
||||
BasicDBObject one = (BasicDBObject)rawOne;
|
||||
BasicDBObject two = (BasicDBObject)rawTwo;
|
||||
|
||||
if (one == null && two == null) return true;
|
||||
if (one == null || two == null) return false;
|
||||
|
||||
return one.equals(two);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StoreAdapter getStoreAdapter()
|
||||
{
|
||||
return StoreAdapterMongo.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Db<BasicDBObject> getDb(String uri)
|
||||
public Db getDb(String uri)
|
||||
{
|
||||
DB db = this.getDbInner(uri);
|
||||
return new DbMongo(this, db);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getCollnames(Db<?> db)
|
||||
public Set<String> getCollnames(Db db)
|
||||
{
|
||||
return ((DbMongo)db).db.getCollectionNames();
|
||||
}
|
||||
@ -170,27 +128,28 @@ public class DriverMongo extends DriverAbstract<BasicDBObject>
|
||||
}
|
||||
|
||||
@Override
|
||||
public Entry<BasicDBObject, Long> load(Coll<?> coll, String id)
|
||||
public Entry<JsonElement, Long> load(Coll<?> coll, String id)
|
||||
{
|
||||
DBCollection dbcoll = fixColl(coll);
|
||||
BasicDBObject raw = (BasicDBObject)dbcoll.findOne(new BasicDBObject(ID_FIELD, id));
|
||||
if (raw == null) return null;
|
||||
Long mtime = (Long) raw.removeField(MTIME_FIELD);
|
||||
return new SimpleEntry<BasicDBObject, Long>(raw, mtime);
|
||||
|
||||
JsonElement element = MongoGsonConverter.mongo2GsonObject(raw);
|
||||
|
||||
return new SimpleEntry<JsonElement, Long>(element, mtime);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long save(Coll<?> coll, String id, Object rawData)
|
||||
public Long save(Coll<?> coll, String id, JsonElement data)
|
||||
{
|
||||
DBCollection dbcoll = fixColl(coll);
|
||||
|
||||
// We shallow copy here in order to stop the extra "_mtime" field from messing up the lastRaw.
|
||||
BasicDBObject data = (BasicDBObject)rawData;
|
||||
data = (BasicDBObject)data.clone();
|
||||
BasicDBObject dbo = MongoGsonConverter.gson2MongoObject(data);
|
||||
Long mtime = System.currentTimeMillis();
|
||||
data.put(MTIME_FIELD, mtime);
|
||||
dbo.put(MTIME_FIELD, mtime);
|
||||
|
||||
dbcoll.update(new BasicDBObject(ID_FIELD, id), data, true, false);
|
||||
dbcoll.update(new BasicDBObject(ID_FIELD, id), dbo, true, false);
|
||||
|
||||
return mtime;
|
||||
}
|
||||
|
@ -4,8 +4,10 @@ import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.massivecraft.mcore.ConfServer;
|
||||
import com.massivecraft.mcore.xlib.gson.JsonElement;
|
||||
|
||||
public class MStore
|
||||
{
|
||||
@ -13,15 +15,15 @@ public class MStore
|
||||
// DRIVER REGISTRY
|
||||
// -------------------------------------------- //
|
||||
|
||||
protected static Map<String, Driver<?>> drivers = new HashMap<String, Driver<?>>();
|
||||
public static boolean registerDriver(Driver<?> driver)
|
||||
private static Map<String, Driver> drivers = new HashMap<String, Driver>();
|
||||
public static boolean registerDriver(Driver driver)
|
||||
{
|
||||
if (drivers.containsKey(driver.getName())) return false;
|
||||
drivers.put(driver.getName(), driver);
|
||||
return true;
|
||||
}
|
||||
|
||||
public static Driver<?> getDriver(String id)
|
||||
public static Driver getDriver(String id)
|
||||
{
|
||||
return drivers.get(id);
|
||||
}
|
||||
@ -32,12 +34,33 @@ public class MStore
|
||||
registerDriver(DriverGson.get());
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// ID CREATION
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static String createId()
|
||||
{
|
||||
return UUID.randomUUID().toString();
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// JSON ELEMENT EQUAL
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static boolean equal(JsonElement one, JsonElement two)
|
||||
{
|
||||
if (one == null) return two == null;
|
||||
if (two == null) return one == null;
|
||||
|
||||
return one.toString().equals(two.toString());
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// FROODLSCHTEIN
|
||||
// -------------------------------------------- //
|
||||
|
||||
// We cache databases here
|
||||
private static Map<String, Db<?>> uri2db = new HashMap<String, Db<?>>();
|
||||
private static Map<String, Db> uri2db = new HashMap<String, Db>();
|
||||
|
||||
public static String resolveAlias(String alias)
|
||||
{
|
||||
@ -46,10 +69,10 @@ public class MStore
|
||||
return resolveAlias(uri);
|
||||
}
|
||||
|
||||
public static Db<?> getDb(String alias)
|
||||
public static Db getDb(String alias)
|
||||
{
|
||||
String uri = resolveAlias(alias);
|
||||
Db<?> ret = uri2db.get(uri);
|
||||
Db ret = uri2db.get(uri);
|
||||
if (ret != null) return ret;
|
||||
|
||||
try
|
||||
@ -65,10 +88,10 @@ public class MStore
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static Db<?> getDb(URI uri)
|
||||
public static Db getDb(URI uri)
|
||||
{
|
||||
String scheme = uri.getScheme();
|
||||
Driver<?> driver = getDriver(scheme);
|
||||
Driver driver = getDriver(scheme);
|
||||
if (driver == null) return null;
|
||||
return driver.getDb(uri.toString());
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.massivecraft.mcore.store.storeadapter;
|
||||
package com.massivecraft.mcore.store;
|
||||
|
||||
import java.util.Map.Entry;
|
||||
|
@ -25,17 +25,17 @@ public class SenderColl<E extends SenderEntity<E>> extends Coll<E> implements Se
|
||||
// CONSTRUCT
|
||||
// -------------------------------------------- //
|
||||
|
||||
public SenderColl(String name, Class<E> entityClass, Db<?> db, Plugin plugin, boolean creative, boolean lowercasing, String idStrategyName, Comparator<? super String> idComparator, Comparator<? super E> entityComparator)
|
||||
public SenderColl(String name, Class<E> entityClass, Db db, Plugin plugin, boolean creative, boolean lowercasing, String idStrategyName, Comparator<? super String> idComparator, Comparator<? super E> entityComparator)
|
||||
{
|
||||
super(name, entityClass, db, plugin, creative, lowercasing, idStrategyName, idComparator, entityComparator);
|
||||
}
|
||||
|
||||
public SenderColl(String name, Class<E> entityClass, Db<?> db, Plugin plugin, boolean creative, boolean lowercasing)
|
||||
public SenderColl(String name, Class<E> entityClass, Db db, Plugin plugin, boolean creative, boolean lowercasing)
|
||||
{
|
||||
super(name, entityClass, db, plugin, creative, lowercasing);
|
||||
}
|
||||
|
||||
public SenderColl(String name, Class<E> entityClass, Db<?> db, Plugin plugin)
|
||||
public SenderColl(String name, Class<E> entityClass, Db db, Plugin plugin)
|
||||
{
|
||||
super(name, entityClass, db, plugin, true, true);
|
||||
}
|
||||
|
@ -1,12 +0,0 @@
|
||||
package com.massivecraft.mcore.store.idstrategy;
|
||||
|
||||
import com.massivecraft.mcore.store.CollInterface;
|
||||
|
||||
public interface IdStrategy
|
||||
{
|
||||
// The name of the strategy (such as "uuid")
|
||||
public String getName();
|
||||
|
||||
// Generate
|
||||
public String generate(CollInterface<?> coll);
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
package com.massivecraft.mcore.store.idstrategy;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.massivecraft.mcore.store.CollInterface;
|
||||
|
||||
public abstract class IdStrategyAbstract implements IdStrategy
|
||||
{
|
||||
public IdStrategyAbstract(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
protected String name;
|
||||
@Override public String getName() { return this.name; }
|
||||
|
||||
@Override
|
||||
public String generate(CollInterface<?> coll)
|
||||
{
|
||||
Collection<String> alreadyInUse = coll.getIds();
|
||||
String ret = null;
|
||||
do
|
||||
{
|
||||
ret = this.generateAttempt(coll);
|
||||
if (ret == null) return null;
|
||||
}
|
||||
while (alreadyInUse.contains(ret));
|
||||
return ret;
|
||||
}
|
||||
|
||||
public abstract String generateAttempt(CollInterface<?> coll);
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
package com.massivecraft.mcore.store.idstrategy;
|
||||
|
||||
import com.massivecraft.mcore.store.CollInterface;
|
||||
import com.massivecraft.mcore.xlib.bson.types.ObjectId;
|
||||
|
||||
public class IdStrategyOid extends IdStrategyAbstract
|
||||
{
|
||||
// -------------------------------------------- //
|
||||
// INSTANCE & CONSTRUCT
|
||||
// -------------------------------------------- //
|
||||
|
||||
private static IdStrategyOid i = new IdStrategyOid();
|
||||
public static IdStrategyOid get() { return i; }
|
||||
private IdStrategyOid() { super("oid"); }
|
||||
|
||||
// -------------------------------------------- //
|
||||
// OVERRIDE
|
||||
// -------------------------------------------- //
|
||||
|
||||
@Override
|
||||
public String generateAttempt(CollInterface<?> coll)
|
||||
{
|
||||
return ObjectId.get().toString();
|
||||
}
|
||||
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
package com.massivecraft.mcore.store.idstrategy;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import com.massivecraft.mcore.store.CollInterface;
|
||||
|
||||
public class IdStrategyUuid extends IdStrategyAbstract
|
||||
{
|
||||
// -------------------------------------------- //
|
||||
// INSTANCE & CONSTRUCT
|
||||
// -------------------------------------------- //
|
||||
|
||||
private static IdStrategyUuid i = new IdStrategyUuid();
|
||||
public static IdStrategyUuid get() { return i; }
|
||||
private IdStrategyUuid() { super("uuid"); }
|
||||
|
||||
// -------------------------------------------- //
|
||||
// OVERRIDE
|
||||
// -------------------------------------------- //
|
||||
|
||||
@Override
|
||||
public String generateAttempt(CollInterface<?> coll)
|
||||
{
|
||||
return UUID.randomUUID().toString();
|
||||
}
|
||||
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
package com.massivecraft.mcore.store.storeadapter;
|
||||
|
||||
import com.massivecraft.mcore.store.Coll;
|
||||
|
||||
public interface StoreAdapter
|
||||
{
|
||||
// A store adapter is supposed to be used with a certain driver.
|
||||
// This method returns the name of that driver.
|
||||
public String forDriverName();
|
||||
|
||||
public Object read(Coll<?> coll, Object entity);
|
||||
public void write(Coll<?> coll, Object raw, Object entity); // (This is an opaque/complete write)
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
package com.massivecraft.mcore.store.storeadapter;
|
||||
|
||||
public abstract class StoreAdapterAbstract implements StoreAdapter
|
||||
{
|
||||
protected String forDriverName;
|
||||
@Override public String forDriverName() { return this.forDriverName; }
|
||||
|
||||
public StoreAdapterAbstract(String forDriverName)
|
||||
{
|
||||
this.forDriverName = forDriverName;
|
||||
}
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
package com.massivecraft.mcore.store.storeadapter;
|
||||
|
||||
import com.massivecraft.mcore.store.Coll;
|
||||
import com.massivecraft.mcore.xlib.gson.JsonElement;
|
||||
|
||||
public class StoreAdapterGson extends StoreAdapterAbstract
|
||||
{
|
||||
public StoreAdapterGson()
|
||||
{
|
||||
super("gson");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object read(Coll<?> coll, Object entity)
|
||||
{
|
||||
return coll.getGson().toJsonTree(entity, coll.getEntityClass());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(Coll<?> coll, Object raw, Object entity)
|
||||
{
|
||||
if (raw == null) throw new NullPointerException("raw");
|
||||
if (entity == null) throw new NullPointerException("entity");
|
||||
Object temp = coll.getGson().fromJson((JsonElement)raw, coll.getEntityClass());
|
||||
coll.copy(temp, entity);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// INSTANCE
|
||||
// -------------------------------------------- //
|
||||
|
||||
protected static StoreAdapterGson instance = new StoreAdapterGson();
|
||||
public static StoreAdapterGson get()
|
||||
{
|
||||
return instance;
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
package com.massivecraft.mcore.store.storeadapter;
|
||||
|
||||
import com.massivecraft.mcore.store.Coll;
|
||||
import com.massivecraft.mcore.xlib.gson.JsonElement;
|
||||
import com.massivecraft.mcore.xlib.mongodb.DBObject;
|
||||
|
||||
public class StoreAdapterMongo extends StoreAdapterAbstract
|
||||
{
|
||||
public StoreAdapterMongo()
|
||||
{
|
||||
super("mongo");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object read(Coll<?> coll, Object entity)
|
||||
{
|
||||
return MongoGsonConverter.gson2MongoObject((JsonElement)StoreAdapterGson.get().read(coll, entity));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(Coll<?> coll, Object raw, Object entity)
|
||||
{
|
||||
StoreAdapterGson.get().write(coll, MongoGsonConverter.mongo2GsonObject((DBObject) raw), entity);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// INSTANCE
|
||||
// -------------------------------------------- //
|
||||
|
||||
protected static StoreAdapterMongo instance = new StoreAdapterMongo();
|
||||
public static StoreAdapterMongo get()
|
||||
{
|
||||
return instance;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user