'-------------------------------------------------------------------------------
' Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
'
' SPDX-License-Identifier: BSD-3-Clause
'
'-------------------------------------------------------------------------------

@startuml

 class fw_store
class bank_tracker
class metadata_manager
class metadata_serializer
class installer_index
class volume_index
class installer
class volume

class bank_tracker {
	+accept()
	+copy_accept()
	+set_no_content()
	+set_holds_content()
	+set_holds_acceped_content()
	+is_content()
	+is_accepted()
	+is_all_accepted()
}

class fw_store {
	+synchronize()
	+begin_install()
	+cancel_install()
	+finalize_install()
	+select_installer()
	+write_image()
	+commit_image()
	+notify_accepted()
	+is_accepted()
	+is_trial()
	+commit_to_update()
	+revert_to_previous()
	+export()
}

class metadata_manager {
	+check_and_repair()
	+update()
	+get_active_indices()
	+preload_bank_tracker()
}

class metadata_serializer {
	+serialize()
	+size()
	+max_size()
	+deserialize_bank_info()
	+deserialize_active_indices()
}

class installer_index {
	+register()
	+find()
	+get()
	+get_location_ids()
}

class installer {
	+begin()
	+finalize()
	+abort()
	+open()
	+commit()
	+write()
	+enumerate()
}

class volume_index {
	+add()
	+find()
}

class volume {
	+open()
	+close()
	+seek()
	+size()
	+read()
	+write()
	+erase()
	+get_storage_ids()
}

fw_store -> metadata_manager
fw_store -> bank_tracker
fw_store -> installer_index
fw_store -> volume_index
metadata_manager -> metadata_serializer
installer_index -> "*" installer
volume_index -> "*" volume
metadata_manager -> "2" volume
installer ..> volume

@enduml
