@startuml images/morpho-save-datapackage-sequence.png participant ": SavePackageCommand" as save_package_command <> participant ": DataStoreController" as data_store_controller <> participant "dataPackage: DataPackage" as data_package <> participant "d1Object: D1Object" as d1_object <> participant ": DataStore" as data_store <> -> save_package_command: dataPackage, []dataStores activate save_package_command save_package_command -> data_store_controller: save(dataPackage, dataStores) activate data_store_controller data_store_controller -> data_package: identifiers() activate data_package data_store_controller <- data_package: the set of identifiers loop iterate the data store arrary loop iterate the identifier set data_store_controller -> data_package: get(identifier) data_store_controller <- data_package: d1Object data_store_controller -> d1_object: get(identifer) activate d1_object data_store_controller <- d1_object: OutputStream object data_store_controller -> d1_object: getSystemMetdata(identifier) data_store_controller <- d1_object: SystemMetadata object deactivate d1_object data_store_controller ->data_store: create(identifier, inputStream, systemMeta)/update() end data_store_controller -> data_package: serialize() data_store_controller <- data_package: the string representation of the ORE document data_store_controller -> data_package: getSystemMetadata() data_store_controller <- data_package: the system metadata object of the dataPackage deactivate data_package data_store_controller -> data_store: create(oreId, oreDocumentInput, oreSystemMeta)/update() deactivate data_store end deactivate data_store_controller deactivate save_package_command @enduml