Cleaned up restapi2.py and added new file as restapi3.py
diff --git a/web/restapi3.py b/web/restapi3.py
new file mode 100755
index 0000000..86e9d66
--- /dev/null
+++ b/web/restapi3.py
@@ -0,0 +1,251 @@
+#! /usr/bin/env python
+
+import os
+import sys
+import subprocess
+import json
+import argparse
+import io
+import time
+
+from flask import Flask, json, Response, render_template, make_response, request
+
+## Global Var ##
+RestIP="127.0.0.1"
+RestPort=8182
+DBName="network-map"
+
+app = Flask(__name__)
+
+## Worker Functions ##
+def log_error(txt):
+  print '%s' % (txt)
+
+def portV_to_dpid(vertex):
+  try:
+    command = "curl -s http://%s:%s/graphs/%s/vertices/%d/in" % (RestIP, RestPort, DBName, vertex)
+    result = os.popen(command).read()
+    parsedResult = json.loads(result)['results']
+  except:
+    log_error("REST IF has issue")
+    exit
+
+  for v in parsedResult:
+    if v['type'] == "switch":
+      sw_dpid = v['dpid']
+      break
+
+  return sw_dpid
+
+def switchV_to_dpid(vertex):
+  try:
+    command = "curl -s http://%s:%s/graphs/%s/vertices/%d" % (RestIP, RestPort, DBName, vertex)
+    result = os.popen(command).read()
+    parsedResult = json.loads(result)['results']
+  except:
+    log_error("REST IF has issue")
+    exit
+
+  if parsedResult['type'] != "switch":
+    print "not a switch vertex"
+    exit
+  else:
+    sw_dpid = parsedResult['dpid']
+
+  return sw_dpid
+
+def portV_to_port_dpid(vertex):
+  try:
+    command = "curl -s http://%s:%s/graphs/%s/vertices/%d" % (RestIP, RestPort, DBName, vertex)
+    result = os.popen(command).read()
+    parsedResult = json.loads(result)['results']
+  except:
+    log_error("REST IF has issue")
+    exit
+
+  port_number = parsedResult['number']
+  switch_dpid = portV_to_dpid(vertex)
+
+  return (port_number, switch_dpid)
+
+def deviceV_to_attachpoint(vertex):
+  try:
+    command = "curl -s http://%s:%s/graphs/%s/vertices/%d/in" % (RestIP, RestPort, DBName, vertex)
+    result = os.popen(command).read()
+    parsedResult = json.loads(result)['results']
+  except:
+    log_error("REST IF has issue")
+    exit
+    
+  port = parsedResult[0]['number']
+  vertex = parsedResult[0]['_id']
+  dpid = portV_to_dpid(vertex)
+  return port, dpid
+
+## Rest APIs ##
+### File Fetch ###
+@app.route('/ui/img/<filename>', methods=['GET'])
+@app.route('/img/<filename>', methods=['GET'])
+@app.route('/css/<filename>', methods=['GET'])
+@app.route('/js/models/<filename>', methods=['GET'])
+@app.route('/js/views/<filename>', methods=['GET'])
+@app.route('/js/<filename>', methods=['GET'])
+@app.route('/lib/<filename>', methods=['GET'])
+@app.route('/', methods=['GET'])
+@app.route('/<filename>', methods=['GET'])
+@app.route('/tpl/<filename>', methods=['GET'])
+def return_file(filename="index.html"):
+  if request.path == "/":
+    fullpath = "./index.html"
+  else:
+    fullpath = str(request.path)[1:]
+
+  response = make_response(open(fullpath).read())
+  suffix = fullpath.split(".")[-1]
+
+  if suffix == "html" or suffix == "htm":
+    response.headers["Content-type"] = "text/html"
+  elif suffix == "js":
+    response.headers["Content-type"] = "application/javascript"
+  elif suffix == "css":
+    response.headers["Content-type"] = "text/css"
+  elif suffix == "png":
+    response.headers["Content-type"] = "image/png"
+
+  return response
+
+@app.route("/wm/device/")
+def devices():
+  try:
+    command = "curl -s http://%s:%s/graphs/%s/vertices\?key=type\&value=device" % (RestIP, RestPort, DBName)
+    result = os.popen(command).read()
+    parsedResult = json.loads(result)['results']
+  except:
+    log_error("REST IF has issue")
+    exit
+
+  devices = []
+  for v in parsedResult:
+    dl_addr = v['dl_addr']
+    nw_addr = v['nw_addr']
+    vertex = v['_id']
+    mac = []
+    mac.append(dl_addr)
+    ip = []
+    ip.append(nw_addr)
+    device = {}
+    device['entryClass']="DefaultEntryClass"
+    device['mac']=mac
+    device['ipv4']=ip
+    device['vlan']=[]
+    device['lastSeen']=0
+    attachpoints =[]
+
+    port, dpid = deviceV_to_attachpoint(vertex)
+    attachpoint = {}
+    attachpoint['port']=port
+    attachpoint['switchDPID']=dpid
+    attachpoints.append(attachpoint)
+    device['attachmentPoint']=attachpoints
+    devices.append(device)
+
+  print devices
+  js = json.dumps(devices)
+  resp = Response(js, status=200, mimetype='application/json')
+  return resp
+
+#{"entityClass":"DefaultEntityClass","mac":["7c:d1:c3:e0:8c:a3"],"ipv4":["192.168.2.102","10.1.10.35"],"vlan":[],"attachmentPoint":[{"port":13,"switchDPID":"00:01:00:12:e2:78:32:44","errorStatus":null}],"lastSeen":1357333593496}
+
+
+## return fake stat for now
+@app.route("/wm/core/switch/<switchId>/<statType>/json")
+def switch_stat(switchId, statType):
+    if statType == "desc":
+        desc=[{"length":1056,"serialNumber":"None","manufacturerDescription":"Nicira Networks, Inc.","hardwareDescription":"Open vSwitch","softwareDescription":"1.4.0+build0","datapathDescription":"None"}]
+        ret = {}
+        ret[switchId]=desc
+    elif statType == "aggregate":
+        aggr = {"packetCount":0,"byteCount":0,"flowCount":0}
+        ret = {}
+        ret[switchId]=aggr
+    else:
+        ret = {} 
+
+    js = json.dumps(ret)
+    resp = Response(js, status=200, mimetype='application/json')
+    return resp
+
+@app.route("/wm/core/controller/switches/json")
+def query_switch():
+  try:
+    command = "curl -s http://%s:%s/graphs/%s/vertices\?key=type\&value=switch" % (RestIP, RestPort, DBName)
+    result = os.popen(command).read()
+    parsedResult = json.loads(result)['results']
+  except:
+    log_error("REST IF has issue")
+    exit
+
+  switches_ = []
+  for v in parsedResult:
+    dpid = str(v['dpid']) ;# removing quotation
+    sw = {}
+    sw['dpid']=dpid
+    switches_.append(sw)
+
+  print switches_
+  js = json.dumps(switches_)
+  resp = Response(js, status=200, mimetype='application/json')
+  return resp
+
+@app.route("/wm/topology/links/json")
+def query_links():
+  try:
+    command = "curl -s http://%s:%s/graphs/%s/vertices?key=type\&value=port" % (RestIP, RestPort, DBName)
+    result = os.popen(command).read()
+    parsedResult = json.loads(result)['results']
+  except:
+    log_error("REST IF has issue")
+    exit
+
+  sport = []
+  switches_ = []
+  for v in parsedResult:
+    srcport = v['_id']
+    try:
+      command = "curl -s http://%s:%s/graphs/%s/vertices/%d/out?_label=link" % (RestIP, RestPort, DBName, srcport)
+      result = os.popen(command).read()
+      linkResults = json.loads(result)['results']
+    except:
+      log_error("REST IF has issue")
+      exit
+
+    for p in linkResults:
+      dstport = p['_id']
+      (sport, sdpid) = portV_to_port_dpid(srcport)
+      (dport, ddpid) = portV_to_port_dpid(dstport)
+      link = {}
+      link["src-switch"]=sdpid
+      link["src-port"]=sport
+      link["src-port-state"]=0
+      link["dst-switch"]=ddpid
+      link["dst-port"]=dport
+      link["dst-port-state"]=0
+      link["type"]="internal"
+      switches_.append(link)
+
+  print switches_
+  js = json.dumps(switches_)
+  resp = Response(js, status=200, mimetype='application/json')
+  return resp
+
+if __name__ == "__main__":
+  if sys.argv[1] == "-d":
+    print "-- query all switches --"
+    query_switch()
+    print "-- query all links --"
+    query_links()
+    print "-- query all devices --"
+    devices()
+  else:
+    app.debug = True
+    app.run(host="0.0.0.0", port=9000)