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}