1313import pro .cloudnode .smp .smpcore .api .REST ;
1414
1515import java .util .Optional ;
16+ import java .util .OptionalInt ;
1617import java .util .Set ;
1718import java .util .UUID ;
19+ import java .util .function .Predicate ;
1820
1921public final class Members {
2022 private final @ NotNull REST rest ;
@@ -41,56 +43,59 @@ public Members(final @NotNull REST rest) {
4143 return obj ;
4244 }
4345
44- public void list (final @ NotNull Context ctx ) {
45- final @ Nullable String filter = ctx .queryParam ("filter" );
46- final @ Nullable String limitString = ctx .queryParam ("limit" );
47- final @ Nullable String pageString = ctx .queryParam ("page" );
48- final @ Nullable String include = ctx .queryParam ("include" );
49-
50- final @ Nullable Integer limit ;
51- if (limitString == null )
52- limit = null ;
53- else {
54- @ Nullable Integer t = null ;
55- try {
56- t = Integer .parseInt (limitString );
57- }
58- catch (final @ NotNull NumberFormatException ignored ) {}
59- limit = t ;
46+ private static OptionalInt parseInt (final @ Nullable String value ) {
47+ if (value == null )
48+ return OptionalInt .empty ();
49+ try {
50+ return OptionalInt .of (Integer .parseInt (value ));
51+ }
52+ catch (final NumberFormatException ignored ) {
53+ return OptionalInt .empty ();
6054 }
55+ }
6156
62- final int page ;
63- if (pageString == null )
64- page = 1 ;
65- else {
66- int t ;
67- try {
68- t = Integer .parseInt (pageString );
69- }
70- catch (final @ NotNull NumberFormatException ignored ) {
71- t = 1 ;
72- }
73- page = t ;
57+ private static int parseInt (final @ Nullable String value , final int defaultValue ) {
58+ if (value == null )
59+ return defaultValue ;
60+ try {
61+ return Integer .parseInt (value );
7462 }
63+ catch (final NumberFormatException ignored ) {
64+ return defaultValue ;
65+ }
66+ }
67+
68+ private static Predicate <Member > resolveFilter (final @ Nullable String filter ) {
69+ if (filter == null )
70+ return _ -> true ;
7571
76- final @ NotNull Set <@ NotNull Member > members = limit == null ? Member .get () : Member .get (limit , page );
72+ return switch (filter ) {
73+ case "online" -> member ->
74+ !member .staff && member .player ().isOnline ();
75+ case "offline" -> member ->
76+ member .staff || !member .player ().isOnline ();
77+ case "banned" -> member ->
78+ member .player ().isBanned ();
79+ default -> _ -> true ;
80+ };
81+ }
82+
83+ public void list (final @ NotNull Context ctx ) {
84+ final @ Nullable String include = ctx .queryParam ("include" );
85+
86+ final var limit = parseInt (ctx .queryParam ("limit" ));
87+ final var page = parseInt (ctx .queryParam ("page" ), 1 );
88+
89+ final @ NotNull Set <@ NotNull Member > members = limit .isEmpty () ? Member .get ()
90+ : Member .get (limit .getAsInt (), page );
7791 final @ NotNull JsonArray arr = new JsonArray ();
92+
93+ final var filterPredicate = resolveFilter (ctx .queryParam ("filter" ));
94+
7895 for (final @ NotNull Member member : members ) {
79- if (filter != null )
80- switch (filter ) {
81- case "online" -> {
82- if (member .staff || !member .player ().isOnline ())
83- continue ;
84- }
85- case "offline" -> {
86- if (!member .staff && member .player ().isOnline ())
87- continue ;
88- }
89- case "banned" -> {
90- if (!member .player ().isBanned ())
91- continue ;
92- }
93- }
96+ if (!filterPredicate .test (member ))
97+ continue ;
98+
9499 final @ NotNull JsonObject m = map (member );
95100 if (include != null ) {
96101 switch (include ) {
0 commit comments