Skip to content

Commit

Permalink
GH-458 Simplify 'maven' domain
Browse files Browse the repository at this point in the history
  • Loading branch information
dzikoysk committed Jun 26, 2021
1 parent 3434d97 commit 21896b9
Show file tree
Hide file tree
Showing 26 changed files with 128 additions and 195 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,7 @@
*/
package org.panda_lang.reposilite.auth.api

import java.io.Serializable

data class AuthenticationResponse internal constructor(
val path: String,
val permissions: Collection<String>
) : Serializable
)
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,11 @@ package org.panda_lang.reposilite.failure.api

import io.javalin.http.HttpCode
import org.panda_lang.utilities.commons.function.Result
import java.io.Serializable

data class ErrorResponse(
val status: Int,
val message: String
) : Serializable {
) {

constructor(code: HttpCode, message: String) : this(code.status, message)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,16 @@ import net.dzikoysk.dynamiclogger.Logger
import org.panda_lang.reposilite.failure.api.ErrorResponse
import org.panda_lang.reposilite.failure.api.errorResponse
import org.panda_lang.reposilite.maven.api.DeployRequest
import org.panda_lang.reposilite.maven.api.FileDetailsResponse
import org.panda_lang.reposilite.maven.api.FileDetails
import org.panda_lang.utilities.commons.function.Result

internal class DeployService(
internal class DeploymentService(
private val journalist: Journalist,
private val repositoryService: RepositoryService,
private val metadataService: MetadataService
) : Journalist {

fun deployArtifact(deployRequest: DeployRequest): Result<FileDetailsResponse, ErrorResponse> {
fun deployArtifact(deployRequest: DeployRequest): Result<FileDetails, ErrorResponse> {
val repository = repositoryService.getRepository(deployRequest.repository) ?: return errorResponse(HttpCode.NOT_FOUND, "Repository not found")

if (!repository.isDeployEnabled) {
Expand All @@ -46,7 +46,7 @@ internal class DeployService(
metadataService.clearMetadata(metadataFile)

return try {
val result: Result<FileDetailsResponse, ErrorResponse> =
val result: Result<FileDetails, ErrorResponse> =
if (path.fileName.toString().contains(METADATA_FILE_NAME)) {
metadataService.getMetadata(repository, metadataFile).map { it.key }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import org.panda_lang.reposilite.failure.api.ErrorResponse
import org.panda_lang.reposilite.failure.api.errorResponse
import org.panda_lang.reposilite.maven.api.LookupRequest
import org.panda_lang.reposilite.maven.api.LookupResponse
import org.panda_lang.reposilite.maven.api.Repository
import org.panda_lang.utilities.commons.function.Result

internal class LookupService(
Expand All @@ -37,6 +38,9 @@ internal class LookupService(
.map { LookupResponse(it.first, it.second) }
}

fun findAllRepositories(): Collection<Repository> =
repositoryService.getRepositories()

/*
fun exists(context: ReposiliteContext): Boolean {
val uri: String = context.uri
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,27 +20,27 @@ import net.dzikoysk.dynamiclogger.Journalist
import net.dzikoysk.dynamiclogger.Logger
import org.panda_lang.reposilite.failure.api.ErrorResponse
import org.panda_lang.reposilite.maven.api.DeployRequest
import org.panda_lang.reposilite.maven.api.FileDetailsResponse
import org.panda_lang.reposilite.maven.api.FileDetails
import org.panda_lang.reposilite.maven.api.LookupRequest
import org.panda_lang.reposilite.maven.api.LookupResponse
import org.panda_lang.reposilite.maven.api.Repository
import org.panda_lang.utilities.commons.function.Result

class MavenFacade internal constructor(
private val journalist: Journalist,
private val repositoryService: RepositoryService,
private val metadataService: MetadataService,
private val lookupService: LookupService,
private val deployService: DeployService,
private val deploymentService: DeploymentService,
) : Journalist {

fun lookup(lookupRequest: LookupRequest): Result<LookupResponse, ErrorResponse> =
lookupService.lookup(lookupRequest)

fun deployArtifact(deployRequest: DeployRequest): Result<FileDetailsResponse, ErrorResponse> =
deployService.deployArtifact(deployRequest)
fun deployArtifact(deployRequest: DeployRequest): Result<FileDetails, ErrorResponse> =
deploymentService.deployArtifact(deployRequest)

fun getRepositories(): Collection<Repository> =
repositoryService.getRepositories()
lookupService.findAllRepositories()

override fun getLogger(): Logger =
journalist.logger
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ import io.javalin.http.HttpCode
import org.panda_lang.reposilite.failure.FailureFacade
import org.panda_lang.reposilite.failure.api.ErrorResponse
import org.panda_lang.reposilite.failure.api.errorResponse
import org.panda_lang.reposilite.maven.api.FileDetailsResponse
import org.panda_lang.reposilite.maven.api.FileDetails
import org.panda_lang.reposilite.maven.api.Repository
import org.panda_lang.reposilite.shared.FilesUtils
import org.panda_lang.reposilite.web.projectToError
import org.panda_lang.utilities.commons.StringUtils
Expand All @@ -37,7 +38,7 @@ import java.util.function.Supplier
// TOFIX: Simplify this trash class
internal class MetadataService(private val failureFacade: FailureFacade) {

private val metadataCache: MutableMap<Path, Pair<FileDetailsResponse, String>> = ConcurrentHashMap()
private val metadataCache: MutableMap<Path, Pair<FileDetails, String>> = ConcurrentHashMap()

companion object {
private val XML_MAPPER: Lazy<XmlMapper> = Lazy(Supplier {
Expand All @@ -48,12 +49,12 @@ internal class MetadataService(private val failureFacade: FailureFacade) {
})
}

fun getMetadata(repository: Repository, requested: Path): Result<Pair<FileDetailsResponse, String>, ErrorResponse> {
fun getMetadata(repository: Repository, requested: Path): Result<Pair<FileDetails, String>, ErrorResponse> {
if (requested.fileName.toString() != "maven-metadata.xml") {
return errorResponse(HttpCode.BAD_REQUEST, "Bad request")
}

val cachedContent: Pair<FileDetailsResponse, String>? = metadataCache[requested]
val cachedContent: Pair<FileDetails, String>? = metadataCache[requested]

if (cachedContent != null) {
return Result.ok(cachedContent)
Expand Down Expand Up @@ -85,7 +86,7 @@ internal class MetadataService(private val failureFacade: FailureFacade) {
groupId: String,
artifactDirectory: Path,
versions: List<Path>
): Result<Pair<FileDetailsResponse, String>, ErrorResponse> {
): Result<Pair<FileDetails, String>, ErrorResponse> {
val latest = versions.first()

val versioning = Versioning(
Expand All @@ -106,7 +107,7 @@ internal class MetadataService(private val failureFacade: FailureFacade) {
metadataFile: Path,
groupId: String,
versionDirectory: Path
): Result<Pair<FileDetailsResponse, String>, ErrorResponse> {
): Result<Pair<FileDetails, String>, ErrorResponse> {
val artifactDirectory = versionDirectory.parent
val builds: Result<Array<Path>, ErrorResponse> = MetadataUtils.toSortedBuilds(repository, versionDirectory)

Expand Down Expand Up @@ -157,19 +158,19 @@ internal class MetadataService(private val failureFacade: FailureFacade) {
return toMetadataFile(repository, metadataFile, Metadata(groupId, name, versionDirectory.fileName.toString(), versioning))
}

private fun toMetadataFile(repository: Repository, metadataFile: Path, metadata: Metadata): Result<Pair<FileDetailsResponse, String>, ErrorResponse> {
private fun toMetadataFile(repository: Repository, metadataFile: Path, metadata: Metadata): Result<Pair<FileDetails, String>, ErrorResponse> {
return try {
val serializedMetadata: String = XML_MAPPER.get().writeValueAsString(metadata)
val bytes = serializedMetadata.toByteArray(StandardCharsets.UTF_8)
val result: Result<FileDetailsResponse, ErrorResponse> = repository.putFile(metadataFile, bytes)
val result: Result<FileDetails, ErrorResponse> = repository.putFile(metadataFile, bytes)

if (result.isOk) {
FilesUtils.writeFileChecksums(repository, metadataFile, bytes)
metadataCache[metadataFile] = Pair<FileDetailsResponse, String>(result.get(), serializedMetadata)
metadataCache[metadataFile] = Pair<FileDetails, String>(result.get(), serializedMetadata)
}

result.map { fileDetailsResponse: FileDetailsResponse ->
Pair<FileDetailsResponse, String>(
result.map { fileDetailsResponse: FileDetails ->
Pair<FileDetails, String>(
fileDetailsResponse,
serializedMetadata
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
package org.panda_lang.reposilite.maven

import org.panda_lang.reposilite.failure.api.ErrorResponse
import org.panda_lang.reposilite.maven.api.Repository
import org.panda_lang.reposilite.shared.FilesUtils.getExtension
import org.panda_lang.utilities.commons.StringUtils
import org.panda_lang.utilities.commons.function.Result
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ import org.panda_lang.reposilite.ReposiliteException
import org.panda_lang.reposilite.failure.FailureFacade
import org.panda_lang.reposilite.failure.api.ErrorResponse
import org.panda_lang.reposilite.failure.api.errorResponse
import org.panda_lang.reposilite.maven.api.FileDetailsResponse
import org.panda_lang.reposilite.maven.api.FileDetails
import org.panda_lang.reposilite.maven.api.LookupResponse
import org.panda_lang.reposilite.maven.api.Repository
import org.panda_lang.reposilite.maven.api.RepositoryVisibility.PRIVATE
import org.panda_lang.reposilite.storage.StorageProvider
import org.panda_lang.reposilite.web.ReposiliteContext
Expand Down Expand Up @@ -122,7 +123,7 @@ internal class ProxyService(

val contentLength = Option.of(remoteResponse.headers.contentLength).orElseGet(0L)
val path = remoteUri.split("/").toTypedArray()
val fileDetails = FileDetailsResponse(FileDetailsResponse.FILE, path.last(), "", remoteResponse.contentType, contentLength)
val fileDetails = FileDetails(FileDetails.FILE, path.last(), "", remoteResponse.contentType, contentLength)
val lookupResponse = LookupResponse(fileDetails, remoteResponse.content)

Result.ok(lookupResponse)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package org.panda_lang.reposilite.maven

import org.panda_lang.reposilite.config.Configuration.RepositoryConfiguration
import org.panda_lang.reposilite.maven.api.Repository
import org.panda_lang.reposilite.maven.api.RepositoryVisibility
import org.panda_lang.reposilite.storage.StorageProviderFactory

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ package org.panda_lang.reposilite.maven

import net.dzikoysk.dynamiclogger.Journalist
import net.dzikoysk.dynamiclogger.Logger
import org.panda_lang.reposilite.config.Configuration.RepositoryConfiguration
import org.panda_lang.reposilite.maven.api.Repository
import org.panda_lang.reposilite.storage.StorageProviderFactory

internal class RepositoryService(
private val journalist: Journalist,
Expand All @@ -32,4 +35,20 @@ internal class RepositoryService(
override fun getLogger(): Logger =
journalist.logger

}

internal object RepositoryServiceFactory {

fun createRepositoryService(journalist: Journalist, repositoriesConfigurations: Map<String, RepositoryConfiguration>): RepositoryService {
val storageProviderFactory = StorageProviderFactory()
val repositoryFactory = RepositoryFactory(storageProviderFactory)
val repositories: MutableMap<String, Repository> = LinkedHashMap(repositoriesConfigurations.size)

for ((repositoryName, repositoryConfiguration) in repositoriesConfigurations) {
repositories[repositoryName] = repositoryFactory.createRepository(repositoryName, repositoryConfiguration)
}

return RepositoryService(journalist, repositories)
}

}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,21 @@
package org.panda_lang.reposilite.maven.api

import org.panda_lang.reposilite.shared.FilesUtils
import java.io.Serializable
import java.time.ZoneId
import java.time.format.DateTimeFormatter
import java.util.Locale

data class FileDetailsResponse(
data class FileListResponse(
val files: List<FileDetails>
)

data class FileDetails(
val type: String,
val name: String,
val date: String,
val contentType: String,
val contentLength: Long
) : Serializable, Comparable<FileDetailsResponse> {
) : Comparable<FileDetails> {

companion object {
const val FILE = "file"
Expand All @@ -38,7 +41,7 @@ data class FileDetailsResponse(
.withZone(ZoneId.systemDefault())
}

override fun compareTo(other: FileDetailsResponse): Int {
override fun compareTo(other: FileDetails): Int {
var result = type.compareTo(other.type)

if (result == 0) {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,16 @@
package org.panda_lang.reposilite.maven.api

import org.panda_lang.reposilite.token.api.AccessToken
import java.io.InputStream

data class LookupRequest(
val repository: String,
val gav: String,
val by: String,
val accessToken: AccessToken?
)

class LookupResponse(
val fileDetails: FileDetails,
val data: InputStream
)

This file was deleted.

Loading

0 comments on commit 21896b9

Please sign in to comment.