@startuml !pragma useIntermediatePackages false skinparam genericDisplay old hide empty members package "org.stianloader.picoresolve.repo" { interface MavenRepository { +getResource(path : String, executor : Executor) +getRepositoryId(): String +getPlaintextURL(): String +getUpdateIntervall(): long } class URIMavenRepository extends MavenRepository { -base: URI -id: String #getResource0(String: path): byte[] } interface RepositoryNegotiatior { +addRepository(MavenRepository: repository) : RepositoryNegotiatior +resolveMavenMeta(String: path, Executor: exeuctor):CompletableFuture>> +resolveStandard(String: path, Executor: executor):CompletableFuture> } class MavenLocalRepositoryNegotiator extends RepositoryNegotiatior { -mavenLocal: Path #write(byte[]: data, Path: to) } class RepositoryAttachedValue { -value: V +RepositoryAttachedValue(value: V, repo: MavenRepository) } } package "org.stianloader.picoresolve" { class MavenResolver { -depdenencyCache : ConcurrentMap -ignoreOptionalDependencies : boolean -ignoreTestDependencies : boolean +addRepositories(Collection: repos): MavenResolver +addRepositories(MavenRepository[]: repos): MavenResolver +addRepository(MavenRepository: repo): MavenResolver +download(GAV: gav, String: classifier, String: extension, Executor: executor)\n : CompletableFuture> +download(String: group, String: artifact, VersionRange: versions, String: classifier, String: extension, Executor: executor)\n : CompletableFuture>> +resolveAllChildren(DependencyLayer: layer, Executor: executor) : CompletableFuture +resolveChildLayer(DependencyLayer: layer, Executor: executor) : CompletableFuture } } RepositoryAttachedValue *--> "1\n-repository" MavenRepository MavenLocalRepositoryNegotiator "*\n-remoteRepositories" <--o MavenRepository MavenResolver *--> "1\n-repository" RepositoryNegotiatior @enduml