package co.codewizards.cloudstore.rest.server.service; import java.net.URL; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import co.codewizards.cloudstore.core.dto.RepositoryDto; import co.codewizards.cloudstore.core.repo.local.LocalRepoRegistryImpl; import co.codewizards.cloudstore.core.repo.transport.RepoTransport; import co.codewizards.cloudstore.core.repo.transport.RepoTransportFactory; import co.codewizards.cloudstore.core.repo.transport.RepoTransportFactoryRegistry; import co.codewizards.cloudstore.core.util.AssertUtil; import co.codewizards.cloudstore.core.util.UrlUtil; @Path("_requestRepoConnection/{repositoryName}") public class RequestRepoConnectionService { private static final Logger logger = LoggerFactory.getLogger(RequestRepoConnectionService.class); { logger.debug("<init>: created new instance"); } private @PathParam("repositoryName") String repositoryName; @POST @Consumes(MediaType.APPLICATION_XML) public void requestConnection(final RepositoryDto clientRepositoryDto) { requestConnection("", clientRepositoryDto); } @POST @Path("{pathPrefix:.*}") @Consumes(MediaType.APPLICATION_XML) public void requestConnection(@PathParam("pathPrefix") final String pathPrefix, final RepositoryDto clientRepositoryDto) { AssertUtil.assertNotNull(pathPrefix, "pathPrefix"); AssertUtil.assertNotNull(clientRepositoryDto, "repositoryDto"); URL localRootURL = LocalRepoRegistryImpl.getInstance().getLocalRootURLForRepositoryNameOrFail(repositoryName); localRootURL = UrlUtil.appendNonEncodedPath(localRootURL, pathPrefix); final RepoTransportFactory repoTransportFactory = RepoTransportFactoryRegistry.getInstance().getRepoTransportFactory(localRootURL); try (final RepoTransport repoTransport = repoTransportFactory.createRepoTransport(localRootURL, clientRepositoryDto.getRepositoryId());) { requestConnection(repoTransport, pathPrefix, clientRepositoryDto); } } protected void requestConnection(final RepoTransport repoTransport, final String pathPrefix, final RepositoryDto clientRepositoryDto) { repoTransport.requestRepoConnection(clientRepositoryDto.getPublicKey()); } }