@startuml class SSSync { +void main(String[] args) } class SSSyncConfParser { +loadMainConfig(String mainConfigFile) +loadConnConfig(String connConfigFile) } class SSSyncConnectionsFactory { +setupConnections(ConfigConnectionsBean confConn) } class SSSyncTasksFactory { +setupTasks(ConnectionsHolder connections, ConfigRootBean confMain) } abstract class AbstractSyncTask { #String taskName #boolean dryRun +Boolean call() } interface "Callable" as Callable_Boolean_ { } Callable_Boolean_ <|.. AbstractSyncTask class ExecutorService { +invokeAll(Callable tasks...) } SSSync *-- "1" ConfigRootBean SSSync *-- "1" ConfigConnectionsBean SSSync *-- "1" ConnectionsHolder SSSync *-- "*" AbstractSyncTask SSSync "(1)" -up-> SSSyncConfParser SSSync "(2)" -up-> SSSyncConnectionsFactory SSSync "(3)" -up-> SSSyncTasksFactory SSSync "(4)" -> ExecutorService ConfigRootBean *-- "1" ConfigGlobalsBean ConfigRootBean *-- "*" ConfigTaskBean ConnectionsHolder *-- "*" LDAPConnectionWrapper ConnectionsHolder *-- "*" SQLConnectionWrapper @enduml