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