You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2016/08/22 18:30:48 UTC
[11/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-classic-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-classic-v2d0-typed.json b/data/tinkerpop-classic-v2d0-typed.json
new file mode 100644
index 0000000..56956ea
--- /dev/null
+++ b/data/tinkerpop-classic-v2d0-typed.json
@@ -0,0 +1,6 @@
+{"id":{"@type":"gremlin:int32","@value":1},"label":"vertex","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}}],"knows":[{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:float","@value":0.5}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":0},"value":"marko"}],"age":[{"id":{"@type":"gremlin:int32","@value":2},"value":{"@type":"gremlin:int32","@value":29}}]}}
+{"id":{"@type":"gremlin:int32","@value":2},"label":"vertex","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":7},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":3},"value":"vadas"}],"age":[{"id":{"@type":"gremlin:int32","@value":4},"value":{"@type":"gremlin:int32","@value":27}}]}}
+{"id":{"@type":"gremlin:int32","@value":3},"label":"vertex","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":11},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":12},"outV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:float","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":5},"value":"lop"}],"lang":[{"id":{"@type":"gremlin:int32","@value":6},"value":"java"}]}}
+{"id":{"@type":"gremlin:int32","@value":4},"label":"vertex","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":8},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":7},"value":"josh"}],"age":[{"id":{"@type":"gremlin:int32","@value":8},"value":{"@type":"gremlin:int32","@value":32}}]}}
+{"id":{"@type":"gremlin:int32","@value":5},"label":"vertex","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":9},"value":"ripple"}],"lang":[{"id":{"@type":"gremlin:int32","@value":10},"value":"java"}]}}
+{"id":{"@type":"gremlin:int32","@value":6},"label":"vertex","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":11},"value":"peter"}],"age":[{"id":{"@type":"gremlin:int32","@value":12},"value":{"@type":"gremlin:int32","@value":35}}]}}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-classic-v2d0.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-classic-v2d0.json b/data/tinkerpop-classic-v2d0.json
new file mode 100644
index 0000000..5ccfe05
--- /dev/null
+++ b/data/tinkerpop-classic-v2d0.json
@@ -0,0 +1,6 @@
+{"id":1,"label":"vertex","outE":{"created":[{"id":9,"inV":3,"properties":{"weight":0.4}}],"knows":[{"id":7,"inV":2,"properties":{"weight":0.5}},{"id":8,"inV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":0,"value":"marko"}],"age":[{"id":2,"value":29}]}}
+{"id":2,"label":"vertex","inE":{"knows":[{"id":7,"outV":1,"properties":{"weight":0.5}}]},"properties":{"name":[{"id":3,"value":"vadas"}],"age":[{"id":4,"value":27}]}}
+{"id":3,"label":"vertex","inE":{"created":[{"id":9,"outV":1,"properties":{"weight":0.4}},{"id":11,"outV":4,"properties":{"weight":0.4}},{"id":12,"outV":6,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":5,"value":"lop"}],"lang":[{"id":6,"value":"java"}]}}
+{"id":4,"label":"vertex","inE":{"knows":[{"id":8,"outV":1,"properties":{"weight":1.0}}]},"outE":{"created":[{"id":10,"inV":5,"properties":{"weight":1.0}},{"id":11,"inV":3,"properties":{"weight":0.4}}]},"properties":{"name":[{"id":7,"value":"josh"}],"age":[{"id":8,"value":32}]}}
+{"id":5,"label":"vertex","inE":{"created":[{"id":10,"outV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":9,"value":"ripple"}],"lang":[{"id":10,"value":"java"}]}}
+{"id":6,"label":"vertex","outE":{"created":[{"id":12,"inV":3,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":11,"value":"peter"}],"age":[{"id":12,"value":35}]}}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-crew-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-crew-v2d0-typed.json b/data/tinkerpop-crew-v2d0-typed.json
new file mode 100644
index 0000000..e688520
--- /dev/null
+++ b/data/tinkerpop-crew-v2d0-typed.json
@@ -0,0 +1,6 @@
+{"id":{"@type":"gremlin:int32","@value":1},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":16},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":13},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2009}}},{"id":{"@type":"gremlin:int32","@value":14},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"marko"}],"location":[{"id":{"@type":"gremlin:int64","@value":6},"value":"san diego","properties":{"startTime":{"@type":"gremlin:int32","@value":1997},"endTime":{"@type":"gremlin:int32","@value":2001}}},{"id":{"@type":"gremlin:int6
4","@value":7},"value":"santa cruz","properties":{"startTime":{"@type":"gremlin:int32","@value":2001},"endTime":{"@type":"gremlin:int32","@value":2004}}},{"id":{"@type":"gremlin:int64","@value":8},"value":"brussels","properties":{"startTime":{"@type":"gremlin:int32","@value":2004},"endTime":{"@type":"gremlin:int32","@value":2005}}},{"id":{"@type":"gremlin:int64","@value":9},"value":"santa fe","properties":{"startTime":{"@type":"gremlin:int32","@value":2005}}}]}}
+{"id":{"@type":"gremlin:int32","@value":7},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":19},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":20},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":17},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}},{"id":{"@type":"gremlin:int32","@value":18},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"since":{"@type":"gremlin:int32","@value":2011}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":1},"value":"stephen"}],"location":[{"id":{"@type":"gremlin:int64","@value":10},"value":"centreville","properties":{"startTime":{"@type":"gremlin:int32","@value":1990},"endTime":{"@type":"gremlin:int32","@value":2000}}},{"id":{"@type":"gremlin
:int64","@value":11},"value":"dulles","properties":{"startTime":{"@type":"gremlin:int32","@value":2000},"endTime":{"@type":"gremlin:int32","@value":2006}}},{"id":{"@type":"gremlin:int64","@value":12},"value":"purcellville","properties":{"startTime":{"@type":"gremlin:int32","@value":2006}}}]}}
+{"id":{"@type":"gremlin:int32","@value":8},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":22},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":23},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":21},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2012}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":2},"value":"matthias"}],"location":[{"id":{"@type":"gremlin:int64","@value":13},"value":"bremen","properties":{"startTime":{"@type":"gremlin:int32","@value":2004},"endTime":{"@type":"gremlin:int32","@value":2007}}},{"id":{"@type":"gremlin:int64","@value":14},"value":"baltimore","properties":{"startTime":{"@type":"gremlin:int32","@value":2007},"endTime":{"@type":"gremlin:int32","@value":2011}
}},{"id":{"@type":"gremlin:int64","@value":15},"value":"oakland","properties":{"startTime":{"@type":"gremlin:int32","@value":2011},"endTime":{"@type":"gremlin:int32","@value":2014}}},{"id":{"@type":"gremlin:int64","@value":16},"value":"seattle","properties":{"startTime":{"@type":"gremlin:int32","@value":2014}}}]}}
+{"id":{"@type":"gremlin:int32","@value":9},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":24},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":25},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":3},"value":"daniel"}],"location":[{"id":{"@type":"gremlin:int64","@value":17},"value":"spremberg","properties":{"startTime":{"@type":"gremlin:int32","@value":1982},"endTime":{"@type":"gremlin:int32","@value":2005}}},{"id":{"@type":"gremlin:int64","@value":18},"value":"kaiserslautern","properties":{"startTime":{"@type":"gremlin:int32","@value":2005},"endTime":{"@type":"gremlin:int32","@value":2009}}},{"id":{"@type":"gremlin:int64","@value":19},"value":"aachen","properties":{"startTime":{"@type":"gremlin:int32","@value":2009}}}]}}
+{"id":{"@type":"gremlin:int32","@value":10},"label":"software","inE":{"uses":[{"id":{"@type":"gremlin:int32","@value":19},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":22},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":24},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":17},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}},{"id":{"@type":"gremlin:int32","@value":21},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"since":{"@type":"gremlin:int32","@value":2012}}},{"id":
{"@type":"gremlin:int32","@value":13},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"since":{"@type":"gremlin:int32","@value":2009}}}]},"outE":{"traverses":[{"id":{"@type":"gremlin:int32","@value":26},"inV":{"@type":"gremlin:int32","@value":11}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":4},"value":"gremlin"}]}}
+{"id":{"@type":"gremlin:int32","@value":11},"label":"software","inE":{"traverses":[{"id":{"@type":"gremlin:int32","@value":26},"outV":{"@type":"gremlin:int32","@value":10}}],"uses":[{"id":{"@type":"gremlin:int32","@value":16},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":20},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":23},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":25},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":18},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"since":{"@type":"gremlin:int32","@value":2011}}},{"id":{"@type":"gremlin:int32","@value":14},"outV":{"@
type":"gremlin:int32","@value":1},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":5},"value":"tinkergraph"}]}}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-crew-v2d0.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-crew-v2d0.json b/data/tinkerpop-crew-v2d0.json
new file mode 100644
index 0000000..2165e4d
--- /dev/null
+++ b/data/tinkerpop-crew-v2d0.json
@@ -0,0 +1,6 @@
+{"id":1,"label":"person","outE":{"uses":[{"id":16,"inV":11,"properties":{"skill":5}},{"id":15,"inV":10,"properties":{"skill":4}}],"develops":[{"id":13,"inV":10,"properties":{"since":2009}},{"id":14,"inV":11,"properties":{"since":2010}}]},"properties":{"name":[{"id":0,"value":"marko"}],"location":[{"id":6,"value":"san diego","properties":{"startTime":1997,"endTime":2001}},{"id":7,"value":"santa cruz","properties":{"startTime":2001,"endTime":2004}},{"id":8,"value":"brussels","properties":{"startTime":2004,"endTime":2005}},{"id":9,"value":"santa fe","properties":{"startTime":2005}}]}}
+{"id":7,"label":"person","outE":{"uses":[{"id":19,"inV":10,"properties":{"skill":5}},{"id":20,"inV":11,"properties":{"skill":4}}],"develops":[{"id":17,"inV":10,"properties":{"since":2010}},{"id":18,"inV":11,"properties":{"since":2011}}]},"properties":{"name":[{"id":1,"value":"stephen"}],"location":[{"id":10,"value":"centreville","properties":{"startTime":1990,"endTime":2000}},{"id":11,"value":"dulles","properties":{"startTime":2000,"endTime":2006}},{"id":12,"value":"purcellville","properties":{"startTime":2006}}]}}
+{"id":8,"label":"person","outE":{"uses":[{"id":22,"inV":10,"properties":{"skill":3}},{"id":23,"inV":11,"properties":{"skill":3}}],"develops":[{"id":21,"inV":10,"properties":{"since":2012}}]},"properties":{"name":[{"id":2,"value":"matthias"}],"location":[{"id":13,"value":"bremen","properties":{"startTime":2004,"endTime":2007}},{"id":14,"value":"baltimore","properties":{"startTime":2007,"endTime":2011}},{"id":15,"value":"oakland","properties":{"startTime":2011,"endTime":2014}},{"id":16,"value":"seattle","properties":{"startTime":2014}}]}}
+{"id":9,"label":"person","outE":{"uses":[{"id":24,"inV":10,"properties":{"skill":5}},{"id":25,"inV":11,"properties":{"skill":3}}]},"properties":{"name":[{"id":3,"value":"daniel"}],"location":[{"id":17,"value":"spremberg","properties":{"startTime":1982,"endTime":2005}},{"id":18,"value":"kaiserslautern","properties":{"startTime":2005,"endTime":2009}},{"id":19,"value":"aachen","properties":{"startTime":2009}}]}}
+{"id":10,"label":"software","inE":{"uses":[{"id":19,"outV":7,"properties":{"skill":5}},{"id":22,"outV":8,"properties":{"skill":3}},{"id":24,"outV":9,"properties":{"skill":5}},{"id":15,"outV":1,"properties":{"skill":4}}],"develops":[{"id":17,"outV":7,"properties":{"since":2010}},{"id":21,"outV":8,"properties":{"since":2012}},{"id":13,"outV":1,"properties":{"since":2009}}]},"outE":{"traverses":[{"id":26,"inV":11}]},"properties":{"name":[{"id":4,"value":"gremlin"}]}}
+{"id":11,"label":"software","inE":{"traverses":[{"id":26,"outV":10}],"uses":[{"id":16,"outV":1,"properties":{"skill":5}},{"id":20,"outV":7,"properties":{"skill":4}},{"id":23,"outV":8,"properties":{"skill":3}},{"id":25,"outV":9,"properties":{"skill":3}}],"develops":[{"id":18,"outV":7,"properties":{"since":2011}},{"id":14,"outV":1,"properties":{"since":2010}}]},"properties":{"name":[{"id":5,"value":"tinkergraph"}]}}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-modern-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-modern-v2d0-typed.json b/data/tinkerpop-modern-v2d0-typed.json
new file mode 100644
index 0000000..9a297c3
--- /dev/null
+++ b/data/tinkerpop-modern-v2d0-typed.json
@@ -0,0 +1,6 @@
+{"id":{"@type":"gremlin:int32","@value":1},"label":"person","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}}],"knows":[{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:double","@value":0.5}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"marko"}],"age":[{"id":{"@type":"gremlin:int64","@value":1},"value":{"@type":"gremlin:int32","@value":29}}]}}
+{"id":{"@type":"gremlin:int32","@value":2},"label":"person","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":7},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":2},"value":"vadas"}],"age":[{"id":{"@type":"gremlin:int64","@value":3},"value":{"@type":"gremlin:int32","@value":27}}]}}
+{"id":{"@type":"gremlin:int32","@value":3},"label":"software","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":11},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":12},"outV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":4},"value":"lop"}],"lang":[{"id":{"@type":"gremlin:int64","@value":5},"value":"java"}]}}
+{"id":{"@type":"gremlin:int32","@value":4},"label":"person","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":8},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":6},"value":"josh"}],"age":[{"id":{"@type":"gremlin:int64","@value":7},"value":{"@type":"gremlin:int32","@value":32}}]}}
+{"id":{"@type":"gremlin:int32","@value":5},"label":"software","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":8},"value":"ripple"}],"lang":[{"id":{"@type":"gremlin:int64","@value":9},"value":"java"}]}}
+{"id":{"@type":"gremlin:int32","@value":6},"label":"person","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":10},"value":"peter"}],"age":[{"id":{"@type":"gremlin:int64","@value":11},"value":{"@type":"gremlin:int32","@value":35}}]}}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-modern-v2d0.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-modern-v2d0.json b/data/tinkerpop-modern-v2d0.json
new file mode 100644
index 0000000..18c265d
--- /dev/null
+++ b/data/tinkerpop-modern-v2d0.json
@@ -0,0 +1,6 @@
+{"id":1,"label":"person","outE":{"created":[{"id":9,"inV":3,"properties":{"weight":0.4}}],"knows":[{"id":7,"inV":2,"properties":{"weight":0.5}},{"id":8,"inV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":0,"value":"marko"}],"age":[{"id":1,"value":29}]}}
+{"id":2,"label":"person","inE":{"knows":[{"id":7,"outV":1,"properties":{"weight":0.5}}]},"properties":{"name":[{"id":2,"value":"vadas"}],"age":[{"id":3,"value":27}]}}
+{"id":3,"label":"software","inE":{"created":[{"id":9,"outV":1,"properties":{"weight":0.4}},{"id":11,"outV":4,"properties":{"weight":0.4}},{"id":12,"outV":6,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":4,"value":"lop"}],"lang":[{"id":5,"value":"java"}]}}
+{"id":4,"label":"person","inE":{"knows":[{"id":8,"outV":1,"properties":{"weight":1.0}}]},"outE":{"created":[{"id":10,"inV":5,"properties":{"weight":1.0}},{"id":11,"inV":3,"properties":{"weight":0.4}}]},"properties":{"name":[{"id":6,"value":"josh"}],"age":[{"id":7,"value":32}]}}
+{"id":5,"label":"software","inE":{"created":[{"id":10,"outV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":8,"value":"ripple"}],"lang":[{"id":9,"value":"java"}]}}
+{"id":6,"label":"person","outE":{"created":[{"id":12,"inV":3,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":10,"value":"peter"}],"age":[{"id":11,"value":35}]}}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/docs/src/reference/the-graph.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-graph.asciidoc b/docs/src/reference/the-graph.asciidoc
index 8b4916a..151de3a 100644
--- a/docs/src/reference/the-graph.asciidoc
+++ b/docs/src/reference/the-graph.asciidoc
@@ -499,7 +499,7 @@ graph.io(graphson()).writer().create().writeVertex(f, g.V(1).next(), BOTH)
f.close()
----
-The following GraphSON example shows the output of `GraphSonWriter.writeVertex()` with associated edges:
+The following GraphSON example shows the output of `GraphSONWriter.writeVertex()` with associated edges:
[source,json]
----
@@ -553,7 +553,18 @@ The following GraphSON example shows the output of `GraphSonWriter.writeVertex()
The vertex properly serializes to valid JSON but note that a consuming application will not automatically know how to
interpret the numeric values. In coercing those Java values to JSON, such information is lost.
-With a minor change to the construction of the `GraphSONWriter` the lossy nature of GraphSON can be avoided:
+[[graphson-types-embedding]]
+Types embedding
+^^^^^^^^^^^^^^^
+
+With a minor change to the construction of the `GraphSONWriter` the lossy nature of GraphSON can be avoided.
+
+[[graphson-1.0-types]]
+Types with GraphSON 1.0.
+++++++++++++++++++++++++
+
+GraphSON 1.0 is the version enabled by default when creating a GraphSON Mapper. Here is how to enable types with GraphSON
+1.0:
[gremlin-groovy]
----
@@ -652,6 +663,128 @@ from JSON typing. While the output is more verbose, it comes with the security
non-JVM languages won't be able to consume this information automatically, at least there is a hint as to how the
values should be coerced back into the correct types in the target language.
+[[graphson-2.0-types]]
+GraphSON 2.0.
++++++++++++++
+
+GraphSON 2.0 has been introduced to improve the format of the typed values from GraphSON 1.0. It provides non-Java
+centric types information in a consistent format.
+
+With GraphSON 2.0, types are enabled by default.
+
+The type format is :
+
+* Non typed value : `value`
+* Typed value : `{"@type":"typeID", "@value":value}`
+
+TypeIDs are composed of 2 parts, a namespace, and a type name, in the format `"namespace:typename"`.
+A namespace gives the possibility for TinkerPop implementors to categorize custom types they may implement
+and avoid collision with existing TinkerPop types. By default, TinkerPop types will have the
+namespace `g`.
+
+GraphSON 2.0 will provide type information for any value that is not String, Boolean, Map or Collection.
+This includes types for Graph objects as well. The current Graph object types provided by
+TinkerPop, and their respective typeIDs are :
+
+* Vertex -> "gremlin:vertex"
+* Edge -> "gremlin:edge"
+* VertexPropery -> "gremlin:vertexproperty"
+* Property -> "gremlin:property"
+* Path -> "gremlin:path"
+* Tree -> "gremlin:tree"
+* Graph -> "gremlin:graph"
+* Metrics -> "gremlin:metrics"
+* TraversalMetrics -> `gremlin:traversalmetrics"
+
+Here's the same previous example of GraphSON 1.0, but with GraphSON 2.0:
+
+[gremlin-groovy]
+----
+graph = TinkerFactory.createModern()
+g = graph.traversal()
+f = new FileOutputStream("vertex-graphson20.json")
+mapper = graph.io(graphson()).mapper().version(GraphSONVersion.V2_0).create()
+v = g.V(1).next()
+v.property("uuid", UUID.randomUUID())
+graph.io(graphson()).writer().mapper(mapper).create().writeObject(f, v)
+f.close()
+----
+
+Creating a GraphSON 2.0 mapper is done by calling `.version(GraphSONVersion.V2_0)` on the mapper builder.
+Here's a sample output:
+
+[source,json]
+----
+{
+ "@type":"gremlin:vertex",
+ "@value":{
+ "id":{
+ "@type":"gremlin:int32",
+ "@value":1
+ },
+ "label":"person",
+ "properties":{
+ "name":[
+ {
+ "@type":"gremlin:vertexproperty",
+ "@value":{
+ "id":{
+ "@type":"gremlin:int64",
+ "@value":0
+ },
+ "value":"marko",
+ "label":"name"
+ }
+ }
+ ],
+ "myUUIDprop":[
+ {
+ "@type":"gremlin:vertexproperty",
+ "@value":{
+ "id":{
+ "@type":"gremlin:int64",
+ "@value":12
+ },
+ "value":{
+ "@type":"gremlin:uuid",
+ "@value":"02c1041b-c7ef-46ce-812e-3d7963ad50b3"
+ },
+ "label":"myUUIDprop"
+ }
+ }
+ ],
+ "age":[
+ {
+ "@type":"gremlin:vertexproperty",
+ "@value":{
+ "id":{
+ "@type":"gremlin:int64",
+ "@value":1
+ },
+ "value":{
+ "@type":"gremlin:int32",
+ "@value":29
+ },
+ "label":"age"
+ }
+ }
+ ]
+ }
+ }
+}
+----
+
+Here's how to disable types when creating a GraphSON 2.0 `Mapper`:
+
+[gremlin-groovy]
+----
+mapper = graph.io(graphson()).mapper().version(GraphSONVersion.V2_0).typeInfo(GraphSONMapper.TypeInfo.NO_TYPES).create()
+----
+
+By disabling types, the JSON payload produced will be the same than GraphSON 2.0, without the
+extra information that is written for types. Please note, disabling types can be unsafe with
+regards to the written data.
+
[[gryo-reader-writer]]
Gryo Reader/Writer
~~~~~~~~~~~~~~~~~~
@@ -772,4 +905,4 @@ IMPORTANT: TinkerPop uses `tinkerpop.` and `gremlin.` as the prefixes for provid
reduce implementations, and plugins.
The only truly protected namespace is the _hidden namespace_ provided to graph systems. From there, it's up to
-engineers to respect the namespacing conventions presented.
+engineers to respect the namespacing conventions presented.
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.2.x-incubating.asciidoc b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
index bdcf69e..bf29feb 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -93,6 +93,13 @@ Please see the link:https://github.com/apache/tinkerpop/blob/3.2.1/CHANGELOG.asc
Upgrading for Users
~~~~~~~~~~~~~~~~~~~
+GraphSON 2.0
+^^^^^^^^^^^^
+
+GraphSON 2.0 has been introduced to improve and normalize the format of types embedding in GraphSON. Please see
+link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#graphson-2.0-types[Reference Documentation -
+GraphSON 2.0] and link:https://issues.apache.org/jira/browse/TINKERPOP-1274[TINKERPOP-1274].
+
Gephi Plugin
^^^^^^^^^^^^
@@ -268,6 +275,19 @@ VertexTest Signatures
The method signatures of `get_g_VXlistXv1_v2_v3XX_name` and `get_g_VXlistX1_2_3XX_name` of `VertexTest` were changed
to take arguments for the `Traversal` to be constructed by extending classes.
+Graph Drivers Providers
+^^^^^^^^^^^^^^^^^^^^^^
+
+GraphSON 2.0
+++++++++++++
+
+Drivers providers can exploit the new format of typed values JSON serialization offered by GraphSON 2.0. This format
+has been created to allow easy and agnostic parsing of a GraphSON payload without type loss. Drivers of non Java
+languages can then implement their own mapping of the GraphSON's language agnostic type IDs like `UUID`, `LocalDate` to
+the appropriate representation for the driver's language. A more detailed description of GraphSON 2.0 can be found
+there : link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#graphson-2.0-types[Reference Documentation
+- GraphSON 2.0]
+
TinkerPop 3.2.0
---------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java
index 1714a9e..058386b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java
@@ -54,6 +54,14 @@ public final class DefaultTraversalMetrics implements TraversalMetrics, Serializ
public DefaultTraversalMetrics() {
}
+ // This is only a convenient constructor needed for GraphSON deserialization.
+ // TODO: see if that's ok to add that.
+ public DefaultTraversalMetrics(long totalStepDurationNs, List<MutableMetrics> metricsMap) {
+ this.totalStepDuration = totalStepDurationNs;
+ this.computedMetrics = new LinkedHashMap<>(metrics.size());
+ metricsMap.forEach(m -> computedMetrics.put(m.getId(), m.getImmutableClone()));
+ }
+
@Override
public long getDuration(final TimeUnit unit) {
return unit.convert(totalStepDuration, MutableMetrics.SOURCE_UNIT);
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
index a952c65..3b0c886 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
@@ -42,6 +42,18 @@ public class MutableMetrics extends ImmutableMetrics implements Cloneable {
this.name = name;
}
+ // create a MutableMetrics from an Immutable one.
+ // needed that for tests, don't know if it is worth keeping it public.
+ // TODO: see if it's ok to add this
+ public MutableMetrics(Metrics other) {
+ this.id = other.getId();
+ this.name = other.getName();
+ this.annotations.putAll(other.getAnnotations());
+ this.durationNs = other.getDuration(TimeUnit.NANOSECONDS);
+ other.getCounts().forEach((key, count) -> this.counts.put(key, new AtomicLong(count)));
+ other.getNested().forEach(nested -> this.addNested(new MutableMetrics(nested)));
+ }
+
public void addNested(MutableMetrics metrics) {
this.nested.put(metrics.getId(), metrics);
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
index 73e9552..2a000a3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
@@ -29,10 +29,24 @@ import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeResolverBuilder
import org.apache.tinkerpop.shaded.jackson.databind.jsontype.impl.StdTypeResolverBuilder;
import org.apache.tinkerpop.shaded.jackson.databind.module.SimpleModule;
import org.apache.tinkerpop.shaded.jackson.databind.ser.DefaultSerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.util.TokenBuffer;
import org.javatuples.Pair;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.sql.Timestamp;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
import java.util.List;
+import java.util.Map;
+import java.util.TimeZone;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
/**
* An extension to the standard Jackson {@code ObjectMapper} which automatically registers the standard
@@ -60,14 +74,15 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
private final boolean normalize;
private final boolean embedTypes;
private final GraphSONVersion version;
+ private final TypeInfo typeInfo;
- private GraphSONMapper(final List<SimpleModule> customModules, final boolean loadCustomSerializers,
- final boolean normalize, final boolean embedTypes, final GraphSONVersion version) {
- this.customModules = customModules;
- this.loadCustomSerializers = loadCustomSerializers;
- this.normalize = normalize;
- this.embedTypes = embedTypes;
- this.version = version;
+ private GraphSONMapper(final Builder builder) {
+ this.customModules = builder.customModules;
+ this.loadCustomSerializers = builder.loadCustomModules;
+ this.normalize = builder.normalize;
+ this.embedTypes = builder.embedTypes;
+ this.version = builder.version;
+ this.typeInfo = builder.typeInfo;
}
@Override
@@ -75,32 +90,75 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
final ObjectMapper om = new ObjectMapper();
om.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
- if (embedTypes) {
- final TypeResolverBuilder<?> typer = new StdTypeResolverBuilder()
- .init(JsonTypeInfo.Id.CLASS, null)
- .inclusion(JsonTypeInfo.As.PROPERTY)
- .typeProperty(GraphSONTokens.CLASS);
- om.setDefaultTyping(typer);
- }
-
- if (normalize)
- om.enable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS);
-
- // this provider toStrings all unknown classes and converts keys in Map objects that are Object to String.
- final DefaultSerializerProvider provider = new GraphSONSerializerProvider();
- provider.setDefaultKeySerializer(new GraphSONSerializers.GraphSONKeySerializer());
- om.setSerializerProvider(provider);
-
- om.registerModule(version.getBuilder().create(normalize));
+ GraphSONModule graphSONModule = version.getBuilder().create(normalize);
+ om.registerModule(graphSONModule);
customModules.forEach(om::registerModule);
+
// plugin external serialization modules
if (loadCustomSerializers)
om.findAndRegisterModules();
+
+ if (version == GraphSONVersion.V1_0) {
+ if (embedTypes) {
+ final TypeResolverBuilder<?> typer = new StdTypeResolverBuilder()
+ .init(JsonTypeInfo.Id.CLASS, null)
+ .inclusion(JsonTypeInfo.As.PROPERTY)
+ .typeProperty(GraphSONTokens.CLASS);
+ om.setDefaultTyping(typer);
+ }
+ } else if (version == GraphSONVersion.V2_0) {
+ if (typeInfo != TypeInfo.NO_TYPES) {
+ GraphSONTypeIdResolver graphSONTypeIdResolver = new GraphSONTypeIdResolver();
+ final TypeResolverBuilder typer = new GraphSONTypeResolverBuilder()
+ .typesEmbedding(getTypeInfo())
+ .valuePropertyName(GraphSONTokens.VALUEPROP)
+ .init(JsonTypeInfo.Id.CUSTOM, graphSONTypeIdResolver)
+ .typeProperty(GraphSONTokens.VALUETYPE)
+ ;
+
+ // Registers native Java types that are supported by Jackson
+ registerJavaBaseTypes(graphSONTypeIdResolver);
+
+ // Registers the GraphSON Module's types
+ graphSONModule.getTypeDefinitions()
+ .forEach(
+ (targetClass, typeId) -> graphSONTypeIdResolver.addCustomType(String.format("%s:%s", graphSONModule.getTypeNamespace(), typeId), targetClass)
+ );
+
+
+ // Register types to typeResolver for the Custom modules
+ customModules.forEach(e -> {
+ if (e instanceof TinkerPopJacksonModule) {
+ TinkerPopJacksonModule mod = (TinkerPopJacksonModule) e;
+ Map<Class, String> moduleTypeDefinitions = mod.getTypeDefinitions();
+ if (moduleTypeDefinitions != null) {
+ if (mod.getTypeNamespace() == null || mod.getTypeNamespace().isEmpty()) {
+ throw new IllegalStateException("Cannot specify a module for GraphSON 2.0 with type definitions but without a type Domain. " +
+ "If no specific type domain is required, use Gremlin's default domain, \"gremlin\" but there may be collisions.");
+ }
+ moduleTypeDefinitions.forEach(
+ (targetClass, typeId) -> graphSONTypeIdResolver.addCustomType(String.format("%s:%s", mod.getTypeNamespace(), typeId), targetClass)
+ );
+ }
+ }
+ });
+ om.setDefaultTyping(typer);
+ }
+ } else {
+ throw new IllegalStateException("Unknown GraphSONVersion : " + version);
+ }
+
+ // this provider toStrings all unknown classes and converts keys in Map objects that are Object to String.
+ final DefaultSerializerProvider provider = new GraphSONSerializerProvider(version);
+ om.setSerializerProvider(provider);
+
+ if (normalize)
+ om.enable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS);
+
// keep streams open to accept multiple values (e.g. multiple vertices)
om.getFactory().disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);
-
return om;
}
@@ -112,6 +170,31 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
return new Builder();
}
+ public TypeInfo getTypeInfo() {
+ return this.typeInfo;
+ }
+
+
+ private void registerJavaBaseTypes(GraphSONTypeIdResolver graphSONTypeIdResolver) {
+ Arrays.asList(
+ BigInteger.class,
+ BigDecimal.class,
+ Byte.class,
+ Character.class,
+ UUID.class,
+ InetAddress.class,
+ InetSocketAddress.class,
+ Class.class,
+ Calendar.class,
+ Date.class,
+ TimeZone.class,
+ Timestamp.class,
+ AtomicBoolean.class,
+ AtomicReference.class,
+ TokenBuffer.class
+ ).forEach(e -> graphSONTypeIdResolver.addCustomType(String.format("%s:%s", GraphSONTokens.GREMLIN_TYPE_NAMESPACE, e.getSimpleName().toLowerCase()), e));
+ }
+
public static class Builder implements Mapper.Builder<Builder> {
private List<SimpleModule> customModules = new ArrayList<>();
private boolean loadCustomModules = false;
@@ -119,6 +202,8 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
private boolean embedTypes = false;
private List<IoRegistry> registries = new ArrayList<>();
private GraphSONVersion version = GraphSONVersion.V1_0;
+ // GraphSON 2.0 should have types activated by default, otherwise use there's no point in using it instead of 1.0.
+ private TypeInfo typeInfo = TypeInfo.PARTIAL_TYPES;
private Builder() {
}
@@ -133,7 +218,7 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
}
/**
- * Set the version of GraphSON to use.
+ * Set the version of GraphSON to use. The default is {@link GraphSONVersion#V1_0}.
*/
public Builder version(final GraphSONVersion version) {
this.version = version;
@@ -174,10 +259,35 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
}
/**
- * Embeds Java types into generated JSON to clarify their origins.
+ * Embeds Java types into generated JSON to clarify their origins. Setting this value will override the value
+ * of {@link #typeInfo(TypeInfo)} where true will set it to {@link TypeInfo#PARTIAL_TYPES} and false will set
+ * it to {@link TypeInfo#NO_TYPES}.
+ *
+ * @deprecated As of release 3.2.1, replaced by {@link #typeInfo(TypeInfo)}.
*/
+ @Deprecated
public Builder embedTypes(final boolean embedTypes) {
this.embedTypes = embedTypes;
+ this.typeInfo = embedTypes ? TypeInfo.PARTIAL_TYPES : TypeInfo.NO_TYPES;
+ return this;
+ }
+
+ /**
+ * Specify if the values are going to be typed or not, and at which level. Setting this value will override
+ * the value of {@link #embedTypes(boolean)} where {@link TypeInfo#PARTIAL_TYPES} will set it to true and
+ * {@link TypeInfo#NO_TYPES} will set it to false.
+ *
+ * The level can be NO_TYPES or PARTIAL_TYPES, and could be extended in the future.
+ */
+ public Builder typeInfo(final TypeInfo typeInfo) {
+ this.typeInfo = typeInfo;
+ if (typeInfo.equals(TypeInfo.PARTIAL_TYPES))
+ this.embedTypes = true;
+ else if (typeInfo.equals(TypeInfo.NO_TYPES))
+ this.embedTypes = false;
+ else
+ throw new IllegalArgumentException("This value can only be set to PARTIAL_TYPES and NO_TYPES");
+
return this;
}
@@ -187,7 +297,8 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
simpleModules.stream().map(Pair::getValue1).forEach(this.customModules::add);
});
- return new GraphSONMapper(customModules, loadCustomModules, normalize, embedTypes, version);
+ return new GraphSONMapper(this);
}
+
}
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
index 7cc6c91..a0303cf 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
@@ -19,15 +19,19 @@
package org.apache.tinkerpop.gremlin.structure.io.graphson;
import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Property;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.module.SimpleModule;
+import org.apache.tinkerpop.gremlin.structure.util.star.DirectionalStarGraph;
+import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV1d0;
+import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV2d0;
+import java.nio.ByteBuffer;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
@@ -41,8 +45,8 @@ import java.time.Year;
import java.time.YearMonth;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
+import java.util.LinkedHashMap;
import java.util.Map;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
/**
* The set of serializers that handle the core graph interfaces. These serializers support normalization which
@@ -54,13 +58,147 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
*
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
-abstract class GraphSONModule extends SimpleModule {
+abstract class GraphSONModule extends TinkerPopJacksonModule {
GraphSONModule(final String name) {
super(name);
}
/**
+ * Version 2.0 of GraphSON.
+ */
+ static final class GraphSONModuleV2d0 extends GraphSONModule {
+ /**
+ * Constructs a new object.
+ */
+ protected GraphSONModuleV2d0(final boolean normalize) {
+ super("graphson-2.0");
+
+ /////////////////////// SERIALIZERS ////////////////////////////
+
+ // graph
+ addSerializer(Edge.class, new GraphSONSerializersV2d0.EdgeJacksonSerializer(normalize));
+ addSerializer(Vertex.class, new GraphSONSerializersV2d0.VertexJacksonSerializer(normalize));
+ addSerializer(VertexProperty.class, new GraphSONSerializersV2d0.VertexPropertyJacksonSerializer(normalize, true));
+ addSerializer(Property.class, new GraphSONSerializersV2d0.PropertyJacksonSerializer());
+ addSerializer(Metrics.class, new GraphSONSerializersV2d0.MetricsJacksonSerializer());
+ addSerializer(TraversalMetrics.class, new GraphSONSerializersV2d0.TraversalMetricsJacksonSerializer());
+ addSerializer(TraversalExplanation.class, new GraphSONSerializersV2d0.TraversalExplanationJacksonSerializer());
+ addSerializer(Path.class, new GraphSONSerializersV2d0.PathJacksonSerializer());
+ addSerializer(DirectionalStarGraph.class, new StarGraphGraphSONSerializerV2d0(normalize));
+ addSerializer(Tree.class, new GraphSONSerializersV2d0.TreeJacksonSerializer());
+
+ // java.util
+ addSerializer(Map.Entry.class, new JavaUtilSerializersV2d0.MapEntryJacksonSerializer());
+
+ // need to explicitly add serializers for those types because Jackson doesn't do it at all.
+ addSerializer(Integer.class, new GraphSONSerializersV2d0.IntegerGraphSONSerializer());
+ addSerializer(Double.class, new GraphSONSerializersV2d0.DoubleGraphSONSerializer());
+
+ // java.time
+ addSerializer(Duration.class, new JavaTimeSerializersV2d0.DurationJacksonSerializer());
+ addSerializer(Instant.class, new JavaTimeSerializersV2d0.InstantJacksonSerializer());
+ addSerializer(LocalDate.class, new JavaTimeSerializersV2d0.LocalDateJacksonSerializer());
+ addSerializer(LocalDateTime.class, new JavaTimeSerializersV2d0.LocalDateTimeJacksonSerializer());
+ addSerializer(LocalTime.class, new JavaTimeSerializersV2d0.LocalTimeJacksonSerializer());
+ addSerializer(MonthDay.class, new JavaTimeSerializersV2d0.MonthDayJacksonSerializer());
+ addSerializer(OffsetDateTime.class, new JavaTimeSerializersV2d0.OffsetDateTimeJacksonSerializer());
+ addSerializer(OffsetTime.class, new JavaTimeSerializersV2d0.OffsetTimeJacksonSerializer());
+ addSerializer(Period.class, new JavaTimeSerializersV2d0.PeriodJacksonSerializer());
+ addSerializer(Year.class, new JavaTimeSerializersV2d0.YearJacksonSerializer());
+ addSerializer(YearMonth.class, new JavaTimeSerializersV2d0.YearMonthJacksonSerializer());
+ addSerializer(ZonedDateTime.class, new JavaTimeSerializersV2d0.ZonedDateTimeJacksonSerializer());
+ addSerializer(ZoneOffset.class, new JavaTimeSerializersV2d0.ZoneOffsetJacksonSerializer());
+
+ /////////////////////// DESERIALIZERS ////////////////////////////
+
+ // Tinkerpop Graph
+ addDeserializer(Vertex.class, new GraphSONSerializersV2d0.VertexJacksonDeserializer());
+ addDeserializer(Edge.class, new GraphSONSerializersV2d0.EdgeJacksonDeserializer());
+ addDeserializer(Property.class, new GraphSONSerializersV2d0.PropertyJacksonDeserializer());
+ addDeserializer(Path.class, new GraphSONSerializersV2d0.PathJacksonDeserializer());
+ addDeserializer(VertexProperty.class, new GraphSONSerializersV2d0.VertexPropertyJacksonDeserializer());
+ addDeserializer(Metrics.class, new GraphSONSerializersV2d0.MetricsJacksonDeserializer());
+ addDeserializer(TraversalMetrics.class, new GraphSONSerializersV2d0.TraversalMetricsJacksonDeserializer());
+ addDeserializer(Tree.class, new GraphSONSerializersV2d0.TreeJacksonDeserializer());
+
+ // java.time
+ addDeserializer(Duration.class, new JavaTimeSerializersV2d0.DurationJacksonDeserializer());
+ addDeserializer(Instant.class, new JavaTimeSerializersV2d0.InstantJacksonDeserializer());
+ addDeserializer(LocalDate.class, new JavaTimeSerializersV2d0.LocalDateJacksonDeserializer());
+ addDeserializer(LocalDateTime.class, new JavaTimeSerializersV2d0.LocalDateTimeJacksonDeserializer());
+ addDeserializer(LocalTime.class, new JavaTimeSerializersV2d0.LocalTimeJacksonDeserializer());
+ addDeserializer(MonthDay.class, new JavaTimeSerializersV2d0.MonthDayJacksonDeserializer());
+ addDeserializer(OffsetDateTime.class, new JavaTimeSerializersV2d0.OffsetDateTimeJacksonDeserializer());
+ addDeserializer(OffsetTime.class, new JavaTimeSerializersV2d0.OffsetTimeJacksonDeserializer());
+ addDeserializer(Period.class, new JavaTimeSerializersV2d0.PeriodJacksonDeserializer());
+ addDeserializer(Year.class, new JavaTimeSerializersV2d0.YearJacksonDeserializer());
+ addDeserializer(YearMonth.class, new JavaTimeSerializersV2d0.YearMonthJacksonDeserializer());
+ addDeserializer(ZonedDateTime.class, new JavaTimeSerializersV2d0.ZonedDateTimeJacksonDeserializer());
+ addDeserializer(ZoneOffset.class, new JavaTimeSerializersV2d0.ZoneOffsetJacksonDeserializer());
+ }
+
+ public static Builder build() {
+ return new Builder();
+ }
+
+ @Override
+ public Map<Class, String> getTypeDefinitions() {
+ return new LinkedHashMap<Class, String>(){{
+ // Those don't have deserializers because handled by Jackson,
+ // but we still want to rename them in GraphSON
+ put(ByteBuffer.class, "bytebuffer");
+ put(Short.class, "int16");
+ put(Integer.class, "int32");
+ put(Long.class, "int64");
+ put(Double.class, "double");
+ put(Float.class, "float");
+
+ // Time serializers/deserializers
+ put(Duration.class, "duration");
+ put(Instant.class, "instant");
+ put(LocalDate.class, "localdate");
+ put(LocalDateTime.class, "localdatetime");
+ put(LocalTime.class, "localtime");
+ put(MonthDay.class, "monthday");
+ put(OffsetDateTime.class, "offsetdatetime");
+ put(OffsetTime.class, "offsettime");
+ put(Period.class, "period");
+ put(Year.class, "year");
+ put(YearMonth.class, "yearmonth");
+ put(ZonedDateTime.class, "zoneddatetime");
+ put(ZoneOffset.class, "zoneoffset");
+
+ // Tinkerpop Graph objects
+ put(Vertex.class, "vertex");
+ put(Edge.class, "edge");
+ put(Property.class, "property");
+ put(Path.class, "path");
+ put(VertexProperty.class, "vertexproperty");
+ put(Metrics.class, "metrics");
+ put(TraversalMetrics.class, "traversalmetrics");
+ put(Tree.class, "tree");
+ }};
+ }
+
+ @Override
+ public String getTypeNamespace() {
+ return GraphSONTokens.GREMLIN_TYPE_NAMESPACE;
+ }
+
+ static final class Builder implements GraphSONModuleBuilder {
+
+ private Builder() {}
+
+ @Override
+ public GraphSONModule create(final boolean normalize) {
+ return new GraphSONModuleV2d0(normalize);
+ }
+
+ }
+ }
+
+ /**
* Version 1.0 of GraphSON.
*/
static final class GraphSONModuleV1d0 extends GraphSONModule {
@@ -71,53 +209,65 @@ abstract class GraphSONModule extends SimpleModule {
protected GraphSONModuleV1d0(final boolean normalize) {
super("graphson-1.0");
// graph
- addSerializer(Edge.class, new GraphSONSerializers.EdgeJacksonSerializer(normalize));
- addSerializer(Vertex.class, new GraphSONSerializers.VertexJacksonSerializer(normalize));
- addSerializer(VertexProperty.class, new GraphSONSerializers.VertexPropertyJacksonSerializer(normalize));
- addSerializer(Property.class, new GraphSONSerializers.PropertyJacksonSerializer());
- addSerializer(TraversalMetrics.class, new GraphSONSerializers.TraversalMetricsJacksonSerializer());
- addSerializer(TraversalExplanation.class, new GraphSONSerializers.TraversalExplanationJacksonSerializer());
- addSerializer(Path.class, new GraphSONSerializers.PathJacksonSerializer());
- addSerializer(StarGraphGraphSONSerializer.DirectionalStarGraph.class, new StarGraphGraphSONSerializer(normalize));
- addSerializer(Tree.class, new GraphSONSerializers.TreeJacksonSerializer());
+ addSerializer(Edge.class, new GraphSONSerializersV1d0.EdgeJacksonSerializer(normalize));
+ addSerializer(Vertex.class, new GraphSONSerializersV1d0.VertexJacksonSerializer(normalize));
+ addSerializer(VertexProperty.class, new GraphSONSerializersV1d0.VertexPropertyJacksonSerializer(normalize));
+ addSerializer(Property.class, new GraphSONSerializersV1d0.PropertyJacksonSerializer());
+ addSerializer(TraversalMetrics.class, new GraphSONSerializersV1d0.TraversalMetricsJacksonSerializer());
+ addSerializer(TraversalExplanation.class, new GraphSONSerializersV1d0.TraversalExplanationJacksonSerializer());
+ addSerializer(Path.class, new GraphSONSerializersV1d0.PathJacksonSerializer());
+ addSerializer(DirectionalStarGraph.class, new StarGraphGraphSONSerializerV1d0(normalize));
+ addSerializer(Tree.class, new GraphSONSerializersV1d0.TreeJacksonSerializer());
// java.util
- addSerializer(Map.Entry.class, new JavaUtilSerializers.MapEntryJacksonSerializer());
+ addSerializer(Map.Entry.class, new JavaUtilSerializersV1d0.MapEntryJacksonSerializer());
// java.time
- addSerializer(Duration.class, new JavaTimeSerializers.DurationJacksonSerializer());
- addSerializer(Instant.class, new JavaTimeSerializers.InstantJacksonSerializer());
- addSerializer(LocalDate.class, new JavaTimeSerializers.LocalDateJacksonSerializer());
- addSerializer(LocalDateTime.class, new JavaTimeSerializers.LocalDateTimeJacksonSerializer());
- addSerializer(LocalTime.class, new JavaTimeSerializers.LocalTimeJacksonSerializer());
- addSerializer(MonthDay.class, new JavaTimeSerializers.MonthDayJacksonSerializer());
- addSerializer(OffsetDateTime.class, new JavaTimeSerializers.OffsetDateTimeJacksonSerializer());
- addSerializer(OffsetTime.class, new JavaTimeSerializers.OffsetTimeJacksonSerializer());
- addSerializer(Period.class, new JavaTimeSerializers.PeriodJacksonSerializer());
- addSerializer(Year.class, new JavaTimeSerializers.YearJacksonSerializer());
- addSerializer(YearMonth.class, new JavaTimeSerializers.YearMonthJacksonSerializer());
- addSerializer(ZonedDateTime.class, new JavaTimeSerializers.ZonedDateTimeJacksonSerializer());
- addSerializer(ZoneOffset.class, new JavaTimeSerializers.ZoneOffsetJacksonSerializer());
-
- addDeserializer(Duration.class, new JavaTimeSerializers.DurationJacksonDeserializer());
- addDeserializer(Instant.class, new JavaTimeSerializers.InstantJacksonDeserializer());
- addDeserializer(LocalDate.class, new JavaTimeSerializers.LocalDateJacksonDeserializer());
- addDeserializer(LocalDateTime.class, new JavaTimeSerializers.LocalDateTimeJacksonDeserializer());
- addDeserializer(LocalTime.class, new JavaTimeSerializers.LocalTimeJacksonDeserializer());
- addDeserializer(MonthDay.class, new JavaTimeSerializers.MonthDayJacksonDeserializer());
- addDeserializer(OffsetDateTime.class, new JavaTimeSerializers.OffsetDateTimeJacksonDeserializer());
- addDeserializer(OffsetTime.class, new JavaTimeSerializers.OffsetTimeJacksonDeserializer());
- addDeserializer(Period.class, new JavaTimeSerializers.PeriodJacksonDeserializer());
- addDeserializer(Year.class, new JavaTimeSerializers.YearJacksonDeserializer());
- addDeserializer(YearMonth.class, new JavaTimeSerializers.YearMonthJacksonDeserializer());
- addDeserializer(ZonedDateTime.class, new JavaTimeSerializers.ZonedDateTimeJacksonDeserializer());
- addDeserializer(ZoneOffset.class, new JavaTimeSerializers.ZoneOffsetJacksonDeserializer());
+ addSerializer(Duration.class, new JavaTimeSerializersV1d0.DurationJacksonSerializer());
+ addSerializer(Instant.class, new JavaTimeSerializersV1d0.InstantJacksonSerializer());
+ addSerializer(LocalDate.class, new JavaTimeSerializersV1d0.LocalDateJacksonSerializer());
+ addSerializer(LocalDateTime.class, new JavaTimeSerializersV1d0.LocalDateTimeJacksonSerializer());
+ addSerializer(LocalTime.class, new JavaTimeSerializersV1d0.LocalTimeJacksonSerializer());
+ addSerializer(MonthDay.class, new JavaTimeSerializersV1d0.MonthDayJacksonSerializer());
+ addSerializer(OffsetDateTime.class, new JavaTimeSerializersV1d0.OffsetDateTimeJacksonSerializer());
+ addSerializer(OffsetTime.class, new JavaTimeSerializersV1d0.OffsetTimeJacksonSerializer());
+ addSerializer(Period.class, new JavaTimeSerializersV1d0.PeriodJacksonSerializer());
+ addSerializer(Year.class, new JavaTimeSerializersV1d0.YearJacksonSerializer());
+ addSerializer(YearMonth.class, new JavaTimeSerializersV1d0.YearMonthJacksonSerializer());
+ addSerializer(ZonedDateTime.class, new JavaTimeSerializersV1d0.ZonedDateTimeJacksonSerializer());
+ addSerializer(ZoneOffset.class, new JavaTimeSerializersV1d0.ZoneOffsetJacksonSerializer());
+
+ addDeserializer(Duration.class, new JavaTimeSerializersV1d0.DurationJacksonDeserializer());
+ addDeserializer(Instant.class, new JavaTimeSerializersV1d0.InstantJacksonDeserializer());
+ addDeserializer(LocalDate.class, new JavaTimeSerializersV1d0.LocalDateJacksonDeserializer());
+ addDeserializer(LocalDateTime.class, new JavaTimeSerializersV1d0.LocalDateTimeJacksonDeserializer());
+ addDeserializer(LocalTime.class, new JavaTimeSerializersV1d0.LocalTimeJacksonDeserializer());
+ addDeserializer(MonthDay.class, new JavaTimeSerializersV1d0.MonthDayJacksonDeserializer());
+ addDeserializer(OffsetDateTime.class, new JavaTimeSerializersV1d0.OffsetDateTimeJacksonDeserializer());
+ addDeserializer(OffsetTime.class, new JavaTimeSerializersV1d0.OffsetTimeJacksonDeserializer());
+ addDeserializer(Period.class, new JavaTimeSerializersV1d0.PeriodJacksonDeserializer());
+ addDeserializer(Year.class, new JavaTimeSerializersV1d0.YearJacksonDeserializer());
+ addDeserializer(YearMonth.class, new JavaTimeSerializersV1d0.YearMonthJacksonDeserializer());
+ addDeserializer(ZonedDateTime.class, new JavaTimeSerializersV1d0.ZonedDateTimeJacksonDeserializer());
+ addDeserializer(ZoneOffset.class, new JavaTimeSerializersV1d0.ZoneOffsetJacksonDeserializer());
}
public static Builder build() {
return new Builder();
}
+ @Override
+ public Map<Class, String> getTypeDefinitions() {
+ // null is fine and handled by the GraphSONMapper
+ return null;
+ }
+
+ @Override
+ public String getTypeNamespace() {
+ // null is fine and handled by the GraphSONMapper
+ return null;
+ }
+
static final class Builder implements GraphSONModuleBuilder {
private Builder() {}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONReader.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONReader.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONReader.java
index d95fdff..0b27c61 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONReader.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONReader.java
@@ -35,7 +35,7 @@ import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedProperty;
import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
import org.apache.tinkerpop.gremlin.structure.util.star.StarGraph;
-import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializer;
+import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONDeserializer;
import org.apache.tinkerpop.gremlin.util.function.FunctionUtils;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import org.apache.tinkerpop.shaded.jackson.core.type.TypeReference;
@@ -169,14 +169,14 @@ public final class GraphSONReader implements GraphReader {
final Function<Attachable<Edge>, Edge> edgeAttachMethod,
final Direction attachEdgesOfThisDirection) throws IOException {
final Map<String, Object> vertexData = mapper.readValue(inputStream, mapTypeReference);
- final StarGraph starGraph = StarGraphGraphSONSerializer.readStarGraphVertex(vertexData);
+ final StarGraph starGraph = StarGraphGraphSONDeserializer.readStarGraphVertex(vertexData);
if (vertexAttachMethod != null) vertexAttachMethod.apply(starGraph.getStarVertex());
if (vertexData.containsKey(GraphSONTokens.OUT_E) && (attachEdgesOfThisDirection == Direction.BOTH || attachEdgesOfThisDirection == Direction.OUT))
- StarGraphGraphSONSerializer.readStarGraphEdges(edgeAttachMethod, starGraph, vertexData, GraphSONTokens.OUT_E);
+ StarGraphGraphSONDeserializer.readStarGraphEdges(edgeAttachMethod, starGraph, vertexData, GraphSONTokens.OUT_E);
if (vertexData.containsKey(GraphSONTokens.IN_E) && (attachEdgesOfThisDirection == Direction.BOTH || attachEdgesOfThisDirection == Direction.IN))
- StarGraphGraphSONSerializer.readStarGraphEdges(edgeAttachMethod, starGraph, vertexData, GraphSONTokens.IN_E);
+ StarGraphGraphSONDeserializer.readStarGraphEdges(edgeAttachMethod, starGraph, vertexData, GraphSONTokens.IN_E);
return starGraph.getStarVertex();
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializerProvider.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializerProvider.java
index ed20fd9..c373692 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializerProvider.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializerProvider.java
@@ -26,17 +26,24 @@ import org.apache.tinkerpop.shaded.jackson.databind.ser.SerializerFactory;
import org.apache.tinkerpop.shaded.jackson.databind.ser.std.ToStringSerializer;
/**
- * Implementation of the {@code DefaultSerializerProvider} for Jackson that users the {@code ToStringSerializer} for
+ * Implementation of the {@code DefaultSerializerProvider} for Jackson that uses the {@code ToStringSerializer} for
* unknown types.
*
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
final class GraphSONSerializerProvider extends DefaultSerializerProvider {
private static final long serialVersionUID = 1L;
- private static final ToStringSerializer toStringSerializer = new ToStringSerializer();
+ private static JsonSerializer<Object> unknownTypeSerializer = new ToStringSerializer();
- public GraphSONSerializerProvider() {
+ public GraphSONSerializerProvider(GraphSONVersion version) {
super();
+ if (version == GraphSONVersion.V1_0) {
+ setDefaultKeySerializer(new GraphSONSerializersV1d0.GraphSONKeySerializer());
+ unknownTypeSerializer = new ToStringSerializer();
+ } else {
+ setDefaultKeySerializer(new GraphSONSerializersV2d0.GraphSONKeySerializer());
+ unknownTypeSerializer = new ToStringGraphSONSerializer();
+ }
}
protected GraphSONSerializerProvider(final SerializerProvider src,
@@ -46,7 +53,7 @@ final class GraphSONSerializerProvider extends DefaultSerializerProvider {
@Override
public JsonSerializer<Object> getUnknownTypeSerializer(final Class<?> aClass) {
- return toStringSerializer;
+ return unknownTypeSerializer;
}
@Override