You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gora.apache.org by le...@apache.org on 2014/06/04 18:36:58 UTC
[41/50] [abbrv] git commit: Refactor MongoStore key encoding /
decoding
Refactor MongoStore key encoding / decoding
Project: http://git-wip-us.apache.org/repos/asf/gora/repo
Commit: http://git-wip-us.apache.org/repos/asf/gora/commit/1d2d0610
Tree: http://git-wip-us.apache.org/repos/asf/gora/tree/1d2d0610
Diff: http://git-wip-us.apache.org/repos/asf/gora/diff/1d2d0610
Branch: refs/heads/master
Commit: 1d2d0610c6ecea8b9c8f6e1a7b5ab63db1b6e6a7
Parents: 62e363c
Author: Damien Raude-Morvan <da...@dictanova.com>
Authored: Thu May 22 20:09:06 2014 +0200
Committer: Damien Raude-Morvan <da...@dictanova.com>
Committed: Thu May 22 20:09:06 2014 +0200
----------------------------------------------------------------------
.../apache/gora/mongodb/store/MongoStore.java | 53 ++++++++++++++------
1 file changed, 39 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/gora/blob/1d2d0610/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStore.java
----------------------------------------------------------------------
diff --git a/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStore.java b/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStore.java
index 1e58ddc..9d44291 100644
--- a/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStore.java
+++ b/gora-mongodb/src/main/java/org/apache/gora/mongodb/store/MongoStore.java
@@ -539,19 +539,17 @@ public class MongoStore<K, T extends PersistentBase> extends
if (map != null) {
Map<Utf8, Object> rmap = new HashMap<Utf8, Object>();
for (Entry<String, Object> e : map.entrySet()) {
- // ensure Key decoding -> middle dots replaced with dots
- // FIXME: better approach ?
- String oKey = e.getKey().replace("\u00B7", ".");
-
+ String mKey = decodeFieldKey(e.getKey());
+ Object mValue = e.getValue();
switch (fieldSchema.getValueType().getType()) {
case STRING:
- rmap.put(new Utf8(oKey), new Utf8((String) e.getValue()));
+ rmap.put(new Utf8(mKey), new Utf8((String) mValue));
break;
case BYTES:
- rmap.put(new Utf8(oKey), ByteBuffer.wrap((byte[]) e.getValue()));
+ rmap.put(new Utf8(mKey), ByteBuffer.wrap((byte[]) mValue));
break;
default:
- rmap.put(new Utf8(oKey), e.getValue());
+ rmap.put(new Utf8(mKey), mValue);
break;
}
}
@@ -604,7 +602,7 @@ public class MongoStore<K, T extends PersistentBase> extends
"Load from DBObject (RECORD), field:{}, schemaType:{}, docField:{}, storeType:{}",
new Object[] { recField.name(), innerSchema.getType(), fieldPath,
innerStoreType });
- ((PersistentBase) record).put(
+ record.put(
recField.pos(),
fromDBObject(innerSchema, innerStoreType, recField, innerDocField,
innerBson));
@@ -900,17 +898,17 @@ public class MongoStore<K, T extends PersistentBase> extends
// Handle regular cases
BasicDBObject map = new BasicDBObject();
for (Entry<CharSequence, ?> e : jmap.entrySet()) {
- // ensure Key encoding -> dots replaced with middle dot
- // FIXME: better approach ?
- String vKey = e.getKey().toString().replace(".", "\u00B7");
+ String mKey = encodeFieldKey(e.getKey().toString());
+ Object mValue = e.getValue();
switch (type) {
case STRING:
// Beware of Utf8 not being safely serialized
- map.put(vKey, e.getValue().toString());
+ map.put(mKey, mValue.toString());
break;
case BYTES:
// Beware of ByteBuffer not being safely serialized
- map.put(vKey, ((ByteBuffer) e.getValue()).array());
+ map.put(mKey, ((ByteBuffer) mValue).array());
+ break;
break;
// FIXME Record ?
default:
@@ -957,6 +955,33 @@ public class MongoStore<K, T extends PersistentBase> extends
return list;
}
- // //////////////////////////////////////////////////////// MAPPING BUILDER
+ // //////////////////////////////////////////////////////// CLEANUP
+ /**
+ * Ensure Key encoding -> dots replaced with middle dots
+ *
+ * @param key
+ * char with only dots.
+ * @return encoded string with "\u00B7" chars..
+ */
+ protected String encodeFieldKey(final String key) {
+ if (key == null) {
+ return null;
+ }
+ return key.replace(".", "\u00B7");
+ }
+
+ /**
+ * Ensure Key decoding -> middle dots replaced with dots
+ *
+ * @param key
+ * encoded string with "\u00B7" chars.
+ * @return Cleanup up char with only dots.
+ */
+ protected String decodeFieldKey(final String key) {
+ if (key == null) {
+ return null;
+ }
+ return key.replace("\u00B7", ".");
+ }
}