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