Escaping dot and dollar signs in the mongo <--> gson converter, adding success message to copy command and preparing to rename gson --> flatfile.

This commit is contained in:
Olof Larsson 2013-05-01 18:04:59 +02:00
parent 4d6c73f1d6
commit 5e326ed672
3 changed files with 35 additions and 3 deletions

View File

@ -24,7 +24,9 @@ public class ConfServer extends SimpleConfig
public static String serverid = UUID.randomUUID().toString(); public static String serverid = UUID.randomUUID().toString();
public static Map<String, String> alias2uri = MUtil.map( public static Map<String, String> alias2uri = MUtil.map(
"default", "gson://./mstore" "default", "flatfile",
"flatfile", "flatfile://mstore",
"mongodb", "mongodb://localhost:27017/mstore"
); );
public static String dburi = "default"; public static String dburi = "default";

View File

@ -57,6 +57,7 @@ public class CmdMCoreMStoreCopydb extends MCoreCommand
int countCollTotal = collnames.size(); int countCollTotal = collnames.size();
// Do it! // Do it!
long before = System.currentTimeMillis();
msg("<i>Now copying database with <h>%d <i>collections.", countCollTotal); msg("<i>Now copying database with <h>%d <i>collections.", countCollTotal);
for (String collname : fromDb.getCollnames()) for (String collname : fromDb.getCollnames())
{ {
@ -72,6 +73,9 @@ public class CmdMCoreMStoreCopydb extends MCoreCommand
toDriver.save(toColl, id, data.getKey()); toDriver.save(toColl, id, data.getKey());
} }
} }
long after = System.currentTimeMillis();
long duration = after - before;
msg("<g>The copy is now complete. <i>It took <h>%dms<i>.", duration);
} }
} }

View File

@ -2,6 +2,8 @@ package com.massivecraft.mcore.store;
import java.util.Map.Entry; import java.util.Map.Entry;
import org.apache.commons.lang.StringUtils;
import com.massivecraft.mcore.xlib.bson.types.ObjectId; import com.massivecraft.mcore.xlib.bson.types.ObjectId;
import com.massivecraft.mcore.xlib.gson.JsonArray; import com.massivecraft.mcore.xlib.gson.JsonArray;
import com.massivecraft.mcore.xlib.gson.JsonElement; import com.massivecraft.mcore.xlib.gson.JsonElement;
@ -14,17 +16,34 @@ import com.massivecraft.mcore.xlib.mongodb.DBObject;
public final class MongoGsonConverter public final class MongoGsonConverter
{ {
// -------------------------------------------- //
// CONSTANTS
// -------------------------------------------- //
public static final String DOT_NORMAL = ".";
public static final String DOT_MONGO = "<dot>";
public static final String DOLLAR_NORMAL = "$";
public static final String DOLLAR_MONGO = "<dollar>";
// -------------------------------------------- // // -------------------------------------------- //
// GSON 2 MONGO // GSON 2 MONGO
// -------------------------------------------- // // -------------------------------------------- //
public static String gson2MongoKey(String key)
{
key = StringUtils.replace(key, DOT_NORMAL, DOT_MONGO);
key = StringUtils.replace(key, DOLLAR_NORMAL, DOLLAR_MONGO);
return key;
}
public static BasicDBObject gson2MongoObject(JsonElement inElement) public static BasicDBObject gson2MongoObject(JsonElement inElement)
{ {
JsonObject in = inElement.getAsJsonObject(); JsonObject in = inElement.getAsJsonObject();
BasicDBObject out = new BasicDBObject(); BasicDBObject out = new BasicDBObject();
for (Entry<String, JsonElement> entry : in.entrySet()) for (Entry<String, JsonElement> entry : in.entrySet())
{ {
String key = entry.getKey(); String key = gson2MongoKey(entry.getKey());
JsonElement val = entry.getValue(); JsonElement val = entry.getValue();
if (val.isJsonArray()) if (val.isJsonArray())
{ {
@ -79,6 +98,13 @@ public final class MongoGsonConverter
// MONGO 2 GSON // MONGO 2 GSON
// -------------------------------------------- // // -------------------------------------------- //
public static String mongo2GsonKey(String key)
{
key = StringUtils.replace(key, DOT_MONGO, DOT_NORMAL);
key = StringUtils.replace(key, DOLLAR_MONGO, DOLLAR_NORMAL);
return key;
}
public static JsonObject mongo2GsonObject(DBObject inObject) public static JsonObject mongo2GsonObject(DBObject inObject)
{ {
if (!(inObject instanceof BasicDBObject)) throw new IllegalArgumentException("Expected BasicDBObject as argument type!"); if (!(inObject instanceof BasicDBObject)) throw new IllegalArgumentException("Expected BasicDBObject as argument type!");
@ -87,7 +113,7 @@ public final class MongoGsonConverter
JsonObject jsonObject = new JsonObject(); JsonObject jsonObject = new JsonObject();
for (Entry<String, Object> entry : in.entrySet()) for (Entry<String, Object> entry : in.entrySet())
{ {
String key = entry.getKey(); String key = mongo2GsonKey(entry.getKey());
Object val = entry.getValue(); Object val = entry.getValue();
if (val instanceof BasicDBList) if (val instanceof BasicDBList)
{ {