def import_jdk_parameter_relation(cur, session): parameter_data = read_parameter_data(cur) for each in parameter_data: if each is not None: name = each[0] method_id = each[1] type_string = each[2] description = each[3] type_class = each[4] full_declaration = type_string + " " + name description = clean_html_text(description) parameter_entity = APIEntity.find_by_full_declaration_and_description(session, full_declaration, description) jdk_method_knowledge_table = KnowledgeTableFactory.get_jdk_method_table(session) api_knowledge_table = KnowledgeTableFactory.get_api_entity_table(session) method_entity_id = KnowledgeTableRowMapRecord.get_end_row_id(session, jdk_method_knowledge_table, api_knowledge_table, method_id) if parameter_entity is not None and method_entity_id is not None: end_api_id = parameter_entity.id api_relation_has_parameter = APIRelation(method_entity_id, end_api_id, APIRelation.RELATION_TYPE_HAS_PARAMETER) print("------------------------") print(api_relation_has_parameter) api_relation_has_parameter.find_or_create(session, autocommit=False) if type_class == 0: qualified_class_name = type_string else: qualified_class_name = get_qualified_class_name(type_class, cur) if qualified_class_name is not None and parameter_entity is not None: class_entity = APIEntity.find_by_qualifier(session, qualified_class_name) if class_entity is not None: api_relation_has_type = APIRelation(parameter_entity.id, class_entity.id, APIRelation.RELATION_TYPE_PARAMETER_HAS_TYPE) print("=============================") print(api_relation_has_type) api_relation_has_type.find_or_create(session, autocommit=False) session.commit()
def import_android_return_value(cur, session): return_value_data = read_android_return_value_data(cur) for each in return_value_data: print(each) return_value_name = each[0] return_value_text = clean_html_text(each[1]) return_value_url = each[2] # print(return_value_name) # print(return_value_text) # print(return_value_url) qualified_name = "" if return_value_url != "": qualified_name_list = return_value_url.replace( "https://developer.android.google.cn/reference/", "").replace(".html", "").split("/") for i in range(0, len(qualified_name_list)): if i == 0: qualified_name += qualified_name_list[i] else: qualified_name += ("." + qualified_name_list[i]) else: qualified_name = return_value_name qualified_name = qualified_name + " (R)" print(qualified_name) api_entity = APIEntity(qualified_name, APIEntity.API_TYPE_RETURN_VALUE, return_value_name, return_value_text) # print(api_entity) api_entity.find_or_create(session, autocommit=False) session.commit()
def print_compare(self, html): # print html old_text = clean_html_text(html) print "old text: " print old_text text = clean_html_text_with_format(html) print "new method text: " print text
def start_clean_html(): api_html_text_list = session.query(APIHTMLText).filter_by( clean_text=None).all() count = 0 step = 5000 for api_html_text in api_html_text_list: api_html_text.clean_text = clean_html_text(api_html_text.html) count = count + 1 if count > step: session.commit() count = 0 session.commit()
def import_jdk_return_value_relation(cur, session): return_value_data = read_return_value_data(cur) total = 0 type1 = 0 type2 = 0 for each in return_value_data: total += 1 method_id = each[0] full_declaration = each[1] return_type = each[2] return_string = each[3] return_type = process_return_type_string(return_type) qualified_name = construct_qualified_name_by_full_declaration(full_declaration, return_type) print("****************") print(method_id) print(return_type) print(full_declaration) print(qualified_name) if qualified_name is None: qualified_name = return_type return_string = clean_html_text(return_string) parameter_entity = APIEntity.find_by_full_declaration_and_description(session, return_type, return_string) jdk_method_knowledge_table = KnowledgeTableFactory.get_jdk_method_table(session) api_knowledge_table = KnowledgeTableFactory.get_api_entity_table(session) method_entity_id = KnowledgeTableRowMapRecord.get_end_row_id(session, jdk_method_knowledge_table, api_knowledge_table, method_id) if parameter_entity is not None and method_entity_id is not None: end_api_id = parameter_entity.id api_relation_has_return_value = APIRelation(method_entity_id, end_api_id, APIRelation.RELATION_TYPE_HAS_RETURN_VALUE) api_relation_has_return_value.find_or_create(session, autocommit=False) print("------------------------") print(api_relation_has_return_value) type1 += 1 if qualified_name is not None and parameter_entity is not None: print("+++++++++++++++++++++") print(qualified_name) class_entity = APIEntity.find_by_qualifier(session, qualified_name) if class_entity is not None: api_relation_has_type = APIRelation(parameter_entity.id, class_entity.id, APIRelation.RELATION_TYPE_RETURN_VALUE_HAS_TYPE) api_relation_has_type.find_or_create(session, autocommit=False) print("=============================") print(api_relation_has_type) type2 += 1 session.commit() print("total: " + str(total) + ", type1: " + str(type1) + ", type2: " + str(type2))
def import_jdk_return_value(cur, session): return_value_data = get_return_value_data(cur) for each in return_value_data: full_declaration = each[0] return_type = each[1] return_string = each[2] print(return_type) return_type = process_return_type_string(return_type) qualified_name = construct_qualified_name_by_full_declaration(full_declaration, return_type) if qualified_name is not None: qualified_name = qualified_name + " (R)" else: qualified_name = return_type + " (R)" return_string = clean_html_text(return_string) api_entity = APIEntity(qualified_name, APIEntity.API_TYPE_RETURN_VALUE, return_type, return_string) api_entity.find_or_create(session, autocommit=False) session.commit()
def import_jdk_exception_condition(cur, session): exception_condition_data = read_exception_condition_data(cur) for each in exception_condition_data: name = each[0] description = each[1] qualified_name = get_qualified_name_by_simple_name(name, cur) if qualified_name is not None: qualified_name = qualified_name + ' (E)' else: qualified_name = name + ' (E)' print(qualified_name) description = clean_html_text(description) api_entity = APIEntity(qualified_name, APIEntity.API_TYPE_EXCEPTION_CONDITION, name, description) api_entity.find_or_create(session, autocommit=False) session.commit()
def import_jdk_exception_relation(cur, session): jdk_exception_data = read_jdk_exception_data(cur) simple_exception_name_list = get_simple_exception_name_list(session) total = 0 type1 = 0 type2 = 0 for each in jdk_exception_data: total += 1 name = each[0] method_id = each[1] description = each[2] description = clean_html_text(description) exception_entity = APIEntity.find_by_full_declaration_and_description( session, name, description) jdk_method_knowledge_table = KnowledgeTableFactory.get_jdk_method_table( session) api_knowledge_table = KnowledgeTableFactory.get_api_entity_table( session) method_entity_id = KnowledgeTableRowMapRecord.get_end_row_id( session, jdk_method_knowledge_table, api_knowledge_table, method_id) if exception_entity is not None and method_entity_id is not None: type1 += 1 api_relation_has_exception = APIRelation( method_entity_id, exception_entity.id, APIRelation.RELATION_TYPE_HAS_EXCEPTION) api_relation_has_exception.find_or_create(session, autocommit=False) print("------------------------") print(api_relation_has_exception) if exception_entity is not None and name is not None: type2 += 1 exception_id = get_exception_id_by_simple_name( simple_exception_name_list, name) if exception_id is not None: api_relation_has_type = APIRelation( exception_entity.id, exception_id, APIRelation.RELATION_TYPE_EXCEPTION_HAS_TYPE) api_relation_has_type.find_or_create(session, autocommit=False) print("=============================") print(api_relation_has_type) session.commit() print("total: " + str(total) + ", type1: " + str(type1) + ", type2: " + str(type2))
def create_class_node(row_data): old_id = row_data[0] # no full package name, only the class name, etc. "android.view.Button" has simple name "Button" simple_class_name = row_data[1] short_description_html = row_data[2] first_version = row_data[6] full_declaration = row_data[7] package_id = row_data[9] short_description = None if short_description_html: short_description = clean_html_text(short_description_html) short_description = short_description.strip() if not short_description: short_description = None if first_version == -1: first_version = None qualified_name = generate_qualified_name_for_class( simple_class_name=simple_class_name, class_package_id=package_id) api_type = get_api_type_from_full_declaration(full_declaration) logger.info("qualified_name=%s type=%s form %s", qualified_name, api_type, full_declaration) if api_type == APIEntity.API_TYPE_UNKNOWN: return None, 0 api_entity = APIEntity(qualified_name=qualified_name, api_type=api_type, full_declaration=full_declaration, added_in_version=first_version, short_description=short_description) logger.info(row_data) logger.info(qualified_name) logger.info(api_type) logger.info(full_declaration) logger.info(first_version) logger.info(short_description) logger.info("-----------------") return api_entity, old_id
def import_android_return_value_relation(cur, session): total = 0 type1 = 0 type2 = 0 return_value_data = read_android_return_value_data(cur) for each in return_value_data: total += 1 return_value_name = each[0] return_value_text = clean_html_text(each[1]) method_id = each[2] return_value_url = each[3] return_value_entity = APIEntity.find_by_full_declaration_and_description(session, return_value_name, return_value_text) api_knowledge_table = KnowledgeTableFactory.get_api_entity_table(session) android_method_table = KnowledgeTableFactory.get_android_method_table(session) method_entity_id = KnowledgeTableRowMapRecord.get_end_row_id(session, android_method_table, api_knowledge_table, method_id) qualified_name = "" if return_value_url != "": qualified_name_list = return_value_url.replace("https://developer.android.google.cn/reference/", "").replace(".html", "").split("/") for i in range(0, len(qualified_name_list)): if i == 0: qualified_name += qualified_name_list[i] else: qualified_name += ("." + qualified_name_list[i]) else: qualified_name = return_value_name return_value_class = session.query(APIEntity).filter_by(qualified_name=qualified_name).first() if return_value_entity is not None and method_entity_id is not None: type1 += 1 api_relation_has_return_value = APIRelation(method_entity_id, return_value_entity.id, APIRelation.RELATION_TYPE_HAS_RETURN_VALUE) api_relation_has_return_value.find_or_create(session, autocommit=False) if return_value_entity is not None and return_value_class is not None: type2 += 1 api_relation_has_type = APIRelation(return_value_entity.id, return_value_class.id, APIRelation.RELATION_TYPE_RETURN_VALUE_HAS_TYPE) api_relation_has_type.find_or_create(session, autocommit=False) session.commit() print(total) print(type1) print(type2)
def import_jdk_parameter(cur, session): jdk_parameter_data = read_jdk_parameter_data(cur) for each in jdk_parameter_data: print(each) name = each[0] type_class = each[1] type_string = each[2] description = each[3] qualified_class_name = get_qualified_class_name(type_class, cur) print(qualified_class_name) if qualified_class_name is not None: qualified_name = qualified_class_name[0] + " " + name else: qualified_name = type_string + " " + name full_declaration = type_string + " " + name print(qualified_name) print(full_declaration) description = clean_html_text(description) api_entity = APIEntity(qualified_name, APIEntity.API_TYPE_PARAMETER, full_declaration, description) api_entity.find_or_create(session, autocommit=False) session.commit()