33import edu .harvard .iq .dataverse .Dataverse ;
44import edu .harvard .iq .dataverse .DvObject ;
55import edu .harvard .iq .dataverse .authorization .Permission ;
6- import edu .harvard .iq .dataverse .authorization .groups .impl .ipaddress .ip .IpAddress ;
76import edu .harvard .iq .dataverse .authorization .users .AuthenticatedUser ;
87import edu .harvard .iq .dataverse .engine .command .AbstractCommand ;
98import edu .harvard .iq .dataverse .engine .command .CommandContext ;
109import edu .harvard .iq .dataverse .engine .command .DataverseRequest ;
1110import edu .harvard .iq .dataverse .engine .command .RequiredPermissions ;
1211import edu .harvard .iq .dataverse .engine .command .exception .CommandException ;
13- import jakarta .json .Json ;
14- import jakarta .json .JsonArrayBuilder ;
15- import jakarta .json .JsonObjectBuilder ;
12+ import edu .harvard .iq .dataverse .engine .command .exception .InvalidCommandArgumentsException ;
13+ import edu .harvard .iq .dataverse .util .BundleUtil ;
1614
1715import java .util .List ;
18- import java .util .logging .Logger ;
19-
20- import static edu .harvard .iq .dataverse .util .json .JsonPrinter .json ;
2116
17+ /**
18+ * Command that retrieves all {@link Dataverse} collections for which a given
19+ * {@link AuthenticatedUser} has the specified permission.
20+ * <p>
21+ * The permission is provided as a string corresponding to one of the names
22+ * in the {@link Permission} enumeration (e.g. {@code Permission.AddDataset.name()}).
23+ * If the special value {@code "any"} is passed, all collections for which
24+ * the user has at least one permission are returned.
25+ * </p>
26+ *
27+ * <p>
28+ * Example:
29+ * <pre>
30+ * new GetUserPermittedCollectionsCommand(request, user, Permission.AddDataset.name());
31+ * </pre>
32+ * will return the list of collections where the user can add datasets.
33+ * </p>
34+ */
2235@ RequiredPermissions ({})
23- public class GetUserPermittedCollectionsCommand extends AbstractCommand <JsonObjectBuilder > {
24- private static final Logger logger = Logger .getLogger (GetUserPermittedCollectionsCommand .class .getCanonicalName ());
36+ public class GetUserPermittedCollectionsCommand extends AbstractCommand <List <Dataverse >> {
37+
38+ public static final String ANY_PERMISSION = "any" ;
39+
40+ private final DataverseRequest request ;
41+ private final AuthenticatedUser user ;
42+ private final String permission ;
2543
26- private DataverseRequest request ;
27- private AuthenticatedUser user ;
28- private String permission ;
2944 public GetUserPermittedCollectionsCommand (DataverseRequest request , AuthenticatedUser user , String permission ) {
3045 super (request , (DvObject ) null );
3146 this .request = request ;
@@ -34,28 +49,16 @@ public GetUserPermittedCollectionsCommand(DataverseRequest request, Authenticate
3449 }
3550
3651 @ Override
37- public JsonObjectBuilder execute (CommandContext ctxt ) throws CommandException {
52+ public List < Dataverse > execute (CommandContext ctxt ) throws CommandException {
3853 if (user == null ) {
39- throw new CommandException ("User not found." , this );
54+ throw new CommandException (BundleUtil . getStringFromBundle ( "getUserPermittedCollectionsCommand.errors.userNotFound" ) , this );
4055 }
4156 int permissionBit ;
4257 try {
43- permissionBit = permission .equalsIgnoreCase ("any" ) ?
44- Integer .MAX_VALUE : (1 << Permission .valueOf (permission ).ordinal ());
58+ permissionBit = permission .equalsIgnoreCase (ANY_PERMISSION ) ? Integer .MAX_VALUE : (1 << Permission .valueOf (permission ).ordinal ());
4559 } catch (IllegalArgumentException e ) {
46- throw new CommandException ("Permission not valid." , this );
47- }
48- List <Dataverse > collections = ctxt .permissions ().findPermittedCollections (request , user , permissionBit );
49- if (collections != null ) {
50- JsonObjectBuilder job = Json .createObjectBuilder ();
51- JsonArrayBuilder jab = Json .createArrayBuilder ();
52- for (Dataverse dv : collections ) {
53- jab .add (json (dv ));
54- }
55- job .add ("count" , collections .size ());
56- job .add ("items" , jab );
57- return job ;
60+ throw new InvalidCommandArgumentsException (BundleUtil .getStringFromBundle ("getUserPermittedCollectionsCommand.errors.permissionNotValid" ), this );
5861 }
59- return null ;
62+ return ctxt . permissions (). findPermittedCollections ( request , user , permissionBit ) ;
6063 }
6164}
0 commit comments