Merge branch 'onelab' of ssh://git.onelab.eu/git/myslice into onelab
authorYasin <mohammed-yasin.rahman@lip6.fr>
Thu, 5 Jun 2014 13:42:49 +0000 (15:42 +0200)
committerYasin <mohammed-yasin.rahman@lip6.fr>
Thu, 5 Jun 2014 13:42:49 +0000 (15:42 +0200)
13 files changed:
manifoldapi/static/js/manifold.js
plugins/queryupdater/static/js/queryupdater.js
portal/sliceresourceview.py
portal/static/css/onelab.css
portal/templates/account-view.html
portal/templates/onelab/onelab_home-view.html
portal/templates/onelab/onelab_slice-view.html
portal/templates/onelab/onelab_widget-slice-sections.html
portal/templates/onelab/onelab_widget-topmenu.html
portal/templates/slice-resource-view.html
portal/templates/slice-tab-users-view.html
portal/templates/slice-view.html
rest/__init__.py

index f0bbc8a..fa5415a 100644 (file)
@@ -475,15 +475,18 @@ var manifold = {
                 var key = manifold.metadata.get_key(method);
                 if (!key)
                     continue;
-                if (key.length > 1)
-                    continue;
-                key = key[0];
                 var sq_keys = [];
                 var subrecords = record[method];
                 if (!subrecords)
                     continue
                 $.each(subrecords, function (i, subrecord) {
-                    sq_keys.push(subrecord[key]);
+                    if (key.length == 1){
+                        key = key[0];
+                        sq_keys.push(subrecord[key]);
+                    }else{
+                        // more than what's necessary, but should work
+                        sq_keys.push(subrecord);
+                    }
                 });
                 update_query.params[method] = sq_keys;
                 update_query_orig.params[method] = sq_keys.slice();
index 5a7f7ba..774392b 100644 (file)
     var QueryUpdater = Plugin.extend({
 
         init: function(options, element) {
-           this.classname="queryupdater";
+               this.classname="queryupdater";
             this._super(options, element);
 
             var self = this;
+
+            this.initial = Array();
+
             this.table = this.elmt('table').dataTable({
 // the original querytable layout was
 //                sDom: "<'row'<'col-xs-5'l><'col-xs-1'r><'col-xs-6'f>>t<'row'<'col-xs-5'i><'col-xs-7'p>>",
 
         do_update: function(e) {
             var self = e.data;
+
+            self.spin();
+            console.log("do_update");
+
             // XXX check that the query is not disabled
             manifold.raise_event(self.options.query_uuid, RUN_UPDATE);
+
+            // how to stop the spinning after the event? 
+            // this should be triggered by some on_updatequery_done ?
         },
 
        // related buttons are also disabled in the html template
 
         set_state: function(data)
         {
+            console.log("function set_state");
             var action;
             var msg;
             var button = '';
 
         on_new_record: function(record)
         {
+            console.log("query_updater on_new_record");
+            console.log(record);
+
             // if (not and update) {
 
                 // initial['resource'], initial['lease'] ?
-                this.initial.push(record.urn);
+                this.initial.push(record);
 
+            //this.set_record_state(record, RECORD_STATE_ATTACHED);
                 // We simply add to the table
             // } else {
                 //                 \ this.initial_resources
 
         on_query_in_progress: function()
         {
-           messages.debug("queryupdater.on_query_in_progress");
+               messages.debug("queryupdater.on_query_in_progress");
             this.spin();
         },
 
             this.clear();
         },
 
-        on_new_record: function(record)
-        {
-        },
-
         on_query_done: function()
         {
+            console.log("on_query_done");
             this.unspin();
         },
 
         // NOTE: record_key could be sufficient 
         on_added_record: function(record)
         {
+            console.log("on_added_record = ",record);
             this.set_record_state(record, RECORD_STATE_ADDED);
             // update pending number
         },
 
         on_removed_record: function(record_key)
         {
+            console.log("on_removed_record = ",record_key);
             this.set_record_state(RECORD_STATE_REMOVED);
         },
 
 
         on_field_state_changed: function(result)
         {
+            console.log("on_field_state_changed");
+            console.log(result);
             messages.debug(result)
             /* this.set_state(result.request, result.key, result.value, result.status); */
             this.set_state(result);
              if (!change)
                 return;
              // ioi: Refubrished
-             var initial = this.initial_resources;
+             var initial = this.initial;
              //var r_removed  = []; //
              /*-----------------------------------------------------------------------
                 TODO: remove this dirty hack !!!
index 2034eac..f99c7d9 100644 (file)
@@ -19,6 +19,7 @@ from plugins.queryupdater            import QueryUpdater
 from plugins.testbeds                import TestbedsPlugin
 from plugins.scheduler2              import Scheduler2
 from plugins.columns_editor          import ColumnsEditor
+from plugins.lists.simplelist        import SimpleList
 
 from myslice.theme import ThemeView
 
@@ -43,13 +44,16 @@ class SliceResourceView (LoginRequiredView, ThemeView):
         user_fields = ['user_hrn'] # [column['name'] for column in user_md['column']]
 
         # TODO The query to run is embedded in the URL
+        # Example: select slice_hrn, resource.urn, lease.resource, lease.start_time, lease.end_time from slice where slice_hrn == "ple.upmc.myslicedemo"
         main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename)
         main_query.select(
                 'slice_hrn',
                 'resource.urn', 
                 'resource.hostname', 'resource.type',
                 'resource.network_hrn',
-                'lease.urn',
+                'lease.resource',
+                'lease.start_time',
+                'lease.end_time',
                 #'user.user_hrn',
                 #'application.measurement_point.counter'
         )
@@ -95,21 +99,35 @@ class SliceResourceView (LoginRequiredView, ThemeView):
         # RESERVED RESOURCES LIST
         # resources as a list using datatable plugin
  
-        list_reserved_resources = QueryTable(
-            page       = page,
-            domid      = 'resources-reserved-list',
-            title      = 'List view',
-            query      = sq_resource,
-            query_all  = sq_resource,
-            init_key   = "urn",
-            checkboxes = True,
-            datatables_options = {
-                'iDisplayLength': 25,
-                'bLengthChange' : True,
-                'bAutoWidth'    : True,
-                },
+        list_reserved_resources = SimpleList(
+            title = None,
+            page  = page,
+            key   = 'urn',
+            query = sq_resource,
         )
 
+        list_reserved_leases = SimpleList(
+            title = None,
+            page  = page,
+            key   = 'resource',
+            query = sq_lease,
+        )
+
+#        list_reserved_resources = QueryTable(
+#            page       = page,
+#            domid      = 'resources-reserved-list',
+#            title      = 'List view',
+#            query      = sq_resource,
+#            query_all  = sq_resource,
+#            init_key   = "urn",
+#            checkboxes = True,
+#            datatables_options = {
+#                'iDisplayLength': 25,
+#                'bLengthChange' : True,
+#                'bAutoWidth'    : True,
+#                },
+#        )
+
         # --------------------------------------------------------------------------
         # COLUMNS EDITOR
         # list of fields to be applied on the query 
@@ -203,7 +221,8 @@ class SliceResourceView (LoginRequiredView, ThemeView):
 
         template_env = {}
         template_env['list_resources'] = list_resources.render(self.request)
-#         template_env['list_reserved_resources'] = list_reserved_resources.render(self.request)
+        template_env['list_reserved_resources'] = list_reserved_resources.render(self.request)
+        template_env['list_reserved_leases'] = list_reserved_leases.render(self.request)
 
         template_env['columns_editor'] = filter_column_editor.render(self.request)
 
index 44cdc4a..434a089 100644 (file)
@@ -74,34 +74,6 @@ span.label {
 }
 
 
-div#secondary {
-    
-}
-
-div#secondary ul {
-    position:absolute;
-    top:8px;
-    right:0;
-}
-
-div#secondary li {
-    font-size:9pt;
-    float:left;
-    list-style:none;
-    margin-right:30px;
-    color:gray;
-}
-div#secondary li a {
-    color:gray;
-}
-div#secondary li a:hover {
-    color:#270A5A;
-    text-decoration:none;
-}
-div#secondary li:last-child {
-    margin-right:0;
-}
-
 div#navigation {
     background-color:black;
     width:100%;
@@ -153,27 +125,25 @@ div#navigation li.slices {
     position:relative;
     cursor:pointer;
 }
-div#navigation .dropdown-menu {
-    color:white;
+div.navigation .dropdown-menu {
+    color:black;
     padding:0 15px 15px 15px;
     margin-top:5px;
     margin-left:-16px;
-    background-color:black;
 }
-div#navigation .dropdown-menu a {
-    color:white;
+div.navigation .dropdown-menu a {
+    color:black;
 }
 
-div#menu-slice-list{
+div.menu-slice-list {
     display:none;
     position:absolute;
-    background-color:black;
     padding:15px;
     left:-15px;
     z-index:10;
 }
 
-div#navigation .dropdown-menu li:first-child {
+div.navigation .dropdown-menu li:first-child {
     border-bottom:1px solid white;
     padding-bottom:5px;
      
@@ -479,6 +449,13 @@ div.dataTables_filter label{
 }
 
 /**/
+.header {
+  -moz-box-shadow:    0 0 1px rgba(82,82,82,0.6);
+  -webkit-box-shadow: 0 0 1px rgba(82,82,82,0.6);
+  box-shadow:         0 0 1px rgba(82,82,82,0.6);
+  height:61px;
+  background-color:white;
+}
 div.navigation {
     
 }
@@ -493,7 +470,7 @@ div.navigation ul {
 div.navigation li {
     color:#0C0047;
     font-family:open_sansbold, sans-serif;
-    font-size:10pt;
+    font-size:9pt;
     font-weight:normal;
     line-height:0.8em;
     letter-spacing:0.4pt;
@@ -516,6 +493,51 @@ div.navigation li a:hover, div.navigation li a.current {
 div.navigation li:last-child {
     margin-right:0;
 }
+div.secondary {
+    text-align:right;
+}
+
+div.secondary ul {
+   margin:6px 0 0 0;
+   padding:0;
+}
+
+div.secondary li {
+    font-size:9pt;
+    display:inline;
+    list-style:none;
+    margin:0px;
+    padding:0;
+    margin-right:15px;
+    color:#747474;
+    letter-spacing:0.4px;
+}
+div.secondary li:last-child {
+    margin-right:0;
+}
+div.secondary li a {
+    color:#747474;
+}
+div.secondary li a:hover {
+    text-decoration:none;
+}
+div.secondary .button {    
+    width:300px;
+    margin-top:15px;
+}
+div.secondary .account {
+    margin-top:10px;
+    padding:0;
+    font-size:9pt;
+    color:gray;
+    text-align:right;
+}
+div.secondary .account span {
+    font-size:8pt;
+}
+div.secondary .account a {
+    color:black;
+}
 div.home {
     font-size:11pt;
     line-height:1.2em;
@@ -537,6 +559,17 @@ div.home h3 {
     color:white;
     line-height:1.4em;
 }
+div.dashboard {
+    text-align:center;
+}
+div.dashboard div {
+    margin:25px 0;
+}
+div.dashboard ul {
+    text-align:left;
+    margin-left:24px;
+    list-style:none;
+}
 div.registration-form {
     padding-top:150px;
     text-align:center;
index 8c4c9af..7b106d9 100644 (file)
                                        <tr class="even" id="pkey_row">
                                                 {%if 'N/A' not in user_private_key%}
                                                <td class="key">Private Key </td> <!-- Hide if priv_key doesn't exist in myslice platform   -->
-                                               <td class="value">********<a href="#">
+                                               <td class="value">********<a href="#"></a>
                                                        <button type="submit" name="dl_pkey" class="btn btn-default btn-xs" title="Download your privaye key" id="dl_pkey">
                                                                        <span class="glyphicon glyphicon-download"></span> Download     
                                                                </button>
                                                </td>
                                                  {%else%}
                                                        <td class="key">Private Key </td> <!-- Hide if priv_key doesn't exist in myslice platform   -->
-                                                       <td class="value">********<a href="#">
+                                                       <td class="value">********<a href="#"></a>
                                                        <button type="submit" name="dl_pkey" class="btn btn-default btn-xs disabled" title="Download your privaye key" id="dl_pkey">
                                                                <span class="glyphicon glyphicon-download"></span> Download 
                                                        </button>
index 5fb5dcf..11fa2ee 100644 (file)
@@ -5,6 +5,64 @@
 <!-- <div class="row">
 {% widget '_widget-news.html' %}
 </div> -->
+{% if username %}
+<div class="container dashboard">
+       <div class="row">
+               <div class="col-md-3">
+                       <h3>
+                               EXPERIMENT
+                       </h3>
+                       <div>
+                               <a href="#"><img src="{{ STATIC_URL }}img/icon_slices.png" alt="" /></a>
+                       </div>
+                       <div>
+                               <button id="slicerequestbtn" type="button" class="btn btn-default"><span class="glyphicon glyphicon-plus"></span> Request Slice</button>
+                       </div>
+                       <div>   
+                               <div id="home-slice-list"><img src="{{ STATIC_URL }}img/loading.gif" alt="Loading Slices" /></div>
+                       </div>
+               </div>
+               <div class="col-md-3">
+                       <h3>MANAGEMENT</h3>
+                       <div>
+                               <a href="/portal/institution"><img src="{{ STATIC_URL }}img/icon_authority_color.png" alt="" /></a>
+                       </div>
+                       <div>
+                               <button id="validaterequestbtn" type="button" class="btn btn-default"><span class="glyphicon glyphicon-ok"></span> Validate Requests</button>
+                       </div>
+               </div>
+               <div class="col-md-3">
+                       <h3>
+                               SUPPORT
+                       </h3>
+                       <div>
+                               <a href="/portal/support"><img src="{{ STATIC_URL }}img/icon_support.png" alt="" /></a>
+                       </div>
+                       <div>
+                               <button id="ticketbtn" type="button" class="btn btn-default"><span class="glyphicon glyphicon-envelope"></span> Contact</button>
+                       </div>
+               </div>
+               
+               <div class="col-md-3">
+                       <h3>
+                               ACCOUNT
+                       </h3>
+                       <div>
+                               <a href="/portal/account/"><img src="{{ STATIC_URL }}img/icon_user_color.png" alt="" /></a>
+                       </div>
+                       <div>
+                               <button id="logoutbtn" type="button" class="btn btn-default" data-username="{{ username }}"><span class="glyphicon glyphicon-off"></span> Logout</button>
+                       </div>
+                       <div>
+                               {% if person.last_name %}
+                                       {{person.first_name}} {{person.last_name}}<br />
+                               {% endif %}
+                       <span class="label">Email:</span> <a href='/portal/account/'>{{person.email}}</a>
+               </div>
+               </div>
+       </div>
+</div>
+{% else %}
 <div class="container-fluid home">
        <div class="">
                <div class="col-sm-2"></div>
                        </h3>
                </div>
                <div class="col-sm-5 col-sm-offset-1">
-                       {% if person %}
-                       <div class="logged-in">
-                               <button id="logoutbtn" type="button" class="btn btn-default" data-username="{{ username }}"><span class="glyphicon glyphicon-off"></span> Logout</button>
-                               <div>
-                               {% if person.last_name %}
-                                       {{person.first_name}} {{person.last_name}}<br />
-                               {% endif %}
-                               <span class="label">Email:</span> <a href='/portal/account/'>{{person.email}}</a>
-                       </div>
-               </div>
-                       {% else %}
                        <div class="row">
                                {% widget '_widget-login-user.html' %}
                        </div>
-                       {% endif %}
-                       
-                       {% if person %}
-                               <button id="slicerequestbtn" type="button" class="btn btn-default"><span class="glyphicon glyphicon-plus"></span> Request Slice</button>
-                               <div id="home-slice-list"><img src="{{ STATIC_URL }}img/loading.gif" alt="Loading Slices" /></div>
-                       {% else %}
-                       {% endif %}
-                       
-                               <!-- <button id="ticketbtn" type="button" class="btn btn-default"><span class="glyphicon glyphicon-envelope"></span> Contact</button> -->
                </div>
                <div class="col-sm-1"></div>
        </div>
 </div>
+{% endif %}
+
 
 <script type="text/javascript">
        $(document).ready(function() {
index cf9ee7d..e8f84f0 100644 (file)
@@ -18,8 +18,8 @@
   <div class="tab-pane row" id="testbeds">...</div>
   <div class="tab-pane row" id="resources">...</div>
   <div class="tab-pane row" id="users">...</div>
-  <div class="tab-pane row" id="statistics">...</div>
-  <div class="tab-pane row" id="measurements">...</div>
+  <!-- <div class="tab-pane row" id="statistics">...</div> -->
+  <!-- <div class="tab-pane row" id="measurements">...</div> -->
   <div class="tab-pane row" id="experiment">...</div>
 </div>         
 {% endblock %}
index bf64b8d..0d0673f 100644 (file)
@@ -1,21 +1,21 @@
 {% if section == "resources" %}
 <ul class="nav nav-tabs nav-section">
        <li><a href="/slice/{{ slice }}#info"><img src="{{ STATIC_URL }}icons/slices-xs.png" alt="About MySlice" /> {{ slice }}</a></li>
-       <li><a href="/slice/{{ slice }}#testbeds">Testbeds</a></li>
+       <!-- <li><a href="/slice/{{ slice }}#testbeds">Testbeds</a></li> -->
        <li class="active"><a class="link" href="/resources/{{ slice }}">Resources</a></li>
        <li><a href="/slice/{{ slice }}#users">Users</a></li>
-       <li><a href="/slice/{{ slice }}#experiment">Statistics</a></li>
-       <li><a href="/slice/{{ slice }}#experiment">Measurements</a></li>
+       <!-- <li><a href="/slice/{{ slice }}#experiment">Statistics</a></li> -->
+       <!-- <li><a href="/slice/{{ slice }}#experiment">Measurements</a></li> -->
        <li><a href="/slice/{{ slice }}#experiment" data-toggle="tab">Experiment</a></li>
 </ul>
 {% else %}
 <ul class="nav nav-tabs nav-section">
        <li class="active"><a href="#info"><img src="{{ STATIC_URL }}icons/slices-xs.png" alt="About MySlice" /> {{ slice }}</a></li>
-       <li class="testbeds"><a href="#testbeds">Testbeds</a></li>
+       <!-- <li class="testbeds"><a href="#testbeds">Testbeds</a></li> -->
        <li><a class="link" href="/resources/{{ slice }}">Resources</a></li>
        <li class="users"><a href="#users">Users</a></li>
-       <li class="statistics"><a href="#experiment">Statistics</a></li>
-       <li class="measurements"><a href="#experiment">Measurements</a></li>
+       <!-- <li class="statistics"><a href="#experiment">Statistics</a></li> -->
+       <!-- <li class="measurements"><a href="#experiment">Measurements</a></li> -->
        <li class="experiment"><a href="#experiment" data-toggle="tab">Experiment</a></li>
 </ul>
 <script>
index eef0516..e81121b 100644 (file)
@@ -6,12 +6,11 @@
                        <a href="/"><img src="{{ STATIC_URL }}img/onelab-portal.png" alt="OneLab Portal - Future Internet Testbeds" /></a>
                </div>
                {% if username %}
-               <div id="navigation" class="col-sm-4 col-md-5 navigation">
+               <div class="col-sm-5 col-md-5 navigation">
                        <ul>
-                               <li><a href="/portal/account/">{{ username }}</a></li>
                                <li>
                                        <a class="dropdown-toggle" data-toggle="dropdown" href="#">
-                                       SLICES <span class="caret"></span>
+                                       EXPERIMENT <span class="caret"></span>
                                </a>
                                        
                                        <div class="dropdown-menu" style="z-index:99;">
                                                                <li><a href="/portal/slice_request/">Request Slice</a></li>
                                                        </ul>
                                        </div>
-                                       </li>
                                </li>
-                               <li><a href="/portal/support/">SUPPORT</a></li>
+                               <li id="nav-institution" class=""><a href="/portal/institution">MANAGEMENT</a></li>
                                <li id="nav-request"><a href="/portal/validate">REQUESTS</a></li>
-                               <li id="nav-institution" class=""><a href="/portal/institution">INSTITUTION</a></li>
-                               <li id="nav-logout" style="margin-top: 10px;"><a id="logout" style="cursor:pointer;" data-username="{{ username }}"><span class="glyphicon glyphicon-off"></span> LOGOUT</a></li>
+                               <li><a href="/portal/support/">SUPPORT</a></li>
+                               
+                               
 
                        </ul>
                </div>
                <div class="col-sm-5 col-md-5 navigation">
                </div>
                {% endif %}
-               <div class="col-sm-4 col-md-4" id="secondary">
+               <div class="col-sm-4 col-md-4 secondary">
                        <ul>
+                               
                                <li><a href="/news">News</a></li>
                                <li><a href="/portal/about">About</a></li>
                                <li><a target="_blank" href="http://www.onelab.eu">Public Website</a></li>
                                <li><a target="_blank" href="http://intranet.onelab.eu">Intranet</a></li>
                        </ul>
+                       {% if username %}
+                       <div class="account">You are logged in as &nbsp;<a href="/portal/account/">{{ username }}</a> &nbsp;&nbsp;|&nbsp;&nbsp; <a id="logout" style="cursor:pointer;" data-username="{{ username }}"><span class="glyphicon glyphicon-off"></span> Logout</a></div>
+                       {% endif %}
                </div>
        </div>
 </div>
index 707fa36..27ac3c5 100644 (file)
                                <!-- <table cellpadding="0" cellspacing="0" border="0" class="table" id="objectList"></table> -->
                        </div>
                        <div id="reserved" class="panel" style="height:370px;display:none;">
-                {{list_reserved_resources}}
+                <table width="80%">
+                    <tr><th width="50%" style="text-align:center;">resources</th><th width="50%" style="text-align:center;">leases</th></tr>
+                    <tr>
+                        <td style="text-align:center">{{list_reserved_resources}}</td>
+                        <td style="text-align:center">{{list_reserved_leases}}</td>
+                    </tr>
+                </table>
                        </div>
                        <div id="pending" class="panel" style="height:370px;display:none;">
                 {{pending_resources}}
index 50806ac..6942861 100644 (file)
                </div>
 <script>
     $(document).ready(function() {
+            // TODO: Add a filter based on the list of authorities
+               $.post("/rest/authority/",{'fields':['authority_hrn']}, function( data ) {
+                console.log(data);
+            }); // post rest/authority
+
                        var slice_users = [];
                $.post("/rest/user/",{'filters':{'parent_authority': "{{user_details.parent_authority}}"}}, function( data ) {
                var list_users = [];
                        table_users.push(user_row);
                 
                });
-                                console.log("slice users before");
-                                console.log(slice_users);
             
                                $("table#user-tab tr:last").after(table_users.join( "" ));
                $("div#user-tab-loaded").css("display","block");
                $("div#user-tab-loading").css("display","none");
                 $("input:checkbox.user").click(function() {
-                    console.log("user_hrn");
                     user_hrn = $(this).closest('tr').find('td:eq(2)').html();
-                    console.log(user_hrn);
-                    console.log(this.checked);
                     if(this.checked){
                         var record_id = this.id;
                         slice_users.push (user_hrn);
                     }else{
-                        console.log("not checked");
-                        slice_users = $.grep(slice_users, function( user, i ) {
-                            return user != user_hrn;
-                        });
+                        console.log(slice_users);
                     }
-                    console.log(slice_users);
                 });
            
                }); // post rest/user
                $('button#addusers').click(function() {
                 $.post("/update/slice/",{'filters':{'slice_hrn':'{{slice}}'},'params':{'users':slice_users}}, function(data) {
-                    console.log(data);
                        if(data.success){
                        // TODO: highlight row after success
                        //$('tr[id="'+record_id+'"]').highlight();
index d9ca050..9238d54 100644 (file)
@@ -19,8 +19,8 @@
   <div class="tab-pane row" id="testbeds">...</div>
   <div class="tab-pane row" id="resources">...</div>
   <div class="tab-pane row" id="users">...</div>
-  <div class="tab-pane row" id="statistics">...</div>
-  <div class="tab-pane row" id="measurements">...</div>
+  <!-- <div class="tab-pane row" id="statistics">...</div> -->
+  <!-- <div class="tab-pane row" id="measurements">...</div> -->
   <div class="tab-pane row" id="experiment">...</div>
 </div>         
 {% endblock %}
index 1ca3797..a856596 100644 (file)
@@ -40,21 +40,33 @@ class ObjectRequest(object):
             self.filters['disabled'] = '0'
             self.filters['gateway_type'] = 'sfa'
             self.filters['platform'] = '!myslice'
-        elif(self.type.startswith('local:')):
-            # XXX TODO: find a generic Query to get the fields like 
-            # select column.name from local:object where table == local:user
+        #elif(self.type.startswith('local:')):
+        elif ':' in self.type:
             table = self.type.split(':')
+            prefix = table[0]
             table = table[1]
-            if table == "user":
-                self.id = table + '_id'
-                self.fields = ['user_id', 'email', 'password', 'config','status'];
-            elif table == "account":
-                # XXX TODO: Multiple key for account = (platform_id, user_id)
-                self.id = "platform_id, user_id"
-                self.fields = ['platform_id', 'user_id', 'auth_type', 'config'];
-            elif table == "platform":
-                self.id = 'platform'
-                self.fields = ['platform', 'platform_longname', 'platform_url', 'platform_description','gateway_type'];
+
+            if prefix is 'local':
+                # XXX TODO: find a generic Query to get the fields like 
+                # select column.name from local:object where table == local:user
+                table = self.type.split(':')
+                table = table[1]
+                if table == "user":
+                    self.id = table + '_id'
+                    self.fields = ['user_id', 'email', 'password', 'config','status'];
+                elif table == "account":
+                    # XXX TODO: Multiple key for account = (platform_id, user_id)
+                    self.id = "platform_id, user_id"
+                    self.fields = ['platform_id', 'user_id', 'auth_type', 'config'];
+                elif table == "platform":
+                    self.id = 'platform'
+                    self.fields = ['platform', 'platform_longname', 'platform_url', 'platform_description','gateway_type'];
+            else:
+                # If we use prefix, set the key without the prefix then add it again
+                self.type = table
+                self.setKey()
+                self.setLocalFields()
+                self.type = prefix + ':' + table
         else :
             self.setKey()
             self.setLocalFields()