|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def parse(line) { |
|
def (vertex, outEdges, inEdges) = line.split(/\t/, 3) |
|
def (v1id, v1label, v1props) = vertex.split(/,/, 3) |
|
def v1 = graph.addVertex(T.id, v1id.toInteger(), T.label, v1label) |
|
switch (v1label) { |
|
case "song": |
|
def (name, songType, performances) = v1props.split(/,/) |
|
v1.property("name", name) |
|
v1.property("songType", songType) |
|
v1.property("performances", performances.toInteger()) |
|
break |
|
case "artist": |
|
v1.property("name", v1props) |
|
break |
|
default: |
|
throw new Exception("Unexpected vertex label: ${v1label}") |
|
} |
|
[[outEdges, true], [inEdges, false]].each { def edges, def out -> |
|
edges.split(/\|/).grep().each { def edge -> |
|
def parts = edge.split(/,/) |
|
def otherV, eLabel, weight = null |
|
if (parts.size() == 2) { |
|
(eLabel, otherV) = parts |
|
} else { |
|
(eLabel, otherV, weight) = parts |
|
} |
|
def v2 = graph.addVertex(T.id, otherV.toInteger()) |
|
def e = out ? v1.addOutEdge(eLabel, v2) : v1.addInEdge(eLabel, v2) |
|
if (weight != null) { |
|
e.property("weight", weight.toInteger()) |
|
} |
|
} |
|
} |
|
return v1 |
|
} |
|
|