diff --git a/plugin.yml b/plugin.yml index 4aa1e3fb..75ab9715 100644 --- a/plugin.yml +++ b/plugin.yml @@ -41,6 +41,8 @@ permissions: mcore.cmd.mcore: true mcore.cmd.mcore.id: true mcore.cmd.mcore.version: true + mcore.cmd.mcore.mstore: true + mcore.cmd.mcore.mstore.copydb: true mcore.cmd.mcore.usys: true mcore.cmd.mcore.usys.multiverse: true mcore.cmd.mcore.usys.multiverse.list: true diff --git a/src/com/massivecraft/mcore/mcorecmd/CmdMCoreMStoreCopydb.java b/src/com/massivecraft/mcore/mcorecmd/CmdMCoreMStoreCopydb.java index 9435cc29..25a6a62d 100644 --- a/src/com/massivecraft/mcore/mcorecmd/CmdMCoreMStoreCopydb.java +++ b/src/com/massivecraft/mcore/mcorecmd/CmdMCoreMStoreCopydb.java @@ -1,9 +1,18 @@ package com.massivecraft.mcore.mcorecmd; +import java.util.Collection; import java.util.List; +import java.util.Map.Entry; +import java.util.Set; +import com.massivecraft.mcore.MCore; import com.massivecraft.mcore.MCorePerm; import com.massivecraft.mcore.cmd.req.ReqHasPerm; +import com.massivecraft.mcore.store.Coll; +import com.massivecraft.mcore.store.Db; +import com.massivecraft.mcore.store.Driver; +import com.massivecraft.mcore.store.MStore; +import com.massivecraft.mcore.xlib.gson.JsonElement; public class CmdMCoreMStoreCopydb extends MCoreCommand { @@ -11,8 +20,8 @@ public class CmdMCoreMStoreCopydb extends MCoreCommand { super(aliases); - this.addRequiredArg("fromuri"); - this.addRequiredArg("touri"); + this.addRequiredArg("from"); + this.addRequiredArg("to"); this.addRequirements(ReqHasPerm.get(MCorePerm.CMD_MCORE_MSTORE_COPYDB.node)); } @@ -20,7 +29,39 @@ public class CmdMCoreMStoreCopydb extends MCoreCommand @Override public void perform() { - // TODO + // Args + final String fromAlias = this.arg(0); + final String toAlias = this.arg(1); + + // Prepare + final Db fromDb = MStore.getDb(fromAlias); + final Db toDb = MStore.getDb(toAlias); + + final Driver fromDriver = fromDb.getDriver(); + final Driver toDriver = toDb.getDriver(); + + Set collnames = fromDb.getCollnames(); + + // Statistics + int countCollCurrent = 0; + int countCollTotal = collnames.size(); + + // Do it! + msg("Now copying database with %d collections.", countCollTotal); + for (String collname : fromDb.getCollnames()) + { + countCollCurrent++; + final Coll fromColl = new Coll(collname, Object.class, fromDb, MCore.get()); + final Coll toColl = new Coll(collname, Object.class, toDb, MCore.get()); + + Collection ids = fromDriver.getIds(fromColl); + msg("Now copying collection %d/%d %s with %d documents.", countCollCurrent, countCollTotal, collname, ids.size()); + for (String id : ids) + { + Entry data = fromDriver.load(fromColl, id); + toDriver.save(toColl, id, data.getKey()); + } + } } }