diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java index e0231567f268fe7c85eac08ef10c4ca9bd4b35f6..a5249671c586051b51343da8076dc7a66801bcbb 100644 --- a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java +++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/client/VOSpaceClient.java @@ -126,11 +126,11 @@ public class VOSpaceClient { call(request, BodyHandlers.ofInputStream(), 200, res -> null); } - public Node setNode(Node node) { + public Node setNode(Node node, boolean recursive) { String path = node.getUri().substring(("vos://" + authority).length()); - HttpRequest request = getRequest("/nodes" + urlEncodePath(path)) + HttpRequest request = getRequest("/nodes" + urlEncodePath(path) + "?recursive=" + recursive) .header("Accept", useJson ? "application/json" : "text/xml") .header("Content-Type", useJson ? "application/json" : "text/xml") .POST(HttpRequest.BodyPublishers.ofString(marshal(node))) diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/data/ShareRequest.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/data/ShareRequest.java index 360a3f17a1c97692707b82d249460b7a06bc8157..5870f9a249956b598de87a4f3c2dd70969497c99 100644 --- a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/data/ShareRequest.java +++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/data/ShareRequest.java @@ -9,6 +9,7 @@ public class ShareRequest { private List<String> groupWrite; private List<String> userRead; private List<String> userWrite; + private boolean recursive; public String getPath() { return path; @@ -49,4 +50,12 @@ public class ShareRequest { public void setUserWrite(List<String> userWrite) { this.userWrite = userWrite; } + + public boolean isRecursive() { + return recursive; + } + + public void setRecursive(boolean recursive) { + this.recursive = recursive; + } } diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/service/SharingService.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/service/SharingService.java index 8abb1a9fe16544b68b3d3ef22a54d8f714141cc3..855130376b7875ea141c38e5daa08945ece7584b 100644 --- a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/service/SharingService.java +++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/service/SharingService.java @@ -94,7 +94,7 @@ public class SharingService { getNodeProperty(node, NodeProperties.GROUP_READ_URI).setValue(groupRead); getNodeProperty(node, NodeProperties.GROUP_WRITE_URI).setValue(groupWrite); - vospaceClient.setNode(node); + vospaceClient.setNode(node, shareRequest.isRecursive()); } private Property getNodeProperty(Node node, String uri) { diff --git a/vospace-ui-backend/src/test/java/it/inaf/ia2/vospace/ui/service/SharingServiceTest.java b/vospace-ui-backend/src/test/java/it/inaf/ia2/vospace/ui/service/SharingServiceTest.java index 23fd9dab509309310643e6c6c23b71ad59140bf3..dbb67b8130a9e02a4cba70843c9a97a4e65617ff 100644 --- a/vospace-ui-backend/src/test/java/it/inaf/ia2/vospace/ui/service/SharingServiceTest.java +++ b/vospace-ui-backend/src/test/java/it/inaf/ia2/vospace/ui/service/SharingServiceTest.java @@ -22,6 +22,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; @@ -114,7 +115,7 @@ public class SharingServiceTest { assertTrue(groupWrite.contains("people.bianca\\.verdi")); assertTrue(groupWrite.contains("group2")); return true; - })); + }), anyBoolean()); } private List<RapUser> getRapUsers() { diff --git a/vospace-ui-frontend/src/components/modal/ShareModal.vue b/vospace-ui-frontend/src/components/modal/ShareModal.vue index 421986f7b28dd1b4ea14443c795002d6d598051f..dc2d29fa7a3fcb2264240b462141b563872d924a 100644 --- a/vospace-ui-frontend/src/components/modal/ShareModal.vue +++ b/vospace-ui-frontend/src/components/modal/ShareModal.vue @@ -6,6 +6,7 @@ <h5 class="mt-3">Write permissions</h5> <ShareInputGroup id="user-write" :values="userWrite" :options="people" label="Users" placeholder="Search user..." buttonText="Add user" /> <ShareInputGroup id="group-write" :values="groupWrite" :options="groups" label="Groups" placeholder="Search group..." buttonText="Add group" /> + <b-form-checkbox id="recursive" v-model="recursive" name="recursive">Apply also to children</b-form-checkbox> </b-modal> </template> @@ -34,7 +35,8 @@ export default { groupWrite: [], userWrite: [], people: [], - groups: [] + groups: [], + recursive: true } }, methods: { @@ -64,7 +66,8 @@ export default { groupRead: this.groupRead, groupWrite: this.groupWrite, userRead: this.userRead, - userWrite: this.userWrite + userWrite: this.userWrite, + recursive: this.recursive }).then(() => { // Reload current path this.$bvModal.hide('share-modal');