def generate_uml_diagram():
uml_text = """
@startuml
class Elevator {
+capacity: Int
+inside_panel
+current_floor
current_state: Enum(going_up, going_down, idle)
go_to_floor()
open_door()
close_door()
}
class Button {
}
class Floor {
number
outside_panel
up_pressed()
down_pressed()
}
class OutsidePanel {
buttons: dict()
up_pressed()
down_pressed()
}
class InsidePanel {
buttons: dict()
floor_pressed()
open_door_pressed()
close_door_pressed()
emergency_pressed()
}
class Orchestrator {
elevators: list(Elevator)
floors: list(floors)
passengers: list(int)
+ outside_panel_button_pressed(floor, direction)
+ inside_panel_button_pressed(elevator_id, button)
dispatch_elevator: (direction, floor) : elevator
}
class User {
press_up()
press_down()
}
Elevator "1" *-- "1" InsidePanel
Elevator "1" *-- "1" OutsidePanel
@enduml
"""
# note right of Orchestrator : this is where all the logic happens, this is complex optimization problem
# @enduml
# """
plantuml_obj = plantuml.PlantUML(url='http://www.plantuml.com/plantuml/img/')
result = plantuml_obj.processes(uml_text)
return result
# Call the function and save or display the diagram
diagram_image = generate_uml_diagram()
display(Image(data=diagram_image))