find link according to link ID.
        :param lid: link id
        :return: the link if found or None if not found

def find_link(lid=None, sep_id=None, tep_id=None):
        """
        find link according to link ID.
        :param lid: link id
        :return: the link if found or None if not found
        """
        LOGGER.debug("LinkService.find_link")
        ret = None
        if (lid is None or not lid) and (sep_id is None or not sep_id) and (tep_id is None or not tep_id):
            raise exceptions.ArianeCallParametersError('id, source endpoint ID, target endpoint ID')

        if (lid is not None and lid) and ((sep_id is not None and sep_id) or (tep_id is not None and tep_id)):
            LOGGER.warning('LinkService.find_link - Both lid and sep_id and tep_id are defined. '
                           'Will give you search on id.')
            # traceback.print_stack()
            sep_id = None
            tep_id = None

        if lid is not None and lid:
            params = SessionService.complete_transactional_req({'ID': lid})
            if MappingService.driver_type != DriverFactory.DRIVER_REST:
                params['OPERATION'] = 'getLink'
        elif sep_id is not None and sep_id and tep_id is not None and tep_id:
            params = SessionService.complete_transactional_req({'SEPID': sep_id, 'TEPID': tep_id})
            if MappingService.driver_type != DriverFactory.DRIVER_REST:
                params['OPERATION'] = 'getLinkBySourceEPandDestinationEP'
        elif sep_id is not None and sep_id and (tep_id is None or not tep_id):
            params = SessionService.complete_transactional_req({'SEPID': sep_id})
            if MappingService.driver_type != DriverFactory.DRIVER_REST:
                params['OPERATION'] = 'getLinksBySourceEP'
        else:
            params = SessionService.complete_transactional_req({'TEPID': tep_id})
            if MappingService.driver_type != DriverFactory.DRIVER_REST:
                params['OPERATION'] = 'getLinksByDestinationEP'

        if MappingService.driver_type != DriverFactory.DRIVER_REST:
            args = {'properties': params}
        else:
            args = {'http_operation': 'GET', 'operation_path': 'get', 'parameters': params}

        if MappingService.driver_type != DriverFactory.DRIVER_REST:
            if lid is not None and lid:
                response = LinkService.requester.call(args)
            else:
                response = MappingService.requester.call(args)
        else:
            response = LinkService.requester.call(args)

        if MappingService.driver_type != DriverFactory.DRIVER_REST:
            response = response.get()

        if response.rc == 0:
            if (lid is not None and lid) or (sep_id is not None and sep_id and tep_id is not None and tep_id):
                ret = Link.json_2_link(response.response_content)
            else:
                ret = []
                for link in response.response_content['links']:
                    ret.append(Link.json_2_link(link))
        elif response.rc != 404:
            err_msg = 'LinkService.find_link - Problem while searching link (id:' + str(lid) + '). ' + \
                      'Reason: ' + str(response.response_content) + ' - ' + str(response.error_message) + \
                      " (" + str(response.rc) + ")"
            if response.rc == 500 and ArianeMappingOverloadError.ERROR_MSG in response.error_message:
                raise ArianeMappingOverloadError("LinkService.find_link",
                                                 ArianeMappingOverloadError.ERROR_MSG)
            LOGGER.warning(err_msg)
            # traceback.print_stack()
        return ret