001package co.codewizards.cloudstore.rest.client.request;
002
003import static java.util.Objects.*;
004
005import java.util.Date;
006
007import javax.ws.rs.client.WebTarget;
008import javax.ws.rs.core.Response;
009
010import co.codewizards.cloudstore.core.dto.DateTime;
011
012public class MakeSymlink extends VoidRequest {
013
014        protected final String repositoryName;
015        protected final String path;
016        protected final String target;
017        protected final Date lastModified;
018
019        public MakeSymlink(final String repositoryName, final String path, final String target, final Date lastModified) {
020                this.repositoryName = requireNonNull(repositoryName, "repositoryName");
021                this.path = requireNonNull(path, "path");
022                this.target = requireNonNull(target, "target");
023                this.lastModified = lastModified;
024        }
025
026        @Override
027        protected Response _execute() {
028                final WebTarget webTarget = createMakeSymlinkWebTarget();
029                return assignCredentials(webTarget.request()).post(null);
030        }
031
032        protected WebTarget createMakeSymlinkWebTarget() {
033                WebTarget webTarget = createWebTarget("_makeSymlink", urlEncode(repositoryName), encodePath(path))
034                                .queryParam("target", encodePath(target));
035
036                if (lastModified != null)
037                        webTarget = webTarget.queryParam("lastModified", new DateTime(lastModified));
038
039                return webTarget;
040        }
041}