@startuml

skinparam rectangle<<behavior>> {
	roundCorner 25
}
sprite $component jar:archimate/component

package Omnius.Axis.Ui.Desktop {
    package Omnius.Axis.Ui.Desktop.Presenters {
        rectangle UserProfileFinder <<$component>><<behavior>>
        rectangle UserProfileUploader <<$component>><<behavior>>
        rectangle FileFinder <<$component>><<behavior>>
        rectangle FileDowndoader <<$component>><<behavior>>
        rectangle FileUploader <<$component>><<behavior>>
    }
}

package Omnius.Axis.Interactors {
    rectangle FilePublisher <<$component>><<behavior>>
    rectangle FileSubscriber <<$component>><<behavior>>
    rectangle UserProfilePublisher <<$component>><<behavior>>
    rectangle UserProfileSubscriber <<$component>><<behavior>>
}

package Omnius.Axis.Daemon {
    rectangle AxisService.Client <<$component>><<behavior>>
    rectangle AxisService.Server <<$component>><<behavior>>
}

package Omnius.Axis.Daemon {
    rectangle AxisServiceImpl <<$component>><<behavior>>
}

package Ominus.Axis.Engines {
    package Ominus.Axis.Engines.Connectors {
        rectangle TcpConnector <<$component>><<behavior>>
    }
    package Ominus.Axis.Engines.Exchangers {
        rectangle ContentExchanger <<$component>><<behavior>>
        rectangle DeclaredMessageExchanger <<$component>><<behavior>>
    }
    package Ominus.Axis.Engines.Mediators {
        rectangle CkadMediator <<$component>><<behavior>>
    }
    package Ominus.Axis.Engines.Storages {
        rectangle PublishedFileStorage <<$component>><<behavior>>
        rectangle SubscribedFileStorage <<$component>><<behavior>>
        rectangle PublishedDeclaredMessage <<$component>><<behavior>>
        rectangle SubscribedDeclaredMessage <<$component>><<behavior>>
    }
}

UserProfileFinder -down-> UserProfileSubscriber
UserProfileUploader -down-> UserProfilePublisher
FileFinder -down-> UserProfileFinder
FileDowndoader -down-> FileSubscriber
FileUploader -down-> FilePublisher

FilePublisher -down-> AxisService.Client
FileSubscriber -down-> AxisService.Client
UserProfilePublisher -down-> AxisService.Client
UserProfileSubscriber -down-> AxisService.Client

AxisService.Client .down.> AxisService.Server : TCP

AxisService.Server -down-> AxisServiceImpl

AxisServiceImpl -down-> Ominus.Axis.Engines

CkadMediator -left-> TcpConnector

ContentExchanger -up-> TcpConnector
ContentExchanger -up-> CkadMediator
ContentExchanger -down-> PublishedFileStorage
ContentExchanger -down-> SubscribedFileStorage

DeclaredMessageExchanger -up-> TcpConnector
DeclaredMessageExchanger -up-> CkadMediator
DeclaredMessageExchanger -down-> PublishedDeclaredMessage
DeclaredMessageExchanger -down-> SubscribedDeclaredMessage

@enduml
