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:38 UTC
[01/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
Repository: tinkerpop
Updated Branches:
refs/heads/master e50f7167e -> f929db03a
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-normalized-v2d0.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-normalized-v2d0.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-normalized-v2d0.json
new file mode 100644
index 0000000..cb08148
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-normalized-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":{"age":[{"id":2,"value":29}],"name":[{"id":0,"value":"marko"}]}}
+{"id":2,"label":"vertex","inE":{"knows":[{"id":7,"outV":1,"properties":{"weight":0.5}}]},"properties":{"age":[{"id":4,"value":27}],"name":[{"id":3,"value":"vadas"}]}}
+{"id":3,"label":"vertex","inE":{"created":[{"id":11,"outV":4,"properties":{"weight":0.4}},{"id":12,"outV":6,"properties":{"weight":0.2}},{"id":9,"outV":1,"properties":{"weight":0.4}}]},"properties":{"lang":[{"id":6,"value":"java"}],"name":[{"id":5,"value":"lop"}]}}
+{"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":{"age":[{"id":8,"value":32}],"name":[{"id":7,"value":"josh"}]}}
+{"id":5,"label":"vertex","inE":{"created":[{"id":10,"outV":4,"properties":{"weight":1.0}}]},"properties":{"lang":[{"id":10,"value":"java"}],"name":[{"id":9,"value":"ripple"}]}}
+{"id":6,"label":"vertex","outE":{"created":[{"id":12,"inV":3,"properties":{"weight":0.2}}]},"properties":{"age":[{"id":12,"value":35}],"name":[{"id":11,"value":"peter"}]}}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0-typed.json
new file mode 100644
index 0000000..56956ea
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/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/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0.json
new file mode 100644
index 0000000..5ccfe05
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/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/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0-typed.json
new file mode 100644
index 0000000..e688520
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/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/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0.json
new file mode 100644
index 0000000..2165e4d
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/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/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-normalized-v2d0.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-normalized-v2d0.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-normalized-v2d0.json
new file mode 100644
index 0000000..8c259ea
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-normalized-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":{"age":[{"id":1,"value":29}],"name":[{"id":0,"value":"marko"}]}}
+{"id":2,"label":"person","inE":{"knows":[{"id":7,"outV":1,"properties":{"weight":0.5}}]},"properties":{"age":[{"id":3,"value":27}],"name":[{"id":2,"value":"vadas"}]}}
+{"id":3,"label":"software","inE":{"created":[{"id":11,"outV":4,"properties":{"weight":0.4}},{"id":12,"outV":6,"properties":{"weight":0.2}},{"id":9,"outV":1,"properties":{"weight":0.4}}]},"properties":{"lang":[{"id":5,"value":"java"}],"name":[{"id":4,"value":"lop"}]}}
+{"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":{"age":[{"id":7,"value":32}],"name":[{"id":6,"value":"josh"}]}}
+{"id":5,"label":"software","inE":{"created":[{"id":10,"outV":4,"properties":{"weight":1.0}}]},"properties":{"lang":[{"id":9,"value":"java"}],"name":[{"id":8,"value":"ripple"}]}}
+{"id":6,"label":"person","outE":{"created":[{"id":12,"inV":3,"properties":{"weight":0.2}}]},"properties":{"age":[{"id":11,"value":35}],"name":[{"id":10,"value":"peter"}]}}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0-typed.json
new file mode 100644
index 0000000..9a297c3
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/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/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0.json
new file mode 100644
index 0000000..18c265d
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/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/tinkergraph-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/pom.xml b/tinkergraph-gremlin/pom.xml
index 4ee4878..85f7cc9 100644
--- a/tinkergraph-gremlin/pom.xml
+++ b/tinkergraph-gremlin/pom.xml
@@ -76,7 +76,7 @@ limitations under the License.
</activation>
<properties>
- <io.tmp.dir>${project.build.directory}/tinkerpop-io</io.tmp.dir>
+ <io.tmp.dir>${project.build.directory}/test-case-data/TinkerGraphTest/tinkerpop-io</io.tmp.dir>
</properties>
<build>
@@ -115,7 +115,7 @@ limitations under the License.
<directory>${io.tmp.dir}</directory>
<filtering>false</filtering>
<excludes>
- <exclude>**/*-normalized.json</exclude>
+ <exclude>**/*-normalized*.json</exclude>
<exclude>**/sample.kryo</exclude>
</excludes>
</resource>
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java
new file mode 100644
index 0000000..97c1cba
--- /dev/null
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java
@@ -0,0 +1,213 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.tinkergraph.structure;
+
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.io.AbstractIoRegistry;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONIo;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONUtil;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.TinkerPopJacksonModule;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoIo;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoReader;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoWriter;
+import org.apache.tinkerpop.gremlin.structure.util.Attachable;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
+import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
+import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.deser.std.StdDeserializer;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdScalarSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+import org.apache.tinkerpop.shaded.kryo.Kryo;
+import org.apache.tinkerpop.shaded.kryo.Serializer;
+import org.apache.tinkerpop.shaded.kryo.io.Input;
+import org.apache.tinkerpop.shaded.kryo.io.Output;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * An implementation of the {@link org.apache.tinkerpop.gremlin.structure.io.IoRegistry} interface that provides serializers with custom configurations for
+ * implementation specific classes that might need to be serialized. This registry allows a {@link org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph} to
+ * be serialized directly which is useful for moving small graphs around on the network.
+ * <p/>
+ * Most providers need not implement this kind of custom serializer as they will deal with much larger graphs that
+ * wouldn't be practical to serialize in this fashion. This is a bit of a special case for TinkerGraph given its
+ * in-memory status. Typical implementations would create serializers for a complex vertex identifier or a
+ * custom data class like a "geographic point".
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public final class TinkerIoRegistryV2d0 extends AbstractIoRegistry {
+
+ private static final TinkerIoRegistryV2d0 INSTANCE = new TinkerIoRegistryV2d0();
+
+ private TinkerIoRegistryV2d0() {
+ register(GryoIo.class, TinkerGraph.class, new TinkerGraphGryoSerializer());
+ register(GraphSONIo.class, null, new TinkerModuleV2d0());
+ }
+
+ public static TinkerIoRegistryV2d0 getInstance() {
+ return INSTANCE;
+ }
+
+ /**
+ * Provides a method to serialize an entire {@link org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph} into itself for Gryo. This is useful when
+ * shipping small graphs around through Gremlin Server. Reuses the existing Kryo instance for serialization.
+ */
+ final static class TinkerGraphGryoSerializer extends Serializer<TinkerGraph> {
+ @Override
+ public void write(final Kryo kryo, final Output output, final TinkerGraph graph) {
+ try (final ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
+ GryoWriter.build().mapper(() -> kryo).create().writeGraph(stream, graph);
+ final byte[] bytes = stream.toByteArray();
+ output.writeInt(bytes.length);
+ output.write(bytes);
+ } catch (Exception io) {
+ throw new RuntimeException(io);
+ }
+ }
+
+ @Override
+ public TinkerGraph read(final Kryo kryo, final Input input, final Class<TinkerGraph> tinkerGraphClass) {
+ final TinkerGraph graph = TinkerGraph.open();
+ final int len = input.readInt();
+ final byte[] bytes = input.readBytes(len);
+ try (final ByteArrayInputStream stream = new ByteArrayInputStream(bytes)) {
+ GryoReader.build().mapper(() -> kryo).create().readGraph(stream, graph);
+ } catch (Exception io) {
+ throw new RuntimeException(io);
+ }
+
+ return graph;
+ }
+ }
+
+ /**
+ * Provides a method to serialize an entire {@link org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph} into itself for GraphSON. This is useful when
+ * shipping small graphs around through Gremlin Server.
+ */
+ final static class TinkerModuleV2d0 extends TinkerPopJacksonModule {
+ public TinkerModuleV2d0() {
+ super("tinkergraph-2.0");
+ addSerializer(TinkerGraph.class, new TinkerGraphJacksonSerializer());
+ addDeserializer(TinkerGraph.class, new TinkerGraphJacksonDeserializer());
+ }
+
+ @Override
+ public Map<Class, String> getTypeDefinitions() {
+ return new HashMap<Class, String>(){{
+ put(TinkerGraph.class, "graph");
+ }};
+ }
+
+ @Override
+ public String getTypeNamespace() {
+ return "gremlin";
+ }
+ }
+
+ /**
+ * Serializes the graph into an edge list format. Edge list is a better choices than adjacency list (which is
+ * typically standard from the {@link org.apache.tinkerpop.gremlin.structure.io.GraphReader} and {@link org.apache.tinkerpop.gremlin.structure.io.GraphWriter} perspective) in this case because
+ * the use case for this isn't around massive graphs. The use case is for "small" subgraphs that are being
+ * shipped over the wire from Gremlin Server. Edge list format is a bit easier for non-JVM languages to work
+ * with as a format and doesn't require a cache for loading (as vertex labels are not serialized in adjacency
+ * list).
+ */
+ final static class TinkerGraphJacksonSerializer extends StdScalarSerializer<TinkerGraph> {
+
+ public TinkerGraphJacksonSerializer() {
+ super(TinkerGraph.class);
+ }
+
+ @Override
+ public void serialize(final TinkerGraph graph, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ jsonGenerator.writeStartObject();
+ jsonGenerator.writeFieldName(GraphSONTokens.VERTICES);
+ jsonGenerator.writeStartArray();
+
+ final Iterator<Vertex> vertices = graph.vertices();
+ while (vertices.hasNext()) {
+ serializerProvider.defaultSerializeValue(vertices.next(), jsonGenerator);
+ }
+
+ jsonGenerator.writeEndArray();
+ jsonGenerator.writeFieldName(GraphSONTokens.EDGES);
+ jsonGenerator.writeStartArray();
+
+ final Iterator<Edge> edges = graph.edges();
+ while (edges.hasNext()) {
+ serializerProvider.defaultSerializeValue(edges.next(), jsonGenerator);
+ }
+
+ jsonGenerator.writeEndArray();
+ jsonGenerator.writeEndObject();
+ }
+ }
+
+ /**
+ * Deserializes the edge list format.
+ */
+ static class TinkerGraphJacksonDeserializer extends StdDeserializer<TinkerGraph> {
+ public TinkerGraphJacksonDeserializer() {
+ super(TinkerGraph.class);
+ }
+
+ @Override
+ public TinkerGraph deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+ final TinkerGraph graph = TinkerGraph.open();
+
+ final List<? extends Edge> edges;
+ final List<? extends Vertex> vertices;
+
+ jsonParser.nextToken();
+ final Map<String, Object> graphData = deserializationContext.readValue(jsonParser, Map.class);
+ vertices = (List<DetachedVertex>) graphData.get(GraphSONTokens.VERTICES);
+ edges = (List<DetachedEdge>) graphData.get(GraphSONTokens.EDGES);
+
+
+ vertices.forEach(e -> {
+ if (e instanceof DetachedVertex) {
+ ((DetachedVertex)e).attach(Attachable.Method.getOrCreate(graph));
+ }
+ });
+
+ edges.forEach(e -> {
+ if (e instanceof DetachedEdge) {
+ ((DetachedEdge) e).attach(Attachable.Method.getOrCreate(graph));
+ }
+ });
+
+ return graph;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/IoDataGenerationTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/IoDataGenerationTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/IoDataGenerationTest.java
index 86fc733..d07105b 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/IoDataGenerationTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/IoDataGenerationTest.java
@@ -30,7 +30,9 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.io.GraphReader;
import org.apache.tinkerpop.gremlin.structure.io.graphml.GraphMLWriter;
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.TypeInfo;
import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoReader;
import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoWriter;
import org.junit.BeforeClass;
@@ -49,7 +51,7 @@ import java.util.stream.IntStream;
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
public class IoDataGenerationTest {
- private static String tempPath;
+ private static final String tempPath;
static {
tempPath = TestHelper.makeTestDataPath(TinkerGraphTest.class, "tinkerpop-io").getPath() + File.separator;
@@ -195,6 +197,94 @@ public class IoDataGenerationTest {
os.close();
}
+ /**
+ * No assertions. Just write out the graph for convenience.
+ */
+ @Test
+ public void shouldWriteClassicGraphAsGraphSONV2d0NoTypes() throws IOException {
+ final OutputStream os = new FileOutputStream(tempPath + "tinkerpop-classic-v2d0.json");
+ GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.NO_TYPES).create()).create()
+ .writeGraph(os, TinkerFactory.createClassic());
+ os.close();
+ }
+
+ /**
+ * No assertions. Just write out the graph for convenience.
+ */
+ @Test
+ public void shouldWriteModernGraphAsGraphSOV2d0NNoTypes() throws IOException {
+ final OutputStream os = new FileOutputStream(tempPath + "tinkerpop-modern-v2d0.json");
+ GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.NO_TYPES).create()).create()
+ .writeGraph(os, TinkerFactory.createModern());
+ os.close();
+ }
+
+ /**
+ * No assertions. Just write out the graph for convenience.
+ */
+ @Test
+ public void shouldWriteCrewGraphAsGraphSONV2d0NoTypes() throws IOException {
+ final OutputStream os = new FileOutputStream(tempPath + "tinkerpop-crew-v2d0.json");
+ GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.NO_TYPES).create()).create()
+ .writeGraph(os, TinkerFactory.createTheCrew());
+ os.close();
+ }
+
+ /**
+ * No assertions. Just write out the graph for convenience.
+ */
+ @Test
+ public void shouldWriteClassicGraphNormalizedAsGraphSONV2d0() throws IOException {
+ final OutputStream os = new FileOutputStream(tempPath + "tinkerpop-classic-normalized-v2d0.json");
+ GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.NO_TYPES).normalize(true).create()).create()
+ .writeGraph(os, TinkerFactory.createClassic());
+ os.close();
+ }
+
+ /**
+ * No assertions. Just write out the graph for convenience.
+ */
+ @Test
+ public void shouldWriteModernGraphNormalizedAsGraphSONV2d0() throws IOException {
+ final OutputStream os = new FileOutputStream(tempPath + "tinkerpop-modern-normalized-v2d0.json");
+ GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.NO_TYPES).normalize(true).create()).create()
+ .writeGraph(os, TinkerFactory.createModern());
+ os.close();
+ }
+
+ /**
+ * No assertions. Just write out the graph for convenience.
+ */
+ @Test
+ public void shouldWriteClassicGraphAsGraphSONV2d0WithTypes() throws IOException {
+ final OutputStream os = new FileOutputStream(tempPath + "tinkerpop-classic-v2d0-typed.json");
+ GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).create()).create()
+ .writeGraph(os, TinkerFactory.createClassic());
+ os.close();
+ }
+
+ /**
+ * No assertions. Just write out the graph for convenience.
+ */
+ @Test
+ public void shouldWriteModernGraphAsGraphSONV2d0WithTypes() throws IOException {
+ final OutputStream os = new FileOutputStream(tempPath + "tinkerpop-modern-v2d0-typed.json");
+ GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).create()).create()
+ .writeGraph(os, TinkerFactory.createModern());
+ os.close();
+ }
+
+ /**
+ * No assertions. Just write out the graph for convenience.
+ */
+ @Test
+ public void shouldWriteCrewGraphAsGraphSONV2d0WithTypes() throws IOException {
+ final OutputStream os = new FileOutputStream(tempPath + "tinkerpop-crew-v2d0-typed.json");
+ GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).create()).create()
+ .writeGraph(os, TinkerFactory.createTheCrew());
+ os.close();
+ }
+
@Test
public void shouldWriteSampleForGremlinServer() throws IOException {
final Graph g = TinkerGraph.open();
@@ -267,12 +357,27 @@ public class IoDataGenerationTest {
GraphSONWriter.build().mapper(GraphSONMapper.build().create()).create().writeGraph(os2, g);
os2.close();
- final OutputStream os3 = new FileOutputStream(tempPath + "grateful-dead.xml");
- GraphMLWriter.build().create().writeGraph(os3, g);
+ final OutputStream os3 = new FileOutputStream(tempPath + "grateful-dead-v2d0.json");
+ GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0)
+ .typeInfo(TypeInfo.NO_TYPES).create())
+ .create()
+ .writeGraph(os3, g);
os3.close();
- final OutputStream os4 = new FileOutputStream(tempPath + "grateful-dead-typed.json");
- GraphSONWriter.build().mapper(GraphSONMapper.build().embedTypes(true).create()).create().writeGraph(os4, g);
+ final OutputStream os4 = new FileOutputStream(tempPath + "grateful-dead.xml");
+ GraphMLWriter.build().create().writeGraph(os4, g);
os4.close();
+
+ final OutputStream os5 = new FileOutputStream(tempPath + "grateful-dead-typed.json");
+ GraphSONWriter.build().mapper(GraphSONMapper.build().embedTypes(true).create()).create().writeGraph(os5, g);
+ os5.close();
+
+ final OutputStream os6 = new FileOutputStream(tempPath + "grateful-dead-v2d0-typed.json");
+ GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0)
+ .typeInfo(TypeInfo.PARTIAL_TYPES).create())
+ .create()
+ .writeGraph(os6, g);
+ os6.close();
+
}
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
new file mode 100644
index 0000000..907aaed
--- /dev/null
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
@@ -0,0 +1,557 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.tinkergraph.structure;
+
+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.MutableMetrics;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.T;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.io.GraphReader;
+import org.apache.tinkerpop.gremlin.structure.io.GraphWriter;
+import org.apache.tinkerpop.gremlin.structure.io.IoTest;
+import org.apache.tinkerpop.gremlin.structure.io.Mapper;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONReader;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.TypeInfo;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.time.Year;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.UUID;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+
+public class TinkerGraphGraphSONSerializerV2d0Test {
+
+ // As of TinkerPop 3.2.1 default for GraphSON 2.0 means types enabled.
+ Mapper defaultMapperV2d0 = GraphSONMapper.build()
+ .version(GraphSONVersion.V2_0)
+ .addRegistry(TinkerIoRegistryV2d0.getInstance())
+ .create();
+
+ Mapper noTypesMapperV2d0 = GraphSONMapper.build()
+ .version(GraphSONVersion.V2_0)
+ .typeInfo(TypeInfo.NO_TYPES)
+ .addRegistry(TinkerIoRegistryV2d0.getInstance())
+ .create();
+
+ /**
+ * Checks that the graph has been fully ser/deser with types.
+ */
+ @Test
+ public void shouldDeserializeGraphSONIntoTinkerGraphWithPartialTypes() throws IOException {
+ GraphWriter writer = getWriter(defaultMapperV2d0);
+ GraphReader reader = getReader(defaultMapperV2d0);
+ TinkerGraph baseModern = TinkerFactory.createModern();
+
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ writer.writeGraph(out, baseModern);
+ String json = out.toString();
+ TinkerGraph read = TinkerGraph.open();
+ reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+ IoTest.assertModernGraph(read, true, false);
+ }
+ }
+
+ /**
+ * Checks that the graph has been fully ser/deser without types.
+ */
+ @Test
+ public void shouldDeserializeGraphSONIntoTinkerGraphWithoutTypes() throws IOException {
+ GraphWriter writer = getWriter(noTypesMapperV2d0);
+ GraphReader reader = getReader(noTypesMapperV2d0);
+ TinkerGraph baseModern = TinkerFactory.createModern();
+
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ writer.writeGraph(out, baseModern);
+ String json = out.toString();
+ TinkerGraph read = TinkerGraph.open();
+ reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+ IoTest.assertModernGraph(read, true, false);
+ }
+ }
+
+ /**
+ * Thorough types verification for Vertex ids, Vertex props, Edge ids, Edge props
+ */
+ @Test
+ public void shouldDeserializeGraphSONIntoTinkerGraphKeepingTypes() throws IOException {
+ GraphWriter writer = getWriter(defaultMapperV2d0);
+ GraphReader reader = getReader(defaultMapperV2d0);
+
+ Graph sampleGraph1 = TinkerFactory.createModern();
+ Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin", "theUUID", UUID.randomUUID());
+ Vertex v2 = sampleGraph1.addVertex(T.id, 101L, "name", "henri", "theUUID", UUID.randomUUID());
+ v1.addEdge("hello", v2, T.id, 101L,
+ "uuid", UUID.randomUUID());
+
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ writer.writeObject(out, sampleGraph1);
+ String json = out.toString();
+
+ TinkerGraph read = reader.readObject(new ByteArrayInputStream(json.getBytes()), TinkerGraph.class);
+ assertTrue(approximateGraphsCheck(sampleGraph1, read));
+ }
+ }
+
+ /**
+ * Asserts the approximateGraphsChecks function fails when expected. Vertex ids.
+ */
+ @Test
+ public void shouldLooseTypesWithGraphSONNoTypesForVertexIds() throws IOException {
+ GraphWriter writer = getWriter(noTypesMapperV2d0);
+ GraphReader reader = getReader(noTypesMapperV2d0);
+ Graph sampleGraph1 = TinkerFactory.createModern();
+ sampleGraph1.addVertex(T.id, 100L, "name", "kevin");
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ writer.writeGraph(out, sampleGraph1);
+ String json = out.toString();
+ TinkerGraph read = TinkerGraph.open();
+ reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+ // Should fail on deserialized vertex Id.
+ assertFalse(approximateGraphsCheck(sampleGraph1, read));
+ }
+ }
+
+ /**
+ * Asserts the approximateGraphsChecks function fails when expected. Vertex props.
+ */
+ @Test
+ public void shouldLooseTypesWithGraphSONNoTypesForVertexProps() throws IOException {
+ GraphWriter writer = getWriter(noTypesMapperV2d0);
+ GraphReader reader = getReader(noTypesMapperV2d0);
+ Graph sampleGraph1 = TinkerFactory.createModern();
+
+ sampleGraph1.addVertex(T.id, 100, "name", "kevin", "uuid", UUID.randomUUID());
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ writer.writeGraph(out, sampleGraph1);
+ String json = out.toString();
+ TinkerGraph read = TinkerGraph.open();
+ reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+ // Should fail on deserialized vertex prop.
+ assertFalse(approximateGraphsCheck(sampleGraph1, read));
+ }
+ }
+
+ /**
+ * Asserts the approximateGraphsChecks function fails when expected. Edge ids.
+ */
+ @Test
+ public void shouldLooseTypesWithGraphSONNoTypesForEdgeIds() throws IOException {
+ GraphWriter writer = getWriter(noTypesMapperV2d0);
+ GraphReader reader = getReader(noTypesMapperV2d0);
+ Graph sampleGraph1 = TinkerFactory.createModern();
+ Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin");
+ v1.addEdge("hello", sampleGraph1.traversal().V().has("name", "marko").next(), T.id, 101L);
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ writer.writeGraph(out, sampleGraph1);
+ String json = out.toString();
+ TinkerGraph read = TinkerGraph.open();
+ reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+ // Should fail on deserialized edge Id.
+ assertFalse(approximateGraphsCheck(sampleGraph1, read));
+ }
+ }
+
+ /**
+ * Asserts the approximateGraphsChecks function fails when expected. Edge props.
+ */
+ @Test
+ public void shouldLooseTypesWithGraphSONNoTypesForEdgeProps() throws IOException {
+ GraphWriter writer = getWriter(noTypesMapperV2d0);
+ GraphReader reader = getReader(noTypesMapperV2d0);
+ Graph sampleGraph1 = TinkerFactory.createModern();
+
+ Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin");
+ v1.addEdge("hello", sampleGraph1.traversal().V().has("name", "marko").next(), T.id, 101,
+ "uuid", UUID.randomUUID());
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ writer.writeGraph(out, sampleGraph1);
+ String json = out.toString();
+ TinkerGraph read = TinkerGraph.open();
+ reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+ // Should fail on deserialized edge prop.
+ assertFalse(approximateGraphsCheck(sampleGraph1, read));
+ }
+ }
+
+ /**
+ * Those kinds of types are declared differently in the GraphSON type deserializer, check that all are handled
+ * properly.
+ */
+ @Test
+ public void shouldKeepTypesWhenDeserializingSerializedTinkerGraph() throws IOException {
+ TinkerGraph tg = TinkerGraph.open();
+
+ Vertex v = tg.addVertex("vertexTest");
+ UUID uuidProp = UUID.randomUUID();
+ Duration durationProp = Duration.ofHours(3);
+ Long longProp = 2L;
+ ByteBuffer byteBufferProp = ByteBuffer.wrap("testbb".getBytes());
+
+ // One Java util type natively supported by Jackson
+ v.property("uuid", uuidProp);
+ // One custom time type added by the GraphSON module
+ v.property("duration", durationProp);
+ // One Java native type not handled by JSON natively
+ v.property("long", longProp);
+ // One Java util type added by GraphSON
+ v.property("bytebuffer", byteBufferProp);
+
+ GraphWriter writer = getWriter(defaultMapperV2d0);
+ GraphReader reader = getReader(defaultMapperV2d0);
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ writer.writeGraph(out, tg);
+ String json = out.toString();
+ TinkerGraph read = TinkerGraph.open();
+ reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+ Vertex vRead = read.traversal().V().hasLabel("vertexTest").next();
+ assertEquals(vRead.property("uuid").value(), uuidProp);
+ assertEquals(vRead.property("duration").value(), durationProp);
+ assertEquals(vRead.property("long").value(), longProp);
+ assertEquals(vRead.property("bytebuffer").value(), byteBufferProp);
+ }
+ }
+
+
+ @Test
+ public void deserializersTestsVertex() {
+ TinkerGraph tg = TinkerGraph.open();
+
+ Vertex v = tg.addVertex("vertexTest");
+ v.property("born", LocalDateTime.of(1971, 1, 2, 20, 50));
+ v.property("dead", LocalDateTime.of(1971, 1, 7, 20, 50));
+
+ GraphWriter writer = getWriter(defaultMapperV2d0);
+ GraphReader reader = getReader(defaultMapperV2d0);
+
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ writer.writeObject(out, v);
+ String json = out.toString();
+
+ // Object works, because there's a type in the payload now
+ // Vertex.class would work as well
+ // Anything else would not because we check the type in param here with what's in the JSON, for safety.
+ Vertex vRead = (Vertex)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+ assertEquals(v, vRead);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ public void deserializersTestsEdge() {
+ TinkerGraph tg = TinkerGraph.open();
+
+ Vertex v = tg.addVertex("vertexTest");
+ Vertex v2 = tg.addVertex("vertexTest");
+
+ Edge ed = v.addEdge("knows", v2, "time", LocalDateTime.now());
+
+ GraphWriter writer = getWriter(defaultMapperV2d0);
+ GraphReader reader = getReader(defaultMapperV2d0);
+
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ writer.writeObject(out, ed);
+ String json = out.toString();
+
+ // Object works, because there's a type in the payload now
+ // Edge.class would work as well
+ // Anything else would not because we check the type in param here with what's in the JSON, for safety.
+ Edge eRead = (Edge)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+ assertEquals(ed, eRead);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ public void deserializersTestsTinkerGraph() {
+ TinkerGraph tg = TinkerGraph.open();
+
+ Vertex v = tg.addVertex("vertexTest");
+ Vertex v2 = tg.addVertex("vertexTest");
+
+ Edge ed = v.addEdge("knows", v2);
+
+ GraphWriter writer = getWriter(defaultMapperV2d0);
+ GraphReader reader = getReader(defaultMapperV2d0);
+
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ writer.writeObject(out, tg);
+ String json = out.toString();
+
+ Graph gRead = (Graph)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+ assertTrue(approximateGraphsCheck(tg, gRead));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ public void deserializersTestsProperty() {
+ TinkerGraph tg = TinkerGraph.open();
+
+ Vertex v = tg.addVertex("vertexTest");
+ Vertex v2 = tg.addVertex("vertexTest");
+
+ Edge ed = v.addEdge("knows", v2);
+
+ GraphWriter writer = getWriter(defaultMapperV2d0);
+ GraphReader reader = getReader(defaultMapperV2d0);
+
+ Property prop = ed.property("since", Year.parse("1993"));
+
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ writer.writeObject(out, prop);
+ String json = out.toString();
+
+ Property pRead = (Property)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+ //can't use equals here, because pRead is detached, its parent element has not been intentionally
+ //serialized and "equals()" checks that.
+ assertTrue(prop.key().equals(pRead.key()) && prop.value().equals(pRead.value()));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ public void deserializersTestsVertexProperty() {
+ TinkerGraph tg = TinkerGraph.open();
+
+ Vertex v = tg.addVertex("vertexTest");
+
+ GraphWriter writer = getWriter(defaultMapperV2d0);
+ GraphReader reader = getReader(defaultMapperV2d0);
+
+ VertexProperty prop = v.property("born", LocalDateTime.of(1971, 1, 2, 20, 50));
+
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ writer.writeObject(out, prop);
+ String json = out.toString();
+
+ VertexProperty vPropRead = (VertexProperty)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+ //only classes and ids are checked, that's ok, full vertex property ser/de
+ //is checked elsewhere.
+ assertEquals(prop, vPropRead);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ public void deserializersTestsPath() {
+ TinkerGraph tg = TinkerFactory.createModern();
+
+ GraphWriter writer = getWriter(defaultMapperV2d0);
+ GraphReader reader = getReader(defaultMapperV2d0);
+
+ Path p = tg.traversal().V(1).as("a").has("name").as("b").
+ out("knows").out("created").as("c").
+ has("name", "ripple").values("name").as("d").
+ identity().as("e").path().next();
+
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ writer.writeObject(out, p);
+ String json = out.toString();
+
+ Path pathRead = (Path)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+
+ for (int i = 0; i < p.objects().size(); i++) {
+ Object o = p.objects().get(i);
+ Object oRead = pathRead.objects().get(i);
+ assertEquals(o, oRead);
+ }
+ for (int i = 0; i < p.labels().size(); i++) {
+ Set<String> o = p.labels().get(i);
+ Set<String> oRead = pathRead.labels().get(i);
+ assertEquals(o, oRead);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ public void deserializersTestsMetrics() {
+ TinkerGraph tg = TinkerFactory.createModern();
+
+ GraphWriter writer = getWriter(defaultMapperV2d0);
+ GraphReader reader = getReader(defaultMapperV2d0);
+
+ TraversalMetrics tm = tg.traversal().V(1).as("a").has("name").as("b").
+ out("knows").out("created").as("c").
+ has("name", "ripple").values("name").as("d").
+ identity().as("e").profile().next();
+
+ MutableMetrics m = new MutableMetrics(tm.getMetrics(0));
+ // making sure nested metrics are included in serde
+ m.addNested(new MutableMetrics(tm.getMetrics(1)));
+
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ writer.writeObject(out, m);
+ String json = out.toString();
+
+ Metrics metricsRead = (Metrics)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+ // toString should be enough to compare Metrics
+ assertTrue(m.toString().equals(metricsRead.toString()));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ public void deserializersTestsTraversalMetrics() {
+ TinkerGraph tg = TinkerFactory.createModern();
+
+ GraphWriter writer = getWriter(defaultMapperV2d0);
+ GraphReader reader = getReader(defaultMapperV2d0);
+
+ TraversalMetrics tm = tg.traversal().V(1).as("a").has("name").as("b").
+ out("knows").out("created").as("c").
+ has("name", "ripple").values("name").as("d").
+ identity().as("e").profile().next();
+
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ writer.writeObject(out, tm);
+ String json = out.toString();
+
+ TraversalMetrics traversalMetricsRead = (TraversalMetrics)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+ // toString should be enough to compare TraversalMetrics
+ assertTrue(tm.toString().equals(traversalMetricsRead.toString()));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ public void deserializersTree() {
+ TinkerGraph tg = TinkerFactory.createModern();
+
+ GraphWriter writer = getWriter(noTypesMapperV2d0);
+ GraphReader reader = getReader(noTypesMapperV2d0);
+
+ Tree t = tg.traversal().V().out().out().tree().next();
+
+ try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ Vertex v = tg.traversal().V(1).next();
+ v.property("myUUIDprop", UUID.randomUUID());
+ writer.writeObject(out, v);
+
+
+// writer.writeObject(out, t);
+ String json = out.toString();
+
+ System.out.println("json = " + json);
+
+// Tree treeRead = (Tree)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+ //Map's equals should check each component of the tree recursively
+ //on each it will call "equals()" which for Vertices will compare ids, which
+ //is ok. Complete vertex deser is checked elsewhere.
+// assertEquals(t, treeRead);
+
+
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private GraphWriter getWriter(Mapper paramMapper) {
+ return GraphSONWriter.build().mapper(paramMapper).create();
+ }
+
+ private GraphReader getReader(Mapper paramMapper) {
+ return GraphSONReader.build().mapper(paramMapper).create();
+ }
+
+ /**
+ * Checks sequentially vertices and egdes of both graphs. Will check sequentially Vertex IDs, Vertex Properties IDs
+ * and values and classes. Then same for edges. To use when serializing a Graph and deserializing the supposedly
+ * same Graph.
+ */
+ private boolean approximateGraphsCheck(Graph g1, Graph g2) {
+ Iterator<Vertex> itV = g1.vertices();
+ Iterator<Vertex> itVRead = g2.vertices();
+
+ while (itV.hasNext()) {
+ Vertex v = itV.next();
+ Vertex vRead = itVRead.next();
+
+ // Will only check IDs but that's 'good' enough.
+ if (!v.equals(vRead)) {
+ return false;
+ }
+
+ Iterator itVP = v.properties();
+ Iterator itVPRead = vRead.properties();
+ while (itVP.hasNext()) {
+ VertexProperty vp = (VertexProperty) itVP.next();
+ VertexProperty vpRead = (VertexProperty) itVPRead.next();
+ if (!vp.value().equals(vpRead.value())
+ || !vp.equals(vpRead)) {
+ return false;
+ }
+ }
+ }
+
+ Iterator<Edge> itE = g1.edges();
+ Iterator<Edge> itERead = g2.edges();
+
+ while (itE.hasNext()) {
+ Edge e = itE.next();
+ Edge eRead = itERead.next();
+ // Will only check IDs but that's good enough.
+ if (!e.equals(eRead)) {
+ return false;
+ }
+
+ Iterator itEP = e.properties();
+ Iterator itEPRead = eRead.properties();
+ while (itEP.hasNext()) {
+ Property ep = (Property) itEP.next();
+ Property epRead = (Property) itEPRead.next();
+ if (!ep.value().equals(epRead.value())
+ || !ep.equals(epRead)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+}
[07/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java
new file mode 100644
index 0000000..a2d29fc
--- /dev/null
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.driver.ser;
+
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.TypeInfo;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Serialize results to JSON with version 2.0.x schema.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public final class GraphSONMessageSerializerGremlinV2d0 extends AbstractGraphSONMessageSerializerV2d0 {
+
+ private static final String MIME_TYPE = SerTokens.MIME_GRAPHSON_V2D0;
+
+ private static byte[] header;
+
+ static {
+ final ByteBuffer buffer = ByteBuffer.allocate(MIME_TYPE.length() + 1);
+ buffer.put((byte) MIME_TYPE.length());
+ buffer.put(MIME_TYPE.getBytes());
+ header = buffer.array();
+ }
+
+ public GraphSONMessageSerializerGremlinV2d0() {
+ super();
+ }
+
+ public GraphSONMessageSerializerGremlinV2d0(final GraphSONMapper mapper) {
+ super(mapper);
+ }
+
+ @Override
+ public String[] mimeTypesSupported() {
+ return new String[]{MIME_TYPE};
+ }
+
+ @Override
+ byte[] obtainHeader() {
+ return header;
+ }
+
+ @Override
+ GraphSONMapper.Builder configureBuilder(final GraphSONMapper.Builder builder) {
+ return builder.version(GraphSONVersion.V2_0)
+ .addCustomModule(new GremlinServerModule())
+ .typeInfo(TypeInfo.PARTIAL_TYPES);
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java
new file mode 100644
index 0000000..2e8c96e
--- /dev/null
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.driver.ser;
+
+import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.TypeInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.nio.ByteBuffer;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * Serialize results to JSON with version 2.0.x schema.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public final class GraphSONMessageSerializerV2d0 extends AbstractGraphSONMessageSerializerV2d0 implements MessageTextSerializer {
+ private static final Logger logger = LoggerFactory.getLogger(GraphSONMessageSerializerV2d0.class);
+ private static final String MIME_TYPE = SerTokens.MIME_JSON;
+
+ private static byte[] header;
+
+ static {
+ final ByteBuffer buffer = ByteBuffer.allocate(MIME_TYPE.length() + 1);
+ buffer.put((byte) MIME_TYPE.length());
+ buffer.put(MIME_TYPE.getBytes());
+ header = buffer.array();
+ }
+
+ public GraphSONMessageSerializerV2d0() {
+ super();
+ }
+
+ public GraphSONMessageSerializerV2d0(final GraphSONMapper mapper) {
+ super(mapper);
+ }
+
+ @Override
+ public String[] mimeTypesSupported() {
+ return new String[]{MIME_TYPE};
+ }
+
+ @Override
+ GraphSONMapper.Builder configureBuilder(final GraphSONMapper.Builder builder) {
+ return builder.version(GraphSONVersion.V2_0)
+ .addCustomModule(new GremlinServerModule())
+ .typeInfo(TypeInfo.PARTIAL_TYPES);
+ }
+
+ @Override
+ byte[] obtainHeader() {
+ return header;
+ }
+
+ @Override
+ public ResponseMessage deserializeResponse(final String msg) throws SerializationException {
+ try {
+ final Map<String, Object> responseData = mapper.readValue(msg, mapTypeReference);
+ final Map<String, Object> status = (Map<String, Object>) responseData.get(SerTokens.TOKEN_STATUS);
+ final Map<String, Object> result = (Map<String, Object>) responseData.get(SerTokens.TOKEN_RESULT);
+ return ResponseMessage.build(UUID.fromString(responseData.get(SerTokens.TOKEN_REQUEST).toString()))
+ .code(ResponseStatusCode.getFromValue((Integer) status.get(SerTokens.TOKEN_CODE)))
+ .statusMessage(status.get(SerTokens.TOKEN_MESSAGE).toString())
+ .statusAttributes((Map<String, Object>) status.get(SerTokens.TOKEN_ATTRIBUTES))
+ .result(result.get(SerTokens.TOKEN_DATA))
+ .responseMetaData((Map<String, Object>) result.get(SerTokens.TOKEN_META))
+ .create();
+ } catch (Exception ex) {
+ logger.warn("Response [{}] could not be deserialized by {}.", msg, AbstractGraphSONMessageSerializerV2d0.class.getName());
+ throw new SerializationException(ex);
+ }
+ }
+
+ @Override
+ public String serializeResponseAsString(final ResponseMessage responseMessage) throws SerializationException {
+ try {
+ return mapper.writeValueAsString(responseMessage);
+ } catch (Exception ex) {
+ logger.warn("Response [{}] could not be serialized by {}.", responseMessage.toString(), AbstractGraphSONMessageSerializerV2d0.class.getName());
+ throw new SerializationException(ex);
+ }
+ }
+
+ @Override
+ public RequestMessage deserializeRequest(final String msg) throws SerializationException {
+ try {
+ return mapper.readValue(msg, RequestMessage.class);
+ } catch (Exception ex) {
+ logger.warn("Request [{}] could not be deserialized by {}.", msg, AbstractGraphSONMessageSerializerV2d0.class.getName());
+ throw new SerializationException(ex);
+ }
+ }
+
+ @Override
+ public String serializeRequestAsString(final RequestMessage requestMessage) throws SerializationException {
+ try {
+ return mapper.writeValueAsString(requestMessage);
+ } catch (Exception ex) {
+ logger.warn("Request [{}] could not be serialized by {}.", requestMessage.toString(), AbstractGraphSONMessageSerializerV2d0.class.getName());
+ throw new SerializationException(ex);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/SerTokens.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/SerTokens.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/SerTokens.java
index c857116..ecda014 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/SerTokens.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/SerTokens.java
@@ -38,6 +38,7 @@ public final class SerTokens {
public static final String MIME_JSON = "application/json";
public static final String MIME_GRAPHSON_V1D0 = "application/vnd.gremlin-v1.0+json";
+ public static final String MIME_GRAPHSON_V2D0 = "application/vnd.gremlin-v2.0+json";
public static final String MIME_GRYO_V1D0 = "application/vnd.gremlin-v1.0+gryo";
public static final String MIME_GRYO_LITE_V1D0 = "application/vnd.gremlin-v1.0+gryo-lite";
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java
new file mode 100644
index 0000000..95907f9
--- /dev/null
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java
@@ -0,0 +1,334 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.driver.ser;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.buffer.UnpooledByteBufAllocator;
+import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+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.io.graphson.GraphSONTokens;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.jackson.databind.util.StdDateFormat;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+/**
+ * Serializer tests that cover lossy serialization/deserialization methods.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class GraphSONMessageSerializerGremlinTestV1d0 {
+
+ private UUID requestId = UUID.fromString("6457272A-4018-4538-B9AE-08DD5DDC0AA1");
+ private ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
+ private static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
+
+ public MessageSerializer serializer = new GraphSONMessageSerializerGremlinV1d0();
+
+ @Test
+ public void shouldSerializeIterable() throws Exception {
+ final ArrayList<Integer> list = new ArrayList<>();
+ list.add(1);
+ list.add(100);
+
+ final ResponseMessage response = convert(list);
+ assertCommon(response);
+
+ final List<Integer> deserializedFunList = (List<Integer>) response.getResult().getData();
+ assertEquals(2, deserializedFunList.size());
+ assertEquals(new Integer(1), deserializedFunList.get(0));
+ assertEquals(new Integer(100), deserializedFunList.get(1));
+ }
+
+ @Test
+ public void shouldSerializeIterableWithNull() throws Exception {
+ final ArrayList<Integer> list = new ArrayList<>();
+ list.add(1);
+ list.add(null);
+ list.add(100);
+
+ final ResponseMessage response = convert(list);
+ assertCommon(response);
+
+ final List<Integer> deserializedFunList = (List<Integer>) response.getResult().getData();
+ assertEquals(3, deserializedFunList.size());
+ assertEquals(new Integer(1), deserializedFunList.get(0));
+ assertNull(deserializedFunList.get(1));
+ assertEquals(new Integer(100), deserializedFunList.get(2));
+ }
+
+ @Test
+ public void shouldSerializeMap() throws Exception {
+ final Map<String, Object> map = new HashMap<>();
+ final Map<String, String> innerMap = new HashMap<>();
+ innerMap.put("a", "b");
+
+ map.put("x", 1);
+ map.put("y", "some");
+ map.put("z", innerMap);
+
+ final ResponseMessage response = convert(map);
+ assertCommon(response);
+
+ final Map<String, Object> deserializedMap = (Map<String, Object>) response.getResult().getData();
+ assertEquals(3, deserializedMap.size());
+ assertEquals(1, deserializedMap.get("x"));
+ assertEquals("some", deserializedMap.get("y"));
+
+ final Map<String, String> deserializedInnerMap = (Map<String, String>) deserializedMap.get("z");
+ assertEquals(1, deserializedInnerMap.size());
+ assertEquals("b", deserializedInnerMap.get("a"));
+ }
+
+ @Test
+ public void shouldSerializeMapEntries() throws Exception {
+ final Graph graph = TinkerGraph.open();
+ final Vertex v1 = graph.addVertex();
+ final Date d = new Date();
+
+ final Map<Object, Object> map = new HashMap<>();
+ map.put("x", 1);
+ map.put(v1, 100);
+ map.put(d, "test");
+
+ final ResponseMessage response = convert(IteratorUtils.asList(map.entrySet()));
+ assertCommon(response);
+
+ final List<Map<String, Object>> deserializedEntries = (List<Map<String, Object>>) response.getResult().getData();
+ assertEquals(3, deserializedEntries.size());
+ deserializedEntries.forEach(e -> {
+ if (e.containsKey("x"))
+ assertEquals(1, e.get("x"));
+ else if (e.containsKey(v1.id().toString()))
+ assertEquals(100, e.get(v1.id().toString()));
+ else if (e.containsKey(StdDateFormat.instance.format(d)))
+ assertEquals("test", e.get(StdDateFormat.instance.format(d)));
+ else
+ fail("Map entries contains a key that is not part of what was serialized");
+ });
+ }
+
+ @Test
+ public void shouldSerializeEdge() throws Exception {
+ final Graph graph = TinkerGraph.open();
+ final Vertex v1 = graph.addVertex();
+ final Vertex v2 = graph.addVertex();
+ final Edge e = v1.addEdge("test", v2);
+ e.property("abc", 123);
+
+ final Iterable<Edge> iterable = IteratorUtils.list(graph.edges());
+
+ final ResponseMessage response = convert(iterable);
+ assertCommon(response);
+
+ final List<Map<String, Object>> edgeList = (List<Map<String, Object>>) response.getResult().getData();
+ assertEquals(1, edgeList.size());
+
+ final Map<String, Object> deserializedEdge = edgeList.get(0);
+ assertEquals(e.id(), deserializedEdge.get(GraphSONTokens.ID));
+ assertEquals(v1.id(), deserializedEdge.get(GraphSONTokens.OUT));
+ assertEquals(v2.id(), deserializedEdge.get(GraphSONTokens.IN));
+ assertEquals(v1.label(), deserializedEdge.get(GraphSONTokens.OUT_LABEL));
+ assertEquals(v2.label(), deserializedEdge.get(GraphSONTokens.IN_LABEL));
+ assertEquals(e.label(), deserializedEdge.get(GraphSONTokens.LABEL));
+ assertEquals(GraphSONTokens.EDGE, deserializedEdge.get(GraphSONTokens.TYPE));
+
+ final Map<String, Object> properties = (Map<String, Object>) deserializedEdge.get(GraphSONTokens.PROPERTIES);
+ assertNotNull(properties);
+ assertEquals(123, properties.get("abc"));
+
+ }
+
+ @Test
+ public void shouldSerializeEdgeProperty() throws Exception {
+ final Graph graph = TinkerGraph.open();
+ final Vertex v1 = graph.addVertex();
+ final Vertex v2 = graph.addVertex();
+ final Edge e = v1.addEdge("test", v2);
+ e.property("abc", 123);
+
+ final Iterable<Property<Object>> iterable = IteratorUtils.list(e.properties("abc"));
+ final ResponseMessage response = convert(iterable);
+ assertCommon(response);
+
+ final List<Map<String, Object>> propertyList = (List<Map<String, Object>>) response.getResult().getData();
+ assertEquals(1, propertyList.size());
+ assertEquals(123, propertyList.get(0).get("value"));
+ }
+
+ @Test
+ public void shouldSerializeVertexWithEmbeddedMap() throws Exception {
+ final Graph graph = TinkerGraph.open();
+ final Vertex v = graph.addVertex();
+ final Map<String, Object> map = new HashMap<>();
+ map.put("x", 500);
+ map.put("y", "some");
+
+ final ArrayList<Object> friends = new ArrayList<>();
+ friends.add("x");
+ friends.add(5);
+ friends.add(map);
+
+ v.property(VertexProperty.Cardinality.single, "friends", friends);
+
+ final List list = IteratorUtils.list(graph.vertices());
+
+ final ResponseMessage response = convert(list);
+ assertCommon(response);
+
+ final List<Map<String, Object>> vertexList = (List<Map<String, Object>>) response.getResult().getData();
+ assertEquals(1, vertexList.size());
+
+ final Map<String, Object> deserializedVertex = vertexList.get(0);
+ assertEquals(v.id(), deserializedVertex.get(GraphSONTokens.ID));
+ assertEquals(Vertex.DEFAULT_LABEL, deserializedVertex.get(GraphSONTokens.LABEL));
+
+ final Map<String, Object> properties = ((Map<String, Object>) deserializedVertex.get(GraphSONTokens.PROPERTIES));
+ assertEquals(1, properties.size());
+
+ final List<Map<String,Object>> friendsProperties = (List<Map<String,Object>>) properties.get("friends");
+ assertEquals(1, friendsProperties.size());
+
+ final List<Object> deserializedInnerList = (List<Object>) friendsProperties.get(0).get(GraphSONTokens.VALUE);
+ assertEquals(3, deserializedInnerList.size());
+ assertEquals("x", deserializedInnerList.get(0));
+ assertEquals(5, deserializedInnerList.get(1));
+
+ final Map<String, Object> deserializedInnerInnerMap = (Map<String, Object>) deserializedInnerList.get(2);
+ assertEquals(2, deserializedInnerInnerMap.size());
+ assertEquals(500, deserializedInnerInnerMap.get("x"));
+ assertEquals("some", deserializedInnerInnerMap.get("y"));
+ }
+
+ @Test
+ public void shouldSerializeToJsonMapWithElementForKey() throws Exception {
+ final TinkerGraph graph = TinkerFactory.createClassic();
+ final GraphTraversalSource g = graph.traversal();
+ final Map<Vertex, Integer> map = new HashMap<>();
+ map.put(g.V().has("name", "marko").next(), 1000);
+
+ final ResponseMessage response = convert(map);
+ assertCommon(response);
+
+ final Map<String, Integer> deserializedMap = (Map<String, Integer>) response.getResult().getData();
+ assertEquals(1, deserializedMap.size());
+
+ // with no embedded types the key (which is a vertex) simply serializes out to an id
+ // {"result":{"1":1000},"code":200,"requestId":"2d62161b-9544-4f39-af44-62ec49f9a595","type":0}
+ assertEquals(new Integer(1000), deserializedMap.get("1"));
+ }
+
+ @Test
+ public void shouldSerializeToTreeJson() throws Exception {
+ final TinkerGraph graph = TinkerFactory.createClassic();
+ final GraphTraversalSource g = graph.traversal();
+ final Map t = g.V(1).out().properties("name").tree().next();
+
+ final ResponseMessage response = convert(t);
+ assertCommon(response);
+
+ final Map<String, Map<String, Map>> deserializedMap = (Map<String, Map<String, Map>>) response.getResult().getData();
+
+ assertEquals(1, deserializedMap.size());
+
+ //check the first object and it's properties
+ Map<String,Object> vertex = deserializedMap.get("1").get("key");
+ Map<String,List<Map>> vertexProperties = (Map<String, List<Map>>)vertex.get("properties");
+ assertEquals(1, (int)vertex.get("id"));
+ assertEquals("marko", vertexProperties.get("name").get(0).get("value"));
+
+ //check objects tree structure
+ //check Vertex property
+ Map<String, Map<String, Map>> subTreeMap = deserializedMap.get("1").get("value");
+ Map<String, Map<String, Map>> subTreeMap2 = subTreeMap.get("2").get("value");
+ Map<String, String> vertexPropertiesDeep = subTreeMap2.get("3").get("key");
+ assertEquals("vadas", vertexPropertiesDeep.get("value"));
+ assertEquals("name", vertexPropertiesDeep.get("label"));
+
+ // check subitem
+ Map<String,Object> vertex2 = subTreeMap.get("3").get("key");
+ Map<String,List<Map>> vertexProperties2 = (Map<String, List<Map>>)vertex2.get("properties");
+
+ assertEquals("lop", vertexProperties2.get("name").get(0).get("value"));
+ }
+
+ @Test
+ public void shouldSerializeFullResponseMessage() throws Exception {
+ final UUID id = UUID.randomUUID();
+
+ final Map<String, Object> metaData = new HashMap<>();
+ metaData.put("test", "this");
+ metaData.put("one", 1);
+
+ final Map<String, Object> attributes = new HashMap<>();
+ attributes.put("test", "that");
+ attributes.put("two", 2);
+
+ final ResponseMessage response = ResponseMessage.build(id)
+ .responseMetaData(metaData)
+ .code(ResponseStatusCode.SUCCESS)
+ .result("some-result")
+ .statusAttributes(attributes)
+ .statusMessage("worked")
+ .create();
+
+ final ByteBuf bb = serializer.serializeResponseAsBinary(response, allocator);
+ final ResponseMessage deserialized = serializer.deserializeResponse(bb);
+
+ assertEquals(id, deserialized.getRequestId());
+ assertEquals("this", deserialized.getResult().getMeta().get("test"));
+ assertEquals(1, deserialized.getResult().getMeta().get("one"));
+ assertEquals("some-result", deserialized.getResult().getData());
+ assertEquals("that", deserialized.getStatus().getAttributes().get("test"));
+ assertEquals(2, deserialized.getStatus().getAttributes().get("two"));
+ assertEquals(ResponseStatusCode.SUCCESS.getValue(), deserialized.getStatus().getCode().getValue());
+ assertEquals("worked", deserialized.getStatus().getMessage());
+ }
+
+ private void assertCommon(final ResponseMessage response) {
+ assertEquals(requestId, response.getRequestId());
+ assertEquals(ResponseStatusCode.SUCCESS, response.getStatus().getCode());
+ }
+
+ private ResponseMessage convert(final Object toSerialize) throws SerializationException {
+ final ByteBuf bb = serializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
+ return serializer.deserializeResponse(bb);
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java
new file mode 100644
index 0000000..a7f8389
--- /dev/null
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java
@@ -0,0 +1,341 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.driver.ser;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.buffer.UnpooledByteBufAllocator;
+import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+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.tinkergraph.structure.TinkerFactory;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.jackson.databind.util.StdDateFormat;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+/**
+ * Serializer tests that cover non-lossy serialization/deserialization methods.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class GraphSONMessageSerializerGremlinTestV2d0 {
+
+ private UUID requestId = UUID.fromString("6457272A-4018-4538-B9AE-08DD5DDC0AA1");
+ private ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
+ private static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
+
+ public MessageSerializer serializer = new GraphSONMessageSerializerGremlinV2d0();
+
+ @Test
+ public void shouldSerializeIterable() throws Exception {
+ final ArrayList<Integer> list = new ArrayList<>();
+ list.add(1);
+ list.add(100);
+
+ final ResponseMessage response = convert(list);
+ assertCommon(response);
+
+ final List<Integer> deserializedFunList = (List<Integer>) response.getResult().getData();
+ assertEquals(2, deserializedFunList.size());
+ assertEquals(new Integer(1), deserializedFunList.get(0));
+ assertEquals(new Integer(100), deserializedFunList.get(1));
+ }
+
+ @Test
+ public void shouldSerializeIterableWithNull() throws Exception {
+ final ArrayList<Integer> list = new ArrayList<>();
+ list.add(1);
+ list.add(null);
+ list.add(100);
+
+ final ResponseMessage response = convert(list);
+ assertCommon(response);
+
+ final List<Integer> deserializedFunList = (List<Integer>) response.getResult().getData();
+ assertEquals(3, deserializedFunList.size());
+ assertEquals(new Integer(1), deserializedFunList.get(0));
+ assertNull(deserializedFunList.get(1));
+ assertEquals(new Integer(100), deserializedFunList.get(2));
+ }
+
+ @Test
+ public void shouldSerializeMap() throws Exception {
+ final Map<String, Object> map = new HashMap<>();
+ final Map<String, String> innerMap = new HashMap<>();
+ innerMap.put("a", "b");
+
+ map.put("x", 1);
+ map.put("y", "some");
+ map.put("z", innerMap);
+
+ final ResponseMessage response = convert(map);
+ assertCommon(response);
+
+ final Map<String, Object> deserializedMap = (Map<String, Object>) response.getResult().getData();
+ assertEquals(3, deserializedMap.size());
+ assertEquals(1, deserializedMap.get("x"));
+ assertEquals("some", deserializedMap.get("y"));
+
+ final Map<String, String> deserializedInnerMap = (Map<String, String>) deserializedMap.get("z");
+ assertEquals(1, deserializedInnerMap.size());
+ assertEquals("b", deserializedInnerMap.get("a"));
+ }
+
+ @Test
+ public void shouldSerializeMapEntries() throws Exception {
+ final Graph graph = TinkerGraph.open();
+ final Vertex v1 = graph.addVertex();
+ final Date d = new Date();
+
+ final Map<Object, Object> map = new HashMap<>();
+ map.put("x", 1);
+ map.put(v1, 100);
+ map.put(d, "test");
+
+ final ResponseMessage response = convert(IteratorUtils.asList(map.entrySet()));
+ assertCommon(response);
+
+ final List<Map<String, Object>> deserializedEntries = (List<Map<String, Object>>) response.getResult().getData();
+ assertEquals(3, deserializedEntries.size());
+ deserializedEntries.forEach(e -> {
+ if (e.containsKey("x"))
+ assertEquals(1, e.get("x"));
+ else if (e.containsKey(v1.id().toString()))
+ assertEquals(100, e.get(v1.id().toString()));
+ else if (e.containsKey(StdDateFormat.instance.format(d)))
+ assertEquals("test", e.get(StdDateFormat.instance.format(d)));
+ else
+ fail("Map entries contains a key that is not part of what was serialized");
+ });
+ }
+
+ @Test
+ public void shouldSerializeEdge() throws Exception {
+ final Graph graph = TinkerGraph.open();
+ final Vertex v1 = graph.addVertex();
+ final Vertex v2 = graph.addVertex();
+ final Edge e = v1.addEdge("test", v2);
+ e.property("abc", 123);
+
+ final Iterable<Edge> iterable = IteratorUtils.list(graph.edges());
+
+ final ResponseMessage response = convert(iterable);
+ assertCommon(response);
+
+ final List<Edge> edgeList = (List<Edge>) response.getResult().getData();
+ assertEquals(1, edgeList.size());
+
+ final Edge deserializedEdge = edgeList.get(0);
+ assertEquals(e.id(), deserializedEdge.id());
+ assertEquals(v1.id(), deserializedEdge.outVertex().id());
+ assertEquals(v2.id(), deserializedEdge.inVertex().id());
+ assertEquals(v1.label(), deserializedEdge.outVertex().label());
+ assertEquals(v2.label(), deserializedEdge.inVertex().label());
+ assertEquals(e.label(), deserializedEdge.label());
+
+ final List<Property> properties = new ArrayList<>();
+ deserializedEdge.properties().forEachRemaining(properties::add);
+ assertEquals(1, properties.size());
+
+ assertNotNull(properties);
+ assertEquals("abc", properties.get(0).key());
+ assertEquals(123, properties.get(0).value());
+
+ }
+
+ @Test
+ public void shouldSerializeEdgeProperty() throws Exception {
+ final Graph graph = TinkerGraph.open();
+ final Vertex v1 = graph.addVertex();
+ final Vertex v2 = graph.addVertex();
+ final Edge e = v1.addEdge("test", v2);
+ e.property("abc", 123);
+
+ final Iterable<Property<Object>> iterable = IteratorUtils.list(e.properties("abc"));
+ final ResponseMessage response = convert(iterable);
+ assertCommon(response);
+
+ final List<Property> propertyList = (List<Property>) response.getResult().getData();
+ assertEquals(1, propertyList.size());
+ assertEquals(123, propertyList.get(0).value());
+ }
+
+ @Test
+ public void shouldSerializeVertexWithEmbeddedMap() throws Exception {
+ final Graph graph = TinkerGraph.open();
+ final Vertex v = graph.addVertex();
+ final Map<String, Object> map = new HashMap<>();
+ map.put("x", 500);
+ map.put("y", "some");
+
+ final ArrayList<Object> friends = new ArrayList<>();
+ friends.add("x");
+ friends.add(5);
+ friends.add(map);
+
+ v.property(VertexProperty.Cardinality.single, "friends", friends);
+
+ final List list = IteratorUtils.list(graph.vertices());
+
+ final ResponseMessage response = convert(list);
+ assertCommon(response);
+
+ final List<Vertex> vertexList = (List<Vertex>) response.getResult().getData();
+ assertEquals(1, vertexList.size());
+
+ final Vertex deserializedVertex = vertexList.get(0);
+ assertEquals(v.id(), deserializedVertex.id());
+ assertEquals(Vertex.DEFAULT_LABEL, deserializedVertex.label());
+
+ final List<VertexProperty> properties = new ArrayList<>();
+ deserializedVertex.properties().forEachRemaining(properties::add);
+ assertEquals(1, properties.size());
+
+ final VertexProperty friendsProperty = properties.get(0);
+ final List<Object> deserializedInnerList = (List<Object>) friendsProperty.value();
+
+ assertEquals(3, deserializedInnerList.size());
+ assertEquals("x", deserializedInnerList.get(0));
+ assertEquals(5, deserializedInnerList.get(1));
+
+ final Map<String, Object> deserializedInnerInnerMap = (Map<String, Object>) deserializedInnerList.get(2);
+ assertEquals(2, deserializedInnerInnerMap.size());
+ assertEquals(500, deserializedInnerInnerMap.get("x"));
+ assertEquals("some", deserializedInnerInnerMap.get("y"));
+ }
+
+ @Test
+ public void shouldSerializeToJsonMapWithElementForKey() throws Exception {
+ final TinkerGraph graph = TinkerFactory.createClassic();
+ final GraphTraversalSource g = graph.traversal();
+ final Map<Vertex, Integer> map = new HashMap<>();
+ map.put(g.V().has("name", "marko").next(), 1000);
+
+ final ResponseMessage response = convert(map);
+ assertCommon(response);
+
+ final Map<String, Integer> deserializedMap = (Map<String, Integer>) response.getResult().getData();
+ assertEquals(1, deserializedMap.size());
+
+ // with no embedded types the key (which is a vertex) simply serializes out to an id
+ // {"result":{"1":1000},"code":200,"requestId":"2d62161b-9544-4f39-af44-62ec49f9a595","type":0}
+ assertEquals(new Integer(1000), deserializedMap.get("1"));
+ }
+
+ @Test
+ public void shouldSerializeToTreeJson() throws Exception {
+ final TinkerGraph graph = TinkerFactory.createClassic();
+ final GraphTraversalSource g = graph.traversal();
+ final Map t = g.V(1).out().properties("name").tree().next();
+
+ final ResponseMessage response = convert(t);
+ assertCommon(response);
+
+ final Tree deserializedTree = (Tree)response.getResult().getData();
+
+ //check the first object and its key's properties
+ assertEquals(1, deserializedTree.size());
+ Vertex v = ((Vertex) deserializedTree.keySet().iterator().next());
+ assertEquals(1, v.id());
+ assertEquals("marko", v.property("name").value());
+
+ Tree firstTree = (Tree)deserializedTree.get(v);
+ assertEquals(3, firstTree.size());
+ Iterator<Vertex> vertexKeys = firstTree.keySet().iterator();
+
+ Tree t2 = (Tree)firstTree.get(vertexKeys.next());
+ VertexProperty vp = (VertexProperty)t2.keySet().iterator().next();
+ assertEquals(3, vp.id());
+ assertEquals("vadas", vp.value());
+
+ t2 = (Tree) firstTree.get(vertexKeys.next());
+ vp = (VertexProperty) t2.keySet().iterator().next();
+ assertEquals(5, vp.id());
+ assertEquals("lop", vp.value());
+
+ t2 = (Tree) firstTree.get(vertexKeys.next());
+ vp = (VertexProperty) t2.keySet().iterator().next();
+ assertEquals(7, vp.id());
+ assertEquals("josh", vp.value());
+ }
+
+ @Test
+ public void shouldSerializeFullResponseMessage() throws Exception {
+ final UUID id = UUID.randomUUID();
+
+ final Map<String, Object> metaData = new HashMap<>();
+ metaData.put("test", "this");
+ metaData.put("one", 1);
+
+ final Map<String, Object> attributes = new HashMap<>();
+ attributes.put("test", "that");
+ attributes.put("two", 2);
+
+ final ResponseMessage response = ResponseMessage.build(id)
+ .responseMetaData(metaData)
+ .code(ResponseStatusCode.SUCCESS)
+ .result("some-result")
+ .statusAttributes(attributes)
+ .statusMessage("worked")
+ .create();
+
+ final ByteBuf bb = serializer.serializeResponseAsBinary(response, allocator);
+ final ResponseMessage deserialized = serializer.deserializeResponse(bb);
+
+ assertEquals(id, deserialized.getRequestId());
+ assertEquals("this", deserialized.getResult().getMeta().get("test"));
+ assertEquals(1, deserialized.getResult().getMeta().get("one"));
+ assertEquals("some-result", deserialized.getResult().getData());
+ assertEquals("that", deserialized.getStatus().getAttributes().get("test"));
+ assertEquals(2, deserialized.getStatus().getAttributes().get("two"));
+ assertEquals(ResponseStatusCode.SUCCESS.getValue(), deserialized.getStatus().getCode().getValue());
+ assertEquals("worked", deserialized.getStatus().getMessage());
+ }
+
+ private void assertCommon(final ResponseMessage response) {
+ assertEquals(requestId, response.getRequestId());
+ assertEquals(ResponseStatusCode.SUCCESS, response.getStatus().getCode());
+ }
+
+ private ResponseMessage convert(final Object toSerialize) throws SerializationException {
+ final ByteBuf bb = serializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
+ return serializer.deserializeResponse(bb);
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV1d0Test.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV1d0Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV1d0Test.java
deleted file mode 100644
index 0091a5f..0000000
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV1d0Test.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.driver.ser;
-
-import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
-import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
-import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Graph;
-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.io.graphson.GraphSONTokens;
-import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
-import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.UnpooledByteBufAllocator;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-import org.apache.tinkerpop.shaded.jackson.databind.util.StdDateFormat;
-import org.junit.Test;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
-
-/**
- * Serializer tests that cover non-lossy serialization/deserialization methods.
- *
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public class GraphSONMessageSerializerGremlinV1d0Test {
- private UUID requestId = UUID.fromString("6457272A-4018-4538-B9AE-08DD5DDC0AA1");
- private ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
- private static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
-
- public MessageSerializer serializer = new GraphSONMessageSerializerGremlinV1d0();
-
- @Test
- public void shouldSerializeIterable() throws Exception {
- final ArrayList<Integer> list = new ArrayList<>();
- list.add(1);
- list.add(100);
-
- final ResponseMessage response = convert(list);
- assertCommon(response);
-
- final List<Integer> deserializedFunList = (List<Integer>) response.getResult().getData();
- assertEquals(2, deserializedFunList.size());
- assertEquals(new Integer(1), deserializedFunList.get(0));
- assertEquals(new Integer(100), deserializedFunList.get(1));
- }
-
- @Test
- public void shouldSerializeIterableWithNull() throws Exception {
- final ArrayList<Integer> list = new ArrayList<>();
- list.add(1);
- list.add(null);
- list.add(100);
-
- final ResponseMessage response = convert(list);
- assertCommon(response);
-
- final List<Integer> deserializedFunList = (List<Integer>) response.getResult().getData();
- assertEquals(3, deserializedFunList.size());
- assertEquals(new Integer(1), deserializedFunList.get(0));
- assertNull(deserializedFunList.get(1));
- assertEquals(new Integer(100), deserializedFunList.get(2));
- }
-
- @Test
- public void shouldSerializeMap() throws Exception {
- final Map<String, Object> map = new HashMap<>();
- final Map<String, String> innerMap = new HashMap<>();
- innerMap.put("a", "b");
-
- map.put("x", 1);
- map.put("y", "some");
- map.put("z", innerMap);
-
- final ResponseMessage response = convert(map);
- assertCommon(response);
-
- final Map<String, Object> deserializedMap = (Map<String, Object>) response.getResult().getData();
- assertEquals(3, deserializedMap.size());
- assertEquals(1, deserializedMap.get("x"));
- assertEquals("some", deserializedMap.get("y"));
-
- final Map<String, String> deserializedInnerMap = (Map<String, String>) deserializedMap.get("z");
- assertEquals(1, deserializedInnerMap.size());
- assertEquals("b", deserializedInnerMap.get("a"));
- }
-
- @Test
- public void shouldSerializeMapEntries() throws Exception {
- final Graph graph = TinkerGraph.open();
- final Vertex v1 = graph.addVertex();
- final Date d = new Date();
-
- final Map<Object, Object> map = new HashMap<>();
- map.put("x", 1);
- map.put(v1, 100);
- map.put(d, "test");
-
- final ResponseMessage response = convert(IteratorUtils.asList(map.entrySet()));
- assertCommon(response);
-
- final List<Map<String, Object>> deserializedEntries = (List<Map<String, Object>>) response.getResult().getData();
- assertEquals(3, deserializedEntries.size());
- deserializedEntries.forEach(e -> {
- if (e.containsKey("x"))
- assertEquals(1, e.get("x"));
- else if (e.containsKey(v1.id().toString()))
- assertEquals(100, e.get(v1.id().toString()));
- else if (e.containsKey(StdDateFormat.instance.format(d)))
- assertEquals("test", e.get(StdDateFormat.instance.format(d)));
- else
- fail("Map entries contains a key that is not part of what was serialized");
- });
- }
-
- @Test
- public void shouldSerializeEdge() throws Exception {
- final Graph graph = TinkerGraph.open();
- final Vertex v1 = graph.addVertex();
- final Vertex v2 = graph.addVertex();
- final Edge e = v1.addEdge("test", v2);
- e.property("abc", 123);
-
- final Iterable<Edge> iterable = IteratorUtils.list(graph.edges());
-
- final ResponseMessage response = convert(iterable);
- assertCommon(response);
-
- final List<Map<String, Object>> edgeList = (List<Map<String, Object>>) response.getResult().getData();
- assertEquals(1, edgeList.size());
-
- final Map<String, Object> deserializedEdge = edgeList.get(0);
- assertEquals(e.id(), deserializedEdge.get(GraphSONTokens.ID));
- assertEquals(v1.id(), deserializedEdge.get(GraphSONTokens.OUT));
- assertEquals(v2.id(), deserializedEdge.get(GraphSONTokens.IN));
- assertEquals(v1.label(), deserializedEdge.get(GraphSONTokens.OUT_LABEL));
- assertEquals(v2.label(), deserializedEdge.get(GraphSONTokens.IN_LABEL));
- assertEquals(e.label(), deserializedEdge.get(GraphSONTokens.LABEL));
- assertEquals(GraphSONTokens.EDGE, deserializedEdge.get(GraphSONTokens.TYPE));
-
- final Map<String, Object> properties = (Map<String, Object>) deserializedEdge.get(GraphSONTokens.PROPERTIES);
- assertNotNull(properties);
- assertEquals(123, properties.get("abc"));
-
- }
-
- @Test
- public void shouldSerializeEdgeProperty() throws Exception {
- final Graph graph = TinkerGraph.open();
- final Vertex v1 = graph.addVertex();
- final Vertex v2 = graph.addVertex();
- final Edge e = v1.addEdge("test", v2);
- e.property("abc", 123);
-
- final Iterable<Property<Object>> iterable = IteratorUtils.list(e.properties("abc"));
- final ResponseMessage response = convert(iterable);
- assertCommon(response);
-
- final List<Map<String, Object>> propertyList = (List<Map<String, Object>>) response.getResult().getData();
- assertEquals(1, propertyList.size());
- assertEquals(123, propertyList.get(0).get("value"));
- }
-
- @Test
- public void shouldSerializeVertexWithEmbeddedMap() throws Exception {
- final Graph graph = TinkerGraph.open();
- final Vertex v = graph.addVertex();
- final Map<String, Object> map = new HashMap<>();
- map.put("x", 500);
- map.put("y", "some");
-
- final ArrayList<Object> friends = new ArrayList<>();
- friends.add("x");
- friends.add(5);
- friends.add(map);
-
- v.property(VertexProperty.Cardinality.single, "friends", friends);
-
- final List list = IteratorUtils.list(graph.vertices());
-
- final ResponseMessage response = convert(list);
- assertCommon(response);
-
- final List<Map<String, Object>> vertexList = (List<Map<String, Object>>) response.getResult().getData();
- assertEquals(1, vertexList.size());
-
- final Map<String, Object> deserializedVertex = vertexList.get(0);
- assertEquals(v.id(), deserializedVertex.get(GraphSONTokens.ID));
- assertEquals(Vertex.DEFAULT_LABEL, deserializedVertex.get(GraphSONTokens.LABEL));
-
- final Map<String, Object> properties = ((Map<String, Object>) deserializedVertex.get(GraphSONTokens.PROPERTIES));
- assertEquals(1, properties.size());
-
- final List<Map<String,Object>> friendsProperties = (List<Map<String,Object>>) properties.get("friends");
- assertEquals(1, friendsProperties.size());
-
- final List<Object> deserializedInnerList = (List<Object>) friendsProperties.get(0).get(GraphSONTokens.VALUE);
- assertEquals(3, deserializedInnerList.size());
- assertEquals("x", deserializedInnerList.get(0));
- assertEquals(5, deserializedInnerList.get(1));
-
- final Map<String, Object> deserializedInnerInnerMap = (Map<String, Object>) deserializedInnerList.get(2);
- assertEquals(2, deserializedInnerInnerMap.size());
- assertEquals(500, deserializedInnerInnerMap.get("x"));
- assertEquals("some", deserializedInnerInnerMap.get("y"));
- }
-
- @Test
- public void shouldSerializeToJsonMapWithElementForKey() throws Exception {
- final TinkerGraph graph = TinkerFactory.createClassic();
- final GraphTraversalSource g = graph.traversal();
- final Map<Vertex, Integer> map = new HashMap<>();
- map.put(g.V().has("name", "marko").next(), 1000);
-
- final ResponseMessage response = convert(map);
- assertCommon(response);
-
- final Map<String, Integer> deserializedMap = (Map<String, Integer>) response.getResult().getData();
- assertEquals(1, deserializedMap.size());
-
- // with no embedded types the key (which is a vertex) simply serializes out to an id
- // {"result":{"1":1000},"code":200,"requestId":"2d62161b-9544-4f39-af44-62ec49f9a595","type":0}
- assertEquals(new Integer(1000), deserializedMap.get("1"));
- }
-
- @Test
- public void shouldSerializeToJsonTree() throws Exception {
- final TinkerGraph graph = TinkerFactory.createClassic();
- final GraphTraversalSource g = graph.traversal();
- final Map t = g.V(1).out().properties("name").tree().next();
-
- final ResponseMessage response = convert(t);
- assertCommon(response);
-
- final Map<String, Map<String, Map>> deserializedMap = (Map<String, Map<String, Map>>) response.getResult().getData();
-
- assertEquals(1, deserializedMap.size());
-
- //check the first object and it's properties
- Map<String,Object> vertex = deserializedMap.get("1").get("key");
- Map<String,List<Map>> vertexProperties = (Map<String, List<Map>>)vertex.get("properties");
- assertEquals(1, (int)vertex.get("id"));
- assertEquals("marko", vertexProperties.get("name").get(0).get("value"));
-
- //check objects tree structure
- //check Vertex property
- Map<String, Map<String, Map>> subTreeMap = deserializedMap.get("1").get("value");
- Map<String, Map<String, Map>> subTreeMap2 = subTreeMap.get("2").get("value");
- Map<String, String> vertexPropertiesDeep = subTreeMap2.get("3").get("key");
- assertEquals("vadas", vertexPropertiesDeep.get("value"));
- assertEquals("name", vertexPropertiesDeep.get("label"));
-
- // check subitem
- Map<String,Object> vertex2 = subTreeMap.get("3").get("key");
- Map<String,List<Map>> vertexProperties2 = (Map<String, List<Map>>)vertex2.get("properties");
-
- assertEquals("lop", vertexProperties2.get("name").get(0).get("value"));
- }
-
- @Test
- public void shouldSerializeFullResponseMessage() throws Exception {
- final UUID id = UUID.randomUUID();
-
- final Map<String, Object> metaData = new HashMap<>();
- metaData.put("test", "this");
- metaData.put("one", 1);
-
- final Map<String, Object> attributes = new HashMap<>();
- attributes.put("test", "that");
- attributes.put("two", 2);
-
- final ResponseMessage response = ResponseMessage.build(id)
- .responseMetaData(metaData)
- .code(ResponseStatusCode.SUCCESS)
- .result("some-result")
- .statusAttributes(attributes)
- .statusMessage("worked")
- .create();
-
- final ByteBuf bb = serializer.serializeResponseAsBinary(response, allocator);
- final ResponseMessage deserialized = serializer.deserializeResponse(bb);
-
- assertEquals(id, deserialized.getRequestId());
- assertEquals("this", deserialized.getResult().getMeta().get("test"));
- assertEquals(1, deserialized.getResult().getMeta().get("one"));
- assertEquals("some-result", deserialized.getResult().getData());
- assertEquals("that", deserialized.getStatus().getAttributes().get("test"));
- assertEquals(2, deserialized.getStatus().getAttributes().get("two"));
- assertEquals(ResponseStatusCode.SUCCESS.getValue(), deserialized.getStatus().getCode().getValue());
- assertEquals("worked", deserialized.getStatus().getMessage());
- }
-
- private void assertCommon(final ResponseMessage response) {
- assertEquals(requestId, response.getRequestId());
- assertEquals(ResponseStatusCode.SUCCESS, response.getStatus().getCode());
- }
-
- private ResponseMessage convert(final Object toSerialize) throws SerializationException {
- final ByteBuf bb = serializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
- return serializer.deserializeResponse(bb);
- }
-}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV1d0Test.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV1d0Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV1d0Test.java
index a4cee54..bf1ddcb 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV1d0Test.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV1d0Test.java
@@ -22,6 +22,7 @@ import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Property;
@@ -35,21 +36,16 @@ import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
-import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
-import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
-import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
import org.apache.tinkerpop.shaded.jackson.databind.JsonNode;
import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
-import org.apache.tinkerpop.shaded.jackson.databind.deser.std.StdDeserializer;
-import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
import org.apache.tinkerpop.shaded.jackson.databind.module.SimpleModule;
import org.apache.tinkerpop.shaded.jackson.databind.node.NullNode;
import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
import org.apache.tinkerpop.shaded.jackson.databind.util.StdDateFormat;
import org.junit.Test;
-import java.awt.*;
+import java.awt.Color;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -57,7 +53,6 @@ import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java
new file mode 100644
index 0000000..de9b493
--- /dev/null
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java
@@ -0,0 +1,507 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.driver.ser;
+
+import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+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.io.AbstractIoRegistry;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONIo;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.databind.JsonNode;
+import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.module.SimpleModule;
+import org.apache.tinkerpop.shaded.jackson.databind.node.NullNode;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.util.StdDateFormat;
+import org.junit.Test;
+
+import java.awt.Color;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+/**
+ * These tests focus on message serialization and not "result" serialization as test specific to results (e.g.
+ * vertices, edges, annotated values, etc.) are handled in the IO packages.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class GraphSONMessageSerializerV2d0Test {
+
+ public static final GraphSONMessageSerializerV2d0 SERIALIZER = new GraphSONMessageSerializerV2d0();
+ private static final RequestMessage msg = RequestMessage.build("op")
+ .overrideRequestId(UUID.fromString("2D62161B-9544-4F39-AF44-62EC49F9A595")).create();
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ @Test
+ public void shouldConfigureIoRegistry() throws Exception {
+ final GraphSONMessageSerializerV1d0 serializer = new GraphSONMessageSerializerV1d0();
+ final Map<String, Object> config = new HashMap<String, Object>() {{
+ put(GryoMessageSerializerV1d0.TOKEN_IO_REGISTRIES, Arrays.asList(ColorIoRegistry.class.getName()));
+ }};
+
+ serializer.configure(config, null);
+
+ final ResponseMessage toSerialize = ResponseMessage.build(UUID.fromString("2D62161B-9544-4F39-AF44-62EC49F9A595"))
+ .result(Color.RED).create();
+ final String results = serializer.serializeResponseAsString(toSerialize);
+ final JsonNode json = mapper.readTree(results);
+ assertNotNull(json);
+ assertThat(json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA).booleanValue(), is(true));
+ }
+
+ @Test
+ public void shouldSerializeToJsonNullResultReturnsNull() throws Exception {
+ final ResponseMessage message = ResponseMessage.build(msg).create();
+ final String results = SERIALIZER.serializeResponseAsString(message);
+ final JsonNode json = mapper.readTree(results);
+ assertNotNull(json);
+ assertEquals(msg.getRequestId().toString(), json.path(SerTokens.TOKEN_REQUEST).asText());
+ assertEquals(NullNode.getInstance(), json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA));
+ }
+
+ @Test
+ public void shouldSerializeToJsonIterable() throws Exception {
+ final ArrayList<FunObject> funList = new ArrayList<>();
+ funList.add(new FunObject("x"));
+ funList.add(new FunObject("y"));
+
+ final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(funList).create());
+ final JsonNode json = mapper.readTree(results);
+
+ assertNotNull(json);
+ assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+ final JsonNode converted = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+
+ assertEquals(2, converted.size());
+
+ assertEquals("x", converted.get(0).asText());
+ assertEquals("y", converted.get(1).asText());
+ }
+
+ @Test
+ public void shouldSerializeToJsonIterator() throws Exception {
+ final ArrayList<FunObject> funList = new ArrayList<>();
+ funList.add(new FunObject("x"));
+ funList.add(new FunObject("y"));
+
+ final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(funList).create());
+ final JsonNode json = mapper.readTree(results);
+
+ assertNotNull(json);
+ assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+ final JsonNode converted = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+
+ assertEquals(2, converted.size());
+
+ assertEquals("x", converted.get(0).asText());
+ assertEquals("y", converted.get(1).asText());
+ }
+
+ @Test
+ public void shouldSerializeToJsonIteratorNullElement() throws Exception {
+
+ final ArrayList<FunObject> funList = new ArrayList<>();
+ funList.add(new FunObject("x"));
+ funList.add(null);
+ funList.add(new FunObject("y"));
+
+ final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(funList.iterator()).create());
+ final JsonNode json = mapper.readTree(results);
+
+ assertNotNull(json);
+ assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+ final JsonNode converted = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+
+ assertEquals(3, converted.size());
+
+ assertEquals("x", converted.get(0).asText());
+ assertEquals(NullNode.getInstance(), converted.get(1));
+ assertEquals("y", converted.get(2).asText());
+ }
+
+ @Test
+ public void shouldSerializeToJsonMap() throws Exception {
+ final Map<String, Object> map = new HashMap<>();
+ final Map<String, String> innerMap = new HashMap<>();
+ innerMap.put("a", "b");
+
+ map.put("x", new FunObject("x"));
+ map.put("y", "some");
+ map.put("z", innerMap);
+
+ final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(map).create());
+ final JsonNode json = mapper.readTree(results);
+
+ assertNotNull(json);
+ assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+ final JsonNode jsonObject = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+
+ assertNotNull(jsonObject);
+ assertEquals("some", jsonObject.get("y").asText());
+ assertEquals("x", jsonObject.get("x").asText());
+
+ final JsonNode innerJsonObject = jsonObject.get("z");
+ assertNotNull(innerJsonObject);
+ assertEquals("b", innerJsonObject.get("a").asText());
+ }
+
+ @Test
+ public void shouldShouldSerializeMapEntries() throws Exception {
+ final Graph graph = TinkerGraph.open();
+ final Vertex v1 = graph.addVertex();
+ final Date d = new Date();
+
+ final Map<Object, Object> map = new HashMap<>();
+ map.put("x", 1);
+ map.put(v1, 100);
+ map.put(d, "test");
+
+ final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(IteratorUtils.asList(map)).create());
+ final JsonNode json = mapper.readTree(results);
+
+ assertNotNull(json);
+ assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+ final JsonNode jsonObject = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+ jsonObject.elements().forEachRemaining(e -> {
+ if (e.has("x"))
+ assertEquals(1, e.get("x").get(GraphSONTokens.VALUEPROP).asInt());
+ else if (e.has(v1.id().toString()))
+ assertEquals(100, e.get(v1.id().toString()).get(GraphSONTokens.VALUEPROP).asInt());
+ else if (e.has(StdDateFormat.instance.format(d)))
+ assertEquals("test", e.get(StdDateFormat.instance.format(d)).asText());
+ else
+ fail("Map entries contains a key that is not part of what was serialized");
+ });
+ }
+
+ @Test
+ public void shouldSerializeEdge() throws Exception {
+ final Graph g = TinkerGraph.open();
+ final Vertex v1 = g.addVertex();
+ final Vertex v2 = g.addVertex();
+ final Edge e = v1.addEdge("test", v2);
+ e.property("abc", 123);
+
+ final Iterable<Edge> iterable = IteratorUtils.list(g.edges());
+ final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(iterable).create());
+
+ final JsonNode json = mapper.readTree(results);
+
+ assertNotNull(json);
+ assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+ final JsonNode converted = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+
+ assertNotNull(converted);
+ assertEquals(1, converted.size());
+
+ final JsonNode edgeAsJson = converted.get(0).get(GraphSONTokens.VALUEPROP);
+ assertNotNull(edgeAsJson);
+
+ assertEquals(((Long) e.id()).longValue(), edgeAsJson.get(GraphSONTokens.ID).get(GraphSONTokens.VALUEPROP).asLong());
+ assertEquals(((Long) v1.id()).longValue(), edgeAsJson.get(GraphSONTokens.OUT).get(GraphSONTokens.VALUEPROP).asLong());
+ assertEquals(((Long) v2.id()).longValue(), edgeAsJson.get(GraphSONTokens.IN).get(GraphSONTokens.VALUEPROP).asLong());
+ assertEquals(e.label(), edgeAsJson.get(GraphSONTokens.LABEL).asText());
+
+ final JsonNode properties = edgeAsJson.get(GraphSONTokens.PROPERTIES);
+ assertNotNull(properties);
+ assertEquals(123, properties.get("abc").get(GraphSONTokens.VALUEPROP).get("value").get(GraphSONTokens.VALUEPROP).asInt());
+ }
+
+ @Test
+ public void shouldSerializeEdgeProperty() throws Exception {
+ final Graph g = TinkerGraph.open();
+ final Vertex v1 = g.addVertex();
+ final Vertex v2 = g.addVertex();
+ final Edge e = v1.addEdge("test", v2);
+ e.property("abc", 123);
+
+ final Iterable<Property<Object>> iterable = IteratorUtils.list(e.properties("abc"));
+ final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(iterable).create());
+
+ final JsonNode json = mapper.readTree(results);
+
+ assertNotNull(json);
+ assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+ final JsonNode converted = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+
+ assertNotNull(converted);
+ assertEquals(1, converted.size());
+
+ final JsonNode propertyAsJson = converted.get(0);
+ assertNotNull(propertyAsJson);
+
+ assertEquals(123, propertyAsJson.get(GraphSONTokens.VALUEPROP).get("value").get(GraphSONTokens.VALUEPROP).asInt());
+ }
+
+ @Test
+ public void shouldSerializeToJsonIteratorWithEmbeddedMap() throws Exception {
+ final Graph g = TinkerGraph.open();
+ final Vertex v = g.addVertex();
+ final Map<String, Object> map = new HashMap<>();
+ map.put("x", 500);
+ map.put("y", "some");
+
+ final ArrayList<Object> friends = new ArrayList<>();
+ friends.add("x");
+ friends.add(5);
+ friends.add(map);
+
+ v.property(VertexProperty.Cardinality.single, "friends", friends);
+
+ final Iterable iterable = IteratorUtils.list(g.vertices());
+ final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(iterable).create());
+ final JsonNode json = mapper.readTree(results);
+
+ assertNotNull(json);
+ assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+ final JsonNode converted = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+
+ assertNotNull(converted);
+ assertEquals(1, converted.size());
+
+ final JsonNode vertexAsJson = converted.get(0).get(GraphSONTokens.VALUEPROP);
+ assertNotNull(vertexAsJson);
+
+ final JsonNode properties = vertexAsJson.get(GraphSONTokens.PROPERTIES);
+ assertNotNull(properties);
+ assertEquals(1, properties.size());
+
+ final JsonNode friendProperties = properties.get("friends");
+ assertEquals(1, friendProperties.size());
+ final JsonNode friendsProperty = friendProperties.get(0).get(GraphSONTokens.VALUEPROP);
+ assertNotNull(friendsProperty);
+ assertEquals(3, friendsProperty.size());
+
+ final String object1 = friendsProperty.get(GraphSONTokens.VALUE).get(0).asText();
+ assertEquals("x", object1);
+
+ final int object2 = friendsProperty.get(GraphSONTokens.VALUE).get(1).get(GraphSONTokens.VALUEPROP).asInt();
+ assertEquals(5, object2);
+
+ final JsonNode object3 = friendsProperty.get(GraphSONTokens.VALUE).get(2);
+ assertEquals(500, object3.get("x").get(GraphSONTokens.VALUEPROP).asInt());
+ assertEquals("some", object3.get("y").asText());
+ }
+
+ @Test
+ public void shouldSerializeToJsonMapWithElementForKey() throws Exception {
+ final TinkerGraph graph = TinkerFactory.createClassic();
+ final GraphTraversalSource g = graph.traversal();
+ final Map<Vertex, Integer> map = new HashMap<>();
+ map.put(g.V().has("name", "marko").next(), 1000);
+
+ final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(map).create());
+ final JsonNode json = mapper.readTree(results);
+
+ assertNotNull(json);
+ assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+ final JsonNode converted = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+
+ assertNotNull(converted);
+
+ // with no embedded types the key (which is a vertex) simply serializes out to an id
+ // {"result":{"1":1000},"code":200,"requestId":"2d62161b-9544-4f39-af44-62ec49f9a595","type":0}
+ assertEquals(1000, converted.get("1").get(GraphSONTokens.VALUEPROP).asInt());
+ }
+
+ @Test
+ public void shouldDeserializeRequestNicelyWithNoArgs() throws Exception {
+ final UUID request = UUID.fromString("011CFEE9-F640-4844-AC93-034448AC0E80");
+ final RequestMessage m = SERIALIZER.deserializeRequest(String.format("{\"requestId\":\"%s\",\"op\":\"eval\"}", request));
+ assertEquals(request, m.getRequestId());
+ assertEquals("eval", m.getOp());
+ assertNotNull(m.getArgs());
+ assertEquals(0, m.getArgs().size());
+ }
+
+ @Test
+ public void shouldDeserializeRequestNicelyWithArgs() throws Exception {
+ final UUID request = UUID.fromString("011CFEE9-F640-4844-AC93-034448AC0E80");
+ final RequestMessage m = SERIALIZER.deserializeRequest(String.format("{\"requestId\":\"%s\",\"op\":\"eval\",\"args\":{\"x\":\"y\"}}", request));
+ assertEquals(request, m.getRequestId());
+ assertEquals("eval", m.getOp());
+ assertNotNull(m.getArgs());
+ assertEquals("y", m.getArgs().get("x"));
+ }
+
+ @Test(expected = SerializationException.class)
+ public void shouldDeserializeRequestParseMessage() throws Exception {
+ SERIALIZER.deserializeRequest("{\"requestId\":\"%s\",\"op\":\"eval\",\"args\":{\"x\":\"y\"}}");
+ }
+
+ @Test
+ public void shouldSerializeFullResponseMessage() throws Exception {
+ final UUID id = UUID.randomUUID();
+
+ final Map<String, Object> metaData = new HashMap<>();
+ metaData.put("test", "this");
+ metaData.put("one", 1);
+
+ final Map<String, Object> attributes = new HashMap<>();
+ attributes.put("test", "that");
+ attributes.put("two", 2);
+
+ final ResponseMessage response = ResponseMessage.build(id)
+ .responseMetaData(metaData)
+ .code(ResponseStatusCode.SUCCESS)
+ .result("some-result")
+ .statusAttributes(attributes)
+ .statusMessage("worked")
+ .create();
+
+ final String results = SERIALIZER.serializeResponseAsString(response);
+ final ResponseMessage deserialized = SERIALIZER.deserializeResponse(results);
+
+ assertEquals(id, deserialized.getRequestId());
+ assertEquals("this", deserialized.getResult().getMeta().get("test"));
+ assertEquals(1, deserialized.getResult().getMeta().get("one"));
+ assertEquals("some-result", deserialized.getResult().getData());
+ assertEquals("that", deserialized.getStatus().getAttributes().get("test"));
+ assertEquals(2, deserialized.getStatus().getAttributes().get("two"));
+ assertEquals(ResponseStatusCode.SUCCESS.getValue(), deserialized.getStatus().getCode().getValue());
+ assertEquals("worked", deserialized.getStatus().getMessage());
+ }
+
+ @Test
+ public void shouldSerializeToTreeJson() throws Exception {
+ final TinkerGraph graph = TinkerFactory.createClassic();
+ final GraphTraversalSource g = graph.traversal();
+ final Tree t = g.V(1).out().properties("name").tree().next();
+
+
+ final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(t).create());
+
+ final JsonNode json = mapper.readTree(results);
+
+ assertNotNull(json);
+ assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+ final JsonNode converted = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+ assertNotNull(converted);
+
+ //result is: tree{v1=>tree{vp['name'->'vadas']=>null, vp['name'->'lop']=>null, vp['name'->'josh']=>null}}
+
+ //check the first object and it's properties
+ assertEquals(1, converted.get(GraphSONTokens.VALUEPROP)
+ .get(0)
+ .get(GraphSONTokens.KEY).get(GraphSONTokens.VALUEPROP)
+ .get(GraphSONTokens.ID).get(GraphSONTokens.VALUEPROP).asInt());
+
+ assertEquals("marko", converted.get(GraphSONTokens.VALUEPROP)
+ .get(0)
+ .get(GraphSONTokens.KEY).get(GraphSONTokens.VALUEPROP)
+ .get(GraphSONTokens.PROPERTIES)
+ .get("name")
+ .get(0).get(GraphSONTokens.VALUEPROP)
+ .get(GraphSONTokens.VALUE).asText());
+
+ //check the leafs
+ assertEquals("vadas", converted.get(GraphSONTokens.VALUEPROP)
+ .get(0)
+ .get(GraphSONTokens.VALUE).get(GraphSONTokens.VALUEPROP)
+ .get(0)
+ .get(GraphSONTokens.KEY).get(GraphSONTokens.VALUEPROP)
+ .get(GraphSONTokens.PROPERTIES)
+ .get("name")
+ .get(0).get(GraphSONTokens.VALUEPROP)
+ .get(GraphSONTokens.VALUE).asText());
+
+ assertEquals("lop", converted.get(GraphSONTokens.VALUEPROP)
+ .get(0)
+ .get(GraphSONTokens.VALUE).get(GraphSONTokens.VALUEPROP)
+ .get(1)
+ .get(GraphSONTokens.KEY).get(GraphSONTokens.VALUEPROP)
+ .get(GraphSONTokens.PROPERTIES)
+ .get("name")
+ .get(0).get(GraphSONTokens.VALUEPROP)
+ .get(GraphSONTokens.VALUE).asText());
+
+ assertEquals("josh", converted.get(GraphSONTokens.VALUEPROP)
+ .get(0)
+ .get(GraphSONTokens.VALUE).get(GraphSONTokens.VALUEPROP)
+ .get(2)
+ .get(GraphSONTokens.KEY).get(GraphSONTokens.VALUEPROP)
+ .get(GraphSONTokens.PROPERTIES)
+ .get("name")
+ .get(0).get(GraphSONTokens.VALUEPROP)
+ .get(GraphSONTokens.VALUE).asText());
+ }
+
+ private class FunObject {
+ private String val;
+
+ public FunObject(String val) {
+ this.val = val;
+ }
+
+ public String toString() {
+ return this.val;
+ }
+ }
+
+ public static class ColorIoRegistry extends AbstractIoRegistry {
+ public ColorIoRegistry() {
+ register(GraphSONIo.class, null, new ColorSimpleModule());
+ }
+ }
+
+ public static class ColorSimpleModule extends SimpleModule {
+ public ColorSimpleModule() {
+ super("color-fun");
+ addSerializer(Color.class, new ColorSerializer());
+
+ }
+ }
+
+ public static class ColorSerializer extends StdSerializer<Color> {
+ public ColorSerializer() {
+ super(Color.class);
+ }
+
+ @Override
+ public void serialize(final Color color, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
+ jsonGenerator.writeBoolean(color.equals(Color.RED));
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/conf/gremlin-server-classic.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-classic.yaml b/gremlin-server/conf/gremlin-server-classic.yaml
index 551e2c0..24923ea 100644
--- a/gremlin-server/conf/gremlin-server-classic.yaml
+++ b/gremlin-server/conf/gremlin-server-classic.yaml
@@ -29,7 +29,7 @@ scriptEngines: {
scripts: [scripts/complex-lifecycle.groovy]}}
serializers:
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+gryo
- - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+gryo-lite
+ - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+gryo-lite
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v1.0+gryo-stringd
metrics: {
slf4jReporter: {enabled: true, interval: 180000}}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/conf/gremlin-server-min.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-min.yaml b/gremlin-server/conf/gremlin-server-min.yaml
index d4471f5..f3e9ddd 100644
--- a/gremlin-server/conf/gremlin-server-min.yaml
+++ b/gremlin-server/conf/gremlin-server-min.yaml
@@ -27,6 +27,7 @@ scriptEngines: {
imports: []}}
serializers:
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
+ - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v2.0+json
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }} # application/json
metrics: {
slf4jReporter: {enabled: true, interval: 180000}}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/conf/gremlin-server-neo4j.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-neo4j.yaml b/gremlin-server/conf/gremlin-server-neo4j.yaml
index 8b4f768..7c1544b 100644
--- a/gremlin-server/conf/gremlin-server-neo4j.yaml
+++ b/gremlin-server/conf/gremlin-server-neo4j.yaml
@@ -46,6 +46,7 @@ serializers:
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+gryo-lite
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v1.0+gryo-stringd
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
+ - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v2.0+json
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }} # application/json
processors:
- { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/conf/gremlin-server-rest-modern.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-rest-modern.yaml b/gremlin-server/conf/gremlin-server-rest-modern.yaml
index a900204..0fdcb69 100644
--- a/gremlin-server/conf/gremlin-server-rest-modern.yaml
+++ b/gremlin-server/conf/gremlin-server-rest-modern.yaml
@@ -30,6 +30,7 @@ scriptEngines: {
scripts: [scripts/generate-modern.groovy]}}
serializers:
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
+ - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v2.0+json
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }} # application/json
metrics: {
slf4jReporter: {enabled: true, interval: 180000}}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/conf/gremlin-server-rest-secure.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-rest-secure.yaml b/gremlin-server/conf/gremlin-server-rest-secure.yaml
index d017aa4..84c21d7 100644
--- a/gremlin-server/conf/gremlin-server-rest-secure.yaml
+++ b/gremlin-server/conf/gremlin-server-rest-secure.yaml
@@ -43,6 +43,7 @@ scriptEngines: {
"org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.CompileStaticCustomizerProvider":["org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.SimpleSandboxExtension"]}}}}
serializers:
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
+ - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v2.0+json
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }} # application/json
processors:
- { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}
[16/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
Posted by sp...@apache.org.
TINKERPOP-1274: GraphSON 2.0.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/115eb3c7
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/115eb3c7
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/115eb3c7
Branch: refs/heads/master
Commit: 115eb3c779d993b5cc668bf2c30b31a9b031de49
Parents: 848e367
Author: Kevin Gallardo <ga...@gmail.com>
Authored: Wed May 18 08:41:26 2016 -0400
Committer: Kevin Gallardo <ke...@datastax.com>
Committed: Sat Aug 20 13:52:27 2016 +0100
----------------------------------------------------------------------
CHANGELOG.asciidoc | 2 +
data/grateful-dead-typed.json | 422 +++++-----
data/grateful-dead-v2d0-typed.json | 808 +++++++++++++++++++
data/grateful-dead-v2d0.json | 808 +++++++++++++++++++
data/grateful-dead.json | 422 +++++-----
data/tinkerpop-classic-v2d0-typed.json | 6 +
data/tinkerpop-classic-v2d0.json | 6 +
data/tinkerpop-crew-v2d0-typed.json | 6 +
data/tinkerpop-crew-v2d0.json | 6 +
data/tinkerpop-modern-v2d0-typed.json | 6 +
data/tinkerpop-modern-v2d0.json | 6 +
docs/src/reference/the-graph.asciidoc | 139 +++-
.../upgrade/release-3.2.x-incubating.asciidoc | 20 +
.../traversal/util/DefaultTraversalMetrics.java | 8 +
.../process/traversal/util/MutableMetrics.java | 12 +
.../structure/io/graphson/GraphSONMapper.java | 167 +++-
.../structure/io/graphson/GraphSONModule.java | 232 +++++-
.../structure/io/graphson/GraphSONReader.java | 8 +-
.../io/graphson/GraphSONSerializerProvider.java | 15 +-
.../io/graphson/GraphSONSerializers.java | 465 -----------
.../io/graphson/GraphSONSerializersV1d0.java | 465 +++++++++++
.../io/graphson/GraphSONSerializersV2d0.java | 580 +++++++++++++
.../structure/io/graphson/GraphSONTokens.java | 3 +
.../io/graphson/GraphSONTypeDeserializer.java | 229 ++++++
.../io/graphson/GraphSONTypeIdResolver.java | 108 +++
.../graphson/GraphSONTypeResolverBuilder.java | 65 ++
.../io/graphson/GraphSONTypeSerializer.java | 197 +++++
.../structure/io/graphson/GraphSONUtil.java | 37 +
.../structure/io/graphson/GraphSONVersion.java | 3 +-
.../structure/io/graphson/GraphSONWriter.java | 11 +-
.../io/graphson/JavaTimeSerializers.java | 326 --------
.../io/graphson/JavaTimeSerializersV1d0.java | 326 ++++++++
.../io/graphson/JavaTimeSerializersV2d0.java | 323 ++++++++
.../io/graphson/JavaUtilSerializers.java | 86 --
.../io/graphson/JavaUtilSerializersV1d0.java | 86 ++
.../io/graphson/JavaUtilSerializersV2d0.java | 87 ++
.../structure/io/graphson/JsonParserConcat.java | 83 ++
.../io/graphson/LegacyGraphSONReader.java | 4 +-
.../io/graphson/TinkerPopJacksonModule.java | 48 ++
.../io/graphson/ToStringGraphSONSerializer.java | 41 +
.../gremlin/structure/io/graphson/TypeInfo.java | 29 +
.../structure/util/detached/DetachedEdge.java | 11 +-
.../structure/util/detached/DetachedVertex.java | 10 +-
.../util/star/DirectionalStarGraph.java | 39 +
.../star/StarGraphGraphSONDeserializer.java | 91 +++
.../util/star/StarGraphGraphSONSerializer.java | 250 ------
.../star/StarGraphGraphSONSerializerV1d0.java | 178 ++++
.../star/StarGraphGraphSONSerializerV2d0.java | 165 ++++
.../GraphSONMapperEmbeddedTypeTest.java | 55 +-
.../io/graphson/GraphSONMapperTest.java | 17 +-
...aphSONMapperV2d0PartialEmbeddedTypeTest.java | 344 ++++++++
.../AbstractGraphSONMessageSerializerV2d0.java | 248 ++++++
.../GraphSONMessageSerializerGremlinV2d0.java | 69 ++
.../ser/GraphSONMessageSerializerV2d0.java | 125 +++
.../tinkerpop/gremlin/driver/ser/SerTokens.java | 1 +
...raphSONMessageSerializerGremlinTestV1d0.java | 334 ++++++++
...raphSONMessageSerializerGremlinTestV2d0.java | 341 ++++++++
...raphSONMessageSerializerGremlinV1d0Test.java | 334 --------
.../ser/GraphSONMessageSerializerV1d0Test.java | 9 +-
.../ser/GraphSONMessageSerializerV2d0Test.java | 507 ++++++++++++
gremlin-server/conf/gremlin-server-classic.yaml | 2 +-
gremlin-server/conf/gremlin-server-min.yaml | 1 +
gremlin-server/conf/gremlin-server-neo4j.yaml | 1 +
.../conf/gremlin-server-rest-modern.yaml | 1 +
.../conf/gremlin-server-rest-secure.yaml | 1 +
gremlin-server/conf/gremlin-server-secure.yaml | 1 +
gremlin-server/conf/gremlin-server-spark.yaml | 1 +
gremlin-server/conf/gremlin-server.yaml | 1 +
gremlin-server/data/sample.kryo | Bin 2416053 -> 2436147 bytes
.../server/GremlinServerHttpIntegrateTest.java | 22 +
.../remote/gremlin-server-integration.yaml | 1 +
.../server/gremlin-server-integration.yaml | 1 +
.../io/graphson/grateful-dead-typed.json | 422 +++++-----
.../io/graphson/grateful-dead-v2d0-typed.json | 808 +++++++++++++++++++
.../io/graphson/grateful-dead-v2d0.json | 808 +++++++++++++++++++
.../structure/io/graphson/grateful-dead.json | 422 +++++-----
.../tinkerpop-classic-normalized-v2d0.json | 6 +
.../graphson/tinkerpop-classic-v2d0-typed.json | 6 +
.../io/graphson/tinkerpop-classic-v2d0.json | 6 +
.../io/graphson/tinkerpop-crew-v2d0-typed.json | 6 +
.../io/graphson/tinkerpop-crew-v2d0.json | 6 +
.../tinkerpop-modern-normalized-v2d0.json | 6 +
.../graphson/tinkerpop-modern-v2d0-typed.json | 6 +
.../io/graphson/tinkerpop-modern-v2d0.json | 6 +
tinkergraph-gremlin/pom.xml | 4 +-
.../structure/TinkerIoRegistryV2d0.java | 213 +++++
.../structure/IoDataGenerationTest.java | 115 ++-
.../TinkerGraphGraphSONSerializerV2d0Test.java | 557 +++++++++++++
88 files changed, 10842 insertions(+), 2417 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index d4eff5d..f4515b7 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,8 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
TinkerPop 3.2.2 (NOT OFFICIALLY RELEASED YET)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+* Introduced GraphSON 2.0.
+* Deprecated `embedTypes` on the builder for `GraphSONMapper`.
* Defaulted the `gremlinPool` setting in Gremlin Server to be zero, which will instructs it to use `Runtime.availableProcessors()` for that settings.
* Changed scope of log4j dependencies so that they would only be used in tests and the binary distributions of Gremlin Console and Server.
* Deprecated `Io.Builder.registry()` in favor of the newly introduced `Io.Builder.onMapper()`.
[08/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java
new file mode 100644
index 0000000..847027c
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.databind.module.SimpleModule;
+
+import java.util.Map;
+
+/**
+ * A {@link SimpleModule} extension that does the necessary work to make the automatic typed deserialization
+ * without full canonical class names work.
+ *
+ * Users of custom modules with the GraphSONMapper that want their objects to be deserialized automatically by the
+ * mapper, must extend this class with their module. It is the only required step.
+ *
+ * Using this basis module allows the serialization and deserialization of typed objects without having the whole
+ * canonical name of the serialized classes included in the Json payload. This is also necessary because Java
+ * does not provide an agnostic way to search in a classpath a find a class by its simple name. Although that could
+ * be done with an external library, later if we deem it necessary.
+ *
+ * @author Kevin Gallardo (https://kgdo.me)
+ */
+public abstract class TinkerPopJacksonModule extends SimpleModule {
+
+ public TinkerPopJacksonModule(String name) {
+ super(name);
+ }
+
+ public abstract Map<Class, String> getTypeDefinitions();
+
+ public abstract String getTypeNamespace();
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java
new file mode 100644
index 0000000..fbd9e00
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.ToStringSerializer;
+
+import java.io.IOException;
+
+/**
+ * A different implementation of the {@link ToStringSerializer} that does not serialize types by calling
+ * `typeSerializer.writeTypePrefixForScalar()` for unknown objects, because it doesn't make sense when there is a
+ * custom types mechanism in place.
+ *
+ * @author Kevin Gallardo (https://kgdo.me)
+ */
+public class ToStringGraphSONSerializer extends ToStringSerializer {
+ @Override
+ public void serializeWithType(Object value, JsonGenerator gen, SerializerProvider provider, TypeSerializer typeSer) throws IOException {
+ this.serialize(value, gen, provider);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TypeInfo.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TypeInfo.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TypeInfo.java
new file mode 100644
index 0000000..34e0d2b
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TypeInfo.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+/**
+ * Defines how data types are handled in GraphSON through the {@link GraphSONMapper}.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public enum TypeInfo {
+ NO_TYPES,
+ PARTIAL_TYPES
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedEdge.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedEdge.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedEdge.java
index 776d313..ba05cca 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedEdge.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedEdge.java
@@ -79,12 +79,17 @@ public class DetachedEdge extends DetachedElement<Edge> implements Edge {
super(id, label);
this.outVertex = new DetachedVertex(outV.getValue0(), outV.getValue1(), Collections.emptyMap());
this.inVertex = new DetachedVertex(inV.getValue0(), inV.getValue1(), Collections.emptyMap());
- if (!properties.isEmpty()) {
+ if (properties != null && !properties.isEmpty()) {
this.properties = new HashMap<>();
- properties.entrySet().stream().forEach(entry -> this.properties.put(entry.getKey(), Collections.singletonList(new DetachedProperty<>(entry.getKey(), entry.getValue(), this))));
+ properties.entrySet().stream().forEach(entry -> {
+ if (Property.class.isAssignableFrom(entry.getValue().getClass())) {
+ this.properties.put(entry.getKey(), Collections.singletonList((Property)entry.getValue()));
+ } else {
+ this.properties.put(entry.getKey(), Collections.singletonList(new DetachedProperty<>(entry.getKey(), entry.getValue(), this)));
+ }
+ });
}
}
-
@Override
public String toString() {
return StringFactory.edgeString(this);
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedVertex.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedVertex.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedVertex.java
index 371c091..70cce37 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedVertex.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedVertex.java
@@ -76,12 +76,14 @@ public class DetachedVertex extends DetachedElement<Vertex> implements Vertex {
public DetachedVertex(final Object id, final String label, final Map<String, Object> properties) {
super(id, label);
- if (!properties.isEmpty()) {
+ if (properties != null && !properties.isEmpty()) {
this.properties = new HashMap<>();
properties.entrySet().stream().forEach(
- entry -> this.properties.put(entry.getKey(), ((List<Map<String, Object>>) entry.getValue()).stream()
- .map(m -> new DetachedVertexProperty<>(m.get(ID), entry.getKey(), m.get(VALUE), (Map<String, Object>) m.getOrDefault(PROPERTIES, new HashMap<>()), this))
- .collect(Collectors.toList())));
+ entry -> this.properties.put(entry.getKey(), (List<VertexProperty>) ((List) entry.getValue()).stream()
+ .map(m -> VertexProperty.class.isAssignableFrom(m.getClass())
+ ? m
+ : new DetachedVertexProperty<>(((Map) m).get(ID), entry.getKey(), ((Map) m).get(VALUE), (Map<String, Object>) ((Map) m).getOrDefault(PROPERTIES, new HashMap<>()), this))
+ .collect(Collectors.toList())));
}
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/DirectionalStarGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/DirectionalStarGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/DirectionalStarGraph.java
new file mode 100644
index 0000000..ed7b58c
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/DirectionalStarGraph.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.util.star;
+
+import org.apache.tinkerpop.gremlin.structure.Direction;
+
+public class DirectionalStarGraph {
+ private final Direction direction;
+ private final StarGraph starGraphToSerialize;
+
+ public DirectionalStarGraph(final StarGraph starGraphToSerialize, final Direction direction) {
+ this.direction = direction;
+ this.starGraphToSerialize = starGraphToSerialize;
+ }
+
+ public Direction getDirection() {
+ return direction;
+ }
+
+ public StarGraph getStarGraphToSerialize() {
+ return starGraphToSerialize;
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONDeserializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONDeserializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONDeserializer.java
new file mode 100644
index 0000000..84a3fd4
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONDeserializer.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.util.star;
+
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.T;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
+import org.apache.tinkerpop.gremlin.structure.util.Attachable;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+
+/**
+ * Provides helper functions for reading vertex and edges from their serialized GraphSON forms.
+ */
+public class StarGraphGraphSONDeserializer {
+
+ /**
+ * A helper function for reading vertex edges from a serialized {@link org.apache.tinkerpop.gremlin.structure.util.star.StarGraph} (i.e. a {@link java.util.Map}) generated by
+ * {@link org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV1d0}.
+ */
+ public static void readStarGraphEdges(final Function<Attachable<Edge>, Edge> edgeMaker,
+ final StarGraph starGraph,
+ final Map<String, Object> vertexData,
+ final String direction) throws IOException {
+ final Map<String, List<Map<String,Object>>> edgeDatas = (Map<String, List<Map<String,Object>>>) vertexData.get(direction);
+ for (Map.Entry<String, List<Map<String,Object>>> edgeData : edgeDatas.entrySet()) {
+ for (Map<String,Object> inner : edgeData.getValue()) {
+ final StarGraph.StarEdge starEdge;
+ if (direction.equals(GraphSONTokens.OUT_E))
+ starEdge = (StarGraph.StarEdge) starGraph.getStarVertex().addOutEdge(edgeData.getKey(), starGraph.addVertex(T.id, inner.get(GraphSONTokens.IN)), T.id, inner.get(GraphSONTokens.ID));
+ else
+ starEdge = (StarGraph.StarEdge) starGraph.getStarVertex().addInEdge(edgeData.getKey(), starGraph.addVertex(T.id, inner.get(GraphSONTokens.OUT)), T.id, inner.get(GraphSONTokens.ID));
+
+ if (inner.containsKey(GraphSONTokens.PROPERTIES)) {
+ final Map<String, Object> edgePropertyData = (Map<String, Object>) inner.get(GraphSONTokens.PROPERTIES);
+ for (Map.Entry<String, Object> epd : edgePropertyData.entrySet()) {
+ starEdge.property(epd.getKey(), epd.getValue());
+ }
+ }
+
+ if (edgeMaker != null) edgeMaker.apply(starEdge);
+ }
+ }
+ }
+
+ /**
+ * A helper function for reading a serialized {@link org.apache.tinkerpop.gremlin.structure.util.star.StarGraph} from a {@link java.util.Map} generated by
+ * {@link org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV1d0}.
+ */
+ public static StarGraph readStarGraphVertex(final Map<String, Object> vertexData) throws IOException {
+ final StarGraph starGraph = StarGraph.open();
+ starGraph.addVertex(T.id, vertexData.get(GraphSONTokens.ID), T.label, vertexData.get(GraphSONTokens.LABEL));
+ if (vertexData.containsKey(GraphSONTokens.PROPERTIES)) {
+ final Map<String, List<Map<String, Object>>> properties = (Map<String, List<Map<String, Object>>>) vertexData.get(GraphSONTokens.PROPERTIES);
+ for (Map.Entry<String, List<Map<String, Object>>> property : properties.entrySet()) {
+ for (Map<String, Object> p : property.getValue()) {
+ final StarGraph.StarVertexProperty vp = (StarGraph.StarVertexProperty) starGraph.getStarVertex().property(VertexProperty.Cardinality.list, property.getKey(), p.get(GraphSONTokens.VALUE), T.id, p.get(GraphSONTokens.ID));
+ if (p.containsKey(GraphSONTokens.PROPERTIES)) {
+ final Map<String, Object> edgePropertyData = (Map<String, Object>) p.get(GraphSONTokens.PROPERTIES);
+ for (Map.Entry<String, Object> epd : edgePropertyData.entrySet()) {
+ vp.property(epd.getKey(), epd.getValue());
+ }
+ }
+ }
+ }
+ }
+
+ return starGraph;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializer.java
deleted file mode 100644
index 3d1a16a..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializer.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.structure.util.star;
-
-import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Property;
-import org.apache.tinkerpop.gremlin.structure.T;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
-import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONUtil;
-import org.apache.tinkerpop.gremlin.structure.util.Attachable;
-import org.apache.tinkerpop.gremlin.structure.util.Comparators;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
-import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
-import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
-import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
-import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.function.Function;
-
-/**
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public class StarGraphGraphSONSerializer extends StdSerializer<StarGraphGraphSONSerializer.DirectionalStarGraph> {
- private final boolean normalize;
- public StarGraphGraphSONSerializer(final boolean normalize) {
- super(DirectionalStarGraph.class);
- this.normalize = normalize;
- }
-
- @Override
- public void serialize(final DirectionalStarGraph starGraph, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
- ser(starGraph, jsonGenerator, serializerProvider, null);
- }
-
- @Override
- public void serializeWithType(final DirectionalStarGraph starGraph, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider,
- final TypeSerializer typeSerializer) throws IOException, JsonProcessingException {
- ser(starGraph, jsonGenerator, serializerProvider, typeSerializer);
- }
-
- private void ser(final DirectionalStarGraph directionalStarGraph, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider,
- final TypeSerializer typeSerializer) throws IOException, JsonProcessingException {
- final StarGraph starGraph = directionalStarGraph.getStarGraphToSerialize();
- jsonGenerator.writeStartObject();
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- GraphSONUtil.writeWithType(GraphSONTokens.ID, starGraph.starVertex.id, jsonGenerator, serializerProvider, typeSerializer);
- jsonGenerator.writeStringField(GraphSONTokens.LABEL, starGraph.starVertex.label);
- if (directionalStarGraph.direction != null) writeEdges(directionalStarGraph, jsonGenerator, serializerProvider, typeSerializer, Direction.IN);
- if (directionalStarGraph.direction != null) writeEdges(directionalStarGraph, jsonGenerator, serializerProvider, typeSerializer, Direction.OUT);
- if (starGraph.starVertex.vertexProperties != null && !starGraph.starVertex.vertexProperties.isEmpty()) {
- jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- final Set<String> keys = normalize ? new TreeSet<>(starGraph.starVertex.vertexProperties.keySet()) : starGraph.starVertex.vertexProperties.keySet();
- for (final String k : keys) {
- final List<VertexProperty> vp = starGraph.starVertex.vertexProperties.get(k);
- jsonGenerator.writeArrayFieldStart(k);
- if (typeSerializer != null) {
- jsonGenerator.writeString(ArrayList.class.getName());
- jsonGenerator.writeStartArray();
- }
-
- final List<VertexProperty> vertexProperties = normalize ?sort(vp, Comparators.PROPERTY_COMPARATOR) : vp;
- for (final VertexProperty property : vertexProperties) {
- jsonGenerator.writeStartObject();
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- GraphSONUtil.writeWithType(GraphSONTokens.ID, property.id(), jsonGenerator, serializerProvider, typeSerializer);
- GraphSONUtil.writeWithType(GraphSONTokens.VALUE, property.value(), jsonGenerator, serializerProvider, typeSerializer);
-
- final Iterator<Property> metaProperties = normalize ?
- IteratorUtils.list(property.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : property.properties();
- if (metaProperties.hasNext()) {
- jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- while (metaProperties.hasNext()) {
- final Property<Object> meta = metaProperties.next();
- GraphSONUtil.writeWithType(meta.key(), meta.value(), jsonGenerator, serializerProvider, typeSerializer);
- }
- jsonGenerator.writeEndObject();
- }
- jsonGenerator.writeEndObject();
- }
- jsonGenerator.writeEndArray();
- if (typeSerializer != null) jsonGenerator.writeEndArray();
- }
- jsonGenerator.writeEndObject();
- }
- }
-
- private void writeEdges(final DirectionalStarGraph directionalStarGraph, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider,
- final TypeSerializer typeSerializer,
- final Direction direction) throws IOException, JsonProcessingException {
- // only write edges if there are some AND if the user requested them to be serialized AND if they match
- // the direction being serialized by the format
- final StarGraph starGraph = directionalStarGraph.getStarGraphToSerialize();
- final Direction edgeDirectionToSerialize = directionalStarGraph.getDirection();
- final Map<String, List<Edge>> starEdges = direction.equals(Direction.OUT) ? starGraph.starVertex.outEdges : starGraph.starVertex.inEdges;
- final boolean writeEdges = null != starEdges && edgeDirectionToSerialize != null
- && (edgeDirectionToSerialize == direction || edgeDirectionToSerialize == Direction.BOTH);
- if (writeEdges) {
- jsonGenerator.writeObjectFieldStart(direction == Direction.IN ? GraphSONTokens.IN_E : GraphSONTokens.OUT_E);
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- final Set<String> keys = normalize ? new TreeSet<>(starEdges.keySet()) : starEdges.keySet();
- for (final String k : keys) {
- final List<Edge> edges = starEdges.get(k);
- jsonGenerator.writeArrayFieldStart(k);
- if (typeSerializer != null) {
- jsonGenerator.writeString(ArrayList.class.getName());
- jsonGenerator.writeStartArray();
- }
-
- final List<Edge> edgesToWrite = normalize ? sort(edges, Comparators.EDGE_COMPARATOR) : edges;
- for (final Edge edge : edgesToWrite) {
- jsonGenerator.writeStartObject();
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- GraphSONUtil.writeWithType(GraphSONTokens.ID, edge.id(), jsonGenerator, serializerProvider, typeSerializer);
- GraphSONUtil.writeWithType(direction.equals(Direction.OUT) ? GraphSONTokens.IN : GraphSONTokens.OUT,
- direction.equals(Direction.OUT) ? edge.inVertex().id() : edge.outVertex().id(),
- jsonGenerator, serializerProvider, typeSerializer);
-
- final Iterator<Property<Object>> edgeProperties = normalize ?
- IteratorUtils.list(edge.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : edge.properties();
- if (edgeProperties.hasNext()) {
- jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- while (edgeProperties.hasNext()) {
- final Property<Object> meta = edgeProperties.next();
- GraphSONUtil.writeWithType(meta.key(), meta.value(), jsonGenerator, serializerProvider, typeSerializer);
- }
- jsonGenerator.writeEndObject();
- }
- jsonGenerator.writeEndObject();
- }
- jsonGenerator.writeEndArray();
- if (typeSerializer != null) jsonGenerator.writeEndArray();
- }
- jsonGenerator.writeEndObject();
- }
- }
-
- /**
- * A helper function for reading vertex edges from a serialized {@link StarGraph} (i.e. a {@link Map}) generated by
- * {@link StarGraphGraphSONSerializer}.
- */
- public static void readStarGraphEdges(final Function<Attachable<Edge>, Edge> edgeMaker,
- final StarGraph starGraph,
- final Map<String, Object> vertexData,
- final String direction) throws IOException {
- final Map<String, List<Map<String,Object>>> edgeDatas = (Map<String, List<Map<String,Object>>>) vertexData.get(direction);
- for (Map.Entry<String, List<Map<String,Object>>> edgeData : edgeDatas.entrySet()) {
- for (Map<String,Object> inner : edgeData.getValue()) {
- final StarGraph.StarEdge starEdge;
- if (direction.equals(GraphSONTokens.OUT_E))
- starEdge = (StarGraph.StarEdge) starGraph.getStarVertex().addOutEdge(edgeData.getKey(), starGraph.addVertex(T.id, inner.get(GraphSONTokens.IN)), T.id, inner.get(GraphSONTokens.ID));
- else
- starEdge = (StarGraph.StarEdge) starGraph.getStarVertex().addInEdge(edgeData.getKey(), starGraph.addVertex(T.id, inner.get(GraphSONTokens.OUT)), T.id, inner.get(GraphSONTokens.ID));
-
- if (inner.containsKey(GraphSONTokens.PROPERTIES)) {
- final Map<String, Object> edgePropertyData = (Map<String, Object>) inner.get(GraphSONTokens.PROPERTIES);
- for (Map.Entry<String, Object> epd : edgePropertyData.entrySet()) {
- starEdge.property(epd.getKey(), epd.getValue());
- }
- }
-
- if (edgeMaker != null) edgeMaker.apply(starEdge);
- }
- }
- }
-
- /**
- * A helper function for reading a serialized {@link StarGraph} from a {@link Map} generated by
- * {@link StarGraphGraphSONSerializer}.
- */
- public static StarGraph readStarGraphVertex(final Map<String, Object> vertexData) throws IOException {
- final StarGraph starGraph = StarGraph.open();
- starGraph.addVertex(T.id, vertexData.get(GraphSONTokens.ID), T.label, vertexData.get(GraphSONTokens.LABEL));
- if (vertexData.containsKey(GraphSONTokens.PROPERTIES)) {
- final Map<String, List<Map<String, Object>>> properties = (Map<String, List<Map<String, Object>>>) vertexData.get(GraphSONTokens.PROPERTIES);
- for (Map.Entry<String, List<Map<String, Object>>> property : properties.entrySet()) {
- for (Map<String, Object> p : property.getValue()) {
- final StarGraph.StarVertexProperty vp = (StarGraph.StarVertexProperty) starGraph.getStarVertex().property(VertexProperty.Cardinality.list, property.getKey(), p.get(GraphSONTokens.VALUE), T.id, p.get(GraphSONTokens.ID));
- if (p.containsKey(GraphSONTokens.PROPERTIES)) {
- final Map<String, Object> edgePropertyData = (Map<String, Object>) p.get(GraphSONTokens.PROPERTIES);
- for (Map.Entry<String, Object> epd : edgePropertyData.entrySet()) {
- vp.property(epd.getKey(), epd.getValue());
- }
- }
- }
- }
- }
-
- return starGraph;
- }
-
- private static <S> List<S> sort(final List<S> listToSort, final Comparator comparator) {
- Collections.sort(listToSort, comparator);
- return listToSort;
- }
-
- public static class DirectionalStarGraph {
- private final Direction direction;
- private final StarGraph starGraphToSerialize;
-
- public DirectionalStarGraph(final StarGraph starGraphToSerialize, final Direction direction) {
- this.direction = direction;
- this.starGraphToSerialize = starGraphToSerialize;
- }
-
- public Direction getDirection() {
- return direction;
- }
-
- public StarGraph getStarGraphToSerialize() {
- return starGraphToSerialize;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV1d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV1d0.java
new file mode 100644
index 0000000..01cb6d6
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV1d0.java
@@ -0,0 +1,178 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.util.star;
+
+import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONUtil;
+import org.apache.tinkerpop.gremlin.structure.util.Comparators;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class StarGraphGraphSONSerializerV1d0 extends StdSerializer<DirectionalStarGraph> {
+ private final boolean normalize;
+ public StarGraphGraphSONSerializerV1d0(final boolean normalize) {
+ super(DirectionalStarGraph.class);
+ this.normalize = normalize;
+ }
+
+ @Override
+ public void serialize(final DirectionalStarGraph starGraph, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
+ ser(starGraph, jsonGenerator, serializerProvider, null);
+ }
+
+ @Override
+ public void serializeWithType(final DirectionalStarGraph starGraph, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider,
+ final TypeSerializer typeSerializer) throws IOException, JsonProcessingException {
+ ser(starGraph, jsonGenerator, serializerProvider, typeSerializer);
+ }
+
+ private void ser(final DirectionalStarGraph directionalStarGraph, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider,
+ final TypeSerializer typeSerializer) throws IOException, JsonProcessingException {
+ final StarGraph starGraph = directionalStarGraph.getStarGraphToSerialize();
+ jsonGenerator.writeStartObject();
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ GraphSONUtil.writeWithType(GraphSONTokens.ID, starGraph.starVertex.id, jsonGenerator, serializerProvider, typeSerializer);
+ jsonGenerator.writeStringField(GraphSONTokens.LABEL, starGraph.starVertex.label);
+ if (directionalStarGraph.getDirection() != null) writeEdges(directionalStarGraph, jsonGenerator, serializerProvider, typeSerializer, Direction.IN);
+ if (directionalStarGraph.getDirection() != null) writeEdges(directionalStarGraph, jsonGenerator, serializerProvider, typeSerializer, Direction.OUT);
+ if (starGraph.starVertex.vertexProperties != null && !starGraph.starVertex.vertexProperties.isEmpty()) {
+ jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ final Set<String> keys = normalize ? new TreeSet<>(starGraph.starVertex.vertexProperties.keySet()) : starGraph.starVertex.vertexProperties.keySet();
+ for (final String k : keys) {
+ final List<VertexProperty> vp = starGraph.starVertex.vertexProperties.get(k);
+ jsonGenerator.writeArrayFieldStart(k);
+ if (typeSerializer != null) {
+ jsonGenerator.writeString(ArrayList.class.getName());
+ jsonGenerator.writeStartArray();
+ }
+
+ final List<VertexProperty> vertexProperties = normalize ? sort(vp, Comparators.PROPERTY_COMPARATOR) : vp;
+ for (final VertexProperty property : vertexProperties) {
+ jsonGenerator.writeStartObject();
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ GraphSONUtil.writeWithType(GraphSONTokens.ID, property.id(), jsonGenerator, serializerProvider, typeSerializer);
+ GraphSONUtil.writeWithType(GraphSONTokens.VALUE, property.value(), jsonGenerator, serializerProvider, typeSerializer);
+
+ final Iterator<Property> metaProperties = normalize ?
+ IteratorUtils.list(property.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : property.properties();
+ if (metaProperties.hasNext()) {
+ jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ while (metaProperties.hasNext()) {
+ final Property<Object> meta = metaProperties.next();
+ GraphSONUtil.writeWithType(meta.key(), meta.value(), jsonGenerator, serializerProvider, typeSerializer);
+ }
+ jsonGenerator.writeEndObject();
+ }
+ jsonGenerator.writeEndObject();
+ }
+ jsonGenerator.writeEndArray();
+ if (typeSerializer != null) jsonGenerator.writeEndArray();
+ }
+ jsonGenerator.writeEndObject();
+ }
+ // For some reason, this wasn't closed.
+ jsonGenerator.writeEndObject();
+ }
+
+ private void writeEdges(final DirectionalStarGraph directionalStarGraph, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider,
+ final TypeSerializer typeSerializer,
+ final Direction direction) throws IOException, JsonProcessingException {
+ // only write edges if there are some AND if the user requested them to be serialized AND if they match
+ // the direction being serialized by the format
+ final StarGraph starGraph = directionalStarGraph.getStarGraphToSerialize();
+ final Direction edgeDirectionToSerialize = directionalStarGraph.getDirection();
+ final Map<String, List<Edge>> starEdges = direction.equals(Direction.OUT) ? starGraph.starVertex.outEdges : starGraph.starVertex.inEdges;
+ final boolean writeEdges = null != starEdges && edgeDirectionToSerialize != null
+ && (edgeDirectionToSerialize == direction || edgeDirectionToSerialize == Direction.BOTH);
+ if (writeEdges) {
+ jsonGenerator.writeObjectFieldStart(direction == Direction.IN ? GraphSONTokens.IN_E : GraphSONTokens.OUT_E);
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ final Set<String> keys = normalize ? new TreeSet<>(starEdges.keySet()) : starEdges.keySet();
+ for (final String k : keys) {
+ final List<Edge> edges = starEdges.get(k);
+ jsonGenerator.writeArrayFieldStart(k);
+ if (typeSerializer != null) {
+ jsonGenerator.writeString(ArrayList.class.getName());
+ jsonGenerator.writeStartArray();
+ }
+
+ final List<Edge> edgesToWrite = normalize ? sort(edges, Comparators.EDGE_COMPARATOR) : edges;
+ for (final Edge edge : edgesToWrite) {
+ jsonGenerator.writeStartObject();
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ GraphSONUtil.writeWithType(GraphSONTokens.ID, edge.id(), jsonGenerator, serializerProvider, typeSerializer);
+ GraphSONUtil.writeWithType(direction.equals(Direction.OUT) ? GraphSONTokens.IN : GraphSONTokens.OUT,
+ direction.equals(Direction.OUT) ? edge.inVertex().id() : edge.outVertex().id(),
+ jsonGenerator, serializerProvider, typeSerializer);
+
+ final Iterator<Property<Object>> edgeProperties = normalize ?
+ IteratorUtils.list(edge.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : edge.properties();
+ if (edgeProperties.hasNext()) {
+ jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ while (edgeProperties.hasNext()) {
+ final Property<Object> meta = edgeProperties.next();
+ GraphSONUtil.writeWithType(meta.key(), meta.value(), jsonGenerator, serializerProvider, typeSerializer);
+ }
+ jsonGenerator.writeEndObject();
+ }
+ jsonGenerator.writeEndObject();
+ }
+ jsonGenerator.writeEndArray();
+ if (typeSerializer != null) jsonGenerator.writeEndArray();
+ }
+ jsonGenerator.writeEndObject();
+ }
+ }
+
+ static <S> List<S> sort(final List<S> listToSort, final Comparator comparator) {
+ Collections.sort(listToSort, comparator);
+ return listToSort;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV2d0.java
new file mode 100644
index 0000000..04d65c5
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV2d0.java
@@ -0,0 +1,165 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.util.star;
+
+import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONUtil;
+import org.apache.tinkerpop.gremlin.structure.util.Comparators;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class StarGraphGraphSONSerializerV2d0 extends StdSerializer<DirectionalStarGraph> {
+ private final boolean normalize;
+ public StarGraphGraphSONSerializerV2d0(final boolean normalize) {
+ super(DirectionalStarGraph.class);
+ this.normalize = normalize;
+ }
+
+ @Override
+ public void serialize(final DirectionalStarGraph starGraph, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
+ ser(starGraph, jsonGenerator, serializerProvider, null);
+ }
+
+ @Override
+ public void serializeWithType(final DirectionalStarGraph starGraph, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider,
+ final TypeSerializer typeSerializer) throws IOException, JsonProcessingException {
+ ser(starGraph, jsonGenerator, serializerProvider, typeSerializer);
+ }
+
+ private void ser(final DirectionalStarGraph directionalStarGraph, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider,
+ final TypeSerializer typeSerializer) throws IOException, JsonProcessingException {
+ final StarGraph starGraph = directionalStarGraph.getStarGraphToSerialize();
+ GraphSONUtil.writeStartObject(starGraph, jsonGenerator, typeSerializer);
+ GraphSONUtil.writeWithType(GraphSONTokens.ID, starGraph.starVertex.id, jsonGenerator, serializerProvider, typeSerializer);
+ jsonGenerator.writeStringField(GraphSONTokens.LABEL, starGraph.starVertex.label);
+ if (directionalStarGraph.getDirection() != null) writeEdges(directionalStarGraph, jsonGenerator, serializerProvider, typeSerializer, Direction.IN);
+ if (directionalStarGraph.getDirection() != null) writeEdges(directionalStarGraph, jsonGenerator, serializerProvider, typeSerializer, Direction.OUT);
+ if (starGraph.starVertex.vertexProperties != null && !starGraph.starVertex.vertexProperties.isEmpty()) {
+ jsonGenerator.writeFieldName(GraphSONTokens.PROPERTIES);
+ GraphSONUtil.writeStartObject(starGraph, jsonGenerator, typeSerializer);
+ final Set<String> keys = normalize ? new TreeSet<>(starGraph.starVertex.vertexProperties.keySet()) : starGraph.starVertex.vertexProperties.keySet();
+ for (final String k : keys) {
+ final List<VertexProperty> vp = starGraph.starVertex.vertexProperties.get(k);
+ jsonGenerator.writeFieldName(k);
+ GraphSONUtil.writeStartArray(k, jsonGenerator, typeSerializer);
+
+ final List<VertexProperty> vertexProperties = normalize ?sort(vp, Comparators.PROPERTY_COMPARATOR) : vp;
+ for (final VertexProperty property : vertexProperties) {
+ GraphSONUtil.writeStartObject(property, jsonGenerator, typeSerializer);
+ GraphSONUtil.writeWithType(GraphSONTokens.ID, property.id(), jsonGenerator, serializerProvider, typeSerializer);
+ GraphSONUtil.writeWithType(GraphSONTokens.VALUE, property.value(), jsonGenerator, serializerProvider, typeSerializer);
+
+ final Iterator<Property> metaProperties = normalize ?
+ IteratorUtils.list(property.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : property.properties();
+ if (metaProperties.hasNext()) {
+ jsonGenerator.writeFieldName(GraphSONTokens.PROPERTIES);
+ GraphSONUtil.writeStartObject(metaProperties, jsonGenerator, typeSerializer);
+
+ while (metaProperties.hasNext()) {
+ final Property<Object> meta = metaProperties.next();
+ GraphSONUtil.writeWithType(meta.key(), meta.value(), jsonGenerator, serializerProvider, typeSerializer);
+ }
+ GraphSONUtil.writeEndObject(metaProperties, jsonGenerator, typeSerializer);
+ }
+ GraphSONUtil.writeEndObject(property, jsonGenerator, typeSerializer);
+ }
+ GraphSONUtil.writeEndArray(k, jsonGenerator, typeSerializer);
+ }
+ GraphSONUtil.writeEndObject(starGraph, jsonGenerator, typeSerializer);
+ }
+ GraphSONUtil.writeEndObject(starGraph, jsonGenerator, typeSerializer);
+ }
+
+ private void writeEdges(final DirectionalStarGraph directionalStarGraph, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider,
+ final TypeSerializer typeSerializer,
+ final Direction direction) throws IOException, JsonProcessingException {
+ // only write edges if there are some AND if the user requested them to be serialized AND if they match
+ // the direction being serialized by the format
+ final StarGraph starGraph = directionalStarGraph.getStarGraphToSerialize();
+ final Direction edgeDirectionToSerialize = directionalStarGraph.getDirection();
+ final Map<String, List<Edge>> starEdges = direction.equals(Direction.OUT) ? starGraph.starVertex.outEdges : starGraph.starVertex.inEdges;
+ final boolean writeEdges = null != starEdges && edgeDirectionToSerialize != null
+ && (edgeDirectionToSerialize == direction || edgeDirectionToSerialize == Direction.BOTH);
+ if (writeEdges) {
+ jsonGenerator.writeFieldName(direction == Direction.IN ? GraphSONTokens.IN_E : GraphSONTokens.OUT_E);
+ GraphSONUtil.writeStartObject(directionalStarGraph, jsonGenerator, typeSerializer);
+ final Set<String> keys = normalize ? new TreeSet<>(starEdges.keySet()) : starEdges.keySet();
+ for (final String k : keys) {
+ final List<Edge> edges = starEdges.get(k);
+ jsonGenerator.writeFieldName(k);
+ GraphSONUtil.writeStartArray(k, jsonGenerator, typeSerializer);
+
+ final List<Edge> edgesToWrite = normalize ? sort(edges, Comparators.EDGE_COMPARATOR) : edges;
+ for (final Edge edge : edgesToWrite) {
+ GraphSONUtil.writeStartObject(edge, jsonGenerator, typeSerializer);
+ GraphSONUtil.writeWithType(GraphSONTokens.ID, edge.id(), jsonGenerator, serializerProvider, typeSerializer);
+ GraphSONUtil.writeWithType(direction.equals(Direction.OUT) ? GraphSONTokens.IN : GraphSONTokens.OUT,
+ direction.equals(Direction.OUT) ? edge.inVertex().id() : edge.outVertex().id(),
+ jsonGenerator, serializerProvider, typeSerializer);
+
+ final Iterator<Property<Object>> edgeProperties = normalize ?
+ IteratorUtils.list(edge.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : edge.properties();
+ if (edgeProperties.hasNext()) {
+ jsonGenerator.writeFieldName(GraphSONTokens.PROPERTIES);
+ GraphSONUtil.writeStartObject(edge, jsonGenerator, typeSerializer);
+ while (edgeProperties.hasNext()) {
+ final Property<Object> meta = edgeProperties.next();
+ GraphSONUtil.writeWithType(meta.key(), meta.value(), jsonGenerator, serializerProvider, typeSerializer);
+ }
+ GraphSONUtil.writeEndObject(edge, jsonGenerator, typeSerializer);
+ }
+ GraphSONUtil.writeEndObject(edge, jsonGenerator, typeSerializer);
+ }
+ GraphSONUtil.writeEndArray(k, jsonGenerator, typeSerializer);
+ }
+ GraphSONUtil.writeEndObject(directionalStarGraph, jsonGenerator, typeSerializer);
+ }
+ }
+
+ private static <S> List<S> sort(final List<S> listToSort, final Comparator comparator) {
+ Collections.sort(listToSort, comparator);
+ return listToSort;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
index c7549f9..4980adf 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
@@ -19,9 +19,9 @@
package org.apache.tinkerpop.gremlin.structure.io.graphson;
import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
-import org.apache.tinkerpop.shaded.kryo.io.Input;
-import org.apache.tinkerpop.shaded.kryo.io.Output;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -39,11 +39,26 @@ import java.time.Year;
import java.time.YearMonth;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
import static org.junit.Assert.assertEquals;
+@RunWith(Parameterized.class)
public class GraphSONMapperEmbeddedTypeTest {
- private final ObjectMapper mapper = GraphSONMapper.build().embedTypes(true).create().createMapper();
+
+ @Parameterized.Parameters(name = "{0}")
+ public static Iterable<Object[]> data() {
+ return Arrays.asList(new Object[][]{
+ {GraphSONMapper.build().version(GraphSONVersion.V1_0).embedTypes(true).create().createMapper()},
+ {GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.PARTIAL_TYPES).create()
+ .createMapper()},
+ });
+ }
+
+ @Parameterized.Parameter
+ public ObjectMapper mapper;
@Test
public void shouldHandleDuration()throws Exception {
@@ -122,6 +137,40 @@ public class GraphSONMapperEmbeddedTypeTest {
assertEquals(o, serializeDeserialize(o, ZoneOffset.class));
}
+ @Test
+ public void shouldHandleMapWithTypesUsingEmbedTypeSetting() throws Exception {
+ final ObjectMapper mapper = GraphSONMapper.build()
+ .version(GraphSONVersion.V1_0)
+ .typeInfo(TypeInfo.PARTIAL_TYPES)
+ .create()
+ .createMapper();
+
+ final Map<String,Object> m = new HashMap<>();
+ m.put("test", 100L);
+
+ final String json = mapper.writeValueAsString(m);
+ final Map read = mapper.readValue(json, HashMap.class);
+
+ assertEquals(100L, read.get("test"));
+ }
+
+ @Test
+ public void shouldNotHandleMapWithTypesUsingEmbedTypeSetting() throws Exception {
+ final ObjectMapper mapper = GraphSONMapper.build()
+ .version(GraphSONVersion.V1_0)
+ .typeInfo(TypeInfo.NO_TYPES)
+ .create()
+ .createMapper();
+
+ final Map<String,Object> m = new HashMap<>();
+ m.put("test", 100L);
+
+ final String json = mapper.writeValueAsString(m);
+ final Map read = mapper.readValue(json, HashMap.class);
+
+ assertEquals(100, read.get("test"));
+ }
+
public <T> T serializeDeserialize(final Object o, final Class<T> clazz) throws Exception {
try (final ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
mapper.writeValue(stream, o);
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
index 41e24c6..4b2e98f 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
@@ -21,6 +21,8 @@ package org.apache.tinkerpop.gremlin.structure.io.graphson;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
import java.time.Duration;
import java.time.Instant;
@@ -35,12 +37,25 @@ import java.time.Year;
import java.time.YearMonth;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
+import java.util.Arrays;
import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.__;
import static org.junit.Assert.assertEquals;
+@RunWith(Parameterized.class)
public class GraphSONMapperTest {
- private final ObjectMapper mapper = GraphSONMapper.build().embedTypes(false).create().createMapper();
+
+ @Parameterized.Parameters(name = "{0}")
+ public static Iterable<Object[]> data() {
+ return Arrays.asList(new Object[][]{
+ {GraphSONMapper.build().version(GraphSONVersion.V1_0).embedTypes(false).create().createMapper()},
+ {GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.NO_TYPES).create().createMapper()},
+ });
+ }
+
+ @Parameterized.Parameter
+ public ObjectMapper mapper;
+
@Test
public void shouldHandleTraversalExplanation() throws Exception {
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
new file mode 100644
index 0000000..c2ad05e
--- /dev/null
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
@@ -0,0 +1,344 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.time.Duration;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.MonthDay;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.Period;
+import java.time.Year;
+import java.time.YearMonth;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.fail;
+
+/**
+ * Tests automatic typed serialization/deserialization for GraphSON 2.0.
+ */
+public class GraphSONMapperV2d0PartialEmbeddedTypeTest {
+
+ private final ObjectMapper mapper = GraphSONMapper.build()
+ .version(GraphSONVersion.V2_0)
+ .typeInfo(TypeInfo.PARTIAL_TYPES)
+ .create()
+ .createMapper();
+
+ @Test
+ public void shouldHandleDurationAuto() throws Exception {
+ final Duration o = Duration.ZERO;
+ assertEquals(o, serializeDeserializeAuto(o));
+ }
+
+ @Test
+ public void shouldHandleInstantAuto() throws Exception {
+ final Instant o = Instant.ofEpochMilli(System.currentTimeMillis());
+ assertEquals(o, serializeDeserializeAuto(o));
+ }
+
+ @Test
+ public void shouldHandleLocalDateAuto() throws Exception {
+ final LocalDate o = LocalDate.now();
+ assertEquals(o, serializeDeserializeAuto(o));
+ }
+
+ @Test
+ public void shouldHandleLocalDateTimeAuto() throws Exception {
+ final LocalDateTime o = LocalDateTime.now();
+ assertEquals(o, serializeDeserializeAuto(o));
+ }
+
+ @Test
+ public void shouldHandleLocalTimeAuto() throws Exception {
+ final LocalTime o = LocalTime.now();
+ assertEquals(o, serializeDeserializeAuto(o));
+ }
+
+ @Test
+ public void shouldHandleMonthDayAuto() throws Exception {
+ final MonthDay o = MonthDay.now();
+ assertEquals(o, serializeDeserializeAuto(o));
+ }
+
+ @Test
+ public void shouldHandleOffsetDateTimeAuto() throws Exception {
+ final OffsetDateTime o = OffsetDateTime.now();
+ assertEquals(o, serializeDeserializeAuto(o));
+ }
+
+ @Test
+ public void shouldHandleOffsetTimeAuto() throws Exception {
+ final OffsetTime o = OffsetTime.now();
+ assertEquals(o, serializeDeserializeAuto(o));
+ }
+
+ @Test
+ public void shouldHandlePeriodAuto() throws Exception {
+ final Period o = Period.ofDays(3);
+ assertEquals(o, serializeDeserializeAuto(o));
+ }
+
+ @Test
+ public void shouldHandleYearAuto() throws Exception {
+ final Year o = Year.now();
+ assertEquals(o, serializeDeserializeAuto(o));
+ }
+
+ @Test
+ public void shouldHandleYearMonthAuto() throws Exception {
+ final YearMonth o = YearMonth.now();
+ assertEquals(o, serializeDeserializeAuto(o));
+ }
+
+ @Test
+ public void shouldHandleZonedDateTimeAuto() throws Exception {
+ final ZonedDateTime o = ZonedDateTime.now();
+ assertEquals(o, serializeDeserializeAuto(o));
+ }
+
+ @Test
+ public void shouldHandleZonedOffsetAuto() throws Exception {
+ final ZoneOffset o = ZonedDateTime.now().getOffset();
+ assertEquals(o, serializeDeserializeAuto(o));
+ }
+
+ @Test
+ // Trying to fail the TypeDeserializer type detection
+ public void shouldSerializeDeserializeNestedCollectionsAndMapAndTypedValuesCorrectly() throws Exception {
+ UUID uuid = UUID.randomUUID();
+ List myList = new ArrayList<>();
+
+ List myList2 = new ArrayList<>();
+ myList2.add(UUID.randomUUID());
+ myList2.add(33L);
+ myList2.add(84);
+ Map map2 = new HashMap<>();
+ map2.put("eheh", UUID.randomUUID());
+ map2.put("normal", "normal");
+ myList2.add(map2);
+
+ Map<String, Object> map1 = new HashMap<>();
+ map1.put("hello", "world");
+ map1.put("test", uuid);
+ map1.put("hehe", myList2);
+ myList.add(map1);
+
+ myList.add("kjkj");
+ myList.add(UUID.randomUUID());
+ assertEquals(myList, serializeDeserializeAuto(myList));
+
+ // no "@value" property
+ String s = "{\""+GraphSONTokens.VALUETYPE+"\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":uuid\", \"test\":2}";
+ Map map = new LinkedHashMap<>();
+ map.put(GraphSONTokens.VALUETYPE, "gremlin:uuid");
+ map.put("test", 2);
+ Object res = mapper.readValue(s, Object.class);
+ assertEquals(map, res);
+
+ // "@value" and "@type" property reversed
+ s = "{\""+GraphSONTokens.VALUEPROP+"\":2, \""+ GraphSONTokens.VALUETYPE+"\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":int64\"}";
+ res = mapper.readValue(s, Object.class);
+ assertEquals(res, 2L);
+ assertEquals(res.getClass(), Long.class);
+
+ // no "@type" property.
+ s = "{\""+GraphSONTokens.VALUEPROP+"\":2, \"id\":2}";
+ map = new LinkedHashMap<>();
+ map.put(GraphSONTokens.VALUEPROP, 2);
+ map.put("id", 2);
+ res = mapper.readValue(s, Object.class);
+ assertEquals(res, map);
+ }
+
+ @Test
+ public void shouldFailIfMoreThanTwoPropertiesInATypePattern() {
+ String s = "{\"" + GraphSONTokens.VALUEPROP + "\":2, \"" + GraphSONTokens.VALUETYPE + "\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":int64\", \"hello\": \"world\"}";
+ try {
+ mapper.readValue(s, Object.class);
+ fail("Should have failed deserializing because there's more than properties in the type.");
+ } catch (IOException e) {
+ assertThat(e.getMessage(), containsString("Detected the type pattern in the JSON payload but the map containing the types and values contains other fields. This is not allowed by the deserializer."));
+ }
+ s = "{\"" + GraphSONTokens.VALUETYPE + "\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":int64\",\"" + GraphSONTokens.VALUEPROP + "\":2, \"hello\": \"world\"}";
+ try {
+ mapper.readValue(s, Object.class);
+ fail("Should have failed deserializing because there's more than properties in the type.");
+ } catch (IOException e) {
+ assertThat(e.getMessage(), containsString("Detected the type pattern in the JSON payload but the map containing the types and values contains other fields. This is not allowed by the deserializer."));
+ }
+ }
+
+ @Test
+ public void shouldFailIfTypeSpecifiedIsNotSameTypeInPayload() {
+ final ZoneOffset o = ZonedDateTime.now().getOffset();
+ final ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ try {
+ mapper.writeValue(stream, o);
+ final InputStream inputStream = new ByteArrayInputStream(stream.toByteArray());
+ // What has been serialized is a ZoneOffset with the type, but the user explicitly requires another type.
+ mapper.readValue(inputStream, Instant.class);
+ fail("Should have failed decoding the value");
+ } catch (Exception e) {
+ assertThat(e.getMessage(), containsString("Could not deserialize the JSON value as required. Nested exception: java.lang.InstantiationException: Cannot deserialize the value with the detected type contained in the JSON ('"+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":zoneoffset') to the type specified in parameter to the object mapper (class java.time.Instant). Those types are incompatible."));
+ }
+ }
+
+ @Test
+ public void shouldHandleRawPOJOs() throws Exception {
+ final FunObject funObject = new FunObject();
+ funObject.setVal("test");
+ assertEquals(funObject.toString(), serializeDeserialize(funObject, FunObject.class).toString());
+ assertEquals(funObject.getClass(), serializeDeserialize(funObject, FunObject.class).getClass());
+ }
+
+ @Test
+ public void shouldHandleMapWithTypesUsingEmbedTypeSetting() throws Exception {
+ final ObjectMapper mapper = GraphSONMapper.build()
+ .version(GraphSONVersion.V2_0)
+ .embedTypes(true)
+ .create()
+ .createMapper();
+
+ final Map<String,Object> m = new HashMap<>();
+ m.put("test", 100L);
+
+ final String json = mapper.writeValueAsString(m);
+ final Map read = mapper.readValue(json, HashMap.class);
+
+ assertEquals(100L, read.get("test"));
+ }
+
+ @Test
+ public void shouldNotHandleMapWithTypesUsingEmbedTypeSetting() throws Exception {
+ final ObjectMapper mapper = GraphSONMapper.build()
+ .version(GraphSONVersion.V2_0)
+ .embedTypes(false)
+ .create()
+ .createMapper();
+
+ final Map<String,Object> m = new HashMap<>();
+ m.put("test", 100L);
+
+ final String json = mapper.writeValueAsString(m);
+ final Map read = mapper.readValue(json, HashMap.class);
+
+ assertEquals(100, read.get("test"));
+ }
+
+ @Test
+ public void shouldLooseTypesInfoWithGraphSONNoType() throws Exception {
+ ObjectMapper mapper = GraphSONMapper.build()
+ .version(GraphSONVersion.V2_0)
+ .typeInfo(TypeInfo.NO_TYPES)
+ .create()
+ .createMapper();
+
+ UUID uuid = UUID.randomUUID();
+ List myList = new ArrayList<>();
+
+ List myList2 = new ArrayList<>();
+ myList2.add(UUID.randomUUID());
+ myList2.add(33L);
+ myList2.add(84);
+ Map map2 = new HashMap<>();
+ map2.put("eheh", UUID.randomUUID());
+ map2.put("normal", "normal");
+ myList2.add(map2);
+
+ Map<String, Object> map1 = new HashMap<>();
+ map1.put("hello", "world");
+ map1.put("test", uuid);
+ map1.put("hehe", myList2);
+ myList.add(map1);
+
+ myList.add("kjkj");
+ myList.add(UUID.randomUUID());
+
+ String json = mapper.writeValueAsString(myList);
+ Object read = mapper.readValue(json, Object.class);
+
+ // Not equals because of type loss
+ assertNotEquals(myList, read);
+ }
+
+
+ // Class needs to be defined as statics as it's a nested class.
+ public static class FunObject {
+ private String val;
+
+ public FunObject() {
+ }
+
+ public String getVal() {
+ return this.val;
+ }
+
+ public void setVal(String s) {
+ this.val = s;
+ }
+
+ public String toString() {
+ return this.val;
+ }
+ }
+
+ public <T> T serializeDeserialize(final Object o, final Class<T> clazz) throws Exception {
+ try (final ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
+ mapper.writeValue(stream, o);
+
+ try (final InputStream inputStream = new ByteArrayInputStream(stream.toByteArray())) {
+ return mapper.readValue(inputStream, clazz);
+ }
+ }
+ }
+
+ public <T> T serializeDeserializeAuto(final Object o) throws Exception {
+ try (final ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
+ mapper.writeValue(stream, o);
+
+ try (final InputStream inputStream = new ByteArrayInputStream(stream.toByteArray())) {
+ // Object.class is the wildcard that triggers the auto discovery.
+ return (T)mapper.readValue(inputStream, Object.class);
+ }
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
new file mode 100644
index 0000000..d0303eb
--- /dev/null
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
@@ -0,0 +1,248 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.driver.ser;
+
+import groovy.json.JsonBuilder;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.util.ReferenceCountUtil;
+import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONIo;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONUtil;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.type.TypeReference;
+import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.module.SimpleModule;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public abstract class AbstractGraphSONMessageSerializerV2d0 extends AbstractMessageSerializer {
+ private static final Logger logger = LoggerFactory.getLogger(AbstractGraphSONMessageSerializerV2d0.class);
+
+ protected ObjectMapper mapper;
+
+ protected static final String TOKEN_USE_MAPPER_FROM_GRAPH = "useMapperFromGraph";
+
+ protected final TypeReference<Map<String, Object>> mapTypeReference = new TypeReference<Map<String, Object>>() {
+ };
+
+ public AbstractGraphSONMessageSerializerV2d0() {
+ final GraphSONMapper.Builder builder = configureBuilder(GraphSONMapper.build());
+ mapper = builder.create().createMapper();
+ }
+
+ public AbstractGraphSONMessageSerializerV2d0(final GraphSONMapper mapper) {
+ this.mapper = mapper.createMapper();
+ }
+
+ abstract byte[] obtainHeader();
+
+ abstract GraphSONMapper.Builder configureBuilder(final GraphSONMapper.Builder builder);
+
+ @Override
+ public void configure(final Map<String, Object> config, final Map<String, Graph> graphs) {
+ final GraphSONMapper.Builder initialBuilder;
+ final Object graphToUseForMapper = config.get(TOKEN_USE_MAPPER_FROM_GRAPH);
+ if (graphToUseForMapper != null) {
+ if (null == graphs) throw new IllegalStateException(String.format(
+ "No graphs have been provided to the serializer and therefore %s is not a valid configuration", TOKEN_USE_MAPPER_FROM_GRAPH));
+
+ final Graph g = graphs.get(graphToUseForMapper.toString());
+ if (null == g) throw new IllegalStateException(String.format(
+ "There is no graph named [%s] configured to be used in the %s setting",
+ graphToUseForMapper, TOKEN_USE_MAPPER_FROM_GRAPH));
+
+ // a graph was found so use the mapper it constructs. this allows graphson to be auto-configured with any
+ // custom classes that the implementation allows for
+ initialBuilder = g.io(GraphSONIo.build()).mapper();
+ } else {
+ // no graph was supplied so just use the default - this will likely be the case when using a graph
+ // with no custom classes or a situation where the user needs complete control like when using two
+ // distinct implementations each with their own custom classes.
+ initialBuilder = GraphSONMapper.build();
+ }
+
+ addIoRegistries(config, initialBuilder);
+
+ mapper = configureBuilder(initialBuilder).create().createMapper();
+ }
+
+ @Override
+ public ByteBuf serializeResponseAsBinary(final ResponseMessage responseMessage, final ByteBufAllocator allocator) throws SerializationException {
+ ByteBuf encodedMessage = null;
+ try {
+ final byte[] payload = mapper.writeValueAsBytes(responseMessage);
+ encodedMessage = allocator.buffer(payload.length);
+ encodedMessage.writeBytes(payload);
+
+ return encodedMessage;
+ } catch (Exception ex) {
+ if (encodedMessage != null) ReferenceCountUtil.release(encodedMessage);
+
+ logger.warn("Response [{}] could not be serialized by {}.", responseMessage.toString(), AbstractGraphSONMessageSerializerV2d0.class.getName());
+ throw new SerializationException(ex);
+ }
+ }
+
+ @Override
+ public ByteBuf serializeRequestAsBinary(final RequestMessage requestMessage, final ByteBufAllocator allocator) throws SerializationException {
+ ByteBuf encodedMessage = null;
+ try {
+ final byte[] header = obtainHeader();
+ final byte[] payload = mapper.writeValueAsBytes(requestMessage);
+
+ encodedMessage = allocator.buffer(header.length + payload.length);
+ encodedMessage.writeBytes(header);
+ encodedMessage.writeBytes(payload);
+
+ return encodedMessage;
+ } catch (Exception ex) {
+ if (encodedMessage != null) ReferenceCountUtil.release(encodedMessage);
+
+ logger.warn("Request [{}] could not be serialized by {}.", requestMessage.toString(), AbstractGraphSONMessageSerializerV2d0.class.getName());
+ throw new SerializationException(ex);
+ }
+ }
+
+ @Override
+ public RequestMessage deserializeRequest(final ByteBuf msg) throws SerializationException {
+ try {
+ final byte[] payload = new byte[msg.readableBytes()];
+ msg.readBytes(payload);
+ return mapper.readValue(payload, RequestMessage.class);
+ } catch (Exception ex) {
+ logger.warn("Request [{}] could not be deserialized by {}.", msg, AbstractGraphSONMessageSerializerV2d0.class.getName());
+ throw new SerializationException(ex);
+ }
+ }
+
+ @Override
+ public ResponseMessage deserializeResponse(final ByteBuf msg) throws SerializationException {
+ try {
+ final byte[] payload = new byte[msg.readableBytes()];
+ msg.readBytes(payload);
+ final Map<String, Object> responseData = mapper.readValue(payload, mapTypeReference);
+ final Map<String, Object> status = (Map<String, Object>) responseData.get(SerTokens.TOKEN_STATUS);
+ final Map<String, Object> result = (Map<String, Object>) responseData.get(SerTokens.TOKEN_RESULT);
+ return ResponseMessage.build(UUID.fromString(responseData.get(SerTokens.TOKEN_REQUEST).toString()))
+ .code(ResponseStatusCode.getFromValue((Integer) status.get(SerTokens.TOKEN_CODE)))
+ .statusMessage(status.get(SerTokens.TOKEN_MESSAGE).toString())
+ .statusAttributes((Map<String, Object>) status.get(SerTokens.TOKEN_ATTRIBUTES))
+ .result(result.get(SerTokens.TOKEN_DATA))
+ .responseMetaData((Map<String, Object>) result.get(SerTokens.TOKEN_META))
+ .create();
+ } catch (Exception ex) {
+ logger.warn("Response [{}] could not be deserialized by {}.", msg, AbstractGraphSONMessageSerializerV2d0.class.getName());
+ throw new SerializationException(ex);
+ }
+ }
+
+ public final static class GremlinServerModule extends SimpleModule {
+ public GremlinServerModule() {
+ super("graphson-gremlin-server");
+ addSerializer(JsonBuilder.class, new JsonBuilderJacksonSerializer());
+ addSerializer(ResponseMessage.class, new ResponseMessageSerializer());
+ }
+ }
+
+ public final static class JsonBuilderJacksonSerializer extends StdSerializer<JsonBuilder> {
+ public JsonBuilderJacksonSerializer() {
+ super(JsonBuilder.class);
+ }
+
+ @Override
+ public void serialize(final JsonBuilder json, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException, JsonGenerationException {
+ // the JSON from the builder will already be started/ended as array or object...just need to surround it
+ // with appropriate chars to fit into the serialization pattern.
+ jsonGenerator.writeRaw(":");
+ jsonGenerator.writeRaw(json.toString());
+ jsonGenerator.writeRaw(",");
+ }
+ }
+
+ public final static class ResponseMessageSerializer extends StdSerializer<ResponseMessage> {
+ public ResponseMessageSerializer() {
+ super(ResponseMessage.class);
+ }
+
+ @Override
+ public void serialize(final ResponseMessage responseMessage, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider) throws IOException {
+ ser(responseMessage, jsonGenerator, serializerProvider, null);
+ }
+
+ @Override
+ public void serializeWithType(final ResponseMessage responseMessage, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider,
+ final TypeSerializer typeSerializer) throws IOException {
+ ser(responseMessage, jsonGenerator, serializerProvider, typeSerializer);
+ }
+
+ public void ser(final ResponseMessage responseMessage, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider,
+ final TypeSerializer typeSerializer) throws IOException {
+ GraphSONUtil.writeStartObject(responseMessage, jsonGenerator, typeSerializer);
+
+ jsonGenerator.writeStringField(SerTokens.TOKEN_REQUEST, responseMessage.getRequestId() != null ? responseMessage.getRequestId().toString() : null);
+ jsonGenerator.writeFieldName(SerTokens.TOKEN_STATUS);
+
+ GraphSONUtil.writeStartObject(responseMessage, jsonGenerator, typeSerializer);
+ jsonGenerator.writeStringField(SerTokens.TOKEN_MESSAGE, responseMessage.getStatus().getMessage());
+ jsonGenerator.writeNumberField(SerTokens.TOKEN_CODE, responseMessage.getStatus().getCode().getValue());
+ jsonGenerator.writeObjectField(SerTokens.TOKEN_ATTRIBUTES, responseMessage.getStatus().getAttributes());
+ GraphSONUtil.writeEndObject(responseMessage, jsonGenerator, typeSerializer);
+
+ jsonGenerator.writeFieldName(SerTokens.TOKEN_RESULT);
+
+ GraphSONUtil.writeStartObject(responseMessage, jsonGenerator, typeSerializer);
+
+ if (null == responseMessage.getResult().getData())
+ {
+ jsonGenerator.writeNullField(SerTokens.TOKEN_DATA);
+ }
+ else
+ {
+ jsonGenerator.writeFieldName(SerTokens.TOKEN_DATA);
+ Object result = responseMessage.getResult().getData();
+ serializerProvider.findTypedValueSerializer(result.getClass(), true, null).serialize(result, jsonGenerator, serializerProvider);
+ }
+
+ jsonGenerator.writeObjectField(SerTokens.TOKEN_META, responseMessage.getResult().getMeta());
+ GraphSONUtil.writeEndObject(responseMessage, jsonGenerator, typeSerializer);
+
+ GraphSONUtil.writeEndObject(responseMessage, jsonGenerator, typeSerializer);
+ }
+ }
+}
[03/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0.json
new file mode 100644
index 0000000..92c4d84
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0.json
@@ -0,0 +1,808 @@
+{"id":1,"label":"song","inE":{"followedBy":[{"id":3059,"outV":153,"properties":{"weight":1}},{"id":276,"outV":5,"properties":{"weight":2}},{"id":3704,"outV":3,"properties":{"weight":2}},{"id":4383,"outV":62,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":0,"inV":2,"properties":{"weight":1}},{"id":1,"inV":3,"properties":{"weight":2}},{"id":2,"inV":4,"properties":{"weight":1}},{"id":3,"inV":5,"properties":{"weight":1}},{"id":4,"inV":6,"properties":{"weight":1}}],"sungBy":[{"id":7612,"inV":340}],"writtenBy":[{"id":7611,"inV":527}]},"properties":{"name":[{"id":0,"value":"HEY BO DIDDLEY"}],"songType":[{"id":2,"value":"cover"}],"performances":[{"id":1,"value":5}]}}
+{"id":2,"label":"song","inE":{"followedBy":[{"id":0,"outV":1,"properties":{"weight":1}},{"id":323,"outV":34,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6190,"inV":123,"properties":{"weight":1}},{"id":6191,"inV":50,"properties":{"weight":1}}],"sungBy":[{"id":7666,"inV":525}],"writtenBy":[{"id":7665,"inV":525}]},"properties":{"name":[{"id":3,"value":"IM A MAN"}],"songType":[{"id":5,"value":"cover"}],"performances":[{"id":4,"value":1}]}}
+{"id":3,"label":"song","inE":{"followedBy":[{"id":1,"outV":1,"properties":{"weight":2}},{"id":2051,"outV":92,"properties":{"weight":4}},{"id":1412,"outV":83,"properties":{"weight":6}},{"id":6669,"outV":12,"properties":{"weight":1}},{"id":526,"outV":120,"properties":{"weight":2}},{"id":910,"outV":91,"properties":{"weight":3}},{"id":1166,"outV":26,"properties":{"weight":4}},{"id":6286,"outV":49,"properties":{"weight":1}},{"id":273,"outV":5,"properties":{"weight":40}},{"id":2194,"outV":235,"properties":{"weight":1}},{"id":1684,"outV":124,"properties":{"weight":1}},{"id":1941,"outV":148,"properties":{"weight":4}},{"id":3221,"outV":63,"properties":{"weight":1}},{"id":2712,"outV":13,"properties":{"weight":3}},{"id":6425,"outV":134,"properties":{"weight":2}},{"id":5787,"outV":76,"properties":{"weight":2}},{"id":5148,"outV":125,"properties":{"weight":4}},{"id":6692,"outV":141,"properties":{"weight":2}},{"id":6310,"outV":123,"properties":{"weight":1}},{"id":6448,"outV":187,"properties":{"wei
ght":3}},{"id":2225,"outV":226,"properties":{"weight":1}},{"id":5042,"outV":209,"properties":{"weight":1}},{"id":4789,"outV":114,"properties":{"weight":2}},{"id":1464,"outV":81,"properties":{"weight":1}},{"id":2232,"outV":215,"properties":{"weight":1}},{"id":4665,"outV":154,"properties":{"weight":1}},{"id":2235,"outV":29,"properties":{"weight":163}},{"id":6208,"outV":319,"properties":{"weight":4}},{"id":706,"outV":206,"properties":{"weight":2}},{"id":835,"outV":171,"properties":{"weight":1}},{"id":5188,"outV":99,"properties":{"weight":1}},{"id":1862,"outV":94,"properties":{"weight":10}},{"id":1735,"outV":82,"properties":{"weight":1}},{"id":6343,"outV":21,"properties":{"weight":1}},{"id":4937,"outV":277,"properties":{"weight":1}},{"id":3276,"outV":160,"properties":{"weight":1}},{"id":3149,"outV":104,"properties":{"weight":1}},{"id":1358,"outV":130,"properties":{"weight":18}},{"id":4304,"outV":110,"properties":{"weight":1}},{"id":1105,"outV":59,"properties":{"weight":1}},{"id":722,"ou
tV":80,"properties":{"weight":1}},{"id":4182,"outV":54,"properties":{"weight":1}},{"id":1499,"outV":164,"properties":{"weight":2}},{"id":2397,"outV":179,"properties":{"weight":1}},{"id":351,"outV":178,"properties":{"weight":1}},{"id":6623,"outV":127,"properties":{"weight":3}},{"id":2018,"outV":149,"properties":{"weight":1}},{"id":7011,"outV":89,"properties":{"weight":2}},{"id":5348,"outV":165,"properties":{"weight":1}},{"id":2278,"outV":25,"properties":{"weight":7}},{"id":1255,"outV":27,"properties":{"weight":2}},{"id":3048,"outV":153,"properties":{"weight":13}},{"id":5867,"outV":96,"properties":{"weight":116}},{"id":364,"outV":74,"properties":{"weight":2}},{"id":492,"outV":98,"properties":{"weight":1}},{"id":3948,"outV":138,"properties":{"weight":4}},{"id":4335,"outV":62,"properties":{"weight":1}},{"id":3312,"outV":252,"properties":{"weight":1}},{"id":5745,"outV":129,"properties":{"weight":1}},{"id":4596,"outV":85,"properties":{"weight":3}},{"id":5367,"outV":132,"properties":{"weig
ht":1}},{"id":633,"outV":23,"properties":{"weight":1}},{"id":891,"outV":140,"properties":{"weight":2}},{"id":5375,"outV":69,"properties":{"weight":1}},{"id":6143,"outV":289,"properties":{"weight":3}}]},"outE":{"followedBy":[{"id":3712,"inV":27,"properties":{"weight":1}},{"id":3713,"inV":110,"properties":{"weight":4}},{"id":3714,"inV":215,"properties":{"weight":4}},{"id":3715,"inV":127,"properties":{"weight":10}},{"id":3716,"inV":83,"properties":{"weight":3}},{"id":3717,"inV":103,"properties":{"weight":2}},{"id":3718,"inV":68,"properties":{"weight":1}},{"id":3719,"inV":134,"properties":{"weight":2}},{"id":3720,"inV":25,"properties":{"weight":10}},{"id":3721,"inV":125,"properties":{"weight":54}},{"id":3722,"inV":130,"properties":{"weight":26}},{"id":3723,"inV":141,"properties":{"weight":2}},{"id":3724,"inV":145,"properties":{"weight":1}},{"id":3725,"inV":319,"properties":{"weight":3}},{"id":3726,"inV":12,"properties":{"weight":1}},{"id":3727,"inV":160,"properties":{"weight":37}},{"id"
:3728,"inV":70,"properties":{"weight":2}},{"id":3729,"inV":123,"properties":{"weight":1}},{"id":3730,"inV":129,"properties":{"weight":1}},{"id":3731,"inV":30,"properties":{"weight":2}},{"id":3732,"inV":148,"properties":{"weight":1}},{"id":3733,"inV":211,"properties":{"weight":3}},{"id":3734,"inV":87,"properties":{"weight":13}},{"id":3735,"inV":164,"properties":{"weight":4}},{"id":3736,"inV":64,"properties":{"weight":2}},{"id":3737,"inV":320,"properties":{"weight":1}},{"id":3738,"inV":61,"properties":{"weight":3}},{"id":3739,"inV":210,"properties":{"weight":3}},{"id":3740,"inV":50,"properties":{"weight":7}},{"id":3741,"inV":128,"properties":{"weight":3}},{"id":3742,"inV":315,"properties":{"weight":1}},{"id":3743,"inV":261,"properties":{"weight":1}},{"id":3744,"inV":213,"properties":{"weight":13}},{"id":3745,"inV":72,"properties":{"weight":1}},{"id":3746,"inV":38,"properties":{"weight":4}},{"id":3747,"inV":204,"properties":{"weight":14}},{"id":3748,"inV":62,"properties":{"weight":2}},
{"id":3749,"inV":150,"properties":{"weight":8}},{"id":3750,"inV":309,"properties":{"weight":1}},{"id":3751,"inV":131,"properties":{"weight":1}},{"id":3752,"inV":151,"properties":{"weight":1}},{"id":3753,"inV":321,"properties":{"weight":1}},{"id":3754,"inV":90,"properties":{"weight":2}},{"id":3755,"inV":82,"properties":{"weight":1}},{"id":3756,"inV":120,"properties":{"weight":1}},{"id":3757,"inV":46,"properties":{"weight":5}},{"id":3758,"inV":157,"properties":{"weight":5}},{"id":3759,"inV":59,"properties":{"weight":1}},{"id":3760,"inV":81,"properties":{"weight":1}},{"id":3761,"inV":86,"properties":{"weight":5}},{"id":3762,"inV":140,"properties":{"weight":1}},{"id":3763,"inV":201,"properties":{"weight":1}},{"id":3764,"inV":214,"properties":{"weight":1}},{"id":3765,"inV":185,"properties":{"weight":2}},{"id":3766,"inV":216,"properties":{"weight":1}},{"id":3767,"inV":217,"properties":{"weight":2}},{"id":3768,"inV":236,"properties":{"weight":5}},{"id":3769,"inV":193,"properties":{"weight"
:1}},{"id":3770,"inV":79,"properties":{"weight":2}},{"id":3771,"inV":84,"properties":{"weight":1}},{"id":3772,"inV":23,"properties":{"weight":2}},{"id":3773,"inV":31,"properties":{"weight":2}},{"id":3774,"inV":240,"properties":{"weight":1}},{"id":3775,"inV":292,"properties":{"weight":1}},{"id":3776,"inV":9,"properties":{"weight":1}},{"id":3777,"inV":259,"properties":{"weight":1}},{"id":3694,"inV":5,"properties":{"weight":57}},{"id":3695,"inV":114,"properties":{"weight":30}},{"id":3696,"inV":74,"properties":{"weight":2}},{"id":3697,"inV":78,"properties":{"weight":3}},{"id":3698,"inV":10,"properties":{"weight":1}},{"id":3699,"inV":26,"properties":{"weight":4}},{"id":3700,"inV":153,"properties":{"weight":7}},{"id":3701,"inV":4,"properties":{"weight":4}},{"id":3702,"inV":317,"properties":{"weight":1}},{"id":3703,"inV":13,"properties":{"weight":5}},{"id":3704,"inV":1,"properties":{"weight":2}},{"id":3705,"inV":21,"properties":{"weight":2}},{"id":3706,"inV":57,"properties":{"weight":2}},{
"id":3707,"inV":122,"properties":{"weight":2}},{"id":3708,"inV":318,"properties":{"weight":1}},{"id":3709,"inV":94,"properties":{"weight":26}},{"id":3710,"inV":96,"properties":{"weight":7}},{"id":3711,"inV":124,"properties":{"weight":15}}],"sungBy":[{"id":7808,"inV":351}],"writtenBy":[{"id":7807,"inV":671}]},"properties":{"name":[{"id":6,"value":"NOT FADE AWAY"}],"songType":[{"id":8,"value":"cover"}],"performances":[{"id":7,"value":531}]}}
+{"id":4,"label":"song","inE":{"followedBy":[{"id":128,"outV":97,"properties":{"weight":1}},{"id":1664,"outV":267,"properties":{"weight":1}},{"id":2,"outV":1,"properties":{"weight":1}},{"id":899,"outV":140,"properties":{"weight":1}},{"id":1667,"outV":124,"properties":{"weight":15}},{"id":4099,"outV":48,"properties":{"weight":1}},{"id":1156,"outV":26,"properties":{"weight":16}},{"id":773,"outV":122,"properties":{"weight":9}},{"id":6534,"outV":242,"properties":{"weight":1}},{"id":1032,"outV":73,"properties":{"weight":1}},{"id":6664,"outV":12,"properties":{"weight":3}},{"id":5129,"outV":222,"properties":{"weight":1}},{"id":5387,"outV":69,"properties":{"weight":1}},{"id":5517,"outV":43,"properties":{"weight":2}},{"id":5006,"outV":30,"properties":{"weight":2}},{"id":6030,"outV":204,"properties":{"weight":2}},{"id":2063,"outV":92,"properties":{"weight":1}},{"id":915,"outV":91,"properties":{"weight":2}},{"id":6940,"outV":84,"properties":{"weight":5}},{"id":2464,"outV":68,"properties":{"weig
ht":1}},{"id":5795,"outV":76,"properties":{"weight":2}},{"id":3620,"outV":24,"properties":{"weight":2}},{"id":4772,"outV":114,"properties":{"weight":25}},{"id":2982,"outV":14,"properties":{"weight":3}},{"id":3367,"outV":184,"properties":{"weight":6}},{"id":2345,"outV":87,"properties":{"weight":2}},{"id":2861,"outV":101,"properties":{"weight":6}},{"id":1840,"outV":275,"properties":{"weight":1}},{"id":5425,"outV":102,"properties":{"weight":1}},{"id":180,"outV":70,"properties":{"weight":46}},{"id":2613,"outV":158,"properties":{"weight":1}},{"id":5434,"outV":217,"properties":{"weight":1}},{"id":5562,"outV":162,"properties":{"weight":2}},{"id":1469,"outV":81,"properties":{"weight":1}},{"id":446,"outV":38,"properties":{"weight":7}},{"id":2494,"outV":90,"properties":{"weight":3}},{"id":3266,"outV":160,"properties":{"weight":10}},{"id":326,"outV":34,"properties":{"weight":1}},{"id":583,"outV":120,"properties":{"weight":2}},{"id":6855,"outV":64,"properties":{"weight":12}},{"id":73,"outV":46,
"properties":{"weight":4}},{"id":4425,"outV":212,"properties":{"weight":1}},{"id":1613,"outV":210,"properties":{"weight":2}},{"id":4941,"outV":86,"properties":{"weight":2}},{"id":6350,"outV":21,"properties":{"weight":1}},{"id":3535,"outV":201,"properties":{"weight":1}},{"id":980,"outV":11,"properties":{"weight":3}},{"id":1494,"outV":164,"properties":{"weight":3}},{"id":5206,"outV":99,"properties":{"weight":1}},{"id":5847,"outV":61,"properties":{"weight":2}},{"id":6490,"outV":187,"properties":{"weight":1}},{"id":2781,"outV":15,"properties":{"weight":4}},{"id":5600,"outV":42,"properties":{"weight":1}},{"id":353,"outV":74,"properties":{"weight":6}},{"id":5474,"outV":79,"properties":{"weight":1}},{"id":1891,"outV":103,"properties":{"weight":19}},{"id":3811,"outV":88,"properties":{"weight":2}},{"id":5989,"outV":50,"properties":{"weight":12}},{"id":4327,"outV":110,"properties":{"weight":2}},{"id":2538,"outV":57,"properties":{"weight":4}},{"id":3050,"outV":153,"properties":{"weight":13}},{
"id":4970,"outV":236,"properties":{"weight":1}},{"id":2283,"outV":25,"properties":{"weight":9}},{"id":236,"outV":145,"properties":{"weight":1}},{"id":6126,"outV":72,"properties":{"weight":2}},{"id":5232,"outV":214,"properties":{"weight":2}},{"id":4594,"outV":85,"properties":{"weight":1}},{"id":1652,"outV":213,"properties":{"weight":3}},{"id":4084,"outV":109,"properties":{"weight":1}},{"id":629,"outV":23,"properties":{"weight":10}},{"id":3701,"outV":3,"properties":{"weight":4}},{"id":5621,"outV":22,"properties":{"weight":1}},{"id":7029,"outV":89,"properties":{"weight":1}},{"id":5238,"outV":32,"properties":{"weight":3}},{"id":2684,"outV":13,"properties":{"weight":9}},{"id":3325,"outV":268,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5120,"inV":40,"properties":{"weight":5}},{"id":5121,"inV":33,"properties":{"weight":3}},{"id":5122,"inV":79,"properties":{"weight":1}},{"id":5123,"inV":292,"properties":{"weight":1}},{"id":5071,"inV":50,"properties":{"weight":9}},{"id":5072,"in
V":12,"properties":{"weight":26}},{"id":5073,"inV":18,"properties":{"weight":4}},{"id":5074,"inV":24,"properties":{"weight":9}},{"id":5075,"inV":23,"properties":{"weight":63}},{"id":5076,"inV":13,"properties":{"weight":12}},{"id":5077,"inV":10,"properties":{"weight":4}},{"id":5078,"inV":11,"properties":{"weight":3}},{"id":5079,"inV":26,"properties":{"weight":18}},{"id":5080,"inV":22,"properties":{"weight":1}},{"id":5081,"inV":16,"properties":{"weight":2}},{"id":5082,"inV":49,"properties":{"weight":1}},{"id":5083,"inV":25,"properties":{"weight":2}},{"id":5084,"inV":51,"properties":{"weight":1}},{"id":5085,"inV":15,"properties":{"weight":1}},{"id":5086,"inV":112,"properties":{"weight":4}},{"id":5087,"inV":121,"properties":{"weight":1}},{"id":5088,"inV":32,"properties":{"weight":7}},{"id":5089,"inV":68,"properties":{"weight":2}},{"id":5090,"inV":120,"properties":{"weight":77}},{"id":5091,"inV":103,"properties":{"weight":1}},{"id":5092,"inV":42,"properties":{"weight":3}},{"id":5093,"inV
":85,"properties":{"weight":4}},{"id":5094,"inV":76,"properties":{"weight":5}},{"id":5095,"inV":181,"properties":{"weight":2}},{"id":5096,"inV":14,"properties":{"weight":2}},{"id":5097,"inV":122,"properties":{"weight":1}},{"id":5098,"inV":153,"properties":{"weight":3}},{"id":5099,"inV":96,"properties":{"weight":1}},{"id":5100,"inV":82,"properties":{"weight":3}},{"id":5101,"inV":110,"properties":{"weight":1}},{"id":5102,"inV":19,"properties":{"weight":6}},{"id":5103,"inV":129,"properties":{"weight":1}},{"id":5104,"inV":84,"properties":{"weight":1}},{"id":5105,"inV":88,"properties":{"weight":9}},{"id":5106,"inV":97,"properties":{"weight":1}},{"id":5107,"inV":114,"properties":{"weight":2}},{"id":5108,"inV":30,"properties":{"weight":8}},{"id":5109,"inV":31,"properties":{"weight":8}},{"id":5110,"inV":69,"properties":{"weight":4}},{"id":5111,"inV":127,"properties":{"weight":2}},{"id":5112,"inV":60,"properties":{"weight":1}},{"id":5113,"inV":39,"properties":{"weight":2}},{"id":5114,"inV":2
1,"properties":{"weight":1}},{"id":5115,"inV":117,"properties":{"weight":1}},{"id":5116,"inV":78,"properties":{"weight":1}},{"id":5117,"inV":38,"properties":{"weight":1}},{"id":5118,"inV":169,"properties":{"weight":2}},{"id":5119,"inV":118,"properties":{"weight":1}}],"sungBy":[{"id":7064,"inV":340}],"writtenBy":[{"id":7063,"inV":339}]},"properties":{"name":[{"id":9,"value":"BERTHA"}],"songType":[{"id":11,"value":"original"}],"performances":[{"id":10,"value":394}]}}
+{"id":5,"label":"song","inE":{"followedBy":[{"id":194,"outV":70,"properties":{"weight":8}},{"id":962,"outV":67,"properties":{"weight":5}},{"id":3,"outV":1,"properties":{"weight":1}},{"id":5446,"outV":231,"properties":{"weight":5}},{"id":6344,"outV":21,"properties":{"weight":6}},{"id":1738,"outV":82,"properties":{"weight":1}},{"id":6666,"outV":12,"properties":{"weight":1}},{"id":1867,"outV":94,"properties":{"weight":15}},{"id":4300,"outV":110,"properties":{"weight":1}},{"id":847,"outV":171,"properties":{"weight":1}},{"id":2832,"outV":101,"properties":{"weight":3}},{"id":6032,"outV":115,"properties":{"weight":1}},{"id":1170,"outV":26,"properties":{"weight":1}},{"id":5330,"outV":238,"properties":{"weight":1}},{"id":1491,"outV":164,"properties":{"weight":3}},{"id":1429,"outV":83,"properties":{"weight":3}},{"id":3033,"outV":14,"properties":{"weight":1}},{"id":6298,"outV":49,"properties":{"weight":1}},{"id":1373,"outV":130,"properties":{"weight":11}},{"id":4447,"outV":113,"properties":{"w
eight":1}},{"id":5151,"outV":125,"properties":{"weight":6}},{"id":5343,"outV":165,"properties":{"weight":2}},{"id":6431,"outV":134,"properties":{"weight":2}},{"id":1953,"outV":148,"properties":{"weight":10}},{"id":1634,"outV":210,"properties":{"weight":1}},{"id":2274,"outV":25,"properties":{"weight":8}},{"id":100,"outV":46,"properties":{"weight":1}},{"id":933,"outV":91,"properties":{"weight":1}},{"id":2021,"outV":149,"properties":{"weight":1}},{"id":6694,"outV":141,"properties":{"weight":2}},{"id":4009,"outV":225,"properties":{"weight":1}},{"id":682,"outV":219,"properties":{"weight":1}},{"id":3694,"outV":3,"properties":{"weight":57}},{"id":4718,"outV":186,"properties":{"weight":6}},{"id":3055,"outV":153,"properties":{"weight":9}},{"id":2480,"outV":68,"properties":{"weight":1}},{"id":2736,"outV":13,"properties":{"weight":3}},{"id":5426,"outV":102,"properties":{"weight":1}},{"id":6899,"outV":147,"properties":{"weight":1}},{"id":5879,"outV":96,"properties":{"weight":22}},{"id":6201,"ou
tV":319,"properties":{"weight":2}},{"id":5370,"outV":132,"properties":{"weight":2}},{"id":700,"outV":206,"properties":{"weight":1}},{"id":2236,"outV":29,"properties":{"weight":5}},{"id":4604,"outV":85,"properties":{"weight":2}},{"id":5759,"outV":129,"properties":{"weight":6}}]},"outE":{"followedBy":[{"id":273,"inV":3,"properties":{"weight":40}},{"id":274,"inV":26,"properties":{"weight":3}},{"id":275,"inV":114,"properties":{"weight":40}},{"id":276,"inV":1,"properties":{"weight":2}},{"id":277,"inV":74,"properties":{"weight":3}},{"id":278,"inV":122,"properties":{"weight":3}},{"id":279,"inV":133,"properties":{"weight":2}},{"id":280,"inV":83,"properties":{"weight":1}},{"id":281,"inV":153,"properties":{"weight":5}},{"id":282,"inV":159,"properties":{"weight":1}},{"id":283,"inV":13,"properties":{"weight":3}},{"id":284,"inV":25,"properties":{"weight":19}},{"id":285,"inV":96,"properties":{"weight":10}},{"id":286,"inV":160,"properties":{"weight":2}},{"id":287,"inV":32,"properties":{"weight":1}
},{"id":288,"inV":120,"properties":{"weight":16}},{"id":289,"inV":50,"properties":{"weight":1}},{"id":290,"inV":116,"properties":{"weight":1}},{"id":291,"inV":127,"properties":{"weight":6}},{"id":292,"inV":65,"properties":{"weight":1}},{"id":293,"inV":130,"properties":{"weight":3}},{"id":294,"inV":125,"properties":{"weight":5}},{"id":295,"inV":70,"properties":{"weight":13}},{"id":296,"inV":134,"properties":{"weight":1}},{"id":297,"inV":161,"properties":{"weight":1}},{"id":298,"inV":162,"properties":{"weight":1}},{"id":299,"inV":124,"properties":{"weight":3}},{"id":300,"inV":38,"properties":{"weight":1}},{"id":301,"inV":29,"properties":{"weight":11}},{"id":302,"inV":163,"properties":{"weight":1}},{"id":303,"inV":94,"properties":{"weight":5}},{"id":304,"inV":85,"properties":{"weight":1}},{"id":305,"inV":164,"properties":{"weight":6}},{"id":306,"inV":64,"properties":{"weight":1}},{"id":307,"inV":150,"properties":{"weight":1}},{"id":308,"inV":165,"properties":{"weight":7}},{"id":309,"in
V":92,"properties":{"weight":1}},{"id":310,"inV":140,"properties":{"weight":1}},{"id":311,"inV":166,"properties":{"weight":1}}],"sungBy":[{"id":7582,"inV":340}],"writtenBy":[{"id":7581,"inV":446}]},"properties":{"name":[{"id":12,"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":14,"value":"cover"}],"performances":[{"id":13,"value":293}]}}
+{"id":6,"label":"song","inE":{"followedBy":[{"id":4,"outV":1,"properties":{"weight":1}},{"id":2023,"outV":282,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2406,"inV":293,"properties":{"weight":1}},{"id":2407,"inV":96,"properties":{"weight":1}}],"sungBy":[{"id":7782,"inV":351}],"writtenBy":[{"id":7781,"inV":527}]},"properties":{"name":[{"id":15,"value":"MONA"}],"songType":[{"id":17,"value":"cover"}],"performances":[{"id":16,"value":1}]}}
+{"id":7,"label":"song","inE":{"followedBy":[{"id":2607,"outV":295,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5,"inV":8,"properties":{"weight":1}}]},"properties":{"name":[{"id":18,"value":"WHERE HAVE THE HEROES GONE"}],"songType":[{"id":20,"value":""}],"performances":[{"id":19,"value":0}]}}
+{"id":8,"label":"song","inE":{"followedBy":[{"id":4705,"outV":111,"properties":{"weight":1}},{"id":5,"outV":7,"properties":{"weight":1}},{"id":5901,"outV":96,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2976,"inV":302,"properties":{"weight":1}},{"id":2977,"inV":96,"properties":{"weight":1}},{"id":2978,"inV":72,"properties":{"weight":1}}],"sungBy":[{"id":7814,"inV":351}],"writtenBy":[{"id":7813,"inV":674}]},"properties":{"name":[{"id":21,"value":"OH BOY"}],"songType":[{"id":23,"value":"cover"}],"performances":[{"id":22,"value":2}]}}
+{"id":9,"label":"song","inE":{"followedBy":[{"id":3776,"outV":3,"properties":{"weight":1}},{"id":65,"outV":46,"properties":{"weight":2}},{"id":1923,"outV":103,"properties":{"weight":3}},{"id":5956,"outV":50,"properties":{"weight":2}},{"id":3077,"outV":153,"properties":{"weight":2}},{"id":5832,"outV":76,"properties":{"weight":1}},{"id":1161,"outV":26,"properties":{"weight":8}},{"id":2699,"outV":13,"properties":{"weight":3}},{"id":6539,"outV":55,"properties":{"weight":1}},{"id":6667,"outV":12,"properties":{"weight":2}},{"id":2578,"outV":57,"properties":{"weight":2}},{"id":787,"outV":122,"properties":{"weight":3}},{"id":3542,"outV":201,"properties":{"weight":1}},{"id":2775,"outV":15,"properties":{"weight":5}},{"id":2840,"outV":101,"properties":{"weight":2}},{"id":4953,"outV":86,"properties":{"weight":2}},{"id":1572,"outV":18,"properties":{"weight":3}},{"id":229,"outV":70,"properties":{"weight":1}},{"id":4264,"outV":10,"properties":{"weight":1}},{"id":4969,"outV":236,"properties":{"weig
ht":3}},{"id":3498,"outV":58,"properties":{"weight":2}},{"id":5226,"outV":216,"properties":{"weight":1}},{"id":5548,"outV":166,"properties":{"weight":1}},{"id":2990,"outV":14,"properties":{"weight":4}},{"id":3950,"outV":138,"properties":{"weight":1}},{"id":2488,"outV":68,"properties":{"weight":1}},{"id":6776,"outV":39,"properties":{"weight":1}},{"id":3641,"outV":24,"properties":{"weight":2}},{"id":1532,"outV":164,"properties":{"weight":2}},{"id":1853,"outV":94,"properties":{"weight":1}},{"id":638,"outV":23,"properties":{"weight":2}},{"id":6335,"outV":21,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6,"inV":10,"properties":{"weight":3}},{"id":7,"inV":11,"properties":{"weight":2}},{"id":8,"inV":12,"properties":{"weight":3}},{"id":9,"inV":13,"properties":{"weight":6}},{"id":10,"inV":14,"properties":{"weight":3}},{"id":11,"inV":15,"properties":{"weight":3}},{"id":12,"inV":16,"properties":{"weight":1}},{"id":13,"inV":17,"properties":{"weight":1}},{"id":14,"inV":18,"properties"
:{"weight":5}},{"id":15,"inV":19,"properties":{"weight":1}},{"id":16,"inV":20,"properties":{"weight":1}},{"id":17,"inV":21,"properties":{"weight":1}},{"id":18,"inV":22,"properties":{"weight":2}},{"id":19,"inV":23,"properties":{"weight":2}},{"id":20,"inV":24,"properties":{"weight":1}},{"id":21,"inV":25,"properties":{"weight":1}},{"id":22,"inV":26,"properties":{"weight":1}},{"id":23,"inV":27,"properties":{"weight":1}},{"id":24,"inV":28,"properties":{"weight":2}},{"id":25,"inV":29,"properties":{"weight":1}},{"id":26,"inV":30,"properties":{"weight":5}},{"id":27,"inV":31,"properties":{"weight":2}},{"id":28,"inV":32,"properties":{"weight":1}},{"id":29,"inV":33,"properties":{"weight":2}},{"id":30,"inV":34,"properties":{"weight":2}},{"id":31,"inV":35,"properties":{"weight":3}},{"id":32,"inV":36,"properties":{"weight":2}},{"id":33,"inV":37,"properties":{"weight":3}},{"id":34,"inV":38,"properties":{"weight":1}},{"id":35,"inV":39,"properties":{"weight":1}},{"id":36,"inV":40,"properties":{"weig
ht":1}},{"id":37,"inV":41,"properties":{"weight":1}},{"id":38,"inV":42,"properties":{"weight":1}},{"id":39,"inV":43,"properties":{"weight":1}}],"sungBy":[{"id":7190,"inV":340}],"writtenBy":[{"id":7189,"inV":339}]},"properties":{"name":[{"id":24,"value":"HERE COMES SUNSHINE"}],"songType":[{"id":26,"value":"original"}],"performances":[{"id":25,"value":65}]}}
+{"id":10,"label":"song","inE":{"followedBy":[{"id":3841,"outV":60,"properties":{"weight":1}},{"id":1027,"outV":73,"properties":{"weight":5}},{"id":6,"outV":9,"properties":{"weight":3}},{"id":3335,"outV":155,"properties":{"weight":1}},{"id":4103,"outV":48,"properties":{"weight":5}},{"id":6279,"outV":49,"properties":{"weight":1}},{"id":4233,"outV":52,"properties":{"weight":1}},{"id":4878,"outV":100,"properties":{"weight":19}},{"id":5264,"outV":32,"properties":{"weight":2}},{"id":2196,"outV":75,"properties":{"weight":4}},{"id":151,"outV":108,"properties":{"weight":3}},{"id":1571,"outV":18,"properties":{"weight":5}},{"id":3619,"outV":24,"properties":{"weight":2}},{"id":3237,"outV":63,"properties":{"weight":3}},{"id":4647,"outV":154,"properties":{"weight":1}},{"id":4521,"outV":105,"properties":{"weight":3}},{"id":1195,"outV":26,"properties":{"weight":1}},{"id":6444,"outV":187,"properties":{"weight":9}},{"id":6956,"outV":84,"properties":{"weight":1}},{"id":687,"outV":157,"properties":{"we
ight":1}},{"id":4784,"outV":114,"properties":{"weight":1}},{"id":6064,"outV":115,"properties":{"weight":1}},{"id":1714,"outV":82,"properties":{"weight":3}},{"id":3890,"outV":51,"properties":{"weight":9}},{"id":55,"outV":46,"properties":{"weight":1}},{"id":5175,"outV":71,"properties":{"weight":1}},{"id":1337,"outV":31,"properties":{"weight":1}},{"id":1083,"outV":59,"properties":{"weight":10}},{"id":4155,"outV":54,"properties":{"weight":6}},{"id":6077,"outV":72,"properties":{"weight":5}},{"id":5441,"outV":239,"properties":{"weight":1}},{"id":1987,"outV":152,"properties":{"weight":2}},{"id":1860,"outV":94,"properties":{"weight":1}},{"id":2116,"outV":17,"properties":{"weight":7}},{"id":3269,"outV":160,"properties":{"weight":2}},{"id":454,"outV":38,"properties":{"weight":1}},{"id":3142,"outV":104,"properties":{"weight":4}},{"id":2505,"outV":57,"properties":{"weight":12}},{"id":6603,"outV":127,"properties":{"weight":4}},{"id":6859,"outV":64,"properties":{"weight":1}},{"id":717,"outV":80,"
properties":{"weight":9}},{"id":1360,"outV":130,"properties":{"weight":2}},{"id":3026,"outV":14,"properties":{"weight":1}},{"id":5972,"outV":50,"properties":{"weight":1}},{"id":5077,"outV":4,"properties":{"weight":4}},{"id":2392,"outV":87,"properties":{"weight":1}},{"id":1250,"outV":27,"properties":{"weight":10}},{"id":4706,"outV":111,"properties":{"weight":3}},{"id":6755,"outV":53,"properties":{"weight":1}},{"id":485,"outV":98,"properties":{"weight":4}},{"id":2917,"outV":78,"properties":{"weight":10}},{"id":3559,"outV":56,"properties":{"weight":16}},{"id":3436,"outV":58,"properties":{"weight":10}},{"id":3820,"outV":88,"properties":{"weight":1}},{"id":4463,"outV":202,"properties":{"weight":4}},{"id":880,"outV":189,"properties":{"weight":1}},{"id":6256,"outV":117,"properties":{"weight":1}},{"id":3698,"outV":3,"properties":{"weight":1}},{"id":2035,"outV":180,"properties":{"weight":1}},{"id":2291,"outV":25,"properties":{"weight":1}},{"id":3317,"outV":252,"properties":{"weight":1}},{"id
":2806,"outV":15,"properties":{"weight":2}},{"id":2427,"outV":68,"properties":{"weight":2}},{"id":6782,"outV":39,"properties":{"weight":4}},{"id":4351,"outV":62,"properties":{"weight":2}}]},"outE":{"followedBy":[{"id":4235,"inV":56,"properties":{"weight":13}},{"id":4236,"inV":27,"properties":{"weight":7}},{"id":4237,"inV":58,"properties":{"weight":11}},{"id":4238,"inV":80,"properties":{"weight":6}},{"id":4239,"inV":59,"properties":{"weight":9}},{"id":4240,"inV":100,"properties":{"weight":21}},{"id":4241,"inV":104,"properties":{"weight":5}},{"id":4242,"inV":50,"properties":{"weight":2}},{"id":4243,"inV":48,"properties":{"weight":8}},{"id":4244,"inV":54,"properties":{"weight":13}},{"id":4245,"inV":19,"properties":{"weight":9}},{"id":4246,"inV":72,"properties":{"weight":4}},{"id":4247,"inV":14,"properties":{"weight":1}},{"id":4248,"inV":122,"properties":{"weight":2}},{"id":4249,"inV":235,"properties":{"weight":1}},{"id":4250,"inV":218,"properties":{"weight":1}},{"id":4251,"inV":252,"pr
operties":{"weight":1}},{"id":4252,"inV":89,"properties":{"weight":3}},{"id":4253,"inV":57,"properties":{"weight":12}},{"id":4254,"inV":49,"properties":{"weight":3}},{"id":4255,"inV":94,"properties":{"weight":3}},{"id":4256,"inV":153,"properties":{"weight":1}},{"id":4257,"inV":13,"properties":{"weight":1}},{"id":4258,"inV":160,"properties":{"weight":1}},{"id":4259,"inV":51,"properties":{"weight":10}},{"id":4260,"inV":18,"properties":{"weight":3}},{"id":4261,"inV":202,"properties":{"weight":4}},{"id":4262,"inV":17,"properties":{"weight":5}},{"id":4263,"inV":46,"properties":{"weight":1}},{"id":4264,"inV":9,"properties":{"weight":1}},{"id":4265,"inV":55,"properties":{"weight":1}},{"id":4266,"inV":125,"properties":{"weight":1}},{"id":4267,"inV":69,"properties":{"weight":2}},{"id":4268,"inV":98,"properties":{"weight":8}},{"id":4269,"inV":82,"properties":{"weight":4}},{"id":4270,"inV":154,"properties":{"weight":1}},{"id":4271,"inV":105,"properties":{"weight":7}},{"id":4272,"inV":112,"prop
erties":{"weight":2}},{"id":4273,"inV":109,"properties":{"weight":1}},{"id":4274,"inV":42,"properties":{"weight":2}},{"id":4275,"inV":121,"properties":{"weight":1}},{"id":4276,"inV":73,"properties":{"weight":5}},{"id":4277,"inV":106,"properties":{"weight":1}},{"id":4278,"inV":116,"properties":{"weight":1}},{"id":4279,"inV":68,"properties":{"weight":2}},{"id":4280,"inV":152,"properties":{"weight":1}},{"id":4281,"inV":23,"properties":{"weight":6}},{"id":4282,"inV":88,"properties":{"weight":1}},{"id":4283,"inV":39,"properties":{"weight":4}},{"id":4284,"inV":12,"properties":{"weight":1}},{"id":4285,"inV":111,"properties":{"weight":1}},{"id":4286,"inV":99,"properties":{"weight":1}},{"id":4287,"inV":87,"properties":{"weight":2}},{"id":4288,"inV":108,"properties":{"weight":2}},{"id":4289,"inV":53,"properties":{"weight":4}},{"id":4290,"inV":26,"properties":{"weight":5}},{"id":4291,"inV":117,"properties":{"weight":2}},{"id":4292,"inV":115,"properties":{"weight":2}},{"id":4293,"inV":63,"prope
rties":{"weight":3}},{"id":4294,"inV":103,"properties":{"weight":1}}],"sungBy":[{"id":7460,"inV":351}],"writtenBy":[{"id":7459,"inV":471}]},"properties":{"name":[{"id":27,"value":"BEAT IT ON DOWN THE LINE"}],"songType":[{"id":29,"value":"cover"}],"performances":[{"id":28,"value":325}]}}
+{"id":11,"label":"song","inE":{"followedBy":[{"id":1088,"outV":59,"properties":{"weight":14}},{"id":6273,"outV":49,"properties":{"weight":2}},{"id":1989,"outV":152,"properties":{"weight":2}},{"id":7,"outV":9,"properties":{"weight":2}},{"id":4552,"outV":105,"properties":{"weight":3}},{"id":521,"outV":205,"properties":{"weight":1}},{"id":714,"outV":80,"properties":{"weight":5}},{"id":3146,"outV":104,"properties":{"weight":3}},{"id":4876,"outV":100,"properties":{"weight":2}},{"id":2190,"outV":235,"properties":{"weight":1}},{"id":4496,"outV":202,"properties":{"weight":1}},{"id":2513,"outV":57,"properties":{"weight":4}},{"id":4053,"outV":173,"properties":{"weight":1}},{"id":5078,"outV":4,"properties":{"weight":3}},{"id":1309,"outV":27,"properties":{"weight":5}},{"id":4769,"outV":114,"properties":{"weight":1}},{"id":5025,"outV":30,"properties":{"weight":1}},{"id":3554,"outV":56,"properties":{"weight":7}},{"id":1064,"outV":73,"properties":{"weight":1}},{"id":2920,"outV":78,"properties":{"w
eight":2}},{"id":6056,"outV":115,"properties":{"weight":2}},{"id":41,"outV":46,"properties":{"weight":2}},{"id":3434,"outV":58,"properties":{"weight":5}},{"id":6442,"outV":187,"properties":{"weight":7}},{"id":1775,"outV":234,"properties":{"weight":4}},{"id":3888,"outV":51,"properties":{"weight":1}},{"id":626,"outV":23,"properties":{"weight":1}},{"id":1396,"outV":190,"properties":{"weight":1}},{"id":4020,"outV":191,"properties":{"weight":1}},{"id":6772,"outV":39,"properties":{"weight":1}},{"id":3637,"outV":24,"properties":{"weight":2}},{"id":6072,"outV":72,"properties":{"weight":5}},{"id":4157,"outV":54,"properties":{"weight":2}}]},"outE":{"followedBy":[{"id":972,"inV":57,"properties":{"weight":4}},{"id":973,"inV":59,"properties":{"weight":3}},{"id":974,"inV":53,"properties":{"weight":4}},{"id":975,"inV":54,"properties":{"weight":15}},{"id":976,"inV":56,"properties":{"weight":3}},{"id":977,"inV":48,"properties":{"weight":3}},{"id":978,"inV":72,"properties":{"weight":4}},{"id":979,"in
V":19,"properties":{"weight":9}},{"id":980,"inV":4,"properties":{"weight":3}},{"id":981,"inV":58,"properties":{"weight":6}},{"id":982,"inV":46,"properties":{"weight":1}},{"id":983,"inV":234,"properties":{"weight":7}},{"id":984,"inV":235,"properties":{"weight":2}},{"id":985,"inV":207,"properties":{"weight":4}},{"id":986,"inV":39,"properties":{"weight":3}},{"id":987,"inV":50,"properties":{"weight":1}},{"id":988,"inV":104,"properties":{"weight":2}},{"id":989,"inV":49,"properties":{"weight":1}},{"id":990,"inV":17,"properties":{"weight":3}},{"id":991,"inV":100,"properties":{"weight":1}},{"id":992,"inV":24,"properties":{"weight":1}},{"id":993,"inV":170,"properties":{"weight":2}},{"id":994,"inV":73,"properties":{"weight":1}},{"id":995,"inV":173,"properties":{"weight":1}},{"id":996,"inV":236,"properties":{"weight":1}},{"id":997,"inV":202,"properties":{"weight":3}},{"id":998,"inV":80,"properties":{"weight":2}},{"id":999,"inV":115,"properties":{"weight":4}},{"id":1000,"inV":105,"properties":{
"weight":1}}],"sungBy":[{"id":7072,"inV":351}],"writtenBy":[{"id":7071,"inV":350}]},"properties":{"name":[{"id":30,"value":"BLACK THROATED WIND"}],"songType":[{"id":32,"value":"original"}],"performances":[{"id":31,"value":158}]}}
+{"id":12,"label":"song","inE":{"followedBy":[{"id":3072,"outV":153,"properties":{"weight":4}},{"id":2433,"outV":68,"properties":{"weight":1}},{"id":1410,"outV":83,"properties":{"weight":1}},{"id":3331,"outV":155,"properties":{"weight":2}},{"id":4227,"outV":52,"properties":{"weight":3}},{"id":1028,"outV":73,"properties":{"weight":12}},{"id":4102,"outV":48,"properties":{"weight":33}},{"id":8,"outV":9,"properties":{"weight":3}},{"id":6281,"outV":49,"properties":{"weight":2}},{"id":652,"outV":23,"properties":{"weight":2}},{"id":5388,"outV":69,"properties":{"weight":1}},{"id":525,"outV":120,"properties":{"weight":1}},{"id":3726,"outV":3,"properties":{"weight":1}},{"id":783,"outV":122,"properties":{"weight":1}},{"id":3855,"outV":60,"properties":{"weight":1}},{"id":1938,"outV":148,"properties":{"weight":1}},{"id":3986,"outV":106,"properties":{"weight":1}},{"id":916,"outV":91,"properties":{"weight":1}},{"id":1172,"outV":26,"properties":{"weight":4}},{"id":6935,"outV":84,"properties":{"weigh
t":5}},{"id":3225,"outV":63,"properties":{"weight":4}},{"id":5017,"outV":30,"properties":{"weight":1}},{"id":155,"outV":108,"properties":{"weight":6}},{"id":2203,"outV":75,"properties":{"weight":3}},{"id":4893,"outV":100,"properties":{"weight":7}},{"id":4640,"outV":154,"properties":{"weight":10}},{"id":5665,"outV":169,"properties":{"weight":1}},{"id":1702,"outV":124,"properties":{"weight":1}},{"id":2598,"outV":112,"properties":{"weight":7}},{"id":5286,"outV":32,"properties":{"weight":4}},{"id":3879,"outV":51,"properties":{"weight":12}},{"id":4007,"outV":225,"properties":{"weight":1}},{"id":424,"outV":38,"properties":{"weight":5}},{"id":4522,"outV":105,"properties":{"weight":12}},{"id":5034,"outV":47,"properties":{"weight":1}},{"id":4779,"outV":114,"properties":{"weight":3}},{"id":6576,"outV":116,"properties":{"weight":1}},{"id":6835,"outV":64,"properties":{"weight":1}},{"id":6455,"outV":187,"properties":{"weight":12}},{"id":824,"outV":171,"properties":{"weight":1}},{"id":5304,"outV"
:170,"properties":{"weight":2}},{"id":1722,"outV":82,"properties":{"weight":1}},{"id":6074,"outV":72,"properties":{"weight":4}},{"id":4284,"outV":10,"properties":{"weight":1}},{"id":2109,"outV":17,"properties":{"weight":24}},{"id":703,"outV":206,"properties":{"weight":2}},{"id":5440,"outV":239,"properties":{"weight":2}},{"id":5952,"outV":50,"properties":{"weight":7}},{"id":1858,"outV":94,"properties":{"weight":2}},{"id":1347,"outV":31,"properties":{"weight":1}},{"id":1605,"outV":18,"properties":{"weight":1}},{"id":4165,"outV":54,"properties":{"weight":17}},{"id":3654,"outV":24,"properties":{"weight":3}},{"id":4038,"outV":173,"properties":{"weight":1}},{"id":6598,"outV":127,"properties":{"weight":1}},{"id":3271,"outV":160,"properties":{"weight":1}},{"id":3527,"outV":223,"properties":{"weight":1}},{"id":1096,"outV":59,"properties":{"weight":26}},{"id":3144,"outV":104,"properties":{"weight":24}},{"id":1993,"outV":152,"properties":{"weight":2}},{"id":6985,"outV":175,"properties":{"weigh
t":1}},{"id":6730,"outV":53,"properties":{"weight":4}},{"id":3019,"outV":14,"properties":{"weight":1}},{"id":3788,"outV":168,"properties":{"weight":1}},{"id":5072,"outV":4,"properties":{"weight":26}},{"id":2515,"outV":57,"properties":{"weight":3}},{"id":1365,"outV":130,"properties":{"weight":2}},{"id":2647,"outV":137,"properties":{"weight":1}},{"id":730,"outV":80,"properties":{"weight":12}},{"id":2780,"outV":15,"properties":{"weight":3}},{"id":482,"outV":98,"properties":{"weight":8}},{"id":3810,"outV":88,"properties":{"weight":6}},{"id":7013,"outV":89,"properties":{"weight":1}},{"id":4072,"outV":109,"properties":{"weight":1}},{"id":2281,"outV":25,"properties":{"weight":2}},{"id":2668,"outV":13,"properties":{"weight":3}},{"id":3565,"outV":56,"properties":{"weight":9}},{"id":1262,"outV":27,"properties":{"weight":17}},{"id":2031,"outV":180,"properties":{"weight":1}},{"id":6769,"outV":39,"properties":{"weight":2}},{"id":1779,"outV":234,"properties":{"weight":1}},{"id":4468,"outV":202,"p
roperties":{"weight":4}},{"id":1909,"outV":103,"properties":{"weight":1}},{"id":2934,"outV":78,"properties":{"weight":1}},{"id":3446,"outV":58,"properties":{"weight":4}},{"id":381,"outV":74,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6656,"inV":49,"properties":{"weight":9}},{"id":6657,"inV":19,"properties":{"weight":3}},{"id":6658,"inV":27,"properties":{"weight":9}},{"id":6659,"inV":252,"properties":{"weight":1}},{"id":6660,"inV":206,"properties":{"weight":1}},{"id":6661,"inV":89,"properties":{"weight":4}},{"id":6662,"inV":160,"properties":{"weight":1}},{"id":6663,"inV":15,"properties":{"weight":167}},{"id":6664,"inV":4,"properties":{"weight":3}},{"id":6665,"inV":202,"properties":{"weight":2}},{"id":6666,"inV":5,"properties":{"weight":1}},{"id":6667,"inV":9,"properties":{"weight":2}},{"id":6668,"inV":83,"properties":{"weight":3}},{"id":6669,"inV":3,"properties":{"weight":1}},{"id":6670,"inV":52,"properties":{"weight":1}},{"id":6671,"inV":25,"properties":{"weight":1}},{"
id":6672,"inV":46,"properties":{"weight":1}},{"id":6673,"inV":123,"properties":{"weight":2}},{"id":6674,"inV":51,"properties":{"weight":4}},{"id":6675,"inV":17,"properties":{"weight":3}},{"id":6676,"inV":56,"properties":{"weight":5}},{"id":6677,"inV":98,"properties":{"weight":5}},{"id":6678,"inV":104,"properties":{"weight":4}},{"id":6679,"inV":69,"properties":{"weight":3}},{"id":6680,"inV":170,"properties":{"weight":2}},{"id":6681,"inV":82,"properties":{"weight":1}},{"id":6682,"inV":80,"properties":{"weight":2}},{"id":6683,"inV":215,"properties":{"weight":1}},{"id":6684,"inV":48,"properties":{"weight":1}},{"id":6685,"inV":14,"properties":{"weight":3}},{"id":6686,"inV":50,"properties":{"weight":2}},{"id":6687,"inV":24,"properties":{"weight":83}},{"id":6688,"inV":18,"properties":{"weight":1}},{"id":6689,"inV":39,"properties":{"weight":6}},{"id":6690,"inV":105,"properties":{"weight":1}},{"id":6691,"inV":131,"properties":{"weight":14}},{"id":6645,"inV":72,"properties":{"weight":7}},{"id
":6646,"inV":58,"properties":{"weight":7}},{"id":6647,"inV":57,"properties":{"weight":6}},{"id":6648,"inV":54,"properties":{"weight":8}},{"id":6649,"inV":59,"properties":{"weight":14}},{"id":6650,"inV":100,"properties":{"weight":7}},{"id":6651,"inV":53,"properties":{"weight":4}},{"id":6652,"inV":148,"properties":{"weight":1}},{"id":6653,"inV":218,"properties":{"weight":2}},{"id":6654,"inV":235,"properties":{"weight":2}},{"id":6655,"inV":130,"properties":{"weight":1}}],"sungBy":[{"id":7776,"inV":351}],"writtenBy":[{"id":7775,"inV":659}]},"properties":{"name":[{"id":33,"value":"ME AND MY UNCLE"}],"songType":[{"id":35,"value":"cover"}],"performances":[{"id":34,"value":616}]}}
+{"id":13,"label":"song","inE":{"followedBy":[{"id":4865,"outV":35,"properties":{"weight":4}},{"id":1026,"outV":73,"properties":{"weight":1}},{"id":3330,"outV":155,"properties":{"weight":2}},{"id":5636,"outV":22,"properties":{"weight":1}},{"id":775,"outV":122,"properties":{"weight":1}},{"id":1799,"outV":196,"properties":{"weight":2}},{"id":6407,"outV":134,"properties":{"weight":24}},{"id":9,"outV":9,"properties":{"weight":6}},{"id":4874,"outV":100,"properties":{"weight":6}},{"id":4108,"outV":48,"properties":{"weight":3}},{"id":5132,"outV":222,"properties":{"weight":1}},{"id":2830,"outV":101,"properties":{"weight":8}},{"id":3857,"outV":60,"properties":{"weight":35}},{"id":6931,"outV":84,"properties":{"weight":7}},{"id":533,"outV":120,"properties":{"weight":1}},{"id":6165,"outV":36,"properties":{"weight":1}},{"id":4630,"outV":154,"properties":{"weight":8}},{"id":5142,"outV":125,"properties":{"weight":11}},{"id":283,"outV":5,"properties":{"weight":3}},{"id":1567,"outV":18,"properties":{
"weight":3}},{"id":1823,"outV":41,"properties":{"weight":4}},{"id":3359,"outV":184,"properties":{"weight":3}},{"id":3617,"outV":24,"properties":{"weight":1}},{"id":3108,"outV":153,"properties":{"weight":1}},{"id":3878,"outV":51,"properties":{"weight":6}},{"id":2347,"outV":87,"properties":{"weight":8}},{"id":6443,"outV":187,"properties":{"weight":47}},{"id":6700,"outV":141,"properties":{"weight":4}},{"id":5682,"outV":167,"properties":{"weight":1}},{"id":53,"outV":46,"properties":{"weight":4}},{"id":823,"outV":171,"properties":{"weight":24}},{"id":4151,"outV":218,"properties":{"weight":2}},{"id":5943,"outV":50,"properties":{"weight":1}},{"id":2617,"outV":158,"properties":{"weight":1}},{"id":3386,"outV":177,"properties":{"weight":2}},{"id":4411,"outV":327,"properties":{"weight":1}},{"id":1852,"outV":94,"properties":{"weight":4}},{"id":6206,"outV":319,"properties":{"weight":1}},{"id":1087,"outV":59,"properties":{"weight":5}},{"id":2111,"outV":17,"properties":{"weight":4}},{"id":4159,"ou
tV":54,"properties":{"weight":16}},{"id":6723,"outV":53,"properties":{"weight":6}},{"id":6984,"outV":175,"properties":{"weight":1}},{"id":3145,"outV":104,"properties":{"weight":4}},{"id":4947,"outV":86,"properties":{"weight":1}},{"id":5203,"outV":99,"properties":{"weight":2}},{"id":1366,"outV":130,"properties":{"weight":12}},{"id":1622,"outV":210,"properties":{"weight":1}},{"id":2908,"outV":118,"properties":{"weight":1}},{"id":1885,"outV":103,"properties":{"weight":3}},{"id":4959,"outV":207,"properties":{"weight":6}},{"id":3435,"outV":58,"properties":{"weight":8}},{"id":6763,"outV":39,"properties":{"weight":8}},{"id":5741,"outV":129,"properties":{"weight":12}},{"id":366,"outV":74,"properties":{"weight":38}},{"id":2926,"outV":78,"properties":{"weight":3}},{"id":623,"outV":23,"properties":{"weight":1}},{"id":4721,"outV":186,"properties":{"weight":4}},{"id":2165,"outV":151,"properties":{"weight":1}},{"id":886,"outV":140,"properties":{"weight":1}},{"id":3703,"outV":3,"properties":{"weig
ht":5}},{"id":7031,"outV":89,"properties":{"weight":4}},{"id":1411,"outV":83,"properties":{"weight":7}},{"id":3974,"outV":106,"properties":{"weight":2}},{"id":6278,"outV":49,"properties":{"weight":1}},{"id":912,"outV":91,"properties":{"weight":59}},{"id":2192,"outV":235,"properties":{"weight":1}},{"id":4759,"outV":37,"properties":{"weight":2}},{"id":1179,"outV":26,"properties":{"weight":2}},{"id":5789,"outV":76,"properties":{"weight":3}},{"id":4257,"outV":10,"properties":{"weight":1}},{"id":6561,"outV":172,"properties":{"weight":1}},{"id":4771,"outV":114,"properties":{"weight":3}},{"id":1454,"outV":81,"properties":{"weight":10}},{"id":6073,"outV":72,"properties":{"weight":13}},{"id":5306,"outV":170,"properties":{"weight":4}},{"id":4027,"outV":173,"properties":{"weight":3}},{"id":1725,"outV":82,"properties":{"weight":3}},{"id":960,"outV":67,"properties":{"weight":2}},{"id":1985,"outV":152,"properties":{"weight":1}},{"id":6594,"outV":127,"properties":{"weight":6}},{"id":6342,"outV":21
,"properties":{"weight":4}},{"id":455,"outV":139,"properties":{"weight":1}},{"id":3277,"outV":160,"properties":{"weight":3}},{"id":5837,"outV":258,"properties":{"weight":1}},{"id":208,"outV":70,"properties":{"weight":2}},{"id":2256,"outV":29,"properties":{"weight":1}},{"id":721,"outV":80,"properties":{"weight":1}},{"id":2771,"outV":15,"properties":{"weight":3}},{"id":5076,"outV":4,"properties":{"weight":12}},{"id":2519,"outV":57,"properties":{"weight":10}},{"id":4312,"outV":110,"properties":{"weight":1}},{"id":2268,"outV":25,"properties":{"weight":8}},{"id":2014,"outV":149,"properties":{"weight":1}},{"id":3552,"outV":56,"properties":{"weight":8}},{"id":481,"outV":98,"properties":{"weight":3}},{"id":1764,"outV":28,"properties":{"weight":3}},{"id":1258,"outV":27,"properties":{"weight":3}},{"id":1518,"outV":164,"properties":{"weight":1}},{"id":4846,"outV":119,"properties":{"weight":1}},{"id":4593,"outV":85,"properties":{"weight":2}},{"id":244,"outV":150,"properties":{"weight":3}},{"id"
:1780,"outV":234,"properties":{"weight":2}},{"id":4344,"outV":62,"properties":{"weight":12}},{"id":2044,"outV":92,"properties":{"weight":2}},{"id":5374,"outV":69,"properties":{"weight":34}},{"id":5886,"outV":96,"properties":{"weight":15}}]},"outE":{"followedBy":[{"id":2688,"inV":94,"properties":{"weight":4}},{"id":2689,"inV":130,"properties":{"weight":11}},{"id":2690,"inV":83,"properties":{"weight":13}},{"id":2691,"inV":170,"properties":{"weight":1}},{"id":2692,"inV":51,"properties":{"weight":3}},{"id":2693,"inV":22,"properties":{"weight":2}},{"id":2694,"inV":296,"properties":{"weight":1}},{"id":2695,"inV":52,"properties":{"weight":1}},{"id":2696,"inV":17,"properties":{"weight":2}},{"id":2697,"inV":202,"properties":{"weight":3}},{"id":2698,"inV":27,"properties":{"weight":2}},{"id":2699,"inV":9,"properties":{"weight":3}},{"id":2700,"inV":25,"properties":{"weight":12}},{"id":2701,"inV":195,"properties":{"weight":2}},{"id":2702,"inV":206,"properties":{"weight":1}},{"id":2703,"inV":39,"
properties":{"weight":1}},{"id":2704,"inV":69,"properties":{"weight":6}},{"id":2705,"inV":24,"properties":{"weight":1}},{"id":2706,"inV":82,"properties":{"weight":3}},{"id":2707,"inV":57,"properties":{"weight":1}},{"id":2708,"inV":134,"properties":{"weight":9}},{"id":2709,"inV":110,"properties":{"weight":1}},{"id":2710,"inV":99,"properties":{"weight":3}},{"id":2711,"inV":76,"properties":{"weight":4}},{"id":2712,"inV":3,"properties":{"weight":3}},{"id":2713,"inV":178,"properties":{"weight":1}},{"id":2714,"inV":184,"properties":{"weight":1}},{"id":2715,"inV":60,"properties":{"weight":21}},{"id":2716,"inV":148,"properties":{"weight":1}},{"id":2717,"inV":32,"properties":{"weight":1}},{"id":2718,"inV":91,"properties":{"weight":42}},{"id":2719,"inV":103,"properties":{"weight":1}},{"id":2720,"inV":114,"properties":{"weight":4}},{"id":2721,"inV":141,"properties":{"weight":4}},{"id":2722,"inV":154,"properties":{"weight":3}},{"id":2723,"inV":109,"properties":{"weight":2}},{"id":2724,"inV":125
,"properties":{"weight":9}},{"id":2725,"inV":85,"properties":{"weight":2}},{"id":2726,"inV":84,"properties":{"weight":5}},{"id":2727,"inV":50,"properties":{"weight":1}},{"id":2728,"inV":214,"properties":{"weight":1}},{"id":2729,"inV":72,"properties":{"weight":1}},{"id":2730,"inV":246,"properties":{"weight":1}},{"id":2731,"inV":129,"properties":{"weight":29}},{"id":2732,"inV":65,"properties":{"weight":2}},{"id":2733,"inV":133,"properties":{"weight":1}},{"id":2734,"inV":62,"properties":{"weight":1}},{"id":2735,"inV":29,"properties":{"weight":4}},{"id":2736,"inV":5,"properties":{"weight":3}},{"id":2737,"inV":183,"properties":{"weight":3}},{"id":2738,"inV":210,"properties":{"weight":1}},{"id":2739,"inV":128,"properties":{"weight":1}},{"id":2740,"inV":67,"properties":{"weight":1}},{"id":2741,"inV":212,"properties":{"weight":1}},{"id":2742,"inV":70,"properties":{"weight":2}},{"id":2743,"inV":75,"properties":{"weight":1}},{"id":2744,"inV":71,"properties":{"weight":1}},{"id":2745,"inV":168,
"properties":{"weight":2}},{"id":2746,"inV":157,"properties":{"weight":1}},{"id":2747,"inV":92,"properties":{"weight":1}},{"id":2748,"inV":89,"properties":{"weight":5}},{"id":2749,"inV":81,"properties":{"weight":1}},{"id":2750,"inV":187,"properties":{"weight":1}},{"id":2751,"inV":164,"properties":{"weight":1}},{"id":2752,"inV":136,"properties":{"weight":1}},{"id":2753,"inV":46,"properties":{"weight":1}},{"id":2660,"inV":207,"properties":{"weight":3}},{"id":2661,"inV":122,"properties":{"weight":17}},{"id":2662,"inV":96,"properties":{"weight":157}},{"id":2663,"inV":104,"properties":{"weight":1}},{"id":2664,"inV":26,"properties":{"weight":14}},{"id":2665,"inV":123,"properties":{"weight":3}},{"id":2666,"inV":19,"properties":{"weight":12}},{"id":2667,"inV":100,"properties":{"weight":5}},{"id":2668,"inV":12,"properties":{"weight":3}},{"id":2669,"inV":49,"properties":{"weight":12}},{"id":2670,"inV":21,"properties":{"weight":4}},{"id":2671,"inV":120,"properties":{"weight":9}},{"id":2672,"in
V":23,"properties":{"weight":5}},{"id":2673,"inV":59,"properties":{"weight":6}},{"id":2674,"inV":54,"properties":{"weight":5}},{"id":2675,"inV":80,"properties":{"weight":1}},{"id":2676,"inV":234,"properties":{"weight":1}},{"id":2677,"inV":53,"properties":{"weight":2}},{"id":2678,"inV":225,"properties":{"weight":1}},{"id":2679,"inV":235,"properties":{"weight":2}},{"id":2680,"inV":160,"properties":{"weight":3}},{"id":2681,"inV":56,"properties":{"weight":3}},{"id":2682,"inV":127,"properties":{"weight":6}},{"id":2683,"inV":18,"properties":{"weight":3}},{"id":2684,"inV":4,"properties":{"weight":9}},{"id":2685,"inV":15,"properties":{"weight":7}},{"id":2686,"inV":74,"properties":{"weight":86}},{"id":2687,"inV":153,"properties":{"weight":12}}],"sungBy":[{"id":7292,"inV":359}],"writtenBy":[{"id":7291,"inV":339}]},"properties":{"name":[{"id":36,"value":"PLAYING IN THE BAND"}],"songType":[{"id":38,"value":"original"}],"performances":[{"id":37,"value":582}]}}
+{"id":14,"label":"song","inE":{"followedBy":[{"id":6784,"outV":39,"properties":{"weight":10}},{"id":5251,"outV":32,"properties":{"weight":1}},{"id":4229,"outV":52,"properties":{"weight":3}},{"id":4745,"outV":294,"properties":{"weight":4}},{"id":10,"outV":9,"properties":{"weight":3}},{"id":6283,"outV":49,"properties":{"weight":2}},{"id":4364,"outV":62,"properties":{"weight":16}},{"id":4109,"outV":48,"properties":{"weight":10}},{"id":6544,"outV":55,"properties":{"weight":1}},{"id":4881,"outV":100,"properties":{"weight":20}},{"id":6034,"outV":115,"properties":{"weight":1}},{"id":531,"outV":120,"properties":{"weight":1}},{"id":3219,"outV":63,"properties":{"weight":2}},{"id":4758,"outV":37,"properties":{"weight":2}},{"id":4247,"outV":10,"properties":{"weight":1}},{"id":4631,"outV":154,"properties":{"weight":6}},{"id":3866,"outV":60,"properties":{"weight":2}},{"id":1947,"outV":148,"properties":{"weight":1}},{"id":1436,"outV":83,"properties":{"weight":7}},{"id":2844,"outV":101,"properties"
:{"weight":1}},{"id":6685,"outV":12,"properties":{"weight":3}},{"id":1183,"outV":26,"properties":{"weight":2}},{"id":160,"outV":108,"properties":{"weight":2}},{"id":4517,"outV":105,"properties":{"weight":6}},{"id":6954,"outV":84,"properties":{"weight":4}},{"id":1451,"outV":81,"properties":{"weight":12}},{"id":1582,"outV":18,"properties":{"weight":4}},{"id":3892,"outV":51,"properties":{"weight":10}},{"id":2107,"outV":17,"properties":{"weight":19}},{"id":5820,"outV":76,"properties":{"weight":1}},{"id":6463,"outV":187,"properties":{"weight":26}},{"id":1090,"outV":59,"properties":{"weight":7}},{"id":1731,"outV":82,"properties":{"weight":4}},{"id":6083,"outV":72,"properties":{"weight":9}},{"id":4037,"outV":173,"properties":{"weight":1}},{"id":2375,"outV":87,"properties":{"weight":8}},{"id":4169,"outV":54,"properties":{"weight":36}},{"id":5578,"outV":42,"properties":{"weight":1}},{"id":716,"outV":80,"properties":{"weight":10}},{"id":5964,"outV":50,"properties":{"weight":2}},{"id":845,"out
V":171,"properties":{"weight":11}},{"id":5709,"outV":20,"properties":{"weight":1}},{"id":5838,"outV":258,"properties":{"weight":1}},{"id":1232,"outV":248,"properties":{"weight":1}},{"id":6993,"outV":175,"properties":{"weight":1}},{"id":3666,"outV":24,"properties":{"weight":2}},{"id":3156,"outV":104,"properties":{"weight":6}},{"id":3796,"outV":88,"properties":{"weight":1}},{"id":6742,"outV":53,"properties":{"weight":15}},{"id":2523,"outV":57,"properties":{"weight":9}},{"id":864,"outV":189,"properties":{"weight":2}},{"id":3556,"outV":56,"properties":{"weight":21}},{"id":102,"outV":46,"properties":{"weight":1}},{"id":5096,"outV":4,"properties":{"weight":2}},{"id":489,"outV":98,"properties":{"weight":3}},{"id":1257,"outV":27,"properties":{"weight":19}},{"id":2030,"outV":180,"properties":{"weight":2}},{"id":2159,"outV":151,"properties":{"weight":1}},{"id":2803,"outV":15,"properties":{"weight":4}},{"id":2935,"outV":78,"properties":{"weight":1}},{"id":2426,"outV":68,"properties":{"weight":
4}},{"id":3962,"outV":106,"properties":{"weight":2}},{"id":4474,"outV":202,"properties":{"weight":1}},{"id":123,"outV":97,"properties":{"weight":1}},{"id":4092,"outV":109,"properties":{"weight":1}},{"id":5628,"outV":22,"properties":{"weight":1}},{"id":1021,"outV":73,"properties":{"weight":20}},{"id":3455,"outV":58,"properties":{"weight":12}}]},"outE":{"followedBy":[{"id":2981,"inV":50,"properties":{"weight":2}},{"id":2982,"inV":4,"properties":{"weight":3}},{"id":2983,"inV":53,"properties":{"weight":8}},{"id":2984,"inV":57,"properties":{"weight":55}},{"id":2985,"inV":89,"properties":{"weight":2}},{"id":2986,"inV":122,"properties":{"weight":1}},{"id":2987,"inV":153,"properties":{"weight":1}},{"id":2988,"inV":72,"properties":{"weight":26}},{"id":2989,"inV":19,"properties":{"weight":17}},{"id":2990,"inV":9,"properties":{"weight":4}},{"id":2991,"inV":17,"properties":{"weight":13}},{"id":2992,"inV":46,"properties":{"weight":5}},{"id":2993,"inV":51,"properties":{"weight":15}},{"id":2994,"i
nV":54,"properties":{"weight":28}},{"id":2995,"inV":202,"properties":{"weight":3}},{"id":2996,"inV":27,"properties":{"weight":6}},{"id":2997,"inV":52,"properties":{"weight":3}},{"id":2998,"inV":58,"properties":{"weight":1}},{"id":2999,"inV":56,"properties":{"weight":8}},{"id":3000,"inV":100,"properties":{"weight":12}},{"id":3001,"inV":99,"properties":{"weight":26}},{"id":3002,"inV":98,"properties":{"weight":3}},{"id":3003,"inV":104,"properties":{"weight":2}},{"id":3004,"inV":82,"properties":{"weight":6}},{"id":3005,"inV":215,"properties":{"weight":1}},{"id":3006,"inV":69,"properties":{"weight":2}},{"id":3007,"inV":103,"properties":{"weight":1}},{"id":3008,"inV":83,"properties":{"weight":8}},{"id":3009,"inV":101,"properties":{"weight":1}},{"id":3010,"inV":80,"properties":{"weight":8}},{"id":3011,"inV":121,"properties":{"weight":3}},{"id":3012,"inV":59,"properties":{"weight":1}},{"id":3013,"inV":26,"properties":{"weight":2}},{"id":3014,"inV":32,"properties":{"weight":2}},{"id":3015,"i
nV":155,"properties":{"weight":1}},{"id":3016,"inV":42,"properties":{"weight":2}},{"id":3017,"inV":18,"properties":{"weight":1}},{"id":3018,"inV":105,"properties":{"weight":11}},{"id":3019,"inV":12,"properties":{"weight":1}},{"id":3020,"inV":49,"properties":{"weight":27}},{"id":3021,"inV":65,"properties":{"weight":2}},{"id":3022,"inV":85,"properties":{"weight":2}},{"id":3023,"inV":73,"properties":{"weight":8}},{"id":3024,"inV":106,"properties":{"weight":3}},{"id":3025,"inV":189,"properties":{"weight":3}},{"id":3026,"inV":10,"properties":{"weight":1}},{"id":3027,"inV":210,"properties":{"weight":3}},{"id":3028,"inV":76,"properties":{"weight":1}},{"id":3029,"inV":87,"properties":{"weight":1}},{"id":3030,"inV":96,"properties":{"weight":1}},{"id":3031,"inV":150,"properties":{"weight":1}},{"id":3032,"inV":66,"properties":{"weight":1}},{"id":3033,"inV":5,"properties":{"weight":1}},{"id":3034,"inV":91,"properties":{"weight":29}},{"id":3035,"inV":60,"properties":{"weight":6}},{"id":3036,"inV
":67,"properties":{"weight":1}},{"id":3037,"inV":74,"properties":{"weight":1}},{"id":3038,"inV":21,"properties":{"weight":1}},{"id":3039,"inV":169,"properties":{"weight":1}},{"id":3040,"inV":62,"properties":{"weight":1}},{"id":3041,"inV":39,"properties":{"weight":2}},{"id":3042,"inV":175,"properties":{"weight":1}},{"id":3043,"inV":172,"properties":{"weight":1}},{"id":3044,"inV":28,"properties":{"weight":5}},{"id":3045,"inV":173,"properties":{"weight":1}},{"id":3046,"inV":37,"properties":{"weight":5}},{"id":3047,"inV":35,"properties":{"weight":2}}],"sungBy":[{"id":7232,"inV":351}],"writtenBy":[{"id":7231,"inV":350}]},"properties":{"name":[{"id":39,"value":"LOOKS LIKE RAIN"}],"songType":[{"id":41,"value":"original"}],"performances":[{"id":40,"value":417}]}}
+{"id":15,"label":"song","inE":{"followedBy":[{"id":1152,"outV":26,"properties":{"weight":1}},{"id":769,"outV":122,"properties":{"weight":3}},{"id":5379,"outV":69,"properties":{"weight":4}},{"id":3844,"outV":60,"properties":{"weight":2}},{"id":1414,"outV":83,"properties":{"weight":2}},{"id":6663,"outV":12,"properties":{"weight":167}},{"id":4872,"outV":100,"properties":{"weight":9}},{"id":4105,"outV":48,"properties":{"weight":4}},{"id":11,"outV":9,"properties":{"weight":3}},{"id":4622,"outV":154,"properties":{"weight":1}},{"id":2833,"outV":101,"properties":{"weight":1}},{"id":2195,"outV":235,"properties":{"weight":1}},{"id":5141,"outV":125,"properties":{"weight":2}},{"id":3224,"outV":63,"properties":{"weight":2}},{"id":1945,"outV":148,"properties":{"weight":2}},{"id":5024,"outV":30,"properties":{"weight":2}},{"id":2597,"outV":112,"properties":{"weight":35}},{"id":1062,"outV":73,"properties":{"weight":1}},{"id":4776,"outV":114,"properties":{"weight":1}},{"id":5032,"outV":47,"properties
":{"weight":1}},{"id":6698,"outV":141,"properties":{"weight":1}},{"id":3885,"outV":51,"properties":{"weight":14}},{"id":1712,"outV":82,"properties":{"weight":4}},{"id":5301,"outV":170,"properties":{"weight":1}},{"id":1847,"outV":94,"properties":{"weight":6}},{"id":4153,"outV":54,"properties":{"weight":7}},{"id":1339,"outV":31,"properties":{"weight":2}},{"id":6075,"outV":72,"properties":{"weight":4}},{"id":60,"outV":46,"properties":{"weight":1}},{"id":2108,"outV":17,"properties":{"weight":8}},{"id":6460,"outV":187,"properties":{"weight":10}},{"id":3653,"outV":24,"properties":{"weight":14}},{"id":3147,"outV":104,"properties":{"weight":2}},{"id":6731,"outV":53,"properties":{"weight":1}},{"id":1101,"outV":59,"properties":{"weight":2}},{"id":4052,"outV":173,"properties":{"weight":1}},{"id":2518,"outV":57,"properties":{"weight":5}},{"id":476,"outV":98,"properties":{"weight":3}},{"id":1372,"outV":130,"properties":{"weight":1}},{"id":1245,"outV":27,"properties":{"weight":5}},{"id":5085,"out
V":4,"properties":{"weight":1}},{"id":2272,"outV":25,"properties":{"weight":4}},{"id":4577,"outV":254,"properties":{"weight":1}},{"id":5735,"outV":129,"properties":{"weight":2}},{"id":3432,"outV":58,"properties":{"weight":7}},{"id":746,"outV":80,"properties":{"weight":1}},{"id":3562,"outV":56,"properties":{"weight":6}},{"id":2411,"outV":68,"properties":{"weight":1}},{"id":2924,"outV":78,"properties":{"weight":3}},{"id":4467,"outV":202,"properties":{"weight":6}},{"id":376,"outV":74,"properties":{"weight":1}},{"id":5242,"outV":32,"properties":{"weight":2}},{"id":6267,"outV":49,"properties":{"weight":1}},{"id":2685,"outV":13,"properties":{"weight":7}}]},"outE":{"followedBy":[{"id":2816,"inV":103,"properties":{"weight":1}},{"id":2817,"inV":62,"properties":{"weight":1}},{"id":2818,"inV":64,"properties":{"weight":1}},{"id":2819,"inV":75,"properties":{"weight":3}},{"id":2820,"inV":152,"properties":{"weight":1}},{"id":2821,"inV":117,"properties":{"weight":1}},{"id":2822,"inV":168,"propertie
s":{"weight":1}},{"id":2823,"inV":188,"properties":{"weight":1}},{"id":2824,"inV":131,"properties":{"weight":4}},{"id":2825,"inV":28,"properties":{"weight":1}},{"id":2826,"inV":124,"properties":{"weight":1}},{"id":2827,"inV":190,"properties":{"weight":1}},{"id":2828,"inV":137,"properties":{"weight":1}},{"id":2755,"inV":19,"properties":{"weight":8}},{"id":2756,"inV":56,"properties":{"weight":22}},{"id":2757,"inV":104,"properties":{"weight":17}},{"id":2758,"inV":49,"properties":{"weight":4}},{"id":2759,"inV":122,"properties":{"weight":3}},{"id":2760,"inV":23,"properties":{"weight":2}},{"id":2761,"inV":27,"properties":{"weight":23}},{"id":2762,"inV":89,"properties":{"weight":7}},{"id":2763,"inV":46,"properties":{"weight":1}},{"id":2764,"inV":57,"properties":{"weight":7}},{"id":2765,"inV":59,"properties":{"weight":6}},{"id":2766,"inV":58,"properties":{"weight":18}},{"id":2767,"inV":54,"properties":{"weight":25}},{"id":2768,"inV":100,"properties":{"weight":24}},{"id":2769,"inV":39,"prope
rties":{"weight":3}},{"id":2770,"inV":160,"properties":{"weight":5}},{"id":2771,"inV":13,"properties":{"weight":3}},{"id":2772,"inV":51,"properties":{"weight":14}},{"id":2773,"inV":94,"properties":{"weight":4}},{"id":2774,"inV":148,"properties":{"weight":1}},{"id":2775,"inV":9,"properties":{"weight":5}},{"id":2776,"inV":48,"properties":{"weight":17}},{"id":2777,"inV":55,"properties":{"weight":1}},{"id":2778,"inV":72,"properties":{"weight":3}},{"id":2779,"inV":52,"properties":{"weight":1}},{"id":2780,"inV":12,"properties":{"weight":3}},{"id":2781,"inV":4,"properties":{"weight":4}},{"id":2782,"inV":83,"properties":{"weight":2}},{"id":2783,"inV":202,"properties":{"weight":6}},{"id":2784,"inV":82,"properties":{"weight":3}},{"id":2785,"inV":74,"properties":{"weight":1}},{"id":2786,"inV":69,"properties":{"weight":7}},{"id":2787,"inV":98,"properties":{"weight":10}},{"id":2788,"inV":21,"properties":{"weight":1}},{"id":2789,"inV":125,"properties":{"weight":1}},{"id":2790,"inV":170,"propertie
s":{"weight":3}},{"id":2791,"inV":26,"properties":{"weight":1}},{"id":2792,"inV":60,"properties":{"weight":1}},{"id":2793,"inV":294,"properties":{"weight":2}},{"id":2794,"inV":99,"properties":{"weight":3}},{"id":2795,"inV":17,"properties":{"weight":10}},{"id":2796,"inV":63,"properties":{"weight":5}},{"id":2797,"inV":68,"properties":{"weight":3}},{"id":2798,"inV":108,"properties":{"weight":6}},{"id":2799,"inV":109,"properties":{"weight":1}},{"id":2800,"inV":196,"properties":{"weight":3}},{"id":2801,"inV":91,"properties":{"weight":1}},{"id":2802,"inV":18,"properties":{"weight":1}},{"id":2803,"inV":14,"properties":{"weight":4}},{"id":2804,"inV":105,"properties":{"weight":8}},{"id":2805,"inV":101,"properties":{"weight":2}},{"id":2806,"inV":10,"properties":{"weight":2}},{"id":2807,"inV":73,"properties":{"weight":26}},{"id":2808,"inV":78,"properties":{"weight":1}},{"id":2809,"inV":32,"properties":{"weight":3}},{"id":2810,"inV":106,"properties":{"weight":2}},{"id":2811,"inV":180,"propertie
s":{"weight":2}},{"id":2812,"inV":88,"properties":{"weight":1}},{"id":2813,"inV":97,"properties":{"weight":1}},{"id":2814,"inV":53,"properties":{"weight":3}},{"id":2815,"inV":115,"properties":{"weight":4}}],"sungBy":[{"id":7472,"inV":351}],"writtenBy":[{"id":7471,"inV":479}]},"properties":{"name":[{"id":42,"value":"BIG RIVER"}],"songType":[{"id":44,"value":"cover"}],"performances":[{"id":43,"value":397}]}}
+{"id":16,"label":"song","inE":{"followedBy":[{"id":7008,"outV":89,"properties":{"weight":1}},{"id":6467,"outV":187,"properties":{"weight":1}},{"id":4101,"outV":48,"properties":{"weight":1}},{"id":5637,"outV":22,"properties":{"weight":3}},{"id":6341,"outV":21,"properties":{"weight":1}},{"id":5382,"outV":69,"properties":{"weight":4}},{"id":3273,"outV":160,"properties":{"weight":2}},{"id":6537,"outV":55,"properties":{"weight":1}},{"id":3882,"outV":51,"properties":{"weight":12}},{"id":12,"outV":9,"properties":{"weight":1}},{"id":1260,"outV":27,"properties":{"weight":1}},{"id":4172,"outV":54,"properties":{"weight":1}},{"id":6285,"outV":49,"properties":{"weight":1}},{"id":368,"outV":74,"properties":{"weight":1}},{"id":4464,"outV":202,"properties":{"weight":1}},{"id":468,"outV":195,"properties":{"weight":3}},{"id":5303,"outV":170,"properties":{"weight":2}},{"id":472,"outV":98,"properties":{"weight":2}},{"id":2521,"outV":57,"properties":{"weight":1}},{"id":5081,"outV":4,"properties":{"weigh
t":2}},{"id":5146,"outV":125,"properties":{"weight":1}},{"id":1405,"outV":83,"properties":{"weight":5}},{"id":1854,"outV":94,"properties":{"weight":2}},{"id":1950,"outV":148,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2169,"inV":25,"properties":{"weight":1}},{"id":2170,"inV":101,"properties":{"weight":46}},{"id":2171,"inV":89,"properties":{"weight":2}},{"id":2172,"inV":130,"properties":{"weight":1}},{"id":2173,"inV":83,"properties":{"weight":1}}]},"properties":{"name":[{"id":45,"value":"WEATHER REPORT SUITE"}],"songType":[{"id":47,"value":""}],"performances":[{"id":46,"value":0}]}}
+{"id":17,"label":"song","inE":{"followedBy":[{"id":5955,"outV":50,"properties":{"weight":43}},{"id":5702,"outV":20,"properties":{"weight":2}},{"id":2696,"outV":13,"properties":{"weight":2}},{"id":6538,"outV":55,"properties":{"weight":1}},{"id":1163,"outV":26,"properties":{"weight":34}},{"id":13,"outV":9,"properties":{"weight":1}},{"id":402,"outV":38,"properties":{"weight":12}},{"id":5011,"outV":30,"properties":{"weight":3}},{"id":6675,"outV":12,"properties":{"weight":3}},{"id":1877,"outV":103,"properties":{"weight":2}},{"id":2522,"outV":57,"properties":{"weight":1}},{"id":475,"outV":98,"properties":{"weight":1}},{"id":3803,"outV":88,"properties":{"weight":4}},{"id":540,"outV":120,"properties":{"weight":1}},{"id":2588,"outV":112,"properties":{"weight":3}},{"id":3996,"outV":106,"properties":{"weight":1}},{"id":990,"outV":11,"properties":{"weight":3}},{"id":1570,"outV":18,"properties":{"weight":6}},{"id":2275,"outV":25,"properties":{"weight":1}},{"id":4262,"outV":10,"properties":{"weig
ht":5}},{"id":2795,"outV":15,"properties":{"weight":10}},{"id":6955,"outV":84,"properties":{"weight":1}},{"id":2413,"outV":68,"properties":{"weight":9}},{"id":4077,"outV":109,"properties":{"weight":1}},{"id":2991,"outV":14,"properties":{"weight":13}},{"id":4912,"outV":100,"properties":{"weight":1}},{"id":3639,"outV":24,"properties":{"weight":13}},{"id":6583,"outV":116,"properties":{"weight":1}},{"id":58,"outV":46,"properties":{"weight":2}},{"id":635,"outV":23,"properties":{"weight":16}},{"id":5244,"outV":32,"properties":{"weight":19}},{"id":2942,"outV":78,"properties":{"weight":1}},{"id":6847,"outV":64,"properties":{"weight":7}}]},"outE":{"followedBy":[{"id":2112,"inV":24,"properties":{"weight":9}},{"id":2113,"inV":21,"properties":{"weight":1}},{"id":2114,"inV":46,"properties":{"weight":1}},{"id":2115,"inV":20,"properties":{"weight":2}},{"id":2116,"inV":10,"properties":{"weight":7}},{"id":2117,"inV":68,"properties":{"weight":25}},{"id":2118,"inV":32,"properties":{"weight":19}},{"id"
:2119,"inV":103,"properties":{"weight":3}},{"id":2120,"inV":121,"properties":{"weight":3}},{"id":2121,"inV":112,"properties":{"weight":31}},{"id":2122,"inV":85,"properties":{"weight":1}},{"id":2123,"inV":101,"properties":{"weight":1}},{"id":2124,"inV":109,"properties":{"weight":1}},{"id":2125,"inV":73,"properties":{"weight":1}},{"id":2126,"inV":88,"properties":{"weight":8}},{"id":2127,"inV":111,"properties":{"weight":3}},{"id":2128,"inV":54,"properties":{"weight":2}},{"id":2129,"inV":97,"properties":{"weight":2}},{"id":2130,"inV":100,"properties":{"weight":1}},{"id":2131,"inV":42,"properties":{"weight":1}},{"id":2132,"inV":58,"properties":{"weight":2}},{"id":2133,"inV":244,"properties":{"weight":1}},{"id":2134,"inV":56,"properties":{"weight":1}},{"id":2135,"inV":63,"properties":{"weight":1}},{"id":2136,"inV":188,"properties":{"weight":2}},{"id":2137,"inV":71,"properties":{"weight":1}},{"id":2138,"inV":30,"properties":{"weight":2}},{"id":2139,"inV":31,"properties":{"weight":1}},{"id"
:2140,"inV":77,"properties":{"weight":2}},{"id":2141,"inV":40,"properties":{"weight":1}},{"id":2142,"inV":33,"properties":{"weight":1}},{"id":2103,"inV":18,"properties":{"weight":17}},{"id":2104,"inV":39,"properties":{"weight":2}},{"id":2105,"inV":22,"properties":{"weight":4}},{"id":2106,"inV":50,"properties":{"weight":6}},{"id":2107,"inV":14,"properties":{"weight":19}},{"id":2108,"inV":15,"properties":{"weight":8}},{"id":2109,"inV":12,"properties":{"weight":24}},{"id":2110,"inV":23,"properties":{"weight":2}},{"id":2111,"inV":13,"properties":{"weight":4}}],"sungBy":[{"id":7364,"inV":340}],"writtenBy":[{"id":7363,"inV":339}]},"properties":{"name":[{"id":48,"value":"THEY LOVE EACH OTHER"}],"songType":[{"id":50,"value":"original"}],"performances":[{"id":49,"value":227}]}}
+{"id":18,"label":"song","inE":{"followedBy":[{"id":1024,"outV":73,"properties":{"weight":4}},{"id":4097,"outV":48,"properties":{"weight":13}},{"id":6276,"outV":49,"properties":{"weight":2}},{"id":2309,"outV":25,"properties":{"weight":1}},{"id":3333,"outV":155,"properties":{"weight":1}},{"id":4231,"outV":52,"properties":{"weight":1}},{"id":4360,"outV":62,"properties":{"weight":1}},{"id":3849,"outV":60,"properties":{"weight":1}},{"id":5257,"outV":32,"properties":{"weight":3}},{"id":5385,"outV":69,"properties":{"weight":2}},{"id":2189,"outV":235,"properties":{"weight":1}},{"id":14,"outV":9,"properties":{"weight":5}},{"id":654,"outV":23,"properties":{"weight":1}},{"id":5010,"outV":30,"properties":{"weight":2}},{"id":6546,"outV":55,"properties":{"weight":1}},{"id":4885,"outV":100,"properties":{"weight":11}},{"id":1814,"outV":273,"properties":{"weight":1}},{"id":1943,"outV":148,"properties":{"weight":1}},{"id":5145,"outV":125,"properties":{"weight":1}},{"id":6688,"outV":12,"properties":{"
weight":1}},{"id":4642,"outV":154,"properties":{"weight":3}},{"id":2852,"outV":101,"properties":{"weight":1}},{"id":4260,"outV":10,"properties":{"weight":3}},{"id":3238,"outV":63,"properties":{"weight":1}},{"id":6695,"outV":141,"properties":{"weight":1}},{"id":3880,"outV":51,"properties":{"weight":12}},{"id":425,"outV":38,"properties":{"weight":2}},{"id":1193,"outV":26,"properties":{"weight":1}},{"id":2601,"outV":112,"properties":{"weight":1}},{"id":4524,"outV":105,"properties":{"weight":3}},{"id":45,"outV":46,"properties":{"weight":3}},{"id":4015,"outV":292,"properties":{"weight":1}},{"id":560,"outV":120,"properties":{"weight":1}},{"id":5299,"outV":170,"properties":{"weight":3}},{"id":6579,"outV":116,"properties":{"weight":1}},{"id":1716,"outV":82,"properties":{"weight":3}},{"id":4404,"outV":40,"properties":{"weight":1}},{"id":5429,"outV":315,"properties":{"weight":1}},{"id":4150,"outV":218,"properties":{"weight":1}},{"id":2103,"outV":17,"properties":{"weight":17}},{"id":4152,"outV
":54,"properties":{"weight":18}},{"id":6456,"outV":187,"properties":{"weight":8}},{"id":1849,"outV":94,"properties":{"weight":6}},{"id":827,"outV":171,"properties":{"weight":1}},{"id":6715,"outV":53,"properties":{"weight":6}},{"id":6205,"outV":319,"properties":{"weight":1}},{"id":1086,"outV":59,"properties":{"weight":21}},{"id":5439,"outV":239,"properties":{"weight":1}},{"id":6080,"outV":72,"properties":{"weight":3}},{"id":1986,"outV":152,"properties":{"weight":1}},{"id":3270,"outV":160,"properties":{"weight":1}},{"id":5192,"outV":99,"properties":{"weight":1}},{"id":3017,"outV":14,"properties":{"weight":1}},{"id":1356,"outV":31,"properties":{"weight":1}},{"id":3148,"outV":104,"properties":{"weight":19}},{"id":4044,"outV":173,"properties":{"weight":4}},{"id":5073,"outV":4,"properties":{"weight":4}},{"id":4692,"outV":33,"properties":{"weight":1}},{"id":5716,"outV":20,"properties":{"weight":1}},{"id":2517,"outV":57,"properties":{"weight":11}},{"id":5973,"outV":50,"properties":{"weight"
:5}},{"id":3671,"outV":24,"properties":{"weight":3}},{"id":473,"outV":98,"properties":{"weight":6}},{"id":729,"outV":80,"properties":{"weight":5}},{"id":5850,"outV":61,"properties":{"weight":1}},{"id":1244,"outV":27,"properties":{"weight":16}},{"id":3807,"outV":88,"properties":{"weight":1}},{"id":3553,"outV":56,"properties":{"weight":16}},{"id":866,"outV":189,"properties":{"weight":1}},{"id":5602,"outV":42,"properties":{"weight":1}},{"id":355,"outV":74,"properties":{"weight":1}},{"id":3431,"outV":58,"properties":{"weight":8}},{"id":4967,"outV":207,"properties":{"weight":1}},{"id":7016,"outV":89,"properties":{"weight":3}},{"id":1642,"outV":213,"properties":{"weight":1}},{"id":2029,"outV":180,"properties":{"weight":1}},{"id":6765,"outV":39,"properties":{"weight":7}},{"id":6384,"outV":65,"properties":{"weight":1}},{"id":2802,"outV":15,"properties":{"weight":1}},{"id":3315,"outV":252,"properties":{"weight":1}},{"id":4851,"outV":119,"properties":{"weight":1}},{"id":3064,"outV":153,"prope
rties":{"weight":2}},{"id":1401,"outV":190,"properties":{"weight":2}},{"id":2683,"outV":13,"properties":{"weight":3}},{"id":4476,"outV":202,"properties":{"weight":3}},{"id":2431,"outV":68,"properties":{"weight":3}}]},"outE":{"followedBy":[{"id":1536,"inV":59,"properties":{"weight":5}},{"id":1537,"inV":19,"properties":{"weight":17}},{"id":1538,"inV":100,"properties":{"weight":16}},{"id":1539,"inV":122,"properties":{"weight":6}},{"id":1540,"inV":46,"properties":{"weight":4}},{"id":1541,"inV":47,"properties":{"weight":1}},{"id":1542,"inV":74,"properties":{"weight":1}},{"id":1543,"inV":53,"properties":{"weight":7}},{"id":1544,"inV":94,"properties":{"weight":2}},{"id":1545,"inV":58,"properties":{"weight":13}},{"id":1546,"inV":57,"properties":{"weight":10}},{"id":1547,"inV":25,"properties":{"weight":1}},{"id":1548,"inV":39,"properties":{"weight":3}},{"id":1549,"inV":54,"properties":{"weight":29}},{"id":1550,"inV":120,"properties":{"weight":1}},{"id":1551,"inV":152,"properties":{"weight":1
}},{"id":1552,"inV":89,"properties":{"weight":3}},{"id":1553,"inV":148,"properties":{"weight":1}},{"id":1554,"inV":252,"properties":{"weight":1}},{"id":1555,"inV":225,"properties":{"weight":1}},{"id":1556,"inV":80,"properties":{"weight":2}},{"id":1557,"inV":56,"properties":{"weight":11}},{"id":1558,"inV":27,"properties":{"weight":16}},{"id":1559,"inV":26,"properties":{"weight":1}},{"id":1560,"inV":206,"properties":{"weight":1}},{"id":1561,"inV":72,"properties":{"weight":5}},{"id":1562,"inV":23,"properties":{"weight":3}},{"id":1563,"inV":49,"properties":{"weight":3}},{"id":1564,"inV":51,"properties":{"weight":26}},{"id":1565,"inV":55,"properties":{"weight":2}},{"id":1566,"inV":202,"properties":{"weight":6}},{"id":1567,"inV":13,"properties":{"weight":3}},{"id":1568,"inV":83,"properties":{"weight":4}},{"id":1569,"inV":160,"properties":{"weight":2}},{"id":1570,"inV":17,"properties":{"weight":6}},{"id":1571,"inV":10,"properties":{"weight":5}},{"id":1572,"inV":9,"properties":{"weight":3}}
,{"id":1573,"inV":125,"properties":{"weight":2}},{"id":1574,"inV":98,"properties":{"weight":4}},{"id":1575,"inV":170,"properties":{"weight":5}},{"id":1576,"inV":69,"properties":{"weight":3}},{"id":1577,"inV":21,"properties":{"weight":1}},{"id":1578,"inV":82,"properties":{"weight":2}},{"id":1579,"inV":196,"properties":{"weight":1}},{"id":1580,"inV":104,"properties":{"weight":9}},{"id":1581,"inV":108,"properties":{"weight":4}},{"id":1582,"inV":14,"properties":{"weight":4}},{"id":1583,"inV":32,"properties":{"weight":4}},{"id":1584,"inV":50,"properties":{"weight":1}},{"id":1585,"inV":48,"properties":{"weight":7}},{"id":1586,"inV":101,"properties":{"weight":1}},{"id":1587,"inV":105,"properties":{"weight":5}},{"id":1588,"inV":208,"properties":{"weight":1}},{"id":1589,"inV":103,"properties":{"weight":2}},{"id":1590,"inV":42,"properties":{"weight":1}},{"id":1591,"inV":63,"properties":{"weight":2}},{"id":1592,"inV":24,"properties":{"weight":2}},{"id":1593,"inV":73,"properties":{"weight":7}},
{"id":1594,"inV":222,"properties":{"weight":1}},{"id":1595,"inV":106,"properties":{"weight":1}},{"id":1596,"inV":189,"properties":{"weight":2}},{"id":1597,"inV":112,"properties":{"weight":1}},{"id":1598,"inV":68,"properties":{"weight":2}},{"id":1599,"inV":121,"properties":{"weight":1}},{"id":1600,"inV":180,"properties":{"weight":2}},{"id":1601,"inV":199,"properties":{"weight":1}},{"id":1602,"inV":88,"properties":{"weight":2}},{"id":1603,"inV":128,"properties":{"weight":1}},{"id":1604,"inV":60,"properties":{"weight":1}},{"id":1605,"inV":12,"properties":{"weight":1}},{"id":1606,"inV":75,"properties":{"weight":2}},{"id":1607,"inV":168,"properties":{"weight":1}},{"id":1608,"inV":175,"properties":{"weight":1}},{"id":1609,"inV":254,"properties":{"weight":1}},{"id":1610,"inV":174,"properties":{"weight":4}},{"id":1611,"inV":137,"properties":{"weight":1}},{"id":1612,"inV":173,"properties":{"weight":1}},{"id":1535,"inV":235,"properties":{"weight":1}}],"sungBy":[{"id":7554,"inV":351}],"written
By":[{"id":7553,"inV":528}]},"properties":{"name":[{"id":51,"value":"EL PASO"}],"songType":[{"id":53,"value":"cover"}],"performances":[{"id":52,"value":388}]}}
+{"id":19,"label":"song","inE":{"followedBy":[{"id":1537,"outV":18,"properties":{"weight":17}},{"id":3969,"outV":106,"properties":{"weight":1}},{"id":6657,"outV":12,"properties":{"weight":3}},{"id":4098,"outV":48,"properties":{"weight":1}},{"id":6532,"outV":242,"properties":{"weight":1}},{"id":1159,"outV":26,"properties":{"weight":21}},{"id":6152,"outV":36,"properties":{"weight":6}},{"id":394,"outV":74,"properties":{"weight":1}},{"id":522,"outV":120,"properties":{"weight":2}},{"id":5130,"outV":222,"properties":{"weight":1}},{"id":3467,"outV":58,"properties":{"weight":8}},{"id":15,"outV":9,"properties":{"weight":1}},{"id":272,"outV":150,"properties":{"weight":1}},{"id":4880,"outV":100,"properties":{"weight":1}},{"id":5267,"outV":32,"properties":{"weight":12}},{"id":4245,"outV":10,"properties":{"weight":9}},{"id":790,"outV":122,"properties":{"weight":1}},{"id":2841,"outV":101,"properties":{"weight":18}},{"id":3097,"outV":153,"properties":{"weight":3}},{"id":411,"outV":38,"properties":{
"weight":6}},{"id":2335,"outV":290,"properties":{"weight":2}},{"id":5535,"outV":43,"properties":{"weight":1}},{"id":1825,"outV":41,"properties":{"weight":1}},{"id":3874,"outV":60,"properties":{"weight":1}},{"id":4770,"outV":114,"properties":{"weight":4}},{"id":6308,"outV":123,"properties":{"weight":1}},{"id":2086,"outV":188,"properties":{"weight":1}},{"id":2215,"outV":75,"properties":{"weight":1}},{"id":5801,"outV":76,"properties":{"weight":5}},{"id":42,"outV":46,"properties":{"weight":5}},{"id":3628,"outV":24,"properties":{"weight":9}},{"id":2989,"outV":14,"properties":{"weight":17}},{"id":5167,"outV":71,"properties":{"weight":1}},{"id":6831,"outV":64,"properties":{"weight":7}},{"id":2354,"outV":87,"properties":{"weight":2}},{"id":5938,"outV":50,"properties":{"weight":19}},{"id":951,"outV":67,"properties":{"weight":2}},{"id":3511,"outV":223,"properties":{"weight":1}},{"id":1848,"outV":94,"properties":{"weight":1}},{"id":314,"outV":34,"properties":{"weight":2}},{"id":2621,"outV":158
,"properties":{"weight":2}},{"id":1472,"outV":81,"properties":{"weight":1}},{"id":6081,"outV":72,"properties":{"weight":24}},{"id":6978,"outV":175,"properties":{"weight":2}},{"id":2755,"outV":15,"properties":{"weight":8}},{"id":5701,"outV":20,"properties":{"weight":4}},{"id":3275,"outV":160,"properties":{"weight":2}},{"id":4171,"outV":54,"properties":{"weight":3}},{"id":206,"outV":70,"properties":{"weight":1}},{"id":4558,"outV":105,"properties":{"weight":1}},{"id":5200,"outV":99,"properties":{"weight":19}},{"id":5457,"outV":79,"properties":{"weight":4}},{"id":979,"outV":11,"properties":{"weight":9}},{"id":1620,"outV":210,"properties":{"weight":4}},{"id":5590,"outV":42,"properties":{"weight":4}},{"id":3799,"outV":88,"properties":{"weight":7}},{"id":4450,"outV":113,"properties":{"weight":1}},{"id":4962,"outV":207,"properties":{"weight":1}},{"id":6370,"outV":21,"properties":{"weight":1}},{"id":1763,"outV":28,"properties":{"weight":1}},{"id":2405,"outV":45,"properties":{"weight":1}},{"i
d":2279,"outV":25,"properties":{"weight":4}},{"id":2408,"outV":68,"properties":{"weight":5}},{"id":5864,"outV":96,"properties":{"weight":1}},{"id":2666,"outV":13,"properties":{"weight":12}},{"id":1900,"outV":103,"properties":{"weight":22}},{"id":3564,"outV":56,"properties":{"weight":2}},{"id":5102,"outV":4,"properties":{"weight":6}},{"id":1776,"outV":234,"properties":{"weight":7}},{"id":4976,"outV":236,"properties":{"weight":3}},{"id":2546,"outV":57,"properties":{"weight":28}},{"id":627,"outV":23,"properties":{"weight":3}},{"id":4083,"outV":109,"properties":{"weight":4}},{"id":4470,"outV":202,"properties":{"weight":2}},{"id":5622,"outV":22,"properties":{"weight":3}},{"id":6391,"outV":65,"properties":{"weight":2}},{"id":6394,"outV":136,"properties":{"weight":1}},{"id":4349,"outV":62,"properties":{"weight":1}},{"id":126,"outV":97,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":3139,"inV":187,"properties":{"weight":402}},{"id":3140,"inV":39,"properties":{"weight":1}},{"id":314
1,"inV":60,"properties":{"weight":1}}],"sungBy":[{"id":7100,"inV":340}],"writtenBy":[{"id":7099,"inV":339}]},"properties":{"name":[{"id":54,"value":"CHINA CAT SUNFLOWER"}],"songType":[{"id":56,"value":"original"}],"performances":[{"id":55,"value":554}]}}
+{"id":20,"label":"song","inE":{"followedBy":[{"id":5376,"outV":69,"properties":{"weight":1}},{"id":6592,"outV":116,"properties":{"weight":1}},{"id":2115,"outV":17,"properties":{"weight":2}},{"id":6084,"outV":72,"properties":{"weight":3}},{"id":4170,"outV":54,"properties":{"weight":4}},{"id":2955,"outV":78,"properties":{"weight":1}},{"id":1100,"outV":59,"properties":{"weight":5}},{"id":1164,"outV":26,"properties":{"weight":1}},{"id":2061,"outV":92,"properties":{"weight":1}},{"id":718,"outV":80,"properties":{"weight":2}},{"id":6543,"outV":55,"properties":{"weight":1}},{"id":6735,"outV":53,"properties":{"weight":1}},{"id":16,"outV":9,"properties":{"weight":1}},{"id":1809,"outV":199,"properties":{"weight":1}},{"id":3282,"outV":160,"properties":{"weight":1}},{"id":3609,"outV":56,"properties":{"weight":1}},{"id":1818,"outV":273,"properties":{"weight":1}},{"id":4894,"outV":100,"properties":{"weight":1}},{"id":479,"outV":98,"properties":{"weight":3}},{"id":2527,"outV":57,"properties":{"weig
ht":3}},{"id":2027,"outV":180,"properties":{"weight":3}},{"id":3883,"outV":51,"properties":{"weight":4}},{"id":2287,"outV":25,"properties":{"weight":1}},{"id":4783,"outV":114,"properties":{"weight":1}},{"id":3442,"outV":58,"properties":{"weight":2}},{"id":4340,"outV":62,"properties":{"weight":1}},{"id":5300,"outV":170,"properties":{"weight":1}},{"id":5047,"outV":209,"properties":{"weight":1}},{"id":56,"outV":46,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5699,"inV":51,"properties":{"weight":6}},{"id":5700,"inV":100,"properties":{"weight":4}},{"id":5701,"inV":19,"properties":{"weight":4}},{"id":5702,"inV":17,"properties":{"weight":2}},{"id":5703,"inV":56,"properties":{"weight":2}},{"id":5704,"inV":39,"properties":{"weight":1}},{"id":5705,"inV":52,"properties":{"weight":1}},{"id":5706,"inV":94,"properties":{"weight":1}},{"id":5707,"inV":58,"properties":{"weight":3}},{"id":5708,"inV":59,"properties":{"weight":3}},{"id":5709,"inV":14,"properties":{"weight":1}},{"id":5710,"i
nV":55,"properties":{"weight":1}},{"id":5711,"inV":47,"properties":{"weight":1}},{"id":5712,"inV":27,"properties":{"weight":1}},{"id":5713,"inV":82,"properties":{"weight":1}},{"id":5714,"inV":83,"properties":{"weight":1}},{"id":5715,"inV":98,"properties":{"weight":2}},{"id":5716,"inV":18,"properties":{"weight":1}},{"id":5717,"inV":170,"properties":{"weight":2}},{"id":5718,"inV":180,"properties":{"weight":1}},{"id":5719,"inV":273,"properties":{"weight":2}},{"id":5720,"inV":199,"properties":{"weight":1}},{"id":5721,"inV":73,"properties":{"weight":1}},{"id":5722,"inV":197,"properties":{"weight":1}},{"id":5723,"inV":222,"properties":{"weight":1}},{"id":5724,"inV":104,"properties":{"weight":1}},{"id":5725,"inV":118,"properties":{"weight":1}},{"id":5726,"inV":215,"properties":{"weight":1}},{"id":5727,"inV":80,"properties":{"weight":1}},{"id":5728,"inV":173,"properties":{"weight":1}}],"sungBy":[{"id":7854,"inV":351}],"writtenBy":[{"id":7853,"inV":699}]},"properties":{"name":[{"id":57,"valu
e":"THE RACE IS ON"}],"songType":[{"id":59,"value":"cover"}],"performances":[{"id":58,"value":59}]}}
+{"id":21,"label":"song","inE":{"followedBy":[{"id":5634,"outV":22,"properties":{"weight":3}},{"id":5384,"outV":69,"properties":{"weight":20}},{"id":777,"outV":122,"properties":{"weight":7}},{"id":907,"outV":174,"properties":{"weight":1}},{"id":3981,"outV":106,"properties":{"weight":1}},{"id":6413,"outV":134,"properties":{"weight":18}},{"id":3088,"outV":153,"properties":{"weight":1}},{"id":17,"outV":9,"properties":{"weight":1}},{"id":5137,"outV":125,"properties":{"weight":6}},{"id":4754,"outV":37,"properties":{"weight":6}},{"id":1427,"outV":83,"properties":{"weight":1}},{"id":3859,"outV":60,"properties":{"weight":12}},{"id":4888,"outV":100,"properties":{"weight":1}},{"id":6555,"outV":172,"properties":{"weight":2}},{"id":1949,"outV":148,"properties":{"weight":6}},{"id":3234,"outV":63,"properties":{"weight":1}},{"id":6179,"outV":36,"properties":{"weight":1}},{"id":932,"outV":91,"properties":{"weight":1}},{"id":2471,"outV":68,"properties":{"weight":1}},{"id":4519,"outV":105,"properties"
:{"weight":1}},{"id":4775,"outV":114,"properties":{"weight":5}},{"id":1577,"outV":18,"properties":{"weight":1}},{"id":4650,"outV":154,"properties":{"weight":2}},{"id":5035,"outV":47,"properties":{"weight":1}},{"id":44,"outV":46,"properties":{"weight":2}},{"id":1711,"outV":82,"properties":{"weight":2}},{"id":816,"outV":171,"properties":{"weight":11}},{"id":5680,"outV":167,"properties":{"weight":1}},{"id":945,"outV":67,"properties":{"weight":2}},{"id":3633,"outV":24,"properties":{"weight":1}},{"id":6705,"outV":141,"properties":{"weight":2}},{"id":6450,"outV":187,"properties":{"weight":8}},{"id":6195,"outV":232,"properties":{"weight":2}},{"id":1845,"outV":94,"properties":{"weight":8}},{"id":3896,"outV":51,"properties":{"weight":1}},{"id":5305,"outV":170,"properties":{"weight":1}},{"id":6202,"outV":319,"properties":{"weight":3}},{"id":1981,"outV":281,"properties":{"weight":1}},{"id":4030,"outV":173,"properties":{"weight":2}},{"id":3263,"outV":160,"properties":{"weight":4}},{"id":1089,"o
utV":59,"properties":{"weight":4}},{"id":2113,"outV":17,"properties":{"weight":1}},{"id":6722,"outV":53,"properties":{"weight":1}},{"id":2371,"outV":87,"properties":{"weight":2}},{"id":2500,"outV":90,"properties":{"weight":1}},{"id":5060,"outV":257,"properties":{"weight":1}},{"id":5957,"outV":50,"properties":{"weight":2}},{"id":6981,"outV":175,"properties":{"weight":5}},{"id":4166,"outV":54,"properties":{"weight":6}},{"id":713,"outV":80,"properties":{"weight":1}},{"id":3789,"outV":168,"properties":{"weight":1}},{"id":6605,"outV":127,"properties":{"weight":1}},{"id":5070,"outV":128,"properties":{"weight":1}},{"id":2512,"outV":57,"properties":{"weight":3}},{"id":2896,"outV":101,"properties":{"weight":1}},{"id":467,"outV":194,"properties":{"weight":1}},{"id":2645,"outV":137,"properties":{"weight":3}},{"id":470,"outV":195,"properties":{"weight":1}},{"id":1240,"outV":183,"properties":{"weight":1}},{"id":1368,"outV":130,"properties":{"weight":10}},{"id":1752,"outV":28,"properties":{"weigh
t":8}},{"id":2904,"outV":118,"properties":{"weight":1}},{"id":6105,"outV":72,"properties":{"weight":1}},{"id":1242,"outV":27,"properties":{"weight":5}},{"id":5212,"outV":99,"properties":{"weight":1}},{"id":3038,"outV":14,"properties":{"weight":1}},{"id":2271,"outV":25,"properties":{"weight":4}},{"id":5855,"outV":61,"properties":{"weight":1}},{"id":2016,"outV":149,"properties":{"weight":8}},{"id":4451,"outV":113,"properties":{"weight":1}},{"id":484,"outV":98,"properties":{"weight":2}},{"id":2788,"outV":15,"properties":{"weight":1}},{"id":3433,"outV":58,"properties":{"weight":3}},{"id":5738,"outV":129,"properties":{"weight":2}},{"id":5866,"outV":96,"properties":{"weight":96}},{"id":4588,"outV":85,"properties":{"weight":5}},{"id":238,"outV":145,"properties":{"weight":1}},{"id":2670,"outV":13,"properties":{"weight":4}},{"id":4462,"outV":202,"properties":{"weight":2}},{"id":7022,"outV":89,"properties":{"weight":1}},{"id":5359,"outV":132,"properties":{"weight":2}},{"id":6768,"outV":39,"pr
operties":{"weight":2}},{"id":2162,"outV":151,"properties":{"weight":1}},{"id":3190,"outV":104,"properties":{"weight":1}},{"id":2040,"outV":92,"properties":{"weight":2}},{"id":3705,"outV":3,"properties":{"weight":2}},{"id":3322,"outV":252,"properties":{"weight":1}},{"id":5114,"outV":4,"properties":{"weight":1}},{"id":4347,"outV":62,"properties":{"weight":3}},{"id":4859,"outV":35,"properties":{"weight":4}},{"id":1148,"outV":26,"properties":{"weight":3}},{"id":6268,"outV":49,"properties":{"weight":51}},{"id":637,"outV":23,"properties":{"weight":3}},{"id":382,"outV":74,"properties":{"weight":4}}]},"outE":{"followedBy":[{"id":6319,"inV":59,"properties":{"weight":3}},{"id":6320,"inV":96,"properties":{"weight":72}},{"id":6321,"inV":319,"prope
<TRUNCATED>
[09/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
new file mode 100644
index 0000000..e614a7a
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
@@ -0,0 +1,229 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.annotation.JsonTypeInfo;
+import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
+import org.apache.tinkerpop.shaded.jackson.core.JsonToken;
+import org.apache.tinkerpop.shaded.jackson.databind.BeanProperty;
+import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
+import org.apache.tinkerpop.shaded.jackson.databind.JavaType;
+import org.apache.tinkerpop.shaded.jackson.databind.JsonDeserializer;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeDeserializer;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeIdResolver;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.impl.TypeDeserializerBase;
+import org.apache.tinkerpop.shaded.jackson.databind.type.TypeFactory;
+import org.apache.tinkerpop.shaded.jackson.databind.util.TokenBuffer;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Contains main logic for the whole JSON to Java deserialization. Handles types embedded with the version 2.0 of GraphSON.
+ *
+ * @author Kevin Gallardo (https://kgdo.me)
+ */
+public class GraphSONTypeDeserializer extends TypeDeserializerBase {
+ private final TypeIdResolver idRes;
+ private final String propertyName;
+ private final String valuePropertyName;
+ private final JavaType baseType;
+ private final TypeInfo typeInfo;
+
+ private static final JavaType mapJavaType = TypeFactory.defaultInstance().constructType(Map.class);
+ private static final JavaType arrayJavaType = TypeFactory.defaultInstance().constructType(List.class);
+
+
+ GraphSONTypeDeserializer(JavaType baseType, TypeIdResolver idRes, String typePropertyName,
+ TypeInfo typeInfo, String valuePropertyName){
+ super(baseType, idRes, typePropertyName, false, null);
+ this.baseType = baseType;
+ this.idRes = idRes;
+ this.propertyName = typePropertyName;
+ this.typeInfo = typeInfo;
+ this.valuePropertyName = valuePropertyName;
+ }
+
+ @Override
+ public TypeDeserializer forProperty(BeanProperty beanProperty) {
+ return this;
+ }
+
+ @Override
+ public JsonTypeInfo.As getTypeInclusion() {
+ return JsonTypeInfo.As.WRAPPER_ARRAY;
+ }
+
+
+ @Override
+ public TypeIdResolver getTypeIdResolver() {
+ return idRes;
+ }
+
+ @Override
+ public Class<?> getDefaultImpl() {
+ return null;
+ }
+
+ @Override
+ public Object deserializeTypedFromObject(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+ return deserialize(jsonParser, deserializationContext);
+ }
+
+ @Override
+ public Object deserializeTypedFromArray(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+ return deserialize(jsonParser, deserializationContext);
+ }
+
+ @Override
+ public Object deserializeTypedFromScalar(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+ return deserialize(jsonParser, deserializationContext);
+ }
+
+ @Override
+ public Object deserializeTypedFromAny(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+ return deserialize(jsonParser, deserializationContext);
+ }
+
+ /**
+ * Main logic for the deserialization.
+ */
+ private Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+ TokenBuffer buf = new TokenBuffer(jsonParser.getCodec(), false);
+ TokenBuffer localCopy = new TokenBuffer(jsonParser.getCodec(), false);
+
+ // Detect type
+ try {
+ // The Type pattern is START_OBJECT -> TEXT_FIELD(propertyName) && TEXT_FIELD(valueProp).
+ if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
+ buf.writeStartObject();
+ String typeName = null;
+ boolean valueCalled = false;
+
+ for (int i = 0; i < 2; i++) {
+ String nextFieldName = jsonParser.nextFieldName();
+ if (nextFieldName == null) {
+ // empty map or less than 2 fields.
+ break;
+ }
+ if (!nextFieldName.equals(this.propertyName) && !nextFieldName.equals(this.valuePropertyName)) {
+ // no type, go out.
+ break;
+ }
+
+ if (nextFieldName.equals(this.propertyName)) {
+ typeName = jsonParser.nextTextValue();
+ // keeping the spare buffer up to date in case it's a false detection (only the "@type" property)
+ buf.writeStringField(this.propertyName, typeName);
+ continue;
+ }
+ if (nextFieldName.equals(this.valuePropertyName)) {
+ jsonParser.nextValue();
+ // keeping the spare buffer up to date in case it's a false detection (only the "@value" property)
+ buf.writeFieldName(this.valuePropertyName);
+ // this is not greatly efficient, would need to find better
+ // but the problem is that the fields "@value" and "@type" could be in any order
+ localCopy.copyCurrentStructure(jsonParser);
+ valueCalled = true;
+ continue;
+ }
+ }
+
+ if (typeName != null && valueCalled) {
+ // Type pattern detected.
+ JavaType typeFromId = idRes.typeFromId(typeName);
+
+ if (!baseType.isJavaLangObject() && baseType != typeFromId) {
+ throw new InstantiationException(
+ String.format("Cannot deserialize the value with the detected type contained in the JSON ('%s') " +
+ "to the type specified in parameter to the object mapper (%s). " +
+ "Those types are incompatible.", typeName, baseType.getRawClass().toString())
+ );
+ }
+
+ JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(typeFromId, null);
+
+ JsonParser tokenParser = localCopy.asParser();
+ tokenParser.nextToken();
+ Object value = jsonDeserializer.deserialize(tokenParser, deserializationContext);
+
+ JsonToken t = jsonParser.nextToken();
+ if (t == JsonToken.END_OBJECT) {
+ // we're good to go
+ return value;
+ } else {
+ // detected the type pattern entirely but the Map contained other properties
+ // For now we error out because we assume that pattern is *only* reserved to
+ // typed values.
+ throw deserializationContext.mappingException("Detected the type pattern in the JSON payload " +
+ "but the map containing the types and values contains other fields. This is not " +
+ "allowed by the deserializer.");
+ }
+ }
+ }
+ } catch (Exception e) {
+ throw deserializationContext.mappingException("Could not deserialize the JSON value as required. Nested exception: " + e.toString());
+ }
+
+ // While searching for the type pattern, we may have moved the cursor of the original JsonParser in param.
+ // To compensate, we have filled consistently a TokenBuffer that should contain the equivalent of
+ // what we skipped while searching for the pattern.
+ // This has a huge positive impact on performances, since JsonParser does not have a 'rewind()',
+ // the only other solution would have been to copy the whole original JsonParser. Which we avoid here and use
+ // an efficient structure made of TokenBuffer + JsonParserSequence/Concat.
+
+ // Concatenate buf + localCopy + end of original content
+
+ JsonParser toUseParser;
+ JsonParser bufferParser = buf.asParser();
+ JsonParser localCopyParser = localCopy.asParser();
+
+
+ JsonParser[] array = {bufferParser, localCopyParser, jsonParser};
+
+ toUseParser = new JsonParserConcat(array);
+ toUseParser.nextToken();
+
+ // If a type has been specified in parameter :
+ if (!baseType.isJavaLangObject()) {
+ JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(baseType, null);
+ return jsonDeserializer.deserialize(toUseParser, deserializationContext);
+ }
+ // Otherwise, detect the current structure :
+ else {
+ if (toUseParser.isExpectedStartArrayToken()) {
+ return deserializationContext.findContextualValueDeserializer(arrayJavaType, null).deserialize(toUseParser, deserializationContext);
+ } else if (toUseParser.isExpectedStartObjectToken()) {
+ return deserializationContext.findContextualValueDeserializer(mapJavaType, null).deserialize(toUseParser, deserializationContext);
+ } else {
+ // There's JavaLangObject in param, there's no type detected in the payload, the payload isn't a JSON Map or JSON List
+ // then consider it a simple type, even though we shouldn't be here if it was a simple type.
+ // TODO : maybe throw an error instead?
+ // throw deserializationContext.mappingException("Roger, we have a problem deserializing");
+ JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(baseType, null);
+ return jsonDeserializer.deserialize(toUseParser, deserializationContext);
+ }
+ }
+ }
+
+ private boolean canReadTypeId() {
+ return this.typeInfo == TypeInfo.PARTIAL_TYPES;
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
new file mode 100644
index 0000000..3edff73
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.annotation.JsonTypeInfo;
+import org.apache.tinkerpop.shaded.jackson.databind.DatabindContext;
+import org.apache.tinkerpop.shaded.jackson.databind.JavaType;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeIdResolver;
+import org.apache.tinkerpop.shaded.jackson.databind.type.TypeFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Provides quick lookup for Type deserialization extracted from the JSON payload. As well as the Java Object to types
+ * compatible for the version 2.0 of GraphSON.
+ *
+ * @author Kevin Gallardo (https://kgdo.me)
+ */
+public class GraphSONTypeIdResolver implements TypeIdResolver {
+
+ private final Map<String, JavaType> idToType = new HashMap<>();
+
+ private final Map<Class, String> typeToId = new HashMap<>();
+
+ public Map<String, JavaType> getIdToType() {
+ return idToType;
+ }
+
+ public Map<Class, String> getTypeToId() {
+ return typeToId;
+ }
+
+ // Override manually a type definition.
+ public GraphSONTypeIdResolver addCustomType(String name, Class clasz) {
+ // May override types already registered, that's wanted.
+ getIdToType().put(name, TypeFactory.defaultInstance().constructType(clasz));
+ getTypeToId().put(clasz, name);
+ return this;
+ }
+
+ @Override
+ public void init(JavaType javaType) {
+ }
+
+ @Override
+ public String idFromValue(Object o) {
+ return idFromValueAndType(o, o.getClass());
+ }
+
+ @Override
+ public String idFromValueAndType(Object o, Class<?> aClass) {
+ if (!getTypeToId().containsKey(aClass)) {
+ // If one wants to serialize an object with a type, but hasn't registered
+ // a typeID for that class, fail.
+ throw new IllegalArgumentException(String.format("Could not find a type identifier for the class : %s. " +
+ "Make sure the value to serialize has a type identifier registered for its class.", aClass));
+ } else {
+ return getTypeToId().get(aClass);
+ }
+ }
+
+ @Override
+ public String idFromBaseType() {
+ return null;
+ }
+
+ @Override
+ public JavaType typeFromId(String s) {
+ return typeFromId(null, s);
+ }
+
+ @Override
+ public JavaType typeFromId(DatabindContext databindContext, String s) {
+ // Get the type from the string from the stored Map. If not found, default to deserialize as a String.
+ return getIdToType().containsKey(s)
+ ? getIdToType().get(s)
+ // TODO: shouldn't we fail instead, if the type is not found? Or log something?
+ : TypeFactory.defaultInstance().constructType(String.class);
+ }
+
+ @Override
+ public String getDescForKnownTypeIds() {
+ // TODO: Not sure what to put here.
+ return "GraphSON advanced typing system";
+ }
+
+ @Override
+ public JsonTypeInfo.Id getMechanism() {
+ return JsonTypeInfo.Id.CUSTOM;
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java
new file mode 100644
index 0000000..001dd02
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.databind.DeserializationConfig;
+import org.apache.tinkerpop.shaded.jackson.databind.JavaType;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializationConfig;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.NamedType;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeDeserializer;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeIdResolver;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.impl.StdTypeResolverBuilder;
+
+import java.util.Collection;
+
+/**
+ * Creates the Type serializers as well as the Typed deserializers that will be provided to the serializers and
+ * deserializers. Contains the typeInfo level that should be provided by the GraphSONMapper.
+ *
+ * @author Kevin Gallardo (https://kgdo.me)
+ */
+public class GraphSONTypeResolverBuilder extends StdTypeResolverBuilder {
+
+ private TypeInfo typeInfo;
+ private String valuePropertyName;
+
+ @Override
+ public TypeDeserializer buildTypeDeserializer(DeserializationConfig config, JavaType baseType, Collection<NamedType> subtypes) {
+ TypeIdResolver idRes = this.idResolver(config, baseType, subtypes, false, true);
+ return new GraphSONTypeDeserializer(baseType, idRes, this.getTypeProperty(), typeInfo, valuePropertyName);
+ }
+
+
+ @Override
+ public TypeSerializer buildTypeSerializer(SerializationConfig config, JavaType baseType, Collection<NamedType> subtypes) {
+ TypeIdResolver idRes = this.idResolver(config, baseType, subtypes, true, false);
+ return new GraphSONTypeSerializer(idRes, this.getTypeProperty(), typeInfo, valuePropertyName);
+ }
+
+ public GraphSONTypeResolverBuilder valuePropertyName(String valuePropertyName) {
+ this.valuePropertyName = valuePropertyName;
+ return this;
+ }
+
+ public GraphSONTypeResolverBuilder typesEmbedding(TypeInfo typeInfo) {
+ this.typeInfo = typeInfo;
+ return this;
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
new file mode 100644
index 0000000..98cf16a
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
@@ -0,0 +1,197 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
+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.shaded.jackson.annotation.JsonTypeInfo;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.databind.BeanProperty;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeIdResolver;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+/**
+ * Extension of the Jackson's default TypeSerializer. An instance of this object will be passed to the serializers
+ * on which they can safely call the utility methods to serialize types and making it compatible with the version
+ * 2.0 of GraphSON.
+ *
+ * @author Kevin Gallardo (https://kgdo.me)
+ */
+public class GraphSONTypeSerializer extends TypeSerializer {
+
+ private final TypeIdResolver idRes;
+ private final String propertyName;
+ private final TypeInfo typeInfo;
+ private final String valuePropertyName;
+
+ GraphSONTypeSerializer(TypeIdResolver idRes, String propertyName, TypeInfo typeInfo, String valuePropertyName) {
+ this.idRes = idRes;
+ this.propertyName = propertyName;
+ this.typeInfo = typeInfo;
+ this.valuePropertyName = valuePropertyName;
+ }
+
+ @Override
+ public TypeSerializer forProperty(BeanProperty beanProperty) {
+ return this;
+ }
+
+ @Override
+ public JsonTypeInfo.As getTypeInclusion() {
+ return null;
+ }
+
+ @Override
+ public String getPropertyName() {
+ return propertyName;
+ }
+
+ @Override
+ public TypeIdResolver getTypeIdResolver() {
+ return idRes;
+ }
+
+ @Override
+ public void writeTypePrefixForScalar(Object o, JsonGenerator jsonGenerator) throws IOException {
+ if (canWriteTypeId()) {
+ writeTypePrefix(jsonGenerator, getTypeIdResolver().idFromValueAndType(o, getClassFromObject(o)));
+ }
+ }
+
+ @Override
+ public void writeTypePrefixForObject(Object o, JsonGenerator jsonGenerator) throws IOException {
+ jsonGenerator.writeStartObject();
+ // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(Map);
+ }
+
+ @Override
+ public void writeTypePrefixForArray(Object o, JsonGenerator jsonGenerator) throws IOException {
+ jsonGenerator.writeStartArray();
+ // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(List);
+ }
+
+ @Override
+ public void writeTypeSuffixForScalar(Object o, JsonGenerator jsonGenerator) throws IOException {
+ if (canWriteTypeId()) {
+ writeTypeSuffix(jsonGenerator);
+ }
+ }
+
+ @Override
+ public void writeTypeSuffixForObject(Object o, JsonGenerator jsonGenerator) throws IOException {
+ jsonGenerator.writeEndObject();
+ // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(Map);
+ }
+
+ @Override
+ public void writeTypeSuffixForArray(Object o, JsonGenerator jsonGenerator) throws IOException {
+ jsonGenerator.writeEndArray();
+ // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(List);
+ }
+
+ @Override
+ public void writeCustomTypePrefixForScalar(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+ if (canWriteTypeId()) {
+ writeTypePrefix(jsonGenerator, s);
+ }
+ }
+
+ @Override
+ public void writeCustomTypePrefixForObject(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+ jsonGenerator.writeStartObject();
+ // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(s);
+ }
+
+ @Override
+ public void writeCustomTypePrefixForArray(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+ jsonGenerator.writeStartArray();
+ // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(s);
+ }
+
+ @Override
+ public void writeCustomTypeSuffixForScalar(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+ if (canWriteTypeId()) {
+ writeTypeSuffix(jsonGenerator);
+ }
+ }
+
+ @Override
+ public void writeCustomTypeSuffixForObject(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+ jsonGenerator.writeEndObject();
+ // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(s);
+ }
+
+ @Override
+ public void writeCustomTypeSuffixForArray(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+ jsonGenerator.writeEndArray();
+ // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(s);
+ }
+
+ private boolean canWriteTypeId() {
+ return typeInfo != null
+ && typeInfo == TypeInfo.PARTIAL_TYPES;
+ }
+
+ private void writeTypePrefix(JsonGenerator jsonGenerator, String s) throws IOException {
+ jsonGenerator.writeStartObject();
+ jsonGenerator.writeStringField(this.getPropertyName(), s);
+ jsonGenerator.writeFieldName(this.valuePropertyName);
+ }
+
+ private void writeTypeSuffix(JsonGenerator jsonGenerator) throws IOException {
+ jsonGenerator.writeEndObject();
+ }
+
+ /* We force only **one** translation of a Java object to a domain specific object.
+ i.e. users register typeIDs and serializers/deserializers for the predefined
+ types we have in the spec. Graph, Vertex, Edge, VertexProperty, etc... And
+ **not** their implementations (TinkerGraph, DetachedVertex, TinkerEdge,
+ etc..)
+ */
+ private Class getClassFromObject(Object o) {
+ // not the most efficient
+ Class c = o.getClass();
+ if (Vertex.class.isAssignableFrom(c)) {
+ return Vertex.class;
+ } else if (Edge.class.isAssignableFrom(c)) {
+ return Edge.class;
+ } else if (Path.class.isAssignableFrom(c)) {
+ return Path.class;
+ } else if (VertexProperty.class.isAssignableFrom(c)) {
+ return VertexProperty.class;
+ } else if (Metrics.class.isAssignableFrom(c)) {
+ return Metrics.class;
+ } else if (TraversalMetrics.class.isAssignableFrom(c)) {
+ return TraversalMetrics.class;
+ } else if (Property.class.isAssignableFrom(c)) {
+ return Property.class;
+ } else if (ByteBuffer.class.isAssignableFrom(c)) {
+ return ByteBuffer.class;
+ }
+ return c;
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java
index 9ff427c..548bca1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java
@@ -55,4 +55,41 @@ public final class GraphSONUtil {
serializer.serialize(object, jsonGenerator, serializerProvider);
}
}
+
+ public static void writeStartObject(Object o, JsonGenerator jsonGenerator, TypeSerializer typeSerializer) throws IOException {
+ if (typeSerializer != null)
+ typeSerializer.writeTypePrefixForObject(o, jsonGenerator);
+ else
+ jsonGenerator.writeStartObject();
+ }
+
+ public static void writeEndObject(Object o, JsonGenerator jsonGenerator, TypeSerializer typeSerializer) throws IOException {
+ if (typeSerializer != null)
+ typeSerializer.writeTypeSuffixForObject(o, jsonGenerator);
+ else
+ jsonGenerator.writeEndObject();
+ }
+
+ public static void writeStartArray(Object o, JsonGenerator jsonGenerator, TypeSerializer typeSerializer) throws IOException {
+ if (typeSerializer != null)
+ typeSerializer.writeTypePrefixForArray(o, jsonGenerator);
+ else
+ jsonGenerator.writeStartArray();
+ }
+
+
+ public static void writeEndArray(Object o, JsonGenerator jsonGenerator, TypeSerializer typeSerializer) throws IOException {
+ if (typeSerializer != null)
+ typeSerializer.writeTypeSuffixForArray(o, jsonGenerator);
+ else
+ jsonGenerator.writeEndArray();
+ }
+
+ static void safeWriteObjectField(JsonGenerator jsonGenerator, String key, Object value) {
+ try {
+ jsonGenerator.writeObjectField(key, value);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONVersion.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONVersion.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONVersion.java
index 628ea22..7740b06 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONVersion.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONVersion.java
@@ -24,7 +24,8 @@ package org.apache.tinkerpop.gremlin.structure.io.graphson;
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
public enum GraphSONVersion {
- V1_0(GraphSONModule.GraphSONModuleV1d0.build(), "1.0");
+ V1_0(GraphSONModule.GraphSONModuleV1d0.build(), "1.0"),
+ V2_0(GraphSONModule.GraphSONModuleV2d0.build(), "2.0");
private final GraphSONModule.GraphSONModuleBuilder builder;
private final String versionNumber;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONWriter.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONWriter.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONWriter.java
index 37ed9a0..6980b48 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONWriter.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONWriter.java
@@ -27,11 +27,16 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
import org.apache.tinkerpop.gremlin.structure.io.GraphWriter;
import org.apache.tinkerpop.gremlin.structure.io.Mapper;
+import org.apache.tinkerpop.gremlin.structure.util.star.DirectionalStarGraph;
import org.apache.tinkerpop.gremlin.structure.util.star.StarGraph;
-import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializer;
import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
-import java.io.*;
+import java.io.BufferedWriter;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
import java.util.Iterator;
import java.util.function.Function;
@@ -74,7 +79,7 @@ public final class GraphSONWriter implements GraphWriter {
*/
@Override
public void writeVertex(final OutputStream outputStream, final Vertex v, final Direction direction) throws IOException {
- mapper.writeValue(outputStream, new StarGraphGraphSONSerializer.DirectionalStarGraph(StarGraph.of(v), direction));
+ mapper.writeValue(outputStream, new DirectionalStarGraph(StarGraph.of(v), direction));
}
/**
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializers.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializers.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializers.java
deleted file mode 100644
index 7ceae94..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializers.java
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.structure.io.graphson;
-
-import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
-import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
-import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
-import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
-import org.apache.tinkerpop.shaded.jackson.databind.deser.std.StdDeserializer;
-import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
-
-import java.io.IOException;
-import java.time.Duration;
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.MonthDay;
-import java.time.OffsetDateTime;
-import java.time.OffsetTime;
-import java.time.Period;
-import java.time.Year;
-import java.time.YearMonth;
-import java.time.ZoneOffset;
-import java.time.ZonedDateTime;
-
-/**
- * GraphSON serializers for classes in {@code java.time.*}.
- */
-final class JavaTimeSerializers {
-
- private JavaTimeSerializers() {}
-
- /**
- * Base class for serializing the {@code java.time.*} to ISO-8061 formats.
- */
- static abstract class AbstractJavaTimeSerializer<T> extends StdSerializer<T> {
-
- public AbstractJavaTimeSerializer(final Class<T> clazz) {
- super(clazz);
- }
-
- @Override
- public void serialize(final T value, final JsonGenerator gen,
- final SerializerProvider serializerProvider) throws IOException {
- gen.writeString(value.toString());
- }
-
- @Override
- public void serializeWithType(final T value, final JsonGenerator gen,
- final SerializerProvider serializers, final TypeSerializer typeSer) throws IOException {
- typeSer.writeTypePrefixForObject(value, gen);
- gen.writeStringField(GraphSONTokens.VALUE, value.toString());
- typeSer.writeTypeSuffixForObject(value, gen);
- }
- }
- /**
- * Base class for serializing the {@code java.time.*} from ISO-8061 formats.
- */
- abstract static class AbstractJavaTimeJacksonDeserializer<T> extends StdDeserializer<T> {
- public AbstractJavaTimeJacksonDeserializer(final Class<T> clazz) {
- super(clazz);
- }
-
- public abstract T parse(final String val);
-
- @Override
- public T deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
- if (!jsonParser.getText().equals(GraphSONTokens.VALUE))
- throw new IOException(String.format("Invalid format for %s - expecting '%s' with a text value in ISO-8061 format", _valueClass.getSimpleName(), GraphSONTokens.VALUE));
-
- return parse(jsonParser.nextTextValue());
- }
- }
-
- final static class DurationJacksonSerializer extends AbstractJavaTimeSerializer<Duration> {
-
- public DurationJacksonSerializer() {
- super(Duration.class);
- }
- }
-
- final static class DurationJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Duration> {
- public DurationJacksonDeserializer() {
- super(Duration.class);
- }
-
- @Override
- public Duration parse(final String val) {
- return Duration.parse(val);
- }
- }
-
- final static class InstantJacksonSerializer extends AbstractJavaTimeSerializer<Instant> {
-
- public InstantJacksonSerializer() {
- super(Instant.class);
- }
- }
-
- final static class InstantJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Instant> {
- public InstantJacksonDeserializer() {
- super(Instant.class);
- }
-
- @Override
- public Instant parse(final String val) {
- return Instant.parse(val);
- }
- }
-
- final static class LocalDateJacksonSerializer extends AbstractJavaTimeSerializer<LocalDate> {
-
- public LocalDateJacksonSerializer() {
- super(LocalDate.class);
- }
- }
-
- final static class LocalDateJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalDate> {
- public LocalDateJacksonDeserializer() {
- super(LocalDate.class);
- }
-
- @Override
- public LocalDate parse(final String val) {
- return LocalDate.parse(val);
- }
- }
-
- final static class LocalDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<LocalDateTime> {
-
- public LocalDateTimeJacksonSerializer() {
- super(LocalDateTime.class);
- }
- }
-
- final static class LocalDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalDateTime> {
- public LocalDateTimeJacksonDeserializer() {
- super(LocalDateTime.class);
- }
-
- @Override
- public LocalDateTime parse(final String val) {
- return LocalDateTime.parse(val);
- }
- }
-
- final static class LocalTimeJacksonSerializer extends AbstractJavaTimeSerializer<LocalTime> {
-
- public LocalTimeJacksonSerializer() {
- super(LocalTime.class);
- }
- }
-
- final static class LocalTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalTime> {
- public LocalTimeJacksonDeserializer() {
- super(LocalTime.class);
- }
-
- @Override
- public LocalTime parse(final String val) {
- return LocalTime.parse(val);
- }
- }
-
- final static class MonthDayJacksonSerializer extends AbstractJavaTimeSerializer<MonthDay> {
-
- public MonthDayJacksonSerializer() {
- super(MonthDay.class);
- }
- }
-
- final static class MonthDayJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<MonthDay> {
- public MonthDayJacksonDeserializer() {
- super(MonthDay.class);
- }
-
- @Override
- public MonthDay parse(final String val) {
- return MonthDay.parse(val);
- }
- }
-
- final static class OffsetDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<OffsetDateTime> {
-
- public OffsetDateTimeJacksonSerializer() {
- super(OffsetDateTime.class);
- }
- }
-
- final static class OffsetDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<OffsetDateTime> {
- public OffsetDateTimeJacksonDeserializer() {
- super(OffsetDateTime.class);
- }
-
- @Override
- public OffsetDateTime parse(final String val) {
- return OffsetDateTime.parse(val);
- }
- }
-
- final static class OffsetTimeJacksonSerializer extends AbstractJavaTimeSerializer<OffsetTime> {
-
- public OffsetTimeJacksonSerializer() {
- super(OffsetTime.class);
- }
- }
-
- final static class OffsetTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<OffsetTime> {
- public OffsetTimeJacksonDeserializer() {
- super(OffsetTime.class);
- }
-
- @Override
- public OffsetTime parse(final String val) {
- return OffsetTime.parse(val);
- }
- }
-
- final static class PeriodJacksonSerializer extends AbstractJavaTimeSerializer<Period> {
-
- public PeriodJacksonSerializer() {
- super(Period.class);
- }
- }
-
- final static class PeriodJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Period> {
- public PeriodJacksonDeserializer() {
- super(Period.class);
- }
-
- @Override
- public Period parse(final String val) {
- return Period.parse(val);
- }
- }
-
- final static class YearJacksonSerializer extends AbstractJavaTimeSerializer<Year> {
-
- public YearJacksonSerializer() {
- super(Year.class);
- }
- }
-
- final static class YearJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Year> {
- public YearJacksonDeserializer() {
- super(Year.class);
- }
-
- @Override
- public Year parse(final String val) {
- return Year.parse(val);
- }
- }
-
- final static class YearMonthJacksonSerializer extends AbstractJavaTimeSerializer<YearMonth> {
-
- public YearMonthJacksonSerializer() {
- super(YearMonth.class);
- }
- }
-
- final static class YearMonthJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<YearMonth> {
- public YearMonthJacksonDeserializer() {
- super(YearMonth.class);
- }
-
- @Override
- public YearMonth parse(final String val) {
- return YearMonth.parse(val);
- }
- }
-
- final static class ZonedDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<ZonedDateTime> {
-
- public ZonedDateTimeJacksonSerializer() {
- super(ZonedDateTime.class);
- }
- }
-
- final static class ZonedDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<ZonedDateTime> {
- public ZonedDateTimeJacksonDeserializer() {
- super(ZonedDateTime.class);
- }
-
- @Override
- public ZonedDateTime parse(final String val) {
- return ZonedDateTime.parse(val);
- }
- }
-
- final static class ZoneOffsetJacksonSerializer extends AbstractJavaTimeSerializer<ZoneOffset> {
-
- public ZoneOffsetJacksonSerializer() {
- super(ZoneOffset.class);
- }
- }
-
- final static class ZoneOffsetJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<ZoneOffset> {
- public ZoneOffsetJacksonDeserializer() {
- super(ZoneOffset.class);
- }
-
- @Override
- public ZoneOffset parse(final String val) {
- return ZoneOffset.of(val);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV1d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV1d0.java
new file mode 100644
index 0000000..763c1d9
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV1d0.java
@@ -0,0 +1,326 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
+import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.deser.std.StdDeserializer;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+
+import java.io.IOException;
+import java.time.Duration;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.MonthDay;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.Period;
+import java.time.Year;
+import java.time.YearMonth;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+
+/**
+ * GraphSON serializers for classes in {@code java.time.*}.
+ */
+final class JavaTimeSerializersV1d0 {
+
+ private JavaTimeSerializersV1d0() {}
+
+ /**
+ * Base class for serializing the {@code java.time.*} to ISO-8061 formats.
+ */
+ static abstract class AbstractJavaTimeSerializer<T> extends StdSerializer<T> {
+
+ public AbstractJavaTimeSerializer(final Class<T> clazz) {
+ super(clazz);
+ }
+
+ @Override
+ public void serialize(final T value, final JsonGenerator gen,
+ final SerializerProvider serializerProvider) throws IOException {
+ gen.writeString(value.toString());
+ }
+
+ @Override
+ public void serializeWithType(final T value, final JsonGenerator gen,
+ final SerializerProvider serializers, final TypeSerializer typeSer) throws IOException {
+ typeSer.writeTypePrefixForObject(value, gen);
+ gen.writeStringField(GraphSONTokens.VALUE, value.toString());
+ typeSer.writeTypeSuffixForObject(value, gen);
+ }
+ }
+ /**
+ * Base class for serializing the {@code java.time.*} from ISO-8061 formats.
+ */
+ abstract static class AbstractJavaTimeJacksonDeserializer<T> extends StdDeserializer<T> {
+ public AbstractJavaTimeJacksonDeserializer(final Class<T> clazz) {
+ super(clazz);
+ }
+
+ public abstract T parse(final String val);
+
+ @Override
+ public T deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
+ if (!jsonParser.getText().equals(GraphSONTokens.VALUE))
+ throw new IOException(String.format("Invalid format for %s - expecting '%s' with a text value in ISO-8061 format", _valueClass.getSimpleName(), GraphSONTokens.VALUE));
+
+ return parse(jsonParser.nextTextValue());
+ }
+ }
+
+ final static class DurationJacksonSerializer extends AbstractJavaTimeSerializer<Duration> {
+
+ public DurationJacksonSerializer() {
+ super(Duration.class);
+ }
+ }
+
+ final static class DurationJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Duration> {
+ public DurationJacksonDeserializer() {
+ super(Duration.class);
+ }
+
+ @Override
+ public Duration parse(final String val) {
+ return Duration.parse(val);
+ }
+ }
+
+ final static class InstantJacksonSerializer extends AbstractJavaTimeSerializer<Instant> {
+
+ public InstantJacksonSerializer() {
+ super(Instant.class);
+ }
+ }
+
+ final static class InstantJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Instant> {
+ public InstantJacksonDeserializer() {
+ super(Instant.class);
+ }
+
+ @Override
+ public Instant parse(final String val) {
+ return Instant.parse(val);
+ }
+ }
+
+ final static class LocalDateJacksonSerializer extends AbstractJavaTimeSerializer<LocalDate> {
+
+ public LocalDateJacksonSerializer() {
+ super(LocalDate.class);
+ }
+ }
+
+ final static class LocalDateJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalDate> {
+ public LocalDateJacksonDeserializer() {
+ super(LocalDate.class);
+ }
+
+ @Override
+ public LocalDate parse(final String val) {
+ return LocalDate.parse(val);
+ }
+ }
+
+ final static class LocalDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<LocalDateTime> {
+
+ public LocalDateTimeJacksonSerializer() {
+ super(LocalDateTime.class);
+ }
+ }
+
+ final static class LocalDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalDateTime> {
+ public LocalDateTimeJacksonDeserializer() {
+ super(LocalDateTime.class);
+ }
+
+ @Override
+ public LocalDateTime parse(final String val) {
+ return LocalDateTime.parse(val);
+ }
+ }
+
+ final static class LocalTimeJacksonSerializer extends AbstractJavaTimeSerializer<LocalTime> {
+
+ public LocalTimeJacksonSerializer() {
+ super(LocalTime.class);
+ }
+ }
+
+ final static class LocalTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalTime> {
+ public LocalTimeJacksonDeserializer() {
+ super(LocalTime.class);
+ }
+
+ @Override
+ public LocalTime parse(final String val) {
+ return LocalTime.parse(val);
+ }
+ }
+
+ final static class MonthDayJacksonSerializer extends AbstractJavaTimeSerializer<MonthDay> {
+
+ public MonthDayJacksonSerializer() {
+ super(MonthDay.class);
+ }
+ }
+
+ final static class MonthDayJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<MonthDay> {
+ public MonthDayJacksonDeserializer() {
+ super(MonthDay.class);
+ }
+
+ @Override
+ public MonthDay parse(final String val) {
+ return MonthDay.parse(val);
+ }
+ }
+
+ final static class OffsetDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<OffsetDateTime> {
+
+ public OffsetDateTimeJacksonSerializer() {
+ super(OffsetDateTime.class);
+ }
+ }
+
+ final static class OffsetDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<OffsetDateTime> {
+ public OffsetDateTimeJacksonDeserializer() {
+ super(OffsetDateTime.class);
+ }
+
+ @Override
+ public OffsetDateTime parse(final String val) {
+ return OffsetDateTime.parse(val);
+ }
+ }
+
+ final static class OffsetTimeJacksonSerializer extends AbstractJavaTimeSerializer<OffsetTime> {
+
+ public OffsetTimeJacksonSerializer() {
+ super(OffsetTime.class);
+ }
+ }
+
+ final static class OffsetTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<OffsetTime> {
+ public OffsetTimeJacksonDeserializer() {
+ super(OffsetTime.class);
+ }
+
+ @Override
+ public OffsetTime parse(final String val) {
+ return OffsetTime.parse(val);
+ }
+ }
+
+ final static class PeriodJacksonSerializer extends AbstractJavaTimeSerializer<Period> {
+
+ public PeriodJacksonSerializer() {
+ super(Period.class);
+ }
+ }
+
+ final static class PeriodJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Period> {
+ public PeriodJacksonDeserializer() {
+ super(Period.class);
+ }
+
+ @Override
+ public Period parse(final String val) {
+ return Period.parse(val);
+ }
+ }
+
+ final static class YearJacksonSerializer extends AbstractJavaTimeSerializer<Year> {
+
+ public YearJacksonSerializer() {
+ super(Year.class);
+ }
+ }
+
+ final static class YearJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Year> {
+ public YearJacksonDeserializer() {
+ super(Year.class);
+ }
+
+ @Override
+ public Year parse(final String val) {
+ return Year.parse(val);
+ }
+ }
+
+ final static class YearMonthJacksonSerializer extends AbstractJavaTimeSerializer<YearMonth> {
+
+ public YearMonthJacksonSerializer() {
+ super(YearMonth.class);
+ }
+ }
+
+ final static class YearMonthJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<YearMonth> {
+ public YearMonthJacksonDeserializer() {
+ super(YearMonth.class);
+ }
+
+ @Override
+ public YearMonth parse(final String val) {
+ return YearMonth.parse(val);
+ }
+ }
+
+ final static class ZonedDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<ZonedDateTime> {
+
+ public ZonedDateTimeJacksonSerializer() {
+ super(ZonedDateTime.class);
+ }
+ }
+
+ final static class ZonedDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<ZonedDateTime> {
+ public ZonedDateTimeJacksonDeserializer() {
+ super(ZonedDateTime.class);
+ }
+
+ @Override
+ public ZonedDateTime parse(final String val) {
+ return ZonedDateTime.parse(val);
+ }
+ }
+
+ final static class ZoneOffsetJacksonSerializer extends AbstractJavaTimeSerializer<ZoneOffset> {
+
+ public ZoneOffsetJacksonSerializer() {
+ super(ZoneOffset.class);
+ }
+ }
+
+ final static class ZoneOffsetJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<ZoneOffset> {
+ public ZoneOffsetJacksonDeserializer() {
+ super(ZoneOffset.class);
+ }
+
+ @Override
+ public ZoneOffset parse(final String val) {
+ return ZoneOffset.of(val);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV2d0.java
new file mode 100644
index 0000000..2950a33
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV2d0.java
@@ -0,0 +1,323 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
+import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.deser.std.StdDeserializer;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+
+import java.io.IOException;
+import java.time.Duration;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.MonthDay;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.Period;
+import java.time.Year;
+import java.time.YearMonth;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+
+/**
+ * GraphSON serializers for classes in {@code java.time.*} for the version 2.0 of GraphSON.
+ */
+final class JavaTimeSerializersV2d0 {
+
+ private JavaTimeSerializersV2d0() {}
+
+ /**
+ * Base class for serializing the {@code java.time.*} to ISO-8061 formats.
+ */
+ static abstract class AbstractJavaTimeSerializer<T> extends StdSerializer<T> {
+
+ public AbstractJavaTimeSerializer(final Class<T> clazz) {
+ super(clazz);
+ }
+
+ @Override
+ public void serialize(final T value, final JsonGenerator gen,
+ final SerializerProvider serializerProvider) throws IOException {
+ gen.writeString(value.toString());
+ }
+
+ @Override
+ public void serializeWithType(final T value, final JsonGenerator gen,
+ final SerializerProvider serializers, final TypeSerializer typeSer) throws IOException {
+ typeSer.writeTypePrefixForScalar(value, gen);
+ gen.writeString(value.toString());
+ typeSer.writeTypeSuffixForScalar(value, gen);
+ }
+ }
+ /**
+ * Base class for serializing the {@code java.time.*} from ISO-8061 formats.
+ */
+ abstract static class AbstractJavaTimeJacksonDeserializer<T> extends StdDeserializer<T> {
+ public AbstractJavaTimeJacksonDeserializer(final Class<T> clazz) {
+ super(clazz);
+ }
+
+ public abstract T parse(final String val);
+
+ @Override
+ public T deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
+ return parse(jsonParser.getText());
+ }
+ }
+
+ final static class DurationJacksonSerializer extends AbstractJavaTimeSerializer<Duration> {
+
+ public DurationJacksonSerializer() {
+ super(Duration.class);
+ }
+ }
+
+ final static class DurationJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Duration> {
+ public DurationJacksonDeserializer() {
+ super(Duration.class);
+ }
+
+ @Override
+ public Duration parse(final String val) {
+ return Duration.parse(val);
+ }
+ }
+
+ final static class InstantJacksonSerializer extends AbstractJavaTimeSerializer<Instant> {
+
+ public InstantJacksonSerializer() {
+ super(Instant.class);
+ }
+ }
+
+ final static class InstantJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Instant> {
+ public InstantJacksonDeserializer() {
+ super(Instant.class);
+ }
+
+ @Override
+ public Instant parse(final String val) {
+ return Instant.parse(val);
+ }
+ }
+
+ final static class LocalDateJacksonSerializer extends AbstractJavaTimeSerializer<LocalDate> {
+
+ public LocalDateJacksonSerializer() {
+ super(LocalDate.class);
+ }
+ }
+
+ final static class LocalDateJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalDate> {
+ public LocalDateJacksonDeserializer() {
+ super(LocalDate.class);
+ }
+
+ @Override
+ public LocalDate parse(final String val) {
+ return LocalDate.parse(val);
+ }
+ }
+
+ final static class LocalDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<LocalDateTime> {
+
+ public LocalDateTimeJacksonSerializer() {
+ super(LocalDateTime.class);
+ }
+ }
+
+ final static class LocalDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalDateTime> {
+ public LocalDateTimeJacksonDeserializer() {
+ super(LocalDateTime.class);
+ }
+
+ @Override
+ public LocalDateTime parse(final String val) {
+ return LocalDateTime.parse(val);
+ }
+ }
+
+ final static class LocalTimeJacksonSerializer extends AbstractJavaTimeSerializer<LocalTime> {
+
+ public LocalTimeJacksonSerializer() {
+ super(LocalTime.class);
+ }
+ }
+
+ final static class LocalTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalTime> {
+ public LocalTimeJacksonDeserializer() {
+ super(LocalTime.class);
+ }
+
+ @Override
+ public LocalTime parse(final String val) {
+ return LocalTime.parse(val);
+ }
+ }
+
+ final static class MonthDayJacksonSerializer extends AbstractJavaTimeSerializer<MonthDay> {
+
+ public MonthDayJacksonSerializer() {
+ super(MonthDay.class);
+ }
+ }
+
+ final static class MonthDayJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<MonthDay> {
+ public MonthDayJacksonDeserializer() {
+ super(MonthDay.class);
+ }
+
+ @Override
+ public MonthDay parse(final String val) {
+ return MonthDay.parse(val);
+ }
+ }
+
+ final static class OffsetDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<OffsetDateTime> {
+
+ public OffsetDateTimeJacksonSerializer() {
+ super(OffsetDateTime.class);
+ }
+ }
+
+ final static class OffsetDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<OffsetDateTime> {
+ public OffsetDateTimeJacksonDeserializer() {
+ super(OffsetDateTime.class);
+ }
+
+ @Override
+ public OffsetDateTime parse(final String val) {
+ return OffsetDateTime.parse(val);
+ }
+ }
+
+ final static class OffsetTimeJacksonSerializer extends AbstractJavaTimeSerializer<OffsetTime> {
+
+ public OffsetTimeJacksonSerializer() {
+ super(OffsetTime.class);
+ }
+ }
+
+ final static class OffsetTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<OffsetTime> {
+ public OffsetTimeJacksonDeserializer() {
+ super(OffsetTime.class);
+ }
+
+ @Override
+ public OffsetTime parse(final String val) {
+ return OffsetTime.parse(val);
+ }
+ }
+
+ final static class PeriodJacksonSerializer extends AbstractJavaTimeSerializer<Period> {
+
+ public PeriodJacksonSerializer() {
+ super(Period.class);
+ }
+ }
+
+ final static class PeriodJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Period> {
+ public PeriodJacksonDeserializer() {
+ super(Period.class);
+ }
+
+ @Override
+ public Period parse(final String val) {
+ return Period.parse(val);
+ }
+ }
+
+ final static class YearJacksonSerializer extends AbstractJavaTimeSerializer<Year> {
+
+ public YearJacksonSerializer() {
+ super(Year.class);
+ }
+ }
+
+ final static class YearJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Year> {
+ public YearJacksonDeserializer() {
+ super(Year.class);
+ }
+
+ @Override
+ public Year parse(final String val) {
+ return Year.parse(val);
+ }
+ }
+
+ final static class YearMonthJacksonSerializer extends AbstractJavaTimeSerializer<YearMonth> {
+
+ public YearMonthJacksonSerializer() {
+ super(YearMonth.class);
+ }
+ }
+
+ final static class YearMonthJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<YearMonth> {
+ public YearMonthJacksonDeserializer() {
+ super(YearMonth.class);
+ }
+
+ @Override
+ public YearMonth parse(final String val) {
+ return YearMonth.parse(val);
+ }
+ }
+
+ final static class ZonedDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<ZonedDateTime> {
+
+ public ZonedDateTimeJacksonSerializer() {
+ super(ZonedDateTime.class);
+ }
+ }
+
+ final static class ZonedDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<ZonedDateTime> {
+ public ZonedDateTimeJacksonDeserializer() {
+ super(ZonedDateTime.class);
+ }
+
+ @Override
+ public ZonedDateTime parse(final String val) {
+ return ZonedDateTime.parse(val);
+ }
+ }
+
+ final static class ZoneOffsetJacksonSerializer extends AbstractJavaTimeSerializer<ZoneOffset> {
+
+ public ZoneOffsetJacksonSerializer() {
+ super(ZoneOffset.class);
+ }
+ }
+
+ final static class ZoneOffsetJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<ZoneOffset> {
+ public ZoneOffsetJacksonDeserializer() {
+ super(ZoneOffset.class);
+ }
+
+ @Override
+ public ZoneOffset parse(final String val) {
+ return ZoneOffset.of(val);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializers.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializers.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializers.java
deleted file mode 100644
index 4f2f5da..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializers.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.structure.io.graphson;
-
-import org.apache.tinkerpop.gremlin.structure.Element;
-import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
-import org.apache.tinkerpop.shaded.jackson.databind.SerializationFeature;
-import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
-import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
-
-import java.io.IOException;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * GraphSON serializers for classes in {@code java.util.*}.
- */
-final class JavaUtilSerializers {
-
- private JavaUtilSerializers() {}
-
- final static class MapEntryJacksonSerializer extends StdSerializer<Map.Entry> {
-
- public MapEntryJacksonSerializer() {
- super(Map.Entry.class);
- }
-
- @Override
- public void serialize(final Map.Entry entry, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
- throws IOException {
- ser(entry, jsonGenerator, serializerProvider, null);
- }
-
- @Override
- public void serializeWithType(final Map.Entry entry, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- ser(entry, jsonGenerator, serializerProvider, typeSerializer);
- }
-
- private static void ser(final Map.Entry entry, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- jsonGenerator.writeStartObject();
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-
- // this treatment of keys is consistent with the current GraphSONKeySerializer which extends the
- // StdKeySerializer
- final Object key = entry.getKey();
- final Class cls = key.getClass();
- String k;
- if (cls == String.class)
- k = (String) key;
- else if (Element.class.isAssignableFrom(cls))
- k = ((Element) key).id().toString();
- else if(Date.class.isAssignableFrom(cls)) {
- if (serializerProvider.isEnabled(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS))
- k = String.valueOf(((Date) key).getTime());
- else
- k = serializerProvider.getConfig().getDateFormat().format((Date) key);
- } else if(cls == Class.class)
- k = ((Class) key).getName();
- else
- k = key.toString();
-
- serializerProvider.defaultSerializeField(k, entry.getValue(), jsonGenerator);
- jsonGenerator.writeEndObject();
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV1d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV1d0.java
new file mode 100644
index 0000000..15dd3b9
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV1d0.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializationFeature;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * GraphSON serializers for classes in {@code java.util.*}.
+ */
+final class JavaUtilSerializersV1d0 {
+
+ private JavaUtilSerializersV1d0() {}
+
+ final static class MapEntryJacksonSerializer extends StdSerializer<Map.Entry> {
+
+ public MapEntryJacksonSerializer() {
+ super(Map.Entry.class);
+ }
+
+ @Override
+ public void serialize(final Map.Entry entry, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ ser(entry, jsonGenerator, serializerProvider, null);
+ }
+
+ @Override
+ public void serializeWithType(final Map.Entry entry, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ ser(entry, jsonGenerator, serializerProvider, typeSerializer);
+ }
+
+ private static void ser(final Map.Entry entry, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ jsonGenerator.writeStartObject();
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+
+ // this treatment of keys is consistent with the current GraphSONKeySerializer which extends the
+ // StdKeySerializer
+ final Object key = entry.getKey();
+ final Class cls = key.getClass();
+ String k;
+ if (cls == String.class)
+ k = (String) key;
+ else if (Element.class.isAssignableFrom(cls))
+ k = ((Element) key).id().toString();
+ else if(Date.class.isAssignableFrom(cls)) {
+ if (serializerProvider.isEnabled(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS))
+ k = String.valueOf(((Date) key).getTime());
+ else
+ k = serializerProvider.getConfig().getDateFormat().format((Date) key);
+ } else if(cls == Class.class)
+ k = ((Class) key).getName();
+ else
+ k = key.toString();
+
+ serializerProvider.defaultSerializeField(k, entry.getValue(), jsonGenerator);
+ jsonGenerator.writeEndObject();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV2d0.java
new file mode 100644
index 0000000..8d867c9
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV2d0.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializationFeature;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.ByteBufferSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * GraphSON serializers for classes in {@code java.util.*} for the version 2.0 of GraphSON.
+ */
+final class JavaUtilSerializersV2d0 {
+
+ private JavaUtilSerializersV2d0() {}
+
+ final static class MapEntryJacksonSerializer extends StdSerializer<Map.Entry> {
+
+ public MapEntryJacksonSerializer() {
+ super(Map.Entry.class);
+ }
+
+ @Override
+ public void serialize(final Map.Entry entry, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ jsonGenerator.writeStartObject();
+ ser(entry, jsonGenerator, serializerProvider);
+ jsonGenerator.writeEndObject();
+ }
+
+ @Override
+ public void serializeWithType(final Map.Entry entry, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ typeSerializer.writeTypePrefixForObject(entry, jsonGenerator);
+ ser(entry, jsonGenerator, serializerProvider);
+ typeSerializer.writeTypeSuffixForObject(entry, jsonGenerator);
+ }
+
+ private static void ser(final Map.Entry entry, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider) throws IOException {
+ // this treatment of keys is consistent with the current GraphSONKeySerializer which extends the
+ // StdKeySerializer
+ final Object key = entry.getKey();
+ final Class cls = key.getClass();
+ String k;
+ if (cls == String.class)
+ k = (String) key;
+ else if (Element.class.isAssignableFrom(cls))
+ k = ((Element) key).id().toString();
+ else if(Date.class.isAssignableFrom(cls)) {
+ if (serializerProvider.isEnabled(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS))
+ k = String.valueOf(((Date) key).getTime());
+ else
+ k = serializerProvider.getConfig().getDateFormat().format((Date) key);
+ } else if(cls == Class.class)
+ k = ((Class) key).getName();
+ else
+ k = key.toString();
+
+ serializerProvider.defaultSerializeField(k, entry.getValue(), jsonGenerator);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java
new file mode 100644
index 0000000..6b19e48
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.core.JsonParseException;
+import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
+import org.apache.tinkerpop.shaded.jackson.core.JsonToken;
+import org.apache.tinkerpop.shaded.jackson.core.util.JsonParserSequence;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+/**
+ * Utility class to easily concatenate multiple JsonParsers. This class had to be implemented because the class it is
+ * extending, {@link JsonParserSequence}, inevitably skips a token when switching from one empty parser to a new one.
+ * I.e. it is automatically calling {@link JsonParser#nextToken()} when switching to the new parser, ignoring
+ * the current token.
+ *
+ * This class is used for high performance in GraphSON when trying to detect types.
+ *
+ * @author Kevin Gallardo (https://kgdo.me)
+ */
+public class JsonParserConcat extends JsonParserSequence {
+ protected JsonParserConcat(JsonParser[] parsers) {
+ super(parsers);
+ }
+
+ public static JsonParserConcat createFlattened(JsonParser first, JsonParser second) {
+ if (!(first instanceof JsonParserConcat) && !(second instanceof JsonParserConcat)) {
+ return new JsonParserConcat(new JsonParser[]{first, second});
+ } else {
+ ArrayList p = new ArrayList();
+ if (first instanceof JsonParserConcat) {
+ ((JsonParserConcat) first).addFlattenedActiveParsers(p);
+ } else {
+ p.add(first);
+ }
+
+ if (second instanceof JsonParserConcat) {
+ ((JsonParserConcat) second).addFlattenedActiveParsers(p);
+ } else {
+ p.add(second);
+ }
+ return new JsonParserConcat((JsonParser[]) p.toArray(new JsonParser[p.size()]));
+ }
+ }
+
+ @Override
+ public JsonToken nextToken() throws IOException, JsonParseException {
+ JsonToken t = this.delegate.nextToken();
+ if (t != null) {
+ return t;
+ } else {
+ do {
+ if (!this.switchToNext()) {
+ return null;
+ }
+ // call getCurrentToken() instead of nextToken() in JsonParserSequence.
+ t = this.delegate.getCurrentToken() == null
+ ? this.nextToken()
+ : this.getCurrentToken();
+ } while (t == null);
+
+ return t;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/LegacyGraphSONReader.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/LegacyGraphSONReader.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/LegacyGraphSONReader.java
index f015193..679c827 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/LegacyGraphSONReader.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/LegacyGraphSONReader.java
@@ -19,10 +19,10 @@
package org.apache.tinkerpop.gremlin.structure.io.graphson;
import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Property;
-import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
import org.apache.tinkerpop.gremlin.structure.io.GraphReader;
[04/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0-typed.json
new file mode 100644
index 0000000..3b24d37
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0-typed.json
@@ -0,0 +1,808 @@
+{"id":{"@type":"gremlin:int32","@value":1},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3059},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":276},"outV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3704},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4383},"outV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":0},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@
value":2}}},{"id":{"@type":"gremlin:int32","@value":2},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4},"inV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7612},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7611},"inV":{"@type":"gremlin:int32","@value":527}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"HEY BO DIDDLEY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":2},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":1},"value":{"@type":"gremlin:int32","@value":5}}]}}
+{"id":{"@type":"gremlin:int32","@value":2},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":0},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":323},"outV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":6190},"inV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6191},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7666},"inV":{"@type":"gremlin:int32","@value":525}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7665},"inV":{"@type":"gremlin:int32","@value":525}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":3},"value":"IM
A MAN"}],"songType":[{"id":{"@type":"gremlin:int64","@value":5},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":4},"value":{"@type":"gremlin:int32","@value":1}}]}}
+{"id":{"@type":"gremlin:int32","@value":3},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":1},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2051},"outV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":1412},"outV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":6669},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":526},"outV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":910},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id"
:{"@type":"gremlin:int32","@value":1166},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6286},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":273},"outV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":2194},"outV":{"@type":"gremlin:int32","@value":235},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1684},"outV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1941},"outV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3221},"outV":{"@type":"gremlin:int32","@va
lue":63},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2712},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6425},"outV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5787},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5148},"outV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6692},"outV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6310},"outV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id
":{"@type":"gremlin:int32","@value":6448},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2225},"outV":{"@type":"gremlin:int32","@value":226},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5042},"outV":{"@type":"gremlin:int32","@value":209},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4789},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1464},"outV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2232},"outV":{"@type":"gremlin:int32","@value":215},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4665},"outV":{"@type":"gremlin:int32",
"@value":154},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2235},"outV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":163}}},{"id":{"@type":"gremlin:int32","@value":6208},"outV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":706},"outV":{"@type":"gremlin:int32","@value":206},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":835},"outV":{"@type":"gremlin:int32","@value":171},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5188},"outV":{"@type":"gremlin:int32","@value":99},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1862},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}}
,{"id":{"@type":"gremlin:int32","@value":1735},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6343},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4937},"outV":{"@type":"gremlin:int32","@value":277},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3276},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3149},"outV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1358},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":18}}},{"id":{"@type":"gremlin:int32","@value":4304},"outV":{"@type":"gremlin:in
t32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1105},"outV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":722},"outV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4182},"outV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1499},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2397},"outV":{"@type":"gremlin:int32","@value":179},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":351},"outV":{"@type":"gremlin:int32","@value":178},"properties":{"weight":{"@type":"gremlin:int32","@value":1}
}},{"id":{"@type":"gremlin:int32","@value":6623},"outV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2018},"outV":{"@type":"gremlin:int32","@value":149},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":7011},"outV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5348},"outV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2278},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":1255},"outV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3048},"outV":{"@type":"gremlin:in
t32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":5867},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":116}}},{"id":{"@type":"gremlin:int32","@value":364},"outV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":492},"outV":{"@type":"gremlin:int32","@value":98},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3948},"outV":{"@type":"gremlin:int32","@value":138},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4335},"outV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3312},"outV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":
1}}},{"id":{"@type":"gremlin:int32","@value":5745},"outV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4596},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5367},"outV":{"@type":"gremlin:int32","@value":132},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":633},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":891},"outV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5375},"outV":{"@type":"gremlin:int32","@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6143},"outV":{"@type":"gremlin:in
t32","@value":289},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3712},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3713},"inV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3714},"inV":{"@type":"gremlin:int32","@value":215},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3715},"inV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3716},"inV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3717},"inV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"grem
lin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3718},"inV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3719},"inV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3720},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3721},"inV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":54}}},{"id":{"@type":"gremlin:int32","@value":3722},"inV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":3723},"inV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3724},"inV":{
"@type":"gremlin:int32","@value":145},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3725},"inV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3726},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3727},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":37}}},{"id":{"@type":"gremlin:int32","@value":3728},"inV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3729},"inV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3730},"inV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:i
nt32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3731},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3732},"inV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3733},"inV":{"@type":"gremlin:int32","@value":211},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3734},"inV":{"@type":"gremlin:int32","@value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":3735},"inV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3736},"inV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3737},"inV":{"@type":
"gremlin:int32","@value":320},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3738},"inV":{"@type":"gremlin:int32","@value":61},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3739},"inV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3740},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3741},"inV":{"@type":"gremlin:int32","@value":128},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3742},"inV":{"@type":"gremlin:int32","@value":315},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3743},"inV":{"@type":"gremlin:int32","@value":261},"properties":{"weight":{"@type":"gremlin:int32","@v
alue":1}}},{"id":{"@type":"gremlin:int32","@value":3744},"inV":{"@type":"gremlin:int32","@value":213},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":3745},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3746},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3747},"inV":{"@type":"gremlin:int32","@value":204},"properties":{"weight":{"@type":"gremlin:int32","@value":14}}},{"id":{"@type":"gremlin:int32","@value":3748},"inV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3749},"inV":{"@type":"gremlin:int32","@value":150},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":3750},"inV":{"@type":"gremlin
:int32","@value":309},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3751},"inV":{"@type":"gremlin:int32","@value":131},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3752},"inV":{"@type":"gremlin:int32","@value":151},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3753},"inV":{"@type":"gremlin:int32","@value":321},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3754},"inV":{"@type":"gremlin:int32","@value":90},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3755},"inV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3756},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":1}
}},{"id":{"@type":"gremlin:int32","@value":3757},"inV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3758},"inV":{"@type":"gremlin:int32","@value":157},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3759},"inV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3760},"inV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3761},"inV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3762},"inV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3763},"inV":{"@type":"gremlin:int32","@v
alue":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3764},"inV":{"@type":"gremlin:int32","@value":214},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3765},"inV":{"@type":"gremlin:int32","@value":185},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3766},"inV":{"@type":"gremlin:int32","@value":216},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3767},"inV":{"@type":"gremlin:int32","@value":217},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3768},"inV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3769},"inV":{"@type":"gremlin:int32","@value":193},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":
{"@type":"gremlin:int32","@value":3770},"inV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3771},"inV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3772},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3773},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3774},"inV":{"@type":"gremlin:int32","@value":240},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3775},"inV":{"@type":"gremlin:int32","@value":292},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3776},"inV":{"@type":"gremlin:int32","@value":9},
"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3777},"inV":{"@type":"gremlin:int32","@value":259},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3694},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":57}}},{"id":{"@type":"gremlin:int32","@value":3695},"inV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":30}}},{"id":{"@type":"gremlin:int32","@value":3696},"inV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3697},"inV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3698},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"grem
lin:int32","@value":3699},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3700},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3701},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3702},"inV":{"@type":"gremlin:int32","@value":317},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3703},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3704},"inV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3705},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"
weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3706},"inV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3707},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3708},"inV":{"@type":"gremlin:int32","@value":318},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3709},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":3710},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3711},"inV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}}],"sungBy":[{"id":{"@type":"gremli
n:int32","@value":7808},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7807},"inV":{"@type":"gremlin:int32","@value":671}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":6},"value":"NOT FADE AWAY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":8},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":7},"value":{"@type":"gremlin:int32","@value":531}}]}}
+{"id":{"@type":"gremlin:int32","@value":4},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":128},"outV":{"@type":"gremlin:int32","@value":97},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1664},"outV":{"@type":"gremlin:int32","@value":267},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":899},"outV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1667},"outV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}},{"id":{"@type":"gremlin:int32","@value":4099},"outV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
id":{"@type":"gremlin:int32","@value":1156},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":773},"outV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":6534},"outV":{"@type":"gremlin:int32","@value":242},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1032},"outV":{"@type":"gremlin:int32","@value":73},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6664},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5129},"outV":{"@type":"gremlin:int32","@value":222},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5387},"outV":{"@type":"gremlin:int32",
"@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5517},"outV":{"@type":"gremlin:int32","@value":43},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5006},"outV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6030},"outV":{"@type":"gremlin:int32","@value":204},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2063},"outV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":915},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6940},"outV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id
":{"@type":"gremlin:int32","@value":2464},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5795},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3620},"outV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4772},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":25}}},{"id":{"@type":"gremlin:int32","@value":2982},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3367},"outV":{"@type":"gremlin:int32","@value":184},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":2345},"outV":{"@type":"gremlin:int32","@
value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2861},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":1840},"outV":{"@type":"gremlin:int32","@value":275},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5425},"outV":{"@type":"gremlin:int32","@value":102},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":180},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":46}}},{"id":{"@type":"gremlin:int32","@value":2613},"outV":{"@type":"gremlin:int32","@value":158},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5434},"outV":{"@type":"gremlin:int32","@value":217},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{
"id":{"@type":"gremlin:int32","@value":5562},"outV":{"@type":"gremlin:int32","@value":162},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1469},"outV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":446},"outV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":2494},"outV":{"@type":"gremlin:int32","@value":90},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3266},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":326},"outV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":583},"outV":{"@type":"gremlin:int32","@
value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6855},"outV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":73},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4425},"outV":{"@type":"gremlin:int32","@value":212},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1613},"outV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4941},"outV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6350},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id
":{"@type":"gremlin:int32","@value":3535},"outV":{"@type":"gremlin:int32","@value":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":980},"outV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1494},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5206},"outV":{"@type":"gremlin:int32","@value":99},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5847},"outV":{"@type":"gremlin:int32","@value":61},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6490},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2781},"outV":{"@type":"gremlin:int32","@v
alue":15},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5600},"outV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":353},"outV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5474},"outV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1891},"outV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":19}}},{"id":{"@type":"gremlin:int32","@value":3811},"outV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5989},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id"
:{"@type":"gremlin:int32","@value":4327},"outV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2538},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3050},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4970},"outV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2283},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":236},"outV":{"@type":"gremlin:int32","@value":145},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6126},"outV":{"@type":"gremlin:int32","@
value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5232},"outV":{"@type":"gremlin:int32","@value":214},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4594},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1652},"outV":{"@type":"gremlin:int32","@value":213},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4084},"outV":{"@type":"gremlin:int32","@value":109},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":629},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3701},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id
":{"@type":"gremlin:int32","@value":5621},"outV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":7029},"outV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5238},"outV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2684},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":3325},"outV":{"@type":"gremlin:int32","@value":268},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":5120},"inV":{"@type":"gremlin:int32","@value":40},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5121},"inV":{"@type
":"gremlin:int32","@value":33},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5122},"inV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5123},"inV":{"@type":"gremlin:int32","@value":292},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5071},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":5072},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":5073},"inV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5074},"inV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@va
lue":9}}},{"id":{"@type":"gremlin:int32","@value":5075},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":63}}},{"id":{"@type":"gremlin:int32","@value":5076},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":5077},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5078},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5079},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":18}}},{"id":{"@type":"gremlin:int32","@value":5080},"inV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5081},"inV":{"@type":"gremlin:in
t32","@value":16},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5082},"inV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5083},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5084},"inV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5085},"inV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5086},"inV":{"@type":"gremlin:int32","@value":112},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5087},"inV":{"@type":"gremlin:int32","@value":121},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"i
d":{"@type":"gremlin:int32","@value":5088},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":5089},"inV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5090},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":77}}},{"id":{"@type":"gremlin:int32","@value":5091},"inV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5092},"inV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5093},"inV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5094},"inV":{"@type":"gremlin:int32","@value"
:76},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5095},"inV":{"@type":"gremlin:int32","@value":181},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5096},"inV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5097},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5098},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5099},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5100},"inV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":
"gremlin:int32","@value":5101},"inV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5102},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5103},"inV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5104},"inV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5105},"inV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":5106},"inV":{"@type":"gremlin:int32","@value":97},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5107},"inV":{"@type":"gremlin:int32","@value":114},"proper
ties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5108},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":5109},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":5110},"inV":{"@type":"gremlin:int32","@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5111},"inV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5112},"inV":{"@type":"gremlin:int32","@value":60},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5113},"inV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32
","@value":5114},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5115},"inV":{"@type":"gremlin:int32","@value":117},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5116},"inV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5117},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5118},"inV":{"@type":"gremlin:int32","@value":169},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5119},"inV":{"@type":"gremlin:int32","@value":118},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7064},"inV":{"@type":"gremlin:int32","@value":340}}],"writte
nBy":[{"id":{"@type":"gremlin:int32","@value":7063},"inV":{"@type":"gremlin:int32","@value":339}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":9},"value":"BERTHA"}],"songType":[{"id":{"@type":"gremlin:int64","@value":11},"value":"original"}],"performances":[{"id":{"@type":"gremlin:int64","@value":10},"value":{"@type":"gremlin:int32","@value":394}}]}}
+{"id":{"@type":"gremlin:int32","@value":5},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":194},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":962},"outV":{"@type":"gremlin:int32","@value":67},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5446},"outV":{"@type":"gremlin:int32","@value":231},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6344},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":1738},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id"
:{"@type":"gremlin:int32","@value":6666},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1867},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}},{"id":{"@type":"gremlin:int32","@value":4300},"outV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":847},"outV":{"@type":"gremlin:int32","@value":171},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2832},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6032},"outV":{"@type":"gremlin:int32","@value":115},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1170},"outV":{"@type":"gremlin:int32","@
value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5330},"outV":{"@type":"gremlin:int32","@value":238},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1491},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1429},"outV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3033},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6298},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1373},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"
id":{"@type":"gremlin:int32","@value":4447},"outV":{"@type":"gremlin:int32","@value":113},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5151},"outV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5343},"outV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6431},"outV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1953},"outV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":1634},"outV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2274},"outV":{"@type":"gremlin:int
32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":100},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":933},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2021},"outV":{"@type":"gremlin:int32","@value":149},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6694},"outV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4009},"outV":{"@type":"gremlin:int32","@value":225},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":682},"outV":{"@type":"gremlin:int32","@value":219},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}
,{"id":{"@type":"gremlin:int32","@value":3694},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":57}}},{"id":{"@type":"gremlin:int32","@value":4718},"outV":{"@type":"gremlin:int32","@value":186},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":3055},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":2480},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2736},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5426},"outV":{"@type":"gremlin:int32","@value":102},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6899},"outV":{"@type":"gremlin:int3
2","@value":147},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5879},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":22}}},{"id":{"@type":"gremlin:int32","@value":6201},"outV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5370},"outV":{"@type":"gremlin:int32","@value":132},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":700},"outV":{"@type":"gremlin:int32","@value":206},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2236},"outV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4604},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":2}
}},{"id":{"@type":"gremlin:int32","@value":5759},"outV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":273},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":274},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":275},"inV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":276},"inV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":277},"inV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":278},"inV":{"@type":
"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":279},"inV":{"@type":"gremlin:int32","@value":133},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":280},"inV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":281},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":282},"inV":{"@type":"gremlin:int32","@value":159},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":283},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":284},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1
9}}},{"id":{"@type":"gremlin:int32","@value":285},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":286},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":287},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":288},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":289},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":290},"inV":{"@type":"gremlin:int32","@value":116},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":291},"inV":{"@type":"gremlin:int32","@val
ue":127},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":292},"inV":{"@type":"gremlin:int32","@value":65},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":293},"inV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":294},"inV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":295},"inV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":296},"inV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":297},"inV":{"@type":"gremlin:int32","@value":161},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":
"gremlin:int32","@value":298},"inV":{"@type":"gremlin:int32","@value":162},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":299},"inV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":300},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":301},"inV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"id":{"@type":"gremlin:int32","@value":302},"inV":{"@type":"gremlin:int32","@value":163},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":303},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":304},"inV":{"@type":"gremlin:int32","@value":85},"properties":
{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":305},"inV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":306},"inV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":307},"inV":{"@type":"gremlin:int32","@value":150},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":308},"inV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":309},"inV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":310},"inV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value
":311},"inV":{"@type":"gremlin:int32","@value":166},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7582},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7581},"inV":{"@type":"gremlin:int32","@value":446}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":12},"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":{"@type":"gremlin:int64","@value":14},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":13},"value":{"@type":"gremlin:int32","@value":293}}]}}
+{"id":{"@type":"gremlin:int32","@value":6},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2023},"outV":{"@type":"gremlin:int32","@value":282},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2406},"inV":{"@type":"gremlin:int32","@value":293},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2407},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7782},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7781},"inV":{"@type":"gremlin:int32","@value":527}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":15},"value":"
MONA"}],"songType":[{"id":{"@type":"gremlin:int64","@value":17},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":16},"value":{"@type":"gremlin:int32","@value":1}}]}}
+{"id":{"@type":"gremlin:int32","@value":7},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2607},"outV":{"@type":"gremlin:int32","@value":295},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":5},"inV":{"@type":"gremlin:int32","@value":8},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":18},"value":"WHERE HAVE THE HEROES GONE"}],"songType":[{"id":{"@type":"gremlin:int64","@value":20},"value":""}],"performances":[{"id":{"@type":"gremlin:int64","@value":19},"value":{"@type":"gremlin:int32","@value":0}}]}}
+{"id":{"@type":"gremlin:int32","@value":8},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4705},"outV":{"@type":"gremlin:int32","@value":111},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5901},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2976},"inV":{"@type":"gremlin:int32","@value":302},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2977},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2978},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:in
t32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7814},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7813},"inV":{"@type":"gremlin:int32","@value":674}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":21},"value":"OH BOY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":23},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":22},"value":{"@type":"gremlin:int32","@value":2}}]}}
+{"id":{"@type":"gremlin:int32","@value":9},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3776},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":65},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1923},"outV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5956},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3077},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5832},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{
"id":{"@type":"gremlin:int32","@value":1161},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":2699},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6539},"outV":{"@type":"gremlin:int32","@value":55},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6667},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2578},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":787},"outV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3542},"outV":{"@type":"gremlin:int32","@
value":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2775},"outV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":2840},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4953},"outV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1572},"outV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":229},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4264},"outV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id"
:{"@type":"gremlin:int32","@value":4969},"outV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3498},"outV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5226},"outV":{"@type":"gremlin:int32","@value":216},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5548},"outV":{"@type":"gremlin:int32","@value":166},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2990},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3950},"outV":{"@type":"gremlin:int32","@value":138},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2488},"outV":{"@type":"gremlin:int32","@
value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6776},"outV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3641},"outV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1532},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1853},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":638},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6335},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"out
E":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":6},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value"
:16},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":13},"inV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":14},"inV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":16},"inV":{"@type":"gremlin:int32","@value":20},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":17},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":18},"inV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32"
,"@value":19},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":20},"inV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":21},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":22},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":23},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":24},"inV":{"@type":"gremlin:int32","@value":28},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":25},"inV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremli
n:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":26},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":27},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":28},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":29},"inV":{"@type":"gremlin:int32","@value":33},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":30},"inV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":31},"inV":{"@type":"gremlin:int32","@value":35},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":32},"inV":{"@type":"gremlin:int32"
,"@value":36},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":33},"inV":{"@type":"gremlin:int32","@value":37},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":34},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":35},"inV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":36},"inV":{"@type":"gremlin:int32","@value":40},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":37},"inV":{"@type":"gremlin:int32","@value":41},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":38},"inV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"greml
in:int32","@value":39},"inV":{"@type":"gremlin:int32","@value":43},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7190},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7189},"inV":{"@type":"gremlin:int32","@value":339}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":24},"value":"HERE COMES SUNSHINE"}],"songType":[{"id":{"@type":"gremlin:int64","@value":26},"value":"original"}],"performances":[{"id":{"@type":"gremlin:int64","@value":25},"value":{"@type":"gremlin:int32","@value":65}}]}}
+{"id":{"@type":"gremlin:int32","@value":10},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3841},"outV":{"@type":"gremlin:int32","@value":60},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1027},"outV":{"@type":"gremlin:int32","@value":73},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3335},"outV":{"@type":"gremlin:int32","@value":155},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4103},"outV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6279},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
id":{"@type":"gremlin:int32","@value":4233},"outV":{"@type":"gremlin:int32","@value":52},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4878},"outV":{"@type":"gremlin:int32","@value":100},"properties":{"weight":{"@type":"gremlin:int32","@value":19}}},{"id":{"@type":"gremlin:int32","@value":5264},"outV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2196},"outV":{"@type":"gremlin:int32","@value":75},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":151},"outV":{"@type":"gremlin:int32","@value":108},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1571},"outV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3619},"outV":{"@type":"gremlin:int32","
@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3237},"outV":{"@type":"gremlin:int32","@value":63},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4647},"outV":{"@type":"gremlin:int32","@value":154},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4521},"outV":{"@type":"gremlin:int32","@value":105},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1195},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6444},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":6956},"outV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
id":{"@type":"gremlin:int32","@value":687},"outV":{"@type":"gremlin:int32","@value":157},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4784},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6064},"outV":{"@type":"gremlin:int32","@value":115},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1714},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3890},"outV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":55},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5175},"outV":{"@type":"gremlin:int32","@v
alue":71},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1337},"outV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1083},"outV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4155},"outV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":6077},"outV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5441},"outV":{"@type":"gremlin:int32","@value":239},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1987},"outV":{"@type":"gremlin:int32","@value":152},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id
":{"@type":"gremlin:int32","@value":1860},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2116},"outV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3269},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":454},"outV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3142},"outV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":2505},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":6603},"outV":{"@type":"gremlin:int32","@v
alue":127},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6859},"outV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":717},"outV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":1360},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3026},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5972},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5077},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{
"@type":"gremlin:int32","@value":2392},"outV":{"@type":"gremlin:int32","@value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1250},"outV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4706},"outV":{"@type":"gremlin:int32","@value":111},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6755},"outV":{"@type":"gremlin:int32","@value":53},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":485},"outV":{"@type":"gremlin:int32","@value":98},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":2917},"outV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3559},"outV":{"@type":"gremlin:int32","@valu
e":56},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":3436},"outV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3820},"outV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4463},"outV":{"@type":"gremlin:int32","@value":202},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":880},"outV":{"@type":"gremlin:int32","@value":189},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6256},"outV":{"@type":"gremlin:int32","@value":117},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3698},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{
"@type":"gremlin:int32","@value":2035},"outV":{"@type":"gremlin:int32","@value":180},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2291},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3317},"outV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2806},"outV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2427},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6782},"outV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4351},"outV":{"@type":"gremlin:int32","@valu
e":62},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4235},"inV":{"@type":"gremlin:int32","@value":56},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4236},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":4237},"inV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"id":{"@type":"gremlin:int32","@value":4238},"inV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":4239},"inV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":4240},"inV":{"@type":"gremlin:int32","@value":100},"properties":{"weight":{"@type":"gremlin:int32","@v
alue":21}}},{"id":{"@type":"gremlin:int32","@value":4241},"inV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4242},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4243},"inV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":4244},"inV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4245},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":4246},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4247},"inV":{"@type":"gremlin:i
nt32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4248},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4249},"inV":{"@type":"gremlin:int32","@value":235},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4250},"inV":{"@type":"gremlin:int32","@value":218},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4251},"inV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4252},"inV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4253},"inV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}}
,{"id":{"@type":"gremlin:int32","@value":4254},"inV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4255},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4256},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4257},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4258},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4259},"inV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4260},"inV":{"@type":"gremlin:int32","@va
lue":18},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4261},"inV":{"@type":"gremlin:int32","@value":202},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4262},"inV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4263},"inV":{"@type":"gremlin:int32","@value":46},"pr
<TRUNCATED>
[13/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/grateful-dead-v2d0.json
----------------------------------------------------------------------
diff --git a/data/grateful-dead-v2d0.json b/data/grateful-dead-v2d0.json
new file mode 100644
index 0000000..92c4d84
--- /dev/null
+++ b/data/grateful-dead-v2d0.json
@@ -0,0 +1,808 @@
+{"id":1,"label":"song","inE":{"followedBy":[{"id":3059,"outV":153,"properties":{"weight":1}},{"id":276,"outV":5,"properties":{"weight":2}},{"id":3704,"outV":3,"properties":{"weight":2}},{"id":4383,"outV":62,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":0,"inV":2,"properties":{"weight":1}},{"id":1,"inV":3,"properties":{"weight":2}},{"id":2,"inV":4,"properties":{"weight":1}},{"id":3,"inV":5,"properties":{"weight":1}},{"id":4,"inV":6,"properties":{"weight":1}}],"sungBy":[{"id":7612,"inV":340}],"writtenBy":[{"id":7611,"inV":527}]},"properties":{"name":[{"id":0,"value":"HEY BO DIDDLEY"}],"songType":[{"id":2,"value":"cover"}],"performances":[{"id":1,"value":5}]}}
+{"id":2,"label":"song","inE":{"followedBy":[{"id":0,"outV":1,"properties":{"weight":1}},{"id":323,"outV":34,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6190,"inV":123,"properties":{"weight":1}},{"id":6191,"inV":50,"properties":{"weight":1}}],"sungBy":[{"id":7666,"inV":525}],"writtenBy":[{"id":7665,"inV":525}]},"properties":{"name":[{"id":3,"value":"IM A MAN"}],"songType":[{"id":5,"value":"cover"}],"performances":[{"id":4,"value":1}]}}
+{"id":3,"label":"song","inE":{"followedBy":[{"id":1,"outV":1,"properties":{"weight":2}},{"id":2051,"outV":92,"properties":{"weight":4}},{"id":1412,"outV":83,"properties":{"weight":6}},{"id":6669,"outV":12,"properties":{"weight":1}},{"id":526,"outV":120,"properties":{"weight":2}},{"id":910,"outV":91,"properties":{"weight":3}},{"id":1166,"outV":26,"properties":{"weight":4}},{"id":6286,"outV":49,"properties":{"weight":1}},{"id":273,"outV":5,"properties":{"weight":40}},{"id":2194,"outV":235,"properties":{"weight":1}},{"id":1684,"outV":124,"properties":{"weight":1}},{"id":1941,"outV":148,"properties":{"weight":4}},{"id":3221,"outV":63,"properties":{"weight":1}},{"id":2712,"outV":13,"properties":{"weight":3}},{"id":6425,"outV":134,"properties":{"weight":2}},{"id":5787,"outV":76,"properties":{"weight":2}},{"id":5148,"outV":125,"properties":{"weight":4}},{"id":6692,"outV":141,"properties":{"weight":2}},{"id":6310,"outV":123,"properties":{"weight":1}},{"id":6448,"outV":187,"properties":{"wei
ght":3}},{"id":2225,"outV":226,"properties":{"weight":1}},{"id":5042,"outV":209,"properties":{"weight":1}},{"id":4789,"outV":114,"properties":{"weight":2}},{"id":1464,"outV":81,"properties":{"weight":1}},{"id":2232,"outV":215,"properties":{"weight":1}},{"id":4665,"outV":154,"properties":{"weight":1}},{"id":2235,"outV":29,"properties":{"weight":163}},{"id":6208,"outV":319,"properties":{"weight":4}},{"id":706,"outV":206,"properties":{"weight":2}},{"id":835,"outV":171,"properties":{"weight":1}},{"id":5188,"outV":99,"properties":{"weight":1}},{"id":1862,"outV":94,"properties":{"weight":10}},{"id":1735,"outV":82,"properties":{"weight":1}},{"id":6343,"outV":21,"properties":{"weight":1}},{"id":4937,"outV":277,"properties":{"weight":1}},{"id":3276,"outV":160,"properties":{"weight":1}},{"id":3149,"outV":104,"properties":{"weight":1}},{"id":1358,"outV":130,"properties":{"weight":18}},{"id":4304,"outV":110,"properties":{"weight":1}},{"id":1105,"outV":59,"properties":{"weight":1}},{"id":722,"ou
tV":80,"properties":{"weight":1}},{"id":4182,"outV":54,"properties":{"weight":1}},{"id":1499,"outV":164,"properties":{"weight":2}},{"id":2397,"outV":179,"properties":{"weight":1}},{"id":351,"outV":178,"properties":{"weight":1}},{"id":6623,"outV":127,"properties":{"weight":3}},{"id":2018,"outV":149,"properties":{"weight":1}},{"id":7011,"outV":89,"properties":{"weight":2}},{"id":5348,"outV":165,"properties":{"weight":1}},{"id":2278,"outV":25,"properties":{"weight":7}},{"id":1255,"outV":27,"properties":{"weight":2}},{"id":3048,"outV":153,"properties":{"weight":13}},{"id":5867,"outV":96,"properties":{"weight":116}},{"id":364,"outV":74,"properties":{"weight":2}},{"id":492,"outV":98,"properties":{"weight":1}},{"id":3948,"outV":138,"properties":{"weight":4}},{"id":4335,"outV":62,"properties":{"weight":1}},{"id":3312,"outV":252,"properties":{"weight":1}},{"id":5745,"outV":129,"properties":{"weight":1}},{"id":4596,"outV":85,"properties":{"weight":3}},{"id":5367,"outV":132,"properties":{"weig
ht":1}},{"id":633,"outV":23,"properties":{"weight":1}},{"id":891,"outV":140,"properties":{"weight":2}},{"id":5375,"outV":69,"properties":{"weight":1}},{"id":6143,"outV":289,"properties":{"weight":3}}]},"outE":{"followedBy":[{"id":3712,"inV":27,"properties":{"weight":1}},{"id":3713,"inV":110,"properties":{"weight":4}},{"id":3714,"inV":215,"properties":{"weight":4}},{"id":3715,"inV":127,"properties":{"weight":10}},{"id":3716,"inV":83,"properties":{"weight":3}},{"id":3717,"inV":103,"properties":{"weight":2}},{"id":3718,"inV":68,"properties":{"weight":1}},{"id":3719,"inV":134,"properties":{"weight":2}},{"id":3720,"inV":25,"properties":{"weight":10}},{"id":3721,"inV":125,"properties":{"weight":54}},{"id":3722,"inV":130,"properties":{"weight":26}},{"id":3723,"inV":141,"properties":{"weight":2}},{"id":3724,"inV":145,"properties":{"weight":1}},{"id":3725,"inV":319,"properties":{"weight":3}},{"id":3726,"inV":12,"properties":{"weight":1}},{"id":3727,"inV":160,"properties":{"weight":37}},{"id"
:3728,"inV":70,"properties":{"weight":2}},{"id":3729,"inV":123,"properties":{"weight":1}},{"id":3730,"inV":129,"properties":{"weight":1}},{"id":3731,"inV":30,"properties":{"weight":2}},{"id":3732,"inV":148,"properties":{"weight":1}},{"id":3733,"inV":211,"properties":{"weight":3}},{"id":3734,"inV":87,"properties":{"weight":13}},{"id":3735,"inV":164,"properties":{"weight":4}},{"id":3736,"inV":64,"properties":{"weight":2}},{"id":3737,"inV":320,"properties":{"weight":1}},{"id":3738,"inV":61,"properties":{"weight":3}},{"id":3739,"inV":210,"properties":{"weight":3}},{"id":3740,"inV":50,"properties":{"weight":7}},{"id":3741,"inV":128,"properties":{"weight":3}},{"id":3742,"inV":315,"properties":{"weight":1}},{"id":3743,"inV":261,"properties":{"weight":1}},{"id":3744,"inV":213,"properties":{"weight":13}},{"id":3745,"inV":72,"properties":{"weight":1}},{"id":3746,"inV":38,"properties":{"weight":4}},{"id":3747,"inV":204,"properties":{"weight":14}},{"id":3748,"inV":62,"properties":{"weight":2}},
{"id":3749,"inV":150,"properties":{"weight":8}},{"id":3750,"inV":309,"properties":{"weight":1}},{"id":3751,"inV":131,"properties":{"weight":1}},{"id":3752,"inV":151,"properties":{"weight":1}},{"id":3753,"inV":321,"properties":{"weight":1}},{"id":3754,"inV":90,"properties":{"weight":2}},{"id":3755,"inV":82,"properties":{"weight":1}},{"id":3756,"inV":120,"properties":{"weight":1}},{"id":3757,"inV":46,"properties":{"weight":5}},{"id":3758,"inV":157,"properties":{"weight":5}},{"id":3759,"inV":59,"properties":{"weight":1}},{"id":3760,"inV":81,"properties":{"weight":1}},{"id":3761,"inV":86,"properties":{"weight":5}},{"id":3762,"inV":140,"properties":{"weight":1}},{"id":3763,"inV":201,"properties":{"weight":1}},{"id":3764,"inV":214,"properties":{"weight":1}},{"id":3765,"inV":185,"properties":{"weight":2}},{"id":3766,"inV":216,"properties":{"weight":1}},{"id":3767,"inV":217,"properties":{"weight":2}},{"id":3768,"inV":236,"properties":{"weight":5}},{"id":3769,"inV":193,"properties":{"weight"
:1}},{"id":3770,"inV":79,"properties":{"weight":2}},{"id":3771,"inV":84,"properties":{"weight":1}},{"id":3772,"inV":23,"properties":{"weight":2}},{"id":3773,"inV":31,"properties":{"weight":2}},{"id":3774,"inV":240,"properties":{"weight":1}},{"id":3775,"inV":292,"properties":{"weight":1}},{"id":3776,"inV":9,"properties":{"weight":1}},{"id":3777,"inV":259,"properties":{"weight":1}},{"id":3694,"inV":5,"properties":{"weight":57}},{"id":3695,"inV":114,"properties":{"weight":30}},{"id":3696,"inV":74,"properties":{"weight":2}},{"id":3697,"inV":78,"properties":{"weight":3}},{"id":3698,"inV":10,"properties":{"weight":1}},{"id":3699,"inV":26,"properties":{"weight":4}},{"id":3700,"inV":153,"properties":{"weight":7}},{"id":3701,"inV":4,"properties":{"weight":4}},{"id":3702,"inV":317,"properties":{"weight":1}},{"id":3703,"inV":13,"properties":{"weight":5}},{"id":3704,"inV":1,"properties":{"weight":2}},{"id":3705,"inV":21,"properties":{"weight":2}},{"id":3706,"inV":57,"properties":{"weight":2}},{
"id":3707,"inV":122,"properties":{"weight":2}},{"id":3708,"inV":318,"properties":{"weight":1}},{"id":3709,"inV":94,"properties":{"weight":26}},{"id":3710,"inV":96,"properties":{"weight":7}},{"id":3711,"inV":124,"properties":{"weight":15}}],"sungBy":[{"id":7808,"inV":351}],"writtenBy":[{"id":7807,"inV":671}]},"properties":{"name":[{"id":6,"value":"NOT FADE AWAY"}],"songType":[{"id":8,"value":"cover"}],"performances":[{"id":7,"value":531}]}}
+{"id":4,"label":"song","inE":{"followedBy":[{"id":128,"outV":97,"properties":{"weight":1}},{"id":1664,"outV":267,"properties":{"weight":1}},{"id":2,"outV":1,"properties":{"weight":1}},{"id":899,"outV":140,"properties":{"weight":1}},{"id":1667,"outV":124,"properties":{"weight":15}},{"id":4099,"outV":48,"properties":{"weight":1}},{"id":1156,"outV":26,"properties":{"weight":16}},{"id":773,"outV":122,"properties":{"weight":9}},{"id":6534,"outV":242,"properties":{"weight":1}},{"id":1032,"outV":73,"properties":{"weight":1}},{"id":6664,"outV":12,"properties":{"weight":3}},{"id":5129,"outV":222,"properties":{"weight":1}},{"id":5387,"outV":69,"properties":{"weight":1}},{"id":5517,"outV":43,"properties":{"weight":2}},{"id":5006,"outV":30,"properties":{"weight":2}},{"id":6030,"outV":204,"properties":{"weight":2}},{"id":2063,"outV":92,"properties":{"weight":1}},{"id":915,"outV":91,"properties":{"weight":2}},{"id":6940,"outV":84,"properties":{"weight":5}},{"id":2464,"outV":68,"properties":{"weig
ht":1}},{"id":5795,"outV":76,"properties":{"weight":2}},{"id":3620,"outV":24,"properties":{"weight":2}},{"id":4772,"outV":114,"properties":{"weight":25}},{"id":2982,"outV":14,"properties":{"weight":3}},{"id":3367,"outV":184,"properties":{"weight":6}},{"id":2345,"outV":87,"properties":{"weight":2}},{"id":2861,"outV":101,"properties":{"weight":6}},{"id":1840,"outV":275,"properties":{"weight":1}},{"id":5425,"outV":102,"properties":{"weight":1}},{"id":180,"outV":70,"properties":{"weight":46}},{"id":2613,"outV":158,"properties":{"weight":1}},{"id":5434,"outV":217,"properties":{"weight":1}},{"id":5562,"outV":162,"properties":{"weight":2}},{"id":1469,"outV":81,"properties":{"weight":1}},{"id":446,"outV":38,"properties":{"weight":7}},{"id":2494,"outV":90,"properties":{"weight":3}},{"id":3266,"outV":160,"properties":{"weight":10}},{"id":326,"outV":34,"properties":{"weight":1}},{"id":583,"outV":120,"properties":{"weight":2}},{"id":6855,"outV":64,"properties":{"weight":12}},{"id":73,"outV":46,
"properties":{"weight":4}},{"id":4425,"outV":212,"properties":{"weight":1}},{"id":1613,"outV":210,"properties":{"weight":2}},{"id":4941,"outV":86,"properties":{"weight":2}},{"id":6350,"outV":21,"properties":{"weight":1}},{"id":3535,"outV":201,"properties":{"weight":1}},{"id":980,"outV":11,"properties":{"weight":3}},{"id":1494,"outV":164,"properties":{"weight":3}},{"id":5206,"outV":99,"properties":{"weight":1}},{"id":5847,"outV":61,"properties":{"weight":2}},{"id":6490,"outV":187,"properties":{"weight":1}},{"id":2781,"outV":15,"properties":{"weight":4}},{"id":5600,"outV":42,"properties":{"weight":1}},{"id":353,"outV":74,"properties":{"weight":6}},{"id":5474,"outV":79,"properties":{"weight":1}},{"id":1891,"outV":103,"properties":{"weight":19}},{"id":3811,"outV":88,"properties":{"weight":2}},{"id":5989,"outV":50,"properties":{"weight":12}},{"id":4327,"outV":110,"properties":{"weight":2}},{"id":2538,"outV":57,"properties":{"weight":4}},{"id":3050,"outV":153,"properties":{"weight":13}},{
"id":4970,"outV":236,"properties":{"weight":1}},{"id":2283,"outV":25,"properties":{"weight":9}},{"id":236,"outV":145,"properties":{"weight":1}},{"id":6126,"outV":72,"properties":{"weight":2}},{"id":5232,"outV":214,"properties":{"weight":2}},{"id":4594,"outV":85,"properties":{"weight":1}},{"id":1652,"outV":213,"properties":{"weight":3}},{"id":4084,"outV":109,"properties":{"weight":1}},{"id":629,"outV":23,"properties":{"weight":10}},{"id":3701,"outV":3,"properties":{"weight":4}},{"id":5621,"outV":22,"properties":{"weight":1}},{"id":7029,"outV":89,"properties":{"weight":1}},{"id":5238,"outV":32,"properties":{"weight":3}},{"id":2684,"outV":13,"properties":{"weight":9}},{"id":3325,"outV":268,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5120,"inV":40,"properties":{"weight":5}},{"id":5121,"inV":33,"properties":{"weight":3}},{"id":5122,"inV":79,"properties":{"weight":1}},{"id":5123,"inV":292,"properties":{"weight":1}},{"id":5071,"inV":50,"properties":{"weight":9}},{"id":5072,"in
V":12,"properties":{"weight":26}},{"id":5073,"inV":18,"properties":{"weight":4}},{"id":5074,"inV":24,"properties":{"weight":9}},{"id":5075,"inV":23,"properties":{"weight":63}},{"id":5076,"inV":13,"properties":{"weight":12}},{"id":5077,"inV":10,"properties":{"weight":4}},{"id":5078,"inV":11,"properties":{"weight":3}},{"id":5079,"inV":26,"properties":{"weight":18}},{"id":5080,"inV":22,"properties":{"weight":1}},{"id":5081,"inV":16,"properties":{"weight":2}},{"id":5082,"inV":49,"properties":{"weight":1}},{"id":5083,"inV":25,"properties":{"weight":2}},{"id":5084,"inV":51,"properties":{"weight":1}},{"id":5085,"inV":15,"properties":{"weight":1}},{"id":5086,"inV":112,"properties":{"weight":4}},{"id":5087,"inV":121,"properties":{"weight":1}},{"id":5088,"inV":32,"properties":{"weight":7}},{"id":5089,"inV":68,"properties":{"weight":2}},{"id":5090,"inV":120,"properties":{"weight":77}},{"id":5091,"inV":103,"properties":{"weight":1}},{"id":5092,"inV":42,"properties":{"weight":3}},{"id":5093,"inV
":85,"properties":{"weight":4}},{"id":5094,"inV":76,"properties":{"weight":5}},{"id":5095,"inV":181,"properties":{"weight":2}},{"id":5096,"inV":14,"properties":{"weight":2}},{"id":5097,"inV":122,"properties":{"weight":1}},{"id":5098,"inV":153,"properties":{"weight":3}},{"id":5099,"inV":96,"properties":{"weight":1}},{"id":5100,"inV":82,"properties":{"weight":3}},{"id":5101,"inV":110,"properties":{"weight":1}},{"id":5102,"inV":19,"properties":{"weight":6}},{"id":5103,"inV":129,"properties":{"weight":1}},{"id":5104,"inV":84,"properties":{"weight":1}},{"id":5105,"inV":88,"properties":{"weight":9}},{"id":5106,"inV":97,"properties":{"weight":1}},{"id":5107,"inV":114,"properties":{"weight":2}},{"id":5108,"inV":30,"properties":{"weight":8}},{"id":5109,"inV":31,"properties":{"weight":8}},{"id":5110,"inV":69,"properties":{"weight":4}},{"id":5111,"inV":127,"properties":{"weight":2}},{"id":5112,"inV":60,"properties":{"weight":1}},{"id":5113,"inV":39,"properties":{"weight":2}},{"id":5114,"inV":2
1,"properties":{"weight":1}},{"id":5115,"inV":117,"properties":{"weight":1}},{"id":5116,"inV":78,"properties":{"weight":1}},{"id":5117,"inV":38,"properties":{"weight":1}},{"id":5118,"inV":169,"properties":{"weight":2}},{"id":5119,"inV":118,"properties":{"weight":1}}],"sungBy":[{"id":7064,"inV":340}],"writtenBy":[{"id":7063,"inV":339}]},"properties":{"name":[{"id":9,"value":"BERTHA"}],"songType":[{"id":11,"value":"original"}],"performances":[{"id":10,"value":394}]}}
+{"id":5,"label":"song","inE":{"followedBy":[{"id":194,"outV":70,"properties":{"weight":8}},{"id":962,"outV":67,"properties":{"weight":5}},{"id":3,"outV":1,"properties":{"weight":1}},{"id":5446,"outV":231,"properties":{"weight":5}},{"id":6344,"outV":21,"properties":{"weight":6}},{"id":1738,"outV":82,"properties":{"weight":1}},{"id":6666,"outV":12,"properties":{"weight":1}},{"id":1867,"outV":94,"properties":{"weight":15}},{"id":4300,"outV":110,"properties":{"weight":1}},{"id":847,"outV":171,"properties":{"weight":1}},{"id":2832,"outV":101,"properties":{"weight":3}},{"id":6032,"outV":115,"properties":{"weight":1}},{"id":1170,"outV":26,"properties":{"weight":1}},{"id":5330,"outV":238,"properties":{"weight":1}},{"id":1491,"outV":164,"properties":{"weight":3}},{"id":1429,"outV":83,"properties":{"weight":3}},{"id":3033,"outV":14,"properties":{"weight":1}},{"id":6298,"outV":49,"properties":{"weight":1}},{"id":1373,"outV":130,"properties":{"weight":11}},{"id":4447,"outV":113,"properties":{"w
eight":1}},{"id":5151,"outV":125,"properties":{"weight":6}},{"id":5343,"outV":165,"properties":{"weight":2}},{"id":6431,"outV":134,"properties":{"weight":2}},{"id":1953,"outV":148,"properties":{"weight":10}},{"id":1634,"outV":210,"properties":{"weight":1}},{"id":2274,"outV":25,"properties":{"weight":8}},{"id":100,"outV":46,"properties":{"weight":1}},{"id":933,"outV":91,"properties":{"weight":1}},{"id":2021,"outV":149,"properties":{"weight":1}},{"id":6694,"outV":141,"properties":{"weight":2}},{"id":4009,"outV":225,"properties":{"weight":1}},{"id":682,"outV":219,"properties":{"weight":1}},{"id":3694,"outV":3,"properties":{"weight":57}},{"id":4718,"outV":186,"properties":{"weight":6}},{"id":3055,"outV":153,"properties":{"weight":9}},{"id":2480,"outV":68,"properties":{"weight":1}},{"id":2736,"outV":13,"properties":{"weight":3}},{"id":5426,"outV":102,"properties":{"weight":1}},{"id":6899,"outV":147,"properties":{"weight":1}},{"id":5879,"outV":96,"properties":{"weight":22}},{"id":6201,"ou
tV":319,"properties":{"weight":2}},{"id":5370,"outV":132,"properties":{"weight":2}},{"id":700,"outV":206,"properties":{"weight":1}},{"id":2236,"outV":29,"properties":{"weight":5}},{"id":4604,"outV":85,"properties":{"weight":2}},{"id":5759,"outV":129,"properties":{"weight":6}}]},"outE":{"followedBy":[{"id":273,"inV":3,"properties":{"weight":40}},{"id":274,"inV":26,"properties":{"weight":3}},{"id":275,"inV":114,"properties":{"weight":40}},{"id":276,"inV":1,"properties":{"weight":2}},{"id":277,"inV":74,"properties":{"weight":3}},{"id":278,"inV":122,"properties":{"weight":3}},{"id":279,"inV":133,"properties":{"weight":2}},{"id":280,"inV":83,"properties":{"weight":1}},{"id":281,"inV":153,"properties":{"weight":5}},{"id":282,"inV":159,"properties":{"weight":1}},{"id":283,"inV":13,"properties":{"weight":3}},{"id":284,"inV":25,"properties":{"weight":19}},{"id":285,"inV":96,"properties":{"weight":10}},{"id":286,"inV":160,"properties":{"weight":2}},{"id":287,"inV":32,"properties":{"weight":1}
},{"id":288,"inV":120,"properties":{"weight":16}},{"id":289,"inV":50,"properties":{"weight":1}},{"id":290,"inV":116,"properties":{"weight":1}},{"id":291,"inV":127,"properties":{"weight":6}},{"id":292,"inV":65,"properties":{"weight":1}},{"id":293,"inV":130,"properties":{"weight":3}},{"id":294,"inV":125,"properties":{"weight":5}},{"id":295,"inV":70,"properties":{"weight":13}},{"id":296,"inV":134,"properties":{"weight":1}},{"id":297,"inV":161,"properties":{"weight":1}},{"id":298,"inV":162,"properties":{"weight":1}},{"id":299,"inV":124,"properties":{"weight":3}},{"id":300,"inV":38,"properties":{"weight":1}},{"id":301,"inV":29,"properties":{"weight":11}},{"id":302,"inV":163,"properties":{"weight":1}},{"id":303,"inV":94,"properties":{"weight":5}},{"id":304,"inV":85,"properties":{"weight":1}},{"id":305,"inV":164,"properties":{"weight":6}},{"id":306,"inV":64,"properties":{"weight":1}},{"id":307,"inV":150,"properties":{"weight":1}},{"id":308,"inV":165,"properties":{"weight":7}},{"id":309,"in
V":92,"properties":{"weight":1}},{"id":310,"inV":140,"properties":{"weight":1}},{"id":311,"inV":166,"properties":{"weight":1}}],"sungBy":[{"id":7582,"inV":340}],"writtenBy":[{"id":7581,"inV":446}]},"properties":{"name":[{"id":12,"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":14,"value":"cover"}],"performances":[{"id":13,"value":293}]}}
+{"id":6,"label":"song","inE":{"followedBy":[{"id":4,"outV":1,"properties":{"weight":1}},{"id":2023,"outV":282,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2406,"inV":293,"properties":{"weight":1}},{"id":2407,"inV":96,"properties":{"weight":1}}],"sungBy":[{"id":7782,"inV":351}],"writtenBy":[{"id":7781,"inV":527}]},"properties":{"name":[{"id":15,"value":"MONA"}],"songType":[{"id":17,"value":"cover"}],"performances":[{"id":16,"value":1}]}}
+{"id":7,"label":"song","inE":{"followedBy":[{"id":2607,"outV":295,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5,"inV":8,"properties":{"weight":1}}]},"properties":{"name":[{"id":18,"value":"WHERE HAVE THE HEROES GONE"}],"songType":[{"id":20,"value":""}],"performances":[{"id":19,"value":0}]}}
+{"id":8,"label":"song","inE":{"followedBy":[{"id":4705,"outV":111,"properties":{"weight":1}},{"id":5,"outV":7,"properties":{"weight":1}},{"id":5901,"outV":96,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2976,"inV":302,"properties":{"weight":1}},{"id":2977,"inV":96,"properties":{"weight":1}},{"id":2978,"inV":72,"properties":{"weight":1}}],"sungBy":[{"id":7814,"inV":351}],"writtenBy":[{"id":7813,"inV":674}]},"properties":{"name":[{"id":21,"value":"OH BOY"}],"songType":[{"id":23,"value":"cover"}],"performances":[{"id":22,"value":2}]}}
+{"id":9,"label":"song","inE":{"followedBy":[{"id":3776,"outV":3,"properties":{"weight":1}},{"id":65,"outV":46,"properties":{"weight":2}},{"id":1923,"outV":103,"properties":{"weight":3}},{"id":5956,"outV":50,"properties":{"weight":2}},{"id":3077,"outV":153,"properties":{"weight":2}},{"id":5832,"outV":76,"properties":{"weight":1}},{"id":1161,"outV":26,"properties":{"weight":8}},{"id":2699,"outV":13,"properties":{"weight":3}},{"id":6539,"outV":55,"properties":{"weight":1}},{"id":6667,"outV":12,"properties":{"weight":2}},{"id":2578,"outV":57,"properties":{"weight":2}},{"id":787,"outV":122,"properties":{"weight":3}},{"id":3542,"outV":201,"properties":{"weight":1}},{"id":2775,"outV":15,"properties":{"weight":5}},{"id":2840,"outV":101,"properties":{"weight":2}},{"id":4953,"outV":86,"properties":{"weight":2}},{"id":1572,"outV":18,"properties":{"weight":3}},{"id":229,"outV":70,"properties":{"weight":1}},{"id":4264,"outV":10,"properties":{"weight":1}},{"id":4969,"outV":236,"properties":{"weig
ht":3}},{"id":3498,"outV":58,"properties":{"weight":2}},{"id":5226,"outV":216,"properties":{"weight":1}},{"id":5548,"outV":166,"properties":{"weight":1}},{"id":2990,"outV":14,"properties":{"weight":4}},{"id":3950,"outV":138,"properties":{"weight":1}},{"id":2488,"outV":68,"properties":{"weight":1}},{"id":6776,"outV":39,"properties":{"weight":1}},{"id":3641,"outV":24,"properties":{"weight":2}},{"id":1532,"outV":164,"properties":{"weight":2}},{"id":1853,"outV":94,"properties":{"weight":1}},{"id":638,"outV":23,"properties":{"weight":2}},{"id":6335,"outV":21,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6,"inV":10,"properties":{"weight":3}},{"id":7,"inV":11,"properties":{"weight":2}},{"id":8,"inV":12,"properties":{"weight":3}},{"id":9,"inV":13,"properties":{"weight":6}},{"id":10,"inV":14,"properties":{"weight":3}},{"id":11,"inV":15,"properties":{"weight":3}},{"id":12,"inV":16,"properties":{"weight":1}},{"id":13,"inV":17,"properties":{"weight":1}},{"id":14,"inV":18,"properties"
:{"weight":5}},{"id":15,"inV":19,"properties":{"weight":1}},{"id":16,"inV":20,"properties":{"weight":1}},{"id":17,"inV":21,"properties":{"weight":1}},{"id":18,"inV":22,"properties":{"weight":2}},{"id":19,"inV":23,"properties":{"weight":2}},{"id":20,"inV":24,"properties":{"weight":1}},{"id":21,"inV":25,"properties":{"weight":1}},{"id":22,"inV":26,"properties":{"weight":1}},{"id":23,"inV":27,"properties":{"weight":1}},{"id":24,"inV":28,"properties":{"weight":2}},{"id":25,"inV":29,"properties":{"weight":1}},{"id":26,"inV":30,"properties":{"weight":5}},{"id":27,"inV":31,"properties":{"weight":2}},{"id":28,"inV":32,"properties":{"weight":1}},{"id":29,"inV":33,"properties":{"weight":2}},{"id":30,"inV":34,"properties":{"weight":2}},{"id":31,"inV":35,"properties":{"weight":3}},{"id":32,"inV":36,"properties":{"weight":2}},{"id":33,"inV":37,"properties":{"weight":3}},{"id":34,"inV":38,"properties":{"weight":1}},{"id":35,"inV":39,"properties":{"weight":1}},{"id":36,"inV":40,"properties":{"weig
ht":1}},{"id":37,"inV":41,"properties":{"weight":1}},{"id":38,"inV":42,"properties":{"weight":1}},{"id":39,"inV":43,"properties":{"weight":1}}],"sungBy":[{"id":7190,"inV":340}],"writtenBy":[{"id":7189,"inV":339}]},"properties":{"name":[{"id":24,"value":"HERE COMES SUNSHINE"}],"songType":[{"id":26,"value":"original"}],"performances":[{"id":25,"value":65}]}}
+{"id":10,"label":"song","inE":{"followedBy":[{"id":3841,"outV":60,"properties":{"weight":1}},{"id":1027,"outV":73,"properties":{"weight":5}},{"id":6,"outV":9,"properties":{"weight":3}},{"id":3335,"outV":155,"properties":{"weight":1}},{"id":4103,"outV":48,"properties":{"weight":5}},{"id":6279,"outV":49,"properties":{"weight":1}},{"id":4233,"outV":52,"properties":{"weight":1}},{"id":4878,"outV":100,"properties":{"weight":19}},{"id":5264,"outV":32,"properties":{"weight":2}},{"id":2196,"outV":75,"properties":{"weight":4}},{"id":151,"outV":108,"properties":{"weight":3}},{"id":1571,"outV":18,"properties":{"weight":5}},{"id":3619,"outV":24,"properties":{"weight":2}},{"id":3237,"outV":63,"properties":{"weight":3}},{"id":4647,"outV":154,"properties":{"weight":1}},{"id":4521,"outV":105,"properties":{"weight":3}},{"id":1195,"outV":26,"properties":{"weight":1}},{"id":6444,"outV":187,"properties":{"weight":9}},{"id":6956,"outV":84,"properties":{"weight":1}},{"id":687,"outV":157,"properties":{"we
ight":1}},{"id":4784,"outV":114,"properties":{"weight":1}},{"id":6064,"outV":115,"properties":{"weight":1}},{"id":1714,"outV":82,"properties":{"weight":3}},{"id":3890,"outV":51,"properties":{"weight":9}},{"id":55,"outV":46,"properties":{"weight":1}},{"id":5175,"outV":71,"properties":{"weight":1}},{"id":1337,"outV":31,"properties":{"weight":1}},{"id":1083,"outV":59,"properties":{"weight":10}},{"id":4155,"outV":54,"properties":{"weight":6}},{"id":6077,"outV":72,"properties":{"weight":5}},{"id":5441,"outV":239,"properties":{"weight":1}},{"id":1987,"outV":152,"properties":{"weight":2}},{"id":1860,"outV":94,"properties":{"weight":1}},{"id":2116,"outV":17,"properties":{"weight":7}},{"id":3269,"outV":160,"properties":{"weight":2}},{"id":454,"outV":38,"properties":{"weight":1}},{"id":3142,"outV":104,"properties":{"weight":4}},{"id":2505,"outV":57,"properties":{"weight":12}},{"id":6603,"outV":127,"properties":{"weight":4}},{"id":6859,"outV":64,"properties":{"weight":1}},{"id":717,"outV":80,"
properties":{"weight":9}},{"id":1360,"outV":130,"properties":{"weight":2}},{"id":3026,"outV":14,"properties":{"weight":1}},{"id":5972,"outV":50,"properties":{"weight":1}},{"id":5077,"outV":4,"properties":{"weight":4}},{"id":2392,"outV":87,"properties":{"weight":1}},{"id":1250,"outV":27,"properties":{"weight":10}},{"id":4706,"outV":111,"properties":{"weight":3}},{"id":6755,"outV":53,"properties":{"weight":1}},{"id":485,"outV":98,"properties":{"weight":4}},{"id":2917,"outV":78,"properties":{"weight":10}},{"id":3559,"outV":56,"properties":{"weight":16}},{"id":3436,"outV":58,"properties":{"weight":10}},{"id":3820,"outV":88,"properties":{"weight":1}},{"id":4463,"outV":202,"properties":{"weight":4}},{"id":880,"outV":189,"properties":{"weight":1}},{"id":6256,"outV":117,"properties":{"weight":1}},{"id":3698,"outV":3,"properties":{"weight":1}},{"id":2035,"outV":180,"properties":{"weight":1}},{"id":2291,"outV":25,"properties":{"weight":1}},{"id":3317,"outV":252,"properties":{"weight":1}},{"id
":2806,"outV":15,"properties":{"weight":2}},{"id":2427,"outV":68,"properties":{"weight":2}},{"id":6782,"outV":39,"properties":{"weight":4}},{"id":4351,"outV":62,"properties":{"weight":2}}]},"outE":{"followedBy":[{"id":4235,"inV":56,"properties":{"weight":13}},{"id":4236,"inV":27,"properties":{"weight":7}},{"id":4237,"inV":58,"properties":{"weight":11}},{"id":4238,"inV":80,"properties":{"weight":6}},{"id":4239,"inV":59,"properties":{"weight":9}},{"id":4240,"inV":100,"properties":{"weight":21}},{"id":4241,"inV":104,"properties":{"weight":5}},{"id":4242,"inV":50,"properties":{"weight":2}},{"id":4243,"inV":48,"properties":{"weight":8}},{"id":4244,"inV":54,"properties":{"weight":13}},{"id":4245,"inV":19,"properties":{"weight":9}},{"id":4246,"inV":72,"properties":{"weight":4}},{"id":4247,"inV":14,"properties":{"weight":1}},{"id":4248,"inV":122,"properties":{"weight":2}},{"id":4249,"inV":235,"properties":{"weight":1}},{"id":4250,"inV":218,"properties":{"weight":1}},{"id":4251,"inV":252,"pr
operties":{"weight":1}},{"id":4252,"inV":89,"properties":{"weight":3}},{"id":4253,"inV":57,"properties":{"weight":12}},{"id":4254,"inV":49,"properties":{"weight":3}},{"id":4255,"inV":94,"properties":{"weight":3}},{"id":4256,"inV":153,"properties":{"weight":1}},{"id":4257,"inV":13,"properties":{"weight":1}},{"id":4258,"inV":160,"properties":{"weight":1}},{"id":4259,"inV":51,"properties":{"weight":10}},{"id":4260,"inV":18,"properties":{"weight":3}},{"id":4261,"inV":202,"properties":{"weight":4}},{"id":4262,"inV":17,"properties":{"weight":5}},{"id":4263,"inV":46,"properties":{"weight":1}},{"id":4264,"inV":9,"properties":{"weight":1}},{"id":4265,"inV":55,"properties":{"weight":1}},{"id":4266,"inV":125,"properties":{"weight":1}},{"id":4267,"inV":69,"properties":{"weight":2}},{"id":4268,"inV":98,"properties":{"weight":8}},{"id":4269,"inV":82,"properties":{"weight":4}},{"id":4270,"inV":154,"properties":{"weight":1}},{"id":4271,"inV":105,"properties":{"weight":7}},{"id":4272,"inV":112,"prop
erties":{"weight":2}},{"id":4273,"inV":109,"properties":{"weight":1}},{"id":4274,"inV":42,"properties":{"weight":2}},{"id":4275,"inV":121,"properties":{"weight":1}},{"id":4276,"inV":73,"properties":{"weight":5}},{"id":4277,"inV":106,"properties":{"weight":1}},{"id":4278,"inV":116,"properties":{"weight":1}},{"id":4279,"inV":68,"properties":{"weight":2}},{"id":4280,"inV":152,"properties":{"weight":1}},{"id":4281,"inV":23,"properties":{"weight":6}},{"id":4282,"inV":88,"properties":{"weight":1}},{"id":4283,"inV":39,"properties":{"weight":4}},{"id":4284,"inV":12,"properties":{"weight":1}},{"id":4285,"inV":111,"properties":{"weight":1}},{"id":4286,"inV":99,"properties":{"weight":1}},{"id":4287,"inV":87,"properties":{"weight":2}},{"id":4288,"inV":108,"properties":{"weight":2}},{"id":4289,"inV":53,"properties":{"weight":4}},{"id":4290,"inV":26,"properties":{"weight":5}},{"id":4291,"inV":117,"properties":{"weight":2}},{"id":4292,"inV":115,"properties":{"weight":2}},{"id":4293,"inV":63,"prope
rties":{"weight":3}},{"id":4294,"inV":103,"properties":{"weight":1}}],"sungBy":[{"id":7460,"inV":351}],"writtenBy":[{"id":7459,"inV":471}]},"properties":{"name":[{"id":27,"value":"BEAT IT ON DOWN THE LINE"}],"songType":[{"id":29,"value":"cover"}],"performances":[{"id":28,"value":325}]}}
+{"id":11,"label":"song","inE":{"followedBy":[{"id":1088,"outV":59,"properties":{"weight":14}},{"id":6273,"outV":49,"properties":{"weight":2}},{"id":1989,"outV":152,"properties":{"weight":2}},{"id":7,"outV":9,"properties":{"weight":2}},{"id":4552,"outV":105,"properties":{"weight":3}},{"id":521,"outV":205,"properties":{"weight":1}},{"id":714,"outV":80,"properties":{"weight":5}},{"id":3146,"outV":104,"properties":{"weight":3}},{"id":4876,"outV":100,"properties":{"weight":2}},{"id":2190,"outV":235,"properties":{"weight":1}},{"id":4496,"outV":202,"properties":{"weight":1}},{"id":2513,"outV":57,"properties":{"weight":4}},{"id":4053,"outV":173,"properties":{"weight":1}},{"id":5078,"outV":4,"properties":{"weight":3}},{"id":1309,"outV":27,"properties":{"weight":5}},{"id":4769,"outV":114,"properties":{"weight":1}},{"id":5025,"outV":30,"properties":{"weight":1}},{"id":3554,"outV":56,"properties":{"weight":7}},{"id":1064,"outV":73,"properties":{"weight":1}},{"id":2920,"outV":78,"properties":{"w
eight":2}},{"id":6056,"outV":115,"properties":{"weight":2}},{"id":41,"outV":46,"properties":{"weight":2}},{"id":3434,"outV":58,"properties":{"weight":5}},{"id":6442,"outV":187,"properties":{"weight":7}},{"id":1775,"outV":234,"properties":{"weight":4}},{"id":3888,"outV":51,"properties":{"weight":1}},{"id":626,"outV":23,"properties":{"weight":1}},{"id":1396,"outV":190,"properties":{"weight":1}},{"id":4020,"outV":191,"properties":{"weight":1}},{"id":6772,"outV":39,"properties":{"weight":1}},{"id":3637,"outV":24,"properties":{"weight":2}},{"id":6072,"outV":72,"properties":{"weight":5}},{"id":4157,"outV":54,"properties":{"weight":2}}]},"outE":{"followedBy":[{"id":972,"inV":57,"properties":{"weight":4}},{"id":973,"inV":59,"properties":{"weight":3}},{"id":974,"inV":53,"properties":{"weight":4}},{"id":975,"inV":54,"properties":{"weight":15}},{"id":976,"inV":56,"properties":{"weight":3}},{"id":977,"inV":48,"properties":{"weight":3}},{"id":978,"inV":72,"properties":{"weight":4}},{"id":979,"in
V":19,"properties":{"weight":9}},{"id":980,"inV":4,"properties":{"weight":3}},{"id":981,"inV":58,"properties":{"weight":6}},{"id":982,"inV":46,"properties":{"weight":1}},{"id":983,"inV":234,"properties":{"weight":7}},{"id":984,"inV":235,"properties":{"weight":2}},{"id":985,"inV":207,"properties":{"weight":4}},{"id":986,"inV":39,"properties":{"weight":3}},{"id":987,"inV":50,"properties":{"weight":1}},{"id":988,"inV":104,"properties":{"weight":2}},{"id":989,"inV":49,"properties":{"weight":1}},{"id":990,"inV":17,"properties":{"weight":3}},{"id":991,"inV":100,"properties":{"weight":1}},{"id":992,"inV":24,"properties":{"weight":1}},{"id":993,"inV":170,"properties":{"weight":2}},{"id":994,"inV":73,"properties":{"weight":1}},{"id":995,"inV":173,"properties":{"weight":1}},{"id":996,"inV":236,"properties":{"weight":1}},{"id":997,"inV":202,"properties":{"weight":3}},{"id":998,"inV":80,"properties":{"weight":2}},{"id":999,"inV":115,"properties":{"weight":4}},{"id":1000,"inV":105,"properties":{
"weight":1}}],"sungBy":[{"id":7072,"inV":351}],"writtenBy":[{"id":7071,"inV":350}]},"properties":{"name":[{"id":30,"value":"BLACK THROATED WIND"}],"songType":[{"id":32,"value":"original"}],"performances":[{"id":31,"value":158}]}}
+{"id":12,"label":"song","inE":{"followedBy":[{"id":3072,"outV":153,"properties":{"weight":4}},{"id":2433,"outV":68,"properties":{"weight":1}},{"id":1410,"outV":83,"properties":{"weight":1}},{"id":3331,"outV":155,"properties":{"weight":2}},{"id":4227,"outV":52,"properties":{"weight":3}},{"id":1028,"outV":73,"properties":{"weight":12}},{"id":4102,"outV":48,"properties":{"weight":33}},{"id":8,"outV":9,"properties":{"weight":3}},{"id":6281,"outV":49,"properties":{"weight":2}},{"id":652,"outV":23,"properties":{"weight":2}},{"id":5388,"outV":69,"properties":{"weight":1}},{"id":525,"outV":120,"properties":{"weight":1}},{"id":3726,"outV":3,"properties":{"weight":1}},{"id":783,"outV":122,"properties":{"weight":1}},{"id":3855,"outV":60,"properties":{"weight":1}},{"id":1938,"outV":148,"properties":{"weight":1}},{"id":3986,"outV":106,"properties":{"weight":1}},{"id":916,"outV":91,"properties":{"weight":1}},{"id":1172,"outV":26,"properties":{"weight":4}},{"id":6935,"outV":84,"properties":{"weigh
t":5}},{"id":3225,"outV":63,"properties":{"weight":4}},{"id":5017,"outV":30,"properties":{"weight":1}},{"id":155,"outV":108,"properties":{"weight":6}},{"id":2203,"outV":75,"properties":{"weight":3}},{"id":4893,"outV":100,"properties":{"weight":7}},{"id":4640,"outV":154,"properties":{"weight":10}},{"id":5665,"outV":169,"properties":{"weight":1}},{"id":1702,"outV":124,"properties":{"weight":1}},{"id":2598,"outV":112,"properties":{"weight":7}},{"id":5286,"outV":32,"properties":{"weight":4}},{"id":3879,"outV":51,"properties":{"weight":12}},{"id":4007,"outV":225,"properties":{"weight":1}},{"id":424,"outV":38,"properties":{"weight":5}},{"id":4522,"outV":105,"properties":{"weight":12}},{"id":5034,"outV":47,"properties":{"weight":1}},{"id":4779,"outV":114,"properties":{"weight":3}},{"id":6576,"outV":116,"properties":{"weight":1}},{"id":6835,"outV":64,"properties":{"weight":1}},{"id":6455,"outV":187,"properties":{"weight":12}},{"id":824,"outV":171,"properties":{"weight":1}},{"id":5304,"outV"
:170,"properties":{"weight":2}},{"id":1722,"outV":82,"properties":{"weight":1}},{"id":6074,"outV":72,"properties":{"weight":4}},{"id":4284,"outV":10,"properties":{"weight":1}},{"id":2109,"outV":17,"properties":{"weight":24}},{"id":703,"outV":206,"properties":{"weight":2}},{"id":5440,"outV":239,"properties":{"weight":2}},{"id":5952,"outV":50,"properties":{"weight":7}},{"id":1858,"outV":94,"properties":{"weight":2}},{"id":1347,"outV":31,"properties":{"weight":1}},{"id":1605,"outV":18,"properties":{"weight":1}},{"id":4165,"outV":54,"properties":{"weight":17}},{"id":3654,"outV":24,"properties":{"weight":3}},{"id":4038,"outV":173,"properties":{"weight":1}},{"id":6598,"outV":127,"properties":{"weight":1}},{"id":3271,"outV":160,"properties":{"weight":1}},{"id":3527,"outV":223,"properties":{"weight":1}},{"id":1096,"outV":59,"properties":{"weight":26}},{"id":3144,"outV":104,"properties":{"weight":24}},{"id":1993,"outV":152,"properties":{"weight":2}},{"id":6985,"outV":175,"properties":{"weigh
t":1}},{"id":6730,"outV":53,"properties":{"weight":4}},{"id":3019,"outV":14,"properties":{"weight":1}},{"id":3788,"outV":168,"properties":{"weight":1}},{"id":5072,"outV":4,"properties":{"weight":26}},{"id":2515,"outV":57,"properties":{"weight":3}},{"id":1365,"outV":130,"properties":{"weight":2}},{"id":2647,"outV":137,"properties":{"weight":1}},{"id":730,"outV":80,"properties":{"weight":12}},{"id":2780,"outV":15,"properties":{"weight":3}},{"id":482,"outV":98,"properties":{"weight":8}},{"id":3810,"outV":88,"properties":{"weight":6}},{"id":7013,"outV":89,"properties":{"weight":1}},{"id":4072,"outV":109,"properties":{"weight":1}},{"id":2281,"outV":25,"properties":{"weight":2}},{"id":2668,"outV":13,"properties":{"weight":3}},{"id":3565,"outV":56,"properties":{"weight":9}},{"id":1262,"outV":27,"properties":{"weight":17}},{"id":2031,"outV":180,"properties":{"weight":1}},{"id":6769,"outV":39,"properties":{"weight":2}},{"id":1779,"outV":234,"properties":{"weight":1}},{"id":4468,"outV":202,"p
roperties":{"weight":4}},{"id":1909,"outV":103,"properties":{"weight":1}},{"id":2934,"outV":78,"properties":{"weight":1}},{"id":3446,"outV":58,"properties":{"weight":4}},{"id":381,"outV":74,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6656,"inV":49,"properties":{"weight":9}},{"id":6657,"inV":19,"properties":{"weight":3}},{"id":6658,"inV":27,"properties":{"weight":9}},{"id":6659,"inV":252,"properties":{"weight":1}},{"id":6660,"inV":206,"properties":{"weight":1}},{"id":6661,"inV":89,"properties":{"weight":4}},{"id":6662,"inV":160,"properties":{"weight":1}},{"id":6663,"inV":15,"properties":{"weight":167}},{"id":6664,"inV":4,"properties":{"weight":3}},{"id":6665,"inV":202,"properties":{"weight":2}},{"id":6666,"inV":5,"properties":{"weight":1}},{"id":6667,"inV":9,"properties":{"weight":2}},{"id":6668,"inV":83,"properties":{"weight":3}},{"id":6669,"inV":3,"properties":{"weight":1}},{"id":6670,"inV":52,"properties":{"weight":1}},{"id":6671,"inV":25,"properties":{"weight":1}},{"
id":6672,"inV":46,"properties":{"weight":1}},{"id":6673,"inV":123,"properties":{"weight":2}},{"id":6674,"inV":51,"properties":{"weight":4}},{"id":6675,"inV":17,"properties":{"weight":3}},{"id":6676,"inV":56,"properties":{"weight":5}},{"id":6677,"inV":98,"properties":{"weight":5}},{"id":6678,"inV":104,"properties":{"weight":4}},{"id":6679,"inV":69,"properties":{"weight":3}},{"id":6680,"inV":170,"properties":{"weight":2}},{"id":6681,"inV":82,"properties":{"weight":1}},{"id":6682,"inV":80,"properties":{"weight":2}},{"id":6683,"inV":215,"properties":{"weight":1}},{"id":6684,"inV":48,"properties":{"weight":1}},{"id":6685,"inV":14,"properties":{"weight":3}},{"id":6686,"inV":50,"properties":{"weight":2}},{"id":6687,"inV":24,"properties":{"weight":83}},{"id":6688,"inV":18,"properties":{"weight":1}},{"id":6689,"inV":39,"properties":{"weight":6}},{"id":6690,"inV":105,"properties":{"weight":1}},{"id":6691,"inV":131,"properties":{"weight":14}},{"id":6645,"inV":72,"properties":{"weight":7}},{"id
":6646,"inV":58,"properties":{"weight":7}},{"id":6647,"inV":57,"properties":{"weight":6}},{"id":6648,"inV":54,"properties":{"weight":8}},{"id":6649,"inV":59,"properties":{"weight":14}},{"id":6650,"inV":100,"properties":{"weight":7}},{"id":6651,"inV":53,"properties":{"weight":4}},{"id":6652,"inV":148,"properties":{"weight":1}},{"id":6653,"inV":218,"properties":{"weight":2}},{"id":6654,"inV":235,"properties":{"weight":2}},{"id":6655,"inV":130,"properties":{"weight":1}}],"sungBy":[{"id":7776,"inV":351}],"writtenBy":[{"id":7775,"inV":659}]},"properties":{"name":[{"id":33,"value":"ME AND MY UNCLE"}],"songType":[{"id":35,"value":"cover"}],"performances":[{"id":34,"value":616}]}}
+{"id":13,"label":"song","inE":{"followedBy":[{"id":4865,"outV":35,"properties":{"weight":4}},{"id":1026,"outV":73,"properties":{"weight":1}},{"id":3330,"outV":155,"properties":{"weight":2}},{"id":5636,"outV":22,"properties":{"weight":1}},{"id":775,"outV":122,"properties":{"weight":1}},{"id":1799,"outV":196,"properties":{"weight":2}},{"id":6407,"outV":134,"properties":{"weight":24}},{"id":9,"outV":9,"properties":{"weight":6}},{"id":4874,"outV":100,"properties":{"weight":6}},{"id":4108,"outV":48,"properties":{"weight":3}},{"id":5132,"outV":222,"properties":{"weight":1}},{"id":2830,"outV":101,"properties":{"weight":8}},{"id":3857,"outV":60,"properties":{"weight":35}},{"id":6931,"outV":84,"properties":{"weight":7}},{"id":533,"outV":120,"properties":{"weight":1}},{"id":6165,"outV":36,"properties":{"weight":1}},{"id":4630,"outV":154,"properties":{"weight":8}},{"id":5142,"outV":125,"properties":{"weight":11}},{"id":283,"outV":5,"properties":{"weight":3}},{"id":1567,"outV":18,"properties":{
"weight":3}},{"id":1823,"outV":41,"properties":{"weight":4}},{"id":3359,"outV":184,"properties":{"weight":3}},{"id":3617,"outV":24,"properties":{"weight":1}},{"id":3108,"outV":153,"properties":{"weight":1}},{"id":3878,"outV":51,"properties":{"weight":6}},{"id":2347,"outV":87,"properties":{"weight":8}},{"id":6443,"outV":187,"properties":{"weight":47}},{"id":6700,"outV":141,"properties":{"weight":4}},{"id":5682,"outV":167,"properties":{"weight":1}},{"id":53,"outV":46,"properties":{"weight":4}},{"id":823,"outV":171,"properties":{"weight":24}},{"id":4151,"outV":218,"properties":{"weight":2}},{"id":5943,"outV":50,"properties":{"weight":1}},{"id":2617,"outV":158,"properties":{"weight":1}},{"id":3386,"outV":177,"properties":{"weight":2}},{"id":4411,"outV":327,"properties":{"weight":1}},{"id":1852,"outV":94,"properties":{"weight":4}},{"id":6206,"outV":319,"properties":{"weight":1}},{"id":1087,"outV":59,"properties":{"weight":5}},{"id":2111,"outV":17,"properties":{"weight":4}},{"id":4159,"ou
tV":54,"properties":{"weight":16}},{"id":6723,"outV":53,"properties":{"weight":6}},{"id":6984,"outV":175,"properties":{"weight":1}},{"id":3145,"outV":104,"properties":{"weight":4}},{"id":4947,"outV":86,"properties":{"weight":1}},{"id":5203,"outV":99,"properties":{"weight":2}},{"id":1366,"outV":130,"properties":{"weight":12}},{"id":1622,"outV":210,"properties":{"weight":1}},{"id":2908,"outV":118,"properties":{"weight":1}},{"id":1885,"outV":103,"properties":{"weight":3}},{"id":4959,"outV":207,"properties":{"weight":6}},{"id":3435,"outV":58,"properties":{"weight":8}},{"id":6763,"outV":39,"properties":{"weight":8}},{"id":5741,"outV":129,"properties":{"weight":12}},{"id":366,"outV":74,"properties":{"weight":38}},{"id":2926,"outV":78,"properties":{"weight":3}},{"id":623,"outV":23,"properties":{"weight":1}},{"id":4721,"outV":186,"properties":{"weight":4}},{"id":2165,"outV":151,"properties":{"weight":1}},{"id":886,"outV":140,"properties":{"weight":1}},{"id":3703,"outV":3,"properties":{"weig
ht":5}},{"id":7031,"outV":89,"properties":{"weight":4}},{"id":1411,"outV":83,"properties":{"weight":7}},{"id":3974,"outV":106,"properties":{"weight":2}},{"id":6278,"outV":49,"properties":{"weight":1}},{"id":912,"outV":91,"properties":{"weight":59}},{"id":2192,"outV":235,"properties":{"weight":1}},{"id":4759,"outV":37,"properties":{"weight":2}},{"id":1179,"outV":26,"properties":{"weight":2}},{"id":5789,"outV":76,"properties":{"weight":3}},{"id":4257,"outV":10,"properties":{"weight":1}},{"id":6561,"outV":172,"properties":{"weight":1}},{"id":4771,"outV":114,"properties":{"weight":3}},{"id":1454,"outV":81,"properties":{"weight":10}},{"id":6073,"outV":72,"properties":{"weight":13}},{"id":5306,"outV":170,"properties":{"weight":4}},{"id":4027,"outV":173,"properties":{"weight":3}},{"id":1725,"outV":82,"properties":{"weight":3}},{"id":960,"outV":67,"properties":{"weight":2}},{"id":1985,"outV":152,"properties":{"weight":1}},{"id":6594,"outV":127,"properties":{"weight":6}},{"id":6342,"outV":21
,"properties":{"weight":4}},{"id":455,"outV":139,"properties":{"weight":1}},{"id":3277,"outV":160,"properties":{"weight":3}},{"id":5837,"outV":258,"properties":{"weight":1}},{"id":208,"outV":70,"properties":{"weight":2}},{"id":2256,"outV":29,"properties":{"weight":1}},{"id":721,"outV":80,"properties":{"weight":1}},{"id":2771,"outV":15,"properties":{"weight":3}},{"id":5076,"outV":4,"properties":{"weight":12}},{"id":2519,"outV":57,"properties":{"weight":10}},{"id":4312,"outV":110,"properties":{"weight":1}},{"id":2268,"outV":25,"properties":{"weight":8}},{"id":2014,"outV":149,"properties":{"weight":1}},{"id":3552,"outV":56,"properties":{"weight":8}},{"id":481,"outV":98,"properties":{"weight":3}},{"id":1764,"outV":28,"properties":{"weight":3}},{"id":1258,"outV":27,"properties":{"weight":3}},{"id":1518,"outV":164,"properties":{"weight":1}},{"id":4846,"outV":119,"properties":{"weight":1}},{"id":4593,"outV":85,"properties":{"weight":2}},{"id":244,"outV":150,"properties":{"weight":3}},{"id"
:1780,"outV":234,"properties":{"weight":2}},{"id":4344,"outV":62,"properties":{"weight":12}},{"id":2044,"outV":92,"properties":{"weight":2}},{"id":5374,"outV":69,"properties":{"weight":34}},{"id":5886,"outV":96,"properties":{"weight":15}}]},"outE":{"followedBy":[{"id":2688,"inV":94,"properties":{"weight":4}},{"id":2689,"inV":130,"properties":{"weight":11}},{"id":2690,"inV":83,"properties":{"weight":13}},{"id":2691,"inV":170,"properties":{"weight":1}},{"id":2692,"inV":51,"properties":{"weight":3}},{"id":2693,"inV":22,"properties":{"weight":2}},{"id":2694,"inV":296,"properties":{"weight":1}},{"id":2695,"inV":52,"properties":{"weight":1}},{"id":2696,"inV":17,"properties":{"weight":2}},{"id":2697,"inV":202,"properties":{"weight":3}},{"id":2698,"inV":27,"properties":{"weight":2}},{"id":2699,"inV":9,"properties":{"weight":3}},{"id":2700,"inV":25,"properties":{"weight":12}},{"id":2701,"inV":195,"properties":{"weight":2}},{"id":2702,"inV":206,"properties":{"weight":1}},{"id":2703,"inV":39,"
properties":{"weight":1}},{"id":2704,"inV":69,"properties":{"weight":6}},{"id":2705,"inV":24,"properties":{"weight":1}},{"id":2706,"inV":82,"properties":{"weight":3}},{"id":2707,"inV":57,"properties":{"weight":1}},{"id":2708,"inV":134,"properties":{"weight":9}},{"id":2709,"inV":110,"properties":{"weight":1}},{"id":2710,"inV":99,"properties":{"weight":3}},{"id":2711,"inV":76,"properties":{"weight":4}},{"id":2712,"inV":3,"properties":{"weight":3}},{"id":2713,"inV":178,"properties":{"weight":1}},{"id":2714,"inV":184,"properties":{"weight":1}},{"id":2715,"inV":60,"properties":{"weight":21}},{"id":2716,"inV":148,"properties":{"weight":1}},{"id":2717,"inV":32,"properties":{"weight":1}},{"id":2718,"inV":91,"properties":{"weight":42}},{"id":2719,"inV":103,"properties":{"weight":1}},{"id":2720,"inV":114,"properties":{"weight":4}},{"id":2721,"inV":141,"properties":{"weight":4}},{"id":2722,"inV":154,"properties":{"weight":3}},{"id":2723,"inV":109,"properties":{"weight":2}},{"id":2724,"inV":125
,"properties":{"weight":9}},{"id":2725,"inV":85,"properties":{"weight":2}},{"id":2726,"inV":84,"properties":{"weight":5}},{"id":2727,"inV":50,"properties":{"weight":1}},{"id":2728,"inV":214,"properties":{"weight":1}},{"id":2729,"inV":72,"properties":{"weight":1}},{"id":2730,"inV":246,"properties":{"weight":1}},{"id":2731,"inV":129,"properties":{"weight":29}},{"id":2732,"inV":65,"properties":{"weight":2}},{"id":2733,"inV":133,"properties":{"weight":1}},{"id":2734,"inV":62,"properties":{"weight":1}},{"id":2735,"inV":29,"properties":{"weight":4}},{"id":2736,"inV":5,"properties":{"weight":3}},{"id":2737,"inV":183,"properties":{"weight":3}},{"id":2738,"inV":210,"properties":{"weight":1}},{"id":2739,"inV":128,"properties":{"weight":1}},{"id":2740,"inV":67,"properties":{"weight":1}},{"id":2741,"inV":212,"properties":{"weight":1}},{"id":2742,"inV":70,"properties":{"weight":2}},{"id":2743,"inV":75,"properties":{"weight":1}},{"id":2744,"inV":71,"properties":{"weight":1}},{"id":2745,"inV":168,
"properties":{"weight":2}},{"id":2746,"inV":157,"properties":{"weight":1}},{"id":2747,"inV":92,"properties":{"weight":1}},{"id":2748,"inV":89,"properties":{"weight":5}},{"id":2749,"inV":81,"properties":{"weight":1}},{"id":2750,"inV":187,"properties":{"weight":1}},{"id":2751,"inV":164,"properties":{"weight":1}},{"id":2752,"inV":136,"properties":{"weight":1}},{"id":2753,"inV":46,"properties":{"weight":1}},{"id":2660,"inV":207,"properties":{"weight":3}},{"id":2661,"inV":122,"properties":{"weight":17}},{"id":2662,"inV":96,"properties":{"weight":157}},{"id":2663,"inV":104,"properties":{"weight":1}},{"id":2664,"inV":26,"properties":{"weight":14}},{"id":2665,"inV":123,"properties":{"weight":3}},{"id":2666,"inV":19,"properties":{"weight":12}},{"id":2667,"inV":100,"properties":{"weight":5}},{"id":2668,"inV":12,"properties":{"weight":3}},{"id":2669,"inV":49,"properties":{"weight":12}},{"id":2670,"inV":21,"properties":{"weight":4}},{"id":2671,"inV":120,"properties":{"weight":9}},{"id":2672,"in
V":23,"properties":{"weight":5}},{"id":2673,"inV":59,"properties":{"weight":6}},{"id":2674,"inV":54,"properties":{"weight":5}},{"id":2675,"inV":80,"properties":{"weight":1}},{"id":2676,"inV":234,"properties":{"weight":1}},{"id":2677,"inV":53,"properties":{"weight":2}},{"id":2678,"inV":225,"properties":{"weight":1}},{"id":2679,"inV":235,"properties":{"weight":2}},{"id":2680,"inV":160,"properties":{"weight":3}},{"id":2681,"inV":56,"properties":{"weight":3}},{"id":2682,"inV":127,"properties":{"weight":6}},{"id":2683,"inV":18,"properties":{"weight":3}},{"id":2684,"inV":4,"properties":{"weight":9}},{"id":2685,"inV":15,"properties":{"weight":7}},{"id":2686,"inV":74,"properties":{"weight":86}},{"id":2687,"inV":153,"properties":{"weight":12}}],"sungBy":[{"id":7292,"inV":359}],"writtenBy":[{"id":7291,"inV":339}]},"properties":{"name":[{"id":36,"value":"PLAYING IN THE BAND"}],"songType":[{"id":38,"value":"original"}],"performances":[{"id":37,"value":582}]}}
+{"id":14,"label":"song","inE":{"followedBy":[{"id":6784,"outV":39,"properties":{"weight":10}},{"id":5251,"outV":32,"properties":{"weight":1}},{"id":4229,"outV":52,"properties":{"weight":3}},{"id":4745,"outV":294,"properties":{"weight":4}},{"id":10,"outV":9,"properties":{"weight":3}},{"id":6283,"outV":49,"properties":{"weight":2}},{"id":4364,"outV":62,"properties":{"weight":16}},{"id":4109,"outV":48,"properties":{"weight":10}},{"id":6544,"outV":55,"properties":{"weight":1}},{"id":4881,"outV":100,"properties":{"weight":20}},{"id":6034,"outV":115,"properties":{"weight":1}},{"id":531,"outV":120,"properties":{"weight":1}},{"id":3219,"outV":63,"properties":{"weight":2}},{"id":4758,"outV":37,"properties":{"weight":2}},{"id":4247,"outV":10,"properties":{"weight":1}},{"id":4631,"outV":154,"properties":{"weight":6}},{"id":3866,"outV":60,"properties":{"weight":2}},{"id":1947,"outV":148,"properties":{"weight":1}},{"id":1436,"outV":83,"properties":{"weight":7}},{"id":2844,"outV":101,"properties"
:{"weight":1}},{"id":6685,"outV":12,"properties":{"weight":3}},{"id":1183,"outV":26,"properties":{"weight":2}},{"id":160,"outV":108,"properties":{"weight":2}},{"id":4517,"outV":105,"properties":{"weight":6}},{"id":6954,"outV":84,"properties":{"weight":4}},{"id":1451,"outV":81,"properties":{"weight":12}},{"id":1582,"outV":18,"properties":{"weight":4}},{"id":3892,"outV":51,"properties":{"weight":10}},{"id":2107,"outV":17,"properties":{"weight":19}},{"id":5820,"outV":76,"properties":{"weight":1}},{"id":6463,"outV":187,"properties":{"weight":26}},{"id":1090,"outV":59,"properties":{"weight":7}},{"id":1731,"outV":82,"properties":{"weight":4}},{"id":6083,"outV":72,"properties":{"weight":9}},{"id":4037,"outV":173,"properties":{"weight":1}},{"id":2375,"outV":87,"properties":{"weight":8}},{"id":4169,"outV":54,"properties":{"weight":36}},{"id":5578,"outV":42,"properties":{"weight":1}},{"id":716,"outV":80,"properties":{"weight":10}},{"id":5964,"outV":50,"properties":{"weight":2}},{"id":845,"out
V":171,"properties":{"weight":11}},{"id":5709,"outV":20,"properties":{"weight":1}},{"id":5838,"outV":258,"properties":{"weight":1}},{"id":1232,"outV":248,"properties":{"weight":1}},{"id":6993,"outV":175,"properties":{"weight":1}},{"id":3666,"outV":24,"properties":{"weight":2}},{"id":3156,"outV":104,"properties":{"weight":6}},{"id":3796,"outV":88,"properties":{"weight":1}},{"id":6742,"outV":53,"properties":{"weight":15}},{"id":2523,"outV":57,"properties":{"weight":9}},{"id":864,"outV":189,"properties":{"weight":2}},{"id":3556,"outV":56,"properties":{"weight":21}},{"id":102,"outV":46,"properties":{"weight":1}},{"id":5096,"outV":4,"properties":{"weight":2}},{"id":489,"outV":98,"properties":{"weight":3}},{"id":1257,"outV":27,"properties":{"weight":19}},{"id":2030,"outV":180,"properties":{"weight":2}},{"id":2159,"outV":151,"properties":{"weight":1}},{"id":2803,"outV":15,"properties":{"weight":4}},{"id":2935,"outV":78,"properties":{"weight":1}},{"id":2426,"outV":68,"properties":{"weight":
4}},{"id":3962,"outV":106,"properties":{"weight":2}},{"id":4474,"outV":202,"properties":{"weight":1}},{"id":123,"outV":97,"properties":{"weight":1}},{"id":4092,"outV":109,"properties":{"weight":1}},{"id":5628,"outV":22,"properties":{"weight":1}},{"id":1021,"outV":73,"properties":{"weight":20}},{"id":3455,"outV":58,"properties":{"weight":12}}]},"outE":{"followedBy":[{"id":2981,"inV":50,"properties":{"weight":2}},{"id":2982,"inV":4,"properties":{"weight":3}},{"id":2983,"inV":53,"properties":{"weight":8}},{"id":2984,"inV":57,"properties":{"weight":55}},{"id":2985,"inV":89,"properties":{"weight":2}},{"id":2986,"inV":122,"properties":{"weight":1}},{"id":2987,"inV":153,"properties":{"weight":1}},{"id":2988,"inV":72,"properties":{"weight":26}},{"id":2989,"inV":19,"properties":{"weight":17}},{"id":2990,"inV":9,"properties":{"weight":4}},{"id":2991,"inV":17,"properties":{"weight":13}},{"id":2992,"inV":46,"properties":{"weight":5}},{"id":2993,"inV":51,"properties":{"weight":15}},{"id":2994,"i
nV":54,"properties":{"weight":28}},{"id":2995,"inV":202,"properties":{"weight":3}},{"id":2996,"inV":27,"properties":{"weight":6}},{"id":2997,"inV":52,"properties":{"weight":3}},{"id":2998,"inV":58,"properties":{"weight":1}},{"id":2999,"inV":56,"properties":{"weight":8}},{"id":3000,"inV":100,"properties":{"weight":12}},{"id":3001,"inV":99,"properties":{"weight":26}},{"id":3002,"inV":98,"properties":{"weight":3}},{"id":3003,"inV":104,"properties":{"weight":2}},{"id":3004,"inV":82,"properties":{"weight":6}},{"id":3005,"inV":215,"properties":{"weight":1}},{"id":3006,"inV":69,"properties":{"weight":2}},{"id":3007,"inV":103,"properties":{"weight":1}},{"id":3008,"inV":83,"properties":{"weight":8}},{"id":3009,"inV":101,"properties":{"weight":1}},{"id":3010,"inV":80,"properties":{"weight":8}},{"id":3011,"inV":121,"properties":{"weight":3}},{"id":3012,"inV":59,"properties":{"weight":1}},{"id":3013,"inV":26,"properties":{"weight":2}},{"id":3014,"inV":32,"properties":{"weight":2}},{"id":3015,"i
nV":155,"properties":{"weight":1}},{"id":3016,"inV":42,"properties":{"weight":2}},{"id":3017,"inV":18,"properties":{"weight":1}},{"id":3018,"inV":105,"properties":{"weight":11}},{"id":3019,"inV":12,"properties":{"weight":1}},{"id":3020,"inV":49,"properties":{"weight":27}},{"id":3021,"inV":65,"properties":{"weight":2}},{"id":3022,"inV":85,"properties":{"weight":2}},{"id":3023,"inV":73,"properties":{"weight":8}},{"id":3024,"inV":106,"properties":{"weight":3}},{"id":3025,"inV":189,"properties":{"weight":3}},{"id":3026,"inV":10,"properties":{"weight":1}},{"id":3027,"inV":210,"properties":{"weight":3}},{"id":3028,"inV":76,"properties":{"weight":1}},{"id":3029,"inV":87,"properties":{"weight":1}},{"id":3030,"inV":96,"properties":{"weight":1}},{"id":3031,"inV":150,"properties":{"weight":1}},{"id":3032,"inV":66,"properties":{"weight":1}},{"id":3033,"inV":5,"properties":{"weight":1}},{"id":3034,"inV":91,"properties":{"weight":29}},{"id":3035,"inV":60,"properties":{"weight":6}},{"id":3036,"inV
":67,"properties":{"weight":1}},{"id":3037,"inV":74,"properties":{"weight":1}},{"id":3038,"inV":21,"properties":{"weight":1}},{"id":3039,"inV":169,"properties":{"weight":1}},{"id":3040,"inV":62,"properties":{"weight":1}},{"id":3041,"inV":39,"properties":{"weight":2}},{"id":3042,"inV":175,"properties":{"weight":1}},{"id":3043,"inV":172,"properties":{"weight":1}},{"id":3044,"inV":28,"properties":{"weight":5}},{"id":3045,"inV":173,"properties":{"weight":1}},{"id":3046,"inV":37,"properties":{"weight":5}},{"id":3047,"inV":35,"properties":{"weight":2}}],"sungBy":[{"id":7232,"inV":351}],"writtenBy":[{"id":7231,"inV":350}]},"properties":{"name":[{"id":39,"value":"LOOKS LIKE RAIN"}],"songType":[{"id":41,"value":"original"}],"performances":[{"id":40,"value":417}]}}
+{"id":15,"label":"song","inE":{"followedBy":[{"id":1152,"outV":26,"properties":{"weight":1}},{"id":769,"outV":122,"properties":{"weight":3}},{"id":5379,"outV":69,"properties":{"weight":4}},{"id":3844,"outV":60,"properties":{"weight":2}},{"id":1414,"outV":83,"properties":{"weight":2}},{"id":6663,"outV":12,"properties":{"weight":167}},{"id":4872,"outV":100,"properties":{"weight":9}},{"id":4105,"outV":48,"properties":{"weight":4}},{"id":11,"outV":9,"properties":{"weight":3}},{"id":4622,"outV":154,"properties":{"weight":1}},{"id":2833,"outV":101,"properties":{"weight":1}},{"id":2195,"outV":235,"properties":{"weight":1}},{"id":5141,"outV":125,"properties":{"weight":2}},{"id":3224,"outV":63,"properties":{"weight":2}},{"id":1945,"outV":148,"properties":{"weight":2}},{"id":5024,"outV":30,"properties":{"weight":2}},{"id":2597,"outV":112,"properties":{"weight":35}},{"id":1062,"outV":73,"properties":{"weight":1}},{"id":4776,"outV":114,"properties":{"weight":1}},{"id":5032,"outV":47,"properties
":{"weight":1}},{"id":6698,"outV":141,"properties":{"weight":1}},{"id":3885,"outV":51,"properties":{"weight":14}},{"id":1712,"outV":82,"properties":{"weight":4}},{"id":5301,"outV":170,"properties":{"weight":1}},{"id":1847,"outV":94,"properties":{"weight":6}},{"id":4153,"outV":54,"properties":{"weight":7}},{"id":1339,"outV":31,"properties":{"weight":2}},{"id":6075,"outV":72,"properties":{"weight":4}},{"id":60,"outV":46,"properties":{"weight":1}},{"id":2108,"outV":17,"properties":{"weight":8}},{"id":6460,"outV":187,"properties":{"weight":10}},{"id":3653,"outV":24,"properties":{"weight":14}},{"id":3147,"outV":104,"properties":{"weight":2}},{"id":6731,"outV":53,"properties":{"weight":1}},{"id":1101,"outV":59,"properties":{"weight":2}},{"id":4052,"outV":173,"properties":{"weight":1}},{"id":2518,"outV":57,"properties":{"weight":5}},{"id":476,"outV":98,"properties":{"weight":3}},{"id":1372,"outV":130,"properties":{"weight":1}},{"id":1245,"outV":27,"properties":{"weight":5}},{"id":5085,"out
V":4,"properties":{"weight":1}},{"id":2272,"outV":25,"properties":{"weight":4}},{"id":4577,"outV":254,"properties":{"weight":1}},{"id":5735,"outV":129,"properties":{"weight":2}},{"id":3432,"outV":58,"properties":{"weight":7}},{"id":746,"outV":80,"properties":{"weight":1}},{"id":3562,"outV":56,"properties":{"weight":6}},{"id":2411,"outV":68,"properties":{"weight":1}},{"id":2924,"outV":78,"properties":{"weight":3}},{"id":4467,"outV":202,"properties":{"weight":6}},{"id":376,"outV":74,"properties":{"weight":1}},{"id":5242,"outV":32,"properties":{"weight":2}},{"id":6267,"outV":49,"properties":{"weight":1}},{"id":2685,"outV":13,"properties":{"weight":7}}]},"outE":{"followedBy":[{"id":2816,"inV":103,"properties":{"weight":1}},{"id":2817,"inV":62,"properties":{"weight":1}},{"id":2818,"inV":64,"properties":{"weight":1}},{"id":2819,"inV":75,"properties":{"weight":3}},{"id":2820,"inV":152,"properties":{"weight":1}},{"id":2821,"inV":117,"properties":{"weight":1}},{"id":2822,"inV":168,"propertie
s":{"weight":1}},{"id":2823,"inV":188,"properties":{"weight":1}},{"id":2824,"inV":131,"properties":{"weight":4}},{"id":2825,"inV":28,"properties":{"weight":1}},{"id":2826,"inV":124,"properties":{"weight":1}},{"id":2827,"inV":190,"properties":{"weight":1}},{"id":2828,"inV":137,"properties":{"weight":1}},{"id":2755,"inV":19,"properties":{"weight":8}},{"id":2756,"inV":56,"properties":{"weight":22}},{"id":2757,"inV":104,"properties":{"weight":17}},{"id":2758,"inV":49,"properties":{"weight":4}},{"id":2759,"inV":122,"properties":{"weight":3}},{"id":2760,"inV":23,"properties":{"weight":2}},{"id":2761,"inV":27,"properties":{"weight":23}},{"id":2762,"inV":89,"properties":{"weight":7}},{"id":2763,"inV":46,"properties":{"weight":1}},{"id":2764,"inV":57,"properties":{"weight":7}},{"id":2765,"inV":59,"properties":{"weight":6}},{"id":2766,"inV":58,"properties":{"weight":18}},{"id":2767,"inV":54,"properties":{"weight":25}},{"id":2768,"inV":100,"properties":{"weight":24}},{"id":2769,"inV":39,"prope
rties":{"weight":3}},{"id":2770,"inV":160,"properties":{"weight":5}},{"id":2771,"inV":13,"properties":{"weight":3}},{"id":2772,"inV":51,"properties":{"weight":14}},{"id":2773,"inV":94,"properties":{"weight":4}},{"id":2774,"inV":148,"properties":{"weight":1}},{"id":2775,"inV":9,"properties":{"weight":5}},{"id":2776,"inV":48,"properties":{"weight":17}},{"id":2777,"inV":55,"properties":{"weight":1}},{"id":2778,"inV":72,"properties":{"weight":3}},{"id":2779,"inV":52,"properties":{"weight":1}},{"id":2780,"inV":12,"properties":{"weight":3}},{"id":2781,"inV":4,"properties":{"weight":4}},{"id":2782,"inV":83,"properties":{"weight":2}},{"id":2783,"inV":202,"properties":{"weight":6}},{"id":2784,"inV":82,"properties":{"weight":3}},{"id":2785,"inV":74,"properties":{"weight":1}},{"id":2786,"inV":69,"properties":{"weight":7}},{"id":2787,"inV":98,"properties":{"weight":10}},{"id":2788,"inV":21,"properties":{"weight":1}},{"id":2789,"inV":125,"properties":{"weight":1}},{"id":2790,"inV":170,"propertie
s":{"weight":3}},{"id":2791,"inV":26,"properties":{"weight":1}},{"id":2792,"inV":60,"properties":{"weight":1}},{"id":2793,"inV":294,"properties":{"weight":2}},{"id":2794,"inV":99,"properties":{"weight":3}},{"id":2795,"inV":17,"properties":{"weight":10}},{"id":2796,"inV":63,"properties":{"weight":5}},{"id":2797,"inV":68,"properties":{"weight":3}},{"id":2798,"inV":108,"properties":{"weight":6}},{"id":2799,"inV":109,"properties":{"weight":1}},{"id":2800,"inV":196,"properties":{"weight":3}},{"id":2801,"inV":91,"properties":{"weight":1}},{"id":2802,"inV":18,"properties":{"weight":1}},{"id":2803,"inV":14,"properties":{"weight":4}},{"id":2804,"inV":105,"properties":{"weight":8}},{"id":2805,"inV":101,"properties":{"weight":2}},{"id":2806,"inV":10,"properties":{"weight":2}},{"id":2807,"inV":73,"properties":{"weight":26}},{"id":2808,"inV":78,"properties":{"weight":1}},{"id":2809,"inV":32,"properties":{"weight":3}},{"id":2810,"inV":106,"properties":{"weight":2}},{"id":2811,"inV":180,"propertie
s":{"weight":2}},{"id":2812,"inV":88,"properties":{"weight":1}},{"id":2813,"inV":97,"properties":{"weight":1}},{"id":2814,"inV":53,"properties":{"weight":3}},{"id":2815,"inV":115,"properties":{"weight":4}}],"sungBy":[{"id":7472,"inV":351}],"writtenBy":[{"id":7471,"inV":479}]},"properties":{"name":[{"id":42,"value":"BIG RIVER"}],"songType":[{"id":44,"value":"cover"}],"performances":[{"id":43,"value":397}]}}
+{"id":16,"label":"song","inE":{"followedBy":[{"id":7008,"outV":89,"properties":{"weight":1}},{"id":6467,"outV":187,"properties":{"weight":1}},{"id":4101,"outV":48,"properties":{"weight":1}},{"id":5637,"outV":22,"properties":{"weight":3}},{"id":6341,"outV":21,"properties":{"weight":1}},{"id":5382,"outV":69,"properties":{"weight":4}},{"id":3273,"outV":160,"properties":{"weight":2}},{"id":6537,"outV":55,"properties":{"weight":1}},{"id":3882,"outV":51,"properties":{"weight":12}},{"id":12,"outV":9,"properties":{"weight":1}},{"id":1260,"outV":27,"properties":{"weight":1}},{"id":4172,"outV":54,"properties":{"weight":1}},{"id":6285,"outV":49,"properties":{"weight":1}},{"id":368,"outV":74,"properties":{"weight":1}},{"id":4464,"outV":202,"properties":{"weight":1}},{"id":468,"outV":195,"properties":{"weight":3}},{"id":5303,"outV":170,"properties":{"weight":2}},{"id":472,"outV":98,"properties":{"weight":2}},{"id":2521,"outV":57,"properties":{"weight":1}},{"id":5081,"outV":4,"properties":{"weigh
t":2}},{"id":5146,"outV":125,"properties":{"weight":1}},{"id":1405,"outV":83,"properties":{"weight":5}},{"id":1854,"outV":94,"properties":{"weight":2}},{"id":1950,"outV":148,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2169,"inV":25,"properties":{"weight":1}},{"id":2170,"inV":101,"properties":{"weight":46}},{"id":2171,"inV":89,"properties":{"weight":2}},{"id":2172,"inV":130,"properties":{"weight":1}},{"id":2173,"inV":83,"properties":{"weight":1}}]},"properties":{"name":[{"id":45,"value":"WEATHER REPORT SUITE"}],"songType":[{"id":47,"value":""}],"performances":[{"id":46,"value":0}]}}
+{"id":17,"label":"song","inE":{"followedBy":[{"id":5955,"outV":50,"properties":{"weight":43}},{"id":5702,"outV":20,"properties":{"weight":2}},{"id":2696,"outV":13,"properties":{"weight":2}},{"id":6538,"outV":55,"properties":{"weight":1}},{"id":1163,"outV":26,"properties":{"weight":34}},{"id":13,"outV":9,"properties":{"weight":1}},{"id":402,"outV":38,"properties":{"weight":12}},{"id":5011,"outV":30,"properties":{"weight":3}},{"id":6675,"outV":12,"properties":{"weight":3}},{"id":1877,"outV":103,"properties":{"weight":2}},{"id":2522,"outV":57,"properties":{"weight":1}},{"id":475,"outV":98,"properties":{"weight":1}},{"id":3803,"outV":88,"properties":{"weight":4}},{"id":540,"outV":120,"properties":{"weight":1}},{"id":2588,"outV":112,"properties":{"weight":3}},{"id":3996,"outV":106,"properties":{"weight":1}},{"id":990,"outV":11,"properties":{"weight":3}},{"id":1570,"outV":18,"properties":{"weight":6}},{"id":2275,"outV":25,"properties":{"weight":1}},{"id":4262,"outV":10,"properties":{"weig
ht":5}},{"id":2795,"outV":15,"properties":{"weight":10}},{"id":6955,"outV":84,"properties":{"weight":1}},{"id":2413,"outV":68,"properties":{"weight":9}},{"id":4077,"outV":109,"properties":{"weight":1}},{"id":2991,"outV":14,"properties":{"weight":13}},{"id":4912,"outV":100,"properties":{"weight":1}},{"id":3639,"outV":24,"properties":{"weight":13}},{"id":6583,"outV":116,"properties":{"weight":1}},{"id":58,"outV":46,"properties":{"weight":2}},{"id":635,"outV":23,"properties":{"weight":16}},{"id":5244,"outV":32,"properties":{"weight":19}},{"id":2942,"outV":78,"properties":{"weight":1}},{"id":6847,"outV":64,"properties":{"weight":7}}]},"outE":{"followedBy":[{"id":2112,"inV":24,"properties":{"weight":9}},{"id":2113,"inV":21,"properties":{"weight":1}},{"id":2114,"inV":46,"properties":{"weight":1}},{"id":2115,"inV":20,"properties":{"weight":2}},{"id":2116,"inV":10,"properties":{"weight":7}},{"id":2117,"inV":68,"properties":{"weight":25}},{"id":2118,"inV":32,"properties":{"weight":19}},{"id"
:2119,"inV":103,"properties":{"weight":3}},{"id":2120,"inV":121,"properties":{"weight":3}},{"id":2121,"inV":112,"properties":{"weight":31}},{"id":2122,"inV":85,"properties":{"weight":1}},{"id":2123,"inV":101,"properties":{"weight":1}},{"id":2124,"inV":109,"properties":{"weight":1}},{"id":2125,"inV":73,"properties":{"weight":1}},{"id":2126,"inV":88,"properties":{"weight":8}},{"id":2127,"inV":111,"properties":{"weight":3}},{"id":2128,"inV":54,"properties":{"weight":2}},{"id":2129,"inV":97,"properties":{"weight":2}},{"id":2130,"inV":100,"properties":{"weight":1}},{"id":2131,"inV":42,"properties":{"weight":1}},{"id":2132,"inV":58,"properties":{"weight":2}},{"id":2133,"inV":244,"properties":{"weight":1}},{"id":2134,"inV":56,"properties":{"weight":1}},{"id":2135,"inV":63,"properties":{"weight":1}},{"id":2136,"inV":188,"properties":{"weight":2}},{"id":2137,"inV":71,"properties":{"weight":1}},{"id":2138,"inV":30,"properties":{"weight":2}},{"id":2139,"inV":31,"properties":{"weight":1}},{"id"
:2140,"inV":77,"properties":{"weight":2}},{"id":2141,"inV":40,"properties":{"weight":1}},{"id":2142,"inV":33,"properties":{"weight":1}},{"id":2103,"inV":18,"properties":{"weight":17}},{"id":2104,"inV":39,"properties":{"weight":2}},{"id":2105,"inV":22,"properties":{"weight":4}},{"id":2106,"inV":50,"properties":{"weight":6}},{"id":2107,"inV":14,"properties":{"weight":19}},{"id":2108,"inV":15,"properties":{"weight":8}},{"id":2109,"inV":12,"properties":{"weight":24}},{"id":2110,"inV":23,"properties":{"weight":2}},{"id":2111,"inV":13,"properties":{"weight":4}}],"sungBy":[{"id":7364,"inV":340}],"writtenBy":[{"id":7363,"inV":339}]},"properties":{"name":[{"id":48,"value":"THEY LOVE EACH OTHER"}],"songType":[{"id":50,"value":"original"}],"performances":[{"id":49,"value":227}]}}
+{"id":18,"label":"song","inE":{"followedBy":[{"id":1024,"outV":73,"properties":{"weight":4}},{"id":4097,"outV":48,"properties":{"weight":13}},{"id":6276,"outV":49,"properties":{"weight":2}},{"id":2309,"outV":25,"properties":{"weight":1}},{"id":3333,"outV":155,"properties":{"weight":1}},{"id":4231,"outV":52,"properties":{"weight":1}},{"id":4360,"outV":62,"properties":{"weight":1}},{"id":3849,"outV":60,"properties":{"weight":1}},{"id":5257,"outV":32,"properties":{"weight":3}},{"id":5385,"outV":69,"properties":{"weight":2}},{"id":2189,"outV":235,"properties":{"weight":1}},{"id":14,"outV":9,"properties":{"weight":5}},{"id":654,"outV":23,"properties":{"weight":1}},{"id":5010,"outV":30,"properties":{"weight":2}},{"id":6546,"outV":55,"properties":{"weight":1}},{"id":4885,"outV":100,"properties":{"weight":11}},{"id":1814,"outV":273,"properties":{"weight":1}},{"id":1943,"outV":148,"properties":{"weight":1}},{"id":5145,"outV":125,"properties":{"weight":1}},{"id":6688,"outV":12,"properties":{"
weight":1}},{"id":4642,"outV":154,"properties":{"weight":3}},{"id":2852,"outV":101,"properties":{"weight":1}},{"id":4260,"outV":10,"properties":{"weight":3}},{"id":3238,"outV":63,"properties":{"weight":1}},{"id":6695,"outV":141,"properties":{"weight":1}},{"id":3880,"outV":51,"properties":{"weight":12}},{"id":425,"outV":38,"properties":{"weight":2}},{"id":1193,"outV":26,"properties":{"weight":1}},{"id":2601,"outV":112,"properties":{"weight":1}},{"id":4524,"outV":105,"properties":{"weight":3}},{"id":45,"outV":46,"properties":{"weight":3}},{"id":4015,"outV":292,"properties":{"weight":1}},{"id":560,"outV":120,"properties":{"weight":1}},{"id":5299,"outV":170,"properties":{"weight":3}},{"id":6579,"outV":116,"properties":{"weight":1}},{"id":1716,"outV":82,"properties":{"weight":3}},{"id":4404,"outV":40,"properties":{"weight":1}},{"id":5429,"outV":315,"properties":{"weight":1}},{"id":4150,"outV":218,"properties":{"weight":1}},{"id":2103,"outV":17,"properties":{"weight":17}},{"id":4152,"outV
":54,"properties":{"weight":18}},{"id":6456,"outV":187,"properties":{"weight":8}},{"id":1849,"outV":94,"properties":{"weight":6}},{"id":827,"outV":171,"properties":{"weight":1}},{"id":6715,"outV":53,"properties":{"weight":6}},{"id":6205,"outV":319,"properties":{"weight":1}},{"id":1086,"outV":59,"properties":{"weight":21}},{"id":5439,"outV":239,"properties":{"weight":1}},{"id":6080,"outV":72,"properties":{"weight":3}},{"id":1986,"outV":152,"properties":{"weight":1}},{"id":3270,"outV":160,"properties":{"weight":1}},{"id":5192,"outV":99,"properties":{"weight":1}},{"id":3017,"outV":14,"properties":{"weight":1}},{"id":1356,"outV":31,"properties":{"weight":1}},{"id":3148,"outV":104,"properties":{"weight":19}},{"id":4044,"outV":173,"properties":{"weight":4}},{"id":5073,"outV":4,"properties":{"weight":4}},{"id":4692,"outV":33,"properties":{"weight":1}},{"id":5716,"outV":20,"properties":{"weight":1}},{"id":2517,"outV":57,"properties":{"weight":11}},{"id":5973,"outV":50,"properties":{"weight"
:5}},{"id":3671,"outV":24,"properties":{"weight":3}},{"id":473,"outV":98,"properties":{"weight":6}},{"id":729,"outV":80,"properties":{"weight":5}},{"id":5850,"outV":61,"properties":{"weight":1}},{"id":1244,"outV":27,"properties":{"weight":16}},{"id":3807,"outV":88,"properties":{"weight":1}},{"id":3553,"outV":56,"properties":{"weight":16}},{"id":866,"outV":189,"properties":{"weight":1}},{"id":5602,"outV":42,"properties":{"weight":1}},{"id":355,"outV":74,"properties":{"weight":1}},{"id":3431,"outV":58,"properties":{"weight":8}},{"id":4967,"outV":207,"properties":{"weight":1}},{"id":7016,"outV":89,"properties":{"weight":3}},{"id":1642,"outV":213,"properties":{"weight":1}},{"id":2029,"outV":180,"properties":{"weight":1}},{"id":6765,"outV":39,"properties":{"weight":7}},{"id":6384,"outV":65,"properties":{"weight":1}},{"id":2802,"outV":15,"properties":{"weight":1}},{"id":3315,"outV":252,"properties":{"weight":1}},{"id":4851,"outV":119,"properties":{"weight":1}},{"id":3064,"outV":153,"prope
rties":{"weight":2}},{"id":1401,"outV":190,"properties":{"weight":2}},{"id":2683,"outV":13,"properties":{"weight":3}},{"id":4476,"outV":202,"properties":{"weight":3}},{"id":2431,"outV":68,"properties":{"weight":3}}]},"outE":{"followedBy":[{"id":1536,"inV":59,"properties":{"weight":5}},{"id":1537,"inV":19,"properties":{"weight":17}},{"id":1538,"inV":100,"properties":{"weight":16}},{"id":1539,"inV":122,"properties":{"weight":6}},{"id":1540,"inV":46,"properties":{"weight":4}},{"id":1541,"inV":47,"properties":{"weight":1}},{"id":1542,"inV":74,"properties":{"weight":1}},{"id":1543,"inV":53,"properties":{"weight":7}},{"id":1544,"inV":94,"properties":{"weight":2}},{"id":1545,"inV":58,"properties":{"weight":13}},{"id":1546,"inV":57,"properties":{"weight":10}},{"id":1547,"inV":25,"properties":{"weight":1}},{"id":1548,"inV":39,"properties":{"weight":3}},{"id":1549,"inV":54,"properties":{"weight":29}},{"id":1550,"inV":120,"properties":{"weight":1}},{"id":1551,"inV":152,"properties":{"weight":1
}},{"id":1552,"inV":89,"properties":{"weight":3}},{"id":1553,"inV":148,"properties":{"weight":1}},{"id":1554,"inV":252,"properties":{"weight":1}},{"id":1555,"inV":225,"properties":{"weight":1}},{"id":1556,"inV":80,"properties":{"weight":2}},{"id":1557,"inV":56,"properties":{"weight":11}},{"id":1558,"inV":27,"properties":{"weight":16}},{"id":1559,"inV":26,"properties":{"weight":1}},{"id":1560,"inV":206,"properties":{"weight":1}},{"id":1561,"inV":72,"properties":{"weight":5}},{"id":1562,"inV":23,"properties":{"weight":3}},{"id":1563,"inV":49,"properties":{"weight":3}},{"id":1564,"inV":51,"properties":{"weight":26}},{"id":1565,"inV":55,"properties":{"weight":2}},{"id":1566,"inV":202,"properties":{"weight":6}},{"id":1567,"inV":13,"properties":{"weight":3}},{"id":1568,"inV":83,"properties":{"weight":4}},{"id":1569,"inV":160,"properties":{"weight":2}},{"id":1570,"inV":17,"properties":{"weight":6}},{"id":1571,"inV":10,"properties":{"weight":5}},{"id":1572,"inV":9,"properties":{"weight":3}}
,{"id":1573,"inV":125,"properties":{"weight":2}},{"id":1574,"inV":98,"properties":{"weight":4}},{"id":1575,"inV":170,"properties":{"weight":5}},{"id":1576,"inV":69,"properties":{"weight":3}},{"id":1577,"inV":21,"properties":{"weight":1}},{"id":1578,"inV":82,"properties":{"weight":2}},{"id":1579,"inV":196,"properties":{"weight":1}},{"id":1580,"inV":104,"properties":{"weight":9}},{"id":1581,"inV":108,"properties":{"weight":4}},{"id":1582,"inV":14,"properties":{"weight":4}},{"id":1583,"inV":32,"properties":{"weight":4}},{"id":1584,"inV":50,"properties":{"weight":1}},{"id":1585,"inV":48,"properties":{"weight":7}},{"id":1586,"inV":101,"properties":{"weight":1}},{"id":1587,"inV":105,"properties":{"weight":5}},{"id":1588,"inV":208,"properties":{"weight":1}},{"id":1589,"inV":103,"properties":{"weight":2}},{"id":1590,"inV":42,"properties":{"weight":1}},{"id":1591,"inV":63,"properties":{"weight":2}},{"id":1592,"inV":24,"properties":{"weight":2}},{"id":1593,"inV":73,"properties":{"weight":7}},
{"id":1594,"inV":222,"properties":{"weight":1}},{"id":1595,"inV":106,"properties":{"weight":1}},{"id":1596,"inV":189,"properties":{"weight":2}},{"id":1597,"inV":112,"properties":{"weight":1}},{"id":1598,"inV":68,"properties":{"weight":2}},{"id":1599,"inV":121,"properties":{"weight":1}},{"id":1600,"inV":180,"properties":{"weight":2}},{"id":1601,"inV":199,"properties":{"weight":1}},{"id":1602,"inV":88,"properties":{"weight":2}},{"id":1603,"inV":128,"properties":{"weight":1}},{"id":1604,"inV":60,"properties":{"weight":1}},{"id":1605,"inV":12,"properties":{"weight":1}},{"id":1606,"inV":75,"properties":{"weight":2}},{"id":1607,"inV":168,"properties":{"weight":1}},{"id":1608,"inV":175,"properties":{"weight":1}},{"id":1609,"inV":254,"properties":{"weight":1}},{"id":1610,"inV":174,"properties":{"weight":4}},{"id":1611,"inV":137,"properties":{"weight":1}},{"id":1612,"inV":173,"properties":{"weight":1}},{"id":1535,"inV":235,"properties":{"weight":1}}],"sungBy":[{"id":7554,"inV":351}],"written
By":[{"id":7553,"inV":528}]},"properties":{"name":[{"id":51,"value":"EL PASO"}],"songType":[{"id":53,"value":"cover"}],"performances":[{"id":52,"value":388}]}}
+{"id":19,"label":"song","inE":{"followedBy":[{"id":1537,"outV":18,"properties":{"weight":17}},{"id":3969,"outV":106,"properties":{"weight":1}},{"id":6657,"outV":12,"properties":{"weight":3}},{"id":4098,"outV":48,"properties":{"weight":1}},{"id":6532,"outV":242,"properties":{"weight":1}},{"id":1159,"outV":26,"properties":{"weight":21}},{"id":6152,"outV":36,"properties":{"weight":6}},{"id":394,"outV":74,"properties":{"weight":1}},{"id":522,"outV":120,"properties":{"weight":2}},{"id":5130,"outV":222,"properties":{"weight":1}},{"id":3467,"outV":58,"properties":{"weight":8}},{"id":15,"outV":9,"properties":{"weight":1}},{"id":272,"outV":150,"properties":{"weight":1}},{"id":4880,"outV":100,"properties":{"weight":1}},{"id":5267,"outV":32,"properties":{"weight":12}},{"id":4245,"outV":10,"properties":{"weight":9}},{"id":790,"outV":122,"properties":{"weight":1}},{"id":2841,"outV":101,"properties":{"weight":18}},{"id":3097,"outV":153,"properties":{"weight":3}},{"id":411,"outV":38,"properties":{
"weight":6}},{"id":2335,"outV":290,"properties":{"weight":2}},{"id":5535,"outV":43,"properties":{"weight":1}},{"id":1825,"outV":41,"properties":{"weight":1}},{"id":3874,"outV":60,"properties":{"weight":1}},{"id":4770,"outV":114,"properties":{"weight":4}},{"id":6308,"outV":123,"properties":{"weight":1}},{"id":2086,"outV":188,"properties":{"weight":1}},{"id":2215,"outV":75,"properties":{"weight":1}},{"id":5801,"outV":76,"properties":{"weight":5}},{"id":42,"outV":46,"properties":{"weight":5}},{"id":3628,"outV":24,"properties":{"weight":9}},{"id":2989,"outV":14,"properties":{"weight":17}},{"id":5167,"outV":71,"properties":{"weight":1}},{"id":6831,"outV":64,"properties":{"weight":7}},{"id":2354,"outV":87,"properties":{"weight":2}},{"id":5938,"outV":50,"properties":{"weight":19}},{"id":951,"outV":67,"properties":{"weight":2}},{"id":3511,"outV":223,"properties":{"weight":1}},{"id":1848,"outV":94,"properties":{"weight":1}},{"id":314,"outV":34,"properties":{"weight":2}},{"id":2621,"outV":158
,"properties":{"weight":2}},{"id":1472,"outV":81,"properties":{"weight":1}},{"id":6081,"outV":72,"properties":{"weight":24}},{"id":6978,"outV":175,"properties":{"weight":2}},{"id":2755,"outV":15,"properties":{"weight":8}},{"id":5701,"outV":20,"properties":{"weight":4}},{"id":3275,"outV":160,"properties":{"weight":2}},{"id":4171,"outV":54,"properties":{"weight":3}},{"id":206,"outV":70,"properties":{"weight":1}},{"id":4558,"outV":105,"properties":{"weight":1}},{"id":5200,"outV":99,"properties":{"weight":19}},{"id":5457,"outV":79,"properties":{"weight":4}},{"id":979,"outV":11,"properties":{"weight":9}},{"id":1620,"outV":210,"properties":{"weight":4}},{"id":5590,"outV":42,"properties":{"weight":4}},{"id":3799,"outV":88,"properties":{"weight":7}},{"id":4450,"outV":113,"properties":{"weight":1}},{"id":4962,"outV":207,"properties":{"weight":1}},{"id":6370,"outV":21,"properties":{"weight":1}},{"id":1763,"outV":28,"properties":{"weight":1}},{"id":2405,"outV":45,"properties":{"weight":1}},{"i
d":2279,"outV":25,"properties":{"weight":4}},{"id":2408,"outV":68,"properties":{"weight":5}},{"id":5864,"outV":96,"properties":{"weight":1}},{"id":2666,"outV":13,"properties":{"weight":12}},{"id":1900,"outV":103,"properties":{"weight":22}},{"id":3564,"outV":56,"properties":{"weight":2}},{"id":5102,"outV":4,"properties":{"weight":6}},{"id":1776,"outV":234,"properties":{"weight":7}},{"id":4976,"outV":236,"properties":{"weight":3}},{"id":2546,"outV":57,"properties":{"weight":28}},{"id":627,"outV":23,"properties":{"weight":3}},{"id":4083,"outV":109,"properties":{"weight":4}},{"id":4470,"outV":202,"properties":{"weight":2}},{"id":5622,"outV":22,"properties":{"weight":3}},{"id":6391,"outV":65,"properties":{"weight":2}},{"id":6394,"outV":136,"properties":{"weight":1}},{"id":4349,"outV":62,"properties":{"weight":1}},{"id":126,"outV":97,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":3139,"inV":187,"properties":{"weight":402}},{"id":3140,"inV":39,"properties":{"weight":1}},{"id":314
1,"inV":60,"properties":{"weight":1}}],"sungBy":[{"id":7100,"inV":340}],"writtenBy":[{"id":7099,"inV":339}]},"properties":{"name":[{"id":54,"value":"CHINA CAT SUNFLOWER"}],"songType":[{"id":56,"value":"original"}],"performances":[{"id":55,"value":554}]}}
+{"id":20,"label":"song","inE":{"followedBy":[{"id":5376,"outV":69,"properties":{"weight":1}},{"id":6592,"outV":116,"properties":{"weight":1}},{"id":2115,"outV":17,"properties":{"weight":2}},{"id":6084,"outV":72,"properties":{"weight":3}},{"id":4170,"outV":54,"properties":{"weight":4}},{"id":2955,"outV":78,"properties":{"weight":1}},{"id":1100,"outV":59,"properties":{"weight":5}},{"id":1164,"outV":26,"properties":{"weight":1}},{"id":2061,"outV":92,"properties":{"weight":1}},{"id":718,"outV":80,"properties":{"weight":2}},{"id":6543,"outV":55,"properties":{"weight":1}},{"id":6735,"outV":53,"properties":{"weight":1}},{"id":16,"outV":9,"properties":{"weight":1}},{"id":1809,"outV":199,"properties":{"weight":1}},{"id":3282,"outV":160,"properties":{"weight":1}},{"id":3609,"outV":56,"properties":{"weight":1}},{"id":1818,"outV":273,"properties":{"weight":1}},{"id":4894,"outV":100,"properties":{"weight":1}},{"id":479,"outV":98,"properties":{"weight":3}},{"id":2527,"outV":57,"properties":{"weig
ht":3}},{"id":2027,"outV":180,"properties":{"weight":3}},{"id":3883,"outV":51,"properties":{"weight":4}},{"id":2287,"outV":25,"properties":{"weight":1}},{"id":4783,"outV":114,"properties":{"weight":1}},{"id":3442,"outV":58,"properties":{"weight":2}},{"id":4340,"outV":62,"properties":{"weight":1}},{"id":5300,"outV":170,"properties":{"weight":1}},{"id":5047,"outV":209,"properties":{"weight":1}},{"id":56,"outV":46,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5699,"inV":51,"properties":{"weight":6}},{"id":5700,"inV":100,"properties":{"weight":4}},{"id":5701,"inV":19,"properties":{"weight":4}},{"id":5702,"inV":17,"properties":{"weight":2}},{"id":5703,"inV":56,"properties":{"weight":2}},{"id":5704,"inV":39,"properties":{"weight":1}},{"id":5705,"inV":52,"properties":{"weight":1}},{"id":5706,"inV":94,"properties":{"weight":1}},{"id":5707,"inV":58,"properties":{"weight":3}},{"id":5708,"inV":59,"properties":{"weight":3}},{"id":5709,"inV":14,"properties":{"weight":1}},{"id":5710,"i
nV":55,"properties":{"weight":1}},{"id":5711,"inV":47,"properties":{"weight":1}},{"id":5712,"inV":27,"properties":{"weight":1}},{"id":5713,"inV":82,"properties":{"weight":1}},{"id":5714,"inV":83,"properties":{"weight":1}},{"id":5715,"inV":98,"properties":{"weight":2}},{"id":5716,"inV":18,"properties":{"weight":1}},{"id":5717,"inV":170,"properties":{"weight":2}},{"id":5718,"inV":180,"properties":{"weight":1}},{"id":5719,"inV":273,"properties":{"weight":2}},{"id":5720,"inV":199,"properties":{"weight":1}},{"id":5721,"inV":73,"properties":{"weight":1}},{"id":5722,"inV":197,"properties":{"weight":1}},{"id":5723,"inV":222,"properties":{"weight":1}},{"id":5724,"inV":104,"properties":{"weight":1}},{"id":5725,"inV":118,"properties":{"weight":1}},{"id":5726,"inV":215,"properties":{"weight":1}},{"id":5727,"inV":80,"properties":{"weight":1}},{"id":5728,"inV":173,"properties":{"weight":1}}],"sungBy":[{"id":7854,"inV":351}],"writtenBy":[{"id":7853,"inV":699}]},"properties":{"name":[{"id":57,"valu
e":"THE RACE IS ON"}],"songType":[{"id":59,"value":"cover"}],"performances":[{"id":58,"value":59}]}}
+{"id":21,"label":"song","inE":{"followedBy":[{"id":5634,"outV":22,"properties":{"weight":3}},{"id":5384,"outV":69,"properties":{"weight":20}},{"id":777,"outV":122,"properties":{"weight":7}},{"id":907,"outV":174,"properties":{"weight":1}},{"id":3981,"outV":106,"properties":{"weight":1}},{"id":6413,"outV":134,"properties":{"weight":18}},{"id":3088,"outV":153,"properties":{"weight":1}},{"id":17,"outV":9,"properties":{"weight":1}},{"id":5137,"outV":125,"properties":{"weight":6}},{"id":4754,"outV":37,"properties":{"weight":6}},{"id":1427,"outV":83,"properties":{"weight":1}},{"id":3859,"outV":60,"properties":{"weight":12}},{"id":4888,"outV":100,"properties":{"weight":1}},{"id":6555,"outV":172,"properties":{"weight":2}},{"id":1949,"outV":148,"properties":{"weight":6}},{"id":3234,"outV":63,"properties":{"weight":1}},{"id":6179,"outV":36,"properties":{"weight":1}},{"id":932,"outV":91,"properties":{"weight":1}},{"id":2471,"outV":68,"properties":{"weight":1}},{"id":4519,"outV":105,"properties"
:{"weight":1}},{"id":4775,"outV":114,"properties":{"weight":5}},{"id":1577,"outV":18,"properties":{"weight":1}},{"id":4650,"outV":154,"properties":{"weight":2}},{"id":5035,"outV":47,"properties":{"weight":1}},{"id":44,"outV":46,"properties":{"weight":2}},{"id":1711,"outV":82,"properties":{"weight":2}},{"id":816,"outV":171,"properties":{"weight":11}},{"id":5680,"outV":167,"properties":{"weight":1}},{"id":945,"outV":67,"properties":{"weight":2}},{"id":3633,"outV":24,"properties":{"weight":1}},{"id":6705,"outV":141,"properties":{"weight":2}},{"id":6450,"outV":187,"properties":{"weight":8}},{"id":6195,"outV":232,"properties":{"weight":2}},{"id":1845,"outV":94,"properties":{"weight":8}},{"id":3896,"outV":51,"properties":{"weight":1}},{"id":5305,"outV":170,"properties":{"weight":1}},{"id":6202,"outV":319,"properties":{"weight":3}},{"id":1981,"outV":281,"properties":{"weight":1}},{"id":4030,"outV":173,"properties":{"weight":2}},{"id":3263,"outV":160,"properties":{"weight":4}},{"id":1089,"o
utV":59,"properties":{"weight":4}},{"id":2113,"outV":17,"properties":{"weight":1}},{"id":6722,"outV":53,"properties":{"weight":1}},{"id":2371,"outV":87,"properties":{"weight":2}},{"id":2500,"outV":90,"properties":{"weight":1}},{"id":5060,"outV":257,"properties":{"weight":1}},{"id":5957,"outV":50,"properties":{"weight":2}},{"id":6981,"outV":175,"properties":{"weight":5}},{"id":4166,"outV":54,"properties":{"weight":6}},{"id":713,"outV":80,"properties":{"weight":1}},{"id":3789,"outV":168,"properties":{"weight":1}},{"id":6605,"outV":127,"properties":{"weight":1}},{"id":5070,"outV":128,"properties":{"weight":1}},{"id":2512,"outV":57,"properties":{"weight":3}},{"id":2896,"outV":101,"properties":{"weight":1}},{"id":467,"outV":194,"properties":{"weight":1}},{"id":2645,"outV":137,"properties":{"weight":3}},{"id":470,"outV":195,"properties":{"weight":1}},{"id":1240,"outV":183,"properties":{"weight":1}},{"id":1368,"outV":130,"properties":{"weight":10}},{"id":1752,"outV":28,"properties":{"weigh
t":8}},{"id":2904,"outV":118,"properties":{"weight":1}},{"id":6105,"outV":72,"properties":{"weight":1}},{"id":1242,"outV":27,"properties":{"weight":5}},{"id":5212,"outV":99,"properties":{"weight":1}},{"id":3038,"outV":14,"properties":{"weight":1}},{"id":2271,"outV":25,"properties":{"weight":4}},{"id":5855,"outV":61,"properties":{"weight":1}},{"id":2016,"outV":149,"properties":{"weight":8}},{"id":4451,"outV":113,"properties":{"weight":1}},{"id":484,"outV":98,"properties":{"weight":2}},{"id":2788,"outV":15,"properties":{"weight":1}},{"id":3433,"outV":58,"properties":{"weight":3}},{"id":5738,"outV":129,"properties":{"weight":2}},{"id":5866,"outV":96,"properties":{"weight":96}},{"id":4588,"outV":85,"properties":{"weight":5}},{"id":238,"outV":145,"properties":{"weight":1}},{"id":2670,"outV":13,"properties":{"weight":4}},{"id":4462,"outV":202,"properties":{"weight":2}},{"id":7022,"outV":89,"properties":{"weight":1}},{"id":5359,"outV":132,"properties":{"weight":2}},{"id":6768,"outV":39,"pr
operties":{"weight":2}},{"id":2162,"outV":151,"properties":{"weight":1}},{"id":3190,"outV":104,"properties":{"weight":1}},{"id":2040,"outV":92,"properties":{"weight":2}},{"id":3705,"outV":3,"properties":{"weight":2}},{"id":3322,"outV":252,"properties":{"weight":1}},{"id":5114,"outV":4,"properties":{"weight":1}},{"id":4347,"outV":62,"properties":{"weight":3}},{"id":4859,"outV":35,"properties":{"weight":4}},{"id":1148,"outV":26,"properties":{"weight":3}},{"id":6268,"outV":49,"properties":{"weight":51}},{"id":637,"outV":23,"properties":{"weight":3}},{"id":382,"outV":74,"properties":{"weight":4}}]},"outE":{"followedBy":[{"id":6319,"inV":59,"properties":{"weight":3}},{"id":6320,"inV":96,"properties":{"weight":72}},{"id":6321,"inV":319,"properties":{"weight":24}},{"id":6322,"inV":148,"properties":{"weight":48}},{"id":6323,"inV":25,"properties":{"weight":7}},{"id":6324,"inV":27,"properties":{"weight":3}},{"id":6325,"inV":252,"properties":{"weight":2}},{"id":6326,"inV":145,"properties":{"we
ight":2}},{"id":6327,"inV":89,"properties":{"weight":3}},{"id
<TRUNCATED>
[14/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/grateful-dead-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/grateful-dead-v2d0-typed.json b/data/grateful-dead-v2d0-typed.json
new file mode 100644
index 0000000..3b24d37
--- /dev/null
+++ b/data/grateful-dead-v2d0-typed.json
@@ -0,0 +1,808 @@
+{"id":{"@type":"gremlin:int32","@value":1},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3059},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":276},"outV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3704},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4383},"outV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":0},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@
value":2}}},{"id":{"@type":"gremlin:int32","@value":2},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4},"inV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7612},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7611},"inV":{"@type":"gremlin:int32","@value":527}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"HEY BO DIDDLEY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":2},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":1},"value":{"@type":"gremlin:int32","@value":5}}]}}
+{"id":{"@type":"gremlin:int32","@value":2},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":0},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":323},"outV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":6190},"inV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6191},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7666},"inV":{"@type":"gremlin:int32","@value":525}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7665},"inV":{"@type":"gremlin:int32","@value":525}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":3},"value":"IM
A MAN"}],"songType":[{"id":{"@type":"gremlin:int64","@value":5},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":4},"value":{"@type":"gremlin:int32","@value":1}}]}}
+{"id":{"@type":"gremlin:int32","@value":3},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":1},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2051},"outV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":1412},"outV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":6669},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":526},"outV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":910},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id"
:{"@type":"gremlin:int32","@value":1166},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6286},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":273},"outV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":2194},"outV":{"@type":"gremlin:int32","@value":235},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1684},"outV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1941},"outV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3221},"outV":{"@type":"gremlin:int32","@va
lue":63},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2712},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6425},"outV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5787},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5148},"outV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6692},"outV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6310},"outV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id
":{"@type":"gremlin:int32","@value":6448},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2225},"outV":{"@type":"gremlin:int32","@value":226},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5042},"outV":{"@type":"gremlin:int32","@value":209},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4789},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1464},"outV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2232},"outV":{"@type":"gremlin:int32","@value":215},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4665},"outV":{"@type":"gremlin:int32",
"@value":154},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2235},"outV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":163}}},{"id":{"@type":"gremlin:int32","@value":6208},"outV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":706},"outV":{"@type":"gremlin:int32","@value":206},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":835},"outV":{"@type":"gremlin:int32","@value":171},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5188},"outV":{"@type":"gremlin:int32","@value":99},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1862},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}}
,{"id":{"@type":"gremlin:int32","@value":1735},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6343},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4937},"outV":{"@type":"gremlin:int32","@value":277},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3276},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3149},"outV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1358},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":18}}},{"id":{"@type":"gremlin:int32","@value":4304},"outV":{"@type":"gremlin:in
t32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1105},"outV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":722},"outV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4182},"outV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1499},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2397},"outV":{"@type":"gremlin:int32","@value":179},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":351},"outV":{"@type":"gremlin:int32","@value":178},"properties":{"weight":{"@type":"gremlin:int32","@value":1}
}},{"id":{"@type":"gremlin:int32","@value":6623},"outV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2018},"outV":{"@type":"gremlin:int32","@value":149},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":7011},"outV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5348},"outV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2278},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":1255},"outV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3048},"outV":{"@type":"gremlin:in
t32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":5867},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":116}}},{"id":{"@type":"gremlin:int32","@value":364},"outV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":492},"outV":{"@type":"gremlin:int32","@value":98},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3948},"outV":{"@type":"gremlin:int32","@value":138},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4335},"outV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3312},"outV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":
1}}},{"id":{"@type":"gremlin:int32","@value":5745},"outV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4596},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5367},"outV":{"@type":"gremlin:int32","@value":132},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":633},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":891},"outV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5375},"outV":{"@type":"gremlin:int32","@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6143},"outV":{"@type":"gremlin:in
t32","@value":289},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3712},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3713},"inV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3714},"inV":{"@type":"gremlin:int32","@value":215},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3715},"inV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3716},"inV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3717},"inV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"grem
lin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3718},"inV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3719},"inV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3720},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3721},"inV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":54}}},{"id":{"@type":"gremlin:int32","@value":3722},"inV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":3723},"inV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3724},"inV":{
"@type":"gremlin:int32","@value":145},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3725},"inV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3726},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3727},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":37}}},{"id":{"@type":"gremlin:int32","@value":3728},"inV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3729},"inV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3730},"inV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:i
nt32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3731},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3732},"inV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3733},"inV":{"@type":"gremlin:int32","@value":211},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3734},"inV":{"@type":"gremlin:int32","@value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":3735},"inV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3736},"inV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3737},"inV":{"@type":
"gremlin:int32","@value":320},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3738},"inV":{"@type":"gremlin:int32","@value":61},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3739},"inV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3740},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3741},"inV":{"@type":"gremlin:int32","@value":128},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3742},"inV":{"@type":"gremlin:int32","@value":315},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3743},"inV":{"@type":"gremlin:int32","@value":261},"properties":{"weight":{"@type":"gremlin:int32","@v
alue":1}}},{"id":{"@type":"gremlin:int32","@value":3744},"inV":{"@type":"gremlin:int32","@value":213},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":3745},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3746},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3747},"inV":{"@type":"gremlin:int32","@value":204},"properties":{"weight":{"@type":"gremlin:int32","@value":14}}},{"id":{"@type":"gremlin:int32","@value":3748},"inV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3749},"inV":{"@type":"gremlin:int32","@value":150},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":3750},"inV":{"@type":"gremlin
:int32","@value":309},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3751},"inV":{"@type":"gremlin:int32","@value":131},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3752},"inV":{"@type":"gremlin:int32","@value":151},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3753},"inV":{"@type":"gremlin:int32","@value":321},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3754},"inV":{"@type":"gremlin:int32","@value":90},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3755},"inV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3756},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":1}
}},{"id":{"@type":"gremlin:int32","@value":3757},"inV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3758},"inV":{"@type":"gremlin:int32","@value":157},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3759},"inV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3760},"inV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3761},"inV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3762},"inV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3763},"inV":{"@type":"gremlin:int32","@v
alue":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3764},"inV":{"@type":"gremlin:int32","@value":214},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3765},"inV":{"@type":"gremlin:int32","@value":185},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3766},"inV":{"@type":"gremlin:int32","@value":216},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3767},"inV":{"@type":"gremlin:int32","@value":217},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3768},"inV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3769},"inV":{"@type":"gremlin:int32","@value":193},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":
{"@type":"gremlin:int32","@value":3770},"inV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3771},"inV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3772},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3773},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3774},"inV":{"@type":"gremlin:int32","@value":240},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3775},"inV":{"@type":"gremlin:int32","@value":292},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3776},"inV":{"@type":"gremlin:int32","@value":9},
"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3777},"inV":{"@type":"gremlin:int32","@value":259},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3694},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":57}}},{"id":{"@type":"gremlin:int32","@value":3695},"inV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":30}}},{"id":{"@type":"gremlin:int32","@value":3696},"inV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3697},"inV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3698},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"grem
lin:int32","@value":3699},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3700},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3701},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3702},"inV":{"@type":"gremlin:int32","@value":317},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3703},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3704},"inV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3705},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"
weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3706},"inV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3707},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3708},"inV":{"@type":"gremlin:int32","@value":318},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3709},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":3710},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3711},"inV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}}],"sungBy":[{"id":{"@type":"gremli
n:int32","@value":7808},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7807},"inV":{"@type":"gremlin:int32","@value":671}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":6},"value":"NOT FADE AWAY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":8},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":7},"value":{"@type":"gremlin:int32","@value":531}}]}}
+{"id":{"@type":"gremlin:int32","@value":4},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":128},"outV":{"@type":"gremlin:int32","@value":97},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1664},"outV":{"@type":"gremlin:int32","@value":267},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":899},"outV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1667},"outV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}},{"id":{"@type":"gremlin:int32","@value":4099},"outV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
id":{"@type":"gremlin:int32","@value":1156},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":773},"outV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":6534},"outV":{"@type":"gremlin:int32","@value":242},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1032},"outV":{"@type":"gremlin:int32","@value":73},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6664},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5129},"outV":{"@type":"gremlin:int32","@value":222},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5387},"outV":{"@type":"gremlin:int32",
"@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5517},"outV":{"@type":"gremlin:int32","@value":43},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5006},"outV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6030},"outV":{"@type":"gremlin:int32","@value":204},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2063},"outV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":915},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6940},"outV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id
":{"@type":"gremlin:int32","@value":2464},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5795},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3620},"outV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4772},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":25}}},{"id":{"@type":"gremlin:int32","@value":2982},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3367},"outV":{"@type":"gremlin:int32","@value":184},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":2345},"outV":{"@type":"gremlin:int32","@
value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2861},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":1840},"outV":{"@type":"gremlin:int32","@value":275},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5425},"outV":{"@type":"gremlin:int32","@value":102},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":180},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":46}}},{"id":{"@type":"gremlin:int32","@value":2613},"outV":{"@type":"gremlin:int32","@value":158},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5434},"outV":{"@type":"gremlin:int32","@value":217},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{
"id":{"@type":"gremlin:int32","@value":5562},"outV":{"@type":"gremlin:int32","@value":162},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1469},"outV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":446},"outV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":2494},"outV":{"@type":"gremlin:int32","@value":90},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3266},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":326},"outV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":583},"outV":{"@type":"gremlin:int32","@
value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6855},"outV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":73},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4425},"outV":{"@type":"gremlin:int32","@value":212},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1613},"outV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4941},"outV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6350},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id
":{"@type":"gremlin:int32","@value":3535},"outV":{"@type":"gremlin:int32","@value":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":980},"outV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1494},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5206},"outV":{"@type":"gremlin:int32","@value":99},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5847},"outV":{"@type":"gremlin:int32","@value":61},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6490},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2781},"outV":{"@type":"gremlin:int32","@v
alue":15},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5600},"outV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":353},"outV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5474},"outV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1891},"outV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":19}}},{"id":{"@type":"gremlin:int32","@value":3811},"outV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5989},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id"
:{"@type":"gremlin:int32","@value":4327},"outV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2538},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3050},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4970},"outV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2283},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":236},"outV":{"@type":"gremlin:int32","@value":145},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6126},"outV":{"@type":"gremlin:int32","@
value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5232},"outV":{"@type":"gremlin:int32","@value":214},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4594},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1652},"outV":{"@type":"gremlin:int32","@value":213},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4084},"outV":{"@type":"gremlin:int32","@value":109},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":629},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3701},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id
":{"@type":"gremlin:int32","@value":5621},"outV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":7029},"outV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5238},"outV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2684},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":3325},"outV":{"@type":"gremlin:int32","@value":268},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":5120},"inV":{"@type":"gremlin:int32","@value":40},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5121},"inV":{"@type
":"gremlin:int32","@value":33},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5122},"inV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5123},"inV":{"@type":"gremlin:int32","@value":292},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5071},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":5072},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":5073},"inV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5074},"inV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@va
lue":9}}},{"id":{"@type":"gremlin:int32","@value":5075},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":63}}},{"id":{"@type":"gremlin:int32","@value":5076},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":5077},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5078},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5079},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":18}}},{"id":{"@type":"gremlin:int32","@value":5080},"inV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5081},"inV":{"@type":"gremlin:in
t32","@value":16},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5082},"inV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5083},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5084},"inV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5085},"inV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5086},"inV":{"@type":"gremlin:int32","@value":112},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5087},"inV":{"@type":"gremlin:int32","@value":121},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"i
d":{"@type":"gremlin:int32","@value":5088},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":5089},"inV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5090},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":77}}},{"id":{"@type":"gremlin:int32","@value":5091},"inV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5092},"inV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5093},"inV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5094},"inV":{"@type":"gremlin:int32","@value"
:76},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5095},"inV":{"@type":"gremlin:int32","@value":181},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5096},"inV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5097},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5098},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5099},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5100},"inV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":
"gremlin:int32","@value":5101},"inV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5102},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5103},"inV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5104},"inV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5105},"inV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":5106},"inV":{"@type":"gremlin:int32","@value":97},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5107},"inV":{"@type":"gremlin:int32","@value":114},"proper
ties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5108},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":5109},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":5110},"inV":{"@type":"gremlin:int32","@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5111},"inV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5112},"inV":{"@type":"gremlin:int32","@value":60},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5113},"inV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32
","@value":5114},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5115},"inV":{"@type":"gremlin:int32","@value":117},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5116},"inV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5117},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5118},"inV":{"@type":"gremlin:int32","@value":169},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5119},"inV":{"@type":"gremlin:int32","@value":118},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7064},"inV":{"@type":"gremlin:int32","@value":340}}],"writte
nBy":[{"id":{"@type":"gremlin:int32","@value":7063},"inV":{"@type":"gremlin:int32","@value":339}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":9},"value":"BERTHA"}],"songType":[{"id":{"@type":"gremlin:int64","@value":11},"value":"original"}],"performances":[{"id":{"@type":"gremlin:int64","@value":10},"value":{"@type":"gremlin:int32","@value":394}}]}}
+{"id":{"@type":"gremlin:int32","@value":5},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":194},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":962},"outV":{"@type":"gremlin:int32","@value":67},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5446},"outV":{"@type":"gremlin:int32","@value":231},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6344},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":1738},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id"
:{"@type":"gremlin:int32","@value":6666},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1867},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}},{"id":{"@type":"gremlin:int32","@value":4300},"outV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":847},"outV":{"@type":"gremlin:int32","@value":171},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2832},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6032},"outV":{"@type":"gremlin:int32","@value":115},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1170},"outV":{"@type":"gremlin:int32","@
value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5330},"outV":{"@type":"gremlin:int32","@value":238},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1491},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1429},"outV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3033},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6298},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1373},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"
id":{"@type":"gremlin:int32","@value":4447},"outV":{"@type":"gremlin:int32","@value":113},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5151},"outV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5343},"outV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6431},"outV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1953},"outV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":1634},"outV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2274},"outV":{"@type":"gremlin:int
32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":100},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":933},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2021},"outV":{"@type":"gremlin:int32","@value":149},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6694},"outV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4009},"outV":{"@type":"gremlin:int32","@value":225},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":682},"outV":{"@type":"gremlin:int32","@value":219},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}
,{"id":{"@type":"gremlin:int32","@value":3694},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":57}}},{"id":{"@type":"gremlin:int32","@value":4718},"outV":{"@type":"gremlin:int32","@value":186},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":3055},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":2480},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2736},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5426},"outV":{"@type":"gremlin:int32","@value":102},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6899},"outV":{"@type":"gremlin:int3
2","@value":147},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5879},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":22}}},{"id":{"@type":"gremlin:int32","@value":6201},"outV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5370},"outV":{"@type":"gremlin:int32","@value":132},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":700},"outV":{"@type":"gremlin:int32","@value":206},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2236},"outV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4604},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":2}
}},{"id":{"@type":"gremlin:int32","@value":5759},"outV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":273},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":274},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":275},"inV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":276},"inV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":277},"inV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":278},"inV":{"@type":
"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":279},"inV":{"@type":"gremlin:int32","@value":133},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":280},"inV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":281},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":282},"inV":{"@type":"gremlin:int32","@value":159},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":283},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":284},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1
9}}},{"id":{"@type":"gremlin:int32","@value":285},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":286},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":287},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":288},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":289},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":290},"inV":{"@type":"gremlin:int32","@value":116},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":291},"inV":{"@type":"gremlin:int32","@val
ue":127},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":292},"inV":{"@type":"gremlin:int32","@value":65},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":293},"inV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":294},"inV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":295},"inV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":296},"inV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":297},"inV":{"@type":"gremlin:int32","@value":161},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":
"gremlin:int32","@value":298},"inV":{"@type":"gremlin:int32","@value":162},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":299},"inV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":300},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":301},"inV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"id":{"@type":"gremlin:int32","@value":302},"inV":{"@type":"gremlin:int32","@value":163},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":303},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":304},"inV":{"@type":"gremlin:int32","@value":85},"properties":
{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":305},"inV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":306},"inV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":307},"inV":{"@type":"gremlin:int32","@value":150},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":308},"inV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":309},"inV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":310},"inV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value
":311},"inV":{"@type":"gremlin:int32","@value":166},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7582},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7581},"inV":{"@type":"gremlin:int32","@value":446}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":12},"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":{"@type":"gremlin:int64","@value":14},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":13},"value":{"@type":"gremlin:int32","@value":293}}]}}
+{"id":{"@type":"gremlin:int32","@value":6},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2023},"outV":{"@type":"gremlin:int32","@value":282},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2406},"inV":{"@type":"gremlin:int32","@value":293},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2407},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7782},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7781},"inV":{"@type":"gremlin:int32","@value":527}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":15},"value":"
MONA"}],"songType":[{"id":{"@type":"gremlin:int64","@value":17},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":16},"value":{"@type":"gremlin:int32","@value":1}}]}}
+{"id":{"@type":"gremlin:int32","@value":7},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2607},"outV":{"@type":"gremlin:int32","@value":295},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":5},"inV":{"@type":"gremlin:int32","@value":8},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":18},"value":"WHERE HAVE THE HEROES GONE"}],"songType":[{"id":{"@type":"gremlin:int64","@value":20},"value":""}],"performances":[{"id":{"@type":"gremlin:int64","@value":19},"value":{"@type":"gremlin:int32","@value":0}}]}}
+{"id":{"@type":"gremlin:int32","@value":8},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4705},"outV":{"@type":"gremlin:int32","@value":111},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5901},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2976},"inV":{"@type":"gremlin:int32","@value":302},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2977},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2978},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:in
t32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7814},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7813},"inV":{"@type":"gremlin:int32","@value":674}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":21},"value":"OH BOY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":23},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":22},"value":{"@type":"gremlin:int32","@value":2}}]}}
+{"id":{"@type":"gremlin:int32","@value":9},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3776},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":65},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1923},"outV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5956},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3077},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5832},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{
"id":{"@type":"gremlin:int32","@value":1161},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":2699},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6539},"outV":{"@type":"gremlin:int32","@value":55},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6667},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2578},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":787},"outV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3542},"outV":{"@type":"gremlin:int32","@
value":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2775},"outV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":2840},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4953},"outV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1572},"outV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":229},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4264},"outV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id"
:{"@type":"gremlin:int32","@value":4969},"outV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3498},"outV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5226},"outV":{"@type":"gremlin:int32","@value":216},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5548},"outV":{"@type":"gremlin:int32","@value":166},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2990},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3950},"outV":{"@type":"gremlin:int32","@value":138},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2488},"outV":{"@type":"gremlin:int32","@
value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6776},"outV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3641},"outV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1532},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1853},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":638},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6335},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"out
E":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":6},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value"
:16},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":13},"inV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":14},"inV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":16},"inV":{"@type":"gremlin:int32","@value":20},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":17},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":18},"inV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32"
,"@value":19},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":20},"inV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":21},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":22},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":23},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":24},"inV":{"@type":"gremlin:int32","@value":28},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":25},"inV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremli
n:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":26},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":27},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":28},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":29},"inV":{"@type":"gremlin:int32","@value":33},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":30},"inV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":31},"inV":{"@type":"gremlin:int32","@value":35},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":32},"inV":{"@type":"gremlin:int32"
,"@value":36},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":33},"inV":{"@type":"gremlin:int32","@value":37},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":34},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":35},"inV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":36},"inV":{"@type":"gremlin:int32","@value":40},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":37},"inV":{"@type":"gremlin:int32","@value":41},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":38},"inV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"greml
in:int32","@value":39},"inV":{"@type":"gremlin:int32","@value":43},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7190},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7189},"inV":{"@type":"gremlin:int32","@value":339}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":24},"value":"HERE COMES SUNSHINE"}],"songType":[{"id":{"@type":"gremlin:int64","@value":26},"value":"original"}],"performances":[{"id":{"@type":"gremlin:int64","@value":25},"value":{"@type":"gremlin:int32","@value":65}}]}}
+{"id":{"@type":"gremlin:int32","@value":10},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3841},"outV":{"@type":"gremlin:int32","@value":60},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1027},"outV":{"@type":"gremlin:int32","@value":73},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3335},"outV":{"@type":"gremlin:int32","@value":155},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4103},"outV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6279},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
id":{"@type":"gremlin:int32","@value":4233},"outV":{"@type":"gremlin:int32","@value":52},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4878},"outV":{"@type":"gremlin:int32","@value":100},"properties":{"weight":{"@type":"gremlin:int32","@value":19}}},{"id":{"@type":"gremlin:int32","@value":5264},"outV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2196},"outV":{"@type":"gremlin:int32","@value":75},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":151},"outV":{"@type":"gremlin:int32","@value":108},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1571},"outV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3619},"outV":{"@type":"gremlin:int32","
@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3237},"outV":{"@type":"gremlin:int32","@value":63},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4647},"outV":{"@type":"gremlin:int32","@value":154},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4521},"outV":{"@type":"gremlin:int32","@value":105},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1195},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6444},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":6956},"outV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
id":{"@type":"gremlin:int32","@value":687},"outV":{"@type":"gremlin:int32","@value":157},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4784},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6064},"outV":{"@type":"gremlin:int32","@value":115},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1714},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3890},"outV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":55},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5175},"outV":{"@type":"gremlin:int32","@v
alue":71},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1337},"outV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1083},"outV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4155},"outV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":6077},"outV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5441},"outV":{"@type":"gremlin:int32","@value":239},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1987},"outV":{"@type":"gremlin:int32","@value":152},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id
":{"@type":"gremlin:int32","@value":1860},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2116},"outV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3269},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":454},"outV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3142},"outV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":2505},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":6603},"outV":{"@type":"gremlin:int32","@v
alue":127},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6859},"outV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":717},"outV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":1360},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3026},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5972},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5077},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{
"@type":"gremlin:int32","@value":2392},"outV":{"@type":"gremlin:int32","@value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1250},"outV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4706},"outV":{"@type":"gremlin:int32","@value":111},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6755},"outV":{"@type":"gremlin:int32","@value":53},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":485},"outV":{"@type":"gremlin:int32","@value":98},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":2917},"outV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3559},"outV":{"@type":"gremlin:int32","@valu
e":56},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":3436},"outV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3820},"outV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4463},"outV":{"@type":"gremlin:int32","@value":202},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":880},"outV":{"@type":"gremlin:int32","@value":189},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6256},"outV":{"@type":"gremlin:int32","@value":117},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3698},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{
"@type":"gremlin:int32","@value":2035},"outV":{"@type":"gremlin:int32","@value":180},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2291},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3317},"outV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2806},"outV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2427},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6782},"outV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4351},"outV":{"@type":"gremlin:int32","@valu
e":62},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4235},"inV":{"@type":"gremlin:int32","@value":56},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4236},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":4237},"inV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"id":{"@type":"gremlin:int32","@value":4238},"inV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":4239},"inV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":4240},"inV":{"@type":"gremlin:int32","@value":100},"properties":{"weight":{"@type":"gremlin:int32","@v
alue":21}}},{"id":{"@type":"gremlin:int32","@value":4241},"inV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4242},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4243},"inV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":4244},"inV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4245},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":4246},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4247},"inV":{"@type":"gremlin:i
nt32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4248},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4249},"inV":{"@type":"gremlin:int32","@value":235},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4250},"inV":{"@type":"gremlin:int32","@value":218},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4251},"inV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4252},"inV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4253},"inV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}}
,{"id":{"@type":"gremlin:int32","@value":4254},"inV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4255},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4256},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4257},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4258},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4259},"inV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4260},"inV":{"@type":"gremlin:int32","@va
lue":18},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4261},"inV":{"@type":"gremlin:int32","@value":202},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4262},"inV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4263},"inV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4264},"inV":{"@type":"gremlin:int32","@value":9},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4265},"inV":{"@type":"gremlin:int32","@value":55},"properties"
<TRUNCATED>
[15/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/grateful-dead-typed.json
----------------------------------------------------------------------
diff --git a/data/grateful-dead-typed.json b/data/grateful-dead-typed.json
index 9679502..3806d5e 100644
--- a/data/grateful-dead-typed.json
+++ b/data/grateful-dead-typed.json
@@ -1,257 +1,257 @@
{"@class":"java.util.HashMap","id":1,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":3059,"outV":153,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":276,"outV":5,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3704,"outV":3,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4383,"outV":62,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":0,"inV":2,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1,"inV":3,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2,"inV":4,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3,"inV":5,"properties":{"@class":"j
ava.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4,"inV":6,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7612,"inV":340}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7611,"inV":527}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",0],"value":"HEY BO DIDDLEY"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",2],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",1],"value":5}]]}}
{"@class":"java.util.HashMap","id":2,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":0,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":323,"outV":34,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":6190,"inV":123,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6191,"inV":50,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7666,"inV":525}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7665,"inV":525}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",3],"value":"IM A MAN"}]],"songType":["java.util.ArrayList",[{"@class":"j
ava.util.HashMap","id":["java.lang.Long",5],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",4],"value":1}]]}}
-{"@class":"java.util.HashMap","id":3,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"outV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2051,"outV":92,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":1412,"outV":83,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":6669,"outV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1166,"outV":26,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":6286,"outV":49,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":910,"outV":91,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":526,"outV":120,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap"
,"id":273,"outV":5,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":2194,"outV":235,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1684,"outV":124,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3221,"outV":63,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1941,"outV":148,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":2712,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6425,"outV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5787,"outV":76,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5148,"outV":125,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":6692,"outV":141,"properties":{"@c
lass":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6310,"outV":123,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6448,"outV":187,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":2225,"outV":226,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5042,"outV":209,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4789,"outV":114,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1464,"outV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2232,"outV":215,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4665,"outV":154,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2235,"outV":29,"properties":{"@class":"java.util.HashMap","weight":1
63}},{"@class":"java.util.HashMap","id":6208,"outV":319,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":706,"outV":206,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":835,"outV":171,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5188,"outV":99,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1862,"outV":94,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":6343,"outV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1735,"outV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4937,"outV":277,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3276,"outV":160,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id"
:3149,"outV":104,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1358,"outV":130,"properties":{"@class":"java.util.HashMap","weight":18}},{"@class":"java.util.HashMap","id":4304,"outV":110,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1105,"outV":59,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":722,"outV":80,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4182,"outV":54,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1499,"outV":164,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2397,"outV":179,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6623,"outV":127,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":351,"outV":178,"properties":{"@class
":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2018,"outV":149,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":7011,"outV":89,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5348,"outV":165,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2278,"outV":25,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":1255,"outV":27,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3048,"outV":153,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":5867,"outV":96,"properties":{"@class":"java.util.HashMap","weight":116}},{"@class":"java.util.HashMap","id":364,"outV":74,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":492,"outV":98,"properties":{"@class":"java.util.HashMap","weight":1}},{"@c
lass":"java.util.HashMap","id":3948,"outV":138,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":4335,"outV":62,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3312,"outV":252,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5745,"outV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4596,"outV":85,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5367,"outV":132,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":633,"outV":23,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":891,"outV":140,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5375,"outV":69,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6143,"out
V":289,"properties":{"@class":"java.util.HashMap","weight":3}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":3712,"inV":27,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3713,"inV":110,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3714,"inV":215,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3715,"inV":127,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3716,"inV":83,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3717,"inV":103,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3718,"inV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3719,"inV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"
java.util.HashMap","id":3720,"inV":25,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3721,"inV":125,"properties":{"@class":"java.util.HashMap","weight":54}},{"@class":"java.util.HashMap","id":3722,"inV":130,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":3723,"inV":141,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3724,"inV":145,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3725,"inV":319,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3726,"inV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3727,"inV":160,"properties":{"@class":"java.util.HashMap","weight":37}},{"@class":"java.util.HashMap","id":3728,"inV":70,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3729,"inV":123,"pr
operties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3730,"inV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3731,"inV":30,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3732,"inV":148,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3733,"inV":211,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3734,"inV":87,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":3735,"inV":164,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3736,"inV":64,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3737,"inV":320,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3738,"inV":61,"properties":{"@class":"java.util.HashMap","weigh
t":3}},{"@class":"java.util.HashMap","id":3739,"inV":210,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3740,"inV":50,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3741,"inV":128,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3742,"inV":315,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3743,"inV":261,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3744,"inV":213,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":3745,"inV":72,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3746,"inV":38,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3747,"inV":204,"properties":{"@class":"java.util.HashMap","weight":14}},{"@class":"java.util.HashMap","id":37
48,"inV":62,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3749,"inV":150,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":3750,"inV":309,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3751,"inV":131,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3752,"inV":151,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3753,"inV":321,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3754,"inV":90,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3755,"inV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3756,"inV":120,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3757,"inV":46,"properties":{"@class":"java.util.
HashMap","weight":5}},{"@class":"java.util.HashMap","id":3758,"inV":157,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3759,"inV":59,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3760,"inV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3761,"inV":86,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3762,"inV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3763,"inV":201,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3764,"inV":214,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3765,"inV":185,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3766,"inV":216,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.Has
hMap","id":3767,"inV":217,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3768,"inV":236,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3769,"inV":193,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3770,"inV":79,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3771,"inV":84,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3772,"inV":23,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3773,"inV":31,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3774,"inV":240,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3775,"inV":292,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3776,"inV":9,"properties":{"@class":
"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3777,"inV":259,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3694,"inV":5,"properties":{"@class":"java.util.HashMap","weight":57}},{"@class":"java.util.HashMap","id":3695,"inV":114,"properties":{"@class":"java.util.HashMap","weight":30}},{"@class":"java.util.HashMap","id":3696,"inV":74,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3697,"inV":78,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3698,"inV":10,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3699,"inV":26,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3700,"inV":153,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3701,"inV":4,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.
util.HashMap","id":3702,"inV":317,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3703,"inV":13,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3704,"inV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3705,"inV":21,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3706,"inV":57,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3707,"inV":122,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3708,"inV":318,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3709,"inV":94,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":3710,"inV":96,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3711,"inV":124,"properties":{"
@class":"java.util.HashMap","weight":15}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7808,"inV":351}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7807,"inV":671}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",6],"value":"NOT FADE AWAY"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",8],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",7],"value":531}]]}}
-{"@class":"java.util.HashMap","id":4,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":128,"outV":97,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1664,"outV":267,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4099,"outV":48,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1667,"outV":124,"properties":{"@class":"java.util.HashMap","weight":15}},{"@class":"java.util.HashMap","id":899,"outV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1156,"outV":26,"properties":{"@class":"java.util.HashMap","weight":16}},{"@class":"java.util.HashMap","id":773,"outV":122,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.Hash
Map","id":6534,"outV":242,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6664,"outV":12,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1032,"outV":73,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5129,"outV":222,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5387,"outV":69,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5517,"outV":43,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5006,"outV":30,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6030,"outV":204,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2063,"outV":92,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":915,"outV":91,"properties":{"@
class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6940,"outV":84,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":2464,"outV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5795,"outV":76,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3620,"outV":24,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4772,"outV":114,"properties":{"@class":"java.util.HashMap","weight":25}},{"@class":"java.util.HashMap","id":2982,"outV":14,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3367,"outV":184,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":2345,"outV":87,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2861,"outV":101,"properties":{"@class":"java.util.HashMap","weight":6}}
,{"@class":"java.util.HashMap","id":1840,"outV":275,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5425,"outV":102,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":180,"outV":70,"properties":{"@class":"java.util.HashMap","weight":46}},{"@class":"java.util.HashMap","id":2613,"outV":158,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5562,"outV":162,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5434,"outV":217,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1469,"outV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":446,"outV":38,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":2494,"outV":90,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":326
6,"outV":160,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":326,"outV":34,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6855,"outV":64,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":583,"outV":120,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":73,"outV":46,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":4425,"outV":212,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4941,"outV":86,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1613,"outV":210,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6350,"outV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3535,"outV":201,"properties":{"@class":"java
.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":980,"outV":11,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5206,"outV":99,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1494,"outV":164,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5847,"outV":61,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6490,"outV":187,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2781,"outV":15,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5600,"outV":42,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":353,"outV":74,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5474,"outV":79,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java
.util.HashMap","id":3811,"outV":88,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1891,"outV":103,"properties":{"@class":"java.util.HashMap","weight":19}},{"@class":"java.util.HashMap","id":5989,"outV":50,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":4327,"outV":110,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2538,"outV":57,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3050,"outV":153,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":4970,"outV":236,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2283,"outV":25,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":236,"outV":145,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6126,"outV":72,"
properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5232,"outV":214,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4594,"outV":85,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4084,"outV":109,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1652,"outV":213,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3701,"outV":3,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5621,"outV":22,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":629,"outV":23,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":7029,"outV":89,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5238,"outV":32,"properties":{"@class":"java.util.HashMap"
,"weight":3}},{"@class":"java.util.HashMap","id":2684,"outV":13,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":3325,"outV":268,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5120,"inV":40,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":5121,"inV":33,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5122,"inV":79,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5123,"inV":292,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5071,"inV":50,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5072,"inV":12,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":5073,"inV":18,"properties"
:{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5074,"inV":24,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5075,"inV":23,"properties":{"@class":"java.util.HashMap","weight":63}},{"@class":"java.util.HashMap","id":5076,"inV":13,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":5077,"inV":10,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5078,"inV":11,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5079,"inV":26,"properties":{"@class":"java.util.HashMap","weight":18}},{"@class":"java.util.HashMap","id":5080,"inV":22,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5081,"inV":16,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5082,"inV":49,"properties":{"@class":"java.util.HashMap","weight":1}},{"@cl
ass":"java.util.HashMap","id":5083,"inV":25,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5084,"inV":51,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5085,"inV":15,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5086,"inV":112,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5087,"inV":121,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5088,"inV":32,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":5089,"inV":68,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5090,"inV":120,"properties":{"@class":"java.util.HashMap","weight":77}},{"@class":"java.util.HashMap","id":5091,"inV":103,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5092,"inV":42,"pr
operties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5093,"inV":85,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5094,"inV":76,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":5095,"inV":181,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5096,"inV":14,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5097,"inV":122,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5098,"inV":153,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5099,"inV":96,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5100,"inV":82,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5101,"inV":110,"properties":{"@class":"java.util.HashMap","weight"
:1}},{"@class":"java.util.HashMap","id":5102,"inV":19,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5103,"inV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5104,"inV":84,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5105,"inV":88,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5106,"inV":97,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5107,"inV":114,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5108,"inV":30,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":5109,"inV":31,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":5110,"inV":69,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5111,"inV"
:127,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5112,"inV":60,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5113,"inV":39,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5114,"inV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5115,"inV":117,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5116,"inV":78,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5117,"inV":38,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5118,"inV":169,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5119,"inV":118,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7064,"inV":340}]],"writ
tenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7063,"inV":339}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",9],"value":"BERTHA"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",11],"value":"original"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",10],"value":394}]]}}
-{"@class":"java.util.HashMap","id":5,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":962,"outV":67,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":194,"outV":70,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":3,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5446,"outV":231,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":6344,"outV":21,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":6666,"outV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1738,"outV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1867,"outV":94,"properties":{"@class":"java.util.HashMap","weight":15}},{"@class":"java.util.HashMap
","id":4300,"outV":110,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":847,"outV":171,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2832,"outV":101,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6032,"outV":115,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1170,"outV":26,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5330,"outV":238,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1491,"outV":164,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1429,"outV":83,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3033,"outV":14,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6298,"outV":49,"properties":{"@
class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1373,"outV":130,"properties":{"@class":"java.util.HashMap","weight":11}},{"@class":"java.util.HashMap","id":4447,"outV":113,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5151,"outV":125,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":6431,"outV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5343,"outV":165,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1953,"outV":148,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":2274,"outV":25,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":1634,"outV":210,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":100,"outV":46,"properties":{"@class":"java.util.HashMap","weight"
:1}},{"@class":"java.util.HashMap","id":933,"outV":91,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2021,"outV":149,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6694,"outV":141,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4009,"outV":225,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":682,"outV":219,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3694,"outV":3,"properties":{"@class":"java.util.HashMap","weight":57}},{"@class":"java.util.HashMap","id":4718,"outV":186,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":3055,"outV":153,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":2736,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id"
:2480,"outV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5426,"outV":102,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6899,"outV":147,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5879,"outV":96,"properties":{"@class":"java.util.HashMap","weight":22}},{"@class":"java.util.HashMap","id":6201,"outV":319,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5370,"outV":132,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2236,"outV":29,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":4604,"outV":85,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":700,"outV":206,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5759,"outV":129,"properties":{"@class
":"java.util.HashMap","weight":6}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":273,"inV":3,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":274,"inV":26,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":275,"inV":114,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":276,"inV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":277,"inV":74,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":278,"inV":122,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":279,"inV":133,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":280,"inV":83,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":281,"inV":153,"
properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":282,"inV":159,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":283,"inV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":284,"inV":25,"properties":{"@class":"java.util.HashMap","weight":19}},{"@class":"java.util.HashMap","id":285,"inV":96,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":286,"inV":160,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":287,"inV":32,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":288,"inV":120,"properties":{"@class":"java.util.HashMap","weight":16}},{"@class":"java.util.HashMap","id":289,"inV":50,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":290,"inV":116,"properties":{"@class":"java.util.HashMap","weight":1}}
,{"@class":"java.util.HashMap","id":291,"inV":127,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":292,"inV":65,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":293,"inV":130,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":294,"inV":125,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":295,"inV":70,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":296,"inV":134,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":297,"inV":161,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":298,"inV":162,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":299,"inV":124,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":300,"inV":38,"pro
perties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":301,"inV":29,"properties":{"@class":"java.util.HashMap","weight":11}},{"@class":"java.util.HashMap","id":302,"inV":163,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":303,"inV":94,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":304,"inV":85,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":305,"inV":164,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":306,"inV":64,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":307,"inV":150,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":308,"inV":165,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":309,"inV":92,"properties":{"@class":"java.util.HashMap","weight":1}},{"@c
lass":"java.util.HashMap","id":310,"inV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":311,"inV":166,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7582,"inV":340}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7581,"inV":446}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",12],"value":"GOING DOWN THE ROAD FEELING BAD"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",14],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",13],"value":293}]]}}
+{"@class":"java.util.HashMap","id":3,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"outV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2051,"outV":92,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":1412,"outV":83,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":6669,"outV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":526,"outV":120,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":910,"outV":91,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1166,"outV":26,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":6286,"outV":49,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap"
,"id":273,"outV":5,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":2194,"outV":235,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1684,"outV":124,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1941,"outV":148,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3221,"outV":63,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2712,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6425,"outV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5787,"outV":76,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5148,"outV":125,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":6692,"outV":141,"properties":{"@c
lass":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6310,"outV":123,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6448,"outV":187,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":2225,"outV":226,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5042,"outV":209,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4789,"outV":114,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1464,"outV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2232,"outV":215,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4665,"outV":154,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2235,"outV":29,"properties":{"@class":"java.util.HashMap","weight":1
63}},{"@class":"java.util.HashMap","id":6208,"outV":319,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":706,"outV":206,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":835,"outV":171,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5188,"outV":99,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1862,"outV":94,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":1735,"outV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6343,"outV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4937,"outV":277,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3276,"outV":160,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id"
:3149,"outV":104,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1358,"outV":130,"properties":{"@class":"java.util.HashMap","weight":18}},{"@class":"java.util.HashMap","id":4304,"outV":110,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1105,"outV":59,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":722,"outV":80,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4182,"outV":54,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1499,"outV":164,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2397,"outV":179,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":351,"outV":178,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6623,"outV":127,"properties":{"@class
":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":2018,"outV":149,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":7011,"outV":89,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5348,"outV":165,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2278,"outV":25,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":1255,"outV":27,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3048,"outV":153,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":5867,"outV":96,"properties":{"@class":"java.util.HashMap","weight":116}},{"@class":"java.util.HashMap","id":364,"outV":74,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":492,"outV":98,"properties":{"@class":"java.util.HashMap","weight":1}},{"@c
lass":"java.util.HashMap","id":3948,"outV":138,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":4335,"outV":62,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3312,"outV":252,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5745,"outV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4596,"outV":85,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5367,"outV":132,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":633,"outV":23,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":891,"outV":140,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5375,"outV":69,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6143,"out
V":289,"properties":{"@class":"java.util.HashMap","weight":3}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":3712,"inV":27,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3713,"inV":110,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3714,"inV":215,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3715,"inV":127,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3716,"inV":83,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3717,"inV":103,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3718,"inV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3719,"inV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"
java.util.HashMap","id":3720,"inV":25,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3721,"inV":125,"properties":{"@class":"java.util.HashMap","weight":54}},{"@class":"java.util.HashMap","id":3722,"inV":130,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":3723,"inV":141,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3724,"inV":145,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3725,"inV":319,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3726,"inV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3727,"inV":160,"properties":{"@class":"java.util.HashMap","weight":37}},{"@class":"java.util.HashMap","id":3728,"inV":70,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3729,"inV":123,"pr
operties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3730,"inV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3731,"inV":30,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3732,"inV":148,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3733,"inV":211,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3734,"inV":87,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":3735,"inV":164,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3736,"inV":64,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3737,"inV":320,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3738,"inV":61,"properties":{"@class":"java.util.HashMap","weigh
t":3}},{"@class":"java.util.HashMap","id":3739,"inV":210,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3740,"inV":50,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3741,"inV":128,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3742,"inV":315,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3743,"inV":261,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3744,"inV":213,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":3745,"inV":72,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3746,"inV":38,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3747,"inV":204,"properties":{"@class":"java.util.HashMap","weight":14}},{"@class":"java.util.HashMap","id":37
48,"inV":62,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3749,"inV":150,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":3750,"inV":309,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3751,"inV":131,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3752,"inV":151,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3753,"inV":321,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3754,"inV":90,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3755,"inV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3756,"inV":120,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3757,"inV":46,"properties":{"@class":"java.util.
HashMap","weight":5}},{"@class":"java.util.HashMap","id":3758,"inV":157,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3759,"inV":59,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3760,"inV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3761,"inV":86,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3762,"inV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3763,"inV":201,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3764,"inV":214,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3765,"inV":185,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3766,"inV":216,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.Has
hMap","id":3767,"inV":217,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3768,"inV":236,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3769,"inV":193,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3770,"inV":79,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3771,"inV":84,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3772,"inV":23,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3773,"inV":31,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3774,"inV":240,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3775,"inV":292,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3776,"inV":9,"properties":{"@class":
"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3777,"inV":259,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3694,"inV":5,"properties":{"@class":"java.util.HashMap","weight":57}},{"@class":"java.util.HashMap","id":3695,"inV":114,"properties":{"@class":"java.util.HashMap","weight":30}},{"@class":"java.util.HashMap","id":3696,"inV":74,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3697,"inV":78,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3698,"inV":10,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3699,"inV":26,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3700,"inV":153,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3701,"inV":4,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.
util.HashMap","id":3702,"inV":317,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3703,"inV":13,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3704,"inV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3705,"inV":21,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3706,"inV":57,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3707,"inV":122,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3708,"inV":318,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3709,"inV":94,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":3710,"inV":96,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3711,"inV":124,"properties":{"
@class":"java.util.HashMap","weight":15}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7808,"inV":351}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7807,"inV":671}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",6],"value":"NOT FADE AWAY"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",8],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",7],"value":531}]]}}
+{"@class":"java.util.HashMap","id":4,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":128,"outV":97,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1664,"outV":267,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":899,"outV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1667,"outV":124,"properties":{"@class":"java.util.HashMap","weight":15}},{"@class":"java.util.HashMap","id":4099,"outV":48,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1156,"outV":26,"properties":{"@class":"java.util.HashMap","weight":16}},{"@class":"java.util.HashMap","id":773,"outV":122,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.Hash
Map","id":6534,"outV":242,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1032,"outV":73,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6664,"outV":12,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5129,"outV":222,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5387,"outV":69,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5517,"outV":43,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5006,"outV":30,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6030,"outV":204,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2063,"outV":92,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":915,"outV":91,"properties":{"@
class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6940,"outV":84,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":2464,"outV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5795,"outV":76,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3620,"outV":24,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4772,"outV":114,"properties":{"@class":"java.util.HashMap","weight":25}},{"@class":"java.util.HashMap","id":2982,"outV":14,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3367,"outV":184,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":2345,"outV":87,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2861,"outV":101,"properties":{"@class":"java.util.HashMap","weight":6}}
,{"@class":"java.util.HashMap","id":1840,"outV":275,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5425,"outV":102,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":180,"outV":70,"properties":{"@class":"java.util.HashMap","weight":46}},{"@class":"java.util.HashMap","id":2613,"outV":158,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5434,"outV":217,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5562,"outV":162,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1469,"outV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":446,"outV":38,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":2494,"outV":90,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":326
6,"outV":160,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":326,"outV":34,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":583,"outV":120,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6855,"outV":64,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":73,"outV":46,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":4425,"outV":212,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1613,"outV":210,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4941,"outV":86,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6350,"outV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3535,"outV":201,"properties":{"@class":"java
.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":980,"outV":11,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1494,"outV":164,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5206,"outV":99,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5847,"outV":61,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6490,"outV":187,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2781,"outV":15,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5600,"outV":42,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":353,"outV":74,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5474,"outV":79,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java
.util.HashMap","id":1891,"outV":103,"properties":{"@class":"java.util.HashMap","weight":19}},{"@class":"java.util.HashMap","id":3811,"outV":88,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5989,"outV":50,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":4327,"outV":110,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2538,"outV":57,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3050,"outV":153,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":4970,"outV":236,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2283,"outV":25,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":236,"outV":145,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6126,"outV":72,"
properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5232,"outV":214,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4594,"outV":85,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1652,"outV":213,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":4084,"outV":109,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":629,"outV":23,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3701,"outV":3,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5621,"outV":22,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":7029,"outV":89,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5238,"outV":32,"properties":{"@class":"java.util.HashMap"
,"weight":3}},{"@class":"java.util.HashMap","id":2684,"outV":13,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":3325,"outV":268,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5120,"inV":40,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":5121,"inV":33,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5122,"inV":79,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5123,"inV":292,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5071,"inV":50,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5072,"inV":12,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":5073,"inV":18,"properties"
:{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5074,"inV":24,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5075,"inV":23,"properties":{"@class":"java.util.HashMap","weight":63}},{"@class":"java.util.HashMap","id":5076,"inV":13,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":5077,"inV":10,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5078,"inV":11,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5079,"inV":26,"properties":{"@class":"java.util.HashMap","weight":18}},{"@class":"java.util.HashMap","id":5080,"inV":22,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5081,"inV":16,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5082,"inV":49,"properties":{"@class":"java.util.HashMap","weight":1}},{"@cl
ass":"java.util.HashMap","id":5083,"inV":25,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5084,"inV":51,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5085,"inV":15,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5086,"inV":112,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5087,"inV":121,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5088,"inV":32,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":5089,"inV":68,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5090,"inV":120,"properties":{"@class":"java.util.HashMap","weight":77}},{"@class":"java.util.HashMap","id":5091,"inV":103,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5092,"inV":42,"pr
operties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5093,"inV":85,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5094,"inV":76,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":5095,"inV":181,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5096,"inV":14,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5097,"inV":122,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5098,"inV":153,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5099,"inV":96,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5100,"inV":82,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5101,"inV":110,"properties":{"@class":"java.util.HashMap","weight"
:1}},{"@class":"java.util.HashMap","id":5102,"inV":19,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5103,"inV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5104,"inV":84,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5105,"inV":88,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5106,"inV":97,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5107,"inV":114,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5108,"inV":30,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":5109,"inV":31,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":5110,"inV":69,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5111,"inV"
:127,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5112,"inV":60,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5113,"inV":39,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5114,"inV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5115,"inV":117,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5116,"inV":78,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5117,"inV":38,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5118,"inV":169,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5119,"inV":118,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7064,"inV":340}]],"writ
tenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7063,"inV":339}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",9],"value":"BERTHA"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",11],"value":"original"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",10],"value":394}]]}}
+{"@class":"java.util.HashMap","id":5,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":194,"outV":70,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":962,"outV":67,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5446,"outV":231,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":6344,"outV":21,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":1738,"outV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6666,"outV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1867,"outV":94,"properties":{"@class":"java.util.HashMap","weight":15}},{"@class":"java.util.HashMap
","id":4300,"outV":110,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":847,"outV":171,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2832,"outV":101,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6032,"outV":115,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1170,"outV":26,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5330,"outV":238,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1491,"outV":164,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1429,"outV":83,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3033,"outV":14,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6298,"outV":49,"properties":{"@
class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1373,"outV":130,"properties":{"@class":"java.util.HashMap","weight":11}},{"@class":"java.util.HashMap","id":4447,"outV":113,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5151,"outV":125,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5343,"outV":165,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6431,"outV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1953,"outV":148,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":1634,"outV":210,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2274,"outV":25,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":100,"outV":46,"properties":{"@class":"java.util.HashMap","weight"
:1}},{"@class":"java.util.HashMap","id":933,"outV":91,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2021,"outV":149,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6694,"outV":141,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4009,"outV":225,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":682,"outV":219,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3694,"outV":3,"properties":{"@class":"java.util.HashMap","weight":57}},{"@class":"java.util.HashMap","id":4718,"outV":186,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":3055,"outV":153,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":2480,"outV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id"
:2736,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5426,"outV":102,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6899,"outV":147,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5879,"outV":96,"properties":{"@class":"java.util.HashMap","weight":22}},{"@class":"java.util.HashMap","id":6201,"outV":319,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5370,"outV":132,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":700,"outV":206,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2236,"outV":29,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":4604,"outV":85,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5759,"outV":129,"properties":{"@class
":"java.util.HashMap","weight":6}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":273,"inV":3,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":274,"inV":26,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":275,"inV":114,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":276,"inV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":277,"inV":74,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":278,"inV":122,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":279,"inV":133,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":280,"inV":83,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":281,"inV":153,"
properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":282,"inV":159,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":283,"inV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":284,"inV":25,"properties":{"@class":"java.util.HashMap","weight":19}},{"@class":"java.util.HashMap","id":285,"inV":96,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":286,"inV":160,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":287,"inV":32,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":288,"inV":120,"properties":{"@class":"java.util.HashMap","weight":16}},{"@class":"java.util.HashMap","id":289,"inV":50,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":290,"inV":116,"properties":{"@class":"java.util.HashMap","weight":1}}
,{"@class":"java.util.HashMap","id":291,"inV":127,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":292,"inV":65,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":293,"inV":130,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":294,"inV":125,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":295,"inV":70,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":296,"inV":134,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":297,"inV":161,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":298,"inV":162,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":299,"inV":124,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":300,"inV":38,"pro
perties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":301,"inV":29,"properties":{"@class":"java.util.HashMap","weight":11}},{"@class":"java.util.HashMap","id":302,"inV":163,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":303,"inV":94,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":304,"inV":85,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":305,"inV":164,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":306,"inV":64,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":307,"inV":150,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":308,"inV":165,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":309,"inV":92,"properties":{"@class":"java.util.HashMap","weight":1}},{"@c
lass":"java.util.HashMap","id":310,"inV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":311,"inV":166,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7582,"inV":340}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7581,"inV":446}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",12],"value":"GOING DOWN THE ROAD FEELING BAD"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",14],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",13],"value":293}]]}}
{"@class":"java.util.HashMap","id":6,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2023,"outV":282,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2406,"inV":293,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2407,"inV":96,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7782,"inV":351}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7781,"inV":527}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",15],"value":"MONA"}]],"songType":["java.util.ArrayList",[{"@class":"ja
va.util.HashMap","id":["java.lang.Long",17],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",16],"value":1}]]}}
{"@class":"java.util.HashMap","id":7,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2607,"outV":295,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5,"inV":8,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",18],"value":"WHERE HAVE THE HEROES GONE"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",20],"value":""}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",19],"value":0}]]}}
{"@class":"java.util.HashMap","id":8,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4705,"outV":111,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5,"outV":7,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5901,"outV":96,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2976,"inV":302,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2977,"inV":96,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2978,"inV":72,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7814,"inV":351}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7813,
"inV":674}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",21],"value":"OH BOY"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",23],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",22],"value":2}]]}}
-{"@class":"java.util.HashMap","id":9,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":3776,"outV":3,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":65,"outV":46,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1923,"outV":103,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5956,"outV":50,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3077,"outV":153,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5832,"outV":76,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1161,"outV":26,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":6667,"outV":12,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.Hash
Map","id":2699,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6539,"outV":55,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2578,"outV":57,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":787,"outV":122,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3542,"outV":201,"
<TRUNCATED>
[17/19] tinkerpop git commit: Merge branch 'pr-386'
Posted by sp...@apache.org.
Merge branch 'pr-386'
Conflicts:
CHANGELOG.asciidoc
gremlin-server/conf/gremlin-server-min.yaml
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/de139edd
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/de139edd
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/de139edd
Branch: refs/heads/master
Commit: de139edd78e7ecc85ffebca836410b0f60e3bb38
Parents: e50f716 115eb3c
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Aug 22 12:54:40 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Aug 22 12:54:40 2016 -0400
----------------------------------------------------------------------
CHANGELOG.asciidoc | 2 +
data/grateful-dead-typed.json | 422 +++++-----
data/grateful-dead-v2d0-typed.json | 808 +++++++++++++++++++
data/grateful-dead-v2d0.json | 808 +++++++++++++++++++
data/grateful-dead.json | 422 +++++-----
data/tinkerpop-classic-v2d0-typed.json | 6 +
data/tinkerpop-classic-v2d0.json | 6 +
data/tinkerpop-crew-v2d0-typed.json | 6 +
data/tinkerpop-crew-v2d0.json | 6 +
data/tinkerpop-modern-v2d0-typed.json | 6 +
data/tinkerpop-modern-v2d0.json | 6 +
docs/src/reference/the-graph.asciidoc | 139 +++-
.../upgrade/release-3.2.x-incubating.asciidoc | 20 +
.../traversal/util/DefaultTraversalMetrics.java | 8 +
.../process/traversal/util/MutableMetrics.java | 12 +
.../structure/io/graphson/GraphSONMapper.java | 167 +++-
.../structure/io/graphson/GraphSONModule.java | 232 +++++-
.../structure/io/graphson/GraphSONReader.java | 8 +-
.../io/graphson/GraphSONSerializerProvider.java | 15 +-
.../io/graphson/GraphSONSerializers.java | 465 -----------
.../io/graphson/GraphSONSerializersV1d0.java | 465 +++++++++++
.../io/graphson/GraphSONSerializersV2d0.java | 580 +++++++++++++
.../structure/io/graphson/GraphSONTokens.java | 3 +
.../io/graphson/GraphSONTypeDeserializer.java | 229 ++++++
.../io/graphson/GraphSONTypeIdResolver.java | 108 +++
.../graphson/GraphSONTypeResolverBuilder.java | 65 ++
.../io/graphson/GraphSONTypeSerializer.java | 197 +++++
.../structure/io/graphson/GraphSONUtil.java | 37 +
.../structure/io/graphson/GraphSONVersion.java | 3 +-
.../structure/io/graphson/GraphSONWriter.java | 11 +-
.../io/graphson/JavaTimeSerializers.java | 326 --------
.../io/graphson/JavaTimeSerializersV1d0.java | 326 ++++++++
.../io/graphson/JavaTimeSerializersV2d0.java | 323 ++++++++
.../io/graphson/JavaUtilSerializers.java | 86 --
.../io/graphson/JavaUtilSerializersV1d0.java | 86 ++
.../io/graphson/JavaUtilSerializersV2d0.java | 87 ++
.../structure/io/graphson/JsonParserConcat.java | 83 ++
.../io/graphson/LegacyGraphSONReader.java | 4 +-
.../io/graphson/TinkerPopJacksonModule.java | 48 ++
.../io/graphson/ToStringGraphSONSerializer.java | 41 +
.../gremlin/structure/io/graphson/TypeInfo.java | 29 +
.../structure/util/detached/DetachedEdge.java | 11 +-
.../structure/util/detached/DetachedVertex.java | 10 +-
.../util/star/DirectionalStarGraph.java | 39 +
.../star/StarGraphGraphSONDeserializer.java | 91 +++
.../util/star/StarGraphGraphSONSerializer.java | 250 ------
.../star/StarGraphGraphSONSerializerV1d0.java | 178 ++++
.../star/StarGraphGraphSONSerializerV2d0.java | 165 ++++
.../GraphSONMapperEmbeddedTypeTest.java | 55 +-
.../io/graphson/GraphSONMapperTest.java | 17 +-
...aphSONMapperV2d0PartialEmbeddedTypeTest.java | 344 ++++++++
.../AbstractGraphSONMessageSerializerV2d0.java | 248 ++++++
.../GraphSONMessageSerializerGremlinV2d0.java | 69 ++
.../ser/GraphSONMessageSerializerV2d0.java | 125 +++
.../tinkerpop/gremlin/driver/ser/SerTokens.java | 1 +
...raphSONMessageSerializerGremlinTestV1d0.java | 334 ++++++++
...raphSONMessageSerializerGremlinTestV2d0.java | 341 ++++++++
...raphSONMessageSerializerGremlinV1d0Test.java | 334 --------
.../ser/GraphSONMessageSerializerV1d0Test.java | 9 +-
.../ser/GraphSONMessageSerializerV2d0Test.java | 507 ++++++++++++
gremlin-server/conf/gremlin-server-classic.yaml | 2 +-
gremlin-server/conf/gremlin-server-neo4j.yaml | 1 +
.../conf/gremlin-server-rest-modern.yaml | 1 +
.../conf/gremlin-server-rest-secure.yaml | 1 +
gremlin-server/conf/gremlin-server-secure.yaml | 1 +
gremlin-server/conf/gremlin-server-spark.yaml | 1 +
gremlin-server/conf/gremlin-server.yaml | 1 +
gremlin-server/data/sample.kryo | Bin 2416053 -> 2436147 bytes
.../server/GremlinServerHttpIntegrateTest.java | 22 +
.../remote/gremlin-server-integration.yaml | 1 +
.../server/gremlin-server-integration.yaml | 1 +
.../io/graphson/grateful-dead-typed.json | 422 +++++-----
.../io/graphson/grateful-dead-v2d0-typed.json | 808 +++++++++++++++++++
.../io/graphson/grateful-dead-v2d0.json | 808 +++++++++++++++++++
.../structure/io/graphson/grateful-dead.json | 422 +++++-----
.../tinkerpop-classic-normalized-v2d0.json | 6 +
.../graphson/tinkerpop-classic-v2d0-typed.json | 6 +
.../io/graphson/tinkerpop-classic-v2d0.json | 6 +
.../io/graphson/tinkerpop-crew-v2d0-typed.json | 6 +
.../io/graphson/tinkerpop-crew-v2d0.json | 6 +
.../tinkerpop-modern-normalized-v2d0.json | 6 +
.../graphson/tinkerpop-modern-v2d0-typed.json | 6 +
.../io/graphson/tinkerpop-modern-v2d0.json | 6 +
tinkergraph-gremlin/pom.xml | 4 +-
.../structure/TinkerIoRegistryV2d0.java | 213 +++++
.../structure/IoDataGenerationTest.java | 115 ++-
.../TinkerGraphGraphSONSerializerV2d0Test.java | 557 +++++++++++++
87 files changed, 10841 insertions(+), 2417 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/de139edd/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index 8117c12,f4515b7..5f49bea
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -26,7 -26,8 +26,9 @@@ image::https://raw.githubusercontent.co
TinkerPop 3.2.2 (NOT OFFICIALLY RELEASED YET)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+* Included GraphSON as a default serializer (in addition to Gryo, which was already present) in Gremlin Server if none are defined
+ * Introduced GraphSON 2.0.
+ * Deprecated `embedTypes` on the builder for `GraphSONMapper`.
* Defaulted the `gremlinPool` setting in Gremlin Server to be zero, which will instructs it to use `Runtime.availableProcessors()` for that settings.
* Changed scope of log4j dependencies so that they would only be used in tests and the binary distributions of Gremlin Console and Server.
* Deprecated `Io.Builder.registry()` in favor of the newly introduced `Io.Builder.onMapper()`.
[06/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/conf/gremlin-server-secure.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-secure.yaml b/gremlin-server/conf/gremlin-server-secure.yaml
index 3c26bcf..c053bc7 100644
--- a/gremlin-server/conf/gremlin-server-secure.yaml
+++ b/gremlin-server/conf/gremlin-server-secure.yaml
@@ -46,6 +46,7 @@ serializers:
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+gryo-lite
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v1.0+gryo-stringd
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
+ - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v2.0+json
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }} # application/json
processors:
- { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/conf/gremlin-server-spark.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-spark.yaml b/gremlin-server/conf/gremlin-server-spark.yaml
index 3d339e8..5078bf2 100644
--- a/gremlin-server/conf/gremlin-server-spark.yaml
+++ b/gremlin-server/conf/gremlin-server-spark.yaml
@@ -59,6 +59,7 @@ serializers:
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+gryo-lite
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v1.0+gryo-stringd
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
+ - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v2.0+json
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }} # application/json
processors:
- { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/conf/gremlin-server.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server.yaml b/gremlin-server/conf/gremlin-server.yaml
index 2f4e4f4..48c712a 100644
--- a/gremlin-server/conf/gremlin-server.yaml
+++ b/gremlin-server/conf/gremlin-server.yaml
@@ -36,6 +36,7 @@ serializers:
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+gryo-lite
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }} # application/vnd.gremlin-v1.0+gryo-stringd
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
+ - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v2.0+json
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }} # application/json
processors:
- { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/data/sample.kryo
----------------------------------------------------------------------
diff --git a/gremlin-server/data/sample.kryo b/gremlin-server/data/sample.kryo
index eb64be6..38b201e 100644
Binary files a/gremlin-server/data/sample.kryo and b/gremlin-server/data/sample.kryo differ
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
index f8efda9..6d5fc7c 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
@@ -18,6 +18,7 @@
*/
package org.apache.tinkerpop.gremlin.server;
+import org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0;
import org.apache.tinkerpop.gremlin.server.auth.SimpleAuthenticator;
import org.apache.tinkerpop.gremlin.server.channel.HttpChannelizer;
import org.apache.http.Consts;
@@ -76,6 +77,12 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
deleteDirectory(new File("/tmp/neo4j"));
settings.graphs.put("graph", "conf/neo4j-empty.properties");
break;
+ case "should200OnPOSTWithGraphSON2d0AcceptHeaderDefaultResultToJson":
+ settings.serializers.clear();
+ final Settings.SerializerSettings serializerSettings = new Settings.SerializerSettings();
+ serializerSettings.className = GraphSONMessageSerializerV2d0.class.getName();
+ settings.serializers.add(serializerSettings);
+ break;
case "should401OnGETWithNoAuthorizationHeader":
case "should401OnPOSTWithNoAuthorizationHeader":
case "should401OnGETWithBadAuthorizationHeader":
@@ -794,4 +801,19 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
assertEquals(500, response.getStatusLine().getStatusCode());
}
}
+
+ @Test
+ public void should200OnPOSTWithGraphSON2d0AcceptHeaderDefaultResultToJson() throws Exception {
+ final CloseableHttpClient httpclient = HttpClients.createDefault();
+ final HttpPost httppost = new HttpPost("http://localhost:8182");
+ httppost.setEntity(new StringEntity("{\"gremlin\":\"1-1\"}", Consts.UTF_8));
+
+ try (final CloseableHttpResponse response = httpclient.execute(httppost)) {
+ assertEquals(200, response.getStatusLine().getStatusCode());
+ assertEquals("application/json", response.getEntity().getContentType().getValue());
+ final String json = EntityUtils.toString(response.getEntity());
+ final JsonNode node = mapper.readTree(json);
+ assertEquals(0, node.get("result").get("data").get(0).asInt());
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
index 8d20f54..1e4d35f 100644
--- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
+++ b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
@@ -39,6 +39,7 @@ serializers:
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph, custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true}}
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }}
+ - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }}
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }}
processors:
- { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
index 9d92cd8..42a82e8 100644
--- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
+++ b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
@@ -35,6 +35,7 @@ serializers:
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph, custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true}}
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }}
+ - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }}
- { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }}
processors:
- { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}
[12/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/grateful-dead.json
----------------------------------------------------------------------
diff --git a/data/grateful-dead.json b/data/grateful-dead.json
index cf01395..92c4d84 100644
--- a/data/grateful-dead.json
+++ b/data/grateful-dead.json
@@ -1,257 +1,257 @@
{"id":1,"label":"song","inE":{"followedBy":[{"id":3059,"outV":153,"properties":{"weight":1}},{"id":276,"outV":5,"properties":{"weight":2}},{"id":3704,"outV":3,"properties":{"weight":2}},{"id":4383,"outV":62,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":0,"inV":2,"properties":{"weight":1}},{"id":1,"inV":3,"properties":{"weight":2}},{"id":2,"inV":4,"properties":{"weight":1}},{"id":3,"inV":5,"properties":{"weight":1}},{"id":4,"inV":6,"properties":{"weight":1}}],"sungBy":[{"id":7612,"inV":340}],"writtenBy":[{"id":7611,"inV":527}]},"properties":{"name":[{"id":0,"value":"HEY BO DIDDLEY"}],"songType":[{"id":2,"value":"cover"}],"performances":[{"id":1,"value":5}]}}
{"id":2,"label":"song","inE":{"followedBy":[{"id":0,"outV":1,"properties":{"weight":1}},{"id":323,"outV":34,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6190,"inV":123,"properties":{"weight":1}},{"id":6191,"inV":50,"properties":{"weight":1}}],"sungBy":[{"id":7666,"inV":525}],"writtenBy":[{"id":7665,"inV":525}]},"properties":{"name":[{"id":3,"value":"IM A MAN"}],"songType":[{"id":5,"value":"cover"}],"performances":[{"id":4,"value":1}]}}
-{"id":3,"label":"song","inE":{"followedBy":[{"id":1,"outV":1,"properties":{"weight":2}},{"id":2051,"outV":92,"properties":{"weight":4}},{"id":1412,"outV":83,"properties":{"weight":6}},{"id":6669,"outV":12,"properties":{"weight":1}},{"id":1166,"outV":26,"properties":{"weight":4}},{"id":6286,"outV":49,"properties":{"weight":1}},{"id":910,"outV":91,"properties":{"weight":3}},{"id":526,"outV":120,"properties":{"weight":2}},{"id":273,"outV":5,"properties":{"weight":40}},{"id":2194,"outV":235,"properties":{"weight":1}},{"id":1684,"outV":124,"properties":{"weight":1}},{"id":3221,"outV":63,"properties":{"weight":1}},{"id":1941,"outV":148,"properties":{"weight":4}},{"id":2712,"outV":13,"properties":{"weight":3}},{"id":6425,"outV":134,"properties":{"weight":2}},{"id":5787,"outV":76,"properties":{"weight":2}},{"id":5148,"outV":125,"properties":{"weight":4}},{"id":6692,"outV":141,"properties":{"weight":2}},{"id":6310,"outV":123,"properties":{"weight":1}},{"id":6448,"outV":187,"properties":{"wei
ght":3}},{"id":2225,"outV":226,"properties":{"weight":1}},{"id":5042,"outV":209,"properties":{"weight":1}},{"id":4789,"outV":114,"properties":{"weight":2}},{"id":1464,"outV":81,"properties":{"weight":1}},{"id":2232,"outV":215,"properties":{"weight":1}},{"id":4665,"outV":154,"properties":{"weight":1}},{"id":2235,"outV":29,"properties":{"weight":163}},{"id":6208,"outV":319,"properties":{"weight":4}},{"id":706,"outV":206,"properties":{"weight":2}},{"id":835,"outV":171,"properties":{"weight":1}},{"id":5188,"outV":99,"properties":{"weight":1}},{"id":1862,"outV":94,"properties":{"weight":10}},{"id":6343,"outV":21,"properties":{"weight":1}},{"id":1735,"outV":82,"properties":{"weight":1}},{"id":4937,"outV":277,"properties":{"weight":1}},{"id":3276,"outV":160,"properties":{"weight":1}},{"id":3149,"outV":104,"properties":{"weight":1}},{"id":1358,"outV":130,"properties":{"weight":18}},{"id":4304,"outV":110,"properties":{"weight":1}},{"id":1105,"outV":59,"properties":{"weight":1}},{"id":722,"ou
tV":80,"properties":{"weight":1}},{"id":4182,"outV":54,"properties":{"weight":1}},{"id":1499,"outV":164,"properties":{"weight":2}},{"id":2397,"outV":179,"properties":{"weight":1}},{"id":6623,"outV":127,"properties":{"weight":3}},{"id":351,"outV":178,"properties":{"weight":1}},{"id":2018,"outV":149,"properties":{"weight":1}},{"id":7011,"outV":89,"properties":{"weight":2}},{"id":5348,"outV":165,"properties":{"weight":1}},{"id":2278,"outV":25,"properties":{"weight":7}},{"id":1255,"outV":27,"properties":{"weight":2}},{"id":3048,"outV":153,"properties":{"weight":13}},{"id":5867,"outV":96,"properties":{"weight":116}},{"id":364,"outV":74,"properties":{"weight":2}},{"id":492,"outV":98,"properties":{"weight":1}},{"id":3948,"outV":138,"properties":{"weight":4}},{"id":4335,"outV":62,"properties":{"weight":1}},{"id":3312,"outV":252,"properties":{"weight":1}},{"id":5745,"outV":129,"properties":{"weight":1}},{"id":4596,"outV":85,"properties":{"weight":3}},{"id":5367,"outV":132,"properties":{"weig
ht":1}},{"id":633,"outV":23,"properties":{"weight":1}},{"id":891,"outV":140,"properties":{"weight":2}},{"id":5375,"outV":69,"properties":{"weight":1}},{"id":6143,"outV":289,"properties":{"weight":3}}]},"outE":{"followedBy":[{"id":3712,"inV":27,"properties":{"weight":1}},{"id":3713,"inV":110,"properties":{"weight":4}},{"id":3714,"inV":215,"properties":{"weight":4}},{"id":3715,"inV":127,"properties":{"weight":10}},{"id":3716,"inV":83,"properties":{"weight":3}},{"id":3717,"inV":103,"properties":{"weight":2}},{"id":3718,"inV":68,"properties":{"weight":1}},{"id":3719,"inV":134,"properties":{"weight":2}},{"id":3720,"inV":25,"properties":{"weight":10}},{"id":3721,"inV":125,"properties":{"weight":54}},{"id":3722,"inV":130,"properties":{"weight":26}},{"id":3723,"inV":141,"properties":{"weight":2}},{"id":3724,"inV":145,"properties":{"weight":1}},{"id":3725,"inV":319,"properties":{"weight":3}},{"id":3726,"inV":12,"properties":{"weight":1}},{"id":3727,"inV":160,"properties":{"weight":37}},{"id"
:3728,"inV":70,"properties":{"weight":2}},{"id":3729,"inV":123,"properties":{"weight":1}},{"id":3730,"inV":129,"properties":{"weight":1}},{"id":3731,"inV":30,"properties":{"weight":2}},{"id":3732,"inV":148,"properties":{"weight":1}},{"id":3733,"inV":211,"properties":{"weight":3}},{"id":3734,"inV":87,"properties":{"weight":13}},{"id":3735,"inV":164,"properties":{"weight":4}},{"id":3736,"inV":64,"properties":{"weight":2}},{"id":3737,"inV":320,"properties":{"weight":1}},{"id":3738,"inV":61,"properties":{"weight":3}},{"id":3739,"inV":210,"properties":{"weight":3}},{"id":3740,"inV":50,"properties":{"weight":7}},{"id":3741,"inV":128,"properties":{"weight":3}},{"id":3742,"inV":315,"properties":{"weight":1}},{"id":3743,"inV":261,"properties":{"weight":1}},{"id":3744,"inV":213,"properties":{"weight":13}},{"id":3745,"inV":72,"properties":{"weight":1}},{"id":3746,"inV":38,"properties":{"weight":4}},{"id":3747,"inV":204,"properties":{"weight":14}},{"id":3748,"inV":62,"properties":{"weight":2}},
{"id":3749,"inV":150,"properties":{"weight":8}},{"id":3750,"inV":309,"properties":{"weight":1}},{"id":3751,"inV":131,"properties":{"weight":1}},{"id":3752,"inV":151,"properties":{"weight":1}},{"id":3753,"inV":321,"properties":{"weight":1}},{"id":3754,"inV":90,"properties":{"weight":2}},{"id":3755,"inV":82,"properties":{"weight":1}},{"id":3756,"inV":120,"properties":{"weight":1}},{"id":3757,"inV":46,"properties":{"weight":5}},{"id":3758,"inV":157,"properties":{"weight":5}},{"id":3759,"inV":59,"properties":{"weight":1}},{"id":3760,"inV":81,"properties":{"weight":1}},{"id":3761,"inV":86,"properties":{"weight":5}},{"id":3762,"inV":140,"properties":{"weight":1}},{"id":3763,"inV":201,"properties":{"weight":1}},{"id":3764,"inV":214,"properties":{"weight":1}},{"id":3765,"inV":185,"properties":{"weight":2}},{"id":3766,"inV":216,"properties":{"weight":1}},{"id":3767,"inV":217,"properties":{"weight":2}},{"id":3768,"inV":236,"properties":{"weight":5}},{"id":3769,"inV":193,"properties":{"weight"
:1}},{"id":3770,"inV":79,"properties":{"weight":2}},{"id":3771,"inV":84,"properties":{"weight":1}},{"id":3772,"inV":23,"properties":{"weight":2}},{"id":3773,"inV":31,"properties":{"weight":2}},{"id":3774,"inV":240,"properties":{"weight":1}},{"id":3775,"inV":292,"properties":{"weight":1}},{"id":3776,"inV":9,"properties":{"weight":1}},{"id":3777,"inV":259,"properties":{"weight":1}},{"id":3694,"inV":5,"properties":{"weight":57}},{"id":3695,"inV":114,"properties":{"weight":30}},{"id":3696,"inV":74,"properties":{"weight":2}},{"id":3697,"inV":78,"properties":{"weight":3}},{"id":3698,"inV":10,"properties":{"weight":1}},{"id":3699,"inV":26,"properties":{"weight":4}},{"id":3700,"inV":153,"properties":{"weight":7}},{"id":3701,"inV":4,"properties":{"weight":4}},{"id":3702,"inV":317,"properties":{"weight":1}},{"id":3703,"inV":13,"properties":{"weight":5}},{"id":3704,"inV":1,"properties":{"weight":2}},{"id":3705,"inV":21,"properties":{"weight":2}},{"id":3706,"inV":57,"properties":{"weight":2}},{
"id":3707,"inV":122,"properties":{"weight":2}},{"id":3708,"inV":318,"properties":{"weight":1}},{"id":3709,"inV":94,"properties":{"weight":26}},{"id":3710,"inV":96,"properties":{"weight":7}},{"id":3711,"inV":124,"properties":{"weight":15}}],"sungBy":[{"id":7808,"inV":351}],"writtenBy":[{"id":7807,"inV":671}]},"properties":{"name":[{"id":6,"value":"NOT FADE AWAY"}],"songType":[{"id":8,"value":"cover"}],"performances":[{"id":7,"value":531}]}}
-{"id":4,"label":"song","inE":{"followedBy":[{"id":128,"outV":97,"properties":{"weight":1}},{"id":1664,"outV":267,"properties":{"weight":1}},{"id":2,"outV":1,"properties":{"weight":1}},{"id":4099,"outV":48,"properties":{"weight":1}},{"id":1667,"outV":124,"properties":{"weight":15}},{"id":899,"outV":140,"properties":{"weight":1}},{"id":1156,"outV":26,"properties":{"weight":16}},{"id":773,"outV":122,"properties":{"weight":9}},{"id":6534,"outV":242,"properties":{"weight":1}},{"id":6664,"outV":12,"properties":{"weight":3}},{"id":1032,"outV":73,"properties":{"weight":1}},{"id":5129,"outV":222,"properties":{"weight":1}},{"id":5387,"outV":69,"properties":{"weight":1}},{"id":5517,"outV":43,"properties":{"weight":2}},{"id":5006,"outV":30,"properties":{"weight":2}},{"id":6030,"outV":204,"properties":{"weight":2}},{"id":2063,"outV":92,"properties":{"weight":1}},{"id":915,"outV":91,"properties":{"weight":2}},{"id":6940,"outV":84,"properties":{"weight":5}},{"id":2464,"outV":68,"properties":{"weig
ht":1}},{"id":5795,"outV":76,"properties":{"weight":2}},{"id":3620,"outV":24,"properties":{"weight":2}},{"id":4772,"outV":114,"properties":{"weight":25}},{"id":2982,"outV":14,"properties":{"weight":3}},{"id":3367,"outV":184,"properties":{"weight":6}},{"id":2345,"outV":87,"properties":{"weight":2}},{"id":2861,"outV":101,"properties":{"weight":6}},{"id":1840,"outV":275,"properties":{"weight":1}},{"id":5425,"outV":102,"properties":{"weight":1}},{"id":180,"outV":70,"properties":{"weight":46}},{"id":2613,"outV":158,"properties":{"weight":1}},{"id":5562,"outV":162,"properties":{"weight":2}},{"id":5434,"outV":217,"properties":{"weight":1}},{"id":1469,"outV":81,"properties":{"weight":1}},{"id":446,"outV":38,"properties":{"weight":7}},{"id":2494,"outV":90,"properties":{"weight":3}},{"id":3266,"outV":160,"properties":{"weight":10}},{"id":326,"outV":34,"properties":{"weight":1}},{"id":6855,"outV":64,"properties":{"weight":12}},{"id":583,"outV":120,"properties":{"weight":2}},{"id":73,"outV":46,
"properties":{"weight":4}},{"id":4425,"outV":212,"properties":{"weight":1}},{"id":4941,"outV":86,"properties":{"weight":2}},{"id":1613,"outV":210,"properties":{"weight":2}},{"id":6350,"outV":21,"properties":{"weight":1}},{"id":3535,"outV":201,"properties":{"weight":1}},{"id":980,"outV":11,"properties":{"weight":3}},{"id":5206,"outV":99,"properties":{"weight":1}},{"id":1494,"outV":164,"properties":{"weight":3}},{"id":5847,"outV":61,"properties":{"weight":2}},{"id":6490,"outV":187,"properties":{"weight":1}},{"id":2781,"outV":15,"properties":{"weight":4}},{"id":5600,"outV":42,"properties":{"weight":1}},{"id":353,"outV":74,"properties":{"weight":6}},{"id":5474,"outV":79,"properties":{"weight":1}},{"id":3811,"outV":88,"properties":{"weight":2}},{"id":1891,"outV":103,"properties":{"weight":19}},{"id":5989,"outV":50,"properties":{"weight":12}},{"id":4327,"outV":110,"properties":{"weight":2}},{"id":2538,"outV":57,"properties":{"weight":4}},{"id":3050,"outV":153,"properties":{"weight":13}},{
"id":4970,"outV":236,"properties":{"weight":1}},{"id":2283,"outV":25,"properties":{"weight":9}},{"id":236,"outV":145,"properties":{"weight":1}},{"id":6126,"outV":72,"properties":{"weight":2}},{"id":5232,"outV":214,"properties":{"weight":2}},{"id":4594,"outV":85,"properties":{"weight":1}},{"id":4084,"outV":109,"properties":{"weight":1}},{"id":1652,"outV":213,"properties":{"weight":3}},{"id":3701,"outV":3,"properties":{"weight":4}},{"id":5621,"outV":22,"properties":{"weight":1}},{"id":629,"outV":23,"properties":{"weight":10}},{"id":7029,"outV":89,"properties":{"weight":1}},{"id":5238,"outV":32,"properties":{"weight":3}},{"id":2684,"outV":13,"properties":{"weight":9}},{"id":3325,"outV":268,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5120,"inV":40,"properties":{"weight":5}},{"id":5121,"inV":33,"properties":{"weight":3}},{"id":5122,"inV":79,"properties":{"weight":1}},{"id":5123,"inV":292,"properties":{"weight":1}},{"id":5071,"inV":50,"properties":{"weight":9}},{"id":5072,"in
V":12,"properties":{"weight":26}},{"id":5073,"inV":18,"properties":{"weight":4}},{"id":5074,"inV":24,"properties":{"weight":9}},{"id":5075,"inV":23,"properties":{"weight":63}},{"id":5076,"inV":13,"properties":{"weight":12}},{"id":5077,"inV":10,"properties":{"weight":4}},{"id":5078,"inV":11,"properties":{"weight":3}},{"id":5079,"inV":26,"properties":{"weight":18}},{"id":5080,"inV":22,"properties":{"weight":1}},{"id":5081,"inV":16,"properties":{"weight":2}},{"id":5082,"inV":49,"properties":{"weight":1}},{"id":5083,"inV":25,"properties":{"weight":2}},{"id":5084,"inV":51,"properties":{"weight":1}},{"id":5085,"inV":15,"properties":{"weight":1}},{"id":5086,"inV":112,"properties":{"weight":4}},{"id":5087,"inV":121,"properties":{"weight":1}},{"id":5088,"inV":32,"properties":{"weight":7}},{"id":5089,"inV":68,"properties":{"weight":2}},{"id":5090,"inV":120,"properties":{"weight":77}},{"id":5091,"inV":103,"properties":{"weight":1}},{"id":5092,"inV":42,"properties":{"weight":3}},{"id":5093,"inV
":85,"properties":{"weight":4}},{"id":5094,"inV":76,"properties":{"weight":5}},{"id":5095,"inV":181,"properties":{"weight":2}},{"id":5096,"inV":14,"properties":{"weight":2}},{"id":5097,"inV":122,"properties":{"weight":1}},{"id":5098,"inV":153,"properties":{"weight":3}},{"id":5099,"inV":96,"properties":{"weight":1}},{"id":5100,"inV":82,"properties":{"weight":3}},{"id":5101,"inV":110,"properties":{"weight":1}},{"id":5102,"inV":19,"properties":{"weight":6}},{"id":5103,"inV":129,"properties":{"weight":1}},{"id":5104,"inV":84,"properties":{"weight":1}},{"id":5105,"inV":88,"properties":{"weight":9}},{"id":5106,"inV":97,"properties":{"weight":1}},{"id":5107,"inV":114,"properties":{"weight":2}},{"id":5108,"inV":30,"properties":{"weight":8}},{"id":5109,"inV":31,"properties":{"weight":8}},{"id":5110,"inV":69,"properties":{"weight":4}},{"id":5111,"inV":127,"properties":{"weight":2}},{"id":5112,"inV":60,"properties":{"weight":1}},{"id":5113,"inV":39,"properties":{"weight":2}},{"id":5114,"inV":2
1,"properties":{"weight":1}},{"id":5115,"inV":117,"properties":{"weight":1}},{"id":5116,"inV":78,"properties":{"weight":1}},{"id":5117,"inV":38,"properties":{"weight":1}},{"id":5118,"inV":169,"properties":{"weight":2}},{"id":5119,"inV":118,"properties":{"weight":1}}],"sungBy":[{"id":7064,"inV":340}],"writtenBy":[{"id":7063,"inV":339}]},"properties":{"name":[{"id":9,"value":"BERTHA"}],"songType":[{"id":11,"value":"original"}],"performances":[{"id":10,"value":394}]}}
-{"id":5,"label":"song","inE":{"followedBy":[{"id":962,"outV":67,"properties":{"weight":5}},{"id":194,"outV":70,"properties":{"weight":8}},{"id":3,"outV":1,"properties":{"weight":1}},{"id":5446,"outV":231,"properties":{"weight":5}},{"id":6344,"outV":21,"properties":{"weight":6}},{"id":6666,"outV":12,"properties":{"weight":1}},{"id":1738,"outV":82,"properties":{"weight":1}},{"id":1867,"outV":94,"properties":{"weight":15}},{"id":4300,"outV":110,"properties":{"weight":1}},{"id":847,"outV":171,"properties":{"weight":1}},{"id":2832,"outV":101,"properties":{"weight":3}},{"id":6032,"outV":115,"properties":{"weight":1}},{"id":1170,"outV":26,"properties":{"weight":1}},{"id":5330,"outV":238,"properties":{"weight":1}},{"id":1491,"outV":164,"properties":{"weight":3}},{"id":1429,"outV":83,"properties":{"weight":3}},{"id":3033,"outV":14,"properties":{"weight":1}},{"id":6298,"outV":49,"properties":{"weight":1}},{"id":1373,"outV":130,"properties":{"weight":11}},{"id":4447,"outV":113,"properties":{"w
eight":1}},{"id":5151,"outV":125,"properties":{"weight":6}},{"id":6431,"outV":134,"properties":{"weight":2}},{"id":5343,"outV":165,"properties":{"weight":2}},{"id":1953,"outV":148,"properties":{"weight":10}},{"id":2274,"outV":25,"properties":{"weight":8}},{"id":1634,"outV":210,"properties":{"weight":1}},{"id":100,"outV":46,"properties":{"weight":1}},{"id":933,"outV":91,"properties":{"weight":1}},{"id":2021,"outV":149,"properties":{"weight":1}},{"id":6694,"outV":141,"properties":{"weight":2}},{"id":4009,"outV":225,"properties":{"weight":1}},{"id":682,"outV":219,"properties":{"weight":1}},{"id":3694,"outV":3,"properties":{"weight":57}},{"id":4718,"outV":186,"properties":{"weight":6}},{"id":3055,"outV":153,"properties":{"weight":9}},{"id":2736,"outV":13,"properties":{"weight":3}},{"id":2480,"outV":68,"properties":{"weight":1}},{"id":5426,"outV":102,"properties":{"weight":1}},{"id":6899,"outV":147,"properties":{"weight":1}},{"id":5879,"outV":96,"properties":{"weight":22}},{"id":6201,"ou
tV":319,"properties":{"weight":2}},{"id":5370,"outV":132,"properties":{"weight":2}},{"id":2236,"outV":29,"properties":{"weight":5}},{"id":4604,"outV":85,"properties":{"weight":2}},{"id":700,"outV":206,"properties":{"weight":1}},{"id":5759,"outV":129,"properties":{"weight":6}}]},"outE":{"followedBy":[{"id":273,"inV":3,"properties":{"weight":40}},{"id":274,"inV":26,"properties":{"weight":3}},{"id":275,"inV":114,"properties":{"weight":40}},{"id":276,"inV":1,"properties":{"weight":2}},{"id":277,"inV":74,"properties":{"weight":3}},{"id":278,"inV":122,"properties":{"weight":3}},{"id":279,"inV":133,"properties":{"weight":2}},{"id":280,"inV":83,"properties":{"weight":1}},{"id":281,"inV":153,"properties":{"weight":5}},{"id":282,"inV":159,"properties":{"weight":1}},{"id":283,"inV":13,"properties":{"weight":3}},{"id":284,"inV":25,"properties":{"weight":19}},{"id":285,"inV":96,"properties":{"weight":10}},{"id":286,"inV":160,"properties":{"weight":2}},{"id":287,"inV":32,"properties":{"weight":1}
},{"id":288,"inV":120,"properties":{"weight":16}},{"id":289,"inV":50,"properties":{"weight":1}},{"id":290,"inV":116,"properties":{"weight":1}},{"id":291,"inV":127,"properties":{"weight":6}},{"id":292,"inV":65,"properties":{"weight":1}},{"id":293,"inV":130,"properties":{"weight":3}},{"id":294,"inV":125,"properties":{"weight":5}},{"id":295,"inV":70,"properties":{"weight":13}},{"id":296,"inV":134,"properties":{"weight":1}},{"id":297,"inV":161,"properties":{"weight":1}},{"id":298,"inV":162,"properties":{"weight":1}},{"id":299,"inV":124,"properties":{"weight":3}},{"id":300,"inV":38,"properties":{"weight":1}},{"id":301,"inV":29,"properties":{"weight":11}},{"id":302,"inV":163,"properties":{"weight":1}},{"id":303,"inV":94,"properties":{"weight":5}},{"id":304,"inV":85,"properties":{"weight":1}},{"id":305,"inV":164,"properties":{"weight":6}},{"id":306,"inV":64,"properties":{"weight":1}},{"id":307,"inV":150,"properties":{"weight":1}},{"id":308,"inV":165,"properties":{"weight":7}},{"id":309,"in
V":92,"properties":{"weight":1}},{"id":310,"inV":140,"properties":{"weight":1}},{"id":311,"inV":166,"properties":{"weight":1}}],"sungBy":[{"id":7582,"inV":340}],"writtenBy":[{"id":7581,"inV":446}]},"properties":{"name":[{"id":12,"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":14,"value":"cover"}],"performances":[{"id":13,"value":293}]}}
+{"id":3,"label":"song","inE":{"followedBy":[{"id":1,"outV":1,"properties":{"weight":2}},{"id":2051,"outV":92,"properties":{"weight":4}},{"id":1412,"outV":83,"properties":{"weight":6}},{"id":6669,"outV":12,"properties":{"weight":1}},{"id":526,"outV":120,"properties":{"weight":2}},{"id":910,"outV":91,"properties":{"weight":3}},{"id":1166,"outV":26,"properties":{"weight":4}},{"id":6286,"outV":49,"properties":{"weight":1}},{"id":273,"outV":5,"properties":{"weight":40}},{"id":2194,"outV":235,"properties":{"weight":1}},{"id":1684,"outV":124,"properties":{"weight":1}},{"id":1941,"outV":148,"properties":{"weight":4}},{"id":3221,"outV":63,"properties":{"weight":1}},{"id":2712,"outV":13,"properties":{"weight":3}},{"id":6425,"outV":134,"properties":{"weight":2}},{"id":5787,"outV":76,"properties":{"weight":2}},{"id":5148,"outV":125,"properties":{"weight":4}},{"id":6692,"outV":141,"properties":{"weight":2}},{"id":6310,"outV":123,"properties":{"weight":1}},{"id":6448,"outV":187,"properties":{"wei
ght":3}},{"id":2225,"outV":226,"properties":{"weight":1}},{"id":5042,"outV":209,"properties":{"weight":1}},{"id":4789,"outV":114,"properties":{"weight":2}},{"id":1464,"outV":81,"properties":{"weight":1}},{"id":2232,"outV":215,"properties":{"weight":1}},{"id":4665,"outV":154,"properties":{"weight":1}},{"id":2235,"outV":29,"properties":{"weight":163}},{"id":6208,"outV":319,"properties":{"weight":4}},{"id":706,"outV":206,"properties":{"weight":2}},{"id":835,"outV":171,"properties":{"weight":1}},{"id":5188,"outV":99,"properties":{"weight":1}},{"id":1862,"outV":94,"properties":{"weight":10}},{"id":1735,"outV":82,"properties":{"weight":1}},{"id":6343,"outV":21,"properties":{"weight":1}},{"id":4937,"outV":277,"properties":{"weight":1}},{"id":3276,"outV":160,"properties":{"weight":1}},{"id":3149,"outV":104,"properties":{"weight":1}},{"id":1358,"outV":130,"properties":{"weight":18}},{"id":4304,"outV":110,"properties":{"weight":1}},{"id":1105,"outV":59,"properties":{"weight":1}},{"id":722,"ou
tV":80,"properties":{"weight":1}},{"id":4182,"outV":54,"properties":{"weight":1}},{"id":1499,"outV":164,"properties":{"weight":2}},{"id":2397,"outV":179,"properties":{"weight":1}},{"id":351,"outV":178,"properties":{"weight":1}},{"id":6623,"outV":127,"properties":{"weight":3}},{"id":2018,"outV":149,"properties":{"weight":1}},{"id":7011,"outV":89,"properties":{"weight":2}},{"id":5348,"outV":165,"properties":{"weight":1}},{"id":2278,"outV":25,"properties":{"weight":7}},{"id":1255,"outV":27,"properties":{"weight":2}},{"id":3048,"outV":153,"properties":{"weight":13}},{"id":5867,"outV":96,"properties":{"weight":116}},{"id":364,"outV":74,"properties":{"weight":2}},{"id":492,"outV":98,"properties":{"weight":1}},{"id":3948,"outV":138,"properties":{"weight":4}},{"id":4335,"outV":62,"properties":{"weight":1}},{"id":3312,"outV":252,"properties":{"weight":1}},{"id":5745,"outV":129,"properties":{"weight":1}},{"id":4596,"outV":85,"properties":{"weight":3}},{"id":5367,"outV":132,"properties":{"weig
ht":1}},{"id":633,"outV":23,"properties":{"weight":1}},{"id":891,"outV":140,"properties":{"weight":2}},{"id":5375,"outV":69,"properties":{"weight":1}},{"id":6143,"outV":289,"properties":{"weight":3}}]},"outE":{"followedBy":[{"id":3712,"inV":27,"properties":{"weight":1}},{"id":3713,"inV":110,"properties":{"weight":4}},{"id":3714,"inV":215,"properties":{"weight":4}},{"id":3715,"inV":127,"properties":{"weight":10}},{"id":3716,"inV":83,"properties":{"weight":3}},{"id":3717,"inV":103,"properties":{"weight":2}},{"id":3718,"inV":68,"properties":{"weight":1}},{"id":3719,"inV":134,"properties":{"weight":2}},{"id":3720,"inV":25,"properties":{"weight":10}},{"id":3721,"inV":125,"properties":{"weight":54}},{"id":3722,"inV":130,"properties":{"weight":26}},{"id":3723,"inV":141,"properties":{"weight":2}},{"id":3724,"inV":145,"properties":{"weight":1}},{"id":3725,"inV":319,"properties":{"weight":3}},{"id":3726,"inV":12,"properties":{"weight":1}},{"id":3727,"inV":160,"properties":{"weight":37}},{"id"
:3728,"inV":70,"properties":{"weight":2}},{"id":3729,"inV":123,"properties":{"weight":1}},{"id":3730,"inV":129,"properties":{"weight":1}},{"id":3731,"inV":30,"properties":{"weight":2}},{"id":3732,"inV":148,"properties":{"weight":1}},{"id":3733,"inV":211,"properties":{"weight":3}},{"id":3734,"inV":87,"properties":{"weight":13}},{"id":3735,"inV":164,"properties":{"weight":4}},{"id":3736,"inV":64,"properties":{"weight":2}},{"id":3737,"inV":320,"properties":{"weight":1}},{"id":3738,"inV":61,"properties":{"weight":3}},{"id":3739,"inV":210,"properties":{"weight":3}},{"id":3740,"inV":50,"properties":{"weight":7}},{"id":3741,"inV":128,"properties":{"weight":3}},{"id":3742,"inV":315,"properties":{"weight":1}},{"id":3743,"inV":261,"properties":{"weight":1}},{"id":3744,"inV":213,"properties":{"weight":13}},{"id":3745,"inV":72,"properties":{"weight":1}},{"id":3746,"inV":38,"properties":{"weight":4}},{"id":3747,"inV":204,"properties":{"weight":14}},{"id":3748,"inV":62,"properties":{"weight":2}},
{"id":3749,"inV":150,"properties":{"weight":8}},{"id":3750,"inV":309,"properties":{"weight":1}},{"id":3751,"inV":131,"properties":{"weight":1}},{"id":3752,"inV":151,"properties":{"weight":1}},{"id":3753,"inV":321,"properties":{"weight":1}},{"id":3754,"inV":90,"properties":{"weight":2}},{"id":3755,"inV":82,"properties":{"weight":1}},{"id":3756,"inV":120,"properties":{"weight":1}},{"id":3757,"inV":46,"properties":{"weight":5}},{"id":3758,"inV":157,"properties":{"weight":5}},{"id":3759,"inV":59,"properties":{"weight":1}},{"id":3760,"inV":81,"properties":{"weight":1}},{"id":3761,"inV":86,"properties":{"weight":5}},{"id":3762,"inV":140,"properties":{"weight":1}},{"id":3763,"inV":201,"properties":{"weight":1}},{"id":3764,"inV":214,"properties":{"weight":1}},{"id":3765,"inV":185,"properties":{"weight":2}},{"id":3766,"inV":216,"properties":{"weight":1}},{"id":3767,"inV":217,"properties":{"weight":2}},{"id":3768,"inV":236,"properties":{"weight":5}},{"id":3769,"inV":193,"properties":{"weight"
:1}},{"id":3770,"inV":79,"properties":{"weight":2}},{"id":3771,"inV":84,"properties":{"weight":1}},{"id":3772,"inV":23,"properties":{"weight":2}},{"id":3773,"inV":31,"properties":{"weight":2}},{"id":3774,"inV":240,"properties":{"weight":1}},{"id":3775,"inV":292,"properties":{"weight":1}},{"id":3776,"inV":9,"properties":{"weight":1}},{"id":3777,"inV":259,"properties":{"weight":1}},{"id":3694,"inV":5,"properties":{"weight":57}},{"id":3695,"inV":114,"properties":{"weight":30}},{"id":3696,"inV":74,"properties":{"weight":2}},{"id":3697,"inV":78,"properties":{"weight":3}},{"id":3698,"inV":10,"properties":{"weight":1}},{"id":3699,"inV":26,"properties":{"weight":4}},{"id":3700,"inV":153,"properties":{"weight":7}},{"id":3701,"inV":4,"properties":{"weight":4}},{"id":3702,"inV":317,"properties":{"weight":1}},{"id":3703,"inV":13,"properties":{"weight":5}},{"id":3704,"inV":1,"properties":{"weight":2}},{"id":3705,"inV":21,"properties":{"weight":2}},{"id":3706,"inV":57,"properties":{"weight":2}},{
"id":3707,"inV":122,"properties":{"weight":2}},{"id":3708,"inV":318,"properties":{"weight":1}},{"id":3709,"inV":94,"properties":{"weight":26}},{"id":3710,"inV":96,"properties":{"weight":7}},{"id":3711,"inV":124,"properties":{"weight":15}}],"sungBy":[{"id":7808,"inV":351}],"writtenBy":[{"id":7807,"inV":671}]},"properties":{"name":[{"id":6,"value":"NOT FADE AWAY"}],"songType":[{"id":8,"value":"cover"}],"performances":[{"id":7,"value":531}]}}
+{"id":4,"label":"song","inE":{"followedBy":[{"id":128,"outV":97,"properties":{"weight":1}},{"id":1664,"outV":267,"properties":{"weight":1}},{"id":2,"outV":1,"properties":{"weight":1}},{"id":899,"outV":140,"properties":{"weight":1}},{"id":1667,"outV":124,"properties":{"weight":15}},{"id":4099,"outV":48,"properties":{"weight":1}},{"id":1156,"outV":26,"properties":{"weight":16}},{"id":773,"outV":122,"properties":{"weight":9}},{"id":6534,"outV":242,"properties":{"weight":1}},{"id":1032,"outV":73,"properties":{"weight":1}},{"id":6664,"outV":12,"properties":{"weight":3}},{"id":5129,"outV":222,"properties":{"weight":1}},{"id":5387,"outV":69,"properties":{"weight":1}},{"id":5517,"outV":43,"properties":{"weight":2}},{"id":5006,"outV":30,"properties":{"weight":2}},{"id":6030,"outV":204,"properties":{"weight":2}},{"id":2063,"outV":92,"properties":{"weight":1}},{"id":915,"outV":91,"properties":{"weight":2}},{"id":6940,"outV":84,"properties":{"weight":5}},{"id":2464,"outV":68,"properties":{"weig
ht":1}},{"id":5795,"outV":76,"properties":{"weight":2}},{"id":3620,"outV":24,"properties":{"weight":2}},{"id":4772,"outV":114,"properties":{"weight":25}},{"id":2982,"outV":14,"properties":{"weight":3}},{"id":3367,"outV":184,"properties":{"weight":6}},{"id":2345,"outV":87,"properties":{"weight":2}},{"id":2861,"outV":101,"properties":{"weight":6}},{"id":1840,"outV":275,"properties":{"weight":1}},{"id":5425,"outV":102,"properties":{"weight":1}},{"id":180,"outV":70,"properties":{"weight":46}},{"id":2613,"outV":158,"properties":{"weight":1}},{"id":5434,"outV":217,"properties":{"weight":1}},{"id":5562,"outV":162,"properties":{"weight":2}},{"id":1469,"outV":81,"properties":{"weight":1}},{"id":446,"outV":38,"properties":{"weight":7}},{"id":2494,"outV":90,"properties":{"weight":3}},{"id":3266,"outV":160,"properties":{"weight":10}},{"id":326,"outV":34,"properties":{"weight":1}},{"id":583,"outV":120,"properties":{"weight":2}},{"id":6855,"outV":64,"properties":{"weight":12}},{"id":73,"outV":46,
"properties":{"weight":4}},{"id":4425,"outV":212,"properties":{"weight":1}},{"id":1613,"outV":210,"properties":{"weight":2}},{"id":4941,"outV":86,"properties":{"weight":2}},{"id":6350,"outV":21,"properties":{"weight":1}},{"id":3535,"outV":201,"properties":{"weight":1}},{"id":980,"outV":11,"properties":{"weight":3}},{"id":1494,"outV":164,"properties":{"weight":3}},{"id":5206,"outV":99,"properties":{"weight":1}},{"id":5847,"outV":61,"properties":{"weight":2}},{"id":6490,"outV":187,"properties":{"weight":1}},{"id":2781,"outV":15,"properties":{"weight":4}},{"id":5600,"outV":42,"properties":{"weight":1}},{"id":353,"outV":74,"properties":{"weight":6}},{"id":5474,"outV":79,"properties":{"weight":1}},{"id":1891,"outV":103,"properties":{"weight":19}},{"id":3811,"outV":88,"properties":{"weight":2}},{"id":5989,"outV":50,"properties":{"weight":12}},{"id":4327,"outV":110,"properties":{"weight":2}},{"id":2538,"outV":57,"properties":{"weight":4}},{"id":3050,"outV":153,"properties":{"weight":13}},{
"id":4970,"outV":236,"properties":{"weight":1}},{"id":2283,"outV":25,"properties":{"weight":9}},{"id":236,"outV":145,"properties":{"weight":1}},{"id":6126,"outV":72,"properties":{"weight":2}},{"id":5232,"outV":214,"properties":{"weight":2}},{"id":4594,"outV":85,"properties":{"weight":1}},{"id":1652,"outV":213,"properties":{"weight":3}},{"id":4084,"outV":109,"properties":{"weight":1}},{"id":629,"outV":23,"properties":{"weight":10}},{"id":3701,"outV":3,"properties":{"weight":4}},{"id":5621,"outV":22,"properties":{"weight":1}},{"id":7029,"outV":89,"properties":{"weight":1}},{"id":5238,"outV":32,"properties":{"weight":3}},{"id":2684,"outV":13,"properties":{"weight":9}},{"id":3325,"outV":268,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5120,"inV":40,"properties":{"weight":5}},{"id":5121,"inV":33,"properties":{"weight":3}},{"id":5122,"inV":79,"properties":{"weight":1}},{"id":5123,"inV":292,"properties":{"weight":1}},{"id":5071,"inV":50,"properties":{"weight":9}},{"id":5072,"in
V":12,"properties":{"weight":26}},{"id":5073,"inV":18,"properties":{"weight":4}},{"id":5074,"inV":24,"properties":{"weight":9}},{"id":5075,"inV":23,"properties":{"weight":63}},{"id":5076,"inV":13,"properties":{"weight":12}},{"id":5077,"inV":10,"properties":{"weight":4}},{"id":5078,"inV":11,"properties":{"weight":3}},{"id":5079,"inV":26,"properties":{"weight":18}},{"id":5080,"inV":22,"properties":{"weight":1}},{"id":5081,"inV":16,"properties":{"weight":2}},{"id":5082,"inV":49,"properties":{"weight":1}},{"id":5083,"inV":25,"properties":{"weight":2}},{"id":5084,"inV":51,"properties":{"weight":1}},{"id":5085,"inV":15,"properties":{"weight":1}},{"id":5086,"inV":112,"properties":{"weight":4}},{"id":5087,"inV":121,"properties":{"weight":1}},{"id":5088,"inV":32,"properties":{"weight":7}},{"id":5089,"inV":68,"properties":{"weight":2}},{"id":5090,"inV":120,"properties":{"weight":77}},{"id":5091,"inV":103,"properties":{"weight":1}},{"id":5092,"inV":42,"properties":{"weight":3}},{"id":5093,"inV
":85,"properties":{"weight":4}},{"id":5094,"inV":76,"properties":{"weight":5}},{"id":5095,"inV":181,"properties":{"weight":2}},{"id":5096,"inV":14,"properties":{"weight":2}},{"id":5097,"inV":122,"properties":{"weight":1}},{"id":5098,"inV":153,"properties":{"weight":3}},{"id":5099,"inV":96,"properties":{"weight":1}},{"id":5100,"inV":82,"properties":{"weight":3}},{"id":5101,"inV":110,"properties":{"weight":1}},{"id":5102,"inV":19,"properties":{"weight":6}},{"id":5103,"inV":129,"properties":{"weight":1}},{"id":5104,"inV":84,"properties":{"weight":1}},{"id":5105,"inV":88,"properties":{"weight":9}},{"id":5106,"inV":97,"properties":{"weight":1}},{"id":5107,"inV":114,"properties":{"weight":2}},{"id":5108,"inV":30,"properties":{"weight":8}},{"id":5109,"inV":31,"properties":{"weight":8}},{"id":5110,"inV":69,"properties":{"weight":4}},{"id":5111,"inV":127,"properties":{"weight":2}},{"id":5112,"inV":60,"properties":{"weight":1}},{"id":5113,"inV":39,"properties":{"weight":2}},{"id":5114,"inV":2
1,"properties":{"weight":1}},{"id":5115,"inV":117,"properties":{"weight":1}},{"id":5116,"inV":78,"properties":{"weight":1}},{"id":5117,"inV":38,"properties":{"weight":1}},{"id":5118,"inV":169,"properties":{"weight":2}},{"id":5119,"inV":118,"properties":{"weight":1}}],"sungBy":[{"id":7064,"inV":340}],"writtenBy":[{"id":7063,"inV":339}]},"properties":{"name":[{"id":9,"value":"BERTHA"}],"songType":[{"id":11,"value":"original"}],"performances":[{"id":10,"value":394}]}}
+{"id":5,"label":"song","inE":{"followedBy":[{"id":194,"outV":70,"properties":{"weight":8}},{"id":962,"outV":67,"properties":{"weight":5}},{"id":3,"outV":1,"properties":{"weight":1}},{"id":5446,"outV":231,"properties":{"weight":5}},{"id":6344,"outV":21,"properties":{"weight":6}},{"id":1738,"outV":82,"properties":{"weight":1}},{"id":6666,"outV":12,"properties":{"weight":1}},{"id":1867,"outV":94,"properties":{"weight":15}},{"id":4300,"outV":110,"properties":{"weight":1}},{"id":847,"outV":171,"properties":{"weight":1}},{"id":2832,"outV":101,"properties":{"weight":3}},{"id":6032,"outV":115,"properties":{"weight":1}},{"id":1170,"outV":26,"properties":{"weight":1}},{"id":5330,"outV":238,"properties":{"weight":1}},{"id":1491,"outV":164,"properties":{"weight":3}},{"id":1429,"outV":83,"properties":{"weight":3}},{"id":3033,"outV":14,"properties":{"weight":1}},{"id":6298,"outV":49,"properties":{"weight":1}},{"id":1373,"outV":130,"properties":{"weight":11}},{"id":4447,"outV":113,"properties":{"w
eight":1}},{"id":5151,"outV":125,"properties":{"weight":6}},{"id":5343,"outV":165,"properties":{"weight":2}},{"id":6431,"outV":134,"properties":{"weight":2}},{"id":1953,"outV":148,"properties":{"weight":10}},{"id":1634,"outV":210,"properties":{"weight":1}},{"id":2274,"outV":25,"properties":{"weight":8}},{"id":100,"outV":46,"properties":{"weight":1}},{"id":933,"outV":91,"properties":{"weight":1}},{"id":2021,"outV":149,"properties":{"weight":1}},{"id":6694,"outV":141,"properties":{"weight":2}},{"id":4009,"outV":225,"properties":{"weight":1}},{"id":682,"outV":219,"properties":{"weight":1}},{"id":3694,"outV":3,"properties":{"weight":57}},{"id":4718,"outV":186,"properties":{"weight":6}},{"id":3055,"outV":153,"properties":{"weight":9}},{"id":2480,"outV":68,"properties":{"weight":1}},{"id":2736,"outV":13,"properties":{"weight":3}},{"id":5426,"outV":102,"properties":{"weight":1}},{"id":6899,"outV":147,"properties":{"weight":1}},{"id":5879,"outV":96,"properties":{"weight":22}},{"id":6201,"ou
tV":319,"properties":{"weight":2}},{"id":5370,"outV":132,"properties":{"weight":2}},{"id":700,"outV":206,"properties":{"weight":1}},{"id":2236,"outV":29,"properties":{"weight":5}},{"id":4604,"outV":85,"properties":{"weight":2}},{"id":5759,"outV":129,"properties":{"weight":6}}]},"outE":{"followedBy":[{"id":273,"inV":3,"properties":{"weight":40}},{"id":274,"inV":26,"properties":{"weight":3}},{"id":275,"inV":114,"properties":{"weight":40}},{"id":276,"inV":1,"properties":{"weight":2}},{"id":277,"inV":74,"properties":{"weight":3}},{"id":278,"inV":122,"properties":{"weight":3}},{"id":279,"inV":133,"properties":{"weight":2}},{"id":280,"inV":83,"properties":{"weight":1}},{"id":281,"inV":153,"properties":{"weight":5}},{"id":282,"inV":159,"properties":{"weight":1}},{"id":283,"inV":13,"properties":{"weight":3}},{"id":284,"inV":25,"properties":{"weight":19}},{"id":285,"inV":96,"properties":{"weight":10}},{"id":286,"inV":160,"properties":{"weight":2}},{"id":287,"inV":32,"properties":{"weight":1}
},{"id":288,"inV":120,"properties":{"weight":16}},{"id":289,"inV":50,"properties":{"weight":1}},{"id":290,"inV":116,"properties":{"weight":1}},{"id":291,"inV":127,"properties":{"weight":6}},{"id":292,"inV":65,"properties":{"weight":1}},{"id":293,"inV":130,"properties":{"weight":3}},{"id":294,"inV":125,"properties":{"weight":5}},{"id":295,"inV":70,"properties":{"weight":13}},{"id":296,"inV":134,"properties":{"weight":1}},{"id":297,"inV":161,"properties":{"weight":1}},{"id":298,"inV":162,"properties":{"weight":1}},{"id":299,"inV":124,"properties":{"weight":3}},{"id":300,"inV":38,"properties":{"weight":1}},{"id":301,"inV":29,"properties":{"weight":11}},{"id":302,"inV":163,"properties":{"weight":1}},{"id":303,"inV":94,"properties":{"weight":5}},{"id":304,"inV":85,"properties":{"weight":1}},{"id":305,"inV":164,"properties":{"weight":6}},{"id":306,"inV":64,"properties":{"weight":1}},{"id":307,"inV":150,"properties":{"weight":1}},{"id":308,"inV":165,"properties":{"weight":7}},{"id":309,"in
V":92,"properties":{"weight":1}},{"id":310,"inV":140,"properties":{"weight":1}},{"id":311,"inV":166,"properties":{"weight":1}}],"sungBy":[{"id":7582,"inV":340}],"writtenBy":[{"id":7581,"inV":446}]},"properties":{"name":[{"id":12,"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":14,"value":"cover"}],"performances":[{"id":13,"value":293}]}}
{"id":6,"label":"song","inE":{"followedBy":[{"id":4,"outV":1,"properties":{"weight":1}},{"id":2023,"outV":282,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2406,"inV":293,"properties":{"weight":1}},{"id":2407,"inV":96,"properties":{"weight":1}}],"sungBy":[{"id":7782,"inV":351}],"writtenBy":[{"id":7781,"inV":527}]},"properties":{"name":[{"id":15,"value":"MONA"}],"songType":[{"id":17,"value":"cover"}],"performances":[{"id":16,"value":1}]}}
{"id":7,"label":"song","inE":{"followedBy":[{"id":2607,"outV":295,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5,"inV":8,"properties":{"weight":1}}]},"properties":{"name":[{"id":18,"value":"WHERE HAVE THE HEROES GONE"}],"songType":[{"id":20,"value":""}],"performances":[{"id":19,"value":0}]}}
{"id":8,"label":"song","inE":{"followedBy":[{"id":4705,"outV":111,"properties":{"weight":1}},{"id":5,"outV":7,"properties":{"weight":1}},{"id":5901,"outV":96,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2976,"inV":302,"properties":{"weight":1}},{"id":2977,"inV":96,"properties":{"weight":1}},{"id":2978,"inV":72,"properties":{"weight":1}}],"sungBy":[{"id":7814,"inV":351}],"writtenBy":[{"id":7813,"inV":674}]},"properties":{"name":[{"id":21,"value":"OH BOY"}],"songType":[{"id":23,"value":"cover"}],"performances":[{"id":22,"value":2}]}}
-{"id":9,"label":"song","inE":{"followedBy":[{"id":3776,"outV":3,"properties":{"weight":1}},{"id":65,"outV":46,"properties":{"weight":2}},{"id":1923,"outV":103,"properties":{"weight":3}},{"id":5956,"outV":50,"properties":{"weight":2}},{"id":3077,"outV":153,"properties":{"weight":2}},{"id":5832,"outV":76,"properties":{"weight":1}},{"id":1161,"outV":26,"properties":{"weight":8}},{"id":6667,"outV":12,"properties":{"weight":2}},{"id":2699,"outV":13,"properties":{"weight":3}},{"id":6539,"outV":55,"properties":{"weight":1}},{"id":2578,"outV":57,"properties":{"weight":2}},{"id":787,"outV":122,"properties":{"weight":3}},{"id":3542,"outV":201,"properties":{"weight":1}},{"id":2775,"outV":15,"properties":{"weight":5}},{"id":2840,"outV":101,"properties":{"weight":2}},{"id":4953,"outV":86,"properties":{"weight":2}},{"id":1572,"outV":18,"properties":{"weight":3}},{"id":229,"outV":70,"properties":{"weight":1}},{"id":4264,"outV":10,"properties":{"weight":1}},{"id":4969,"outV":236,"properties":{"weig
ht":3}},{"id":3498,"outV":58,"properties":{"weight":2}},{"id":5226,"outV":216,"properties":{"weight":1}},{"id":5548,"outV":166,"properties":{"weight":1}},{"id":2990,"outV":14,"properties":{"weight":4}},{"id":3950,"outV":138,"properties":{"weight":1}},{"id":6776,"outV":39,"properties":{"weight":1}},{"id":2488,"outV":68,"properties":{"weight":1}},{"id":3641,"outV":24,"properties":{"weight":2}},{"id":1532,"outV":164,"properties":{"weight":2}},{"id":1853,"outV":94,"properties":{"weight":1}},{"id":638,"outV":23,"properties":{"weight":2}},{"id":6335,"outV":21,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6,"inV":10,"properties":{"weight":3}},{"id":7,"inV":11,"properties":{"weight":2}},{"id":8,"inV":12,"properties":{"weight":3}},{"id":9,"inV":13,"properties":{"weight":6}},{"id":10,"inV":14,"properties":{"weight":3}},{"id":11,"inV":15,"properties":{"weight":3}},{"id":12,"inV":16,"properties":{"weight":1}},{"id":13,"inV":17,"properties":{"weight":1}},{"id":14,"inV":18,"properties"
:{"weight":5}},{"id":15,"inV":19,"properties":{"weight":1}},{"id":16,"inV":20,"properties":{"weight":1}},{"id":17,"inV":21,"properties":{"weight":1}},{"id":18,"inV":22,"properties":{"weight":2}},{"id":19,"inV":23,"properties":{"weight":2}},{"id":20,"inV":24,"properties":{"weight":1}},{"id":21,"inV":25,"properties":{"weight":1}},{"id":22,"inV":26,"properties":{"weight":1}},{"id":23,"inV":27,"properties":{"weight":1}},{"id":24,"inV":28,"properties":{"weight":2}},{"id":25,"inV":29,"properties":{"weight":1}},{"id":26,"inV":30,"properties":{"weight":5}},{"id":27,"inV":31,"properties":{"weight":2}},{"id":28,"inV":32,"properties":{"weight":1}},{"id":29,"inV":33,"properties":{"weight":2}},{"id":30,"inV":34,"properties":{"weight":2}},{"id":31,"inV":35,"properties":{"weight":3}},{"id":32,"inV":36,"properties":{"weight":2}},{"id":33,"inV":37,"properties":{"weight":3}},{"id":34,"inV":38,"properties":{"weight":1}},{"id":35,"inV":39,"properties":{"weight":1}},{"id":36,"inV":40,"properties":{"weig
ht":1}},{"id":37,"inV":41,"properties":{"weight":1}},{"id":38,"inV":42,"properties":{"weight":1}},{"id":39,"inV":43,"properties":{"weight":1}}],"sungBy":[{"id":7190,"inV":340}],"writtenBy":[{"id":7189,"inV":339}]},"properties":{"name":[{"id":24,"value":"HERE COMES SUNSHINE"}],"songType":[{"id":26,"value":"original"}],"performances":[{"id":25,"value":65}]}}
-{"id":10,"label":"song","inE":{"followedBy":[{"id":3841,"outV":60,"properties":{"weight":1}},{"id":1027,"outV":73,"properties":{"weight":5}},{"id":6,"outV":9,"properties":{"weight":3}},{"id":4103,"outV":48,"properties":{"weight":5}},{"id":6279,"outV":49,"properties":{"weight":1}},{"id":3335,"outV":155,"properties":{"weight":1}},{"id":4233,"outV":52,"properties":{"weight":1}},{"id":4878,"outV":100,"properties":{"weight":19}},{"id":5264,"outV":32,"properties":{"weight":2}},{"id":2196,"outV":75,"properties":{"weight":4}},{"id":151,"outV":108,"properties":{"weight":3}},{"id":1571,"outV":18,"properties":{"weight":5}},{"id":3619,"outV":24,"properties":{"weight":2}},{"id":3237,"outV":63,"properties":{"weight":3}},{"id":4647,"outV":154,"properties":{"weight":1}},{"id":4521,"outV":105,"properties":{"weight":3}},{"id":1195,"outV":26,"properties":{"weight":1}},{"id":6956,"outV":84,"properties":{"weight":1}},{"id":6444,"outV":187,"properties":{"weight":9}},{"id":687,"outV":157,"properties":{"we
ight":1}},{"id":4784,"outV":114,"properties":{"weight":1}},{"id":6064,"outV":115,"properties":{"weight":1}},{"id":3890,"outV":51,"properties":{"weight":9}},{"id":1714,"outV":82,"properties":{"weight":3}},{"id":55,"outV":46,"properties":{"weight":1}},{"id":5175,"outV":71,"properties":{"weight":1}},{"id":1337,"outV":31,"properties":{"weight":1}},{"id":4155,"outV":54,"properties":{"weight":6}},{"id":1083,"outV":59,"properties":{"weight":10}},{"id":6077,"outV":72,"properties":{"weight":5}},{"id":5441,"outV":239,"properties":{"weight":1}},{"id":1987,"outV":152,"properties":{"weight":2}},{"id":2116,"outV":17,"properties":{"weight":7}},{"id":1860,"outV":94,"properties":{"weight":1}},{"id":3269,"outV":160,"properties":{"weight":2}},{"id":454,"outV":38,"properties":{"weight":1}},{"id":3142,"outV":104,"properties":{"weight":4}},{"id":2505,"outV":57,"properties":{"weight":12}},{"id":6859,"outV":64,"properties":{"weight":1}},{"id":6603,"outV":127,"properties":{"weight":4}},{"id":717,"outV":80,"
properties":{"weight":9}},{"id":1360,"outV":130,"properties":{"weight":2}},{"id":3026,"outV":14,"properties":{"weight":1}},{"id":5972,"outV":50,"properties":{"weight":1}},{"id":5077,"outV":4,"properties":{"weight":4}},{"id":2392,"outV":87,"properties":{"weight":1}},{"id":1250,"outV":27,"properties":{"weight":10}},{"id":4706,"outV":111,"properties":{"weight":3}},{"id":6755,"outV":53,"properties":{"weight":1}},{"id":2917,"outV":78,"properties":{"weight":10}},{"id":485,"outV":98,"properties":{"weight":4}},{"id":3559,"outV":56,"properties":{"weight":16}},{"id":3436,"outV":58,"properties":{"weight":10}},{"id":3820,"outV":88,"properties":{"weight":1}},{"id":4463,"outV":202,"properties":{"weight":4}},{"id":6256,"outV":117,"properties":{"weight":1}},{"id":880,"outV":189,"properties":{"weight":1}},{"id":3698,"outV":3,"properties":{"weight":1}},{"id":2291,"outV":25,"properties":{"weight":1}},{"id":2035,"outV":180,"properties":{"weight":1}},{"id":3317,"outV":252,"properties":{"weight":1}},{"id
":2806,"outV":15,"properties":{"weight":2}},{"id":2427,"outV":68,"properties":{"weight":2}},{"id":6782,"outV":39,"properties":{"weight":4}},{"id":4351,"outV":62,"properties":{"weight":2}}]},"outE":{"followedBy":[{"id":4235,"inV":56,"properties":{"weight":13}},{"id":4236,"inV":27,"properties":{"weight":7}},{"id":4237,"inV":58,"properties":{"weight":11}},{"id":4238,"inV":80,"properties":{"weight":6}},{"id":4239,"inV":59,"properties":{"weight":9}},{"id":4240,"inV":100,"properties":{"weight":21}},{"id":4241,"inV":104,"properties":{"weight":5}},{"id":4242,"inV":50,"properties":{"weight":2}},{"id":4243,"inV":48,"properties":{"weight":8}},{"id":4244,"inV":54,"properties":{"weight":13}},{"id":4245,"inV":19,"properties":{"weight":9}},{"id":4246,"inV":72,"properties":{"weight":4}},{"id":4247,"inV":14,"properties":{"weight":1}},{"id":4248,"inV":122,"properties":{"weight":2}},{"id":4249,"inV":235,"properties":{"weight":1}},{"id":4250,"inV":218,"properties":{"weight":1}},{"id":4251,"inV":252,"pr
operties":{"weight":1}},{"id":4252,"inV":89,"properties":{"weight":3}},{"id":4253,"inV":57,"properties":{"weight":12}},{"id":4254,"inV":49,"properties":{"weight":3}},{"id":4255,"inV":94,"properties":{"weight":3}},{"id":4256,"inV":153,"properties":{"weight":1}},{"id":4257,"inV":13,"properties":{"weight":1}},{"id":4258,"inV":160,"properties":{"weight":1}},{"id":4259,"inV":51,"properties":{"weight":10}},{"id":4260,"inV":18,"properties":{"weight":3}},{"id":4261,"inV":202,"properties":{"weight":4}},{"id":4262,"inV":17,"properties":{"weight":5}},{"id":4263,"inV":46,"properties":{"weight":1}},{"id":4264,"inV":9,"properties":{"weight":1}},{"id":4265,"inV":55,"properties":{"weight":1}},{"id":4266,"inV":125,"properties":{"weight":1}},{"id":4267,"inV":69,"properties":{"weight":2}},{"id":4268,"inV":98,"properties":{"weight":8}},{"id":4269,"inV":82,"properties":{"weight":4}},{"id":4270,"inV":154,"properties":{"weight":1}},{"id":4271,"inV":105,"properties":{"weight":7}},{"id":4272,"inV":112,"prop
erties":{"weight":2}},{"id":4273,"inV":109,"properties":{"weight":1}},{"id":4274,"inV":42,"properties":{"weight":2}},{"id":4275,"inV":121,"properties":{"weight":1}},{"id":4276,"inV":73,"properties":{"weight":5}},{"id":4277,"inV":106,"properties":{"weight":1}},{"id":4278,"inV":116,"properties":{"weight":1}},{"id":4279,"inV":68,"properties":{"weight":2}},{"id":4280,"inV":152,"properties":{"weight":1}},{"id":4281,"inV":23,"properties":{"weight":6}},{"id":4282,"inV":88,"properties":{"weight":1}},{"id":4283,"inV":39,"properties":{"weight":4}},{"id":4284,"inV":12,"properties":{"weight":1}},{"id":4285,"inV":111,"properties":{"weight":1}},{"id":4286,"inV":99,"properties":{"weight":1}},{"id":4287,"inV":87,"properties":{"weight":2}},{"id":4288,"inV":108,"properties":{"weight":2}},{"id":4289,"inV":53,"properties":{"weight":4}},{"id":4290,"inV":26,"properties":{"weight":5}},{"id":4291,"inV":117,"properties":{"weight":2}},{"id":4292,"inV":115,"properties":{"weight":2}},{"id":4293,"inV":63,"prope
rties":{"weight":3}},{"id":4294,"inV":103,"properties":{"weight":1}}],"sungBy":[{"id":7460,"inV":351}],"writtenBy":[{"id":7459,"inV":471}]},"properties":{"name":[{"id":27,"value":"BEAT IT ON DOWN THE LINE"}],"songType":[{"id":29,"value":"cover"}],"performances":[{"id":28,"value":325}]}}
-{"id":11,"label":"song","inE":{"followedBy":[{"id":1088,"outV":59,"properties":{"weight":14}},{"id":6273,"outV":49,"properties":{"weight":2}},{"id":1989,"outV":152,"properties":{"weight":2}},{"id":7,"outV":9,"properties":{"weight":2}},{"id":4552,"outV":105,"properties":{"weight":3}},{"id":521,"outV":205,"properties":{"weight":1}},{"id":714,"outV":80,"properties":{"weight":5}},{"id":3146,"outV":104,"properties":{"weight":3}},{"id":4876,"outV":100,"properties":{"weight":2}},{"id":2190,"outV":235,"properties":{"weight":1}},{"id":4496,"outV":202,"properties":{"weight":1}},{"id":2513,"outV":57,"properties":{"weight":4}},{"id":4053,"outV":173,"properties":{"weight":1}},{"id":5078,"outV":4,"properties":{"weight":3}},{"id":1309,"outV":27,"properties":{"weight":5}},{"id":5025,"outV":30,"properties":{"weight":1}},{"id":4769,"outV":114,"properties":{"weight":1}},{"id":3554,"outV":56,"properties":{"weight":7}},{"id":1064,"outV":73,"properties":{"weight":1}},{"id":2920,"outV":78,"properties":{"w
eight":2}},{"id":6056,"outV":115,"properties":{"weight":2}},{"id":41,"outV":46,"properties":{"weight":2}},{"id":3434,"outV":58,"properties":{"weight":5}},{"id":6442,"outV":187,"properties":{"weight":7}},{"id":1775,"outV":234,"properties":{"weight":4}},{"id":3888,"outV":51,"properties":{"weight":1}},{"id":626,"outV":23,"properties":{"weight":1}},{"id":6772,"outV":39,"properties":{"weight":1}},{"id":1396,"outV":190,"properties":{"weight":1}},{"id":4020,"outV":191,"properties":{"weight":1}},{"id":3637,"outV":24,"properties":{"weight":2}},{"id":6072,"outV":72,"properties":{"weight":5}},{"id":4157,"outV":54,"properties":{"weight":2}}]},"outE":{"followedBy":[{"id":972,"inV":57,"properties":{"weight":4}},{"id":973,"inV":59,"properties":{"weight":3}},{"id":974,"inV":53,"properties":{"weight":4}},{"id":975,"inV":54,"properties":{"weight":15}},{"id":976,"inV":56,"properties":{"weight":3}},{"id":977,"inV":48,"properties":{"weight":3}},{"id":978,"inV":72,"properties":{"weight":4}},{"id":979,"in
V":19,"properties":{"weight":9}},{"id":980,"inV":4,"properties":{"weight":3}},{"id":981,"inV":58,"properties":{"weight":6}},{"id":982,"inV":46,"properties":{"weight":1}},{"id":983,"inV":234,"properties":{"weight":7}},{"id":984,"inV":235,"properties":{"weight":2}},{"id":985,"inV":207,"properties":{"weight":4}},{"id":986,"inV":39,"properties":{"weight":3}},{"id":987,"inV":50,"properties":{"weight":1}},{"id":988,"inV":104,"properties":{"weight":2}},{"id":989,"inV":49,"properties":{"weight":1}},{"id":990,"inV":17,"properties":{"weight":3}},{"id":991,"inV":100,"properties":{"weight":1}},{"id":992,"inV":24,"properties":{"weight":1}},{"id":993,"inV":170,"properties":{"weight":2}},{"id":994,"inV":73,"properties":{"weight":1}},{"id":995,"inV":173,"properties":{"weight":1}},{"id":996,"inV":236,"properties":{"weight":1}},{"id":997,"inV":202,"properties":{"weight":3}},{"id":998,"inV":80,"properties":{"weight":2}},{"id":999,"inV":115,"properties":{"weight":4}},{"id":1000,"inV":105,"properties":{
"weight":1}}],"sungBy":[{"id":7072,"inV":351}],"writtenBy":[{"id":7071,"inV":350}]},"properties":{"name":[{"id":30,"value":"BLACK THROATED WIND"}],"songType":[{"id":32,"value":"original"}],"performances":[{"id":31,"value":158}]}}
-{"id":12,"label":"song","inE":{"followedBy":[{"id":3072,"outV":153,"properties":{"weight":4}},{"id":2433,"outV":68,"properties":{"weight":1}},{"id":1410,"outV":83,"properties":{"weight":1}},{"id":4227,"outV":52,"properties":{"weight":3}},{"id":3331,"outV":155,"properties":{"weight":2}},{"id":1028,"outV":73,"properties":{"weight":12}},{"id":4102,"outV":48,"properties":{"weight":33}},{"id":8,"outV":9,"properties":{"weight":3}},{"id":6281,"outV":49,"properties":{"weight":2}},{"id":652,"outV":23,"properties":{"weight":2}},{"id":5388,"outV":69,"properties":{"weight":1}},{"id":525,"outV":120,"properties":{"weight":1}},{"id":3726,"outV":3,"properties":{"weight":1}},{"id":3855,"outV":60,"properties":{"weight":1}},{"id":783,"outV":122,"properties":{"weight":1}},{"id":3986,"outV":106,"properties":{"weight":1}},{"id":1938,"outV":148,"properties":{"weight":1}},{"id":1172,"outV":26,"properties":{"weight":4}},{"id":916,"outV":91,"properties":{"weight":1}},{"id":6935,"outV":84,"properties":{"weigh
t":5}},{"id":5017,"outV":30,"properties":{"weight":1}},{"id":3225,"outV":63,"properties":{"weight":4}},{"id":2203,"outV":75,"properties":{"weight":3}},{"id":155,"outV":108,"properties":{"weight":6}},{"id":4893,"outV":100,"properties":{"weight":7}},{"id":4640,"outV":154,"properties":{"weight":10}},{"id":5665,"outV":169,"properties":{"weight":1}},{"id":5286,"outV":32,"properties":{"weight":4}},{"id":2598,"outV":112,"properties":{"weight":7}},{"id":1702,"outV":124,"properties":{"weight":1}},{"id":3879,"outV":51,"properties":{"weight":12}},{"id":4007,"outV":225,"properties":{"weight":1}},{"id":424,"outV":38,"properties":{"weight":5}},{"id":5034,"outV":47,"properties":{"weight":1}},{"id":4522,"outV":105,"properties":{"weight":12}},{"id":4779,"outV":114,"properties":{"weight":3}},{"id":6576,"outV":116,"properties":{"weight":1}},{"id":6835,"outV":64,"properties":{"weight":1}},{"id":6455,"outV":187,"properties":{"weight":12}},{"id":5304,"outV":170,"properties":{"weight":2}},{"id":824,"outV"
:171,"properties":{"weight":1}},{"id":6074,"outV":72,"properties":{"weight":4}},{"id":1722,"outV":82,"properties":{"weight":1}},{"id":4284,"outV":10,"properties":{"weight":1}},{"id":2109,"outV":17,"properties":{"weight":24}},{"id":703,"outV":206,"properties":{"weight":2}},{"id":5952,"outV":50,"properties":{"weight":7}},{"id":5440,"outV":239,"properties":{"weight":2}},{"id":1858,"outV":94,"properties":{"weight":2}},{"id":1347,"outV":31,"properties":{"weight":1}},{"id":1605,"outV":18,"properties":{"weight":1}},{"id":4165,"outV":54,"properties":{"weight":17}},{"id":3654,"outV":24,"properties":{"weight":3}},{"id":6598,"outV":127,"properties":{"weight":1}},{"id":4038,"outV":173,"properties":{"weight":1}},{"id":3271,"outV":160,"properties":{"weight":1}},{"id":3527,"outV":223,"properties":{"weight":1}},{"id":1096,"outV":59,"properties":{"weight":26}},{"id":3144,"outV":104,"properties":{"weight":24}},{"id":1993,"outV":152,"properties":{"weight":2}},{"id":6985,"outV":175,"properties":{"weigh
t":1}},{"id":6730,"outV":53,"properties":{"weight":4}},{"id":3019,"outV":14,"properties":{"weight":1}},{"id":3788,"outV":168,"properties":{"weight":1}},{"id":5072,"outV":4,"properties":{"weight":26}},{"id":2515,"outV":57,"properties":{"weight":3}},{"id":1365,"outV":130,"properties":{"weight":2}},{"id":2647,"outV":137,"properties":{"weight":1}},{"id":730,"outV":80,"properties":{"weight":12}},{"id":2780,"outV":15,"properties":{"weight":3}},{"id":3810,"outV":88,"properties":{"weight":6}},{"id":482,"outV":98,"properties":{"weight":8}},{"id":7013,"outV":89,"properties":{"weight":1}},{"id":4072,"outV":109,"properties":{"weight":1}},{"id":2281,"outV":25,"properties":{"weight":2}},{"id":2668,"outV":13,"properties":{"weight":3}},{"id":3565,"outV":56,"properties":{"weight":9}},{"id":1262,"outV":27,"properties":{"weight":17}},{"id":2031,"outV":180,"properties":{"weight":1}},{"id":6769,"outV":39,"properties":{"weight":2}},{"id":1779,"outV":234,"properties":{"weight":1}},{"id":4468,"outV":202,"p
roperties":{"weight":4}},{"id":1909,"outV":103,"properties":{"weight":1}},{"id":3446,"outV":58,"properties":{"weight":4}},{"id":2934,"outV":78,"properties":{"weight":1}},{"id":381,"outV":74,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6656,"inV":49,"properties":{"weight":9}},{"id":6657,"inV":19,"properties":{"weight":3}},{"id":6658,"inV":27,"properties":{"weight":9}},{"id":6659,"inV":252,"properties":{"weight":1}},{"id":6660,"inV":206,"properties":{"weight":1}},{"id":6661,"inV":89,"properties":{"weight":4}},{"id":6662,"inV":160,"properties":{"weight":1}},{"id":6663,"inV":15,"properties":{"weight":167}},{"id":6664,"inV":4,"properties":{"weight":3}},{"id":6665,"inV":202,"properties":{"weight":2}},{"id":6666,"inV":5,"properties":{"weight":1}},{"id":6667,"inV":9,"properties":{"weight":2}},{"id":6668,"inV":83,"properties":{"weight":3}},{"id":6669,"inV":3,"properties":{"weight":1}},{"id":6670,"inV":52,"properties":{"weight":1}},{"id":6671,"inV":25,"properties":{"weight":1}},{"
id":6672,"inV":46,"properties":{"weight":1}},{"id":6673,"inV":123,"properties":{"weight":2}},{"id":6674,"inV":51,"properties":{"weight":4}},{"id":6675,"inV":17,"properties":{"weight":3}},{"id":6676,"inV":56,"properties":{"weight":5}},{"id":6677,"inV":98,"properties":{"weight":5}},{"id":6678,"inV":104,"properties":{"weight":4}},{"id":6679,"inV":69,"properties":{"weight":3}},{"id":6680,"inV":170,"properties":{"weight":2}},{"id":6681,"inV":82,"properties":{"weight":1}},{"id":6682,"inV":80,"properties":{"weight":2}},{"id":6683,"inV":215,"properties":{"weight":1}},{"id":6684,"inV":48,"properties":{"weight":1}},{"id":6685,"inV":14,"properties":{"weight":3}},{"id":6686,"inV":50,"properties":{"weight":2}},{"id":6687,"inV":24,"properties":{"weight":83}},{"id":6688,"inV":18,"properties":{"weight":1}},{"id":6689,"inV":39,"properties":{"weight":6}},{"id":6690,"inV":105,"properties":{"weight":1}},{"id":6691,"inV":131,"properties":{"weight":14}},{"id":6645,"inV":72,"properties":{"weight":7}},{"id
":6646,"inV":58,"properties":{"weight":7}},{"id":6647,"inV":57,"properties":{"weight":6}},{"id":6648,"inV":54,"properties":{"weight":8}},{"id":6649,"inV":59,"properties":{"weight":14}},{"id":6650,"inV":100,"properties":{"weight":7}},{"id":6651,"inV":53,"properties":{"weight":4}},{"id":6652,"inV":148,"properties":{"weight":1}},{"id":6653,"inV":218,"properties":{"weight":2}},{"id":6654,"inV":235,"properties":{"weight":2}},{"id":6655,"inV":130,"properties":{"weight":1}}],"sungBy":[{"id":7776,"inV":351}],"writtenBy":[{"id":7775,"inV":659}]},"properties":{"name":[{"id":33,"value":"ME AND MY UNCLE"}],"songType":[{"id":35,"value":"cover"}],"performances":[{"id":34,"value":616}]}}
-{"id":13,"label":"song","inE":{"followedBy":[{"id":4865,"outV":35,"properties":{"weight":4}},{"id":1026,"outV":73,"properties":{"weight":1}},{"id":3330,"outV":155,"properties":{"weight":2}},{"id":5636,"outV":22,"properties":{"weight":1}},{"id":775,"outV":122,"properties":{"weight":1}},{"id":6407,"outV":134,"properties":{"weight":24}},{"id":1799,"outV":196,"properties":{"weight":2}},{"id":9,"outV":9,"properties":{"weight":6}},{"id":4874,"outV":100,"properties":{"weight":6}},{"id":4108,"outV":48,"properties":{"weight":3}},{"id":5132,"outV":222,"properties":{"weight":1}},{"id":2830,"outV":101,"properties":{"weight":8}},{"id":3857,"outV":60,"properties":{"weight":35}},{"id":6931,"outV":84,"properties":{"weight":7}},{"id":6165,"outV":36,"properties":{"weight":1}},{"id":533,"outV":120,"properties":{"weight":1}},{"id":5142,"outV":125,"properties":{"weight":11}},{"id":4630,"outV":154,"properties":{"weight":8}},{"id":283,"outV":5,"properties":{"weight":3}},{"id":1567,"outV":18,"properties":{
"weight":3}},{"id":1823,"outV":41,"properties":{"weight":4}},{"id":3359,"outV":184,"properties":{"weight":3}},{"id":3617,"outV":24,"properties":{"weight":1}},{"id":3108,"outV":153,"properties":{"weight":1}},{"id":3878,"outV":51,"properties":{"weight":6}},{"id":2347,"outV":87,"properties":{"weight":8}},{"id":6443,"outV":187,"properties":{"weight":47}},{"id":6700,"outV":141,"properties":{"weight":4}},{"id":5682,"outV":167,"properties":{"weight":1}},{"id":53,"outV":46,"properties":{"weight":4}},{"id":5943,"outV":50,"properties":{"weight":1}},{"id":823,"outV":171,"properties":{"weight":24}},{"id":4151,"outV":218,"properties":{"weight":2}},{"id":2617,"outV":158,"properties":{"weight":1}},{"id":3386,"outV":177,"properties":{"weight":2}},{"id":4411,"outV":327,"properties":{"weight":1}},{"id":1852,"outV":94,"properties":{"weight":4}},{"id":6206,"outV":319,"properties":{"weight":1}},{"id":2111,"outV":17,"properties":{"weight":4}},{"id":4159,"outV":54,"properties":{"weight":16}},{"id":1087,"o
utV":59,"properties":{"weight":5}},{"id":6723,"outV":53,"properties":{"weight":6}},{"id":6984,"outV":175,"properties":{"weight":1}},{"id":3145,"outV":104,"properties":{"weight":4}},{"id":4947,"outV":86,"properties":{"weight":1}},{"id":5203,"outV":99,"properties":{"weight":2}},{"id":1366,"outV":130,"properties":{"weight":12}},{"id":1622,"outV":210,"properties":{"weight":1}},{"id":2908,"outV":118,"properties":{"weight":1}},{"id":1885,"outV":103,"properties":{"weight":3}},{"id":4959,"outV":207,"properties":{"weight":6}},{"id":6763,"outV":39,"properties":{"weight":8}},{"id":3435,"outV":58,"properties":{"weight":8}},{"id":5741,"outV":129,"properties":{"weight":12}},{"id":366,"outV":74,"properties":{"weight":38}},{"id":2926,"outV":78,"properties":{"weight":3}},{"id":623,"outV":23,"properties":{"weight":1}},{"id":4721,"outV":186,"properties":{"weight":4}},{"id":2165,"outV":151,"properties":{"weight":1}},{"id":886,"outV":140,"properties":{"weight":1}},{"id":3703,"outV":3,"properties":{"weig
ht":5}},{"id":7031,"outV":89,"properties":{"weight":4}},{"id":1411,"outV":83,"properties":{"weight":7}},{"id":6278,"outV":49,"properties":{"weight":1}},{"id":3974,"outV":106,"properties":{"weight":2}},{"id":912,"outV":91,"properties":{"weight":59}},{"id":2192,"outV":235,"properties":{"weight":1}},{"id":4759,"outV":37,"properties":{"weight":2}},{"id":1179,"outV":26,"properties":{"weight":2}},{"id":5789,"outV":76,"properties":{"weight":3}},{"id":4257,"outV":10,"properties":{"weight":1}},{"id":6561,"outV":172,"properties":{"weight":1}},{"id":4771,"outV":114,"properties":{"weight":3}},{"id":1454,"outV":81,"properties":{"weight":10}},{"id":6073,"outV":72,"properties":{"weight":13}},{"id":5306,"outV":170,"properties":{"weight":4}},{"id":4027,"outV":173,"properties":{"weight":3}},{"id":1725,"outV":82,"properties":{"weight":3}},{"id":960,"outV":67,"properties":{"weight":2}},{"id":1985,"outV":152,"properties":{"weight":1}},{"id":6594,"outV":127,"properties":{"weight":6}},{"id":6342,"outV":21
,"properties":{"weight":4}},{"id":455,"outV":139,"properties":{"weight":1}},{"id":3277,"outV":160,"properties":{"weight":3}},{"id":5837,"outV":258,"properties":{"weight":1}},{"id":2256,"outV":29,"properties":{"weight":1}},{"id":208,"outV":70,"properties":{"weight":2}},{"id":721,"outV":80,"properties":{"weight":1}},{"id":2771,"outV":15,"properties":{"weight":3}},{"id":5076,"outV":4,"properties":{"weight":12}},{"id":2519,"outV":57,"properties":{"weight":10}},{"id":4312,"outV":110,"properties":{"weight":1}},{"id":2268,"outV":25,"properties":{"weight":8}},{"id":2014,"outV":149,"properties":{"weight":1}},{"id":3552,"outV":56,"properties":{"weight":8}},{"id":481,"outV":98,"properties":{"weight":3}},{"id":1764,"outV":28,"properties":{"weight":3}},{"id":1258,"outV":27,"properties":{"weight":3}},{"id":4846,"outV":119,"properties":{"weight":1}},{"id":1518,"outV":164,"properties":{"weight":1}},{"id":4593,"outV":85,"properties":{"weight":2}},{"id":244,"outV":150,"properties":{"weight":3}},{"id"
:1780,"outV":234,"properties":{"weight":2}},{"id":4344,"outV":62,"properties":{"weight":12}},{"id":2044,"outV":92,"properties":{"weight":2}},{"id":5374,"outV":69,"properties":{"weight":34}},{"id":5886,"outV":96,"properties":{"weight":15}}]},"outE":{"followedBy":[{"id":2688,"inV":94,"properties":{"weight":4}},{"id":2689,"inV":130,"properties":{"weight":11}},{"id":2690,"inV":83,"properties":{"weight":13}},{"id":2691,"inV":170,"properties":{"weight":1}},{"id":2692,"inV":51,"properties":{"weight":3}},{"id":2693,"inV":22,"properties":{"weight":2}},{"id":2694,"inV":296,"properties":{"weight":1}},{"id":2695,"inV":52,"properties":{"weight":1}},{"id":2696,"inV":17,"properties":{"weight":2}},{"id":2697,"inV":202,"properties":{"weight":3}},{"id":2698,"inV":27,"properties":{"weight":2}},{"id":2699,"inV":9,"properties":{"weight":3}},{"id":2700,"inV":25,"properties":{"weight":12}},{"id":2701,"inV":195,"properties":{"weight":2}},{"id":2702,"inV":206,"properties":{"weight":1}},{"id":2703,"inV":39,"
properties":{"weight":1}},{"id":2704,"inV":69,"properties":{"weight":6}},{"id":2705,"inV":24,"properties":{"weight":1}},{"id":2706,"inV":82,"properties":{"weight":3}},{"id":2707,"inV":57,"properties":{"weight":1}},{"id":2708,"inV":134,"properties":{"weight":9}},{"id":2709,"inV":110,"properties":{"weight":1}},{"id":2710,"inV":99,"properties":{"weight":3}},{"id":2711,"inV":76,"properties":{"weight":4}},{"id":2712,"inV":3,"properties":{"weight":3}},{"id":2713,"inV":178,"properties":{"weight":1}},{"id":2714,"inV":184,"properties":{"weight":1}},{"id":2715,"inV":60,"properties":{"weight":21}},{"id":2716,"inV":148,"properties":{"weight":1}},{"id":2717,"inV":32,"properties":{"weight":1}},{"id":2718,"inV":91,"properties":{"weight":42}},{"id":2719,"inV":103,"properties":{"weight":1}},{"id":2720,"inV":114,"properties":{"weight":4}},{"id":2721,"inV":141,"properties":{"weight":4}},{"id":2722,"inV":154,"properties":{"weight":3}},{"id":2723,"inV":109,"properties":{"weight":2}},{"id":2724,"inV":125
,"properties":{"weight":9}},{"id":2725,"inV":85,"properties":{"weight":2}},{"id":2726,"inV":84,"properties":{"weight":5}},{"id":2727,"inV":50,"properties":{"weight":1}},{"id":2728,"inV":214,"properties":{"weight":1}},{"id":2729,"inV":72,"properties":{"weight":1}},{"id":2730,"inV":246,"properties":{"weight":1}},{"id":2731,"inV":129,"properties":{"weight":29}},{"id":2732,"inV":65,"properties":{"weight":2}},{"id":2733,"inV":133,"properties":{"weight":1}},{"id":2734,"inV":62,"properties":{"weight":1}},{"id":2735,"inV":29,"properties":{"weight":4}},{"id":2736,"inV":5,"properties":{"weight":3}},{"id":2737,"inV":183,"properties":{"weight":3}},{"id":2738,"inV":210,"properties":{"weight":1}},{"id":2739,"inV":128,"properties":{"weight":1}},{"id":2740,"inV":67,"properties":{"weight":1}},{"id":2741,"inV":212,"properties":{"weight":1}},{"id":2742,"inV":70,"properties":{"weight":2}},{"id":2743,"inV":75,"properties":{"weight":1}},{"id":2744,"inV":71,"properties":{"weight":1}},{"id":2745,"inV":168,
"properties":{"weight":2}},{"id":2746,"inV":157,"properties":{"weight":1}},{"id":2747,"inV":92,"properties":{"weight":1}},{"id":2748,"inV":89,"properties":{"weight":5}},{"id":2749,"inV":81,"properties":{"weight":1}},{"id":2750,"inV":187,"properties":{"weight":1}},{"id":2751,"inV":164,"properties":{"weight":1}},{"id":2752,"inV":136,"properties":{"weight":1}},{"id":2753,"inV":46,"properties":{"weight":1}},{"id":2660,"inV":207,"properties":{"weight":3}},{"id":2661,"inV":122,"properties":{"weight":17}},{"id":2662,"inV":96,"properties":{"weight":157}},{"id":2663,"inV":104,"properties":{"weight":1}},{"id":2664,"inV":26,"properties":{"weight":14}},{"id":2665,"inV":123,"properties":{"weight":3}},{"id":2666,"inV":19,"properties":{"weight":12}},{"id":2667,"inV":100,"properties":{"weight":5}},{"id":2668,"inV":12,"properties":{"weight":3}},{"id":2669,"inV":49,"properties":{"weight":12}},{"id":2670,"inV":21,"properties":{"weight":4}},{"id":2671,"inV":120,"properties":{"weight":9}},{"id":2672,"in
V":23,"properties":{"weight":5}},{"id":2673,"inV":59,"properties":{"weight":6}},{"id":2674,"inV":54,"properties":{"weight":5}},{"id":2675,"inV":80,"properties":{"weight":1}},{"id":2676,"inV":234,"properties":{"weight":1}},{"id":2677,"inV":53,"properties":{"weight":2}},{"id":2678,"inV":225,"properties":{"weight":1}},{"id":2679,"inV":235,"properties":{"weight":2}},{"id":2680,"inV":160,"properties":{"weight":3}},{"id":2681,"inV":56,"properties":{"weight":3}},{"id":2682,"inV":127,"properties":{"weight":6}},{"id":2683,"inV":18,"properties":{"weight":3}},{"id":2684,"inV":4,"properties":{"weight":9}},{"id":2685,"inV":15,"properties":{"weight":7}},{"id":2686,"inV":74,"properties":{"weight":86}},{"id":2687,"inV":153,"properties":{"weight":12}}],"sungBy":[{"id":7292,"inV":359}],"writtenBy":[{"id":7291,"inV":339}]},"properties":{"name":[{"id":36,"value":"PLAYING IN THE BAND"}],"songType":[{"id":38,"value":"original"}],"performances":[{"id":37,"value":582}]}}
-{"id":14,"label":"song","inE":{"followedBy":[{"id":6784,"outV":39,"properties":{"weight":10}},{"id":5251,"outV":32,"properties":{"weight":1}},{"id":4229,"outV":52,"properties":{"weight":3}},{"id":4745,"outV":294,"properties":{"weight":4}},{"id":10,"outV":9,"properties":{"weight":3}},{"id":6283,"outV":49,"properties":{"weight":2}},{"id":4364,"outV":62,"properties":{"weight":16}},{"id":4109,"outV":48,"properties":{"weight":10}},{"id":6544,"outV":55,"properties":{"weight":1}},{"id":4881,"outV":100,"properties":{"weight":20}},{"id":6034,"outV":115,"properties":{"weight":1}},{"id":3219,"outV":63,"properties":{"weight":2}},{"id":531,"outV":120,"properties":{"weight":1}},{"id":4758,"outV":37,"properties":{"weight":2}},{"id":4247,"outV":10,"properties":{"weight":1}},{"id":4631,"outV":154,"properties":{"weight":6}},{"id":3866,"outV":60,"properties":{"weight":2}},{"id":1947,"outV":148,"properties":{"weight":1}},{"id":1436,"outV":83,"properties":{"weight":7}},{"id":2844,"outV":101,"properties"
:{"weight":1}},{"id":6685,"outV":12,"properties":{"weight":3}},{"id":1183,"outV":26,"properties":{"weight":2}},{"id":160,"outV":108,"properties":{"weight":2}},{"id":4517,"outV":105,"properties":{"weight":6}},{"id":6954,"outV":84,"properties":{"weight":4}},{"id":1451,"outV":81,"properties":{"weight":12}},{"id":1582,"outV":18,"properties":{"weight":4}},{"id":3892,"outV":51,"properties":{"weight":10}},{"id":2107,"outV":17,"properties":{"weight":19}},{"id":5820,"outV":76,"properties":{"weight":1}},{"id":6463,"outV":187,"properties":{"weight":26}},{"id":1090,"outV":59,"properties":{"weight":7}},{"id":6083,"outV":72,"properties":{"weight":9}},{"id":1731,"outV":82,"properties":{"weight":4}},{"id":4037,"outV":173,"properties":{"weight":1}},{"id":2375,"outV":87,"properties":{"weight":8}},{"id":4169,"outV":54,"properties":{"weight":36}},{"id":5578,"outV":42,"properties":{"weight":1}},{"id":5964,"outV":50,"properties":{"weight":2}},{"id":716,"outV":80,"properties":{"weight":10}},{"id":5709,"ou
tV":20,"properties":{"weight":1}},{"id":845,"outV":171,"properties":{"weight":11}},{"id":5838,"outV":258,"properties":{"weight":1}},{"id":1232,"outV":248,"properties":{"weight":1}},{"id":6993,"outV":175,"properties":{"weight":1}},{"id":3666,"outV":24,"properties":{"weight":2}},{"id":3796,"outV":88,"properties":{"weight":1}},{"id":3156,"outV":104,"properties":{"weight":6}},{"id":6742,"outV":53,"properties":{"weight":15}},{"id":2523,"outV":57,"properties":{"weight":9}},{"id":864,"outV":189,"properties":{"weight":2}},{"id":3556,"outV":56,"properties":{"weight":21}},{"id":102,"outV":46,"properties":{"weight":1}},{"id":5096,"outV":4,"properties":{"weight":2}},{"id":1257,"outV":27,"properties":{"weight":19}},{"id":489,"outV":98,"properties":{"weight":3}},{"id":2030,"outV":180,"properties":{"weight":2}},{"id":2159,"outV":151,"properties":{"weight":1}},{"id":2803,"outV":15,"properties":{"weight":4}},{"id":2935,"outV":78,"properties":{"weight":1}},{"id":2426,"outV":68,"properties":{"weight":
4}},{"id":3962,"outV":106,"properties":{"weight":2}},{"id":4474,"outV":202,"properties":{"weight":1}},{"id":123,"outV":97,"properties":{"weight":1}},{"id":5628,"outV":22,"properties":{"weight":1}},{"id":4092,"outV":109,"properties":{"weight":1}},{"id":1021,"outV":73,"properties":{"weight":20}},{"id":3455,"outV":58,"properties":{"weight":12}}]},"outE":{"followedBy":[{"id":2981,"inV":50,"properties":{"weight":2}},{"id":2982,"inV":4,"properties":{"weight":3}},{"id":2983,"inV":53,"properties":{"weight":8}},{"id":2984,"inV":57,"properties":{"weight":55}},{"id":2985,"inV":89,"properties":{"weight":2}},{"id":2986,"inV":122,"properties":{"weight":1}},{"id":2987,"inV":153,"properties":{"weight":1}},{"id":2988,"inV":72,"properties":{"weight":26}},{"id":2989,"inV":19,"properties":{"weight":17}},{"id":2990,"inV":9,"properties":{"weight":4}},{"id":2991,"inV":17,"properties":{"weight":13}},{"id":2992,"inV":46,"properties":{"weight":5}},{"id":2993,"inV":51,"properties":{"weight":15}},{"id":2994,"i
nV":54,"properties":{"weight":28}},{"id":2995,"inV":202,"properties":{"weight":3}},{"id":2996,"inV":27,"properties":{"weight":6}},{"id":2997,"inV":52,"properties":{"weight":3}},{"id":2998,"inV":58,"properties":{"weight":1}},{"id":2999,"inV":56,"properties":{"weight":8}},{"id":3000,"inV":100,"properties":{"weight":12}},{"id":3001,"inV":99,"properties":{"weight":26}},{"id":3002,"inV":98,"properties":{"weight":3}},{"id":3003,"inV":104,"properties":{"weight":2}},{"id":3004,"inV":82,"properties":{"weight":6}},{"id":3005,"inV":215,"properties":{"weight":1}},{"id":3006,"inV":69,"properties":{"weight":2}},{"id":3007,"inV":103,"properties":{"weight":1}},{"id":3008,"inV":83,"properties":{"weight":8}},{"id":3009,"inV":101,"properties":{"weight":1}},{"id":3010,"inV":80,"properties":{"weight":8}},{"id":3011,"inV":121,"properties":{"weight":3}},{"id":3012,"inV":59,"properties":{"weight":1}},{"id":3013,"inV":26,"properties":{"weight":2}},{"id":3014,"inV":32,"properties":{"weight":2}},{"id":3015,"i
nV":155,"properties":{"weight":1}},{"id":3016,"inV":42,"properties":{"weight":2}},{"id":3017,"inV":18,"properties":{"weight":1}},{"id":3018,"inV":105,"properties":{"weight":11}},{"id":3019,"inV":12,"properties":{"weight":1}},{"id":3020,"inV":49,"properties":{"weight":27}},{"id":3021,"inV":65,"properties":{"weight":2}},{"id":3022,"inV":85,"properties":{"weight":2}},{"id":3023,"inV":73,"properties":{"weight":8}},{"id":3024,"inV":106,"properties":{"weight":3}},{"id":3025,"inV":189,"properties":{"weight":3}},{"id":3026,"inV":10,"properties":{"weight":1}},{"id":3027,"inV":210,"properties":{"weight":3}},{"id":3028,"inV":76,"properties":{"weight":1}},{"id":3029,"inV":87,"properties":{"weight":1}},{"id":3030,"inV":96,"properties":{"weight":1}},{"id":3031,"inV":150,"properties":{"weight":1}},{"id":3032,"inV":66,"properties":{"weight":1}},{"id":3033,"inV":5,"properties":{"weight":1}},{"id":3034,"inV":91,"properties":{"weight":29}},{"id":3035,"inV":60,"properties":{"weight":6}},{"id":3036,"inV
":67,"properties":{"weight":1}},{"id":3037,"inV":74,"properties":{"weight":1}},{"id":3038,"inV":21,"properties":{"weight":1}},{"id":3039,"inV":169,"properties":{"weight":1}},{"id":3040,"inV":62,"properties":{"weight":1}},{"id":3041,"inV":39,"properties":{"weight":2}},{"id":3042,"inV":175,"properties":{"weight":1}},{"id":3043,"inV":172,"properties":{"weight":1}},{"id":3044,"inV":28,"properties":{"weight":5}},{"id":3045,"inV":173,"properties":{"weight":1}},{"id":3046,"inV":37,"properties":{"weight":5}},{"id":3047,"inV":35,"properties":{"weight":2}}],"sungBy":[{"id":7232,"inV":351}],"writtenBy":[{"id":7231,"inV":350}]},"properties":{"name":[{"id":39,"value":"LOOKS LIKE RAIN"}],"songType":[{"id":41,"value":"original"}],"performances":[{"id":40,"value":417}]}}
-{"id":15,"label":"song","inE":{"followedBy":[{"id":1152,"outV":26,"properties":{"weight":1}},{"id":769,"outV":122,"properties":{"weight":3}},{"id":5379,"outV":69,"properties":{"weight":4}},{"id":3844,"outV":60,"properties":{"weight":2}},{"id":1414,"outV":83,"properties":{"weight":2}},{"id":6663,"outV":12,"properties":{"weight":167}},{"id":4872,"outV":100,"properties":{"weight":9}},{"id":4105,"outV":48,"properties":{"weight":4}},{"id":11,"outV":9,"properties":{"weight":3}},{"id":4622,"outV":154,"properties":{"weight":1}},{"id":2833,"outV":101,"properties":{"weight":1}},{"id":2195,"outV":235,"properties":{"weight":1}},{"id":5141,"outV":125,"properties":{"weight":2}},{"id":3224,"outV":63,"properties":{"weight":2}},{"id":1945,"outV":148,"properties":{"weight":2}},{"id":5024,"outV":30,"properties":{"weight":2}},{"id":2597,"outV":112,"properties":{"weight":35}},{"id":1062,"outV":73,"properties":{"weight":1}},{"id":5032,"outV":47,"properties":{"weight":1}},{"id":4776,"outV":114,"properties
":{"weight":1}},{"id":6698,"outV":141,"properties":{"weight":1}},{"id":3885,"outV":51,"properties":{"weight":14}},{"id":1712,"outV":82,"properties":{"weight":4}},{"id":5301,"outV":170,"properties":{"weight":1}},{"id":1847,"outV":94,"properties":{"weight":6}},{"id":4153,"outV":54,"properties":{"weight":7}},{"id":1339,"outV":31,"properties":{"weight":2}},{"id":6075,"outV":72,"properties":{"weight":4}},{"id":2108,"outV":17,"properties":{"weight":8}},{"id":60,"outV":46,"properties":{"weight":1}},{"id":6460,"outV":187,"properties":{"weight":10}},{"id":3653,"outV":24,"properties":{"weight":14}},{"id":6731,"outV":53,"properties":{"weight":1}},{"id":3147,"outV":104,"properties":{"weight":2}},{"id":1101,"outV":59,"properties":{"weight":2}},{"id":4052,"outV":173,"properties":{"weight":1}},{"id":2518,"outV":57,"properties":{"weight":5}},{"id":476,"outV":98,"properties":{"weight":3}},{"id":1372,"outV":130,"properties":{"weight":1}},{"id":5085,"outV":4,"properties":{"weight":1}},{"id":1245,"outV
":27,"properties":{"weight":5}},{"id":2272,"outV":25,"properties":{"weight":4}},{"id":4577,"outV":254,"properties":{"weight":1}},{"id":5735,"outV":129,"properties":{"weight":2}},{"id":3432,"outV":58,"properties":{"weight":7}},{"id":3562,"outV":56,"properties":{"weight":6}},{"id":746,"outV":80,"properties":{"weight":1}},{"id":2411,"outV":68,"properties":{"weight":1}},{"id":2924,"outV":78,"properties":{"weight":3}},{"id":4467,"outV":202,"properties":{"weight":6}},{"id":376,"outV":74,"properties":{"weight":1}},{"id":5242,"outV":32,"properties":{"weight":2}},{"id":6267,"outV":49,"properties":{"weight":1}},{"id":2685,"outV":13,"properties":{"weight":7}}]},"outE":{"followedBy":[{"id":2816,"inV":103,"properties":{"weight":1}},{"id":2817,"inV":62,"properties":{"weight":1}},{"id":2818,"inV":64,"properties":{"weight":1}},{"id":2819,"inV":75,"properties":{"weight":3}},{"id":2820,"inV":152,"properties":{"weight":1}},{"id":2821,"inV":117,"properties":{"weight":1}},{"id":2822,"inV":168,"propertie
s":{"weight":1}},{"id":2823,"inV":188,"properties":{"weight":1}},{"id":2824,"inV":131,"properties":{"weight":4}},{"id":2825,"inV":28,"properties":{"weight":1}},{"id":2826,"inV":124,"properties":{"weight":1}},{"id":2827,"inV":190,"properties":{"weight":1}},{"id":2828,"inV":137,"properties":{"weight":1}},{"id":2755,"inV":19,"properties":{"weight":8}},{"id":2756,"inV":56,"properties":{"weight":22}},{"id":2757,"inV":104,"properties":{"weight":17}},{"id":2758,"inV":49,"properties":{"weight":4}},{"id":2759,"inV":122,"properties":{"weight":3}},{"id":2760,"inV":23,"properties":{"weight":2}},{"id":2761,"inV":27,"properties":{"weight":23}},{"id":2762,"inV":89,"properties":{"weight":7}},{"id":2763,"inV":46,"properties":{"weight":1}},{"id":2764,"inV":57,"properties":{"weight":7}},{"id":2765,"inV":59,"properties":{"weight":6}},{"id":2766,"inV":58,"properties":{"weight":18}},{"id":2767,"inV":54,"properties":{"weight":25}},{"id":2768,"inV":100,"properties":{"weight":24}},{"id":2769,"inV":39,"prope
rties":{"weight":3}},{"id":2770,"inV":160,"properties":{"weight":5}},{"id":2771,"inV":13,"properties":{"weight":3}},{"id":2772,"inV":51,"properties":{"weight":14}},{"id":2773,"inV":94,"properties":{"weight":4}},{"id":2774,"inV":148,"properties":{"weight":1}},{"id":2775,"inV":9,"properties":{"weight":5}},{"id":2776,"inV":48,"properties":{"weight":17}},{"id":2777,"inV":55,"properties":{"weight":1}},{"id":2778,"inV":72,"properties":{"weight":3}},{"id":2779,"inV":52,"properties":{"weight":1}},{"id":2780,"inV":12,"properties":{"weight":3}},{"id":2781,"inV":4,"properties":{"weight":4}},{"id":2782,"inV":83,"properties":{"weight":2}},{"id":2783,"inV":202,"properties":{"weight":6}},{"id":2784,"inV":82,"properties":{"weight":3}},{"id":2785,"inV":74,"properties":{"weight":1}},{"id":2786,"inV":69,"properties":{"weight":7}},{"id":2787,"inV":98,"properties":{"weight":10}},{"id":2788,"inV":21,"properties":{"weight":1}},{"id":2789,"inV":125,"properties":{"weight":1}},{"id":2790,"inV":170,"propertie
s":{"weight":3}},{"id":2791,"inV":26,"properties":{"weight":1}},{"id":2792,"inV":60,"properties":{"weight":1}},{"id":2793,"inV":294,"properties":{"weight":2}},{"id":2794,"inV":99,"properties":{"weight":3}},{"id":2795,"inV":17,"properties":{"weight":10}},{"id":2796,"inV":63,"properties":{"weight":5}},{"id":2797,"inV":68,"properties":{"weight":3}},{"id":2798,"inV":108,"properties":{"weight":6}},{"id":2799,"inV":109,"properties":{"weight":1}},{"id":2800,"inV":196,"properties":{"weight":3}},{"id":2801,"inV":91,"properties":{"weight":1}},{"id":2802,"inV":18,"properties":{"weight":1}},{"id":2803,"inV":14,"properties":{"weight":4}},{"id":2804,"inV":105,"properties":{"weight":8}},{"id":2805,"inV":101,"properties":{"weight":2}},{"id":2806,"inV":10,"properties":{"weight":2}},{"id":2807,"inV":73,"properties":{"weight":26}},{"id":2808,"inV":78,"properties":{"weight":1}},{"id":2809,"inV":32,"properties":{"weight":3}},{"id":2810,"inV":106,"properties":{"weight":2}},{"id":2811,"inV":180,"propertie
s":{"weight":2}},{"id":2812,"inV":88,"properties":{"weight":1}},{"id":2813,"inV":97,"properties":{"weight":1}},{"id":2814,"inV":53,"properties":{"weight":3}},{"id":2815,"inV":115,"properties":{"weight":4}}],"sungBy":[{"id":7472,"inV":351}],"writtenBy":[{"id":7471,"inV":479}]},"properties":{"name":[{"id":42,"value":"BIG RIVER"}],"songType":[{"id":44,"value":"cover"}],"performances":[{"id":43,"value":397}]}}
-{"id":16,"label":"song","inE":{"followedBy":[{"id":7008,"outV":89,"properties":{"weight":1}},{"id":6467,"outV":187,"properties":{"weight":1}},{"id":6341,"outV":21,"properties":{"weight":1}},{"id":5637,"outV":22,"properties":{"weight":3}},{"id":4101,"outV":48,"properties":{"weight":1}},{"id":5382,"outV":69,"properties":{"weight":4}},{"id":6537,"outV":55,"properties":{"weight":1}},{"id":3273,"outV":160,"properties":{"weight":2}},{"id":3882,"outV":51,"properties":{"weight":12}},{"id":12,"outV":9,"properties":{"weight":1}},{"id":1260,"outV":27,"properties":{"weight":1}},{"id":4172,"outV":54,"properties":{"weight":1}},{"id":6285,"outV":49,"properties":{"weight":1}},{"id":368,"outV":74,"properties":{"weight":1}},{"id":4464,"outV":202,"properties":{"weight":1}},{"id":468,"outV":195,"properties":{"weight":3}},{"id":5303,"outV":170,"properties":{"weight":2}},{"id":472,"outV":98,"properties":{"weight":2}},{"id":5081,"outV":4,"properties":{"weight":2}},{"id":2521,"outV":57,"properties":{"weigh
t":1}},{"id":5146,"outV":125,"properties":{"weight":1}},{"id":1405,"outV":83,"properties":{"weight":5}},{"id":1854,"outV":94,"properties":{"weight":2}},{"id":1950,"outV":148,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2169,"inV":25,"properties":{"weight":1}},{"id":2170,"inV":101,"properties":{"weight":46}},{"id":2171,"inV":89,"properties":{"weight":2}},{"id":2172,"inV":130,"properties":{"weight":1}},{"id":2173,"inV":83,"properties":{"weight":1}}]},"properties":{"name":[{"id":45,"value":"WEATHER REPORT SUITE"}],"songType":[{"id":47,"value":""}],"performances":[{"id":46,"value":0}]}}
-{"id":17,"label":"song","inE":{"followedBy":[{"id":5955,"outV":50,"properties":{"weight":43}},{"id":5702,"outV":20,"properties":{"weight":2}},{"id":2696,"outV":13,"properties":{"weight":2}},{"id":6538,"outV":55,"properties":{"weight":1}},{"id":1163,"outV":26,"properties":{"weight":34}},{"id":13,"outV":9,"properties":{"weight":1}},{"id":402,"outV":38,"properties":{"weight":12}},{"id":6675,"outV":12,"properties":{"weight":3}},{"id":5011,"outV":30,"properties":{"weight":3}},{"id":1877,"outV":103,"properties":{"weight":2}},{"id":2522,"outV":57,"properties":{"weight":1}},{"id":3803,"outV":88,"properties":{"weight":4}},{"id":475,"outV":98,"properties":{"weight":1}},{"id":3996,"outV":106,"properties":{"weight":1}},{"id":2588,"outV":112,"properties":{"weight":3}},{"id":540,"outV":120,"properties":{"weight":1}},{"id":990,"outV":11,"properties":{"weight":3}},{"id":1570,"outV":18,"properties":{"weight":6}},{"id":2275,"outV":25,"properties":{"weight":1}},{"id":4262,"outV":10,"properties":{"weig
ht":5}},{"id":2795,"outV":15,"properties":{"weight":10}},{"id":6955,"outV":84,"properties":{"weight":1}},{"id":2413,"outV":68,"properties":{"weight":9}},{"id":4077,"outV":109,"properties":{"weight":1}},{"id":2991,"outV":14,"properties":{"weight":13}},{"id":4912,"outV":100,"properties":{"weight":1}},{"id":3639,"outV":24,"properties":{"weight":13}},{"id":6583,"outV":116,"properties":{"weight":1}},{"id":58,"outV":46,"properties":{"weight":2}},{"id":635,"outV":23,"properties":{"weight":16}},{"id":5244,"outV":32,"properties":{"weight":19}},{"id":2942,"outV":78,"properties":{"weight":1}},{"id":6847,"outV":64,"properties":{"weight":7}}]},"outE":{"followedBy":[{"id":2112,"inV":24,"properties":{"weight":9}},{"id":2113,"inV":21,"properties":{"weight":1}},{"id":2114,"inV":46,"properties":{"weight":1}},{"id":2115,"inV":20,"properties":{"weight":2}},{"id":2116,"inV":10,"properties":{"weight":7}},{"id":2117,"inV":68,"properties":{"weight":25}},{"id":2118,"inV":32,"properties":{"weight":19}},{"id"
:2119,"inV":103,"properties":{"weight":3}},{"id":2120,"inV":121,"properties":{"weight":3}},{"id":2121,"inV":112,"properties":{"weight":31}},{"id":2122,"inV":85,"properties":{"weight":1}},{"id":2123,"inV":101,"properties":{"weight":1}},{"id":2124,"inV":109,"properties":{"weight":1}},{"id":2125,"inV":73,"properties":{"weight":1}},{"id":2126,"inV":88,"properties":{"weight":8}},{"id":2127,"inV":111,"properties":{"weight":3}},{"id":2128,"inV":54,"properties":{"weight":2}},{"id":2129,"inV":97,"properties":{"weight":2}},{"id":2130,"inV":100,"properties":{"weight":1}},{"id":2131,"inV":42,"properties":{"weight":1}},{"id":2132,"inV":58,"properties":{"weight":2}},{"id":2133,"inV":244,"properties":{"weight":1}},{"id":2134,"inV":56,"properties":{"weight":1}},{"id":2135,"inV":63,"properties":{"weight":1}},{"id":2136,"inV":188,"properties":{"weight":2}},{"id":2137,"inV":71,"properties":{"weight":1}},{"id":2138,"inV":30,"properties":{"weight":2}},{"id":2139,"inV":31,"properties":{"weight":1}},{"id"
:2140,"inV":77,"properties":{"weight":2}},{"id":2141,"inV":40,"properties":{"weight":1}},{"id":2142,"inV":33,"properties":{"weight":1}},{"id":2103,"inV":18,"properties":{"weight":17}},{"id":2104,"inV":39,"properties":{"weight":2}},{"id":2105,"inV":22,"properties":{"weight":4}},{"id":2106,"inV":50,"properties":{"weight":6}},{"id":2107,"inV":14,"properties":{"weight":19}},{"id":2108,"inV":15,"properties":{"weight":8}},{"id":2109,"inV":12,"properties":{"weight":24}},{"id":2110,"inV":23,"properties":{"weight":2}},{"id":2111,"inV":13,"properties":{"weight":4}}],"sungBy":[{"id":7364,"inV":340}],"writtenBy":[{"id":7363,"inV":339}]},"properties":{"name":[{"id":48,"value":"THEY LOVE EACH OTHER"}],"songType":[{"id":50,"value":"original"}],"performances":[{"id":49,"value":227}]}}
-{"id":18,"label":"song","inE":{"followedBy":[{"id":1024,"outV":73,"properties":{"weight":4}},{"id":4097,"outV":48,"properties":{"weight":13}},{"id":6276,"outV":49,"properties":{"weight":2}},{"id":2309,"outV":25,"properties":{"weight":1}},{"id":3333,"outV":155,"properties":{"weight":1}},{"id":4231,"outV":52,"properties":{"weight":1}},{"id":4360,"outV":62,"properties":{"weight":1}},{"id":5257,"outV":32,"properties":{"weight":3}},{"id":3849,"outV":60,"properties":{"weight":1}},{"id":5385,"outV":69,"properties":{"weight":2}},{"id":2189,"outV":235,"properties":{"weight":1}},{"id":14,"outV":9,"properties":{"weight":5}},{"id":654,"outV":23,"properties":{"weight":1}},{"id":5010,"outV":30,"properties":{"weight":2}},{"id":6546,"outV":55,"properties":{"weight":1}},{"id":4885,"outV":100,"properties":{"weight":11}},{"id":1814,"outV":273,"properties":{"weight":1}},{"id":1943,"outV":148,"properties":{"weight":1}},{"id":5145,"outV":125,"properties":{"weight":1}},{"id":6688,"outV":12,"properties":{"
weight":1}},{"id":4642,"outV":154,"properties":{"weight":3}},{"id":4260,"outV":10,"properties":{"weight":3}},{"id":2852,"outV":101,"properties":{"weight":1}},{"id":3238,"outV":63,"properties":{"weight":1}},{"id":6695,"outV":141,"properties":{"weight":1}},{"id":3880,"outV":51,"properties":{"weight":12}},{"id":1193,"outV":26,"properties":{"weight":1}},{"id":425,"outV":38,"properties":{"weight":2}},{"id":2601,"outV":112,"properties":{"weight":1}},{"id":4524,"outV":105,"properties":{"weight":3}},{"id":45,"outV":46,"properties":{"weight":3}},{"id":4015,"outV":292,"properties":{"weight":1}},{"id":560,"outV":120,"properties":{"weight":1}},{"id":6579,"outV":116,"properties":{"weight":1}},{"id":5299,"outV":170,"properties":{"weight":3}},{"id":4404,"outV":40,"properties":{"weight":1}},{"id":1716,"outV":82,"properties":{"weight":3}},{"id":5429,"outV":315,"properties":{"weight":1}},{"id":4150,"outV":218,"properties":{"weight":1}},{"id":2103,"outV":17,"properties":{"weight":17}},{"id":4152,"outV
":54,"properties":{"weight":18}},{"id":6456,"outV":187,"properties":{"weight":8}},{"id":1849,"outV":94,"properties":{"weight":6}},{"id":6715,"outV":53,"properties":{"weight":6}},{"id":827,"outV":171,"properties":{"weight":1}},{"id":6205,"outV":319,"properties":{"weight":1}},{"id":1086,"outV":59,"properties":{"weight":21}}
<TRUNCATED>
[10/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
deleted file mode 100644
index aaca316..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.structure.io.graphson;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Path;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-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.Element;
-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.Comparators;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
-import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
-import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
-import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
-import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdKeySerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
-import org.javatuples.Pair;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
-
-/**
- * GraphSON serializers for graph-based objects such as vertices, edges, properties, and paths. These serializers
- * present a generalized way to serialize the implementations of core interfaces.
- *
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-final class GraphSONSerializers {
-
- private GraphSONSerializers() {}
-
- final static class VertexPropertyJacksonSerializer extends StdSerializer<VertexProperty> {
-
- private final boolean normalize;
-
- public VertexPropertyJacksonSerializer(final boolean normalize) {
- super(VertexProperty.class);
- this.normalize = normalize;
- }
-
- @Override
- public void serialize(final VertexProperty property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
- throws IOException {
- serializerVertexProperty(property, jsonGenerator, serializerProvider, null, normalize, true);
- }
-
- @Override
- public void serializeWithType(final VertexProperty property, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- serializerVertexProperty(property, jsonGenerator, serializerProvider, typeSerializer, normalize, true);
- }
- }
-
- final static class PropertyJacksonSerializer extends StdSerializer<Property> {
-
- public PropertyJacksonSerializer() {
- super(Property.class);
- }
-
- @Override
- public void serialize(final Property property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
- throws IOException {
- ser(property, jsonGenerator, serializerProvider, null);
- }
- @Override
- public void serializeWithType(final Property property, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- ser(property, jsonGenerator, serializerProvider, typeSerializer);
- }
-
- private static void ser(final Property property, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- jsonGenerator.writeStartObject();
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- serializerProvider.defaultSerializeField(GraphSONTokens.KEY, property.key(), jsonGenerator);
- serializerProvider.defaultSerializeField(GraphSONTokens.VALUE, property.value(), jsonGenerator);
- jsonGenerator.writeEndObject();
- }
- }
-
- final static class EdgeJacksonSerializer extends StdSerializer<Edge> {
-
- private final boolean normalize;
-
- public EdgeJacksonSerializer(final boolean normalize) {
- super(Edge.class);
- this.normalize = normalize;
- }
-
-
- @Override
- public void serialize(final Edge edge, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
- throws IOException {
- ser(edge, jsonGenerator, serializerProvider, null);
- }
- @Override
- public void serializeWithType(final Edge edge, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- ser(edge, jsonGenerator, serializerProvider, typeSerializer);
- }
-
- private void ser(final Edge edge, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- jsonGenerator.writeStartObject();
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- GraphSONUtil.writeWithType(GraphSONTokens.ID, edge.id(), jsonGenerator, serializerProvider, typeSerializer);
-
- jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label());
- jsonGenerator.writeStringField(GraphSONTokens.TYPE, GraphSONTokens.EDGE);
- jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, edge.inVertex().label());
- jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, edge.outVertex().label());
- GraphSONUtil.writeWithType(GraphSONTokens.IN, edge.inVertex().id(), jsonGenerator, serializerProvider, typeSerializer);
- GraphSONUtil.writeWithType(GraphSONTokens.OUT, edge.outVertex().id(), jsonGenerator, serializerProvider, typeSerializer);
- writeProperties(edge, jsonGenerator, serializerProvider, typeSerializer);
- jsonGenerator.writeEndObject();
- }
-
- private void writeProperties(final Edge edge, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider,
- final TypeSerializer typeSerializer) throws IOException {
- final Iterator<Property<Object>> elementProperties = normalize ?
- IteratorUtils.list(edge.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : edge.properties();
- if (elementProperties.hasNext()) {
- jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- while (elementProperties.hasNext()) {
- final Property<Object> elementProperty = elementProperties.next();
- GraphSONUtil.writeWithType(elementProperty.key(), elementProperty.value(), jsonGenerator, serializerProvider, typeSerializer);
- }
- jsonGenerator.writeEndObject();
- }
- }
-
- }
-
- final static class VertexJacksonSerializer extends StdSerializer<Vertex> {
-
- private final boolean normalize;
-
- public VertexJacksonSerializer(final boolean normalize) {
- super(Vertex.class);
- this.normalize = normalize;
- }
-
- @Override
- public void serialize(final Vertex vertex, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
- throws IOException {
- ser(vertex, jsonGenerator, serializerProvider, null);
- }
-
- @Override
- public void serializeWithType(final Vertex vertex, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- ser(vertex, jsonGenerator, serializerProvider, typeSerializer);
-
- }
-
- private void ser(final Vertex vertex, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
- throws IOException {
- jsonGenerator.writeStartObject();
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- GraphSONUtil.writeWithType(GraphSONTokens.ID, vertex.id(), jsonGenerator, serializerProvider, typeSerializer);
- jsonGenerator.writeStringField(GraphSONTokens.LABEL, vertex.label());
- jsonGenerator.writeStringField(GraphSONTokens.TYPE, GraphSONTokens.VERTEX);
- writeProperties(vertex, jsonGenerator, serializerProvider, typeSerializer);
- jsonGenerator.writeEndObject();
- }
-
- private void writeProperties(final Vertex vertex, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-
- final List<String> keys = normalize ?
- IteratorUtils.list(vertex.keys().iterator(), Comparator.naturalOrder()) : new ArrayList<>(vertex.keys());
- for (String key : keys) {
- final Iterator<VertexProperty<Object>> vertexProperties = normalize ?
- IteratorUtils.list(vertex.properties(key), Comparators.PROPERTY_COMPARATOR).iterator() : vertex.properties(key);
-
- if (vertexProperties.hasNext()) {
- jsonGenerator.writeArrayFieldStart(key);
- if (typeSerializer != null) {
- jsonGenerator.writeString(ArrayList.class.getName());
- jsonGenerator.writeStartArray();
- }
-
- while (vertexProperties.hasNext()) {
- serializerVertexProperty(vertexProperties.next(), jsonGenerator, serializerProvider, typeSerializer, normalize, false);
- }
-
- jsonGenerator.writeEndArray();
- if (typeSerializer != null) jsonGenerator.writeEndArray();
- }
- }
-
- jsonGenerator.writeEndObject();
- }
-
- }
-
- final static class PathJacksonSerializer extends StdSerializer<Path> {
-
- public PathJacksonSerializer() {
- super(Path.class);
- }
- @Override
- public void serialize(final Path path, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
- throws IOException, JsonGenerationException {
- ser(path, jsonGenerator, null);
- }
-
- @Override
- public void serializeWithType(final Path path, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
- throws IOException, JsonProcessingException {
- ser(path, jsonGenerator, typeSerializer);
- }
- private static void ser(final Path path, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer)
- throws IOException {
- jsonGenerator.writeStartObject();
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- jsonGenerator.writeObjectField(GraphSONTokens.LABELS, path.labels());
- jsonGenerator.writeObjectField(GraphSONTokens.OBJECTS, path.objects());
- jsonGenerator.writeEndObject();
- }
-
- }
-
- final static class TreeJacksonSerializer extends StdSerializer<Tree> {
-
- public TreeJacksonSerializer() {
- super(Tree.class);
- }
-
- @Override
- public void serialize(final Tree tree, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
- ser(tree, jsonGenerator, null);
- }
-
- @Override
- public void serializeWithType(final Tree tree, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
- throws IOException, JsonProcessingException {
- ser(tree, jsonGenerator, typeSerializer);
- }
-
- private static void ser(final Tree tree, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer)
- throws IOException {
- jsonGenerator.writeStartObject();
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-
- Set<Map.Entry<Element, Tree>> set = tree.entrySet();
- for(Map.Entry<Element, Tree> entry : set)
- {
- jsonGenerator.writeObjectFieldStart(entry.getKey().id().toString());
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- jsonGenerator.writeObjectField(GraphSONTokens.KEY, entry.getKey());
- jsonGenerator.writeObjectField(GraphSONTokens.VALUE, entry.getValue());
- jsonGenerator.writeEndObject();
- }
- jsonGenerator.writeEndObject();
- }
- }
-
- /**
- * Maps in the JVM can have {@link Object} as a key, but in JSON they must be a {@link String}.
- */
- final static class GraphSONKeySerializer extends StdKeySerializer {
-
- @Override
- public void serialize(final Object o, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException {
- ser(o, jsonGenerator, serializerProvider);
- }
- @Override
- public void serializeWithType(final Object o, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- ser(o, jsonGenerator, serializerProvider);
- }
-
- private void ser(final Object o, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider) throws IOException {
- if (Element.class.isAssignableFrom(o.getClass()))
- jsonGenerator.writeFieldName((((Element) o).id()).toString());
- else
- super.serialize(o, jsonGenerator, serializerProvider);
- }
- }
-
- final static class TraversalExplanationJacksonSerializer extends StdSerializer<TraversalExplanation> {
- public TraversalExplanationJacksonSerializer() {
- super(TraversalExplanation.class);
- }
-
- @Override
- public void serialize(final TraversalExplanation traversalExplanation, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider) throws IOException {
- ser(traversalExplanation, jsonGenerator);
- }
-
- @Override
- public void serializeWithType(final TraversalExplanation value, final JsonGenerator gen,
- final SerializerProvider serializers, final TypeSerializer typeSer) throws IOException {
- ser(value, gen);
- }
-
- public void ser(final TraversalExplanation te, final JsonGenerator jsonGenerator) throws IOException {
- final Map<String, Object> m = new HashMap<>();
- m.put(GraphSONTokens.ORIGINAL, getStepsAsList(te.getOriginalTraversal()));
-
- final List<Pair<TraversalStrategy, Traversal.Admin<?,?>>> strategyTraversals = te.getStrategyTraversals();
-
- final List<Map<String,Object>> intermediates = new ArrayList<>();
- for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : strategyTraversals) {
- final Map<String,Object> intermediate = new HashMap<>();
- intermediate.put(GraphSONTokens.STRATEGY, pair.getValue0().toString());
- intermediate.put(GraphSONTokens.CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName());
- intermediate.put(GraphSONTokens.TRAVERSAL, getStepsAsList(pair.getValue1()));
- intermediates.add(intermediate);
- }
- m.put(GraphSONTokens.INTERMEDIATE, intermediates);
-
- if (strategyTraversals.isEmpty())
- m.put(GraphSONTokens.FINAL, getStepsAsList(te.getOriginalTraversal()));
- else
- m.put(GraphSONTokens.FINAL, getStepsAsList(strategyTraversals.get(strategyTraversals.size() - 1).getValue1()));
-
- jsonGenerator.writeObject(m);
- }
-
- private List<String> getStepsAsList(final Traversal.Admin<?,?> t) {
- final List<String> steps = new ArrayList<>();
- t.getSteps().iterator().forEachRemaining(s -> steps.add(s.toString()));
- return steps;
- }
- }
-
- final static class TraversalMetricsJacksonSerializer extends StdSerializer<TraversalMetrics> {
- public TraversalMetricsJacksonSerializer() {
- super(TraversalMetrics.class);
- }
-
- @Override
- public void serialize(final TraversalMetrics property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
- throws IOException {
- serializeInternal(property, jsonGenerator);
- }
-
- @Override
- public void serializeWithType(final TraversalMetrics property, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- serializeInternal(property, jsonGenerator);
- }
-
- private static void serializeInternal(final TraversalMetrics traversalMetrics, final JsonGenerator jsonGenerator) throws IOException {
- // creation of the map enables all the fields to be properly written with their type if required
- final Map<String, Object> m = new HashMap<>();
- m.put(GraphSONTokens.DURATION, traversalMetrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
- final List<Map<String, Object>> metrics = new ArrayList<>();
- traversalMetrics.getMetrics().forEach(it -> metrics.add(metricsToMap(it)));
- m.put(GraphSONTokens.METRICS, metrics);
-
- jsonGenerator.writeObject(m);
- }
-
- private static Map<String, Object> metricsToMap(final Metrics metrics) {
- final Map<String, Object> m = new HashMap<>();
- m.put(GraphSONTokens.ID, metrics.getId());
- m.put(GraphSONTokens.NAME, metrics.getName());
- m.put(GraphSONTokens.COUNTS, metrics.getCounts());
- m.put(GraphSONTokens.DURATION, metrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
-
- if (!metrics.getAnnotations().isEmpty()) {
- m.put(GraphSONTokens.ANNOTATIONS, metrics.getAnnotations());
- }
-
- if (!metrics.getNested().isEmpty()) {
- final List<Map<String, Object>> nested = new ArrayList<>();
- metrics.getNested().forEach(it -> nested.add(metricsToMap(it)));
- m.put(GraphSONTokens.METRICS, nested);
- }
- return m;
- }
- }
-
- private static void serializerVertexProperty(final VertexProperty property, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider,
- final TypeSerializer typeSerializer, final boolean normalize,
- final boolean includeLabel) throws IOException {
- jsonGenerator.writeStartObject();
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- GraphSONUtil.writeWithType(GraphSONTokens.ID, property.id(), jsonGenerator, serializerProvider, typeSerializer);
- GraphSONUtil.writeWithType(GraphSONTokens.VALUE, property.value(), jsonGenerator, serializerProvider, typeSerializer);
- if (includeLabel) jsonGenerator.writeStringField(GraphSONTokens.LABEL, property.label());
- tryWriteMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
- jsonGenerator.writeEndObject();
- }
-
- private static void tryWriteMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider,
- final TypeSerializer typeSerializer, final boolean normalize) throws IOException {
- // when "detached" you can't check features of the graph it detached from so it has to be
- // treated differently from a regular VertexProperty implementation.
- if (property instanceof DetachedVertexProperty) {
- // only write meta properties key if they exist
- if (property.properties().hasNext()) {
- writeMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
- }
- } else {
- // still attached - so we can check the features to see if it's worth even trying to write the
- // meta properties key
- if (property.graph().features().vertex().supportsMetaProperties() && property.properties().hasNext()) {
- writeMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
- }
- }
- }
-
- private static void writeMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider,
- final TypeSerializer typeSerializer, final boolean normalize) throws IOException {
- jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- final Iterator<Property<Object>> metaProperties = normalize ?
- IteratorUtils.list(( Iterator<Property<Object>>) property.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : property.properties();
- while (metaProperties.hasNext()) {
- final Property<Object> metaProperty = metaProperties.next();
- GraphSONUtil.writeWithType(metaProperty.key(), metaProperty.value(), jsonGenerator, serializerProvider, typeSerializer);
- }
- jsonGenerator.writeEndObject();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1d0.java
new file mode 100644
index 0000000..2fc9e47
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1d0.java
@@ -0,0 +1,465 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+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.Element;
+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.Comparators;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdKeySerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+import org.javatuples.Pair;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * GraphSON serializers for graph-based objects such as vertices, edges, properties, and paths. These serializers
+ * present a generalized way to serialize the implementations of core interfaces.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+final class GraphSONSerializersV1d0 {
+
+ private GraphSONSerializersV1d0() {}
+
+ final static class VertexPropertyJacksonSerializer extends StdSerializer<VertexProperty> {
+
+ private final boolean normalize;
+
+ public VertexPropertyJacksonSerializer(final boolean normalize) {
+ super(VertexProperty.class);
+ this.normalize = normalize;
+ }
+
+ @Override
+ public void serialize(final VertexProperty property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ serializerVertexProperty(property, jsonGenerator, serializerProvider, null, normalize, true);
+ }
+
+ @Override
+ public void serializeWithType(final VertexProperty property, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ serializerVertexProperty(property, jsonGenerator, serializerProvider, typeSerializer, normalize, true);
+ }
+ }
+
+ final static class PropertyJacksonSerializer extends StdSerializer<Property> {
+
+ public PropertyJacksonSerializer() {
+ super(Property.class);
+ }
+
+ @Override
+ public void serialize(final Property property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ ser(property, jsonGenerator, serializerProvider, null);
+ }
+ @Override
+ public void serializeWithType(final Property property, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ ser(property, jsonGenerator, serializerProvider, typeSerializer);
+ }
+
+ private static void ser(final Property property, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ jsonGenerator.writeStartObject();
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ serializerProvider.defaultSerializeField(GraphSONTokens.KEY, property.key(), jsonGenerator);
+ serializerProvider.defaultSerializeField(GraphSONTokens.VALUE, property.value(), jsonGenerator);
+ jsonGenerator.writeEndObject();
+ }
+ }
+
+ final static class EdgeJacksonSerializer extends StdSerializer<Edge> {
+
+ private final boolean normalize;
+
+ public EdgeJacksonSerializer(final boolean normalize) {
+ super(Edge.class);
+ this.normalize = normalize;
+ }
+
+
+ @Override
+ public void serialize(final Edge edge, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ ser(edge, jsonGenerator, serializerProvider, null);
+ }
+ @Override
+ public void serializeWithType(final Edge edge, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ ser(edge, jsonGenerator, serializerProvider, typeSerializer);
+ }
+
+ private void ser(final Edge edge, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ jsonGenerator.writeStartObject();
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ GraphSONUtil.writeWithType(GraphSONTokens.ID, edge.id(), jsonGenerator, serializerProvider, typeSerializer);
+
+ jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label());
+ jsonGenerator.writeStringField(GraphSONTokens.TYPE, GraphSONTokens.EDGE);
+ jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, edge.inVertex().label());
+ jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, edge.outVertex().label());
+ GraphSONUtil.writeWithType(GraphSONTokens.IN, edge.inVertex().id(), jsonGenerator, serializerProvider, typeSerializer);
+ GraphSONUtil.writeWithType(GraphSONTokens.OUT, edge.outVertex().id(), jsonGenerator, serializerProvider, typeSerializer);
+ writeProperties(edge, jsonGenerator, serializerProvider, typeSerializer);
+ jsonGenerator.writeEndObject();
+ }
+
+ private void writeProperties(final Edge edge, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider,
+ final TypeSerializer typeSerializer) throws IOException {
+ final Iterator<Property<Object>> elementProperties = normalize ?
+ IteratorUtils.list(edge.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : edge.properties();
+ if (elementProperties.hasNext()) {
+ jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ while (elementProperties.hasNext()) {
+ final Property<Object> elementProperty = elementProperties.next();
+ GraphSONUtil.writeWithType(elementProperty.key(), elementProperty.value(), jsonGenerator, serializerProvider, typeSerializer);
+ }
+ jsonGenerator.writeEndObject();
+ }
+ }
+
+ }
+
+ final static class VertexJacksonSerializer extends StdSerializer<Vertex> {
+
+ private final boolean normalize;
+
+ public VertexJacksonSerializer(final boolean normalize) {
+ super(Vertex.class);
+ this.normalize = normalize;
+ }
+
+ @Override
+ public void serialize(final Vertex vertex, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ ser(vertex, jsonGenerator, serializerProvider, null);
+ }
+
+ @Override
+ public void serializeWithType(final Vertex vertex, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ ser(vertex, jsonGenerator, serializerProvider, typeSerializer);
+
+ }
+
+ private void ser(final Vertex vertex, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
+ throws IOException {
+ jsonGenerator.writeStartObject();
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ GraphSONUtil.writeWithType(GraphSONTokens.ID, vertex.id(), jsonGenerator, serializerProvider, typeSerializer);
+ jsonGenerator.writeStringField(GraphSONTokens.LABEL, vertex.label());
+ jsonGenerator.writeStringField(GraphSONTokens.TYPE, GraphSONTokens.VERTEX);
+ writeProperties(vertex, jsonGenerator, serializerProvider, typeSerializer);
+ jsonGenerator.writeEndObject();
+ }
+
+ private void writeProperties(final Vertex vertex, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+
+ final List<String> keys = normalize ?
+ IteratorUtils.list(vertex.keys().iterator(), Comparator.naturalOrder()) : new ArrayList<>(vertex.keys());
+ for (String key : keys) {
+ final Iterator<VertexProperty<Object>> vertexProperties = normalize ?
+ IteratorUtils.list(vertex.properties(key), Comparators.PROPERTY_COMPARATOR).iterator() : vertex.properties(key);
+
+ if (vertexProperties.hasNext()) {
+ jsonGenerator.writeArrayFieldStart(key);
+ if (typeSerializer != null) {
+ jsonGenerator.writeString(ArrayList.class.getName());
+ jsonGenerator.writeStartArray();
+ }
+
+ while (vertexProperties.hasNext()) {
+ serializerVertexProperty(vertexProperties.next(), jsonGenerator, serializerProvider, typeSerializer, normalize, false);
+ }
+
+ jsonGenerator.writeEndArray();
+ if (typeSerializer != null) jsonGenerator.writeEndArray();
+ }
+ }
+
+ jsonGenerator.writeEndObject();
+ }
+
+ }
+
+ final static class PathJacksonSerializer extends StdSerializer<Path> {
+
+ public PathJacksonSerializer() {
+ super(Path.class);
+ }
+ @Override
+ public void serialize(final Path path, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException, JsonGenerationException {
+ ser(path, jsonGenerator, null);
+ }
+
+ @Override
+ public void serializeWithType(final Path path, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
+ throws IOException, JsonProcessingException {
+ ser(path, jsonGenerator, typeSerializer);
+ }
+ private static void ser(final Path path, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer)
+ throws IOException {
+ jsonGenerator.writeStartObject();
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ jsonGenerator.writeObjectField(GraphSONTokens.LABELS, path.labels());
+ jsonGenerator.writeObjectField(GraphSONTokens.OBJECTS, path.objects());
+ jsonGenerator.writeEndObject();
+ }
+
+ }
+
+ final static class TreeJacksonSerializer extends StdSerializer<Tree> {
+
+ public TreeJacksonSerializer() {
+ super(Tree.class);
+ }
+
+ @Override
+ public void serialize(final Tree tree, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
+ ser(tree, jsonGenerator, null);
+ }
+
+ @Override
+ public void serializeWithType(final Tree tree, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
+ throws IOException, JsonProcessingException {
+ ser(tree, jsonGenerator, typeSerializer);
+ }
+
+ private static void ser(final Tree tree, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer)
+ throws IOException {
+ jsonGenerator.writeStartObject();
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+
+ Set<Map.Entry<Element, Tree>> set = tree.entrySet();
+ for(Map.Entry<Element, Tree> entry : set)
+ {
+ jsonGenerator.writeObjectFieldStart(entry.getKey().id().toString());
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ jsonGenerator.writeObjectField(GraphSONTokens.KEY, entry.getKey());
+ jsonGenerator.writeObjectField(GraphSONTokens.VALUE, entry.getValue());
+ jsonGenerator.writeEndObject();
+ }
+ jsonGenerator.writeEndObject();
+ }
+ }
+
+ /**
+ * Maps in the JVM can have {@link Object} as a key, but in JSON they must be a {@link String}.
+ */
+ final static class GraphSONKeySerializer extends StdKeySerializer {
+
+ @Override
+ public void serialize(final Object o, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException {
+ ser(o, jsonGenerator, serializerProvider);
+ }
+ @Override
+ public void serializeWithType(final Object o, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ ser(o, jsonGenerator, serializerProvider);
+ }
+
+ private void ser(final Object o, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider) throws IOException {
+ if (Element.class.isAssignableFrom(o.getClass()))
+ jsonGenerator.writeFieldName((((Element) o).id()).toString());
+ else
+ super.serialize(o, jsonGenerator, serializerProvider);
+ }
+ }
+
+ final static class TraversalExplanationJacksonSerializer extends StdSerializer<TraversalExplanation> {
+ public TraversalExplanationJacksonSerializer() {
+ super(TraversalExplanation.class);
+ }
+
+ @Override
+ public void serialize(final TraversalExplanation traversalExplanation, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider) throws IOException {
+ ser(traversalExplanation, jsonGenerator);
+ }
+
+ @Override
+ public void serializeWithType(final TraversalExplanation value, final JsonGenerator gen,
+ final SerializerProvider serializers, final TypeSerializer typeSer) throws IOException {
+ ser(value, gen);
+ }
+
+ public void ser(final TraversalExplanation te, final JsonGenerator jsonGenerator) throws IOException {
+ final Map<String, Object> m = new HashMap<>();
+ m.put(GraphSONTokens.ORIGINAL, getStepsAsList(te.getOriginalTraversal()));
+
+ final List<Pair<TraversalStrategy, Traversal.Admin<?,?>>> strategyTraversals = te.getStrategyTraversals();
+
+ final List<Map<String,Object>> intermediates = new ArrayList<>();
+ for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : strategyTraversals) {
+ final Map<String,Object> intermediate = new HashMap<>();
+ intermediate.put(GraphSONTokens.STRATEGY, pair.getValue0().toString());
+ intermediate.put(GraphSONTokens.CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName());
+ intermediate.put(GraphSONTokens.TRAVERSAL, getStepsAsList(pair.getValue1()));
+ intermediates.add(intermediate);
+ }
+ m.put(GraphSONTokens.INTERMEDIATE, intermediates);
+
+ if (strategyTraversals.isEmpty())
+ m.put(GraphSONTokens.FINAL, getStepsAsList(te.getOriginalTraversal()));
+ else
+ m.put(GraphSONTokens.FINAL, getStepsAsList(strategyTraversals.get(strategyTraversals.size() - 1).getValue1()));
+
+ jsonGenerator.writeObject(m);
+ }
+
+ private List<String> getStepsAsList(final Traversal.Admin<?,?> t) {
+ final List<String> steps = new ArrayList<>();
+ t.getSteps().iterator().forEachRemaining(s -> steps.add(s.toString()));
+ return steps;
+ }
+ }
+
+ final static class TraversalMetricsJacksonSerializer extends StdSerializer<TraversalMetrics> {
+ public TraversalMetricsJacksonSerializer() {
+ super(TraversalMetrics.class);
+ }
+
+ @Override
+ public void serialize(final TraversalMetrics property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ serializeInternal(property, jsonGenerator);
+ }
+
+ @Override
+ public void serializeWithType(final TraversalMetrics property, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ serializeInternal(property, jsonGenerator);
+ }
+
+ private static void serializeInternal(final TraversalMetrics traversalMetrics, final JsonGenerator jsonGenerator) throws IOException {
+ // creation of the map enables all the fields to be properly written with their type if required
+ final Map<String, Object> m = new HashMap<>();
+ m.put(GraphSONTokens.DURATION, traversalMetrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
+ final List<Map<String, Object>> metrics = new ArrayList<>();
+ traversalMetrics.getMetrics().forEach(it -> metrics.add(metricsToMap(it)));
+ m.put(GraphSONTokens.METRICS, metrics);
+
+ jsonGenerator.writeObject(m);
+ }
+
+ private static Map<String, Object> metricsToMap(final Metrics metrics) {
+ final Map<String, Object> m = new HashMap<>();
+ m.put(GraphSONTokens.ID, metrics.getId());
+ m.put(GraphSONTokens.NAME, metrics.getName());
+ m.put(GraphSONTokens.COUNTS, metrics.getCounts());
+ m.put(GraphSONTokens.DURATION, metrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
+
+ if (!metrics.getAnnotations().isEmpty()) {
+ m.put(GraphSONTokens.ANNOTATIONS, metrics.getAnnotations());
+ }
+
+ if (!metrics.getNested().isEmpty()) {
+ final List<Map<String, Object>> nested = new ArrayList<>();
+ metrics.getNested().forEach(it -> nested.add(metricsToMap(it)));
+ m.put(GraphSONTokens.METRICS, nested);
+ }
+ return m;
+ }
+ }
+
+ private static void serializerVertexProperty(final VertexProperty property, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider,
+ final TypeSerializer typeSerializer, final boolean normalize,
+ final boolean includeLabel) throws IOException {
+ jsonGenerator.writeStartObject();
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ GraphSONUtil.writeWithType(GraphSONTokens.ID, property.id(), jsonGenerator, serializerProvider, typeSerializer);
+ GraphSONUtil.writeWithType(GraphSONTokens.VALUE, property.value(), jsonGenerator, serializerProvider, typeSerializer);
+ if (includeLabel) jsonGenerator.writeStringField(GraphSONTokens.LABEL, property.label());
+ tryWriteMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
+ jsonGenerator.writeEndObject();
+ }
+
+ private static void tryWriteMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider,
+ final TypeSerializer typeSerializer, final boolean normalize) throws IOException {
+ // when "detached" you can't check features of the graph it detached from so it has to be
+ // treated differently from a regular VertexProperty implementation.
+ if (property instanceof DetachedVertexProperty) {
+ // only write meta properties key if they exist
+ if (property.properties().hasNext()) {
+ writeMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
+ }
+ } else {
+ // still attached - so we can check the features to see if it's worth even trying to write the
+ // meta properties key
+ if (property.graph().features().vertex().supportsMetaProperties() && property.properties().hasNext()) {
+ writeMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
+ }
+ }
+ }
+
+ private static void writeMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider,
+ final TypeSerializer typeSerializer, final boolean normalize) throws IOException {
+ jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ final Iterator<Property<Object>> metaProperties = normalize ?
+ IteratorUtils.list(( Iterator<Property<Object>>) property.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : property.properties();
+ while (metaProperties.hasNext()) {
+ final Property<Object> metaProperty = metaProperties.next();
+ GraphSONUtil.writeWithType(metaProperty.key(), metaProperty.value(), jsonGenerator, serializerProvider, typeSerializer);
+ }
+ jsonGenerator.writeEndObject();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
new file mode 100644
index 0000000..a689a11
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
@@ -0,0 +1,580 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.MutablePath;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalMetrics;
+import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
+import org.apache.tinkerpop.gremlin.process.traversal.util.MutableMetrics;
+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.Element;
+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.Comparators;
+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.DetachedVertex;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
+import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
+import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.deser.std.StdDeserializer;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdKeySerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdScalarSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+import org.javatuples.Pair;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+import static org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONUtil.safeWriteObjectField;
+
+/**
+ * GraphSON serializers for graph-based objects such as vertices, edges, properties, and paths. These serializers
+ * present a generalized way to serialize the implementations of core interfaces.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class GraphSONSerializersV2d0 {
+
+ private GraphSONSerializersV2d0() {
+ }
+
+ ////////////////////////////// SERIALIZERS /////////////////////////////////
+
+ final static class VertexJacksonSerializer extends StdScalarSerializer<Vertex> {
+
+ private final boolean normalize;
+
+ public VertexJacksonSerializer(final boolean normalize) {
+ super(Vertex.class);
+ this.normalize = normalize;
+ }
+
+ @Override
+ public void serialize(final Vertex vertex, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ jsonGenerator.writeStartObject();
+
+ jsonGenerator.writeObjectField(GraphSONTokens.ID, vertex.id());
+ jsonGenerator.writeStringField(GraphSONTokens.LABEL, vertex.label());
+ writeProperties(vertex, jsonGenerator);
+
+ jsonGenerator.writeEndObject();
+
+ }
+
+ private void writeProperties(final Vertex vertex, final JsonGenerator jsonGenerator) throws IOException {
+ if (vertex.keys().size() == 0)
+ return;
+ jsonGenerator.writeFieldName(GraphSONTokens.PROPERTIES);
+ jsonGenerator.writeStartObject();
+
+ final List<String> keys = normalize ?
+ IteratorUtils.list(vertex.keys().iterator(), Comparator.naturalOrder()) : new ArrayList<>(vertex.keys());
+ for (String key : keys) {
+ final Iterator<VertexProperty<Object>> vertexProperties = normalize ?
+ IteratorUtils.list(vertex.properties(key), Comparators.PROPERTY_COMPARATOR).iterator() : vertex.properties(key);
+ if (vertexProperties.hasNext()) {
+ jsonGenerator.writeFieldName(key);
+
+ jsonGenerator.writeStartArray();
+ while (vertexProperties.hasNext()) {
+ jsonGenerator.writeObject(vertexProperties.next());
+ }
+ jsonGenerator.writeEndArray();
+ }
+ }
+
+ jsonGenerator.writeEndObject();
+ }
+ }
+
+ final static class EdgeJacksonSerializer extends StdScalarSerializer<Edge> {
+
+ private final boolean normalize;
+
+ public EdgeJacksonSerializer(final boolean normalize) {
+ super(Edge.class);
+ this.normalize = normalize;
+ }
+
+
+ @Override
+ public void serialize(final Edge edge, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ jsonGenerator.writeStartObject();
+
+ jsonGenerator.writeObjectField(GraphSONTokens.ID, edge.id());
+ jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label());
+ jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, edge.inVertex().label());
+ jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, edge.outVertex().label());
+ jsonGenerator.writeObjectField(GraphSONTokens.IN, edge.inVertex().id());
+ jsonGenerator.writeObjectField(GraphSONTokens.OUT, edge.outVertex().id());
+ writeProperties(edge, jsonGenerator);
+
+ jsonGenerator.writeEndObject();
+ }
+
+ private void writeProperties(final Edge edge, final JsonGenerator jsonGenerator) throws IOException {
+ final Iterator<Property<Object>> elementProperties = normalize ?
+ IteratorUtils.list(edge.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : edge.properties();
+ if (elementProperties.hasNext()) {
+ jsonGenerator.writeFieldName(GraphSONTokens.PROPERTIES);
+
+ jsonGenerator.writeStartObject();
+ elementProperties.forEachRemaining(
+ prop -> safeWriteObjectField(jsonGenerator, prop.key(), prop)
+ );
+ jsonGenerator.writeEndObject();
+ }
+ }
+ }
+
+ final static class PropertyJacksonSerializer extends StdScalarSerializer<Property> {
+
+ public PropertyJacksonSerializer() {
+ super(Property.class);
+ }
+
+ @Override
+ public void serialize(final Property property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ jsonGenerator.writeStartObject();
+ jsonGenerator.writeObjectField(GraphSONTokens.KEY, property.key());
+ jsonGenerator.writeObjectField(GraphSONTokens.VALUE, property.value());
+ jsonGenerator.writeEndObject();
+ }
+ }
+
+ final static class VertexPropertyJacksonSerializer extends StdScalarSerializer<VertexProperty> {
+
+ private final boolean normalize;
+ private final boolean includeLabel;
+
+ public VertexPropertyJacksonSerializer(final boolean normalize, final boolean includeLabel) {
+ super(VertexProperty.class);
+ this.normalize = normalize;
+ this.includeLabel = includeLabel;
+ }
+
+ @Override
+ public void serialize(final VertexProperty property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ jsonGenerator.writeStartObject();
+
+ jsonGenerator.writeObjectField(GraphSONTokens.ID, property.id());
+ jsonGenerator.writeObjectField(GraphSONTokens.VALUE, property.value());
+ if (includeLabel)
+ jsonGenerator.writeStringField(GraphSONTokens.LABEL, property.label());
+ tryWriteMetaProperties(property, jsonGenerator, normalize);
+
+ jsonGenerator.writeEndObject();
+ }
+
+ private static void tryWriteMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
+ final boolean normalize) throws IOException {
+ // when "detached" you can't check features of the graph it detached from so it has to be
+ // treated differently from a regular VertexProperty implementation.
+ if (property instanceof DetachedVertexProperty) {
+ // only write meta properties key if they exist
+ if (property.properties().hasNext()) {
+ writeMetaProperties(property, jsonGenerator, normalize);
+ }
+ } else {
+ // still attached - so we can check the features to see if it's worth even trying to write the
+ // meta properties key
+ if (property.graph().features().vertex().supportsMetaProperties() && property.properties().hasNext()) {
+ writeMetaProperties(property, jsonGenerator, normalize);
+ }
+ }
+ }
+
+ private static void writeMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
+ final boolean normalize) throws IOException {
+ jsonGenerator.writeFieldName(GraphSONTokens.PROPERTIES);
+ jsonGenerator.writeStartObject();
+
+ final Iterator<Property<Object>> metaProperties = normalize ?
+ IteratorUtils.list((Iterator<Property<Object>>) property.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : property.properties();
+ while (metaProperties.hasNext()) {
+ final Property<Object> metaProperty = metaProperties.next();
+ jsonGenerator.writeObjectField(metaProperty.key(), metaProperty.value());
+ }
+
+ jsonGenerator.writeEndObject();
+ }
+
+
+ }
+
+ final static class PathJacksonSerializer extends StdScalarSerializer<Path> {
+
+ public PathJacksonSerializer() {
+ super(Path.class);
+ }
+
+ @Override
+ public void serialize(final Path path, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException, JsonGenerationException {
+ jsonGenerator.writeStartObject();
+
+ jsonGenerator.writeObjectField(GraphSONTokens.LABELS, path.labels());
+ jsonGenerator.writeObjectField(GraphSONTokens.OBJECTS, path.objects());
+
+ jsonGenerator.writeEndObject();
+ }
+ }
+
+ final static class TreeJacksonSerializer extends StdScalarSerializer<Tree> {
+
+ public TreeJacksonSerializer() {
+ super(Tree.class);
+ }
+
+ @Override
+ public void serialize(final Tree tree, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
+ jsonGenerator.writeStartArray();
+ Set<Map.Entry<Element, Tree>> set = tree.entrySet();
+ for (Map.Entry<Element, Tree> entry : set) {
+ jsonGenerator.writeStartObject();
+ jsonGenerator.writeObjectField(GraphSONTokens.KEY, entry.getKey());
+ jsonGenerator.writeObjectField(GraphSONTokens.VALUE, entry.getValue());
+ jsonGenerator.writeEndObject();
+ }
+ jsonGenerator.writeEndArray();
+ }
+ }
+
+ final static class TraversalExplanationJacksonSerializer extends StdSerializer<TraversalExplanation> {
+ public TraversalExplanationJacksonSerializer() {
+ super(TraversalExplanation.class);
+ }
+
+ @Override
+ public void serialize(final TraversalExplanation traversalExplanation, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider) throws IOException {
+ final Map<String, Object> m = new HashMap<>();
+ m.put(GraphSONTokens.ORIGINAL, getStepsAsList(traversalExplanation.getOriginalTraversal()));
+
+ final List<Pair<TraversalStrategy, Traversal.Admin<?, ?>>> strategyTraversals = traversalExplanation.getStrategyTraversals();
+
+ final List<Map<String, Object>> intermediates = new ArrayList<>();
+ for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : strategyTraversals) {
+ final Map<String, Object> intermediate = new HashMap<>();
+ intermediate.put(GraphSONTokens.STRATEGY, pair.getValue0().toString());
+ intermediate.put(GraphSONTokens.CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName());
+ intermediate.put(GraphSONTokens.TRAVERSAL, getStepsAsList(pair.getValue1()));
+ intermediates.add(intermediate);
+ }
+ m.put(GraphSONTokens.INTERMEDIATE, intermediates);
+
+ if (strategyTraversals.isEmpty())
+ m.put(GraphSONTokens.FINAL, getStepsAsList(traversalExplanation.getOriginalTraversal()));
+ else
+ m.put(GraphSONTokens.FINAL, getStepsAsList(strategyTraversals.get(strategyTraversals.size() - 1).getValue1()));
+
+ jsonGenerator.writeObject(m);
+ }
+
+ private List<String> getStepsAsList(final Traversal.Admin<?, ?> t) {
+ final List<String> steps = new ArrayList<>();
+ t.getSteps().iterator().forEachRemaining(s -> steps.add(s.toString()));
+ return steps;
+ }
+ }
+
+ final static class IntegerGraphSONSerializer extends StdScalarSerializer<Integer> {
+ public IntegerGraphSONSerializer() {
+ super(Integer.class);
+ }
+
+ @Override
+ public void serialize(Integer integer, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+ jsonGenerator.writeNumber(((Integer) integer).intValue());
+ }
+ }
+
+ final static class DoubleGraphSONSerializer extends StdScalarSerializer<Double> {
+ public DoubleGraphSONSerializer() {
+ super(Double.class);
+ }
+
+ @Override
+ public void serialize(Double doubleValue, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+ jsonGenerator.writeNumber(doubleValue);
+ }
+ }
+
+ final static class TraversalMetricsJacksonSerializer extends StdScalarSerializer<TraversalMetrics> {
+ public TraversalMetricsJacksonSerializer() {
+ super(TraversalMetrics.class);
+ }
+
+ @Override
+ public void serialize(final TraversalMetrics traversalMetrics, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ // creation of the map enables all the fields to be properly written with their type if required
+ final Map<String, Object> m = new HashMap<>();
+ m.put(GraphSONTokens.DURATION, traversalMetrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
+ final List<Metrics> metrics = new ArrayList<>();
+ metrics.addAll(traversalMetrics.getMetrics());
+ m.put(GraphSONTokens.METRICS, metrics);
+
+ jsonGenerator.writeObject(m);
+ }
+ }
+
+ final static class MetricsJacksonSerializer extends StdScalarSerializer<Metrics> {
+ public MetricsJacksonSerializer() {
+ super(Metrics.class);
+ }
+
+ @Override
+ public void serialize(Metrics metrics, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+ final Map<String, Object> m = new HashMap<>();
+ m.put(GraphSONTokens.ID, metrics.getId());
+ m.put(GraphSONTokens.NAME, metrics.getName());
+ m.put(GraphSONTokens.COUNTS, metrics.getCounts());
+ m.put(GraphSONTokens.DURATION, metrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
+
+ if (!metrics.getAnnotations().isEmpty()) {
+ m.put(GraphSONTokens.ANNOTATIONS, metrics.getAnnotations());
+ }
+ if (!metrics.getNested().isEmpty()) {
+ final List<Metrics> nested = new ArrayList<>();
+ metrics.getNested().forEach(it -> nested.add(it));
+ m.put(GraphSONTokens.METRICS, nested);
+ }
+ jsonGenerator.writeObject(m);
+ }
+ }
+
+
+ /**
+ * Maps in the JVM can have {@link Object} as a key, but in JSON they must be a {@link String}.
+ */
+ final static class GraphSONKeySerializer extends StdKeySerializer {
+
+ @Override
+ public void serialize(final Object o, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException {
+ ser(o, jsonGenerator, serializerProvider);
+ }
+
+ @Override
+ public void serializeWithType(final Object o, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ ser(o, jsonGenerator, serializerProvider);
+ }
+
+ private void ser(final Object o, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider) throws IOException {
+ if (Element.class.isAssignableFrom(o.getClass()))
+ jsonGenerator.writeFieldName((((Element) o).id()).toString());
+ else
+ super.serialize(o, jsonGenerator, serializerProvider);
+ }
+ }
+
+
+ //////////////////////////// DESERIALIZERS ///////////////////////////
+
+ abstract static class AbstractGraphObjectDeserializer<T> extends StdDeserializer<T> {
+
+ protected AbstractGraphObjectDeserializer(Class<T> clazz) {
+ super(clazz);
+ }
+
+ @Override
+ public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+
+ jsonParser.nextToken();
+ // This will automatically parse all typed stuff.
+ Map<String, Object> mapData = deserializationContext.readValue(jsonParser, Map.class);
+
+ return createObject(mapData);
+ }
+
+ abstract T createObject(Map<String, Object> data);
+ }
+
+
+ static class VertexJacksonDeserializer extends AbstractGraphObjectDeserializer<Vertex> {
+
+ public VertexJacksonDeserializer() {
+ super(Vertex.class);
+ }
+
+ @Override
+ Vertex createObject(Map<String, Object> vertexData) {
+ return new DetachedVertex(
+ vertexData.get(GraphSONTokens.ID),
+ vertexData.get(GraphSONTokens.LABEL).toString(),
+ (Map<String, Object>) vertexData.get(GraphSONTokens.PROPERTIES)
+ );
+ }
+ }
+
+ static class EdgeJacksonDeserializer extends AbstractGraphObjectDeserializer<Edge> {
+
+ public EdgeJacksonDeserializer() {
+ super(Edge.class);
+ }
+
+ @Override
+ Edge createObject(Map<String, Object> edgeData) {
+ return new DetachedEdge(
+ edgeData.get(GraphSONTokens.ID),
+ edgeData.get(GraphSONTokens.LABEL).toString(),
+ (Map) edgeData.get(GraphSONTokens.PROPERTIES),
+ Pair.with(edgeData.get(GraphSONTokens.OUT), edgeData.get(GraphSONTokens.OUT_LABEL).toString()),
+ Pair.with(edgeData.get(GraphSONTokens.IN), edgeData.get(GraphSONTokens.IN_LABEL).toString())
+ );
+ }
+ }
+
+ static class PropertyJacksonDeserializer extends AbstractGraphObjectDeserializer<Property> {
+
+ public PropertyJacksonDeserializer() {
+ super(Property.class);
+ }
+
+ @Override
+ Property createObject(Map<String, Object> propData) {
+ return new DetachedProperty(
+ (String) propData.get(GraphSONTokens.KEY),
+ propData.get(GraphSONTokens.VALUE));
+ }
+ }
+
+ static class PathJacksonDeserializer extends AbstractGraphObjectDeserializer<Path> {
+
+ public PathJacksonDeserializer() {
+ super(Path.class);
+ }
+
+ @Override
+ Path createObject(Map<String, Object> pathData) {
+ Path p = MutablePath.make();
+
+ List labels = (List) pathData.get(GraphSONTokens.LABELS);
+ List objects = (List) pathData.get(GraphSONTokens.OBJECTS);
+
+ for (int i = 0; i < objects.size(); i++) {
+ p.extend(objects.get(i), new HashSet((List) labels.get(i)));
+ }
+ return p;
+ }
+ }
+
+ static class VertexPropertyJacksonDeserializer extends AbstractGraphObjectDeserializer<VertexProperty> {
+
+ protected VertexPropertyJacksonDeserializer() {
+ super(VertexProperty.class);
+ }
+
+ @Override
+ VertexProperty createObject(Map<String, Object> propData) {
+ return new DetachedVertexProperty(
+ propData.get(GraphSONTokens.ID),
+ (String) propData.get(GraphSONTokens.LABEL),
+ propData.get(GraphSONTokens.VALUE),
+ (Map) propData.get(GraphSONTokens.PROPERTIES)
+ );
+ }
+ }
+
+ static class MetricsJacksonDeserializer extends AbstractGraphObjectDeserializer<Metrics> {
+ public MetricsJacksonDeserializer() {
+ super(Metrics.class);
+ }
+
+ @Override
+ Metrics createObject(Map<String, Object> metricsData) {
+ MutableMetrics m = new MutableMetrics((String)metricsData.get(GraphSONTokens.ID), (String)metricsData.get(GraphSONTokens.NAME));
+
+ m.setDuration(Math.round((Double) metricsData.get(GraphSONTokens.DURATION) * 1000000), TimeUnit.NANOSECONDS);
+ for (Map.Entry<String, Long> count : ((Map<String, Long>)metricsData.getOrDefault(GraphSONTokens.COUNTS, new HashMap<>(0))).entrySet()) {
+ m.setCount(count.getKey(), count.getValue());
+ }
+ for (Map.Entry<String, Long> count : ((Map<String, Long>) metricsData.getOrDefault(GraphSONTokens.ANNOTATIONS, new HashMap<>(0))).entrySet()) {
+ m.setAnnotation(count.getKey(), count.getValue());
+ }
+ for (MutableMetrics nested : (List<MutableMetrics>)metricsData.getOrDefault(GraphSONTokens.METRICS, new ArrayList<>(0))) {
+ m.addNested(nested);
+ }
+ return m;
+ }
+ }
+
+ static class TraversalMetricsJacksonDeserializer extends AbstractGraphObjectDeserializer<TraversalMetrics> {
+
+ public TraversalMetricsJacksonDeserializer() {
+ super(TraversalMetrics.class);
+ }
+
+ @Override
+ TraversalMetrics createObject(Map<String, Object> traversalMetricsData) {
+ return new DefaultTraversalMetrics(
+ Math.round((Double) traversalMetricsData.get(GraphSONTokens.DURATION) * 1000000),
+ (List<MutableMetrics>) traversalMetricsData.get(GraphSONTokens.METRICS)
+ );
+ }
+ }
+
+ static class TreeJacksonDeserializer extends StdDeserializer<Tree> {
+
+ public TreeJacksonDeserializer() {
+ super(Tree.class);
+ }
+
+ @Override
+ public Tree deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+ List<Map> data = deserializationContext.readValue(jsonParser, List.class);
+ Tree t = new Tree();
+ for (Map<String, Object> entry : data) {
+ t.put(entry.get(GraphSONTokens.KEY), entry.get(GraphSONTokens.VALUE));
+ }
+ return t;
+ }
+ }
+}
+
+
+
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
index a91c2d4..e24cbab 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
@@ -26,6 +26,8 @@ public final class GraphSONTokens {
private GraphSONTokens() {}
public static final String CLASS = "@class";
+ public static final String VALUETYPE = "@type";
+ public static final String VALUEPROP = "@value";
public static final String ID = "id";
public static final String TYPE = "type";
public static final String VALUE = "value";
@@ -44,6 +46,7 @@ public final class GraphSONTokens {
public static final String OBJECTS = "objects";
public static final String IN_LABEL = "inVLabel";
public static final String OUT_LABEL = "outVLabel";
+ public static final String GREMLIN_TYPE_NAMESPACE = "gremlin";
// TraversalExplanation Tokens
public static final String ORIGINAL = "original";
[05/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-typed.json
index 9679502..3806d5e 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-typed.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-typed.json
@@ -1,257 +1,257 @@
{"@class":"java.util.HashMap","id":1,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":3059,"outV":153,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":276,"outV":5,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3704,"outV":3,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4383,"outV":62,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":0,"inV":2,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1,"inV":3,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2,"inV":4,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3,"inV":5,"properties":{"@class":"j
ava.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4,"inV":6,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7612,"inV":340}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7611,"inV":527}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",0],"value":"HEY BO DIDDLEY"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",2],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",1],"value":5}]]}}
{"@class":"java.util.HashMap","id":2,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":0,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":323,"outV":34,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":6190,"inV":123,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6191,"inV":50,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7666,"inV":525}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7665,"inV":525}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",3],"value":"IM A MAN"}]],"songType":["java.util.ArrayList",[{"@class":"j
ava.util.HashMap","id":["java.lang.Long",5],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",4],"value":1}]]}}
-{"@class":"java.util.HashMap","id":3,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"outV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2051,"outV":92,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":1412,"outV":83,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":6669,"outV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1166,"outV":26,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":6286,"outV":49,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":910,"outV":91,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":526,"outV":120,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap"
,"id":273,"outV":5,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":2194,"outV":235,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1684,"outV":124,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3221,"outV":63,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1941,"outV":148,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":2712,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6425,"outV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5787,"outV":76,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5148,"outV":125,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":6692,"outV":141,"properties":{"@c
lass":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6310,"outV":123,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6448,"outV":187,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":2225,"outV":226,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5042,"outV":209,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4789,"outV":114,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1464,"outV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2232,"outV":215,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4665,"outV":154,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2235,"outV":29,"properties":{"@class":"java.util.HashMap","weight":1
63}},{"@class":"java.util.HashMap","id":6208,"outV":319,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":706,"outV":206,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":835,"outV":171,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5188,"outV":99,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1862,"outV":94,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":6343,"outV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1735,"outV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4937,"outV":277,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3276,"outV":160,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id"
:3149,"outV":104,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1358,"outV":130,"properties":{"@class":"java.util.HashMap","weight":18}},{"@class":"java.util.HashMap","id":4304,"outV":110,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1105,"outV":59,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":722,"outV":80,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4182,"outV":54,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1499,"outV":164,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2397,"outV":179,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6623,"outV":127,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":351,"outV":178,"properties":{"@class
":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2018,"outV":149,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":7011,"outV":89,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5348,"outV":165,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2278,"outV":25,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":1255,"outV":27,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3048,"outV":153,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":5867,"outV":96,"properties":{"@class":"java.util.HashMap","weight":116}},{"@class":"java.util.HashMap","id":364,"outV":74,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":492,"outV":98,"properties":{"@class":"java.util.HashMap","weight":1}},{"@c
lass":"java.util.HashMap","id":3948,"outV":138,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":4335,"outV":62,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3312,"outV":252,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5745,"outV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4596,"outV":85,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5367,"outV":132,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":633,"outV":23,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":891,"outV":140,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5375,"outV":69,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6143,"out
V":289,"properties":{"@class":"java.util.HashMap","weight":3}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":3712,"inV":27,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3713,"inV":110,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3714,"inV":215,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3715,"inV":127,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3716,"inV":83,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3717,"inV":103,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3718,"inV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3719,"inV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"
java.util.HashMap","id":3720,"inV":25,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3721,"inV":125,"properties":{"@class":"java.util.HashMap","weight":54}},{"@class":"java.util.HashMap","id":3722,"inV":130,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":3723,"inV":141,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3724,"inV":145,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3725,"inV":319,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3726,"inV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3727,"inV":160,"properties":{"@class":"java.util.HashMap","weight":37}},{"@class":"java.util.HashMap","id":3728,"inV":70,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3729,"inV":123,"pr
operties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3730,"inV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3731,"inV":30,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3732,"inV":148,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3733,"inV":211,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3734,"inV":87,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":3735,"inV":164,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3736,"inV":64,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3737,"inV":320,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3738,"inV":61,"properties":{"@class":"java.util.HashMap","weigh
t":3}},{"@class":"java.util.HashMap","id":3739,"inV":210,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3740,"inV":50,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3741,"inV":128,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3742,"inV":315,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3743,"inV":261,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3744,"inV":213,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":3745,"inV":72,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3746,"inV":38,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3747,"inV":204,"properties":{"@class":"java.util.HashMap","weight":14}},{"@class":"java.util.HashMap","id":37
48,"inV":62,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3749,"inV":150,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":3750,"inV":309,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3751,"inV":131,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3752,"inV":151,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3753,"inV":321,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3754,"inV":90,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3755,"inV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3756,"inV":120,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3757,"inV":46,"properties":{"@class":"java.util.
HashMap","weight":5}},{"@class":"java.util.HashMap","id":3758,"inV":157,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3759,"inV":59,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3760,"inV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3761,"inV":86,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3762,"inV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3763,"inV":201,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3764,"inV":214,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3765,"inV":185,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3766,"inV":216,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.Has
hMap","id":3767,"inV":217,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3768,"inV":236,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3769,"inV":193,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3770,"inV":79,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3771,"inV":84,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3772,"inV":23,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3773,"inV":31,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3774,"inV":240,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3775,"inV":292,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3776,"inV":9,"properties":{"@class":
"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3777,"inV":259,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3694,"inV":5,"properties":{"@class":"java.util.HashMap","weight":57}},{"@class":"java.util.HashMap","id":3695,"inV":114,"properties":{"@class":"java.util.HashMap","weight":30}},{"@class":"java.util.HashMap","id":3696,"inV":74,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3697,"inV":78,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3698,"inV":10,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3699,"inV":26,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3700,"inV":153,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3701,"inV":4,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.
util.HashMap","id":3702,"inV":317,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3703,"inV":13,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3704,"inV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3705,"inV":21,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3706,"inV":57,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3707,"inV":122,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3708,"inV":318,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3709,"inV":94,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":3710,"inV":96,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3711,"inV":124,"properties":{"
@class":"java.util.HashMap","weight":15}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7808,"inV":351}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7807,"inV":671}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",6],"value":"NOT FADE AWAY"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",8],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",7],"value":531}]]}}
-{"@class":"java.util.HashMap","id":4,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":128,"outV":97,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1664,"outV":267,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4099,"outV":48,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1667,"outV":124,"properties":{"@class":"java.util.HashMap","weight":15}},{"@class":"java.util.HashMap","id":899,"outV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1156,"outV":26,"properties":{"@class":"java.util.HashMap","weight":16}},{"@class":"java.util.HashMap","id":773,"outV":122,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.Hash
Map","id":6534,"outV":242,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6664,"outV":12,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1032,"outV":73,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5129,"outV":222,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5387,"outV":69,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5517,"outV":43,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5006,"outV":30,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6030,"outV":204,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2063,"outV":92,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":915,"outV":91,"properties":{"@
class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6940,"outV":84,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":2464,"outV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5795,"outV":76,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3620,"outV":24,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4772,"outV":114,"properties":{"@class":"java.util.HashMap","weight":25}},{"@class":"java.util.HashMap","id":2982,"outV":14,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3367,"outV":184,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":2345,"outV":87,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2861,"outV":101,"properties":{"@class":"java.util.HashMap","weight":6}}
,{"@class":"java.util.HashMap","id":1840,"outV":275,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5425,"outV":102,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":180,"outV":70,"properties":{"@class":"java.util.HashMap","weight":46}},{"@class":"java.util.HashMap","id":2613,"outV":158,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5562,"outV":162,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5434,"outV":217,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1469,"outV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":446,"outV":38,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":2494,"outV":90,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":326
6,"outV":160,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":326,"outV":34,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6855,"outV":64,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":583,"outV":120,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":73,"outV":46,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":4425,"outV":212,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4941,"outV":86,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1613,"outV":210,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6350,"outV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3535,"outV":201,"properties":{"@class":"java
.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":980,"outV":11,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5206,"outV":99,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1494,"outV":164,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5847,"outV":61,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6490,"outV":187,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2781,"outV":15,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5600,"outV":42,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":353,"outV":74,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5474,"outV":79,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java
.util.HashMap","id":3811,"outV":88,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1891,"outV":103,"properties":{"@class":"java.util.HashMap","weight":19}},{"@class":"java.util.HashMap","id":5989,"outV":50,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":4327,"outV":110,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2538,"outV":57,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3050,"outV":153,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":4970,"outV":236,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2283,"outV":25,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":236,"outV":145,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6126,"outV":72,"
properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5232,"outV":214,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4594,"outV":85,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4084,"outV":109,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1652,"outV":213,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3701,"outV":3,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5621,"outV":22,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":629,"outV":23,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":7029,"outV":89,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5238,"outV":32,"properties":{"@class":"java.util.HashMap"
,"weight":3}},{"@class":"java.util.HashMap","id":2684,"outV":13,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":3325,"outV":268,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5120,"inV":40,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":5121,"inV":33,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5122,"inV":79,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5123,"inV":292,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5071,"inV":50,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5072,"inV":12,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":5073,"inV":18,"properties"
:{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5074,"inV":24,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5075,"inV":23,"properties":{"@class":"java.util.HashMap","weight":63}},{"@class":"java.util.HashMap","id":5076,"inV":13,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":5077,"inV":10,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5078,"inV":11,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5079,"inV":26,"properties":{"@class":"java.util.HashMap","weight":18}},{"@class":"java.util.HashMap","id":5080,"inV":22,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5081,"inV":16,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5082,"inV":49,"properties":{"@class":"java.util.HashMap","weight":1}},{"@cl
ass":"java.util.HashMap","id":5083,"inV":25,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5084,"inV":51,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5085,"inV":15,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5086,"inV":112,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5087,"inV":121,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5088,"inV":32,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":5089,"inV":68,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5090,"inV":120,"properties":{"@class":"java.util.HashMap","weight":77}},{"@class":"java.util.HashMap","id":5091,"inV":103,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5092,"inV":42,"pr
operties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5093,"inV":85,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5094,"inV":76,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":5095,"inV":181,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5096,"inV":14,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5097,"inV":122,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5098,"inV":153,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5099,"inV":96,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5100,"inV":82,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5101,"inV":110,"properties":{"@class":"java.util.HashMap","weight"
:1}},{"@class":"java.util.HashMap","id":5102,"inV":19,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5103,"inV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5104,"inV":84,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5105,"inV":88,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5106,"inV":97,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5107,"inV":114,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5108,"inV":30,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":5109,"inV":31,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":5110,"inV":69,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5111,"inV"
:127,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5112,"inV":60,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5113,"inV":39,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5114,"inV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5115,"inV":117,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5116,"inV":78,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5117,"inV":38,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5118,"inV":169,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5119,"inV":118,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7064,"inV":340}]],"writ
tenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7063,"inV":339}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",9],"value":"BERTHA"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",11],"value":"original"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",10],"value":394}]]}}
-{"@class":"java.util.HashMap","id":5,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":962,"outV":67,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":194,"outV":70,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":3,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5446,"outV":231,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":6344,"outV":21,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":6666,"outV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1738,"outV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1867,"outV":94,"properties":{"@class":"java.util.HashMap","weight":15}},{"@class":"java.util.HashMap
","id":4300,"outV":110,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":847,"outV":171,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2832,"outV":101,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6032,"outV":115,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1170,"outV":26,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5330,"outV":238,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1491,"outV":164,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1429,"outV":83,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3033,"outV":14,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6298,"outV":49,"properties":{"@
class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1373,"outV":130,"properties":{"@class":"java.util.HashMap","weight":11}},{"@class":"java.util.HashMap","id":4447,"outV":113,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5151,"outV":125,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":6431,"outV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5343,"outV":165,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1953,"outV":148,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":2274,"outV":25,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":1634,"outV":210,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":100,"outV":46,"properties":{"@class":"java.util.HashMap","weight"
:1}},{"@class":"java.util.HashMap","id":933,"outV":91,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2021,"outV":149,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6694,"outV":141,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4009,"outV":225,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":682,"outV":219,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3694,"outV":3,"properties":{"@class":"java.util.HashMap","weight":57}},{"@class":"java.util.HashMap","id":4718,"outV":186,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":3055,"outV":153,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":2736,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id"
:2480,"outV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5426,"outV":102,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6899,"outV":147,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5879,"outV":96,"properties":{"@class":"java.util.HashMap","weight":22}},{"@class":"java.util.HashMap","id":6201,"outV":319,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5370,"outV":132,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2236,"outV":29,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":4604,"outV":85,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":700,"outV":206,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5759,"outV":129,"properties":{"@class
":"java.util.HashMap","weight":6}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":273,"inV":3,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":274,"inV":26,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":275,"inV":114,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":276,"inV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":277,"inV":74,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":278,"inV":122,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":279,"inV":133,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":280,"inV":83,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":281,"inV":153,"
properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":282,"inV":159,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":283,"inV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":284,"inV":25,"properties":{"@class":"java.util.HashMap","weight":19}},{"@class":"java.util.HashMap","id":285,"inV":96,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":286,"inV":160,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":287,"inV":32,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":288,"inV":120,"properties":{"@class":"java.util.HashMap","weight":16}},{"@class":"java.util.HashMap","id":289,"inV":50,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":290,"inV":116,"properties":{"@class":"java.util.HashMap","weight":1}}
,{"@class":"java.util.HashMap","id":291,"inV":127,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":292,"inV":65,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":293,"inV":130,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":294,"inV":125,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":295,"inV":70,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":296,"inV":134,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":297,"inV":161,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":298,"inV":162,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":299,"inV":124,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":300,"inV":38,"pro
perties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":301,"inV":29,"properties":{"@class":"java.util.HashMap","weight":11}},{"@class":"java.util.HashMap","id":302,"inV":163,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":303,"inV":94,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":304,"inV":85,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":305,"inV":164,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":306,"inV":64,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":307,"inV":150,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":308,"inV":165,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":309,"inV":92,"properties":{"@class":"java.util.HashMap","weight":1}},{"@c
lass":"java.util.HashMap","id":310,"inV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":311,"inV":166,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7582,"inV":340}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7581,"inV":446}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",12],"value":"GOING DOWN THE ROAD FEELING BAD"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",14],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",13],"value":293}]]}}
+{"@class":"java.util.HashMap","id":3,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"outV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2051,"outV":92,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":1412,"outV":83,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":6669,"outV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":526,"outV":120,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":910,"outV":91,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1166,"outV":26,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":6286,"outV":49,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap"
,"id":273,"outV":5,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":2194,"outV":235,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1684,"outV":124,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1941,"outV":148,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3221,"outV":63,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2712,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6425,"outV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5787,"outV":76,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5148,"outV":125,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":6692,"outV":141,"properties":{"@c
lass":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6310,"outV":123,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6448,"outV":187,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":2225,"outV":226,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5042,"outV":209,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4789,"outV":114,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1464,"outV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2232,"outV":215,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4665,"outV":154,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2235,"outV":29,"properties":{"@class":"java.util.HashMap","weight":1
63}},{"@class":"java.util.HashMap","id":6208,"outV":319,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":706,"outV":206,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":835,"outV":171,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5188,"outV":99,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1862,"outV":94,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":1735,"outV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6343,"outV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4937,"outV":277,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3276,"outV":160,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id"
:3149,"outV":104,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1358,"outV":130,"properties":{"@class":"java.util.HashMap","weight":18}},{"@class":"java.util.HashMap","id":4304,"outV":110,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1105,"outV":59,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":722,"outV":80,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4182,"outV":54,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1499,"outV":164,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2397,"outV":179,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":351,"outV":178,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6623,"outV":127,"properties":{"@class
":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":2018,"outV":149,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":7011,"outV":89,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5348,"outV":165,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2278,"outV":25,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":1255,"outV":27,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3048,"outV":153,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":5867,"outV":96,"properties":{"@class":"java.util.HashMap","weight":116}},{"@class":"java.util.HashMap","id":364,"outV":74,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":492,"outV":98,"properties":{"@class":"java.util.HashMap","weight":1}},{"@c
lass":"java.util.HashMap","id":3948,"outV":138,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":4335,"outV":62,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3312,"outV":252,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5745,"outV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4596,"outV":85,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5367,"outV":132,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":633,"outV":23,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":891,"outV":140,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5375,"outV":69,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6143,"out
V":289,"properties":{"@class":"java.util.HashMap","weight":3}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":3712,"inV":27,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3713,"inV":110,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3714,"inV":215,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3715,"inV":127,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3716,"inV":83,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3717,"inV":103,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3718,"inV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3719,"inV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"
java.util.HashMap","id":3720,"inV":25,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3721,"inV":125,"properties":{"@class":"java.util.HashMap","weight":54}},{"@class":"java.util.HashMap","id":3722,"inV":130,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":3723,"inV":141,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3724,"inV":145,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3725,"inV":319,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3726,"inV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3727,"inV":160,"properties":{"@class":"java.util.HashMap","weight":37}},{"@class":"java.util.HashMap","id":3728,"inV":70,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3729,"inV":123,"pr
operties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3730,"inV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3731,"inV":30,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3732,"inV":148,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3733,"inV":211,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3734,"inV":87,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":3735,"inV":164,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3736,"inV":64,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3737,"inV":320,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3738,"inV":61,"properties":{"@class":"java.util.HashMap","weigh
t":3}},{"@class":"java.util.HashMap","id":3739,"inV":210,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3740,"inV":50,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3741,"inV":128,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3742,"inV":315,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3743,"inV":261,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3744,"inV":213,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":3745,"inV":72,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3746,"inV":38,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3747,"inV":204,"properties":{"@class":"java.util.HashMap","weight":14}},{"@class":"java.util.HashMap","id":37
48,"inV":62,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3749,"inV":150,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":3750,"inV":309,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3751,"inV":131,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3752,"inV":151,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3753,"inV":321,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3754,"inV":90,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3755,"inV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3756,"inV":120,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3757,"inV":46,"properties":{"@class":"java.util.
HashMap","weight":5}},{"@class":"java.util.HashMap","id":3758,"inV":157,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3759,"inV":59,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3760,"inV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3761,"inV":86,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3762,"inV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3763,"inV":201,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3764,"inV":214,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3765,"inV":185,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3766,"inV":216,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.Has
hMap","id":3767,"inV":217,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3768,"inV":236,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3769,"inV":193,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3770,"inV":79,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3771,"inV":84,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3772,"inV":23,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3773,"inV":31,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3774,"inV":240,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3775,"inV":292,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3776,"inV":9,"properties":{"@class":
"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3777,"inV":259,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3694,"inV":5,"properties":{"@class":"java.util.HashMap","weight":57}},{"@class":"java.util.HashMap","id":3695,"inV":114,"properties":{"@class":"java.util.HashMap","weight":30}},{"@class":"java.util.HashMap","id":3696,"inV":74,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3697,"inV":78,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3698,"inV":10,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3699,"inV":26,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3700,"inV":153,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3701,"inV":4,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.
util.HashMap","id":3702,"inV":317,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3703,"inV":13,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3704,"inV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3705,"inV":21,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3706,"inV":57,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3707,"inV":122,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3708,"inV":318,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3709,"inV":94,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":3710,"inV":96,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3711,"inV":124,"properties":{"
@class":"java.util.HashMap","weight":15}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7808,"inV":351}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7807,"inV":671}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",6],"value":"NOT FADE AWAY"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",8],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",7],"value":531}]]}}
+{"@class":"java.util.HashMap","id":4,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":128,"outV":97,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1664,"outV":267,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":899,"outV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1667,"outV":124,"properties":{"@class":"java.util.HashMap","weight":15}},{"@class":"java.util.HashMap","id":4099,"outV":48,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1156,"outV":26,"properties":{"@class":"java.util.HashMap","weight":16}},{"@class":"java.util.HashMap","id":773,"outV":122,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.Hash
Map","id":6534,"outV":242,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1032,"outV":73,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6664,"outV":12,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5129,"outV":222,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5387,"outV":69,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5517,"outV":43,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5006,"outV":30,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6030,"outV":204,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2063,"outV":92,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":915,"outV":91,"properties":{"@
class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6940,"outV":84,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":2464,"outV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5795,"outV":76,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3620,"outV":24,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4772,"outV":114,"properties":{"@class":"java.util.HashMap","weight":25}},{"@class":"java.util.HashMap","id":2982,"outV":14,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3367,"outV":184,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":2345,"outV":87,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2861,"outV":101,"properties":{"@class":"java.util.HashMap","weight":6}}
,{"@class":"java.util.HashMap","id":1840,"outV":275,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5425,"outV":102,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":180,"outV":70,"properties":{"@class":"java.util.HashMap","weight":46}},{"@class":"java.util.HashMap","id":2613,"outV":158,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5434,"outV":217,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5562,"outV":162,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1469,"outV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":446,"outV":38,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":2494,"outV":90,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":326
6,"outV":160,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":326,"outV":34,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":583,"outV":120,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6855,"outV":64,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":73,"outV":46,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":4425,"outV":212,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1613,"outV":210,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4941,"outV":86,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6350,"outV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3535,"outV":201,"properties":{"@class":"java
.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":980,"outV":11,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1494,"outV":164,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5206,"outV":99,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5847,"outV":61,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6490,"outV":187,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2781,"outV":15,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5600,"outV":42,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":353,"outV":74,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5474,"outV":79,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java
.util.HashMap","id":1891,"outV":103,"properties":{"@class":"java.util.HashMap","weight":19}},{"@class":"java.util.HashMap","id":3811,"outV":88,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5989,"outV":50,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":4327,"outV":110,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2538,"outV":57,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3050,"outV":153,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":4970,"outV":236,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2283,"outV":25,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":236,"outV":145,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6126,"outV":72,"
properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5232,"outV":214,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4594,"outV":85,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1652,"outV":213,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":4084,"outV":109,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":629,"outV":23,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3701,"outV":3,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5621,"outV":22,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":7029,"outV":89,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5238,"outV":32,"properties":{"@class":"java.util.HashMap"
,"weight":3}},{"@class":"java.util.HashMap","id":2684,"outV":13,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":3325,"outV":268,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5120,"inV":40,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":5121,"inV":33,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5122,"inV":79,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5123,"inV":292,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5071,"inV":50,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5072,"inV":12,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":5073,"inV":18,"properties"
:{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5074,"inV":24,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5075,"inV":23,"properties":{"@class":"java.util.HashMap","weight":63}},{"@class":"java.util.HashMap","id":5076,"inV":13,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":5077,"inV":10,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5078,"inV":11,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5079,"inV":26,"properties":{"@class":"java.util.HashMap","weight":18}},{"@class":"java.util.HashMap","id":5080,"inV":22,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5081,"inV":16,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5082,"inV":49,"properties":{"@class":"java.util.HashMap","weight":1}},{"@cl
ass":"java.util.HashMap","id":5083,"inV":25,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5084,"inV":51,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5085,"inV":15,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5086,"inV":112,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5087,"inV":121,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5088,"inV":32,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":5089,"inV":68,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5090,"inV":120,"properties":{"@class":"java.util.HashMap","weight":77}},{"@class":"java.util.HashMap","id":5091,"inV":103,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5092,"inV":42,"pr
operties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5093,"inV":85,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5094,"inV":76,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":5095,"inV":181,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5096,"inV":14,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5097,"inV":122,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5098,"inV":153,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5099,"inV":96,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5100,"inV":82,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5101,"inV":110,"properties":{"@class":"java.util.HashMap","weight"
:1}},{"@class":"java.util.HashMap","id":5102,"inV":19,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5103,"inV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5104,"inV":84,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5105,"inV":88,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5106,"inV":97,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5107,"inV":114,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5108,"inV":30,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":5109,"inV":31,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":5110,"inV":69,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5111,"inV"
:127,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5112,"inV":60,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5113,"inV":39,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5114,"inV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5115,"inV":117,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5116,"inV":78,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5117,"inV":38,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5118,"inV":169,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5119,"inV":118,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7064,"inV":340}]],"writ
tenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7063,"inV":339}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",9],"value":"BERTHA"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",11],"value":"original"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",10],"value":394}]]}}
+{"@class":"java.util.HashMap","id":5,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":194,"outV":70,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":962,"outV":67,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5446,"outV":231,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":6344,"outV":21,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":1738,"outV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6666,"outV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1867,"outV":94,"properties":{"@class":"java.util.HashMap","weight":15}},{"@class":"java.util.HashMap
","id":4300,"outV":110,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":847,"outV":171,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2832,"outV":101,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6032,"outV":115,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1170,"outV":26,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5330,"outV":238,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1491,"outV":164,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1429,"outV":83,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3033,"outV":14,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6298,"outV":49,"properties":{"@
class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1373,"outV":130,"properties":{"@class":"java.util.HashMap","weight":11}},{"@class":"java.util.HashMap","id":4447,"outV":113,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5151,"outV":125,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5343,"outV":165,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6431,"outV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1953,"outV":148,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":1634,"outV":210,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2274,"outV":25,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":100,"outV":46,"properties":{"@class":"java.util.HashMap","weight"
:1}},{"@class":"java.util.HashMap","id":933,"outV":91,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2021,"outV":149,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6694,"outV":141,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4009,"outV":225,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":682,"outV":219,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3694,"outV":3,"properties":{"@class":"java.util.HashMap","weight":57}},{"@class":"java.util.HashMap","id":4718,"outV":186,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":3055,"outV":153,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":2480,"outV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id"
:2736,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5426,"outV":102,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6899,"outV":147,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5879,"outV":96,"properties":{"@class":"java.util.HashMap","weight":22}},{"@class":"java.util.HashMap","id":6201,"outV":319,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5370,"outV":132,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":700,"outV":206,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2236,"outV":29,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":4604,"outV":85,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5759,"outV":129,"properties":{"@class
":"java.util.HashMap","weight":6}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":273,"inV":3,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":274,"inV":26,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":275,"inV":114,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":276,"inV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":277,"inV":74,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":278,"inV":122,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":279,"inV":133,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":280,"inV":83,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":281,"inV":153,"
properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":282,"inV":159,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":283,"inV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":284,"inV":25,"properties":{"@class":"java.util.HashMap","weight":19}},{"@class":"java.util.HashMap","id":285,"inV":96,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":286,"inV":160,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":287,"inV":32,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":288,"inV":120,"properties":{"@class":"java.util.HashMap","weight":16}},{"@class":"java.util.HashMap","id":289,"inV":50,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":290,"inV":116,"properties":{"@class":"java.util.HashMap","weight":1}}
,{"@class":"java.util.HashMap","id":291,"inV":127,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":292,"inV":65,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":293,"inV":130,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":294,"inV":125,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":295,"inV":70,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":296,"inV":134,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":297,"inV":161,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":298,"inV":162,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":299,"inV":124,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":300,"inV":38,"pro
perties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":301,"inV":29,"properties":{"@class":"java.util.HashMap","weight":11}},{"@class":"java.util.HashMap","id":302,"inV":163,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":303,"inV":94,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":304,"inV":85,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":305,"inV":164,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":306,"inV":64,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":307,"inV":150,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":308,"inV":165,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":309,"inV":92,"properties":{"@class":"java.util.HashMap","weight":1}},{"@c
lass":"java.util.HashMap","id":310,"inV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":311,"inV":166,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7582,"inV":340}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7581,"inV":446}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",12],"value":"GOING DOWN THE ROAD FEELING BAD"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",14],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",13],"value":293}]]}}
{"@class":"java.util.HashMap","id":6,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2023,"outV":282,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2406,"inV":293,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2407,"inV":96,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7782,"inV":351}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7781,"inV":527}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",15],"value":"MONA"}]],"songType":["java.util.ArrayList",[{"@class":"ja
va.util.HashMap","id":["java.lang.Long",17],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",16],"value":1}]]}}
{"@class":"java.util.HashMap","id":7,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2607,"outV":295,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5,"inV":8,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",18],"value":"WHERE HAVE THE HEROES GONE"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",20],"value":""}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",19],"value":0}]]}}
{"@class":"java.util.HashMap","id":8,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4705,"outV":111,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5,"outV":7,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5901,"outV":96,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2976,"inV":302,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2977,"inV":96,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2978,"inV":72,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7814,"inV":351}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7813,
"inV":674}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",21],"value":"OH BOY"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",23],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",22],"value":2}]]}}
-{"@class":"java.util.HashMap","id":9,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":3776,"outV":3,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":65,"outV":46,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1923,"outV":103,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5956,"outV":50,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3077,"outV":153,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5832,"outV":76,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1161,"outV":26,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":6667,"outV":12,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.Hash
Map","id":2699,"outV":13,"properties":{"@class":"java.util.Ha
<TRUNCATED>
[11/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
Posted by sp...@apache.org.
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
[19/19] tinkerpop git commit: Minor code cleanup.
Posted by sp...@apache.org.
Minor code cleanup.
Mostly finalizing variables where required. CTR
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/f929db03
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/f929db03
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/f929db03
Branch: refs/heads/master
Commit: f929db03a9294c59f792e9c1b89a244203294d5a
Parents: 4710690
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Aug 22 14:29:55 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Aug 22 14:29:55 2016 -0400
----------------------------------------------------------------------
.../traversal/util/DefaultTraversalMetrics.java | 11 +-
.../process/traversal/util/MutableMetrics.java | 10 +-
.../structure/io/graphson/GraphSONMapper.java | 31 +-
.../io/graphson/GraphSONSerializersV2d0.java | 47 +--
.../io/graphson/GraphSONTypeDeserializer.java | 42 ++-
.../io/graphson/GraphSONTypeIdResolver.java | 12 +-
.../graphson/GraphSONTypeResolverBuilder.java | 14 +-
.../io/graphson/GraphSONTypeSerializer.java | 37 +--
.../structure/io/graphson/GraphSONUtil.java | 10 +-
.../structure/io/graphson/JsonParserConcat.java | 6 +-
.../io/graphson/TinkerPopJacksonModule.java | 2 +-
.../io/graphson/ToStringGraphSONSerializer.java | 3 +-
...aphSONMapperV2d0PartialEmbeddedTypeTest.java | 26 +-
.../AbstractGraphSONMessageSerializerV2d0.java | 7 +-
...raphSONMessageSerializerGremlinTestV1d0.java | 14 +-
...raphSONMessageSerializerGremlinTestV2d0.java | 12 +-
.../structure/TinkerIoRegistryV2d0.java | 2 +-
.../TinkerGraphGraphSONSerializerV2d0Test.java | 286 ++++++++++---------
18 files changed, 290 insertions(+), 282 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/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 058386b..ce52ffc 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
@@ -39,7 +39,9 @@ import java.util.concurrent.TimeUnit;
* @author Bob Briody (http://bobbriody.com)
*/
public final class DefaultTraversalMetrics implements TraversalMetrics, Serializable {
- // toString() specific headers
+ /**
+ * toString() specific headers
+ */
private static final String[] HEADERS = {"Step", "Count", "Traversers", "Time (ms)", "% Dur"};
private final Map<String, MutableMetrics> metrics = new HashMap<>();
@@ -54,9 +56,10 @@ 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 is only a convenient constructor needed for GraphSON deserialization.
+ */
+ public DefaultTraversalMetrics(final long totalStepDurationNs, final List<MutableMetrics> metricsMap) {
this.totalStepDuration = totalStepDurationNs;
this.computedMetrics = new LinkedHashMap<>(metrics.size());
metricsMap.forEach(m -> computedMetrics.put(m.getId(), m.getImmutableClone()));
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/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 3b0c886..19e2069 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
@@ -31,7 +31,7 @@ public class MutableMetrics extends ImmutableMetrics implements Cloneable {
// Note: if you add new members then you probably need to add them to the copy constructor;
- private long tempTime = -1l;
+ private long tempTime = -1L;
protected MutableMetrics() {
// necessary for gryo serialization
@@ -42,10 +42,10 @@ 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) {
+ /**
+ * Create a {@code MutableMetrics} from an immutable one.
+ */
+ public MutableMetrics(final Metrics other) {
this.id = other.getId();
this.name = other.getName();
this.annotations.putAll(other.getAnnotations());
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/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 2a000a3..06fe51c 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
@@ -90,7 +90,7 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
final ObjectMapper om = new ObjectMapper();
om.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
- GraphSONModule graphSONModule = version.getBuilder().create(normalize);
+ final GraphSONModule graphSONModule = version.getBuilder().create(normalize);
om.registerModule(graphSONModule);
customModules.forEach(om::registerModule);
@@ -110,37 +110,33 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
}
} else if (version == GraphSONVersion.V2_0) {
if (typeInfo != TypeInfo.NO_TYPES) {
- GraphSONTypeIdResolver graphSONTypeIdResolver = new GraphSONTypeIdResolver();
+ final GraphSONTypeIdResolver graphSONTypeIdResolver = new GraphSONTypeIdResolver();
final TypeResolverBuilder typer = new GraphSONTypeResolverBuilder()
.typesEmbedding(getTypeInfo())
.valuePropertyName(GraphSONTokens.VALUEPROP)
.init(JsonTypeInfo.Id.CUSTOM, graphSONTypeIdResolver)
- .typeProperty(GraphSONTokens.VALUETYPE)
- ;
+ .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)
- );
-
+ 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();
+ final TinkerPopJacksonModule mod = (TinkerPopJacksonModule) e;
+ final Map<Class, String> moduleTypeDefinitions = mod.getTypeDefinitions();
if (moduleTypeDefinitions != null) {
- if (mod.getTypeNamespace() == null || mod.getTypeNamespace().isEmpty()) {
+ 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)
- );
+
+ moduleTypeDefinitions.forEach((targetClass, typeId) -> graphSONTypeIdResolver.addCustomType(
+ String.format("%s:%s", mod.getTypeNamespace(), typeId), targetClass));
}
}
});
@@ -277,7 +273,8 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
* 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.
+ * The level can be {@link TypeInfo#NO_TYPES} or {@link TypeInfo#PARTIAL_TYPES}, and could be extended in the
+ * future.
*/
public Builder typeInfo(final TypeInfo typeInfo) {
this.typeInfo = typeInfo;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
index a689a11..f6a2f89 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
@@ -159,9 +159,7 @@ public class GraphSONSerializersV2d0 {
jsonGenerator.writeFieldName(GraphSONTokens.PROPERTIES);
jsonGenerator.writeStartObject();
- elementProperties.forEachRemaining(
- prop -> safeWriteObjectField(jsonGenerator, prop.key(), prop)
- );
+ elementProperties.forEachRemaining(prop -> safeWriteObjectField(jsonGenerator, prop.key(), prop));
jsonGenerator.writeEndObject();
}
}
@@ -271,7 +269,7 @@ public class GraphSONSerializersV2d0 {
@Override
public void serialize(final Tree tree, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
jsonGenerator.writeStartArray();
- Set<Map.Entry<Element, Tree>> set = tree.entrySet();
+ final Set<Map.Entry<Element, Tree>> set = tree.entrySet();
for (Map.Entry<Element, Tree> entry : set) {
jsonGenerator.writeStartObject();
jsonGenerator.writeObjectField(GraphSONTokens.KEY, entry.getKey());
@@ -326,7 +324,8 @@ public class GraphSONSerializersV2d0 {
}
@Override
- public void serialize(Integer integer, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+ public void serialize(final Integer integer, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeNumber(((Integer) integer).intValue());
}
}
@@ -337,7 +336,8 @@ public class GraphSONSerializersV2d0 {
}
@Override
- public void serialize(Double doubleValue, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+ public void serialize(final Double doubleValue, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeNumber(doubleValue);
}
}
@@ -367,7 +367,8 @@ public class GraphSONSerializersV2d0 {
}
@Override
- public void serialize(Metrics metrics, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+ public void serialize(final Metrics metrics, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider) throws IOException {
final Map<String, Object> m = new HashMap<>();
m.put(GraphSONTokens.ID, metrics.getId());
m.put(GraphSONTokens.NAME, metrics.getName());
@@ -422,11 +423,11 @@ public class GraphSONSerializersV2d0 {
}
@Override
- public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+ public T deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
jsonParser.nextToken();
// This will automatically parse all typed stuff.
- Map<String, Object> mapData = deserializationContext.readValue(jsonParser, Map.class);
+ final Map<String, Object> mapData = deserializationContext.readValue(jsonParser, Map.class);
return createObject(mapData);
}
@@ -442,7 +443,7 @@ public class GraphSONSerializersV2d0 {
}
@Override
- Vertex createObject(Map<String, Object> vertexData) {
+ Vertex createObject(final Map<String, Object> vertexData) {
return new DetachedVertex(
vertexData.get(GraphSONTokens.ID),
vertexData.get(GraphSONTokens.LABEL).toString(),
@@ -458,7 +459,7 @@ public class GraphSONSerializersV2d0 {
}
@Override
- Edge createObject(Map<String, Object> edgeData) {
+ Edge createObject(final Map<String, Object> edgeData) {
return new DetachedEdge(
edgeData.get(GraphSONTokens.ID),
edgeData.get(GraphSONTokens.LABEL).toString(),
@@ -476,7 +477,7 @@ public class GraphSONSerializersV2d0 {
}
@Override
- Property createObject(Map<String, Object> propData) {
+ Property createObject(final Map<String, Object> propData) {
return new DetachedProperty(
(String) propData.get(GraphSONTokens.KEY),
propData.get(GraphSONTokens.VALUE));
@@ -490,11 +491,11 @@ public class GraphSONSerializersV2d0 {
}
@Override
- Path createObject(Map<String, Object> pathData) {
- Path p = MutablePath.make();
+ Path createObject(final Map<String, Object> pathData) {
+ final Path p = MutablePath.make();
- List labels = (List) pathData.get(GraphSONTokens.LABELS);
- List objects = (List) pathData.get(GraphSONTokens.OBJECTS);
+ final List labels = (List) pathData.get(GraphSONTokens.LABELS);
+ final List objects = (List) pathData.get(GraphSONTokens.OBJECTS);
for (int i = 0; i < objects.size(); i++) {
p.extend(objects.get(i), new HashSet((List) labels.get(i)));
@@ -510,7 +511,7 @@ public class GraphSONSerializersV2d0 {
}
@Override
- VertexProperty createObject(Map<String, Object> propData) {
+ VertexProperty createObject(final Map<String, Object> propData) {
return new DetachedVertexProperty(
propData.get(GraphSONTokens.ID),
(String) propData.get(GraphSONTokens.LABEL),
@@ -526,8 +527,8 @@ public class GraphSONSerializersV2d0 {
}
@Override
- Metrics createObject(Map<String, Object> metricsData) {
- MutableMetrics m = new MutableMetrics((String)metricsData.get(GraphSONTokens.ID), (String)metricsData.get(GraphSONTokens.NAME));
+ Metrics createObject(final Map<String, Object> metricsData) {
+ final MutableMetrics m = new MutableMetrics((String)metricsData.get(GraphSONTokens.ID), (String)metricsData.get(GraphSONTokens.NAME));
m.setDuration(Math.round((Double) metricsData.get(GraphSONTokens.DURATION) * 1000000), TimeUnit.NANOSECONDS);
for (Map.Entry<String, Long> count : ((Map<String, Long>)metricsData.getOrDefault(GraphSONTokens.COUNTS, new HashMap<>(0))).entrySet()) {
@@ -550,7 +551,7 @@ public class GraphSONSerializersV2d0 {
}
@Override
- TraversalMetrics createObject(Map<String, Object> traversalMetricsData) {
+ TraversalMetrics createObject(final Map<String, Object> traversalMetricsData) {
return new DefaultTraversalMetrics(
Math.round((Double) traversalMetricsData.get(GraphSONTokens.DURATION) * 1000000),
(List<MutableMetrics>) traversalMetricsData.get(GraphSONTokens.METRICS)
@@ -565,9 +566,9 @@ public class GraphSONSerializersV2d0 {
}
@Override
- public Tree deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
- List<Map> data = deserializationContext.readValue(jsonParser, List.class);
- Tree t = new Tree();
+ public Tree deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+ final List<Map> data = deserializationContext.readValue(jsonParser, List.class);
+ final Tree t = new Tree();
for (Map<String, Object> entry : data) {
t.put(entry.get(GraphSONTokens.KEY), entry.get(GraphSONTokens.VALUE));
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
index e614a7a..1950834 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
@@ -51,8 +51,8 @@ public class GraphSONTypeDeserializer extends TypeDeserializerBase {
private static final JavaType arrayJavaType = TypeFactory.defaultInstance().constructType(List.class);
- GraphSONTypeDeserializer(JavaType baseType, TypeIdResolver idRes, String typePropertyName,
- TypeInfo typeInfo, String valuePropertyName){
+ GraphSONTypeDeserializer(final JavaType baseType, final TypeIdResolver idRes, final String typePropertyName,
+ final TypeInfo typeInfo, final String valuePropertyName){
super(baseType, idRes, typePropertyName, false, null);
this.baseType = baseType;
this.idRes = idRes;
@@ -83,31 +83,31 @@ public class GraphSONTypeDeserializer extends TypeDeserializerBase {
}
@Override
- public Object deserializeTypedFromObject(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+ public Object deserializeTypedFromObject(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
return deserialize(jsonParser, deserializationContext);
}
@Override
- public Object deserializeTypedFromArray(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+ public Object deserializeTypedFromArray(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
return deserialize(jsonParser, deserializationContext);
}
@Override
- public Object deserializeTypedFromScalar(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+ public Object deserializeTypedFromScalar(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
return deserialize(jsonParser, deserializationContext);
}
@Override
- public Object deserializeTypedFromAny(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+ public Object deserializeTypedFromAny(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
return deserialize(jsonParser, deserializationContext);
}
/**
* Main logic for the deserialization.
*/
- private Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
- TokenBuffer buf = new TokenBuffer(jsonParser.getCodec(), false);
- TokenBuffer localCopy = new TokenBuffer(jsonParser.getCodec(), false);
+ private Object deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
+ final TokenBuffer buf = new TokenBuffer(jsonParser.getCodec(), false);
+ final TokenBuffer localCopy = new TokenBuffer(jsonParser.getCodec(), false);
// Detect type
try {
@@ -148,7 +148,7 @@ public class GraphSONTypeDeserializer extends TypeDeserializerBase {
if (typeName != null && valueCalled) {
// Type pattern detected.
- JavaType typeFromId = idRes.typeFromId(typeName);
+ final JavaType typeFromId = idRes.typeFromId(typeName);
if (!baseType.isJavaLangObject() && baseType != typeFromId) {
throw new InstantiationException(
@@ -158,13 +158,13 @@ public class GraphSONTypeDeserializer extends TypeDeserializerBase {
);
}
- JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(typeFromId, null);
+ final JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(typeFromId, null);
- JsonParser tokenParser = localCopy.asParser();
+ final JsonParser tokenParser = localCopy.asParser();
tokenParser.nextToken();
- Object value = jsonDeserializer.deserialize(tokenParser, deserializationContext);
+ final Object value = jsonDeserializer.deserialize(tokenParser, deserializationContext);
- JsonToken t = jsonParser.nextToken();
+ final JsonToken t = jsonParser.nextToken();
if (t == JsonToken.END_OBJECT) {
// we're good to go
return value;
@@ -191,19 +191,17 @@ public class GraphSONTypeDeserializer extends TypeDeserializerBase {
// Concatenate buf + localCopy + end of original content
- JsonParser toUseParser;
- JsonParser bufferParser = buf.asParser();
- JsonParser localCopyParser = localCopy.asParser();
+ final JsonParser bufferParser = buf.asParser();
+ final JsonParser localCopyParser = localCopy.asParser();
+ final JsonParser[] array = {bufferParser, localCopyParser, jsonParser};
- JsonParser[] array = {bufferParser, localCopyParser, jsonParser};
-
- toUseParser = new JsonParserConcat(array);
+ final JsonParser toUseParser = new JsonParserConcat(array);
toUseParser.nextToken();
// If a type has been specified in parameter :
if (!baseType.isJavaLangObject()) {
- JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(baseType, null);
+ final JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(baseType, null);
return jsonDeserializer.deserialize(toUseParser, deserializationContext);
}
// Otherwise, detect the current structure :
@@ -217,7 +215,7 @@ public class GraphSONTypeDeserializer extends TypeDeserializerBase {
// then consider it a simple type, even though we shouldn't be here if it was a simple type.
// TODO : maybe throw an error instead?
// throw deserializationContext.mappingException("Roger, we have a problem deserializing");
- JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(baseType, null);
+ final JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(baseType, null);
return jsonDeserializer.deserialize(toUseParser, deserializationContext);
}
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
index 3edff73..5ad7265 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
@@ -48,7 +48,7 @@ public class GraphSONTypeIdResolver implements TypeIdResolver {
}
// Override manually a type definition.
- public GraphSONTypeIdResolver addCustomType(String name, Class clasz) {
+ public GraphSONTypeIdResolver addCustomType(final String name, final Class clasz) {
// May override types already registered, that's wanted.
getIdToType().put(name, TypeFactory.defaultInstance().constructType(clasz));
getTypeToId().put(clasz, name);
@@ -56,16 +56,16 @@ public class GraphSONTypeIdResolver implements TypeIdResolver {
}
@Override
- public void init(JavaType javaType) {
+ public void init(final JavaType javaType) {
}
@Override
- public String idFromValue(Object o) {
+ public String idFromValue(final Object o) {
return idFromValueAndType(o, o.getClass());
}
@Override
- public String idFromValueAndType(Object o, Class<?> aClass) {
+ public String idFromValueAndType(final Object o, final Class<?> aClass) {
if (!getTypeToId().containsKey(aClass)) {
// If one wants to serialize an object with a type, but hasn't registered
// a typeID for that class, fail.
@@ -82,12 +82,12 @@ public class GraphSONTypeIdResolver implements TypeIdResolver {
}
@Override
- public JavaType typeFromId(String s) {
+ public JavaType typeFromId(final String s) {
return typeFromId(null, s);
}
@Override
- public JavaType typeFromId(DatabindContext databindContext, String s) {
+ public JavaType typeFromId(final DatabindContext databindContext, final String s) {
// Get the type from the string from the stored Map. If not found, default to deserialize as a String.
return getIdToType().containsKey(s)
? getIdToType().get(s)
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java
index 001dd02..7d3d03c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java
@@ -41,24 +41,26 @@ public class GraphSONTypeResolverBuilder extends StdTypeResolverBuilder {
private String valuePropertyName;
@Override
- public TypeDeserializer buildTypeDeserializer(DeserializationConfig config, JavaType baseType, Collection<NamedType> subtypes) {
- TypeIdResolver idRes = this.idResolver(config, baseType, subtypes, false, true);
+ public TypeDeserializer buildTypeDeserializer(final DeserializationConfig config, final JavaType baseType,
+ final Collection<NamedType> subtypes) {
+ final TypeIdResolver idRes = this.idResolver(config, baseType, subtypes, false, true);
return new GraphSONTypeDeserializer(baseType, idRes, this.getTypeProperty(), typeInfo, valuePropertyName);
}
@Override
- public TypeSerializer buildTypeSerializer(SerializationConfig config, JavaType baseType, Collection<NamedType> subtypes) {
- TypeIdResolver idRes = this.idResolver(config, baseType, subtypes, true, false);
+ public TypeSerializer buildTypeSerializer(final SerializationConfig config, final JavaType baseType,
+ final Collection<NamedType> subtypes) {
+ final TypeIdResolver idRes = this.idResolver(config, baseType, subtypes, true, false);
return new GraphSONTypeSerializer(idRes, this.getTypeProperty(), typeInfo, valuePropertyName);
}
- public GraphSONTypeResolverBuilder valuePropertyName(String valuePropertyName) {
+ public GraphSONTypeResolverBuilder valuePropertyName(final String valuePropertyName) {
this.valuePropertyName = valuePropertyName;
return this;
}
- public GraphSONTypeResolverBuilder typesEmbedding(TypeInfo typeInfo) {
+ public GraphSONTypeResolverBuilder typesEmbedding(final TypeInfo typeInfo) {
this.typeInfo = typeInfo;
return this;
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
index 98cf16a..01e5a79 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
@@ -48,7 +48,8 @@ public class GraphSONTypeSerializer extends TypeSerializer {
private final TypeInfo typeInfo;
private final String valuePropertyName;
- GraphSONTypeSerializer(TypeIdResolver idRes, String propertyName, TypeInfo typeInfo, String valuePropertyName) {
+ GraphSONTypeSerializer(final TypeIdResolver idRes, final String propertyName, final TypeInfo typeInfo,
+ final String valuePropertyName) {
this.idRes = idRes;
this.propertyName = propertyName;
this.typeInfo = typeInfo;
@@ -56,7 +57,7 @@ public class GraphSONTypeSerializer extends TypeSerializer {
}
@Override
- public TypeSerializer forProperty(BeanProperty beanProperty) {
+ public TypeSerializer forProperty(final BeanProperty beanProperty) {
return this;
}
@@ -76,77 +77,77 @@ public class GraphSONTypeSerializer extends TypeSerializer {
}
@Override
- public void writeTypePrefixForScalar(Object o, JsonGenerator jsonGenerator) throws IOException {
+ public void writeTypePrefixForScalar(final Object o, final JsonGenerator jsonGenerator) throws IOException {
if (canWriteTypeId()) {
writeTypePrefix(jsonGenerator, getTypeIdResolver().idFromValueAndType(o, getClassFromObject(o)));
}
}
@Override
- public void writeTypePrefixForObject(Object o, JsonGenerator jsonGenerator) throws IOException {
+ public void writeTypePrefixForObject(final Object o, final JsonGenerator jsonGenerator) throws IOException {
jsonGenerator.writeStartObject();
// TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(Map);
}
@Override
- public void writeTypePrefixForArray(Object o, JsonGenerator jsonGenerator) throws IOException {
+ public void writeTypePrefixForArray(final Object o, final JsonGenerator jsonGenerator) throws IOException {
jsonGenerator.writeStartArray();
// TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(List);
}
@Override
- public void writeTypeSuffixForScalar(Object o, JsonGenerator jsonGenerator) throws IOException {
+ public void writeTypeSuffixForScalar(final Object o, final JsonGenerator jsonGenerator) throws IOException {
if (canWriteTypeId()) {
writeTypeSuffix(jsonGenerator);
}
}
@Override
- public void writeTypeSuffixForObject(Object o, JsonGenerator jsonGenerator) throws IOException {
+ public void writeTypeSuffixForObject(final Object o, final JsonGenerator jsonGenerator) throws IOException {
jsonGenerator.writeEndObject();
// TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(Map);
}
@Override
- public void writeTypeSuffixForArray(Object o, JsonGenerator jsonGenerator) throws IOException {
+ public void writeTypeSuffixForArray(final Object o, final JsonGenerator jsonGenerator) throws IOException {
jsonGenerator.writeEndArray();
// TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(List);
}
@Override
- public void writeCustomTypePrefixForScalar(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+ public void writeCustomTypePrefixForScalar(final Object o, final JsonGenerator jsonGenerator, final String s) throws IOException {
if (canWriteTypeId()) {
writeTypePrefix(jsonGenerator, s);
}
}
@Override
- public void writeCustomTypePrefixForObject(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+ public void writeCustomTypePrefixForObject(final Object o, final JsonGenerator jsonGenerator, final String s) throws IOException {
jsonGenerator.writeStartObject();
// TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(s);
}
@Override
- public void writeCustomTypePrefixForArray(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+ public void writeCustomTypePrefixForArray(final Object o, final JsonGenerator jsonGenerator, final String s) throws IOException {
jsonGenerator.writeStartArray();
// TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(s);
}
@Override
- public void writeCustomTypeSuffixForScalar(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+ public void writeCustomTypeSuffixForScalar(final Object o, final JsonGenerator jsonGenerator, final String s) throws IOException {
if (canWriteTypeId()) {
writeTypeSuffix(jsonGenerator);
}
}
@Override
- public void writeCustomTypeSuffixForObject(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+ public void writeCustomTypeSuffixForObject(final Object o, final JsonGenerator jsonGenerator, final String s) throws IOException {
jsonGenerator.writeEndObject();
// TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(s);
}
@Override
- public void writeCustomTypeSuffixForArray(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+ public void writeCustomTypeSuffixForArray(final Object o, final JsonGenerator jsonGenerator,final String s) throws IOException {
jsonGenerator.writeEndArray();
// TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(s);
}
@@ -156,13 +157,13 @@ public class GraphSONTypeSerializer extends TypeSerializer {
&& typeInfo == TypeInfo.PARTIAL_TYPES;
}
- private void writeTypePrefix(JsonGenerator jsonGenerator, String s) throws IOException {
+ private void writeTypePrefix(final JsonGenerator jsonGenerator, final String s) throws IOException {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField(this.getPropertyName(), s);
jsonGenerator.writeFieldName(this.valuePropertyName);
}
- private void writeTypeSuffix(JsonGenerator jsonGenerator) throws IOException {
+ private void writeTypeSuffix(final JsonGenerator jsonGenerator) throws IOException {
jsonGenerator.writeEndObject();
}
@@ -172,9 +173,9 @@ public class GraphSONTypeSerializer extends TypeSerializer {
**not** their implementations (TinkerGraph, DetachedVertex, TinkerEdge,
etc..)
*/
- private Class getClassFromObject(Object o) {
+ private Class getClassFromObject(final Object o) {
// not the most efficient
- Class c = o.getClass();
+ final Class c = o.getClass();
if (Vertex.class.isAssignableFrom(c)) {
return Vertex.class;
} else if (Edge.class.isAssignableFrom(c)) {
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java
index 548bca1..9b90c78 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java
@@ -56,21 +56,21 @@ public final class GraphSONUtil {
}
}
- public static void writeStartObject(Object o, JsonGenerator jsonGenerator, TypeSerializer typeSerializer) throws IOException {
+ public static void writeStartObject(final Object o, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer) throws IOException {
if (typeSerializer != null)
typeSerializer.writeTypePrefixForObject(o, jsonGenerator);
else
jsonGenerator.writeStartObject();
}
- public static void writeEndObject(Object o, JsonGenerator jsonGenerator, TypeSerializer typeSerializer) throws IOException {
+ public static void writeEndObject(final Object o, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer) throws IOException {
if (typeSerializer != null)
typeSerializer.writeTypeSuffixForObject(o, jsonGenerator);
else
jsonGenerator.writeEndObject();
}
- public static void writeStartArray(Object o, JsonGenerator jsonGenerator, TypeSerializer typeSerializer) throws IOException {
+ public static void writeStartArray(final Object o, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer) throws IOException {
if (typeSerializer != null)
typeSerializer.writeTypePrefixForArray(o, jsonGenerator);
else
@@ -78,14 +78,14 @@ public final class GraphSONUtil {
}
- public static void writeEndArray(Object o, JsonGenerator jsonGenerator, TypeSerializer typeSerializer) throws IOException {
+ public static void writeEndArray(final Object o, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer) throws IOException {
if (typeSerializer != null)
typeSerializer.writeTypeSuffixForArray(o, jsonGenerator);
else
jsonGenerator.writeEndArray();
}
- static void safeWriteObjectField(JsonGenerator jsonGenerator, String key, Object value) {
+ static void safeWriteObjectField(final JsonGenerator jsonGenerator, final String key, final Object value) {
try {
jsonGenerator.writeObjectField(key, value);
} catch (IOException e) {
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java
index 6b19e48..d285f73 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java
@@ -37,15 +37,15 @@ import java.util.ArrayList;
* @author Kevin Gallardo (https://kgdo.me)
*/
public class JsonParserConcat extends JsonParserSequence {
- protected JsonParserConcat(JsonParser[] parsers) {
+ protected JsonParserConcat(final JsonParser[] parsers) {
super(parsers);
}
- public static JsonParserConcat createFlattened(JsonParser first, JsonParser second) {
+ public static JsonParserConcat createFlattened(final JsonParser first, final JsonParser second) {
if (!(first instanceof JsonParserConcat) && !(second instanceof JsonParserConcat)) {
return new JsonParserConcat(new JsonParser[]{first, second});
} else {
- ArrayList p = new ArrayList();
+ final ArrayList p = new ArrayList();
if (first instanceof JsonParserConcat) {
((JsonParserConcat) first).addFlattenedActiveParsers(p);
} else {
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java
index 847027c..d15afcd 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java
@@ -38,7 +38,7 @@ import java.util.Map;
*/
public abstract class TinkerPopJacksonModule extends SimpleModule {
- public TinkerPopJacksonModule(String name) {
+ public TinkerPopJacksonModule(final String name) {
super(name);
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java
index fbd9e00..3f155fe 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java
@@ -34,7 +34,8 @@ import java.io.IOException;
*/
public class ToStringGraphSONSerializer extends ToStringSerializer {
@Override
- public void serializeWithType(Object value, JsonGenerator gen, SerializerProvider provider, TypeSerializer typeSer) throws IOException {
+ public void serializeWithType(final Object value, final JsonGenerator gen, final SerializerProvider provider,
+ final TypeSerializer typeSer) throws IOException {
this.serialize(value, gen, provider);
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
index c2ad05e..e02588f 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
@@ -143,19 +143,19 @@ public class GraphSONMapperV2d0PartialEmbeddedTypeTest {
@Test
// Trying to fail the TypeDeserializer type detection
public void shouldSerializeDeserializeNestedCollectionsAndMapAndTypedValuesCorrectly() throws Exception {
- UUID uuid = UUID.randomUUID();
- List myList = new ArrayList<>();
+ final UUID uuid = UUID.randomUUID();
+ final List myList = new ArrayList<>();
- List myList2 = new ArrayList<>();
+ final List myList2 = new ArrayList<>();
myList2.add(UUID.randomUUID());
myList2.add(33L);
myList2.add(84);
- Map map2 = new HashMap<>();
+ final Map map2 = new HashMap<>();
map2.put("eheh", UUID.randomUUID());
map2.put("normal", "normal");
myList2.add(map2);
- Map<String, Object> map1 = new HashMap<>();
+ final Map<String, Object> map1 = new HashMap<>();
map1.put("hello", "world");
map1.put("test", uuid);
map1.put("hehe", myList2);
@@ -265,25 +265,25 @@ public class GraphSONMapperV2d0PartialEmbeddedTypeTest {
@Test
public void shouldLooseTypesInfoWithGraphSONNoType() throws Exception {
- ObjectMapper mapper = GraphSONMapper.build()
+ final ObjectMapper mapper = GraphSONMapper.build()
.version(GraphSONVersion.V2_0)
.typeInfo(TypeInfo.NO_TYPES)
.create()
.createMapper();
- UUID uuid = UUID.randomUUID();
- List myList = new ArrayList<>();
+ final UUID uuid = UUID.randomUUID();
+ final List myList = new ArrayList<>();
- List myList2 = new ArrayList<>();
+ final List myList2 = new ArrayList<>();
myList2.add(UUID.randomUUID());
myList2.add(33L);
myList2.add(84);
- Map map2 = new HashMap<>();
+ final Map map2 = new HashMap<>();
map2.put("eheh", UUID.randomUUID());
map2.put("normal", "normal");
myList2.add(map2);
- Map<String, Object> map1 = new HashMap<>();
+ final Map<String, Object> map1 = new HashMap<>();
map1.put("hello", "world");
map1.put("test", uuid);
map1.put("hehe", myList2);
@@ -292,8 +292,8 @@ public class GraphSONMapperV2d0PartialEmbeddedTypeTest {
myList.add("kjkj");
myList.add(UUID.randomUUID());
- String json = mapper.writeValueAsString(myList);
- Object read = mapper.readValue(json, Object.class);
+ final String json = mapper.writeValueAsString(myList);
+ final Object read = mapper.readValue(json, Object.class);
// Not equals because of type loss
assertNotEquals(myList, read);
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
index d0303eb..d846a69 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
@@ -228,12 +228,9 @@ public abstract class AbstractGraphSONMessageSerializerV2d0 extends AbstractMess
GraphSONUtil.writeStartObject(responseMessage, jsonGenerator, typeSerializer);
- if (null == responseMessage.getResult().getData())
- {
+ if (null == responseMessage.getResult().getData()){
jsonGenerator.writeNullField(SerTokens.TOKEN_DATA);
- }
- else
- {
+ } else {
jsonGenerator.writeFieldName(SerTokens.TOKEN_DATA);
Object result = responseMessage.getResult().getData();
serializerProvider.findTypedValueSerializer(result.getClass(), true, null).serialize(result, jsonGenerator, serializerProvider);
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java
index 95907f9..c18aca7 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java
@@ -269,22 +269,22 @@ public class GraphSONMessageSerializerGremlinTestV1d0 {
assertEquals(1, deserializedMap.size());
//check the first object and it's properties
- Map<String,Object> vertex = deserializedMap.get("1").get("key");
- Map<String,List<Map>> vertexProperties = (Map<String, List<Map>>)vertex.get("properties");
+ final Map<String,Object> vertex = deserializedMap.get("1").get("key");
+ final Map<String,List<Map>> vertexProperties = (Map<String, List<Map>>)vertex.get("properties");
assertEquals(1, (int)vertex.get("id"));
assertEquals("marko", vertexProperties.get("name").get(0).get("value"));
//check objects tree structure
//check Vertex property
- Map<String, Map<String, Map>> subTreeMap = deserializedMap.get("1").get("value");
- Map<String, Map<String, Map>> subTreeMap2 = subTreeMap.get("2").get("value");
- Map<String, String> vertexPropertiesDeep = subTreeMap2.get("3").get("key");
+ final Map<String, Map<String, Map>> subTreeMap = deserializedMap.get("1").get("value");
+ final Map<String, Map<String, Map>> subTreeMap2 = subTreeMap.get("2").get("value");
+ final Map<String, String> vertexPropertiesDeep = subTreeMap2.get("3").get("key");
assertEquals("vadas", vertexPropertiesDeep.get("value"));
assertEquals("name", vertexPropertiesDeep.get("label"));
// check subitem
- Map<String,Object> vertex2 = subTreeMap.get("3").get("key");
- Map<String,List<Map>> vertexProperties2 = (Map<String, List<Map>>)vertex2.get("properties");
+ final Map<String,Object> vertex2 = subTreeMap.get("3").get("key");
+ final Map<String,List<Map>> vertexProperties2 = (Map<String, List<Map>>)vertex2.get("properties");
assertEquals("lop", vertexProperties2.get("name").get(0).get("value"));
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java
index a7f8389..b85a45f 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java
@@ -57,11 +57,11 @@ import static org.junit.Assert.fail;
*/
public class GraphSONMessageSerializerGremlinTestV2d0 {
- private UUID requestId = UUID.fromString("6457272A-4018-4538-B9AE-08DD5DDC0AA1");
- private ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
- private static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
+ private final UUID requestId = UUID.fromString("6457272A-4018-4538-B9AE-08DD5DDC0AA1");
+ private final ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
+ private final static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
- public MessageSerializer serializer = new GraphSONMessageSerializerGremlinV2d0();
+ public final MessageSerializer serializer = new GraphSONMessageSerializerGremlinV2d0();
@Test
public void shouldSerializeIterable() throws Exception {
@@ -272,11 +272,11 @@ public class GraphSONMessageSerializerGremlinTestV2d0 {
//check the first object and its key's properties
assertEquals(1, deserializedTree.size());
- Vertex v = ((Vertex) deserializedTree.keySet().iterator().next());
+ final Vertex v = ((Vertex) deserializedTree.keySet().iterator().next());
assertEquals(1, v.id());
assertEquals("marko", v.property("name").value());
- Tree firstTree = (Tree)deserializedTree.get(v);
+ final Tree firstTree = (Tree)deserializedTree.get(v);
assertEquals(3, firstTree.size());
Iterator<Vertex> vertexKeys = firstTree.keySet().iterator();
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java
index 97c1cba..da9edb5 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java
@@ -183,7 +183,7 @@ public final class TinkerIoRegistryV2d0 extends AbstractIoRegistry {
}
@Override
- public TinkerGraph deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+ public TinkerGraph deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
final TinkerGraph graph = TinkerGraph.open();
final List<? extends Edge> edges;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
index 907aaed..9005233 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
@@ -54,17 +54,18 @@ import java.util.UUID;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
public class TinkerGraphGraphSONSerializerV2d0Test {
// As of TinkerPop 3.2.1 default for GraphSON 2.0 means types enabled.
- Mapper defaultMapperV2d0 = GraphSONMapper.build()
+ private final Mapper defaultMapperV2d0 = GraphSONMapper.build()
.version(GraphSONVersion.V2_0)
.addRegistry(TinkerIoRegistryV2d0.getInstance())
.create();
- Mapper noTypesMapperV2d0 = GraphSONMapper.build()
+ private final Mapper noTypesMapperV2d0 = GraphSONMapper.build()
.version(GraphSONVersion.V2_0)
.typeInfo(TypeInfo.NO_TYPES)
.addRegistry(TinkerIoRegistryV2d0.getInstance())
@@ -75,14 +76,14 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
*/
@Test
public void shouldDeserializeGraphSONIntoTinkerGraphWithPartialTypes() throws IOException {
- GraphWriter writer = getWriter(defaultMapperV2d0);
- GraphReader reader = getReader(defaultMapperV2d0);
- TinkerGraph baseModern = TinkerFactory.createModern();
+ final GraphWriter writer = getWriter(defaultMapperV2d0);
+ final GraphReader reader = getReader(defaultMapperV2d0);
+ final TinkerGraph baseModern = TinkerFactory.createModern();
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
writer.writeGraph(out, baseModern);
- String json = out.toString();
- TinkerGraph read = TinkerGraph.open();
+ final String json = out.toString();
+ final TinkerGraph read = TinkerGraph.open();
reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
IoTest.assertModernGraph(read, true, false);
}
@@ -93,14 +94,14 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
*/
@Test
public void shouldDeserializeGraphSONIntoTinkerGraphWithoutTypes() throws IOException {
- GraphWriter writer = getWriter(noTypesMapperV2d0);
- GraphReader reader = getReader(noTypesMapperV2d0);
- TinkerGraph baseModern = TinkerFactory.createModern();
+ final GraphWriter writer = getWriter(noTypesMapperV2d0);
+ final GraphReader reader = getReader(noTypesMapperV2d0);
+ final TinkerGraph baseModern = TinkerFactory.createModern();
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
writer.writeGraph(out, baseModern);
- String json = out.toString();
- TinkerGraph read = TinkerGraph.open();
+ final String json = out.toString();
+ final TinkerGraph read = TinkerGraph.open();
reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
IoTest.assertModernGraph(read, true, false);
}
@@ -111,20 +112,20 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
*/
@Test
public void shouldDeserializeGraphSONIntoTinkerGraphKeepingTypes() throws IOException {
- GraphWriter writer = getWriter(defaultMapperV2d0);
- GraphReader reader = getReader(defaultMapperV2d0);
+ final GraphWriter writer = getWriter(defaultMapperV2d0);
+ final GraphReader reader = getReader(defaultMapperV2d0);
- Graph sampleGraph1 = TinkerFactory.createModern();
- Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin", "theUUID", UUID.randomUUID());
- Vertex v2 = sampleGraph1.addVertex(T.id, 101L, "name", "henri", "theUUID", UUID.randomUUID());
+ final Graph sampleGraph1 = TinkerFactory.createModern();
+ final Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin", "theUUID", UUID.randomUUID());
+ final Vertex v2 = sampleGraph1.addVertex(T.id, 101L, "name", "henri", "theUUID", UUID.randomUUID());
v1.addEdge("hello", v2, T.id, 101L,
"uuid", UUID.randomUUID());
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
writer.writeObject(out, sampleGraph1);
- String json = out.toString();
+ final String json = out.toString();
- TinkerGraph read = reader.readObject(new ByteArrayInputStream(json.getBytes()), TinkerGraph.class);
+ final TinkerGraph read = reader.readObject(new ByteArrayInputStream(json.getBytes()), TinkerGraph.class);
assertTrue(approximateGraphsCheck(sampleGraph1, read));
}
}
@@ -134,14 +135,14 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
*/
@Test
public void shouldLooseTypesWithGraphSONNoTypesForVertexIds() throws IOException {
- GraphWriter writer = getWriter(noTypesMapperV2d0);
- GraphReader reader = getReader(noTypesMapperV2d0);
- Graph sampleGraph1 = TinkerFactory.createModern();
+ final GraphWriter writer = getWriter(noTypesMapperV2d0);
+ final GraphReader reader = getReader(noTypesMapperV2d0);
+ final Graph sampleGraph1 = TinkerFactory.createModern();
sampleGraph1.addVertex(T.id, 100L, "name", "kevin");
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
writer.writeGraph(out, sampleGraph1);
- String json = out.toString();
- TinkerGraph read = TinkerGraph.open();
+ final String json = out.toString();
+ final TinkerGraph read = TinkerGraph.open();
reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
// Should fail on deserialized vertex Id.
assertFalse(approximateGraphsCheck(sampleGraph1, read));
@@ -153,15 +154,15 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
*/
@Test
public void shouldLooseTypesWithGraphSONNoTypesForVertexProps() throws IOException {
- GraphWriter writer = getWriter(noTypesMapperV2d0);
- GraphReader reader = getReader(noTypesMapperV2d0);
- Graph sampleGraph1 = TinkerFactory.createModern();
+ final GraphWriter writer = getWriter(noTypesMapperV2d0);
+ final GraphReader reader = getReader(noTypesMapperV2d0);
+ final Graph sampleGraph1 = TinkerFactory.createModern();
sampleGraph1.addVertex(T.id, 100, "name", "kevin", "uuid", UUID.randomUUID());
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
writer.writeGraph(out, sampleGraph1);
- String json = out.toString();
- TinkerGraph read = TinkerGraph.open();
+ final String json = out.toString();
+ final TinkerGraph read = TinkerGraph.open();
reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
// Should fail on deserialized vertex prop.
assertFalse(approximateGraphsCheck(sampleGraph1, read));
@@ -173,15 +174,15 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
*/
@Test
public void shouldLooseTypesWithGraphSONNoTypesForEdgeIds() throws IOException {
- GraphWriter writer = getWriter(noTypesMapperV2d0);
- GraphReader reader = getReader(noTypesMapperV2d0);
- Graph sampleGraph1 = TinkerFactory.createModern();
- Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin");
+ final GraphWriter writer = getWriter(noTypesMapperV2d0);
+ final GraphReader reader = getReader(noTypesMapperV2d0);
+ final Graph sampleGraph1 = TinkerFactory.createModern();
+ final Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin");
v1.addEdge("hello", sampleGraph1.traversal().V().has("name", "marko").next(), T.id, 101L);
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
writer.writeGraph(out, sampleGraph1);
- String json = out.toString();
- TinkerGraph read = TinkerGraph.open();
+ final String json = out.toString();
+ final TinkerGraph read = TinkerGraph.open();
reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
// Should fail on deserialized edge Id.
assertFalse(approximateGraphsCheck(sampleGraph1, read));
@@ -193,17 +194,17 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
*/
@Test
public void shouldLooseTypesWithGraphSONNoTypesForEdgeProps() throws IOException {
- GraphWriter writer = getWriter(noTypesMapperV2d0);
- GraphReader reader = getReader(noTypesMapperV2d0);
- Graph sampleGraph1 = TinkerFactory.createModern();
+ final GraphWriter writer = getWriter(noTypesMapperV2d0);
+ final GraphReader reader = getReader(noTypesMapperV2d0);
+ final Graph sampleGraph1 = TinkerFactory.createModern();
- Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin");
+ final Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin");
v1.addEdge("hello", sampleGraph1.traversal().V().has("name", "marko").next(), T.id, 101,
"uuid", UUID.randomUUID());
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
writer.writeGraph(out, sampleGraph1);
- String json = out.toString();
- TinkerGraph read = TinkerGraph.open();
+ final String json = out.toString();
+ final TinkerGraph read = TinkerGraph.open();
reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
// Should fail on deserialized edge prop.
assertFalse(approximateGraphsCheck(sampleGraph1, read));
@@ -216,13 +217,13 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
*/
@Test
public void shouldKeepTypesWhenDeserializingSerializedTinkerGraph() throws IOException {
- TinkerGraph tg = TinkerGraph.open();
+ final TinkerGraph tg = TinkerGraph.open();
- Vertex v = tg.addVertex("vertexTest");
- UUID uuidProp = UUID.randomUUID();
- Duration durationProp = Duration.ofHours(3);
- Long longProp = 2L;
- ByteBuffer byteBufferProp = ByteBuffer.wrap("testbb".getBytes());
+ final Vertex v = tg.addVertex("vertexTest");
+ final UUID uuidProp = UUID.randomUUID();
+ final Duration durationProp = Duration.ofHours(3);
+ final Long longProp = 2L;
+ final ByteBuffer byteBufferProp = ByteBuffer.wrap("testbb".getBytes());
// One Java util type natively supported by Jackson
v.property("uuid", uuidProp);
@@ -233,14 +234,14 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
// One Java util type added by GraphSON
v.property("bytebuffer", byteBufferProp);
- GraphWriter writer = getWriter(defaultMapperV2d0);
- GraphReader reader = getReader(defaultMapperV2d0);
+ final GraphWriter writer = getWriter(defaultMapperV2d0);
+ final GraphReader reader = getReader(defaultMapperV2d0);
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
writer.writeGraph(out, tg);
- String json = out.toString();
- TinkerGraph read = TinkerGraph.open();
+ final String json = out.toString();
+ final TinkerGraph read = TinkerGraph.open();
reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
- Vertex vRead = read.traversal().V().hasLabel("vertexTest").next();
+ final Vertex vRead = read.traversal().V().hasLabel("vertexTest").next();
assertEquals(vRead.property("uuid").value(), uuidProp);
assertEquals(vRead.property("duration").value(), durationProp);
assertEquals(vRead.property("long").value(), longProp);
@@ -251,233 +252,241 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
@Test
public void deserializersTestsVertex() {
- TinkerGraph tg = TinkerGraph.open();
+ final TinkerGraph tg = TinkerGraph.open();
- Vertex v = tg.addVertex("vertexTest");
+ final Vertex v = tg.addVertex("vertexTest");
v.property("born", LocalDateTime.of(1971, 1, 2, 20, 50));
v.property("dead", LocalDateTime.of(1971, 1, 7, 20, 50));
- GraphWriter writer = getWriter(defaultMapperV2d0);
- GraphReader reader = getReader(defaultMapperV2d0);
+ final GraphWriter writer = getWriter(defaultMapperV2d0);
+ final GraphReader reader = getReader(defaultMapperV2d0);
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
writer.writeObject(out, v);
- String json = out.toString();
+ final String json = out.toString();
// Object works, because there's a type in the payload now
// Vertex.class would work as well
// Anything else would not because we check the type in param here with what's in the JSON, for safety.
- Vertex vRead = (Vertex)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+ final Vertex vRead = (Vertex)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
assertEquals(v, vRead);
} catch (IOException e) {
e.printStackTrace();
+ fail("Should not have thrown exception: " + e.getMessage());
}
}
@Test
public void deserializersTestsEdge() {
- TinkerGraph tg = TinkerGraph.open();
+ final TinkerGraph tg = TinkerGraph.open();
- Vertex v = tg.addVertex("vertexTest");
- Vertex v2 = tg.addVertex("vertexTest");
+ final Vertex v = tg.addVertex("vertexTest");
+ final Vertex v2 = tg.addVertex("vertexTest");
- Edge ed = v.addEdge("knows", v2, "time", LocalDateTime.now());
+ final Edge ed = v.addEdge("knows", v2, "time", LocalDateTime.now());
- GraphWriter writer = getWriter(defaultMapperV2d0);
- GraphReader reader = getReader(defaultMapperV2d0);
+ final GraphWriter writer = getWriter(defaultMapperV2d0);
+ final GraphReader reader = getReader(defaultMapperV2d0);
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
writer.writeObject(out, ed);
- String json = out.toString();
+ final String json = out.toString();
// Object works, because there's a type in the payload now
// Edge.class would work as well
// Anything else would not because we check the type in param here with what's in the JSON, for safety.
- Edge eRead = (Edge)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+ final Edge eRead = (Edge)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
assertEquals(ed, eRead);
} catch (IOException e) {
e.printStackTrace();
+ fail("Should not have thrown exception: " + e.getMessage());
}
}
@Test
public void deserializersTestsTinkerGraph() {
- TinkerGraph tg = TinkerGraph.open();
+ final TinkerGraph tg = TinkerGraph.open();
- Vertex v = tg.addVertex("vertexTest");
- Vertex v2 = tg.addVertex("vertexTest");
+ final Vertex v = tg.addVertex("vertexTest");
+ final Vertex v2 = tg.addVertex("vertexTest");
- Edge ed = v.addEdge("knows", v2);
+ v.addEdge("knows", v2);
- GraphWriter writer = getWriter(defaultMapperV2d0);
- GraphReader reader = getReader(defaultMapperV2d0);
+ final GraphWriter writer = getWriter(defaultMapperV2d0);
+ final GraphReader reader = getReader(defaultMapperV2d0);
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
writer.writeObject(out, tg);
- String json = out.toString();
+ final String json = out.toString();
- Graph gRead = (Graph)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+ final Graph gRead = (Graph)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
assertTrue(approximateGraphsCheck(tg, gRead));
} catch (IOException e) {
e.printStackTrace();
+ fail("Should not have thrown exception: " + e.getMessage());
}
}
@Test
public void deserializersTestsProperty() {
- TinkerGraph tg = TinkerGraph.open();
+ final TinkerGraph tg = TinkerGraph.open();
- Vertex v = tg.addVertex("vertexTest");
- Vertex v2 = tg.addVertex("vertexTest");
+ final Vertex v = tg.addVertex("vertexTest");
+ final Vertex v2 = tg.addVertex("vertexTest");
- Edge ed = v.addEdge("knows", v2);
+ final Edge ed = v.addEdge("knows", v2);
- GraphWriter writer = getWriter(defaultMapperV2d0);
- GraphReader reader = getReader(defaultMapperV2d0);
+ final GraphWriter writer = getWriter(defaultMapperV2d0);
+ final GraphReader reader = getReader(defaultMapperV2d0);
- Property prop = ed.property("since", Year.parse("1993"));
+ final Property prop = ed.property("since", Year.parse("1993"));
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
writer.writeObject(out, prop);
- String json = out.toString();
+ final String json = out.toString();
- Property pRead = (Property)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+ final Property pRead = (Property)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
//can't use equals here, because pRead is detached, its parent element has not been intentionally
//serialized and "equals()" checks that.
assertTrue(prop.key().equals(pRead.key()) && prop.value().equals(pRead.value()));
} catch (IOException e) {
e.printStackTrace();
+ fail("Should not have thrown exception: " + e.getMessage());
}
}
@Test
public void deserializersTestsVertexProperty() {
- TinkerGraph tg = TinkerGraph.open();
+ final TinkerGraph tg = TinkerGraph.open();
- Vertex v = tg.addVertex("vertexTest");
+ final Vertex v = tg.addVertex("vertexTest");
- GraphWriter writer = getWriter(defaultMapperV2d0);
- GraphReader reader = getReader(defaultMapperV2d0);
+ final GraphWriter writer = getWriter(defaultMapperV2d0);
+ final GraphReader reader = getReader(defaultMapperV2d0);
- VertexProperty prop = v.property("born", LocalDateTime.of(1971, 1, 2, 20, 50));
+ final VertexProperty prop = v.property("born", LocalDateTime.of(1971, 1, 2, 20, 50));
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
writer.writeObject(out, prop);
- String json = out.toString();
+ final String json = out.toString();
- VertexProperty vPropRead = (VertexProperty)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+ final VertexProperty vPropRead = (VertexProperty)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
//only classes and ids are checked, that's ok, full vertex property ser/de
//is checked elsewhere.
assertEquals(prop, vPropRead);
} catch (IOException e) {
e.printStackTrace();
+ fail("Should not have thrown exception: " + e.getMessage());
}
}
@Test
public void deserializersTestsPath() {
- TinkerGraph tg = TinkerFactory.createModern();
+ final TinkerGraph tg = TinkerFactory.createModern();
- GraphWriter writer = getWriter(defaultMapperV2d0);
- GraphReader reader = getReader(defaultMapperV2d0);
+ final GraphWriter writer = getWriter(defaultMapperV2d0);
+ final GraphReader reader = getReader(defaultMapperV2d0);
- Path p = tg.traversal().V(1).as("a").has("name").as("b").
+ final Path p = tg.traversal().V(1).as("a").has("name").as("b").
out("knows").out("created").as("c").
has("name", "ripple").values("name").as("d").
identity().as("e").path().next();
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
writer.writeObject(out, p);
- String json = out.toString();
+ final String json = out.toString();
- Path pathRead = (Path)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+ final Path pathRead = (Path)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
for (int i = 0; i < p.objects().size(); i++) {
- Object o = p.objects().get(i);
- Object oRead = pathRead.objects().get(i);
+ final Object o = p.objects().get(i);
+ final Object oRead = pathRead.objects().get(i);
assertEquals(o, oRead);
}
for (int i = 0; i < p.labels().size(); i++) {
- Set<String> o = p.labels().get(i);
- Set<String> oRead = pathRead.labels().get(i);
+ final Set<String> o = p.labels().get(i);
+ final Set<String> oRead = pathRead.labels().get(i);
assertEquals(o, oRead);
}
} catch (IOException e) {
e.printStackTrace();
+ fail("Should not have thrown exception: " + e.getMessage());
}
}
@Test
public void deserializersTestsMetrics() {
- TinkerGraph tg = TinkerFactory.createModern();
+ final TinkerGraph tg = TinkerFactory.createModern();
- GraphWriter writer = getWriter(defaultMapperV2d0);
- GraphReader reader = getReader(defaultMapperV2d0);
+ final GraphWriter writer = getWriter(defaultMapperV2d0);
+ final GraphReader reader = getReader(defaultMapperV2d0);
- TraversalMetrics tm = tg.traversal().V(1).as("a").has("name").as("b").
+ final TraversalMetrics tm = tg.traversal().V(1).as("a").has("name").as("b").
out("knows").out("created").as("c").
has("name", "ripple").values("name").as("d").
identity().as("e").profile().next();
- MutableMetrics m = new MutableMetrics(tm.getMetrics(0));
+ final MutableMetrics m = new MutableMetrics(tm.getMetrics(0));
// making sure nested metrics are included in serde
m.addNested(new MutableMetrics(tm.getMetrics(1)));
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
writer.writeObject(out, m);
- String json = out.toString();
+ final String json = out.toString();
- Metrics metricsRead = (Metrics)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+ final Metrics metricsRead = (Metrics)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
// toString should be enough to compare Metrics
assertTrue(m.toString().equals(metricsRead.toString()));
} catch (IOException e) {
e.printStackTrace();
+ fail("Should not have thrown exception: " + e.getMessage());
}
}
@Test
public void deserializersTestsTraversalMetrics() {
- TinkerGraph tg = TinkerFactory.createModern();
+ final TinkerGraph tg = TinkerFactory.createModern();
- GraphWriter writer = getWriter(defaultMapperV2d0);
- GraphReader reader = getReader(defaultMapperV2d0);
+ final GraphWriter writer = getWriter(defaultMapperV2d0);
+ final GraphReader reader = getReader(defaultMapperV2d0);
- TraversalMetrics tm = tg.traversal().V(1).as("a").has("name").as("b").
+ final TraversalMetrics tm = tg.traversal().V(1).as("a").has("name").as("b").
out("knows").out("created").as("c").
has("name", "ripple").values("name").as("d").
identity().as("e").profile().next();
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
writer.writeObject(out, tm);
- String json = out.toString();
+ final String json = out.toString();
- TraversalMetrics traversalMetricsRead = (TraversalMetrics)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+ final TraversalMetrics traversalMetricsRead = (TraversalMetrics)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
// toString should be enough to compare TraversalMetrics
assertTrue(tm.toString().equals(traversalMetricsRead.toString()));
} catch (IOException e) {
e.printStackTrace();
+ fail("Should not have thrown exception: " + e.getMessage());
}
}
@Test
public void deserializersTree() {
- TinkerGraph tg = TinkerFactory.createModern();
+ final TinkerGraph tg = TinkerFactory.createModern();
- GraphWriter writer = getWriter(noTypesMapperV2d0);
- GraphReader reader = getReader(noTypesMapperV2d0);
+ final GraphWriter writer = getWriter(noTypesMapperV2d0);
+ final GraphReader reader = getReader(noTypesMapperV2d0);
- Tree t = tg.traversal().V().out().out().tree().next();
+ final Tree t = tg.traversal().V().out().out().tree().next();
try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
- Vertex v = tg.traversal().V(1).next();
+ final Vertex v = tg.traversal().V(1).next();
v.property("myUUIDprop", UUID.randomUUID());
writer.writeObject(out, v);
// writer.writeObject(out, t);
- String json = out.toString();
+ final String json = out.toString();
- System.out.println("json = " + json);
+ //System.out.println("json = " + json);
// Tree treeRead = (Tree)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
//Map's equals should check each component of the tree recursively
@@ -485,10 +494,9 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
//is ok. Complete vertex deser is checked elsewhere.
// assertEquals(t, treeRead);
-
-
} catch (IOException e) {
e.printStackTrace();
+ fail("Should not have thrown exception: " + e.getMessage());
}
}
@@ -501,28 +509,28 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
}
/**
- * Checks sequentially vertices and egdes of both graphs. Will check sequentially Vertex IDs, Vertex Properties IDs
+ * Checks sequentially vertices and edges of both graphs. Will check sequentially Vertex IDs, Vertex Properties IDs
* and values and classes. Then same for edges. To use when serializing a Graph and deserializing the supposedly
* same Graph.
*/
private boolean approximateGraphsCheck(Graph g1, Graph g2) {
- Iterator<Vertex> itV = g1.vertices();
- Iterator<Vertex> itVRead = g2.vertices();
+ final Iterator<Vertex> itV = g1.vertices();
+ final Iterator<Vertex> itVRead = g2.vertices();
while (itV.hasNext()) {
- Vertex v = itV.next();
- Vertex vRead = itVRead.next();
+ final Vertex v = itV.next();
+ final Vertex vRead = itVRead.next();
// Will only check IDs but that's 'good' enough.
if (!v.equals(vRead)) {
return false;
}
- Iterator itVP = v.properties();
- Iterator itVPRead = vRead.properties();
+ final Iterator itVP = v.properties();
+ final Iterator itVPRead = vRead.properties();
while (itVP.hasNext()) {
- VertexProperty vp = (VertexProperty) itVP.next();
- VertexProperty vpRead = (VertexProperty) itVPRead.next();
+ final VertexProperty vp = (VertexProperty) itVP.next();
+ final VertexProperty vpRead = (VertexProperty) itVPRead.next();
if (!vp.value().equals(vpRead.value())
|| !vp.equals(vpRead)) {
return false;
@@ -530,22 +538,22 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
}
}
- Iterator<Edge> itE = g1.edges();
- Iterator<Edge> itERead = g2.edges();
+ final Iterator<Edge> itE = g1.edges();
+ final Iterator<Edge> itERead = g2.edges();
while (itE.hasNext()) {
- Edge e = itE.next();
- Edge eRead = itERead.next();
+ final Edge e = itE.next();
+ final Edge eRead = itERead.next();
// Will only check IDs but that's good enough.
if (!e.equals(eRead)) {
return false;
}
- Iterator itEP = e.properties();
- Iterator itEPRead = eRead.properties();
+ final Iterator itEP = e.properties();
+ final Iterator itEPRead = eRead.properties();
while (itEP.hasNext()) {
- Property ep = (Property) itEP.next();
- Property epRead = (Property) itEPRead.next();
+ final Property ep = (Property) itEP.next();
+ final Property epRead = (Property) itEPRead.next();
if (!ep.value().equals(epRead.value())
|| !ep.equals(epRead)) {
return false;
[02/19] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.
Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead.json
index cf01395..92c4d84 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead.json
@@ -1,257 +1,257 @@
{"id":1,"label":"song","inE":{"followedBy":[{"id":3059,"outV":153,"properties":{"weight":1}},{"id":276,"outV":5,"properties":{"weight":2}},{"id":3704,"outV":3,"properties":{"weight":2}},{"id":4383,"outV":62,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":0,"inV":2,"properties":{"weight":1}},{"id":1,"inV":3,"properties":{"weight":2}},{"id":2,"inV":4,"properties":{"weight":1}},{"id":3,"inV":5,"properties":{"weight":1}},{"id":4,"inV":6,"properties":{"weight":1}}],"sungBy":[{"id":7612,"inV":340}],"writtenBy":[{"id":7611,"inV":527}]},"properties":{"name":[{"id":0,"value":"HEY BO DIDDLEY"}],"songType":[{"id":2,"value":"cover"}],"performances":[{"id":1,"value":5}]}}
{"id":2,"label":"song","inE":{"followedBy":[{"id":0,"outV":1,"properties":{"weight":1}},{"id":323,"outV":34,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6190,"inV":123,"properties":{"weight":1}},{"id":6191,"inV":50,"properties":{"weight":1}}],"sungBy":[{"id":7666,"inV":525}],"writtenBy":[{"id":7665,"inV":525}]},"properties":{"name":[{"id":3,"value":"IM A MAN"}],"songType":[{"id":5,"value":"cover"}],"performances":[{"id":4,"value":1}]}}
-{"id":3,"label":"song","inE":{"followedBy":[{"id":1,"outV":1,"properties":{"weight":2}},{"id":2051,"outV":92,"properties":{"weight":4}},{"id":1412,"outV":83,"properties":{"weight":6}},{"id":6669,"outV":12,"properties":{"weight":1}},{"id":1166,"outV":26,"properties":{"weight":4}},{"id":6286,"outV":49,"properties":{"weight":1}},{"id":910,"outV":91,"properties":{"weight":3}},{"id":526,"outV":120,"properties":{"weight":2}},{"id":273,"outV":5,"properties":{"weight":40}},{"id":2194,"outV":235,"properties":{"weight":1}},{"id":1684,"outV":124,"properties":{"weight":1}},{"id":3221,"outV":63,"properties":{"weight":1}},{"id":1941,"outV":148,"properties":{"weight":4}},{"id":2712,"outV":13,"properties":{"weight":3}},{"id":6425,"outV":134,"properties":{"weight":2}},{"id":5787,"outV":76,"properties":{"weight":2}},{"id":5148,"outV":125,"properties":{"weight":4}},{"id":6692,"outV":141,"properties":{"weight":2}},{"id":6310,"outV":123,"properties":{"weight":1}},{"id":6448,"outV":187,"properties":{"wei
ght":3}},{"id":2225,"outV":226,"properties":{"weight":1}},{"id":5042,"outV":209,"properties":{"weight":1}},{"id":4789,"outV":114,"properties":{"weight":2}},{"id":1464,"outV":81,"properties":{"weight":1}},{"id":2232,"outV":215,"properties":{"weight":1}},{"id":4665,"outV":154,"properties":{"weight":1}},{"id":2235,"outV":29,"properties":{"weight":163}},{"id":6208,"outV":319,"properties":{"weight":4}},{"id":706,"outV":206,"properties":{"weight":2}},{"id":835,"outV":171,"properties":{"weight":1}},{"id":5188,"outV":99,"properties":{"weight":1}},{"id":1862,"outV":94,"properties":{"weight":10}},{"id":6343,"outV":21,"properties":{"weight":1}},{"id":1735,"outV":82,"properties":{"weight":1}},{"id":4937,"outV":277,"properties":{"weight":1}},{"id":3276,"outV":160,"properties":{"weight":1}},{"id":3149,"outV":104,"properties":{"weight":1}},{"id":1358,"outV":130,"properties":{"weight":18}},{"id":4304,"outV":110,"properties":{"weight":1}},{"id":1105,"outV":59,"properties":{"weight":1}},{"id":722,"ou
tV":80,"properties":{"weight":1}},{"id":4182,"outV":54,"properties":{"weight":1}},{"id":1499,"outV":164,"properties":{"weight":2}},{"id":2397,"outV":179,"properties":{"weight":1}},{"id":6623,"outV":127,"properties":{"weight":3}},{"id":351,"outV":178,"properties":{"weight":1}},{"id":2018,"outV":149,"properties":{"weight":1}},{"id":7011,"outV":89,"properties":{"weight":2}},{"id":5348,"outV":165,"properties":{"weight":1}},{"id":2278,"outV":25,"properties":{"weight":7}},{"id":1255,"outV":27,"properties":{"weight":2}},{"id":3048,"outV":153,"properties":{"weight":13}},{"id":5867,"outV":96,"properties":{"weight":116}},{"id":364,"outV":74,"properties":{"weight":2}},{"id":492,"outV":98,"properties":{"weight":1}},{"id":3948,"outV":138,"properties":{"weight":4}},{"id":4335,"outV":62,"properties":{"weight":1}},{"id":3312,"outV":252,"properties":{"weight":1}},{"id":5745,"outV":129,"properties":{"weight":1}},{"id":4596,"outV":85,"properties":{"weight":3}},{"id":5367,"outV":132,"properties":{"weig
ht":1}},{"id":633,"outV":23,"properties":{"weight":1}},{"id":891,"outV":140,"properties":{"weight":2}},{"id":5375,"outV":69,"properties":{"weight":1}},{"id":6143,"outV":289,"properties":{"weight":3}}]},"outE":{"followedBy":[{"id":3712,"inV":27,"properties":{"weight":1}},{"id":3713,"inV":110,"properties":{"weight":4}},{"id":3714,"inV":215,"properties":{"weight":4}},{"id":3715,"inV":127,"properties":{"weight":10}},{"id":3716,"inV":83,"properties":{"weight":3}},{"id":3717,"inV":103,"properties":{"weight":2}},{"id":3718,"inV":68,"properties":{"weight":1}},{"id":3719,"inV":134,"properties":{"weight":2}},{"id":3720,"inV":25,"properties":{"weight":10}},{"id":3721,"inV":125,"properties":{"weight":54}},{"id":3722,"inV":130,"properties":{"weight":26}},{"id":3723,"inV":141,"properties":{"weight":2}},{"id":3724,"inV":145,"properties":{"weight":1}},{"id":3725,"inV":319,"properties":{"weight":3}},{"id":3726,"inV":12,"properties":{"weight":1}},{"id":3727,"inV":160,"properties":{"weight":37}},{"id"
:3728,"inV":70,"properties":{"weight":2}},{"id":3729,"inV":123,"properties":{"weight":1}},{"id":3730,"inV":129,"properties":{"weight":1}},{"id":3731,"inV":30,"properties":{"weight":2}},{"id":3732,"inV":148,"properties":{"weight":1}},{"id":3733,"inV":211,"properties":{"weight":3}},{"id":3734,"inV":87,"properties":{"weight":13}},{"id":3735,"inV":164,"properties":{"weight":4}},{"id":3736,"inV":64,"properties":{"weight":2}},{"id":3737,"inV":320,"properties":{"weight":1}},{"id":3738,"inV":61,"properties":{"weight":3}},{"id":3739,"inV":210,"properties":{"weight":3}},{"id":3740,"inV":50,"properties":{"weight":7}},{"id":3741,"inV":128,"properties":{"weight":3}},{"id":3742,"inV":315,"properties":{"weight":1}},{"id":3743,"inV":261,"properties":{"weight":1}},{"id":3744,"inV":213,"properties":{"weight":13}},{"id":3745,"inV":72,"properties":{"weight":1}},{"id":3746,"inV":38,"properties":{"weight":4}},{"id":3747,"inV":204,"properties":{"weight":14}},{"id":3748,"inV":62,"properties":{"weight":2}},
{"id":3749,"inV":150,"properties":{"weight":8}},{"id":3750,"inV":309,"properties":{"weight":1}},{"id":3751,"inV":131,"properties":{"weight":1}},{"id":3752,"inV":151,"properties":{"weight":1}},{"id":3753,"inV":321,"properties":{"weight":1}},{"id":3754,"inV":90,"properties":{"weight":2}},{"id":3755,"inV":82,"properties":{"weight":1}},{"id":3756,"inV":120,"properties":{"weight":1}},{"id":3757,"inV":46,"properties":{"weight":5}},{"id":3758,"inV":157,"properties":{"weight":5}},{"id":3759,"inV":59,"properties":{"weight":1}},{"id":3760,"inV":81,"properties":{"weight":1}},{"id":3761,"inV":86,"properties":{"weight":5}},{"id":3762,"inV":140,"properties":{"weight":1}},{"id":3763,"inV":201,"properties":{"weight":1}},{"id":3764,"inV":214,"properties":{"weight":1}},{"id":3765,"inV":185,"properties":{"weight":2}},{"id":3766,"inV":216,"properties":{"weight":1}},{"id":3767,"inV":217,"properties":{"weight":2}},{"id":3768,"inV":236,"properties":{"weight":5}},{"id":3769,"inV":193,"properties":{"weight"
:1}},{"id":3770,"inV":79,"properties":{"weight":2}},{"id":3771,"inV":84,"properties":{"weight":1}},{"id":3772,"inV":23,"properties":{"weight":2}},{"id":3773,"inV":31,"properties":{"weight":2}},{"id":3774,"inV":240,"properties":{"weight":1}},{"id":3775,"inV":292,"properties":{"weight":1}},{"id":3776,"inV":9,"properties":{"weight":1}},{"id":3777,"inV":259,"properties":{"weight":1}},{"id":3694,"inV":5,"properties":{"weight":57}},{"id":3695,"inV":114,"properties":{"weight":30}},{"id":3696,"inV":74,"properties":{"weight":2}},{"id":3697,"inV":78,"properties":{"weight":3}},{"id":3698,"inV":10,"properties":{"weight":1}},{"id":3699,"inV":26,"properties":{"weight":4}},{"id":3700,"inV":153,"properties":{"weight":7}},{"id":3701,"inV":4,"properties":{"weight":4}},{"id":3702,"inV":317,"properties":{"weight":1}},{"id":3703,"inV":13,"properties":{"weight":5}},{"id":3704,"inV":1,"properties":{"weight":2}},{"id":3705,"inV":21,"properties":{"weight":2}},{"id":3706,"inV":57,"properties":{"weight":2}},{
"id":3707,"inV":122,"properties":{"weight":2}},{"id":3708,"inV":318,"properties":{"weight":1}},{"id":3709,"inV":94,"properties":{"weight":26}},{"id":3710,"inV":96,"properties":{"weight":7}},{"id":3711,"inV":124,"properties":{"weight":15}}],"sungBy":[{"id":7808,"inV":351}],"writtenBy":[{"id":7807,"inV":671}]},"properties":{"name":[{"id":6,"value":"NOT FADE AWAY"}],"songType":[{"id":8,"value":"cover"}],"performances":[{"id":7,"value":531}]}}
-{"id":4,"label":"song","inE":{"followedBy":[{"id":128,"outV":97,"properties":{"weight":1}},{"id":1664,"outV":267,"properties":{"weight":1}},{"id":2,"outV":1,"properties":{"weight":1}},{"id":4099,"outV":48,"properties":{"weight":1}},{"id":1667,"outV":124,"properties":{"weight":15}},{"id":899,"outV":140,"properties":{"weight":1}},{"id":1156,"outV":26,"properties":{"weight":16}},{"id":773,"outV":122,"properties":{"weight":9}},{"id":6534,"outV":242,"properties":{"weight":1}},{"id":6664,"outV":12,"properties":{"weight":3}},{"id":1032,"outV":73,"properties":{"weight":1}},{"id":5129,"outV":222,"properties":{"weight":1}},{"id":5387,"outV":69,"properties":{"weight":1}},{"id":5517,"outV":43,"properties":{"weight":2}},{"id":5006,"outV":30,"properties":{"weight":2}},{"id":6030,"outV":204,"properties":{"weight":2}},{"id":2063,"outV":92,"properties":{"weight":1}},{"id":915,"outV":91,"properties":{"weight":2}},{"id":6940,"outV":84,"properties":{"weight":5}},{"id":2464,"outV":68,"properties":{"weig
ht":1}},{"id":5795,"outV":76,"properties":{"weight":2}},{"id":3620,"outV":24,"properties":{"weight":2}},{"id":4772,"outV":114,"properties":{"weight":25}},{"id":2982,"outV":14,"properties":{"weight":3}},{"id":3367,"outV":184,"properties":{"weight":6}},{"id":2345,"outV":87,"properties":{"weight":2}},{"id":2861,"outV":101,"properties":{"weight":6}},{"id":1840,"outV":275,"properties":{"weight":1}},{"id":5425,"outV":102,"properties":{"weight":1}},{"id":180,"outV":70,"properties":{"weight":46}},{"id":2613,"outV":158,"properties":{"weight":1}},{"id":5562,"outV":162,"properties":{"weight":2}},{"id":5434,"outV":217,"properties":{"weight":1}},{"id":1469,"outV":81,"properties":{"weight":1}},{"id":446,"outV":38,"properties":{"weight":7}},{"id":2494,"outV":90,"properties":{"weight":3}},{"id":3266,"outV":160,"properties":{"weight":10}},{"id":326,"outV":34,"properties":{"weight":1}},{"id":6855,"outV":64,"properties":{"weight":12}},{"id":583,"outV":120,"properties":{"weight":2}},{"id":73,"outV":46,
"properties":{"weight":4}},{"id":4425,"outV":212,"properties":{"weight":1}},{"id":4941,"outV":86,"properties":{"weight":2}},{"id":1613,"outV":210,"properties":{"weight":2}},{"id":6350,"outV":21,"properties":{"weight":1}},{"id":3535,"outV":201,"properties":{"weight":1}},{"id":980,"outV":11,"properties":{"weight":3}},{"id":5206,"outV":99,"properties":{"weight":1}},{"id":1494,"outV":164,"properties":{"weight":3}},{"id":5847,"outV":61,"properties":{"weight":2}},{"id":6490,"outV":187,"properties":{"weight":1}},{"id":2781,"outV":15,"properties":{"weight":4}},{"id":5600,"outV":42,"properties":{"weight":1}},{"id":353,"outV":74,"properties":{"weight":6}},{"id":5474,"outV":79,"properties":{"weight":1}},{"id":3811,"outV":88,"properties":{"weight":2}},{"id":1891,"outV":103,"properties":{"weight":19}},{"id":5989,"outV":50,"properties":{"weight":12}},{"id":4327,"outV":110,"properties":{"weight":2}},{"id":2538,"outV":57,"properties":{"weight":4}},{"id":3050,"outV":153,"properties":{"weight":13}},{
"id":4970,"outV":236,"properties":{"weight":1}},{"id":2283,"outV":25,"properties":{"weight":9}},{"id":236,"outV":145,"properties":{"weight":1}},{"id":6126,"outV":72,"properties":{"weight":2}},{"id":5232,"outV":214,"properties":{"weight":2}},{"id":4594,"outV":85,"properties":{"weight":1}},{"id":4084,"outV":109,"properties":{"weight":1}},{"id":1652,"outV":213,"properties":{"weight":3}},{"id":3701,"outV":3,"properties":{"weight":4}},{"id":5621,"outV":22,"properties":{"weight":1}},{"id":629,"outV":23,"properties":{"weight":10}},{"id":7029,"outV":89,"properties":{"weight":1}},{"id":5238,"outV":32,"properties":{"weight":3}},{"id":2684,"outV":13,"properties":{"weight":9}},{"id":3325,"outV":268,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5120,"inV":40,"properties":{"weight":5}},{"id":5121,"inV":33,"properties":{"weight":3}},{"id":5122,"inV":79,"properties":{"weight":1}},{"id":5123,"inV":292,"properties":{"weight":1}},{"id":5071,"inV":50,"properties":{"weight":9}},{"id":5072,"in
V":12,"properties":{"weight":26}},{"id":5073,"inV":18,"properties":{"weight":4}},{"id":5074,"inV":24,"properties":{"weight":9}},{"id":5075,"inV":23,"properties":{"weight":63}},{"id":5076,"inV":13,"properties":{"weight":12}},{"id":5077,"inV":10,"properties":{"weight":4}},{"id":5078,"inV":11,"properties":{"weight":3}},{"id":5079,"inV":26,"properties":{"weight":18}},{"id":5080,"inV":22,"properties":{"weight":1}},{"id":5081,"inV":16,"properties":{"weight":2}},{"id":5082,"inV":49,"properties":{"weight":1}},{"id":5083,"inV":25,"properties":{"weight":2}},{"id":5084,"inV":51,"properties":{"weight":1}},{"id":5085,"inV":15,"properties":{"weight":1}},{"id":5086,"inV":112,"properties":{"weight":4}},{"id":5087,"inV":121,"properties":{"weight":1}},{"id":5088,"inV":32,"properties":{"weight":7}},{"id":5089,"inV":68,"properties":{"weight":2}},{"id":5090,"inV":120,"properties":{"weight":77}},{"id":5091,"inV":103,"properties":{"weight":1}},{"id":5092,"inV":42,"properties":{"weight":3}},{"id":5093,"inV
":85,"properties":{"weight":4}},{"id":5094,"inV":76,"properties":{"weight":5}},{"id":5095,"inV":181,"properties":{"weight":2}},{"id":5096,"inV":14,"properties":{"weight":2}},{"id":5097,"inV":122,"properties":{"weight":1}},{"id":5098,"inV":153,"properties":{"weight":3}},{"id":5099,"inV":96,"properties":{"weight":1}},{"id":5100,"inV":82,"properties":{"weight":3}},{"id":5101,"inV":110,"properties":{"weight":1}},{"id":5102,"inV":19,"properties":{"weight":6}},{"id":5103,"inV":129,"properties":{"weight":1}},{"id":5104,"inV":84,"properties":{"weight":1}},{"id":5105,"inV":88,"properties":{"weight":9}},{"id":5106,"inV":97,"properties":{"weight":1}},{"id":5107,"inV":114,"properties":{"weight":2}},{"id":5108,"inV":30,"properties":{"weight":8}},{"id":5109,"inV":31,"properties":{"weight":8}},{"id":5110,"inV":69,"properties":{"weight":4}},{"id":5111,"inV":127,"properties":{"weight":2}},{"id":5112,"inV":60,"properties":{"weight":1}},{"id":5113,"inV":39,"properties":{"weight":2}},{"id":5114,"inV":2
1,"properties":{"weight":1}},{"id":5115,"inV":117,"properties":{"weight":1}},{"id":5116,"inV":78,"properties":{"weight":1}},{"id":5117,"inV":38,"properties":{"weight":1}},{"id":5118,"inV":169,"properties":{"weight":2}},{"id":5119,"inV":118,"properties":{"weight":1}}],"sungBy":[{"id":7064,"inV":340}],"writtenBy":[{"id":7063,"inV":339}]},"properties":{"name":[{"id":9,"value":"BERTHA"}],"songType":[{"id":11,"value":"original"}],"performances":[{"id":10,"value":394}]}}
-{"id":5,"label":"song","inE":{"followedBy":[{"id":962,"outV":67,"properties":{"weight":5}},{"id":194,"outV":70,"properties":{"weight":8}},{"id":3,"outV":1,"properties":{"weight":1}},{"id":5446,"outV":231,"properties":{"weight":5}},{"id":6344,"outV":21,"properties":{"weight":6}},{"id":6666,"outV":12,"properties":{"weight":1}},{"id":1738,"outV":82,"properties":{"weight":1}},{"id":1867,"outV":94,"properties":{"weight":15}},{"id":4300,"outV":110,"properties":{"weight":1}},{"id":847,"outV":171,"properties":{"weight":1}},{"id":2832,"outV":101,"properties":{"weight":3}},{"id":6032,"outV":115,"properties":{"weight":1}},{"id":1170,"outV":26,"properties":{"weight":1}},{"id":5330,"outV":238,"properties":{"weight":1}},{"id":1491,"outV":164,"properties":{"weight":3}},{"id":1429,"outV":83,"properties":{"weight":3}},{"id":3033,"outV":14,"properties":{"weight":1}},{"id":6298,"outV":49,"properties":{"weight":1}},{"id":1373,"outV":130,"properties":{"weight":11}},{"id":4447,"outV":113,"properties":{"w
eight":1}},{"id":5151,"outV":125,"properties":{"weight":6}},{"id":6431,"outV":134,"properties":{"weight":2}},{"id":5343,"outV":165,"properties":{"weight":2}},{"id":1953,"outV":148,"properties":{"weight":10}},{"id":2274,"outV":25,"properties":{"weight":8}},{"id":1634,"outV":210,"properties":{"weight":1}},{"id":100,"outV":46,"properties":{"weight":1}},{"id":933,"outV":91,"properties":{"weight":1}},{"id":2021,"outV":149,"properties":{"weight":1}},{"id":6694,"outV":141,"properties":{"weight":2}},{"id":4009,"outV":225,"properties":{"weight":1}},{"id":682,"outV":219,"properties":{"weight":1}},{"id":3694,"outV":3,"properties":{"weight":57}},{"id":4718,"outV":186,"properties":{"weight":6}},{"id":3055,"outV":153,"properties":{"weight":9}},{"id":2736,"outV":13,"properties":{"weight":3}},{"id":2480,"outV":68,"properties":{"weight":1}},{"id":5426,"outV":102,"properties":{"weight":1}},{"id":6899,"outV":147,"properties":{"weight":1}},{"id":5879,"outV":96,"properties":{"weight":22}},{"id":6201,"ou
tV":319,"properties":{"weight":2}},{"id":5370,"outV":132,"properties":{"weight":2}},{"id":2236,"outV":29,"properties":{"weight":5}},{"id":4604,"outV":85,"properties":{"weight":2}},{"id":700,"outV":206,"properties":{"weight":1}},{"id":5759,"outV":129,"properties":{"weight":6}}]},"outE":{"followedBy":[{"id":273,"inV":3,"properties":{"weight":40}},{"id":274,"inV":26,"properties":{"weight":3}},{"id":275,"inV":114,"properties":{"weight":40}},{"id":276,"inV":1,"properties":{"weight":2}},{"id":277,"inV":74,"properties":{"weight":3}},{"id":278,"inV":122,"properties":{"weight":3}},{"id":279,"inV":133,"properties":{"weight":2}},{"id":280,"inV":83,"properties":{"weight":1}},{"id":281,"inV":153,"properties":{"weight":5}},{"id":282,"inV":159,"properties":{"weight":1}},{"id":283,"inV":13,"properties":{"weight":3}},{"id":284,"inV":25,"properties":{"weight":19}},{"id":285,"inV":96,"properties":{"weight":10}},{"id":286,"inV":160,"properties":{"weight":2}},{"id":287,"inV":32,"properties":{"weight":1}
},{"id":288,"inV":120,"properties":{"weight":16}},{"id":289,"inV":50,"properties":{"weight":1}},{"id":290,"inV":116,"properties":{"weight":1}},{"id":291,"inV":127,"properties":{"weight":6}},{"id":292,"inV":65,"properties":{"weight":1}},{"id":293,"inV":130,"properties":{"weight":3}},{"id":294,"inV":125,"properties":{"weight":5}},{"id":295,"inV":70,"properties":{"weight":13}},{"id":296,"inV":134,"properties":{"weight":1}},{"id":297,"inV":161,"properties":{"weight":1}},{"id":298,"inV":162,"properties":{"weight":1}},{"id":299,"inV":124,"properties":{"weight":3}},{"id":300,"inV":38,"properties":{"weight":1}},{"id":301,"inV":29,"properties":{"weight":11}},{"id":302,"inV":163,"properties":{"weight":1}},{"id":303,"inV":94,"properties":{"weight":5}},{"id":304,"inV":85,"properties":{"weight":1}},{"id":305,"inV":164,"properties":{"weight":6}},{"id":306,"inV":64,"properties":{"weight":1}},{"id":307,"inV":150,"properties":{"weight":1}},{"id":308,"inV":165,"properties":{"weight":7}},{"id":309,"in
V":92,"properties":{"weight":1}},{"id":310,"inV":140,"properties":{"weight":1}},{"id":311,"inV":166,"properties":{"weight":1}}],"sungBy":[{"id":7582,"inV":340}],"writtenBy":[{"id":7581,"inV":446}]},"properties":{"name":[{"id":12,"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":14,"value":"cover"}],"performances":[{"id":13,"value":293}]}}
+{"id":3,"label":"song","inE":{"followedBy":[{"id":1,"outV":1,"properties":{"weight":2}},{"id":2051,"outV":92,"properties":{"weight":4}},{"id":1412,"outV":83,"properties":{"weight":6}},{"id":6669,"outV":12,"properties":{"weight":1}},{"id":526,"outV":120,"properties":{"weight":2}},{"id":910,"outV":91,"properties":{"weight":3}},{"id":1166,"outV":26,"properties":{"weight":4}},{"id":6286,"outV":49,"properties":{"weight":1}},{"id":273,"outV":5,"properties":{"weight":40}},{"id":2194,"outV":235,"properties":{"weight":1}},{"id":1684,"outV":124,"properties":{"weight":1}},{"id":1941,"outV":148,"properties":{"weight":4}},{"id":3221,"outV":63,"properties":{"weight":1}},{"id":2712,"outV":13,"properties":{"weight":3}},{"id":6425,"outV":134,"properties":{"weight":2}},{"id":5787,"outV":76,"properties":{"weight":2}},{"id":5148,"outV":125,"properties":{"weight":4}},{"id":6692,"outV":141,"properties":{"weight":2}},{"id":6310,"outV":123,"properties":{"weight":1}},{"id":6448,"outV":187,"properties":{"wei
ght":3}},{"id":2225,"outV":226,"properties":{"weight":1}},{"id":5042,"outV":209,"properties":{"weight":1}},{"id":4789,"outV":114,"properties":{"weight":2}},{"id":1464,"outV":81,"properties":{"weight":1}},{"id":2232,"outV":215,"properties":{"weight":1}},{"id":4665,"outV":154,"properties":{"weight":1}},{"id":2235,"outV":29,"properties":{"weight":163}},{"id":6208,"outV":319,"properties":{"weight":4}},{"id":706,"outV":206,"properties":{"weight":2}},{"id":835,"outV":171,"properties":{"weight":1}},{"id":5188,"outV":99,"properties":{"weight":1}},{"id":1862,"outV":94,"properties":{"weight":10}},{"id":1735,"outV":82,"properties":{"weight":1}},{"id":6343,"outV":21,"properties":{"weight":1}},{"id":4937,"outV":277,"properties":{"weight":1}},{"id":3276,"outV":160,"properties":{"weight":1}},{"id":3149,"outV":104,"properties":{"weight":1}},{"id":1358,"outV":130,"properties":{"weight":18}},{"id":4304,"outV":110,"properties":{"weight":1}},{"id":1105,"outV":59,"properties":{"weight":1}},{"id":722,"ou
tV":80,"properties":{"weight":1}},{"id":4182,"outV":54,"properties":{"weight":1}},{"id":1499,"outV":164,"properties":{"weight":2}},{"id":2397,"outV":179,"properties":{"weight":1}},{"id":351,"outV":178,"properties":{"weight":1}},{"id":6623,"outV":127,"properties":{"weight":3}},{"id":2018,"outV":149,"properties":{"weight":1}},{"id":7011,"outV":89,"properties":{"weight":2}},{"id":5348,"outV":165,"properties":{"weight":1}},{"id":2278,"outV":25,"properties":{"weight":7}},{"id":1255,"outV":27,"properties":{"weight":2}},{"id":3048,"outV":153,"properties":{"weight":13}},{"id":5867,"outV":96,"properties":{"weight":116}},{"id":364,"outV":74,"properties":{"weight":2}},{"id":492,"outV":98,"properties":{"weight":1}},{"id":3948,"outV":138,"properties":{"weight":4}},{"id":4335,"outV":62,"properties":{"weight":1}},{"id":3312,"outV":252,"properties":{"weight":1}},{"id":5745,"outV":129,"properties":{"weight":1}},{"id":4596,"outV":85,"properties":{"weight":3}},{"id":5367,"outV":132,"properties":{"weig
ht":1}},{"id":633,"outV":23,"properties":{"weight":1}},{"id":891,"outV":140,"properties":{"weight":2}},{"id":5375,"outV":69,"properties":{"weight":1}},{"id":6143,"outV":289,"properties":{"weight":3}}]},"outE":{"followedBy":[{"id":3712,"inV":27,"properties":{"weight":1}},{"id":3713,"inV":110,"properties":{"weight":4}},{"id":3714,"inV":215,"properties":{"weight":4}},{"id":3715,"inV":127,"properties":{"weight":10}},{"id":3716,"inV":83,"properties":{"weight":3}},{"id":3717,"inV":103,"properties":{"weight":2}},{"id":3718,"inV":68,"properties":{"weight":1}},{"id":3719,"inV":134,"properties":{"weight":2}},{"id":3720,"inV":25,"properties":{"weight":10}},{"id":3721,"inV":125,"properties":{"weight":54}},{"id":3722,"inV":130,"properties":{"weight":26}},{"id":3723,"inV":141,"properties":{"weight":2}},{"id":3724,"inV":145,"properties":{"weight":1}},{"id":3725,"inV":319,"properties":{"weight":3}},{"id":3726,"inV":12,"properties":{"weight":1}},{"id":3727,"inV":160,"properties":{"weight":37}},{"id"
:3728,"inV":70,"properties":{"weight":2}},{"id":3729,"inV":123,"properties":{"weight":1}},{"id":3730,"inV":129,"properties":{"weight":1}},{"id":3731,"inV":30,"properties":{"weight":2}},{"id":3732,"inV":148,"properties":{"weight":1}},{"id":3733,"inV":211,"properties":{"weight":3}},{"id":3734,"inV":87,"properties":{"weight":13}},{"id":3735,"inV":164,"properties":{"weight":4}},{"id":3736,"inV":64,"properties":{"weight":2}},{"id":3737,"inV":320,"properties":{"weight":1}},{"id":3738,"inV":61,"properties":{"weight":3}},{"id":3739,"inV":210,"properties":{"weight":3}},{"id":3740,"inV":50,"properties":{"weight":7}},{"id":3741,"inV":128,"properties":{"weight":3}},{"id":3742,"inV":315,"properties":{"weight":1}},{"id":3743,"inV":261,"properties":{"weight":1}},{"id":3744,"inV":213,"properties":{"weight":13}},{"id":3745,"inV":72,"properties":{"weight":1}},{"id":3746,"inV":38,"properties":{"weight":4}},{"id":3747,"inV":204,"properties":{"weight":14}},{"id":3748,"inV":62,"properties":{"weight":2}},
{"id":3749,"inV":150,"properties":{"weight":8}},{"id":3750,"inV":309,"properties":{"weight":1}},{"id":3751,"inV":131,"properties":{"weight":1}},{"id":3752,"inV":151,"properties":{"weight":1}},{"id":3753,"inV":321,"properties":{"weight":1}},{"id":3754,"inV":90,"properties":{"weight":2}},{"id":3755,"inV":82,"properties":{"weight":1}},{"id":3756,"inV":120,"properties":{"weight":1}},{"id":3757,"inV":46,"properties":{"weight":5}},{"id":3758,"inV":157,"properties":{"weight":5}},{"id":3759,"inV":59,"properties":{"weight":1}},{"id":3760,"inV":81,"properties":{"weight":1}},{"id":3761,"inV":86,"properties":{"weight":5}},{"id":3762,"inV":140,"properties":{"weight":1}},{"id":3763,"inV":201,"properties":{"weight":1}},{"id":3764,"inV":214,"properties":{"weight":1}},{"id":3765,"inV":185,"properties":{"weight":2}},{"id":3766,"inV":216,"properties":{"weight":1}},{"id":3767,"inV":217,"properties":{"weight":2}},{"id":3768,"inV":236,"properties":{"weight":5}},{"id":3769,"inV":193,"properties":{"weight"
:1}},{"id":3770,"inV":79,"properties":{"weight":2}},{"id":3771,"inV":84,"properties":{"weight":1}},{"id":3772,"inV":23,"properties":{"weight":2}},{"id":3773,"inV":31,"properties":{"weight":2}},{"id":3774,"inV":240,"properties":{"weight":1}},{"id":3775,"inV":292,"properties":{"weight":1}},{"id":3776,"inV":9,"properties":{"weight":1}},{"id":3777,"inV":259,"properties":{"weight":1}},{"id":3694,"inV":5,"properties":{"weight":57}},{"id":3695,"inV":114,"properties":{"weight":30}},{"id":3696,"inV":74,"properties":{"weight":2}},{"id":3697,"inV":78,"properties":{"weight":3}},{"id":3698,"inV":10,"properties":{"weight":1}},{"id":3699,"inV":26,"properties":{"weight":4}},{"id":3700,"inV":153,"properties":{"weight":7}},{"id":3701,"inV":4,"properties":{"weight":4}},{"id":3702,"inV":317,"properties":{"weight":1}},{"id":3703,"inV":13,"properties":{"weight":5}},{"id":3704,"inV":1,"properties":{"weight":2}},{"id":3705,"inV":21,"properties":{"weight":2}},{"id":3706,"inV":57,"properties":{"weight":2}},{
"id":3707,"inV":122,"properties":{"weight":2}},{"id":3708,"inV":318,"properties":{"weight":1}},{"id":3709,"inV":94,"properties":{"weight":26}},{"id":3710,"inV":96,"properties":{"weight":7}},{"id":3711,"inV":124,"properties":{"weight":15}}],"sungBy":[{"id":7808,"inV":351}],"writtenBy":[{"id":7807,"inV":671}]},"properties":{"name":[{"id":6,"value":"NOT FADE AWAY"}],"songType":[{"id":8,"value":"cover"}],"performances":[{"id":7,"value":531}]}}
+{"id":4,"label":"song","inE":{"followedBy":[{"id":128,"outV":97,"properties":{"weight":1}},{"id":1664,"outV":267,"properties":{"weight":1}},{"id":2,"outV":1,"properties":{"weight":1}},{"id":899,"outV":140,"properties":{"weight":1}},{"id":1667,"outV":124,"properties":{"weight":15}},{"id":4099,"outV":48,"properties":{"weight":1}},{"id":1156,"outV":26,"properties":{"weight":16}},{"id":773,"outV":122,"properties":{"weight":9}},{"id":6534,"outV":242,"properties":{"weight":1}},{"id":1032,"outV":73,"properties":{"weight":1}},{"id":6664,"outV":12,"properties":{"weight":3}},{"id":5129,"outV":222,"properties":{"weight":1}},{"id":5387,"outV":69,"properties":{"weight":1}},{"id":5517,"outV":43,"properties":{"weight":2}},{"id":5006,"outV":30,"properties":{"weight":2}},{"id":6030,"outV":204,"properties":{"weight":2}},{"id":2063,"outV":92,"properties":{"weight":1}},{"id":915,"outV":91,"properties":{"weight":2}},{"id":6940,"outV":84,"properties":{"weight":5}},{"id":2464,"outV":68,"properties":{"weig
ht":1}},{"id":5795,"outV":76,"properties":{"weight":2}},{"id":3620,"outV":24,"properties":{"weight":2}},{"id":4772,"outV":114,"properties":{"weight":25}},{"id":2982,"outV":14,"properties":{"weight":3}},{"id":3367,"outV":184,"properties":{"weight":6}},{"id":2345,"outV":87,"properties":{"weight":2}},{"id":2861,"outV":101,"properties":{"weight":6}},{"id":1840,"outV":275,"properties":{"weight":1}},{"id":5425,"outV":102,"properties":{"weight":1}},{"id":180,"outV":70,"properties":{"weight":46}},{"id":2613,"outV":158,"properties":{"weight":1}},{"id":5434,"outV":217,"properties":{"weight":1}},{"id":5562,"outV":162,"properties":{"weight":2}},{"id":1469,"outV":81,"properties":{"weight":1}},{"id":446,"outV":38,"properties":{"weight":7}},{"id":2494,"outV":90,"properties":{"weight":3}},{"id":3266,"outV":160,"properties":{"weight":10}},{"id":326,"outV":34,"properties":{"weight":1}},{"id":583,"outV":120,"properties":{"weight":2}},{"id":6855,"outV":64,"properties":{"weight":12}},{"id":73,"outV":46,
"properties":{"weight":4}},{"id":4425,"outV":212,"properties":{"weight":1}},{"id":1613,"outV":210,"properties":{"weight":2}},{"id":4941,"outV":86,"properties":{"weight":2}},{"id":6350,"outV":21,"properties":{"weight":1}},{"id":3535,"outV":201,"properties":{"weight":1}},{"id":980,"outV":11,"properties":{"weight":3}},{"id":1494,"outV":164,"properties":{"weight":3}},{"id":5206,"outV":99,"properties":{"weight":1}},{"id":5847,"outV":61,"properties":{"weight":2}},{"id":6490,"outV":187,"properties":{"weight":1}},{"id":2781,"outV":15,"properties":{"weight":4}},{"id":5600,"outV":42,"properties":{"weight":1}},{"id":353,"outV":74,"properties":{"weight":6}},{"id":5474,"outV":79,"properties":{"weight":1}},{"id":1891,"outV":103,"properties":{"weight":19}},{"id":3811,"outV":88,"properties":{"weight":2}},{"id":5989,"outV":50,"properties":{"weight":12}},{"id":4327,"outV":110,"properties":{"weight":2}},{"id":2538,"outV":57,"properties":{"weight":4}},{"id":3050,"outV":153,"properties":{"weight":13}},{
"id":4970,"outV":236,"properties":{"weight":1}},{"id":2283,"outV":25,"properties":{"weight":9}},{"id":236,"outV":145,"properties":{"weight":1}},{"id":6126,"outV":72,"properties":{"weight":2}},{"id":5232,"outV":214,"properties":{"weight":2}},{"id":4594,"outV":85,"properties":{"weight":1}},{"id":1652,"outV":213,"properties":{"weight":3}},{"id":4084,"outV":109,"properties":{"weight":1}},{"id":629,"outV":23,"properties":{"weight":10}},{"id":3701,"outV":3,"properties":{"weight":4}},{"id":5621,"outV":22,"properties":{"weight":1}},{"id":7029,"outV":89,"properties":{"weight":1}},{"id":5238,"outV":32,"properties":{"weight":3}},{"id":2684,"outV":13,"properties":{"weight":9}},{"id":3325,"outV":268,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5120,"inV":40,"properties":{"weight":5}},{"id":5121,"inV":33,"properties":{"weight":3}},{"id":5122,"inV":79,"properties":{"weight":1}},{"id":5123,"inV":292,"properties":{"weight":1}},{"id":5071,"inV":50,"properties":{"weight":9}},{"id":5072,"in
V":12,"properties":{"weight":26}},{"id":5073,"inV":18,"properties":{"weight":4}},{"id":5074,"inV":24,"properties":{"weight":9}},{"id":5075,"inV":23,"properties":{"weight":63}},{"id":5076,"inV":13,"properties":{"weight":12}},{"id":5077,"inV":10,"properties":{"weight":4}},{"id":5078,"inV":11,"properties":{"weight":3}},{"id":5079,"inV":26,"properties":{"weight":18}},{"id":5080,"inV":22,"properties":{"weight":1}},{"id":5081,"inV":16,"properties":{"weight":2}},{"id":5082,"inV":49,"properties":{"weight":1}},{"id":5083,"inV":25,"properties":{"weight":2}},{"id":5084,"inV":51,"properties":{"weight":1}},{"id":5085,"inV":15,"properties":{"weight":1}},{"id":5086,"inV":112,"properties":{"weight":4}},{"id":5087,"inV":121,"properties":{"weight":1}},{"id":5088,"inV":32,"properties":{"weight":7}},{"id":5089,"inV":68,"properties":{"weight":2}},{"id":5090,"inV":120,"properties":{"weight":77}},{"id":5091,"inV":103,"properties":{"weight":1}},{"id":5092,"inV":42,"properties":{"weight":3}},{"id":5093,"inV
":85,"properties":{"weight":4}},{"id":5094,"inV":76,"properties":{"weight":5}},{"id":5095,"inV":181,"properties":{"weight":2}},{"id":5096,"inV":14,"properties":{"weight":2}},{"id":5097,"inV":122,"properties":{"weight":1}},{"id":5098,"inV":153,"properties":{"weight":3}},{"id":5099,"inV":96,"properties":{"weight":1}},{"id":5100,"inV":82,"properties":{"weight":3}},{"id":5101,"inV":110,"properties":{"weight":1}},{"id":5102,"inV":19,"properties":{"weight":6}},{"id":5103,"inV":129,"properties":{"weight":1}},{"id":5104,"inV":84,"properties":{"weight":1}},{"id":5105,"inV":88,"properties":{"weight":9}},{"id":5106,"inV":97,"properties":{"weight":1}},{"id":5107,"inV":114,"properties":{"weight":2}},{"id":5108,"inV":30,"properties":{"weight":8}},{"id":5109,"inV":31,"properties":{"weight":8}},{"id":5110,"inV":69,"properties":{"weight":4}},{"id":5111,"inV":127,"properties":{"weight":2}},{"id":5112,"inV":60,"properties":{"weight":1}},{"id":5113,"inV":39,"properties":{"weight":2}},{"id":5114,"inV":2
1,"properties":{"weight":1}},{"id":5115,"inV":117,"properties":{"weight":1}},{"id":5116,"inV":78,"properties":{"weight":1}},{"id":5117,"inV":38,"properties":{"weight":1}},{"id":5118,"inV":169,"properties":{"weight":2}},{"id":5119,"inV":118,"properties":{"weight":1}}],"sungBy":[{"id":7064,"inV":340}],"writtenBy":[{"id":7063,"inV":339}]},"properties":{"name":[{"id":9,"value":"BERTHA"}],"songType":[{"id":11,"value":"original"}],"performances":[{"id":10,"value":394}]}}
+{"id":5,"label":"song","inE":{"followedBy":[{"id":194,"outV":70,"properties":{"weight":8}},{"id":962,"outV":67,"properties":{"weight":5}},{"id":3,"outV":1,"properties":{"weight":1}},{"id":5446,"outV":231,"properties":{"weight":5}},{"id":6344,"outV":21,"properties":{"weight":6}},{"id":1738,"outV":82,"properties":{"weight":1}},{"id":6666,"outV":12,"properties":{"weight":1}},{"id":1867,"outV":94,"properties":{"weight":15}},{"id":4300,"outV":110,"properties":{"weight":1}},{"id":847,"outV":171,"properties":{"weight":1}},{"id":2832,"outV":101,"properties":{"weight":3}},{"id":6032,"outV":115,"properties":{"weight":1}},{"id":1170,"outV":26,"properties":{"weight":1}},{"id":5330,"outV":238,"properties":{"weight":1}},{"id":1491,"outV":164,"properties":{"weight":3}},{"id":1429,"outV":83,"properties":{"weight":3}},{"id":3033,"outV":14,"properties":{"weight":1}},{"id":6298,"outV":49,"properties":{"weight":1}},{"id":1373,"outV":130,"properties":{"weight":11}},{"id":4447,"outV":113,"properties":{"w
eight":1}},{"id":5151,"outV":125,"properties":{"weight":6}},{"id":5343,"outV":165,"properties":{"weight":2}},{"id":6431,"outV":134,"properties":{"weight":2}},{"id":1953,"outV":148,"properties":{"weight":10}},{"id":1634,"outV":210,"properties":{"weight":1}},{"id":2274,"outV":25,"properties":{"weight":8}},{"id":100,"outV":46,"properties":{"weight":1}},{"id":933,"outV":91,"properties":{"weight":1}},{"id":2021,"outV":149,"properties":{"weight":1}},{"id":6694,"outV":141,"properties":{"weight":2}},{"id":4009,"outV":225,"properties":{"weight":1}},{"id":682,"outV":219,"properties":{"weight":1}},{"id":3694,"outV":3,"properties":{"weight":57}},{"id":4718,"outV":186,"properties":{"weight":6}},{"id":3055,"outV":153,"properties":{"weight":9}},{"id":2480,"outV":68,"properties":{"weight":1}},{"id":2736,"outV":13,"properties":{"weight":3}},{"id":5426,"outV":102,"properties":{"weight":1}},{"id":6899,"outV":147,"properties":{"weight":1}},{"id":5879,"outV":96,"properties":{"weight":22}},{"id":6201,"ou
tV":319,"properties":{"weight":2}},{"id":5370,"outV":132,"properties":{"weight":2}},{"id":700,"outV":206,"properties":{"weight":1}},{"id":2236,"outV":29,"properties":{"weight":5}},{"id":4604,"outV":85,"properties":{"weight":2}},{"id":5759,"outV":129,"properties":{"weight":6}}]},"outE":{"followedBy":[{"id":273,"inV":3,"properties":{"weight":40}},{"id":274,"inV":26,"properties":{"weight":3}},{"id":275,"inV":114,"properties":{"weight":40}},{"id":276,"inV":1,"properties":{"weight":2}},{"id":277,"inV":74,"properties":{"weight":3}},{"id":278,"inV":122,"properties":{"weight":3}},{"id":279,"inV":133,"properties":{"weight":2}},{"id":280,"inV":83,"properties":{"weight":1}},{"id":281,"inV":153,"properties":{"weight":5}},{"id":282,"inV":159,"properties":{"weight":1}},{"id":283,"inV":13,"properties":{"weight":3}},{"id":284,"inV":25,"properties":{"weight":19}},{"id":285,"inV":96,"properties":{"weight":10}},{"id":286,"inV":160,"properties":{"weight":2}},{"id":287,"inV":32,"properties":{"weight":1}
},{"id":288,"inV":120,"properties":{"weight":16}},{"id":289,"inV":50,"properties":{"weight":1}},{"id":290,"inV":116,"properties":{"weight":1}},{"id":291,"inV":127,"properties":{"weight":6}},{"id":292,"inV":65,"properties":{"weight":1}},{"id":293,"inV":130,"properties":{"weight":3}},{"id":294,"inV":125,"properties":{"weight":5}},{"id":295,"inV":70,"properties":{"weight":13}},{"id":296,"inV":134,"properties":{"weight":1}},{"id":297,"inV":161,"properties":{"weight":1}},{"id":298,"inV":162,"properties":{"weight":1}},{"id":299,"inV":124,"properties":{"weight":3}},{"id":300,"inV":38,"properties":{"weight":1}},{"id":301,"inV":29,"properties":{"weight":11}},{"id":302,"inV":163,"properties":{"weight":1}},{"id":303,"inV":94,"properties":{"weight":5}},{"id":304,"inV":85,"properties":{"weight":1}},{"id":305,"inV":164,"properties":{"weight":6}},{"id":306,"inV":64,"properties":{"weight":1}},{"id":307,"inV":150,"properties":{"weight":1}},{"id":308,"inV":165,"properties":{"weight":7}},{"id":309,"in
V":92,"properties":{"weight":1}},{"id":310,"inV":140,"properties":{"weight":1}},{"id":311,"inV":166,"properties":{"weight":1}}],"sungBy":[{"id":7582,"inV":340}],"writtenBy":[{"id":7581,"inV":446}]},"properties":{"name":[{"id":12,"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":14,"value":"cover"}],"performances":[{"id":13,"value":293}]}}
{"id":6,"label":"song","inE":{"followedBy":[{"id":4,"outV":1,"properties":{"weight":1}},{"id":2023,"outV":282,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2406,"inV":293,"properties":{"weight":1}},{"id":2407,"inV":96,"properties":{"weight":1}}],"sungBy":[{"id":7782,"inV":351}],"writtenBy":[{"id":7781,"inV":527}]},"properties":{"name":[{"id":15,"value":"MONA"}],"songType":[{"id":17,"value":"cover"}],"performances":[{"id":16,"value":1}]}}
{"id":7,"label":"song","inE":{"followedBy":[{"id":2607,"outV":295,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5,"inV":8,"properties":{"weight":1}}]},"properties":{"name":[{"id":18,"value":"WHERE HAVE THE HEROES GONE"}],"songType":[{"id":20,"value":""}],"performances":[{"id":19,"value":0}]}}
{"id":8,"label":"song","inE":{"followedBy":[{"id":4705,"outV":111,"properties":{"weight":1}},{"id":5,"outV":7,"properties":{"weight":1}},{"id":5901,"outV":96,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2976,"inV":302,"properties":{"weight":1}},{"id":2977,"inV":96,"properties":{"weight":1}},{"id":2978,"inV":72,"properties":{"weight":1}}],"sungBy":[{"id":7814,"inV":351}],"writtenBy":[{"id":7813,"inV":674}]},"properties":{"name":[{"id":21,"value":"OH BOY"}],"songType":[{"id":23,"value":"cover"}],"performances":[{"id":22,"value":2}]}}
-{"id":9,"label":"song","inE":{"followedBy":[{"id":3776,"outV":3,"properties":{"weight":1}},{"id":65,"outV":46,"properties":{"weight":2}},{"id":1923,"outV":103,"properties":{"weight":3}},{"id":5956,"outV":50,"properties":{"weight":2}},{"id":3077,"outV":153,"properties":{"weight":2}},{"id":5832,"outV":76,"properties":{"weight":1}},{"id":1161,"outV":26,"properties":{"weight":8}},{"id":6667,"outV":12,"properties":{"weight":2}},{"id":2699,"outV":13,"properties":{"weight":3}},{"id":6539,"outV":55,"properties":{"weight":1}},{"id":2578,"outV":57,"properties":{"weight":2}},{"id":787,"outV":122,"properties":{"weight":3}},{"id":3542,"outV":201,"properties":{"weight":1}},{"id":2775,"outV":15,"properties":{"weight":5}},{"id":2840,"outV":101,"properties":{"weight":2}},{"id":4953,"outV":86,"properties":{"weight":2}},{"id":1572,"outV":18,"properties":{"weight":3}},{"id":229,"outV":70,"properties":{"weight":1}},{"id":4264,"outV":10,"properties":{"weight":1}},{"id":4969,"outV":236,"properties":{"weig
ht":3}},{"id":3498,"outV":58,"properties":{"weight":2}},{"id":5226,"outV":216,"properties":{"weight":1}},{"id":5548,"outV":166,"properties":{"weight":1}},{"id":2990,"outV":14,"properties":{"weight":4}},{"id":3950,"outV":138,"properties":{"weight":1}},{"id":6776,"outV":39,"properties":{"weight":1}},{"id":2488,"outV":68,"properties":{"weight":1}},{"id":3641,"outV":24,"properties":{"weight":2}},{"id":1532,"outV":164,"properties":{"weight":2}},{"id":1853,"outV":94,"properties":{"weight":1}},{"id":638,"outV":23,"properties":{"weight":2}},{"id":6335,"outV":21,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6,"inV":10,"properties":{"weight":3}},{"id":7,"inV":11,"properties":{"weight":2}},{"id":8,"inV":12,"properties":{"weight":3}},{"id":9,"inV":13,"properties":{"weight":6}},{"id":10,"inV":14,"properties":{"weight":3}},{"id":11,"inV":15,"properties":{"weight":3}},{"id":12,"inV":16,"properties":{"weight":1}},{"id":13,"inV":17,"properties":{"weight":1}},{"id":14,"inV":18,"properties"
:{"weight":5}},{"id":15,"inV":19,"properties":{"weight":1}},{"id":16,"inV":20,"properties":{"weight":1}},{"id":17,"inV":21,"properties":{"weight":1}},{"id":18,"inV":22,"properties":{"weight":2}},{"id":19,"inV":23,"properties":{"weight":2}},{"id":20,"inV":24,"properties":{"weight":1}},{"id":21,"inV":25,"properties":{"weight":1}},{"id":22,"inV":26,"properties":{"weight":1}},{"id":23,"inV":27,"properties":{"weight":1}},{"id":24,"inV":28,"properties":{"weight":2}},{"id":25,"inV":29,"properties":{"weight":1}},{"id":26,"inV":30,"properties":{"weight":5}},{"id":27,"inV":31,"properties":{"weight":2}},{"id":28,"inV":32,"properties":{"weight":1}},{"id":29,"inV":33,"properties":{"weight":2}},{"id":30,"inV":34,"properties":{"weight":2}},{"id":31,"inV":35,"properties":{"weight":3}},{"id":32,"inV":36,"properties":{"weight":2}},{"id":33,"inV":37,"properties":{"weight":3}},{"id":34,"inV":38,"properties":{"weight":1}},{"id":35,"inV":39,"properties":{"weight":1}},{"id":36,"inV":40,"properties":{"weig
ht":1}},{"id":37,"inV":41,"properties":{"weight":1}},{"id":38,"inV":42,"properties":{"weight":1}},{"id":39,"inV":43,"properties":{"weight":1}}],"sungBy":[{"id":7190,"inV":340}],"writtenBy":[{"id":7189,"inV":339}]},"properties":{"name":[{"id":24,"value":"HERE COMES SUNSHINE"}],"songType":[{"id":26,"value":"original"}],"performances":[{"id":25,"value":65}]}}
-{"id":10,"label":"song","inE":{"followedBy":[{"id":3841,"outV":60,"properties":{"weight":1}},{"id":1027,"outV":73,"properties":{"weight":5}},{"id":6,"outV":9,"properties":{"weight":3}},{"id":4103,"outV":48,"properties":{"weight":5}},{"id":6279,"outV":49,"properties":{"weight":1}},{"id":3335,"outV":155,"properties":{"weight":1}},{"id":4233,"outV":52,"properties":{"weight":1}},{"id":4878,"outV":100,"properties":{"weight":19}},{"id":5264,"outV":32,"properties":{"weight":2}},{"id":2196,"outV":75,"properties":{"weight":4}},{"id":151,"outV":108,"properties":{"weight":3}},{"id":1571,"outV":18,"properties":{"weight":5}},{"id":3619,"outV":24,"properties":{"weight":2}},{"id":3237,"outV":63,"properties":{"weight":3}},{"id":4647,"outV":154,"properties":{"weight":1}},{"id":4521,"outV":105,"properties":{"weight":3}},{"id":1195,"outV":26,"properties":{"weight":1}},{"id":6956,"outV":84,"properties":{"weight":1}},{"id":6444,"outV":187,"properties":{"weight":9}},{"id":687,"outV":157,"properties":{"we
ight":1}},{"id":4784,"outV":114,"properties":{"weight":1}},{"id":6064,"outV":115,"properties":{"weight":1}},{"id":3890,"outV":51,"properties":{"weight":9}},{"id":1714,"outV":82,"properties":{"weight":3}},{"id":55,"outV":46,"properties":{"weight":1}},{"id":5175,"outV":71,"properties":{"weight":1}},{"id":1337,"outV":31,"properties":{"weight":1}},{"id":4155,"outV":54,"properties":{"weight":6}},{"id":1083,"outV":59,"properties":{"weight":10}},{"id":6077,"outV":72,"properties":{"weight":5}},{"id":5441,"outV":239,"properties":{"weight":1}},{"id":1987,"outV":152,"properties":{"weight":2}},{"id":2116,"outV":17,"properties":{"weight":7}},{"id":1860,"outV":94,"properties":{"weight":1}},{"id":3269,"outV":160,"properties":{"weight":2}},{"id":454,"outV":38,"properties":{"weight":1}},{"id":3142,"outV":104,"properties":{"weight":4}},{"id":2505,"outV":57,"properties":{"weight":12}},{"id":6859,"outV":64,"properties":{"weight":1}},{"id":6603,"outV":127,"properties":{"weight":4}},{"id":717,"outV":80,"
properties":{"weight":9}},{"id":1360,"outV":130,"properties":{"weight":2}},{"id":3026,"outV":14,"properties":{"weight":1}},{"id":5972,"outV":50,"properties":{"weight":1}},{"id":5077,"outV":4,"properties":{"weight":4}},{"id":2392,"outV":87,"properties":{"weight":1}},{"id":1250,"outV":27,"properties":{"weight":10}},{"id":4706,"outV":111,"properties":{"weight":3}},{"id":6755,"outV":53,"properties":{"weight":1}},{"id":2917,"outV":78,"properties":{"weight":10}},{"id":485,"outV":98,"properties":{"weight":4}},{"id":3559,"outV":56,"properties":{"weight":16}},{"id":3436,"outV":58,"properties":{"weight":10}},{"id":3820,"outV":88,"properties":{"weight":1}},{"id":4463,"outV":202,"properties":{"weight":4}},{"id":6256,"outV":117,"properties":{"weight":1}},{"id":880,"outV":189,"properties":{"weight":1}},{"id":3698,"outV":3,"properties":{"weight":1}},{"id":2291,"outV":25,"properties":{"weight":1}},{"id":2035,"outV":180,"properties":{"weight":1}},{"id":3317,"outV":252,"properties":{"weight":1}},{"id
":2806,"outV":15,"properties":{"weight":2}},{"id":2427,"outV":68,"properties":{"weight":2}},{"id":6782,"outV":39,"properties":{"weight":4}},{"id":4351,"outV":62,"properties":{"weight":2}}]},"outE":{"followedBy":[{"id":4235,"inV":56,"properties":{"weight":13}},{"id":4236,"inV":27,"properties":{"weight":7}},{"id":4237,"inV":58,"properties":{"weight":11}},{"id":4238,"inV":80,"properties":{"weight":6}},{"id":4239,"inV":59,"properties":{"weight":9}},{"id":4240,"inV":100,"properties":{"weight":21}},{"id":4241,"inV":104,"properties":{"weight":5}},{"id":4242,"inV":50,"properties":{"weight":2}},{"id":4243,"inV":48,"properties":{"weight":8}},{"id":4244,"inV":54,"properties":{"weight":13}},{"id":4245,"inV":19,"properties":{"weight":9}},{"id":4246,"inV":72,"properties":{"weight":4}},{"id":4247,"inV":14,"properties":{"weight":1}},{"id":4248,"inV":122,"properties":{"weight":2}},{"id":4249,"inV":235,"properties":{"weight":1}},{"id":4250,"inV":218,"properties":{"weight":1}},{"id":4251,"inV":252,"pr
operties":{"weight":1}},{"id":4252,"inV":89,"properties":{"weight":3}},{"id":4253,"inV":57,"properties":{"weight":12}},{"id":4254,"inV":49,"properties":{"weight":3}},{"id":4255,"inV":94,"properties":{"weight":3}},{"id":4256,"inV":153,"properties":{"weight":1}},{"id":4257,"inV":13,"properties":{"weight":1}},{"id":4258,"inV":160,"properties":{"weight":1}},{"id":4259,"inV":51,"properties":{"weight":10}},{"id":4260,"inV":18,"properties":{"weight":3}},{"id":4261,"inV":202,"properties":{"weight":4}},{"id":4262,"inV":17,"properties":{"weight":5}},{"id":4263,"inV":46,"properties":{"weight":1}},{"id":4264,"inV":9,"properties":{"weight":1}},{"id":4265,"inV":55,"properties":{"weight":1}},{"id":4266,"inV":125,"properties":{"weight":1}},{"id":4267,"inV":69,"properties":{"weight":2}},{"id":4268,"inV":98,"properties":{"weight":8}},{"id":4269,"inV":82,"properties":{"weight":4}},{"id":4270,"inV":154,"properties":{"weight":1}},{"id":4271,"inV":105,"properties":{"weight":7}},{"id":4272,"inV":112,"prop
erties":{"weight":2}},{"id":4273,"inV":109,"properties":{"weight":1}},{"id":4274,"inV":42,"properties":{"weight":2}},{"id":4275,"inV":121,"properties":{"weight":1}},{"id":4276,"inV":73,"properties":{"weight":5}},{"id":4277,"inV":106,"properties":{"weight":1}},{"id":4278,"inV":116,"properties":{"weight":1}},{"id":4279,"inV":68,"properties":{"weight":2}},{"id":4280,"inV":152,"properties":{"weight":1}},{"id":4281,"inV":23,"properties":{"weight":6}},{"id":4282,"inV":88,"properties":{"weight":1}},{"id":4283,"inV":39,"properties":{"weight":4}},{"id":4284,"inV":12,"properties":{"weight":1}},{"id":4285,"inV":111,"properties":{"weight":1}},{"id":4286,"inV":99,"properties":{"weight":1}},{"id":4287,"inV":87,"properties":{"weight":2}},{"id":4288,"inV":108,"properties":{"weight":2}},{"id":4289,"inV":53,"properties":{"weight":4}},{"id":4290,"inV":26,"properties":{"weight":5}},{"id":4291,"inV":117,"properties":{"weight":2}},{"id":4292,"inV":115,"properties":{"weight":2}},{"id":4293,"inV":63,"prope
rties":{"weight":3}},{"id":4294,"inV":103,"properties":{"weight":1}}],"sungBy":[{"id":7460,"inV":351}],"writtenBy":[{"id":7459,"inV":471}]},"properties":{"name":[{"id":27,"value":"BEAT IT ON DOWN THE LINE"}],"songType":[{"id":29,"value":"cover"}],"performances":[{"id":28,"value":325}]}}
-{"id":11,"label":"song","inE":{"followedBy":[{"id":1088,"outV":59,"properties":{"weight":14}},{"id":6273,"outV":49,"properties":{"weight":2}},{"id":1989,"outV":152,"properties":{"weight":2}},{"id":7,"outV":9,"properties":{"weight":2}},{"id":4552,"outV":105,"properties":{"weight":3}},{"id":521,"outV":205,"properties":{"weight":1}},{"id":714,"outV":80,"properties":{"weight":5}},{"id":3146,"outV":104,"properties":{"weight":3}},{"id":4876,"outV":100,"properties":{"weight":2}},{"id":2190,"outV":235,"properties":{"weight":1}},{"id":4496,"outV":202,"properties":{"weight":1}},{"id":2513,"outV":57,"properties":{"weight":4}},{"id":4053,"outV":173,"properties":{"weight":1}},{"id":5078,"outV":4,"properties":{"weight":3}},{"id":1309,"outV":27,"properties":{"weight":5}},{"id":5025,"outV":30,"properties":{"weight":1}},{"id":4769,"outV":114,"properties":{"weight":1}},{"id":3554,"outV":56,"properties":{"weight":7}},{"id":1064,"outV":73,"properties":{"weight":1}},{"id":2920,"outV":78,"properties":{"w
eight":2}},{"id":6056,"outV":115,"properties":{"weight":2}},{"id":41,"outV":46,"properties":{"weight":2}},{"id":3434,"outV":58,"properties":{"weight":5}},{"id":6442,"outV":187,"properties":{"weight":7}},{"id":1775,"outV":234,"properties":{"weight":4}},{"id":3888,"outV":51,"properties":{"weight":1}},{"id":626,"outV":23,"properties":{"weight":1}},{"id":6772,"outV":39,"properties":{"weight":1}},{"id":1396,"outV":190,"properties":{"weight":1}},{"id":4020,"outV":191,"properties":{"weight":1}},{"id":3637,"outV":24,"properties":{"weight":2}},{"id":6072,"outV":72,"properties":{"weight":5}},{"id":4157,"outV":54,"properties":{"weight":2}}]},"outE":{"followedBy":[{"id":972,"inV":57,"properties":{"weight":4}},{"id":973,"inV":59,"properties":{"weight":3}},{"id":974,"inV":53,"properties":{"weight":4}},{"id":975,"inV":54,"properties":{"weight":15}},{"id":976,"inV":56,"properties":{"weight":3}},{"id":977,"inV":48,"properties":{"weight":3}},{"id":978,"inV":72,"properties":{"weight":4}},{"id":979,"in
V":19,"properties":{"weight":9}},{"id":980,"inV":4,"properties":{"weight":3}},{"id":981,"inV":58,"properties":{"weight":6}},{"id":982,"inV":46,"properties":{"weight":1}},{"id":983,"inV":234,"properties":{"weight":7}},{"id":984,"inV":235,"properties":{"weight":2}},{"id":985,"inV":207,"properties":{"weight":4}},{"id":986,"inV":39,"properties":{"weight":3}},{"id":987,"inV":50,"properties":{"weight":1}},{"id":988,"inV":104,"properties":{"weight":2}},{"id":989,"inV":49,"properties":{"weight":1}},{"id":990,"inV":17,"properties":{"weight":3}},{"id":991,"inV":100,"properties":{"weight":1}},{"id":992,"inV":24,"properties":{"weight":1}},{"id":993,"inV":170,"properties":{"weight":2}},{"id":994,"inV":73,"properties":{"weight":1}},{"id":995,"inV":173,"properties":{"weight":1}},{"id":996,"inV":236,"properties":{"weight":1}},{"id":997,"inV":202,"properties":{"weight":3}},{"id":998,"inV":80,"properties":{"weight":2}},{"id":999,"inV":115,"properties":{"weight":4}},{"id":1000,"inV":105,"properties":{
"weight":1}}],"sungBy":[{"id":7072,"inV":351}],"writtenBy":[{"id":7071,"inV":350}]},"properties":{"name":[{"id":30,"value":"BLACK THROATED WIND"}],"songType":[{"id":32,"value":"original"}],"performances":[{"id":31,"value":158}]}}
-{"id":12,"label":"song","inE":{"followedBy":[{"id":3072,"outV":153,"properties":{"weight":4}},{"id":2433,"outV":68,"properties":{"weight":1}},{"id":1410,"outV":83,"properties":{"weight":1}},{"id":4227,"outV":52,"properties":{"weight":3}},{"id":3331,"outV":155,"properties":{"weight":2}},{"id":1028,"outV":73,"properties":{"weight":12}},{"id":4102,"outV":48,"properties":{"weight":33}},{"id":8,"outV":9,"properties":{"weight":3}},{"id":6281,"outV":49,"properties":{"weight":2}},{"id":652,"outV":23,"properties":{"weight":2}},{"id":5388,"outV":69,"properties":{"weight":1}},{"id":525,"outV":120,"properties":{"weight":1}},{"id":3726,"outV":3,"properties":{"weight":1}},{"id":3855,"outV":60,"properties":{"weight":1}},{"id":783,"outV":122,"properties":{"weight":1}},{"id":3986,"outV":106,"properties":{"weight":1}},{"id":1938,"outV":148,"properties":{"weight":1}},{"id":1172,"outV":26,"properties":{"weight":4}},{"id":916,"outV":91,"properties":{"weight":1}},{"id":6935,"outV":84,"properties":{"weigh
t":5}},{"id":5017,"outV":30,"properties":{"weight":1}},{"id":3225,"outV":63,"properties":{"weight":4}},{"id":2203,"outV":75,"properties":{"weight":3}},{"id":155,"outV":108,"properties":{"weight":6}},{"id":4893,"outV":100,"properties":{"weight":7}},{"id":4640,"outV":154,"properties":{"weight":10}},{"id":5665,"outV":169,"properties":{"weight":1}},{"id":5286,"outV":32,"properties":{"weight":4}},{"id":2598,"outV":112,"properties":{"weight":7}},{"id":1702,"outV":124,"properties":{"weight":1}},{"id":3879,"outV":51,"properties":{"weight":12}},{"id":4007,"outV":225,"properties":{"weight":1}},{"id":424,"outV":38,"properties":{"weight":5}},{"id":5034,"outV":47,"properties":{"weight":1}},{"id":4522,"outV":105,"properties":{"weight":12}},{"id":4779,"outV":114,"properties":{"weight":3}},{"id":6576,"outV":116,"properties":{"weight":1}},{"id":6835,"outV":64,"properties":{"weight":1}},{"id":6455,"outV":187,"properties":{"weight":12}},{"id":5304,"outV":170,"properties":{"weight":2}},{"id":824,"outV"
:171,"properties":{"weight":1}},{"id":6074,"outV":72,"properties":{"weight":4}},{"id":1722,"outV":82,"properties":{"weight":1}},{"id":4284,"outV":10,"properties":{"weight":1}},{"id":2109,"outV":17,"properties":{"weight":24}},{"id":703,"outV":206,"properties":{"weight":2}},{"id":5952,"outV":50,"properties":{"weight":7}},{"id":5440,"outV":239,"properties":{"weight":2}},{"id":1858,"outV":94,"properties":{"weight":2}},{"id":1347,"outV":31,"properties":{"weight":1}},{"id":1605,"outV":18,"properties":{"weight":1}},{"id":4165,"outV":54,"properties":{"weight":17}},{"id":3654,"outV":24,"properties":{"weight":3}},{"id":6598,"outV":127,"properties":{"weight":1}},{"id":4038,"outV":173,"properties":{"weight":1}},{"id":3271,"outV":160,"properties":{"weight":1}},{"id":3527,"outV":223,"properties":{"weight":1}},{"id":1096,"outV":59,"properties":{"weight":26}},{"id":3144,"outV":104,"properties":{"weight":24}},{"id":1993,"outV":152,"properties":{"weight":2}},{"id":6985,"outV":175,"properties":{"weigh
t":1}},{"id":6730,"outV":53,"properties":{"weight":4}},{"id":3019,"outV":14,"properties":{"weight":1}},{"id":3788,"outV":168,"properties":{"weight":1}},{"id":5072,"outV":4,"properties":{"weight":26}},{"id":2515,"outV":57,"properties":{"weight":3}},{"id":1365,"outV":130,"properties":{"weight":2}},{"id":2647,"outV":137,"properties":{"weight":1}},{"id":730,"outV":80,"properties":{"weight":12}},{"id":2780,"outV":15,"properties":{"weight":3}},{"id":3810,"outV":88,"properties":{"weight":6}},{"id":482,"outV":98,"properties":{"weight":8}},{"id":7013,"outV":89,"properties":{"weight":1}},{"id":4072,"outV":109,"properties":{"weight":1}},{"id":2281,"outV":25,"properties":{"weight":2}},{"id":2668,"outV":13,"properties":{"weight":3}},{"id":3565,"outV":56,"properties":{"weight":9}},{"id":1262,"outV":27,"properties":{"weight":17}},{"id":2031,"outV":180,"properties":{"weight":1}},{"id":6769,"outV":39,"properties":{"weight":2}},{"id":1779,"outV":234,"properties":{"weight":1}},{"id":4468,"outV":202,"p
roperties":{"weight":4}},{"id":1909,"outV":103,"properties":{"weight":1}},{"id":3446,"outV":58,"properties":{"weight":4}},{"id":2934,"outV":78,"properties":{"weight":1}},{"id":381,"outV":74,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6656,"inV":49,"properties":{"weight":9}},{"id":6657,"inV":19,"properties":{"weight":3}},{"id":6658,"inV":27,"properties":{"weight":9}},{"id":6659,"inV":252,"properties":{"weight":1}},{"id":6660,"inV":206,"properties":{"weight":1}},{"id":6661,"inV":89,"properties":{"weight":4}},{"id":6662,"inV":160,"properties":{"weight":1}},{"id":6663,"inV":15,"properties":{"weight":167}},{"id":6664,"inV":4,"properties":{"weight":3}},{"id":6665,"inV":202,"properties":{"weight":2}},{"id":6666,"inV":5,"properties":{"weight":1}},{"id":6667,"inV":9,"properties":{"weight":2}},{"id":6668,"inV":83,"properties":{"weight":3}},{"id":6669,"inV":3,"properties":{"weight":1}},{"id":6670,"inV":52,"properties":{"weight":1}},{"id":6671,"inV":25,"properties":{"weight":1}},{"
id":6672,"inV":46,"properties":{"weight":1}},{"id":6673,"inV":123,"properties":{"weight":2}},{"id":6674,"inV":51,"properties":{"weight":4}},{"id":6675,"inV":17,"properties":{"weight":3}},{"id":6676,"inV":56,"properties":{"weight":5}},{"id":6677,"inV":98,"properties":{"weight":5}},{"id":6678,"inV":104,"properties":{"weight":4}},{"id":6679,"inV":69,"properties":{"weight":3}},{"id":6680,"inV":170,"properties":{"weight":2}},{"id":6681,"inV":82,"properties":{"weight":1}},{"id":6682,"inV":80,"properties":{"weight":2}},{"id":6683,"inV":215,"properties":{"weight":1}},{"id":6684,"inV":48,"properties":{"weight":1}},{"id":6685,"inV":14,"properties":{"weight":3}},{"id":6686,"inV":50,"properties":{"weight":2}},{"id":6687,"inV":24,"properties":{"weight":83}},{"id":6688,"inV":18,"properties":{"weight":1}},{"id":6689,"inV":39,"properties":{"weight":6}},{"id":6690,"inV":105,"properties":{"weight":1}},{"id":6691,"inV":131,"properties":{"weight":14}},{"id":6645,"inV":72,"properties":{"weight":7}},{"id
":6646,"inV":58,"properties":{"weight":7}},{"id":6647,"inV":57,"properties":{"weight":6}},{"id":6648,"inV":54,"properties":{"weight":8}},{"id":6649,"inV":59,"properties":{"weight":14}},{"id":6650,"inV":100,"properties":{"weight":7}},{"id":6651,"inV":53,"properties":{"weight":4}},{"id":6652,"inV":148,"properties":{"weight":1}},{"id":6653,"inV":218,"properties":{"weight":2}},{"id":6654,"inV":235,"properties":{"weight":2}},{"id":6655,"inV":130,"properties":{"weight":1}}],"sungBy":[{"id":7776,"inV":351}],"writtenBy":[{"id":7775,"inV":659}]},"properties":{"name":[{"id":33,"value":"ME AND MY UNCLE"}],"songType":[{"id":35,"value":"cover"}],"performances":[{"id":34,"value":616}]}}
-{"id":13,"label":"song","inE":{"followedBy":[{"id":4865,"outV":35,"properties":{"weight":4}},{"id":1026,"outV":73,"properties":{"weight":1}},{"id":3330,"outV":155,"properties":{"weight":2}},{"id":5636,"outV":22,"properties":{"weight":1}},{"id":775,"outV":122,"properties":{"weight":1}},{"id":6407,"outV":134,"properties":{"weight":24}},{"id":1799,"outV":196,"properties":{"weight":2}},{"id":9,"outV":9,"properties":{"weight":6}},{"id":4874,"outV":100,"properties":{"weight":6}},{"id":4108,"outV":48,"properties":{"weight":3}},{"id":5132,"outV":222,"properties":{"weight":1}},{"id":2830,"outV":101,"properties":{"weight":8}},{"id":3857,"outV":60,"properties":{"weight":35}},{"id":6931,"outV":84,"properties":{"weight":7}},{"id":6165,"outV":36,"properties":{"weight":1}},{"id":533,"outV":120,"properties":{"weight":1}},{"id":5142,"outV":125,"properties":{"weight":11}},{"id":4630,"outV":154,"properties":{"weight":8}},{"id":283,"outV":5,"properties":{"weight":3}},{"id":1567,"outV":18,"properties":{
"weight":3}},{"id":1823,"outV":41,"properties":{"weight":4}},{"id":3359,"outV":184,"properties":{"weight":3}},{"id":3617,"outV":24,"properties":{"weight":1}},{"id":3108,"outV":153,"properties":{"weight":1}},{"id":3878,"outV":51,"properties":{"weight":6}},{"id":2347,"outV":87,"properties":{"weight":8}},{"id":6443,"outV":187,"properties":{"weight":47}},{"id":6700,"outV":141,"properties":{"weight":4}},{"id":5682,"outV":167,"properties":{"weight":1}},{"id":53,"outV":46,"properties":{"weight":4}},{"id":5943,"outV":50,"properties":{"weight":1}},{"id":823,"outV":171,"properties":{"weight":24}},{"id":4151,"outV":218,"properties":{"weight":2}},{"id":2617,"outV":158,"properties":{"weight":1}},{"id":3386,"outV":177,"properties":{"weight":2}},{"id":4411,"outV":327,"properties":{"weight":1}},{"id":1852,"outV":94,"properties":{"weight":4}},{"id":6206,"outV":319,"properties":{"weight":1}},{"id":2111,"outV":17,"properties":{"weight":4}},{"id":4159,"outV":54,"properties":{"weight":16}},{"id":1087,"o
utV":59,"properties":{"weight":5}},{"id":6723,"outV":53,"properties":{"weight":6}},{"id":6984,"outV":175,"properties":{"weight":1}},{"id":3145,"outV":104,"properties":{"weight":4}},{"id":4947,"outV":86,"properties":{"weight":1}},{"id":5203,"outV":99,"properties":{"weight":2}},{"id":1366,"outV":130,"properties":{"weight":12}},{"id":1622,"outV":210,"properties":{"weight":1}},{"id":2908,"outV":118,"properties":{"weight":1}},{"id":1885,"outV":103,"properties":{"weight":3}},{"id":4959,"outV":207,"properties":{"weight":6}},{"id":6763,"outV":39,"properties":{"weight":8}},{"id":3435,"outV":58,"properties":{"weight":8}},{"id":5741,"outV":129,"properties":{"weight":12}},{"id":366,"outV":74,"properties":{"weight":38}},{"id":2926,"outV":78,"properties":{"weight":3}},{"id":623,"outV":23,"properties":{"weight":1}},{"id":4721,"outV":186,"properties":{"weight":4}},{"id":2165,"outV":151,"properties":{"weight":1}},{"id":886,"outV":140,"properties":{"weight":1}},{"id":3703,"outV":3,"properties":{"weig
ht":5}},{"id":7031,"outV":89,"properties":{"weight":4}},{"id":1411,"outV":83,"properties":{"weight":7}},{"id":6278,"outV":49,"properties":{"weight":1}},{"id":3974,"outV":106,"properties":{"weight":2}},{"id":912,"outV":91,"properties":{"weight":59}},{"id":2192,"outV":235,"properties":{"weight":1}},{"id":4759,"outV":37,"properties":{"weight":2}},{"id":1179,"outV":26,"properties":{"weight":2}},{"id":5789,"outV":76,"properties":{"weight":3}},{"id":4257,"outV":10,"properties":{"weight":1}},{"id":6561,"outV":172,"properties":{"weight":1}},{"id":4771,"outV":114,"properties":{"weight":3}},{"id":1454,"outV":81,"properties":{"weight":10}},{"id":6073,"outV":72,"properties":{"weight":13}},{"id":5306,"outV":170,"properties":{"weight":4}},{"id":4027,"outV":173,"properties":{"weight":3}},{"id":1725,"outV":82,"properties":{"weight":3}},{"id":960,"outV":67,"properties":{"weight":2}},{"id":1985,"outV":152,"properties":{"weight":1}},{"id":6594,"outV":127,"properties":{"weight":6}},{"id":6342,"outV":21
,"properties":{"weight":4}},{"id":455,"outV":139,"properties":{"weight":1}},{"id":3277,"outV":160,"properties":{"weight":3}},{"id":5837,"outV":258,"properties":{"weight":1}},{"id":2256,"outV":29,"properties":{"weight":1}},{"id":208,"outV":70,"properties":{"weight":2}},{"id":721,"outV":80,"properties":{"weight":1}},{"id":2771,"outV":15,"properties":{"weight":3}},{"id":5076,"outV":4,"properties":{"weight":12}},{"id":2519,"outV":57,"properties":{"weight":10}},{"id":4312,"outV":110,"properties":{"weight":1}},{"id":2268,"outV":25,"properties":{"weight":8}},{"id":2014,"outV":149,"properties":{"weight":1}},{"id":3552,"outV":56,"properties":{"weight":8}},{"id":481,"outV":98,"properties":{"weight":3}},{"id":1764,"outV":28,"properties":{"weight":3}},{"id":1258,"outV":27,"properties":{"weight":3}},{"id":4846,"outV":119,"properties":{"weight":1}},{"id":1518,"outV":164,"properties":{"weight":1}},{"id":4593,"outV":85,"properties":{"weight":2}},{"id":244,"outV":150,"properties":{"weight":3}},{"id"
:1780,"outV":234,"properties":{"weight":2}},{"id":4344,"outV":62,"properties":{"weight":12}},{"id":2044,"outV":92,"properties":{"weight":2}},{"id":5374,"outV":69,"properties":{"weight":34}},{"id":5886,"outV":96,"properties":{"weight":15}}]},"outE":{"followedBy":[{"id":2688,"inV":94,"properties":{"weight":4}},{"id":2689,"inV":130,"properties":{"weight":11}},{"id":2690,"inV":83,"properties":{"weight":13}},{"id":2691,"inV":170,"properties":{"weight":1}},{"id":2692,"inV":51,"properties":{"weight":3}},{"id":2693,"inV":22,"properties":{"weight":2}},{"id":2694,"inV":296,"properties":{"weight":1}},{"id":2695,"inV":52,"properties":{"weight":1}},{"id":2696,"inV":17,"properties":{"weight":2}},{"id":2697,"inV":202,"properties":{"weight":3}},{"id":2698,"inV":27,"properties":{"weight":2}},{"id":2699,"inV":9,"properties":{"weight":3}},{"id":2700,"inV":25,"properties":{"weight":12}},{"id":2701,"inV":195,"properties":{"weight":2}},{"id":2702,"inV":206,"properties":{"weight":1}},{"id":2703,"inV":39,"
properties":{"weight":1}},{"id":2704,"inV":69,"properties":{"weight":6}},{"id":2705,"inV":24,"properties":{"weight":1}},{"id":2706,"inV":82,"properties":{"weight":3}},{"id":2707,"inV":57,"properties":{"weight":1}},{"id":2708,"inV":134,"properties":{"weight":9}},{"id":2709,"inV":110,"properties":{"weight":1}},{"id":2710,"inV":99,"properties":{"weight":3}},{"id":2711,"inV":76,"properties":{"weight":4}},{"id":2712,"inV":3,"properties":{"weight":3}},{"id":2713,"inV":178,"properties":{"weight":1}},{"id":2714,"inV":184,"properties":{"weight":1}},{"id":2715,"inV":60,"properties":{"weight":21}},{"id":2716,"inV":148,"properties":{"weight":1}},{"id":2717,"inV":32,"properties":{"weight":1}},{"id":2718,"inV":91,"properties":{"weight":42}},{"id":2719,"inV":103,"properties":{"weight":1}},{"id":2720,"inV":114,"properties":{"weight":4}},{"id":2721,"inV":141,"properties":{"weight":4}},{"id":2722,"inV":154,"properties":{"weight":3}},{"id":2723,"inV":109,"properties":{"weight":2}},{"id":2724,"inV":125
,"properties":{"weight":9}},{"id":2725,"inV":85,"properties":{"weight":2}},{"id":2726,"inV":84,"properties":{"weight":5}},{"id":2727,"inV":50,"properties":{"weight":1}},{"id":2728,"inV":214,"properties":{"weight":1}},{"id":2729,"inV":72,"properties":{"weight":1}},{"id":2730,"inV":246,"properties":{"weight":1}},{"id":2731,"inV":129,"properties":{"weight":29}},{"id":2732,"inV":65,"properties":{"weight":2}},{"id":2733,"inV":133,"properties":{"weight":1}},{"id":2734,"inV":62,"properties":{"weight":1}},{"id":2735,"inV":29,"properties":{"weight":4}},{"id":2736,"inV":5,"properties":{"weight":3}},{"id":2737,"inV":183,"properties":{"weight":3}},{"id":2738,"inV":210,"properties":{"weight":1}},{"id":2739,"inV":128,"properties":{"weight":1}},{"id":2740,"inV":67,"properties":{"weight":1}},{"id":2741,"inV":212,"properties":{"weight":1}},{"id":2742,"inV":70,"properties":{"weight":2}},{"id":2743,"inV":75,"properties":{"weight":1}},{"id":2744,"inV":71,"properties":{"weight":1}},{"id":2745,"inV":168,
"properties":{"weight":2}},{"id":2746,"inV":157,"properties":{"weight":1}},{"id":2747,"inV":92,"properties":{"weight":1}},{"id":2748,"inV":89,"properties":{"weight":5}},{"id":2749,"inV":81,"properties":{"weight":1}},{"id":2750,"inV":187,"properties":{"weight":1}},{"id":2751,"inV":164,"properties":{"weight":1}},{"id":2752,"inV":136,"properties":{"weight":1}},{"id":2753,"inV":46,"properties":{"weight":1}},{"id":2660,"inV":207,"properties":{"weight":3}},{"id":2661,"inV":122,"properties":{"weight":17}},{"id":2662,"inV":96,"properties":{"weight":157}},{"id":2663,"inV":104,"properties":{"weight":1}},{"id":2664,"inV":26,"properties":{"weight":14}},{"id":2665,"inV":123,"properties":{"weight":3}},{"id":2666,"inV":19,"properties":{"weight":12}},{"id":2667,"inV":100,"properties":{"weight":5}},{"id":2668,"inV":12,"properties":{"weight":3}},{"id":2669,"inV":49,"properties":{"weight":12}},{"id":2670,"inV":21,"properties":{"weight":4}},{"id":2671,"inV":120,"properties":{"weight":9}},{"id":2672,"in
V":23,"properties":{"weight":5}},{"id":2673,"inV":59,"properties":{"weight":6}},{"id":2674,"inV":54,"properties":{"weight":5}},{"id":2675,"inV":80,"properties":{"weight":1}},{"id":2676,"inV":234,"properties":{"weight":1}},{"id":2677,"inV":53,"properties":{"weight":2}},{"id":2678,"inV":225,"properties":{"weight":1}},{"id":2679,"inV":235,"properties":{"weight":2}},{"id":2680,"inV":160,"properties":{"weight":3}},{"id":2681,"inV":56,"properties":{"weight":3}},{"id":2682,"inV":127,"properties":{"weight":6}},{"id":2683,"inV":18,"properties":{"weight":3}},{"id":2684,"inV":4,"properties":{"weight":9}},{"id":2685,"inV":15,"properties":{"weight":7}},{"id":2686,"inV":74,"properties":{"weight":86}},{"id":2687,"inV":153,"properties":{"weight":12}}],"sungBy":[{"id":7292,"inV":359}],"writtenBy":[{"id":7291,"inV":339}]},"properties":{"name":[{"id":36,"value":"PLAYING IN THE BAND"}],"songType":[{"id":38,"value":"original"}],"performances":[{"id":37,"value":582}]}}
-{"id":14,"label":"song","inE":{"followedBy":[{"id":6784,"outV":39,"properties":{"weight":10}},{"id":5251,"outV":32,"properties":{"weight":1}},{"id":4229,"outV":52,"properties":{"weight":3}},{"id":4745,"outV":294,"properties":{"weight":4}},{"id":10,"outV":9,"properties":{"weight":3}},{"id":6283,"outV":49,"properties":{"weight":2}},{"id":4364,"outV":62,"properties":{"weight":16}},{"id":4109,"outV":48,"properties":{"weight":10}},{"id":6544,"outV":55,"properties":{"weight":1}},{"id":4881,"outV":100,"properties":{"weight":20}},{"id":6034,"outV":115,"properties":{"weight":1}},{"id":3219,"outV":63,"properties":{"weight":2}},{"id":531,"outV":120,"properties":{"weight":1}},{"id":4758,"outV":37,"properties":{"weight":2}},{"id":4247,"outV":10,"properties":{"weight":1}},{"id":4631,"outV":154,"properties":{"weight":6}},{"id":3866,"outV":60,"properties":{"weight":2}},{"id":1947,"outV":148,"properties":{"weight":1}},{"id":1436,"outV":83,"properties":{"weight":7}},{"id":2844,"outV":101,"properties"
:{"weight":1}},{"id":6685,"outV":12,"properties":{"weight":3}},{"id":1183,"outV":26,"properties":{"weight":2}},{"id":160,"outV":108,"properties":{"weight":2}},{"id":4517,"outV":105,"properties":{"weight":6}},{"id":6954,"outV":84,"properties":{"weight":4}},{"id":1451,"outV":81,"properties":{"weight":12}},{"id":1582,"outV":18,"properties":{"weight":4}},{"id":3892,"outV":51,"properties":{"weight":10}},{"id":2107,"outV":17,"properties":{"weight":19}},{"id":5820,"outV":76,"properties":{"weight":1}},{"id":6463,"outV":187,"properties":{"weight":26}},{"id":1090,"outV":59,"properties":{"weight":7}},{"id":6083,"outV":72,"properties":{"weight":9}},{"id":1731,"outV":82,"properties":{"weight":4}},{"id":4037,"outV":173,"properties":{"weight":1}},{"id":2375,"outV":87,"properties":{"weight":8}},{"id":4169,"outV":54,"properties":{"weight":36}},{"id":5578,"outV":42,"properties":{"weight":1}},{"id":5964,"outV":50,"properties":{"weight":2}},{"id":716,"outV":80,"properties":{"weight":10}},{"id":5709,"ou
tV":20,"properties":{"weight":1}},{"id":845,"outV":171,"properties":{"weight":11}},{"id":5838,"outV":258,"properties":{"weight":1}},{"id":1232,"outV":248,"properties":{"weight":1}},{"id":6993,"outV":175,"properties":{"weight":1}},{"id":3666,"outV":24,"properties":{"weight":2}},{"id":3796,"outV":88,"properties":{"weight":1}},{"id":3156,"outV":104,"properties":{"weight":6}},{"id":6742,"outV":53,"properties":{"weight":15}},{"id":2523,"outV":57,"properties":{"weight":9}},{"id":864,"outV":189,"properties":{"weight":2}},{"id":3556,"outV":56,"properties":{"weight":21}},{"id":102,"outV":46,"properties":{"weight":1}},{"id":5096,"outV":4,"properties":{"weight":2}},{"id":1257,"outV":27,"properties":{"weight":19}},{"id":489,"outV":98,"properties":{"weight":3}},{"id":2030,"outV":180,"properties":{"weight":2}},{"id":2159,"outV":151,"properties":{"weight":1}},{"id":2803,"outV":15,"properties":{"weight":4}},{"id":2935,"outV":78,"properties":{"weight":1}},{"id":2426,"outV":68,"properties":{"weight":
4}},{"id":3962,"outV":106,"properties":{"weight":2}},{"id":4474,"outV":202,"properties":{"weight":1}},{"id":123,"outV":97,"properties":{"weight":1}},{"id":5628,"outV":22,"properties":{"weight":1}},{"id":4092,"outV":109,"properties":{"weight":1}},{"id":1021,"outV":73,"properties":{"weight":20}},{"id":3455,"outV":58,"properties":{"weight":12}}]},"outE":{"followedBy":[{"id":2981,"inV":50,"properties":{"weight":2}},{"id":2982,"inV":4,"properties":{"weight":3}},{"id":2983,"inV":53,"properties":{"weight":8}},{"id":2984,"inV":57,"properties":{"weight":55}},{"id":2985,"inV":89,"properties":{"weight":2}},{"id":2986,"inV":122,"properties":{"weight":1}},{"id":2987,"inV":153,"properties":{"weight":1}},{"id":2988,"inV":72,"properties":{"weight":26}},{"id":2989,"inV":19,"properties":{"weight":17}},{"id":2990,"inV":9,"properties":{"weight":4}},{"id":2991,"inV":17,"properties":{"weight":13}},{"id":2992,"inV":46,"properties":{"weight":5}},{"id":2993,"inV":51,"properties":{"weight":15}},{"id":2994,"i
nV":54,"properties":{"weight":28}},{"id":2995,"inV":202,"properties":{"weight":3}},{"id":2996,"inV":27,"properties":{"weight":6}},{"id":2997,"inV":52,"properties":{"weight":3}},{"id":2998,"inV":58,"properties":{"weight":1}},{"id":2999,"inV":56,"properties":{"weight":8}},{"id":3000,"inV":100,"properties":{"weight":12}},{"id":3001,"inV":99,"properties":{"weight":26}},{"id":3002,"inV":98,"properties":{"weight":3}},{"id":3003,"inV":104,"properties":{"weight":2}},{"id":3004,"inV":82,"properties":{"weight":6}},{"id":3005,"inV":215,"properties":{"weight":1}},{"id":3006,"inV":69,"properties":{"weight":2}},{"id":3007,"inV":103,"properties":{"weight":1}},{"id":3008,"inV":83,"properties":{"weight":8}},{"id":3009,"inV":101,"properties":{"weight":1}},{"id":3010,"inV":80,"properties":{"weight":8}},{"id":3011,"inV":121,"properties":{"weight":3}},{"id":3012,"inV":59,"properties":{"weight":1}},{"id":3013,"inV":26,"properties":{"weight":2}},{"id":3014,"inV":32,"properties":{"weight":2}},{"id":3015,"i
nV":155,"properties":{"weight":1}},{"id":3016,"inV":42,"properties":{"weight":2}},{"id":3017,"inV":18,"properties":{"weight":1}},{"id":3018,"inV":105,"properties":{"weight":11}},{"id":3019,"inV":12,"properties":{"weight":1}},{"id":3020,"inV":49,"properties":{"weight":27}},{"id":3021,"inV":65,"properties":{"weight":2}},{"id":3022,"inV":85,"properties":{"weight":2}},{"id":3023,"inV":73,"properties":{"weight":8}},{"id":3024,"inV":106,"properties":{"weight":3}},{"id":3025,"inV":189,"properties":{"weight":3}},{"id":3026,"inV":10,"properties":{"weight":1}},{"id":3027,"inV":210,"properties":{"weight":3}},{"id":3028,"inV":76,"properties":{"weight":1}},{"id":3029,"inV":87,"properties":{"weight":1}},{"id":3030,"inV":96,"properties":{"weight":1}},{"id":3031,"inV":150,"properties":{"weight":1}},{"id":3032,"inV":66,"properties":{"weight":1}},{"id":3033,"inV":5,"properties":{"weight":1}},{"id":3034,"inV":91,"properties":{"weight":29}},{"id":3035,"inV":60,"properties":{"weight":6}},{"id":3036,"inV
":67,"properties":{"weight":1}},{"id":3037,"inV":74,"properties":{"weight":1}},{"id":3038,"inV":21,"properties":{"weight":1}},{"id":3039,"inV":169,"properties":{"weight":1}},{"id":3040,"inV":62,"properties":{"weight":1}},{"id":3041,"inV":39,"properties":{"weight":2}},{"id":3042,"inV":175,"properties":{"weight":1}},{"id":3043,"inV":172,"properties":{"weight":1}},{"id":3044,"inV":28,"properties":{"weight":5}},{"id":3045,"inV":173,"properties":{"weight":1}},{"id":3046,"inV":37,"properties":{"weight":5}},{"id":3047,"inV":35,"properties":{"weight":2}}],"sungBy":[{"id":7232,"inV":351}],"writtenBy":[{"id":7231,"inV":350}]},"properties":{"name":[{"id":39,"value":"LOOKS LIKE RAIN"}],"songType":[{"id":41,"value":"original"}],"performances":[{"id":40,"value":417}]}}
-{"id":15,"label":"song","inE":{"followedBy":[{"id":1152,"outV":26,"properties":{"weight":1}},{"id":769,"outV":122,"properties":{"weight":3}},{"id":5379,"outV":69,"properties":{"weight":4}},{"id":3844,"outV":60,"properties":{"weight":2}},{"id":1414,"outV":83,"properties":{"weight":2}},{"id":6663,"outV":12,"properties":{"weight":167}},{"id":4872,"outV":100,"properties":{"weight":9}},{"id":4105,"outV":48,"properties":{"weight":4}},{"id":11,"outV":9,"properties":{"weight":3}},{"id":4622,"outV":154,"properties":{"weight":1}},{"id":2833,"outV":101,"properties":{"weight":1}},{"id":2195,"outV":235,"properties":{"weight":1}},{"id":5141,"outV":125,"properties":{"weight":2}},{"id":3224,"outV":63,"properties":{"weight":2}},{"id":1945,"outV":148,"properties":{"weight":2}},{"id":5024,"outV":30,"properties":{"weight":2}},{"id":2597,"outV":112,"properties":{"weight":35}},{"id":1062,"outV":73,"properties":{"weight":1}},{"id":5032,"outV":47,"properties":{"weight":1}},{"id":4776,"outV":114,"properties
":{"weight":1}},{"id":6698,"outV":141,"properties":{"weight":1}},{"id":3885,"outV":51,"properties":{"weight":14}},{"id":1712,"outV":82,"properties":{"weight":4}},{"id":5301,"outV":170,"properties":{"weight":1}},{"id":1847,"outV":94,"properties":{"weight":6}},{"id":4153,"outV":54,"properties":{"weight":7}},{"id":1339,"outV":31,"properties":{"weight":2}},{"id":6075,"outV":72,"properties":{"weight":4}},{"id":2108,"outV":17,"properties":{"weight":8}},{"id":60,"outV":46,"properties":{"weight":1}},{"id":6460,"outV":187,"properties":{"weight":10}},{"id":3653,"outV":24,"properties":{"weight":14}},{"id":6731,"outV":53,"properties":{"weight":1}},{"id":3147,"outV":104,"properties":{"weight":2}},{"id":1101,"outV":59,"properties":{"weight":2}},{"id":4052,"outV":173,"properties":{"weight":1}},{"id":2518,"outV":57,"properties":{"weight":5}},{"id":476,"outV":98,"properties":{"weight":3}},{"id":1372,"outV":130,"properties":{"weight":1}},{"id":5085,"outV":4,"properties":{"weight":1}},{"id":1245,"outV
":27,"properties":{"weight":5}},{"id":2272,"outV":25,"properties":{"weight":4}},{"id":4577,"outV":254,"properties":{"weight":1}},{"id":5735,"outV":129,"properties":{"weight":2}},{"id":3432,"outV":58,"properties":{"weight":7}},{"id":3562,"outV":56,"properties":{"weight":6}},{"id":746,"outV":80,"properties":{"weight":1}},{"id":2411,"outV":68,"properties":{"weight":1}},{"id":2924,"outV":78,"properties":{"weight":3}},{"id":4467,"outV":202,"properties":{"weight":6}},{"id":376,"outV":74,"properties":{"weight":1}},{"id":5242,"outV":32,"properties":{"weight":2}},{"id":6267,"outV":49,"properties":{"weight":1}},{"id":2685,"outV":13,"properties":{"weight":7}}]},"outE":{"followedBy":[{"id":2816,"inV":103,"properties":{"weight":1}},{"id":2817,"inV":62,"properties":{"weight":1}},{"id":2818,"inV":64,"properties":{"weight":1}},{"id":2819,"inV":75,"properties":{"weight":3}},{"id":2820,"inV":152,"properties":{"weight":1}},{"id":2821,"inV":117,"properties":{"weight":1}},{"id":2822,"inV":168,"propertie
s":{"weight":1}},{"id":2823,"inV":188,"properties":{"weight":1}},{"id":2824,"inV":131,"properties":{"weight":4}},{"id":2825,"inV":28,"properties":{"weight":1}},{"id":2826,"inV":124,"properties":{"weight":1}},{"id":2827,"inV":190,"properties":{"weight":1}},{"id":2828,"inV":137,"properties":{"weight":1}},{"id":2755,"inV":19,"properties":{"weight":8}},{"id":2756,"inV":56,"properties":{"weight":22}},{"id":2757,"inV":104,"properties":{"weight":17}},{"id":2758,"inV":49,"properties":{"weight":4}},{"id":2759,"inV":122,"properties":{"weight":3}},{"id":2760,"inV":23,"properties":{"weight":2}},{"id":2761,"inV":27,"properties":{"weight":23}},{"id":2762,"inV":89,"properties":{"weight":7}},{"id":2763,"inV":46,"properties":{"weight":1}},{"id":2764,"inV":57,"properties":{"weight":7}},{"id":2765,"inV":59,"properties":{"weight":6}},{"id":2766,"inV":58,"properties":{"weight":18}},{"id":2767,"inV":54,"properties":{"weight":25}},{"id":2768,"inV":100,"properties":{"weight":24}},{"id":2769,"inV":39,"prope
rties":{"weight":3}},{"id":2770,"inV":160,"properties":{"weight":5}},{"id":2771,"inV":13,"properties":{"weight":3}},{"id":2772,"inV":51,"properties":{"weight":14}},{"id":2773,"inV":94,"properties":{"weight":4}},{"id":2774,"inV":148,"properties":{"weight":1}},{"id":2775,"inV":9,"properties":{"weight":5}},{"id":2776,"inV":48,"properties":{"weight":17}},{"id":2777,"inV":55,"properties":{"weight":1}},{"id":2778,"inV":72,"properties":{"weight":3}},{"id":2779,"inV":52,"properties":{"weight":1}},{"id":2780,"inV":12,"properties":{"weight":3}},{"id":2781,"inV":4,"properties":{"weight":4}},{"id":2782,"inV":83,"properties":{"weight":2}},{"id":2783,"inV":202,"properties":{"weight":6}},{"id":2784,"inV":82,"properties":{"weight":3}},{"id":2785,"inV":74,"properties":{"weight":1}},{"id":2786,"inV":69,"properties":{"weight":7}},{"id":2787,"inV":98,"properties":{"weight":10}},{"id":2788,"inV":21,"properties":{"weight":1}},{"id":2789,"inV":125,"properties":{"weight":1}},{"id":2790,"inV":170,"propertie
s":{"weight":3}},{"id":2791,"inV":26,"properties":{"weight":1}},{"id":2792,"inV":60,"properties":{"weight":1}},{"id":2793,"inV":294,"properties":{"weight":2}},{"id":2794,"inV":99,"properties":{"weight":3}},{"id":2795,"inV":17,"properties":{"weight":10}},{"id":2796,"inV":63,"properties":{"weight":5}},{"id":2797,"inV":68,"properties":{"weight":3}},{"id":2798,"inV":108,"properties":{"weight":6}},{"id":2799,"inV":109,"properties":{"weight":1}},{"id":2800,"inV":196,"properties":{"weight":3}},{"id":2801,"inV":91,"properties":{"weight":1}},{"id":2802,"inV":18,"properties":{"weight":1}},{"id":2803,"inV":14,"properties":{"weight":4}},{"id":2804,"inV":105,"properties":{"weight":8}},{"id":2805,"inV":101,"properties":{"weight":2}},{"id":2806,"inV":10,"properties":{"weight":2}},{"id":2807,"inV":73,"properties":{"weight":26}},{"id":2808,"inV":78,"properties":{"weight":1}},{"id":2809,"inV":32,"properties":{"weight":3}},{"id":2810,"inV":106,"properties":{"weight":2}},{"id":2811,"inV":180,"propertie
s":{"weight":2}},{"id":2812,"inV":88,"properties":{"weight":1}},{"id":2813,"inV":97,"properties":{"weight":1}},{"id":2814,"inV":53,"properties":{"weight":3}},{"id":2815,"inV":115,"properties":{"weight":4}}],"sungBy":[{"id":7472,"inV":351}],"writtenBy":[{"id":7471,"inV":479}]},"properties":{"name":[{"id":42,"value":"BIG RIVER"}],"songType":[{"id":44,"value":"cover"}],"performances":[{"id":43,"value":397}]}}
-{"id":16,"label":"song","inE":{"followedBy":[{"id":7008,"outV":89,"properties":{"weight":1}},{"id":6467,"outV":187,"properties":{"weight":1}},{"id":6341,"outV":21,"properties":{"weight":1}},{"id":5637,"outV":22,"properties":{"weight":3}},{"id":4101,"outV":48,"properties":{"weight":1}},{"id":5382,"outV":69,"properties":{"weight":4}},{"id":6537,"outV":55,"properties":{"weight":1}},{"id":3273,"outV":160,"properties":{"weight":2}},{"id":3882,"outV":51,"properties":{"weight":12}},{"id":12,"outV":9,"properties":{"weight":1}},{"id":1260,"outV":27,"properties":{"weight":1}},{"id":4172,"outV":54,"properties":{"weight":1}},{"id":6285,"outV":49,"properties":{"weight":1}},{"id":368,"outV":74,"properties":{"weight":1}},{"id":4464,"outV":202,"properties":{"weight":1}},{"id":468,"outV":195,"properties":{"weight":3}},{"id":5303,"outV":170,"properties":{"weight":2}},{"id":472,"outV":98,"properties":{"weight":2}},{"id":5081,"outV":4,"properties":{"weight":2}},{"id":2521,"outV":57,"properties":{"weigh
t":1}},{"id":5146,"outV":125,"properties":{"weight":1}},{"id":1405,"outV":83,"properties":{"weight":5}},{"id":1854,"outV":94,"properties":{"weight":2}},{"id":1950,"outV":148,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2169,"inV":25,"properties":{"weight":1}},{"id":2170,"inV":101,"properties":{"weight":46}},{"id":2171,"inV":89,"properties":{"weight":2}},{"id":2172,"inV":130,"properties":{"weight":1}},{"id":2173,"inV":83,"properties":{"weight":1}}]},"properties":{"name":[{"id":45,"value":"WEATHER REPORT SUITE"}],"songType":[{"id":47,"value":""}],"performances":[{"id":46,"value":0}]}}
-{"id":17,"label":"song","inE":{"followedBy":[{"id":5955,"outV":50,"properties":{"weight":43}},{"id":5702,"outV":20,"properties":{"weight":2}},{"id":2696,"outV":13,"properties":{"weight":2}},{"id":6538,"outV":55,"properties":{"weight":1}},{"id":1163,"outV":26,"properties":{"weight":34}},{"id":13,"outV":9,"properties":{"weight":1}},{"id":402,"outV":38,"properties":{"weight":12}},{"id":6675,"outV":12,"properties":{"weight":3}},{"id":5011,"outV":30,"properties":{"weight":3}},{"id":1877,"outV":103,"properties":{"weight":2}},{"id":2522,"outV":57,"properties":{"weight":1}},{"id":3803,"outV":88,"properties":{"weight":4}},{"id":475,"outV":98,"properties":{"weight":1}},{"id":3996,"outV":106,"properties":{"weight":1}},{"id":2588,"outV":112,"properties":{"weight":3}},{"id":540,"outV":120,"properties":{"weight":1}},{"id":990,"outV":11,"properties":{"weight":3}},{"id":1570,"outV":18,"properties":{"weight":6}},{"id":2275,"outV":25,"properties":{"weight":1}},{"id":4262,"outV":10,"properties":{"weig
ht":5}},{"id":2795,"outV":15,"properties":{"weight":10}},{"id":6955,"outV":84,"properties":{"weight":1}},{"id":2413,"outV":68,"properties":{"weight":9}},{"id":4077,"outV":109,"properties":{"weight":1}},{"id":2991,"outV":14,"properties":{"weight":13}},{"id":4912,"outV":100,"properties":{"weight":1}},{"id":3639,"outV":24,"properties":{"weight":13}},{"id":6583,"outV":116,"properties":{"weight":1}},{"id":58,"outV":46,"properties":{"weight":2}},{"id":635,"outV":23,"properties":{"weight":16}},{"id":5244,"outV":32,"properties":{"weight":19}},{"id":2942,"outV":78,"properties":{"weight":1}},{"id":6847,"outV":64,"properties":{"weight":7}}]},"outE":{"followedBy":[{"id":2112,"inV":24,"properties":{"weight":9}},{"id":2113,"inV":21,"properties":{"weight":1}},{"id":2114,"inV":46,"properties":{"weight":1}},{"id":2115,"inV":20,"properties":{"weight":2}},{"id":2116,"inV":10,"properties":{"weight":7}},{"id":2117,"inV":68,"properties":{"weight":25}},{"id":2118,"inV":32,"properties":{"weight":19}},{"id"
:2119,"inV":103,"properties":{"weight":3}},{"id":2120,"inV":121,"properties":{"weight":3}},{"id":2121,"inV":112,"properties":{"weight":31}},{"id":2122,"inV":85,"properties":{"weight":1}},{"id":2123,"inV":101,"properties":{"weight":1}},{"id":2124,"inV":109,"properties":{"weight":1}},{"id":2125,"inV":73,"properties":{"weight":1}},{"id":2126,"inV":88,"properties":{"weight":8}},{"id":2127,"inV":111,"properties":{"weight":3}},{"id":2128,"inV":54,"properties":{"weight":2}},{"id":2129,"inV":97,"properties":{"weight":2}},{"id":2130,"inV":100,"properties":{"weight":1}},{"id":2131,"inV":42,"properties":{"weight":1}},{"id":2132,"inV":58,"properties":{"weight":2}},{"id":2133,"inV":244,"properties":{"weight":1}},{"id":2134,"inV":56,"properties":{"weight":1}},{"id":2135,"inV":63,"properties":{"weight":1}},{"id":2136,"inV":188,"properties":{"weight":2}},{"id":2137,"inV":71,"properties":{"weight":1}},{"id":2138,"inV":30,"properties":{"weight":2}},{"id":2139,"inV":31,"properties":{"weight":1}},{"id"
:2140,"inV":77,"properties":{"weight":2}},{"id":2141,"inV":40,"properties":{"weight":1}},{"id":2142,"inV":33,"properties":{"weight":1}},{"id":2103,"inV":18,"properties":{"weight":17}},{"id":2104,"inV":39,"properties":{"weight":2}},{"id":2105,"inV":22,"properties":{"weight":4}},{"id":2106,"inV":50,"properties":{"weight":6}},{"id":2107,"inV":14,"properties":{"weight":19}},{"id":2108,"inV":15,"properties":{"weight":8}},{"id":2109,"inV":12,"properties":{"weight":24}},{"id":2110,"inV":23,"properties":{"weight":2}},{"id":2111,"inV":13,"properties":{"weight":4}}],"sungBy":[{"id":7364,"inV":340}],"writtenBy":[{"id":7363,"inV":339}]},"properties":{"name":[{"id":48,"value":"THEY LOVE EACH OTHER"}],"songType":[{"id":50,"value":"original"}],"performances":[{"id":49,"value":227}]}}
-{"id":18,"label":"song","inE":{"followedBy":[{"id":1024,"outV":73,"properties":{"weight":4}},{"id":4097,"outV":48,"properties":{"weight":13}},{"id":6276,"outV":49,"properties":{"weight":2}},{"id":2309,"outV":25,"properties":{"weight":1}},{"id":3333,"outV":155,"properties":{"weight":1}},{"id":4231,"outV":52,"properties":{"weight":1}},{"id":4360,"outV":62,"properties":{"weight":1}},{"id":5257,"outV":32,"properties":{"weight":3}},{"id":3849,"outV":60,"properties":{"weight":1}},{"id":5385,"outV":69,"properties":{"weight":2}},{"id":2189,"outV":235,"properties":{"weight":1}},{"id":14,"outV":9,"properties":{"weight":5}},{"id":654,"outV":23,"properties":{"weight":1}},{"id":5010,"outV":30,"properties":{"weight":2}},{"id":6546,"outV":55,"properties":{"weight":1}},{"id":4885,"outV":100,"properties":{"weight":11}},{"id":1814,"outV":273,"properties":{"weight":1}},{"id":1943,"outV":148,"properties":{"weight":1}},{"id":5145,"outV":125,"properties":{"weight":1}},{"id":6688,"outV":12,"properties":{"
weight":1}},{"id":4642,"outV":154,"properties":{"weight":3}},{"id":4260,"outV":10,"properties":{"weight":3}},{"id":2852,"outV":101,"properties":{"weight":1}},{"id":3238,"outV":63,"properties":{"weight":1}},{"id":6695,"outV":141,"properties":{"weight":1}},{"id":3880,"outV":51,"properties":{"weight":12}},{"id":1193,"outV":26,"properties":{"weight":1}},{"id":425,"outV":38,"properties":{"weight":2}},{"id":2601,"outV":112,"properties":{"weight":1}},{"id":4524,"outV":105,"properties":{"weight":3}},{"id":45,"outV":46,"properties":{"weight":3}},{"id":4015,"outV":292,"properties":{"weight":1}},{"id":560,"outV":120,"properties":{"weight":1}},{"id":6579,"outV":116,"properties":{"weight":1}},{"id":5299,"outV":170,"properties":{"weight":3}},{"id":4404,"outV":40,"properties":{"weight":1}},{"id":1716,"outV":82,"properties":{"weight":3}},{"id":5429,"outV":315,"properties":{"weight":1}},{"id":4150,"outV":218,"properties":{"weight":1}
<TRUNCATED>
[18/19] tinkerpop git commit: Moved upgrade docs for GraphSON 2.0 out
of 3.2.1 to 3.2.2. CTR
Posted by sp...@apache.org.
Moved upgrade docs for GraphSON 2.0 out of 3.2.1 to 3.2.2. CTR
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/47106901
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/47106901
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/47106901
Branch: refs/heads/master
Commit: 47106901baaee30dee3af309b9b2d8859daed338
Parents: de139ed
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Aug 22 13:00:45 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Aug 22 13:00:45 2016 -0400
----------------------------------------------------------------------
.../upgrade/release-3.2.x-incubating.asciidoc | 44 +++++++++++---------
1 file changed, 24 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/47106901/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 bf29feb..77333d4 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -32,6 +32,15 @@ Please see the link:https://github.com/apache/tinkerpop/blob/3.2.2/CHANGELOG.asc
Upgrading for Users
~~~~~~~~~~~~~~~~~~~
+GraphSON 2.0
+^^^^^^^^^^^^
+
+GraphSON 2.0 has been introduced to improve and normalize the format of types embedded in GraphSON.
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-1274[TINKERPOP-1274],
+link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#graphson-2.0-types[Reference Documentation -
+GraphSON 2.0].
+
Log4j Dependencies
^^^^^^^^^^^^^^^^^^
@@ -83,6 +92,21 @@ dependending on `gremlin-test` (or `gremlin-groovy-test`) will need to explicitl
See: link:https://issues.apache.org/jira/browse/TINKERPOP-1151[TINKERPOP-1151]
+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 (e.g. `UUID`, `LocalDate`)
+to the appropriate representation for the driver's language.
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-1274[TINKERPOP-1274],
+link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#graphson-2.0-types[Reference Documentation -
+GraphSON 2.0].
+
TinkerPop 3.2.1
---------------
@@ -93,13 +117,6 @@ 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
^^^^^^^^^^^^
@@ -275,19 +292,6 @@ 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
---------------