package io.kaif.model.clientapp;
import java.util.Collections;
import java.util.EnumSet;
import java.util.Optional;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import com.google.common.base.Strings;
public enum ClientAppScope {
PUBLIC,
USER,
FEED,
ARTICLE,
DEBATE,
VOTE;
/**
* if any one of scope is invalid, return empty set
*/
public static Set<ClientAppScope> tryParse(String rawScopes) {
return Optional.ofNullable(rawScopes)
.map(scopes -> Pattern.compile("\\s+")
.splitAsStream(scopes)
.filter(s -> !Strings.isNullOrEmpty(s)))
.map(nameStream -> {
Set<ClientAppScope> parsed = nameStream.map(name -> {
try {
return ClientAppScope.valueOf(name.toUpperCase());
} catch (IllegalArgumentException e) {
return null;
}
}).collect(Collectors.toSet());
if (parsed.contains(null)) {
return null;
}
return parsed;
})
.orElse(Collections.emptySet());
}
public static String toCanonicalString(Set<ClientAppScope> nonEmptyScopes) {
return nonEmptyScopes.stream()
.map(ClientAppScope::toString)
.sorted()
.collect(Collectors.joining(" "));
}
public static String allCanonicalScopes() {
return toCanonicalString(EnumSet.allOf(ClientAppScope.class));
}
@Override
public String toString() {
return name().toLowerCase();
}
public String getI18nKey() {
return "client-app-scope." + name().toLowerCase();
}
}