+ return switch (value) {
+ case "enabled" -> GroupLinkState.ENABLED;
+ case "enabled-with-approval", "enabledWithApproval" -> GroupLinkState.ENABLED_WITH_APPROVAL;
+ case "disabled" -> GroupLinkState.DISABLED;
+ default -> throw new UserErrorException("Invalid group link state: " + value);
+ };
+ }
+
+ GroupPermission getGroupPermission(String value) throws UserErrorException {
+ if (value == null) {
+ return null;
+ }
+ return switch (value) {
+ case "every-member", "everyMember" -> GroupPermission.EVERY_MEMBER;
+ case "only-admins", "onlyAdmins" -> GroupPermission.ONLY_ADMINS;
+ default -> throw new UserErrorException("Invalid group permission: " + value);
+ };
+ }
+
+ @Override
+ public void handleCommand(
+ final Namespace ns, final Manager m, final OutputWriter outputWriter
+ ) throws CommandException {
+ final var groupIdString = ns.getString("group-id");
+ var groupId = CommandUtil.getGroupId(groupIdString);
+
+ final var localNumber = m.getSelfNumber();
+
+ var groupName = ns.getString("name");
+ var groupDescription = ns.getString("description");
+ var groupMembers = CommandUtil.getSingleRecipientIdentifiers(ns.getList("member"), localNumber);
+ var groupRemoveMembers = CommandUtil.getSingleRecipientIdentifiers(ns.getList("remove-member"), localNumber);
+ var groupAdmins = CommandUtil.getSingleRecipientIdentifiers(ns.getList("admin"), localNumber);
+ var groupRemoveAdmins = CommandUtil.getSingleRecipientIdentifiers(ns.getList("remove-admin"), localNumber);
+ var groupAvatar = ns.getString("avatar");
+ var groupResetLink = Boolean.TRUE.equals(ns.getBoolean("reset-link"));
+ var groupLinkState = getGroupLinkState(ns.getString("link"));
+ var groupExpiration = ns.getInt("expiration");
+ var groupAddMemberPermission = getGroupPermission(ns.getString("set-permission-add-member"));
+ var groupEditDetailsPermission = getGroupPermission(ns.getString("set-permission-edit-details"));
+ var groupSendMessagesPermission = getGroupPermission(ns.getString("set-permission-send-messages"));