From f6206d039253324f256186e5effe88e33247f046 Mon Sep 17 00:00:00 2001 From: Olof Larsson Date: Wed, 1 May 2013 13:07:21 +0200 Subject: [PATCH] Add an mstore command with a todo dbcopy command. Also cache database instances in mstore. --- plugin.yml | 4 +- src/com/massivecraft/mcore/ConfServer.java | 9 +++- src/com/massivecraft/mcore/MCore.java | 15 ++++--- src/com/massivecraft/mcore/MCorePerm.java | 2 + .../mcore/mcorecmd/CmdMCoreMStore.java | 29 ++++++++++++ .../mcore/mcorecmd/CmdMCoreMStoreCopydb.java | 26 +++++++++++ .../massivecraft/mcore/mcorecmd/CmdMcore.java | 6 ++- src/com/massivecraft/mcore/store/MStore.java | 44 ++++++++++++++----- 8 files changed, 117 insertions(+), 18 deletions(-) create mode 100644 src/com/massivecraft/mcore/mcorecmd/CmdMCoreMStore.java create mode 100644 src/com/massivecraft/mcore/mcorecmd/CmdMCoreMStoreCopydb.java diff --git a/plugin.yml b/plugin.yml index 3ee88d14..6e00860d 100644 --- a/plugin.yml +++ b/plugin.yml @@ -13,7 +13,9 @@ permissions: mcore.cmd.mcore: {description: use the mcore command, default: false} mcore.cmd.mcore.id: {description: see the server id, default: false} mcore.cmd.mcore.version: {description: diplay plugin version, default: false} - mcore.cmd.mcore.usys: {description: manage the universe system, default: false} + mcore.cmd.mcore.mstore: {description: use the mstore command, default: false} + mcore.cmd.mcore.mstore.copydb: {description: copy database content, default: false} + mcore.cmd.mcore.usys: {description: use the usys command, default: false} mcore.cmd.mcore.usys.multiverse: {description: manage multiverses, default: false} mcore.cmd.mcore.usys.multiverse.list: {description: list multiverses, default: false} mcore.cmd.mcore.usys.multiverse.show: {description: show multiverse, default: false} diff --git a/src/com/massivecraft/mcore/ConfServer.java b/src/com/massivecraft/mcore/ConfServer.java index a7d62272..9b10e48f 100644 --- a/src/com/massivecraft/mcore/ConfServer.java +++ b/src/com/massivecraft/mcore/ConfServer.java @@ -1,6 +1,7 @@ package com.massivecraft.mcore; import java.util.List; +import java.util.Map; import java.util.UUID; import com.massivecraft.mcore.util.MUtil; @@ -21,9 +22,15 @@ public class ConfServer extends SimpleConfig // -------------------------------------------- // public static String serverid = UUID.randomUUID().toString(); - public static String dburi = "gson://./mstore"; + + public static Map alias2uri = MUtil.map( + "default", "gson://./mstore" + ); + + public static String dburi = "default"; public static List aliasesOuterMCore = MUtil.list("mcore"); public static List aliasesOuterMCoreUsys = MUtil.list("usys"); + public static List aliasesOuterMCoreMStore = MUtil.list("mstore"); } diff --git a/src/com/massivecraft/mcore/MCore.java b/src/com/massivecraft/mcore/MCore.java index 14a2dc5d..a1c95b2d 100644 --- a/src/com/massivecraft/mcore/MCore.java +++ b/src/com/massivecraft/mcore/MCore.java @@ -20,6 +20,7 @@ import com.massivecraft.mcore.adapter.UUIDAdapter; import com.massivecraft.mcore.integration.protocollib.ProtocolLibFeatures; import com.massivecraft.mcore.integration.vault.VaultFeatures; import com.massivecraft.mcore.mcorecmd.CmdMCore; +import com.massivecraft.mcore.mcorecmd.CmdMCoreMStore; import com.massivecraft.mcore.mcorecmd.CmdMCoreUsys; import com.massivecraft.mcore.mixin.ScheduledTeleportEngine; import com.massivecraft.mcore.mixin.SenderIdMixinDefault; @@ -27,9 +28,7 @@ import com.massivecraft.mcore.mixin.TeleportMixinCauseEngine; import com.massivecraft.mcore.ps.PS; import com.massivecraft.mcore.ps.PSAdapter; import com.massivecraft.mcore.store.Coll; -import com.massivecraft.mcore.store.Db; import com.massivecraft.mcore.store.ExamineThread; -import com.massivecraft.mcore.store.MStore; import com.massivecraft.mcore.util.PlayerUtil; import com.massivecraft.mcore.util.TimeDiffUtil; import com.massivecraft.mcore.util.TimeUnit; @@ -76,8 +75,8 @@ public class MCore extends MPlugin } public static String getServerId() { return ConfServer.serverid; } - private static Db db; - public static Db getDb() { return db; } + //private static Db db; + //public static Db getDb() { return db; } // -------------------------------------------- // // FIELDS @@ -95,6 +94,9 @@ public class MCore extends MPlugin private CmdMCoreUsys outerCmdMCoreUsys; public CmdMCoreUsys getOuterCmdMCoreUsys() { return this.outerCmdMCoreUsys; } + private CmdMCoreMStore outerCmdMCoreMStore; + public CmdMCoreMStore getOuterCmdMCoreMStore() { return this.outerCmdMCoreMStore; } + // Runnables // TODO: Make this one a singleton private Runnable collTickTask = new Runnable() @@ -128,7 +130,7 @@ public class MCore extends MPlugin ConfServer.get().load(); // Setup the default database - db = MStore.getDb(ConfServer.dburi); + //db = MStore.getDb(ConfServer.dburi); // Setup PlayerUtil and it's events new PlayerUtil(this); @@ -162,6 +164,9 @@ public class MCore extends MPlugin this.outerCmdMCoreUsys = new CmdMCoreUsys(ConfServer.aliasesOuterMCoreUsys); this.outerCmdMCoreUsys.register(this); + this.outerCmdMCoreMStore = new CmdMCoreMStore(ConfServer.aliasesOuterMCoreMStore); + this.outerCmdMCoreMStore.register(this); + // Integration this.integrate( ProtocolLibFeatures.get(), diff --git a/src/com/massivecraft/mcore/MCorePerm.java b/src/com/massivecraft/mcore/MCorePerm.java index 3905ca8f..b102776c 100644 --- a/src/com/massivecraft/mcore/MCorePerm.java +++ b/src/com/massivecraft/mcore/MCorePerm.java @@ -13,6 +13,8 @@ public enum MCorePerm CMD_MCORE("cmd.mcore"), CMD_MCORE_ID("cmd.mcore.id"), CMD_MCORE_VERSION("cmd.mcore.version"), + CMD_MCORE_MSTORE("cmd.mcore.mstore"), + CMD_MCORE_MSTORE_COPYDB("cmd.mcore.mstore.copydb"), CMD_MCORE_USYS("cmd.mcore.usys"), CMD_MCORE_USYS_MULTIVERSE("cmd.mcore.usys.multiverse"), CMD_MCORE_USYS_MULTIVERSE_LIST("cmd.mcore.usys.multiverse.list"), diff --git a/src/com/massivecraft/mcore/mcorecmd/CmdMCoreMStore.java b/src/com/massivecraft/mcore/mcorecmd/CmdMCoreMStore.java new file mode 100644 index 00000000..be95cf2b --- /dev/null +++ b/src/com/massivecraft/mcore/mcorecmd/CmdMCoreMStore.java @@ -0,0 +1,29 @@ +package com.massivecraft.mcore.mcorecmd; + +import java.util.List; + +import com.massivecraft.mcore.MCorePerm; +import com.massivecraft.mcore.cmd.HelpCommand; +import com.massivecraft.mcore.cmd.req.ReqHasPerm; +import com.massivecraft.mcore.util.MUtil; + +public class CmdMCoreMStore extends MCoreCommand +{ + public CmdMCoreMStoreCopydb cmdMCoreMStoreCopydb = new CmdMCoreMStoreCopydb(MUtil.list("copydb")); + + public CmdMCoreMStore(List aliases) + { + super(aliases); + + this.addSubCommand(this.cmdMCoreMStoreCopydb); + + this.addRequirements(ReqHasPerm.get(MCorePerm.CMD_MCORE_MSTORE.node)); + } + + @Override + public void perform() + { + this.getCommandChain().add(this); + HelpCommand.getInstance().execute(this.sender, this.args, this.commandChain); + } +} \ No newline at end of file diff --git a/src/com/massivecraft/mcore/mcorecmd/CmdMCoreMStoreCopydb.java b/src/com/massivecraft/mcore/mcorecmd/CmdMCoreMStoreCopydb.java new file mode 100644 index 00000000..9435cc29 --- /dev/null +++ b/src/com/massivecraft/mcore/mcorecmd/CmdMCoreMStoreCopydb.java @@ -0,0 +1,26 @@ +package com.massivecraft.mcore.mcorecmd; + +import java.util.List; + +import com.massivecraft.mcore.MCorePerm; +import com.massivecraft.mcore.cmd.req.ReqHasPerm; + +public class CmdMCoreMStoreCopydb extends MCoreCommand +{ + public CmdMCoreMStoreCopydb(List aliases) + { + super(aliases); + + this.addRequiredArg("fromuri"); + this.addRequiredArg("touri"); + + this.addRequirements(ReqHasPerm.get(MCorePerm.CMD_MCORE_MSTORE_COPYDB.node)); + } + + @Override + public void perform() + { + // TODO + } + +} diff --git a/src/com/massivecraft/mcore/mcorecmd/CmdMcore.java b/src/com/massivecraft/mcore/mcorecmd/CmdMcore.java index 6c8ecbba..2a2197ff 100644 --- a/src/com/massivecraft/mcore/mcorecmd/CmdMcore.java +++ b/src/com/massivecraft/mcore/mcorecmd/CmdMcore.java @@ -11,15 +11,19 @@ import com.massivecraft.mcore.util.MUtil; public class CmdMCore extends MCoreCommand { - public CmdMCoreId cmdMCoreId = new CmdMCoreId(MUtil.list("id")); public CmdMCoreUsys cmdMCoreUsys = new CmdMCoreUsys(MUtil.list("usys")); + public CmdMCoreMStore cmdMCoreMStore = new CmdMCoreMStore(MUtil.list("mstore")); + public CmdMCoreId cmdMCoreId = new CmdMCoreId(MUtil.list("id")); + public CmdMCore(List aliases) { super(aliases); this.addSubCommand(this.cmdMCoreUsys); + this.addSubCommand(this.cmdMCoreMStore); this.addSubCommand(this.cmdMCoreId); + this.addSubCommand(new VersionCommand(MCore.get(), MCorePerm.CMD_MCORE_VERSION.node, "v", "version")); this.addRequirements(ReqHasPerm.get(MCorePerm.CMD_MCORE.node)); diff --git a/src/com/massivecraft/mcore/store/MStore.java b/src/com/massivecraft/mcore/store/MStore.java index 8e8933ab..b643132f 100644 --- a/src/com/massivecraft/mcore/store/MStore.java +++ b/src/com/massivecraft/mcore/store/MStore.java @@ -5,11 +5,14 @@ import java.net.URISyntaxException; import java.util.HashMap; import java.util.Map; -import com.massivecraft.mcore.MCore; - +import com.massivecraft.mcore.ConfServer; public class MStore { + // -------------------------------------------- // + // DRIVER REGISTRY + // -------------------------------------------- // + protected static Map> drivers = new HashMap>(); public static boolean registerDriver(Driver driver) { @@ -23,18 +26,43 @@ public class MStore return drivers.get(id); } - public static Db getDb(String uri) + static { + registerDriver(DriverMongo.get()); + registerDriver(DriverGson.get()); + } + + // -------------------------------------------- // + // FROODLSCHTEIN + // -------------------------------------------- // + + // We cache databases here + private static Map> uri2db = new HashMap>(); + + public static String resolveAlias(String alias) + { + String uri = ConfServer.alias2uri.get(alias); + if (uri == null) return alias; + return resolveAlias(uri); + } + + public static Db getDb(String alias) + { + String uri = resolveAlias(alias); + Db ret = uri2db.get(uri); + if (ret != null) return ret; + try { - if (uri.equalsIgnoreCase("default")) return MCore.getDb(); - return getDb(new URI(uri)); + ret = getDb(new URI(uri)); } catch (URISyntaxException e) { e.printStackTrace(); return null; } + + return ret; } public static Db getDb(URI uri) @@ -45,9 +73,5 @@ public class MStore return driver.getDb(uri.toString()); } - static - { - registerDriver(DriverMongo.get()); - registerDriver(DriverGson.get()); - } + } \ No newline at end of file