#!/usr/bin/env python
#
#                     The LLVM Compiler Infrastructure
#
# This file is distributed under the University of Illinois Open Source
# License. See LICENSE.TXT for details.
#
##===----------------------------------------------------------------------===##
#
# This script reads visualization data emitted by the static analyzer for
# display in Ubigraph.
#
##===----------------------------------------------------------------------===##

import xmlrpclib
import sys

def Error(message):
    print >> sys.stderr, 'ubiviz: ' + message
    sys.exit(1)

def StreamData(filename):
  file = open(filename)
  for ln in file:
    yield eval(ln)
  file.close()

def Display(G, data):
  action = data[0]
  if action == 'vertex':
    vertex = data[1]
    G.new_vertex_w_id(vertex)
    for attribute in data[2:]:
      G.set_vertex_attribute(vertex, attribute[0], attribute[1])
  elif action == 'edge':
    src = data[1]
    dst = data[2]
    edge = G.new_edge(src,dst)
    for attribute in data[3:]:
      G.set_edge_attribute(edge, attribute[0], attribute[1])
  elif action == "vertex_style":
    style_id = data[1]
    parent_id = data[2]
    G.new_vertex_style_w_id(style_id, parent_id)
    for attribute in data[3:]:
      G.set_vertex_style_attribute(style_id, attribute[0], attribute[1])
  elif action == "vertex_style_attribute":
    style_id = data[1]
    for attribute in data[2:]:
      G.set_vertex_style_attribute(style_id, attribute[0], attribute[1])
  elif action == "change_vertex_style":
     vertex_id = data[1]
     style_id = data[2]
     G.change_vertex_style(vertex_id,style_id)

def main(args):
  if len(args) == 0:
    Error('no input files')

  server = xmlrpclib.Server('http://127.0.0.1:20738/RPC2')
  G = server.ubigraph

  for arg in args:
    G.clear()
    for x in StreamData(arg):
      Display(G,x)

  sys.exit(0)


if __name__ == '__main__':
    main(sys.argv[1:])