Loading .gitignore +1 −1 Original line number Diff line number Diff line Loading @@ -4,4 +4,4 @@ **/dist/* .env.local nbactions.xml .env.development.local vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java +17 −1 Original line number Diff line number Diff line Loading @@ -2,8 +2,8 @@ package it.inaf.ia2.vospace.ui.client; import com.fasterxml.jackson.databind.ObjectMapper; import it.inaf.ia2.aa.data.User; import it.inaf.ia2.vospace.ui.VOSpaceException; import it.inaf.ia2.vospace.ui.VOSpaceUiApplication; import it.inaf.ia2.vospace.ui.exception.VOSpaceException; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; Loading Loading @@ -40,6 +40,9 @@ public class VOSpaceClient { @Value("${use-json}") private boolean useJson; @Value("${vospace-authority}") private String authority; private static final ObjectMapper MAPPER = new ObjectMapper(); private final HttpClient httpClient; Loading Loading @@ -95,6 +98,19 @@ public class VOSpaceClient { return call(request, BodyHandlers.ofInputStream(), 200, res -> unmarshal(res, Transfer.class)).getProtocols(); } public Node createNode(Node node) { String path = node.getUri().substring(("vos://" + authority).length()); HttpRequest request = getRequest("/nodes" + path) .header("Accept", useJson ? "application/json" : "text/xml") .header("Content-Type", useJson ? "application/json" : "text/xml") .PUT(HttpRequest.BodyPublishers.ofString(marshal(node))) .build(); return call(request, BodyHandlers.ofInputStream(), 200, res -> unmarshal(res, Node.class)); } private <T, U> U call(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler, int expectedStatusCode, Function<T, U> responseHandler) { try { return httpClient.sendAsync(request, responseBodyHandler) Loading vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodesController.java +27 −0 Original line number Diff line number Diff line package it.inaf.ia2.vospace.ui.controller; import it.inaf.ia2.vospace.ui.client.VOSpaceClient; import it.inaf.ia2.vospace.ui.exception.BadRequestException; import it.inaf.ia2.vospace.ui.service.NodesService; import java.util.Map; import javax.servlet.http.HttpServletRequest; import net.ivoa.xml.vospace.v2.ContainerNode; import net.ivoa.xml.vospace.v2.Protocol; import net.ivoa.xml.vospace.v2.Transfer; import org.springframework.beans.factory.annotation.Autowired; Loading @@ -12,6 +15,8 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController Loading Loading @@ -64,6 +69,28 @@ public class NodesController { return new ResponseEntity<>(headers, HttpStatus.SEE_OTHER); } @PostMapping(value = "/folder") public void newFolder(@RequestBody Map<String, String> params) { String parentPath = getRequiredParam(params, "parentPath"); if (!parentPath.startsWith("/")) { parentPath = "/" + parentPath; } String name = getRequiredParam(params, "name"); ContainerNode node = new ContainerNode(); node.setUri("vos://" + authority + parentPath + "/" + name); client.createNode(node); } private String getRequiredParam(Map<String, String> params, String key) { if (!params.containsKey(key)) { throw new BadRequestException("Missing mandatory parameter " + key); } return params.get(key); } /** * Slash is a special character in defining REST endpoints and trying to * define a PathVariable containing slashes doesn't work, so the endpoint Loading vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/exception/BadRequestException.java 0 → 100644 +12 −0 Original line number Diff line number Diff line package it.inaf.ia2.vospace.ui.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @ResponseStatus(value = HttpStatus.BAD_REQUEST) public class BadRequestException extends VOSpaceException { public BadRequestException(String message) { super(message); } } vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/exception/VOSpaceException.java +1 −1 Original line number Diff line number Diff line package it.inaf.ia2.vospace.ui; package it.inaf.ia2.vospace.ui.exception; public class VOSpaceException extends RuntimeException { Loading Loading
.gitignore +1 −1 Original line number Diff line number Diff line Loading @@ -4,4 +4,4 @@ **/dist/* .env.local nbactions.xml .env.development.local
vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java +17 −1 Original line number Diff line number Diff line Loading @@ -2,8 +2,8 @@ package it.inaf.ia2.vospace.ui.client; import com.fasterxml.jackson.databind.ObjectMapper; import it.inaf.ia2.aa.data.User; import it.inaf.ia2.vospace.ui.VOSpaceException; import it.inaf.ia2.vospace.ui.VOSpaceUiApplication; import it.inaf.ia2.vospace.ui.exception.VOSpaceException; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; Loading Loading @@ -40,6 +40,9 @@ public class VOSpaceClient { @Value("${use-json}") private boolean useJson; @Value("${vospace-authority}") private String authority; private static final ObjectMapper MAPPER = new ObjectMapper(); private final HttpClient httpClient; Loading Loading @@ -95,6 +98,19 @@ public class VOSpaceClient { return call(request, BodyHandlers.ofInputStream(), 200, res -> unmarshal(res, Transfer.class)).getProtocols(); } public Node createNode(Node node) { String path = node.getUri().substring(("vos://" + authority).length()); HttpRequest request = getRequest("/nodes" + path) .header("Accept", useJson ? "application/json" : "text/xml") .header("Content-Type", useJson ? "application/json" : "text/xml") .PUT(HttpRequest.BodyPublishers.ofString(marshal(node))) .build(); return call(request, BodyHandlers.ofInputStream(), 200, res -> unmarshal(res, Node.class)); } private <T, U> U call(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler, int expectedStatusCode, Function<T, U> responseHandler) { try { return httpClient.sendAsync(request, responseBodyHandler) Loading
vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodesController.java +27 −0 Original line number Diff line number Diff line package it.inaf.ia2.vospace.ui.controller; import it.inaf.ia2.vospace.ui.client.VOSpaceClient; import it.inaf.ia2.vospace.ui.exception.BadRequestException; import it.inaf.ia2.vospace.ui.service.NodesService; import java.util.Map; import javax.servlet.http.HttpServletRequest; import net.ivoa.xml.vospace.v2.ContainerNode; import net.ivoa.xml.vospace.v2.Protocol; import net.ivoa.xml.vospace.v2.Transfer; import org.springframework.beans.factory.annotation.Autowired; Loading @@ -12,6 +15,8 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController Loading Loading @@ -64,6 +69,28 @@ public class NodesController { return new ResponseEntity<>(headers, HttpStatus.SEE_OTHER); } @PostMapping(value = "/folder") public void newFolder(@RequestBody Map<String, String> params) { String parentPath = getRequiredParam(params, "parentPath"); if (!parentPath.startsWith("/")) { parentPath = "/" + parentPath; } String name = getRequiredParam(params, "name"); ContainerNode node = new ContainerNode(); node.setUri("vos://" + authority + parentPath + "/" + name); client.createNode(node); } private String getRequiredParam(Map<String, String> params, String key) { if (!params.containsKey(key)) { throw new BadRequestException("Missing mandatory parameter " + key); } return params.get(key); } /** * Slash is a special character in defining REST endpoints and trying to * define a PathVariable containing slashes doesn't work, so the endpoint Loading
vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/exception/BadRequestException.java 0 → 100644 +12 −0 Original line number Diff line number Diff line package it.inaf.ia2.vospace.ui.exception; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @ResponseStatus(value = HttpStatus.BAD_REQUEST) public class BadRequestException extends VOSpaceException { public BadRequestException(String message) { super(message); } }
vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/exception/VOSpaceException.java +1 −1 Original line number Diff line number Diff line package it.inaf.ia2.vospace.ui; package it.inaf.ia2.vospace.ui.exception; public class VOSpaceException extends RuntimeException { Loading