001package co.codewizards.cloudstore.rest.server.service; 002 003import java.net.URL; 004 005import javax.ws.rs.Consumes; 006import javax.ws.rs.POST; 007import javax.ws.rs.Path; 008import javax.ws.rs.PathParam; 009import javax.ws.rs.core.MediaType; 010 011import org.slf4j.Logger; 012import org.slf4j.LoggerFactory; 013 014import co.codewizards.cloudstore.core.dto.RepositoryDto; 015import co.codewizards.cloudstore.core.repo.local.LocalRepoRegistryImpl; 016import co.codewizards.cloudstore.core.repo.transport.RepoTransport; 017import co.codewizards.cloudstore.core.repo.transport.RepoTransportFactory; 018import co.codewizards.cloudstore.core.repo.transport.RepoTransportFactoryRegistry; 019import co.codewizards.cloudstore.core.util.AssertUtil; 020import co.codewizards.cloudstore.core.util.UrlUtil; 021 022@Path("_requestRepoConnection/{repositoryName}") 023public class RequestRepoConnectionService 024{ 025 private static final Logger logger = LoggerFactory.getLogger(RequestRepoConnectionService.class); 026 027 { 028 logger.debug("<init>: created new instance"); 029 } 030 031 private @PathParam("repositoryName") String repositoryName; 032 033 @POST 034 @Consumes(MediaType.APPLICATION_XML) 035 public void requestConnection(final RepositoryDto clientRepositoryDto) 036 { 037 requestConnection("", clientRepositoryDto); 038 } 039 040 @POST 041 @Path("{pathPrefix:.*}") 042 @Consumes(MediaType.APPLICATION_XML) 043 public void requestConnection(@PathParam("pathPrefix") final String pathPrefix, final RepositoryDto clientRepositoryDto) 044 { 045 AssertUtil.assertNotNull(pathPrefix, "pathPrefix"); 046 AssertUtil.assertNotNull(clientRepositoryDto, "repositoryDto"); 047 048 URL localRootURL = LocalRepoRegistryImpl.getInstance().getLocalRootURLForRepositoryNameOrFail(repositoryName); 049 localRootURL = UrlUtil.appendNonEncodedPath(localRootURL, pathPrefix); 050 051 final RepoTransportFactory repoTransportFactory = RepoTransportFactoryRegistry.getInstance().getRepoTransportFactory(localRootURL); 052 try (final RepoTransport repoTransport = repoTransportFactory.createRepoTransport(localRootURL, clientRepositoryDto.getRepositoryId());) { 053 requestConnection(repoTransport, pathPrefix, clientRepositoryDto); 054 } 055 } 056 057 protected void requestConnection(final RepoTransport repoTransport, final String pathPrefix, final RepositoryDto clientRepositoryDto) { 058 repoTransport.requestRepoConnection(clientRepositoryDto.getPublicKey()); 059 } 060}