| Michael Hanl | fb839b9 | 2015-09-19 21:32:34 +0200 | [diff] [blame] | 1 | package de.ids_mannheim.korap.config; |
| 2 | |
| margaretha | d479666 | 2017-11-09 16:11:40 +0100 | [diff] [blame] | 3 | import de.ids_mannheim.korap.exceptions.KustvaktException; |
| Michael Hanl | fb5bdd9 | 2016-06-08 11:29:47 +0200 | [diff] [blame] | 4 | import de.ids_mannheim.korap.user.Userdata; |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 5 | import de.ids_mannheim.korap.utils.JsonUtils; |
| Michael Hanl | fb839b9 | 2015-09-19 21:32:34 +0200 | [diff] [blame] | 6 | |
| 7 | import java.util.ArrayList; |
| 8 | import java.util.HashMap; |
| 9 | import java.util.List; |
| 10 | import java.util.Map; |
| 11 | |
| 12 | /** |
| 13 | * @author hanl |
| 14 | * @date 09/12/2014 |
| 15 | */ |
| 16 | public class Scopes { |
| 17 | |
| 18 | public enum Scope { |
| margaretha | 6672fe5 | 2023-09-28 09:24:25 +0200 | [diff] [blame] | 19 | profile, email, queries, account, preferences, search |
| Michael Hanl | fb839b9 | 2015-09-19 21:32:34 +0200 | [diff] [blame] | 20 | |
| 21 | } |
| 22 | |
| 23 | private static final String[] profile = { Attributes.EMAIL, |
| 24 | Attributes.FIRSTNAME, Attributes.LASTNAME, Attributes.INSTITUTION, |
| 25 | Attributes.ADDRESS, Attributes.PHONE, Attributes.GENDER, |
| 26 | Attributes.COUNTRY }; |
| 27 | |
| Michael Hanl | fb839b9 | 2015-09-19 21:32:34 +0200 | [diff] [blame] | 28 | private static final Enum[] SERVICE_DEFAULTS = { Scope.account, |
| 29 | Scope.preferences, Scope.search, Scope.queries }; |
| 30 | |
| Michael Hanl | fb5bdd9 | 2016-06-08 11:29:47 +0200 | [diff] [blame] | 31 | public static Scopes getProfileScopes (Userdata values) { |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 32 | Scopes r = new Scopes(); |
| Michael Hanl | fb839b9 | 2015-09-19 21:32:34 +0200 | [diff] [blame] | 33 | for (String key : profile) { |
| 34 | Object v = values.get(key); |
| 35 | if (v != null) |
| Michael Hanl | fb5bdd9 | 2016-06-08 11:29:47 +0200 | [diff] [blame] | 36 | r.values.put(key, v); |
| Michael Hanl | fb839b9 | 2015-09-19 21:32:34 +0200 | [diff] [blame] | 37 | } |
| 38 | return r; |
| 39 | } |
| 40 | |
| 41 | /** |
| 42 | * expects space separated values |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 43 | * |
| Michael Hanl | fb839b9 | 2015-09-19 21:32:34 +0200 | [diff] [blame] | 44 | * @param scopes |
| 45 | * @return |
| 46 | */ |
| 47 | //todo: test |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 48 | public static Scope[] mapScopes (String scopes) { |
| Michael Hanl | fb839b9 | 2015-09-19 21:32:34 +0200 | [diff] [blame] | 49 | List<Enum> s = new ArrayList<>(); |
| 50 | for (String value : scopes.split(" ")) |
| 51 | s.add(Scope.valueOf(value.toLowerCase())); |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 52 | return s.toArray(new Scope[s.size()]); |
| Michael Hanl | fb839b9 | 2015-09-19 21:32:34 +0200 | [diff] [blame] | 53 | } |
| 54 | |
| Michael Hanl | fb5bdd9 | 2016-06-08 11:29:47 +0200 | [diff] [blame] | 55 | public static Scopes mapScopes (String scopes, Userdata details) { |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 56 | Scopes m = new Scopes(); |
| Michael Hanl | fb839b9 | 2015-09-19 21:32:34 +0200 | [diff] [blame] | 57 | if (scopes != null && !scopes.isEmpty()) { |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 58 | Scope[] scopearr = mapScopes(scopes); |
| 59 | for (Scope s : scopearr) { |
| Michael Hanl | 5fac8ab | 2016-01-29 16:33:04 +0100 | [diff] [blame] | 60 | Object v = details.get(s.toString()); |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 61 | if (v != null) |
| Michael Hanl | fb5bdd9 | 2016-06-08 11:29:47 +0200 | [diff] [blame] | 62 | m.values.put(s.toString(), v); |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 63 | } |
| Michael Hanl | fb839b9 | 2015-09-19 21:32:34 +0200 | [diff] [blame] | 64 | if (scopes.contains(Scope.profile.toString())) |
| Michael Hanl | fb5bdd9 | 2016-06-08 11:29:47 +0200 | [diff] [blame] | 65 | m.values.putAll(Scopes.getProfileScopes(details).values); |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 66 | m.values.put(Attributes.SCOPE, scopes); |
| Michael Hanl | fb839b9 | 2015-09-19 21:32:34 +0200 | [diff] [blame] | 67 | } |
| 68 | return m; |
| 69 | } |
| 70 | |
| Michael Hanl | fb5bdd9 | 2016-06-08 11:29:47 +0200 | [diff] [blame] | 71 | private Map<String, Object> values; |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 72 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 73 | private Scopes () { |
| Michael Hanl | fb5bdd9 | 2016-06-08 11:29:47 +0200 | [diff] [blame] | 74 | this.values = new HashMap<>(); |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 75 | } |
| 76 | |
| margaretha | d479666 | 2017-11-09 16:11:40 +0100 | [diff] [blame] | 77 | public String toEntity () throws KustvaktException { |
| Michael Hanl | fb5bdd9 | 2016-06-08 11:29:47 +0200 | [diff] [blame] | 78 | if (this.values.isEmpty()) |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 79 | return ""; |
| Michael Hanl | fb5bdd9 | 2016-06-08 11:29:47 +0200 | [diff] [blame] | 80 | return JsonUtils.toJSON(this.values); |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 81 | } |
| 82 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 83 | public Map<String, Object> toMap () { |
| Michael Hanl | fb5bdd9 | 2016-06-08 11:29:47 +0200 | [diff] [blame] | 84 | return new HashMap<>(this.values); |
| Michael Hanl | f1e85e7 | 2016-01-21 16:55:45 +0100 | [diff] [blame] | 85 | } |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 86 | |
| Michael Hanl | fb839b9 | 2015-09-19 21:32:34 +0200 | [diff] [blame] | 87 | } |