CORD-879 eliminate proxy models in vRouter

Change-Id: I3587ba971b63c0498c6f7c7b915f291d30ba5d5b
diff --git a/xos/models.py b/xos/models.py
index 8396d3e..016cb3d 100644
--- a/xos/models.py
+++ b/xos/models.py
@@ -32,46 +32,14 @@
     class Meta:
         app_label = APP_LABEL
         verbose_name = "vRouter Service"
-        proxy = True
 
-    default_attributes = {
-        "rest_hostname": "",
-        "rest_port": "8181",
-        "rest_user": "onos",
-        "rest_pass": "rocks"
-    }
+    # Are rest_hostname and rest_port redundant with ONOS service?
+    # Should ONOSService be augmented with rest_user and rest_pass?
 
-    @property
-    def rest_hostname(self):
-        return self.get_attribute("rest_hostname", self.default_attributes["rest_hostname"])
-
-    @rest_hostname.setter
-    def rest_hostname(self, value):
-        self.set_attribute("rest_hostname", value)
-
-    @property
-    def rest_port(self):
-        return self.get_attribute("rest_port", self.default_attributes["rest_port"])
-
-    @rest_port.setter
-    def rest_port(self, value):
-        self.set_attribute("rest_port", value)
-
-    @property
-    def rest_user(self):
-        return self.get_attribute("rest_user", self.default_attributes["rest_user"])
-
-    @rest_user.setter
-    def rest_user(self, value):
-        self.set_attribute("rest_user", value)
-
-    @property
-    def rest_pass(self):
-        return self.get_attribute("rest_pass", self.default_attributes["rest_pass"])
-
-    @rest_pass.setter
-    def rest_pass(self, value):
-        self.set_attribute("rest_pass", value)
+    rest_hostname = StrippedCharField(max_length=255, null=True, blank=True)
+    rest_port = models.IntegerField(default=8181)
+    rest_user = StrippedCharField(max_length=255, default="onos")
+    rest_pass = StrippedCharField(max_length=255, default="rocks")
 
     def ip_to_mac(self, ip):
         (a, b, c, d) = ip.split('.')
@@ -112,16 +80,13 @@
 
 class VRouterTenant(Tenant):
     class Meta:
-        proxy = True
         verbose_name = "vRouter Tenant"
 
     KIND = VROUTER_KIND
 
-    simple_attributes = (
-        ("public_ip", None),
-        ("public_mac", None),
-        ("address_pool_id", None),
-    )
+    public_ip = StrippedCharField(max_length = 30, null=True, blank=True)
+    public_mac = StrippedCharField(max_length = 30, null=True, blank=True)
+    address_pool = models.ForeignKey(AddressPool, related_name='vrouter_tenants', blank=True, null=True)
 
     @property
     def gateway_ip(self):
@@ -150,30 +115,9 @@
                 return int(parts[1].strip())
         return None
 
-    @property
-    def address_pool(self):
-        if getattr(self, "cached_address_pool", None):
-            return self.cached_address_pool
-        if not self.address_pool_id:
-            return None
-        aps = AddressPool.objects.filter(id=self.address_pool_id)
-        if not aps:
-            return None
-        ap = aps[0]
-        self.cached_address_pool = ap
-        return ap
-
-    @address_pool.setter
-    def address_pool(self, value):
-        if value:
-            value = value.id
-        if (value != self.get_attribute("address_pool_id", None)):
-            self.cached_address_pool = None
-        self.set_attribute("address_pool_id", value)
-
     def cleanup_addresspool(self):
-        if self.address_pool_id:
-            ap = AddressPool.objects.filter(id=self.address_pool_id)
+        if self.address_pool:
+            ap = self.address_pool
             if ap:
                 ap[0].put_address(self.public_ip)
                 self.public_ip = None
@@ -182,8 +126,6 @@
         self.cleanup_addresspool()
         super(VRouterTenant, self).delete(*args, **kwargs)
 
-VRouterTenant.setup_simple_attributes()
-
 
 # DEVICES
 class VRouterDevice(PlCoreBase):