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
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
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()
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()
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()
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 "------------"