def get_property_from_api_entity(end_row_id):
    api_entity_data = APIEntity.find_by_id(session=session,
                                           api_entity_id=end_row_id)
    if api_entity_data is not None:
        return api_entity_data.qualified_name, api_entity_data.full_declaration
    else:
        return None, None
def construct_android_class_ur(api_entity):
    url = ""
    url_prefix = "https://developer.android.com/reference/"
    qualified_class_name = api_entity.qualified_name
    package_id = APIRelation.get_end_id_by_start_id_and_relation_type(
        session, api_entity.id, APIRelation.RELATION_TYPE_BELONG_TO)[0]
    if qualified_class_name is not None and package_id is not None:
        print package_id
        parent = APIEntity.find_by_id(session, package_id)
        qualified_package_name = parent.qualified_name
        if qualified_package_name is not None:
            print "-----------------------------------"
            print qualified_package_name, " ", qualified_class_name
            class_name = qualified_class_name.replace(qualified_package_name,
                                                      "")
            class_name = class_name[1:]
            url += url_prefix
            if "." in qualified_package_name:
                name_list = qualified_package_name.split(".")
            else:
                name_list = [qualified_package_name]
            for name in name_list:
                url += (name + "/")
            url += class_name
            print url
    return url
Пример #3
0
def construct_android_method_url(api_entity):
    url = ""
    if api_entity is not None:
        class_id = APIRelation.get_end_id_by_start_id_and_relation_type(session, api_entity.id,
                                                                        APIRelation.RELATION_TYPE_BELONG_TO)[0]
        qualified_method_name = api_entity.qualified_name
        if class_id is not None and qualified_method_name is not None:
            class_document_website_list = APIDocumentWebsite.get_document_website_list_by_api_id(session, class_id)
            class_document_website = ""
            if class_document_website_list is not None:
                for each in class_document_website_list:
                    print "-----------------------------"
                    print each[0]
                    website = each[0]
                    if "https://developer.android.com/reference/" in website:
                        class_document_website = website
                        break
            parent = APIEntity.find_by_id(session, class_id)
            qualified_class_name = parent.qualified_name
            method_name = qualified_method_name.replace(qualified_class_name, "", 1)
            method_name = method_name[1:]
            if "," in method_name:
                method_name = method_name.replace(",", ",%20")
            url = class_document_website + "#" + method_name
            print url
    return url
def get_qualified_name_of_class(old_class_id):
    api_entity_id = get_api_entity_id_by_old_class_id(
        old_class_id=old_class_id)
    api_entity = APIEntity.find_by_id(session, api_entity_id)
    if api_entity:
        return api_entity.qualified_name
    else:
        return None
def get_qualified_name_of_package(package_id):
    api_entity_id = get_package_full_name_by_old_package_id(
        package_id=package_id)
    api_entity = APIEntity.find_by_id(session, api_entity_id)
    if api_entity:
        return api_entity.qualified_name
    else:
        return None
 def transfer_belong_to_type(self, start_api_id):
     if start_api_id is not None:
         start_api_entity = APIEntity.find_by_id(self.session, start_api_id)
         if start_api_entity is not None:
             start_api_type = start_api_entity.api_type
             type_str = APIEntity.get_simple_type_string(start_api_type)
             type_str = type_str.replace("api", "")
             relation_str = "has" + type_str
             return relation_str
     return None
Пример #7
0
def import_android_doc_website_for_method():
    method_id_list = get_android_method_data()
    if method_id_list is not None and len(method_id_list) > 0:
        for method_id in method_id_list:
            api_entity = APIEntity.find_by_id(session, method_id)
            if api_entity is not None:
                url = construct_android_method_url(api_entity)
                if url is not None and url is not "":
                    api_document_website = APIDocumentWebsite(api_entity.id, url)
                    api_document_website.find_or_create(session, autocommit=False)
        session.commit()
Пример #8
0
def update_jdk_annotation_method():
    id_list = get_data_id_list()
    for each in id_list:
        start_row_id = each[0]
        end_row_id = each[1]
        qualified_name = check_and_modify(start_row_id)
        if qualified_name is not None:
            print start_row_id, " ", qualified_name
            api_entity = APIEntity.find_by_id(session=session,
                                              api_entity_id=end_row_id)
            api_entity.qualified_name = qualified_name
            session.commit()
Пример #9
0
def import_android_doc_website_for_package():
    package_id_list = get_android_package_data()
    if package_id_list is not None and len(package_id_list) > 0:
        for package_id in package_id_list:
            api_entity = APIEntity.find_by_id(session, package_id)
            url = construct_android_package_url(api_entity)
            print url
            if api_entity is not None and url is not "":
                api_document_website = APIDocumentWebsite(api_entity.id, url)
                print api_document_website
                api_document_website.find_or_create(session=session, autocommit=False)
        session.commit()
def import_android_doc_website_for_class():
    class_id_list = get_android_class_data()
    if class_id_list is not None and len(class_id_list) > 0:
        for class_id in class_id_list:
            api_entity = APIEntity.find_by_id(session, class_id)
            if api_entity is not None:
                url = construct_android_class_ur(api_entity)
                if url is not None and url != "":
                    api_document_website = APIDocumentWebsite(
                        api_entity.id, url)
                    api_document_website.find_or_create(session,
                                                        autocommit=False)
        session.commit()
    def build_aliases_for_api(self):
        # fuller = APIAliasesTableFuller()
        # fuller.start_add_all_api_aliases()
        useless_alias_type_list = [
            APIAlias.ALIAS_TYPE_QUALIFIER_NAME,
            APIAlias.ALIAS_TYPE_SIMPLE_NAME_WITH_TYPE,
            APIAlias.ALIAS_TYPE_SIMPLE_CLASS_NAME_METHOD_WITH_QUALIFIER_PARAMETER_TYPE,
            APIAlias.ALIAS_TYPE_SIMPLE_NAME_METHOD_WITH_SIMPLE_PARAMETER_TYPE,
            APIAlias.ALIAS_TYPE_SIMPLE_METHOD_WITH_QUALIFIER_PARAMETER_TYPE,
            APIAlias.ALIAS_TYPE_SIMPLE_CLASS_NAME_METHOD_WITH_SIMPLE_PARAMETER_TYPE
        ]

        EntityForQA.delete_names_by_source(session=self.session, source="api")
        accessor = APIGraphAccessor(GraphClient(server_number=4))
        pair_list = accessor.get_all_api_id_and_kg_id_pair()
        for pair in pair_list:
            name_set = set([])
            api_entity = APIEntity.find_by_id(session=self.session, api_entity_id=pair["api_id"])
            all_aliases = api_entity.all_aliases
            for alias_entity in all_aliases:
                if alias_entity.type in useless_alias_type_list:
                    continue
                if api_entity.api_type == APIEntity.API_TYPE_METHOD or api_entity.api_type == APIEntity.API_TYPE_CONSTRUCTOR:
                    if alias_entity.type == APIAlias.ALIAS_TYPE_QUALIFIER_NAME:
                        method_alias_need_to_add = alias_entity.alias.split("(")[0]
                        package_split_list = method_alias_need_to_add.split(".")
                        if len(package_split_list)>=2:
                            alias = package_split_list[-2] + "." + package_split_list[-1]
                            print("add method name=", alias)
                            name_set.add(alias)
                            name_set.add(package_split_list[-1])
                        else:
                            name_set.add(package_split_list[-1])
                        continue
                if api_entity.api_type == APIEntity.API_TYPE_PARAMETER or api_entity.api_type == APIEntity.API_TYPE_RETURN_VALUE:
                    continue
                name_set.add(alias_entity.alias)
            for name in name_set:
                entity = EntityForQA(kg_id=pair["kg_id"], entity_id=pair["api_id"], source="api",
                                     attr='api_id', attr_value=name)
                self.session.add(entity)
        self.session.commit()
Пример #12
0
    def test_get_api_relation(self):
        session = EngineFactory.create_session()
        api = APIEntity.find_by_id(session, 462)
        api=APIEntity.find_by_qualifier(session,"java.lang.String")
        print "api =", api
        print api.document_websites
        print "out_relation"
        for r in api.out_relation:
            print r
            print "start_api=", r.start_api
            print "end_api=", r.end_api
            print "------------"

        print "in_relation"

        for r in api.in_relation:
            print r
            print "start_api=", r.start_api
            print "end_api=", r.end_api
            print "------------"