Base net-virt CLI files on top of which ONOS specific changes will be done
diff --git a/cli/sdncon/coreui/views.py b/cli/sdncon/coreui/views.py
new file mode 100755
index 0000000..b7fbdd9
--- /dev/null
+++ b/cli/sdncon/coreui/views.py
@@ -0,0 +1,153 @@
+#
+# Copyright (c) 2013 Big Switch Networks, Inc.
+#
+# Licensed under the Eclipse Public License, Version 1.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.eclipse.org/legal/epl-v10.html
+#
+# 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.
+#
+
+#  Views for the core controller UI
+#
+
+from django.shortcuts import render_to_response
+from django.utils import simplejson
+from django.http import HttpResponse
+from django.contrib.auth.decorators import login_required
+from django.contrib.auth.models import User
+from django.template import RequestContext
+from sdncon.apploader import AppLoader, AppLister
+from sdncon.clusterAdmin.utils import conditionally, isCloudBuild
+from sdncon.clusterAdmin.models import Customer, Cluster, CustomerUser
+import os
+
+JSON_CONTENT_TYPE = 'application/json'
+
+# --- View for the root page of any application
+@conditionally(login_required, isCloudBuild())
+def show_application_tabs(request, app):
+    clusterlist = []
+    cus = CustomerUser.objects.all()
+    for cu in cus:
+        if cu.user.username == request.user.username:
+            for cluster in cu.customer.cluster_set.all():
+                clusterlist.append({'customer': cluster.customer.customername,
+                                    'clustername': cluster.clustername,
+                                    'clusterid': unicode(cluster)})
+
+    return render_to_response('coreui/templates/showapp.html', 
+                {'apps':[x for x in AppLoader.getApps() if not hasattr(x,'invisible')],'currentapp':app,'tabs':AppLoader.getApp(app).tabs,'clusterlist':clusterlist, 'isCloudBuild': isCloudBuild()},
+                context_instance=RequestContext(request))
+
+# --- Generic Views
+def embedded_datatable(request, model, options=None, skip_columns=[]): 
+
+    model_name = model.__name__
+    title = model_name + " Table"
+    tablename = model_name+"-embed"
+    table_data = Switch.objects.all()
+
+    # Find headers
+    table_headers = []
+    for field in model._meta.local_fields:
+        table_headers.append(field.name)
+    print table_headers
+
+    # Skip unwanted columns
+    for c in skip_columns:
+        if c in table_headers:
+            table_headers.remove(c)
+
+    # Populate data
+    table_data = []
+    for instance in model.objects.all():
+        table_row = []
+        for field in table_headers:
+            value = instance.__dict__.get(field)
+            table_row.append(value)
+        table_data.append(table_row)
+
+    # Beautify Headers
+    ##TODO ALEX query model info directly, don't use model info list then remove import and delete file
+    #print model_name
+    #if model_name.lower() in model_info_list.model_info_dict:
+    #    print "yes"
+    #    table_headers_c = []
+    #    field_dict = model_info_list.model_info_dict[model_name.lower()]["fields"]
+    #    for h in table_headers:
+    #        h = h.replace("_","-")
+    #        print h, field_dict
+    #        if h in field_dict:
+    #            table_headers_c.append(field_dict[h]['verbose_name'])
+    #        else:
+    #            table_headers_c.append(h)
+    #    table_headers = table_headers_c
+
+    return render_to_response('coreui/templates/datatable-embed.html', {
+        'tabletitle': title,
+        'tablename' : tablename,
+        'tableheaders' : table_headers, 
+        'tabledata' : table_data,
+        'dataTableOptions': options
+    })
+
+def embedded_datatable_from_model(request, model, options=None, skip_columns=[]): 
+    
+    model_name = model.__name__
+    title = model_name + " Table"
+    tablename = model_name+"-embed"
+    table_data = Switch.objects.all()
+    
+    # Find headers
+    table_headers = []
+    for field in model._meta.local_fields:
+        table_headers.append(field.name)
+    print table_headers
+    
+    # Skip unwanted columns
+    for c in skip_columns:
+        if c in table_headers:
+            table_headers.remove(c)
+
+    # Populate data
+    table_data = []
+    for instance in model.objects.all():
+        table_row = []
+        for field in table_headers:
+            value = instance.__dict__.get(field)
+            table_row.append(value)
+        table_data.append(table_row)
+
+    # Beautify Headers
+    print model_name
+    if model_name.lower() in model_info_list.model_info_dict:
+        print "yes"
+        table_headers_c = []
+        field_dict = model_info_list.model_info_dict[model_name.lower()]["fields"]
+        for h in table_headers:
+            h = h.replace("_","-")
+            print h, field_dict
+            if h in field_dict:
+                if 'verbose_name' in field_dict[h]:
+                    table_headers_c.append(field_dict[h]['verbose_name'])
+                else:
+                    table_headers_c.append(h)
+            else:
+                table_headers_c.append(h)
+        table_headers = table_headers_c
+    
+    return render_to_response('coreui/templates/datatable-embed.html', {
+        'tabletitle': title,
+        'tablename' : tablename,
+        'tableheaders' : table_headers, 
+        'tabledata' : table_data,
+        'dataTableOptions': options
+    })
+