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