def _activate_URI(self, selfLinkuri):
        """Call this with a selfLink, after it's returned in _create or _load.

        Each instance is tightly bound to a particular service URI.  When that
        service is created by this library, or loaded from the device, the URI
        is set to self._meta_data['uri'].   This operation can only occur once,
        any subsequent attempt to manipulate self._meta_data['uri'] is
        probably a mistake.

        self.selfLink references a value that is returned as a JSON value from
        the device.  This value contains "localhost" as the domain or the uri.
        "localhost" is only conceivably useful if the client library is run on
        the device itself, so it is replaced with the domain this API used to
        communicate with the device.

        self.selfLink correctly contains a complete uri, that is only _now_
        (post create or load) available to self.

        Now that the complete URI is available to self, it is now possible to
        reference subcollections, as attributes of self!
        e.g. a resource with a uri path like:
        "/mgmt/tm/ltm/pool/~Common~pool_collection1/members"
        The mechanism used to enable this change is to set
        the `allowed_lazy_attributes` _meta_data key to hold values of the
        `attribute_registry` _meta_data key.

        Finally we stash the corrected `uri`, returned hash_fragment, query
        args, and of course allowed_lazy_attributes in _meta_data.

        :param selfLinkuri: the server provided selfLink (contains localhost)
        :raises: URICreationCollision
        """

        # netloc local alias
        uri = urlparse.urlsplit(str(self._meta_data['bigip']._meta_data['uri']))

        # attrs local alias
        attribute_reg = self._meta_data.get('attribute_registry', {})
        attrs = list(itervalues(attribute_reg))
        attrs = self._assign_stats(attrs)

        (scheme, domain, path, qarg, frag) = urlparse.urlsplit(selfLinkuri)
        path_uri = urlparse.urlunsplit((scheme, uri.netloc, path, '', ''))
        if not path_uri.endswith('/'):
            path_uri = path_uri + '/'
        qargs = urlparse.parse_qs(qarg)
        self._meta_data.update({'uri': path_uri,
                                'creation_uri_qargs': qargs,
                                'creation_uri_frag': frag,
                                'allowed_lazy_attributes': attrs})
Call this with a selfLink, after it's returned in _create or _load.

        Each instance is tightly bound to a particular service URI.  When that
        service is created by this library, or loaded from the device, the URI
        is set to self._meta_data['uri'].   This operation can only occur once,
        any subsequent attempt to manipulate self._meta_data['uri'] is
        probably a mistake.

        self.selfLink references a value that is returned as a JSON value from
        the device.  This value contains "localhost" as the domain or the uri.
        "localhost" is only conceivably useful if the client library is run on
        the device itself, so it is replaced with the domain this API used to
        communicate with the device.

        self.selfLink correctly contains a complete uri, that is only _now_
        (post create or load) available to self.

        Now that the complete URI is available to self, it is now possible to
        reference subcollections, as attributes of self!
        e.g. a resource with a uri path like:
        "/mgmt/tm/ltm/pool/~Common~pool_collection1/members"
        The mechanism used to enable this change is to set
        the `allowed_lazy_attributes` _meta_data key to hold values of the
        `attribute_registry` _meta_data key.

        Finally we stash the corrected `uri`, returned hash_fragment, query
        args, and of course allowed_lazy_attributes in _meta_data.

        :param selfLinkuri: the server provided selfLink (contains localhost)
        :raises: URICreationCollision