001package co.codewizards.cloudstore.rest.server.service;
002
003import static java.util.Objects.*;
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.Produces;
010import javax.ws.rs.QueryParam;
011import javax.ws.rs.core.MediaType;
012
013import org.slf4j.Logger;
014import org.slf4j.LoggerFactory;
015
016import co.codewizards.cloudstore.core.dto.DateTime;
017import co.codewizards.cloudstore.core.repo.transport.RepoTransport;
018
019@Path("_makeSymlink/{repositoryName}")
020@Consumes(MediaType.APPLICATION_XML)
021@Produces(MediaType.APPLICATION_XML)
022public class MakeSymlinkService extends AbstractServiceWithRepoToRepoAuth
023{
024        private static final Logger logger = LoggerFactory.getLogger(MakeSymlinkService.class);
025
026        {
027                logger.debug("<init>: created new instance");
028        }
029
030        private @QueryParam("target") String target;
031
032        private @QueryParam("lastModified") DateTime lastModified;
033
034        @POST
035        public void makeSymlink()
036        {
037                makeSymlink("");
038        }
039
040        @POST
041        @Path("{path:.*}")
042        public void makeSymlink(@PathParam("path") String path)
043        {
044                requireNonNull(path, "path");
045                requireNonNull(target, "target");
046                try (final RepoTransport repoTransport = authenticateAndCreateLocalRepoTransport();) {
047                        path = repoTransport.unprefixPath(path);
048                        repoTransport.makeSymlink(path, target, lastModified == null ? null : lastModified.toDate());
049                }
050        }
051}