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}