Source code for refactorguide.output_uml


# coding=utf-8

from refactorguide.tools import write_file
from refactorguide.models import Hierarchy, group_class_by_module_package


[docs]def write_files(report_dir, hierarchy: Hierarchy): # dt = time.strftime("%Y-%m-%d_%H-%M", time.localtime()) for layer in hierarchy.layers: for module in layer.modules: # build plantuml head print("start print "+module.name+"to uml") for package in module.packages: uml = "@startuml \n\n" group_classes = [] group_dict = {} for cls in package.classes: group_classes += cls.smell_dependencies group_classes += cls.smell_usages # build plantuml head group_dict = group_class_by_module_package( package.classes+group_classes) uml += "".join([get_plant_head(module.name, group_pkg_dict) for group_m, group_pkg_dict in group_dict.items()]) for cls in package.classes: # build plantuml relation uml += get_plant_relation(cls, cls.smell_dependencies, False) uml += get_plant_relation(cls, cls.smell_usages, True) uml += "\n@enduml" write_file(report_dir+"/" + module.name + "/" + package.name+"/", package.name+".puml", uml) print("end print "+module.name+"to uml")
[docs]def get_plant_head(module_name, pkg_dict): package_str = "" for p, classes in pkg_dict.items(): package_str += ''.join([uml_package_format.format(p, ''.join( [uml_class_format.format(file.name) for file in classes]))]) moudle_str = uml_module_format.format(module_name, package_str) return moudle_str
[docs]def get_plant_relation(file, dep_file_name_list, isUsage): str = [] condition = "" # target uml line level for dep_file in dep_file_name_list: if dep_file.module != file.module: condition = "[#red]" elif dep_file.module == file.module and dep_file.package == file.package: condition = "[#green]" elif dep_file.module == file.module and dep_file.package != file.package: condition = "[#blue]" else: condition = "" if(isUsage): str.append(uml_relation_format.format(file.name, condition, dep_file.name, " :"+"".join([bs.description for bs in dep_file.bad_smells]))) else: str.append(uml_back_relation_format.format(file.name, condition, dep_file.name, " :"+"".join([bs.description for bs in dep_file.bad_smells]))) return ''.join(str)
uml_module_format = "Package {} {{ \n{} }} \n" uml_package_format = "Package {} {{ \n{} }} \n" uml_class_format = " class {} \n" uml_relation_format = "{} <|-{}- {} {}\n" uml_back_relation_format = "{} -{}-|> {} {}\n"