Skip to content

Commit 5f6fcf2

Browse files
Merge pull request #5607 from SandhraSokhal/PLFM-9543
PLFM-9543 new API to get thread, submission and permission
2 parents ec98be3 + d6a2350 commit 5f6fcf2

25 files changed

Lines changed: 288 additions & 11 deletions

File tree

client/synapseJavaClient/src/main/java/org/sagebionetworks/client/SynapseClient.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@
124124
import org.sagebionetworks.repo.model.dataaccess.AccessApprovalSearchRequest;
125125
import org.sagebionetworks.repo.model.dataaccess.AccessApprovalSearchResponse;
126126
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementConversionRequest;
127+
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementPermissions;
127128
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementSearchRequest;
128129
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementSearchResponse;
129130
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementStatus;
@@ -2959,6 +2960,21 @@ void updateVerificationState(long verificationId,
29592960
*/
29602961
DiscussionThreadBundle getThread(String threadId) throws SynapseException;
29612962

2963+
/**
2964+
* Get the discussion thread for a given submission.
2965+
*/
2966+
DiscussionThreadBundle getThreadForSubmission(String submissionId) throws SynapseException;
2967+
2968+
/**
2969+
* Get the submission associated with a given thread.
2970+
*/
2971+
org.sagebionetworks.repo.model.dataaccess.Submission getSubmissionForThread(String threadId) throws SynapseException;
2972+
2973+
/**
2974+
* Get the caller's permissions for a given access requirement.
2975+
*/
2976+
AccessRequirementPermissions getAccessRequirementPermissions(String requirementId) throws SynapseException;
2977+
29622978
/**
29632979
* Get threads for a given forum
29642980
*

client/synapseJavaClient/src/main/java/org/sagebionetworks/client/SynapseClientImpl.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
import org.sagebionetworks.repo.model.dataaccess.AccessApprovalSearchRequest;
154154
import org.sagebionetworks.repo.model.dataaccess.AccessApprovalSearchResponse;
155155
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementConversionRequest;
156+
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementPermissions;
156157
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementSearchRequest;
157158
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementSearchResponse;
158159
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementStatus;
@@ -280,7 +281,6 @@
280281
import org.sagebionetworks.repo.model.grid.GridQueryJobResponse;
281282
import org.sagebionetworks.repo.model.grid.GridUpdateJobRequest;
282283
import org.sagebionetworks.repo.model.grid.GridUpdateJobResponse;
283-
import org.sagebionetworks.repo.model.grid.query.QueryRequest;
284284
import org.sagebionetworks.repo.model.limits.ProjectStorageUsage;
285285
import org.sagebionetworks.repo.model.message.MessageBundle;
286286
import org.sagebionetworks.repo.model.message.MessageRecipientSet;
@@ -5225,6 +5225,24 @@ public DiscussionThreadBundle getThread(String threadId) throws SynapseException
52255225
return getJSONEntity(getRepoEndpoint(), url, DiscussionThreadBundle.class);
52265226
}
52275227

5228+
@Override
5229+
public DiscussionThreadBundle getThreadForSubmission(String submissionId) throws SynapseException {
5230+
ValidateArgument.required(submissionId, "submissionId");
5231+
return getJSONEntity(getRepoEndpoint(), THREAD+"/submission/"+submissionId, DiscussionThreadBundle.class);
5232+
}
5233+
5234+
@Override
5235+
public org.sagebionetworks.repo.model.dataaccess.Submission getSubmissionForThread(String threadId) throws SynapseException {
5236+
ValidateArgument.required(threadId, "threadId");
5237+
return getJSONEntity(getRepoEndpoint(), "/dataAccessSubmission/thread/"+threadId, org.sagebionetworks.repo.model.dataaccess.Submission.class);
5238+
}
5239+
5240+
@Override
5241+
public AccessRequirementPermissions getAccessRequirementPermissions(String requirementId) throws SynapseException {
5242+
ValidateArgument.required(requirementId, "requirementId");
5243+
return getJSONEntity(getRepoEndpoint(), ACCESS_REQUIREMENT+"/"+requirementId+"/permissions", AccessRequirementPermissions.class);
5244+
}
5245+
52285246
@Override
52295247
public PaginatedResults<DiscussionThreadBundle> getThreadsForForum(
52305248
String forumId, Long limit, Long offset, DiscussionThreadOrder order,

integration-test/src/test/java/org/sagebionetworks/ITDataAccessTest.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import org.sagebionetworks.repo.model.dataaccess.AccessApprovalSearchSort;
5959
import org.sagebionetworks.repo.model.dataaccess.AccessApprovalSortField;
6060
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementConversionRequest;
61+
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementPermissions;
6162
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementSearchRequest;
6263
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementSearchResponse;
6364
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementStatus;
@@ -1187,7 +1188,7 @@ public void testForumAndThreadCreatedForManagedAR() throws Exception {
11871188
assertNotNull(thread.getForumId());
11881189
assertEquals(forum.getId(), thread.getForumId());
11891190

1190-
//create a reply
1191+
//call under test. Create a reply
11911192
CreateDiscussionReply replyToCreate = new CreateDiscussionReply();
11921193
replyToCreate.setThreadId(thread.getId());
11931194
String message = "This is test message";
@@ -1197,5 +1198,21 @@ public void testForumAndThreadCreatedForManagedAR() throws Exception {
11971198
assertEquals(thread.getId(), replyBundle.getThreadId());
11981199
assertEquals(managedAR.getId().toString(), replyBundle.getObjectId());
11991200
assertEquals(ForumObjectType.ACCESS_REQUIREMENT, replyBundle.getObjectType());
1201+
1202+
//call under test. Get thread for submission
1203+
DiscussionThreadBundle threadForSubmission = adminSynapse.getThreadForSubmission(submissionId);
1204+
assertNotNull(threadForSubmission);
1205+
assertEquals(thread.getId(), threadForSubmission.getId());
1206+
assertEquals("submissionId:" + submissionId, threadForSubmission.getTitle());
1207+
1208+
//call under test. Get submission for thread
1209+
org.sagebionetworks.repo.model.dataaccess.Submission submissionForThread = adminSynapse.getSubmissionForThread(thread.getId());
1210+
assertNotNull(submissionForThread);
1211+
assertEquals(submissionId, submissionForThread.getId());
1212+
1213+
//call under test. Get permission on AR
1214+
AccessRequirementPermissions permissions = adminSynapse.getAccessRequirementPermissions(managedAR.getId().toString());
1215+
assertNotNull(permissions);
1216+
assertTrue(permissions.getCanReviewSubmissions());
12001217
}
12011218
}

lib/jdomodels/src/main/java/org/sagebionetworks/repo/model/dbo/dao/discussion/DBODiscussionReplyDAOImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public DiscussionReplyBundle mapRow(ResultSet rs, int rowNum)
6363
String objectType = rs.getString(COL_FORUM_OBJECT_TYPE);
6464
dto.setObjectType(ForumObjectType.valueOf(objectType));
6565
dto.setObjectId(rs.getString(COL_FORUM_OBJECT_ID));
66-
if ("ENTITY".equals(objectType)) {
66+
if (ForumObjectType.ENTITY == ForumObjectType.valueOf(objectType)) {
6767
dto.setProjectId(KeyFactory.keyToString(rs.getLong(COL_FORUM_OBJECT_ID)));
6868
}
6969
dto.setMessageKey(rs.getString(COL_DISCUSSION_REPLY_MESSAGE_KEY));

lib/jdomodels/src/main/java/org/sagebionetworks/repo/model/dbo/dao/discussion/DBODiscussionThreadDAOImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public DiscussionThreadBundle mapRow(ResultSet rs, int rowNum)
9191
String objectType = rs.getString(COL_FORUM_OBJECT_TYPE);
9292
dto.setObjectId(objectId);
9393
dto.setObjectType(ForumObjectType.valueOf(objectType));
94-
if ("ENTITY".equals(objectType)) {
94+
if (ForumObjectType.ENTITY == ForumObjectType.valueOf(objectType)) {
9595
dto.setProjectId(KeyFactory.keyToString(Long.valueOf(objectId)));
9696
}
9797
Blob titleBlob = rs.getBlob(COL_DISCUSSION_THREAD_TITLE);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"description": "The permissions a user has on an access requirement.",
3+
"properties": {
4+
"canReviewSubmissions": {
5+
"type": "boolean",
6+
"description": "Can the user review submissions for this access requirement."
7+
}
8+
}
9+
}

services/repository-managers/src/main/java/org/sagebionetworks/repo/manager/dataaccess/AccessRequirementManager.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.sagebionetworks.repo.model.AccessControlList;
88
import org.sagebionetworks.repo.model.AccessRequirement;
99
import org.sagebionetworks.repo.model.ConflictingUpdateException;
10+
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementPermissions;
1011
import org.sagebionetworks.repo.model.DatastoreException;
1112
import org.sagebionetworks.repo.model.InvalidModelException;
1213
import org.sagebionetworks.repo.model.LockAccessRequirement;
@@ -150,4 +151,13 @@ RestrictableObjectDescriptorResponse getSubjects(String accessRequirementId,
150151
*/
151152
void setDynamicallyBoundAccessRequirementsForSubject(RestrictableObjectDescriptor subject, Set<Long> newArIds);
152153

154+
/**
155+
* Get the caller's permissions for the given access requirement.
156+
*
157+
* @param user
158+
* @param requirementId
159+
* @return
160+
*/
161+
AccessRequirementPermissions getPermissions(UserInfo user, String requirementId);
162+
153163
}

services/repository-managers/src/main/java/org/sagebionetworks/repo/manager/dataaccess/AccessRequirementManagerImpl.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.sagebionetworks.repo.model.UserInfo;
4646
import org.sagebionetworks.repo.model.dao.NotificationEmailDAO;
4747
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementConversionRequest;
48+
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementPermissions;
4849
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementSearchRequest;
4950
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementSearchResponse;
5051
import org.sagebionetworks.repo.model.dataaccess.AccessRequirementSearchResult;
@@ -688,5 +689,14 @@ void sendChangeMessage(Long userId, ChangeType changeType, Long id, Long version
688689
.setObjectVersion(versionNumber)
689690
);
690691
}
691-
692+
693+
@Override
694+
public AccessRequirementPermissions getPermissions(UserInfo user, String requirementId) {
695+
ValidateArgument.required(user, "user");
696+
ValidateArgument.required(requirementId, "requirementId");
697+
return new AccessRequirementPermissions()
698+
.setCanReviewSubmissions(daAuthManager.canReviewAccessRequirementSubmissions(user, requirementId).isAuthorized());
699+
700+
}
701+
692702
}

services/repository-managers/src/main/java/org/sagebionetworks/repo/manager/dataaccess/SubmissionManager.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,15 @@ public interface SubmissionManager {
109109
*/
110110
Submission getSubmission(UserInfo userInfo, String submissionId);
111111

112+
/**
113+
* Fetch a submission by threadId, if the user is not part of ACT they must be validated and assigned as reviewers of the AR submissions in order to fetch the submission.
114+
*
115+
* @param user
116+
* @param threadId
117+
* @return
118+
*/
119+
Submission getSubmissionForThread(UserInfo user, String threadId);
120+
112121
/**
113122
* Fetch their own access approval information specific to a submission, as long as the user is an accessor in the submission.
114123
*

services/repository-managers/src/main/java/org/sagebionetworks/repo/manager/dataaccess/SubmissionManagerImpl.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
import org.sagebionetworks.repo.model.message.TransactionalMessenger;
6969
import org.sagebionetworks.repo.model.subscription.SubscriptionObjectType;
7070
import org.sagebionetworks.repo.transactions.WriteTransaction;
71+
import org.sagebionetworks.repo.web.NotFoundException;
7172
import org.sagebionetworks.util.ValidateArgument;
7273
import org.springframework.beans.factory.annotation.Autowired;
7374
import org.springframework.stereotype.Service;
@@ -477,6 +478,16 @@ public Submission getSubmission(UserInfo userInfo, String submissionId) {
477478
return submission;
478479
}
479480

481+
@Override
482+
public Submission getSubmissionForThread(UserInfo user, String threadId) {
483+
ValidateArgument.required(user, "user");
484+
ValidateArgument.required(threadId, "threadId");
485+
String submissionId = threadDao.getSubmissionIdForThread(threadId).orElseThrow(() ->
486+
new NotFoundException("Submission for thread '" + threadId + "' does not exist"));
487+
return getSubmission(user, submissionId);
488+
}
489+
490+
480491
@Override
481492
public AccessApproval getUserAccessApproval(UserInfo userInfo, String submissionId) {
482493
ValidateArgument.required(userInfo, "userInfo");

0 commit comments

Comments
 (0)