| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 1 | package de.ids_mannheim.korap.service; |
| 2 | |
| 3 | import java.util.Map; |
| 4 | |
| margaretha | 62c0676 | 2019-01-23 16:58:30 +0100 | [diff] [blame] | 5 | import org.apache.http.HttpStatus; |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 6 | import org.springframework.beans.factory.annotation.Autowired; |
| 7 | import org.springframework.stereotype.Service; |
| 8 | |
| 9 | import de.ids_mannheim.korap.dao.DefaultSettingDao; |
| 10 | import de.ids_mannheim.korap.entity.DefaultSetting; |
| 11 | import de.ids_mannheim.korap.exceptions.KustvaktException; |
| 12 | import de.ids_mannheim.korap.exceptions.StatusCodes; |
| margaretha | 0bcde4c | 2019-01-23 19:08:51 +0100 | [diff] [blame] | 13 | import de.ids_mannheim.korap.user.UserSettingProcessor; |
| margaretha | 6cd27f3 | 2019-01-24 14:47:47 +0100 | [diff] [blame] | 14 | import de.ids_mannheim.korap.validator.ApacheValidator; |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 15 | |
| margaretha | 6cd27f3 | 2019-01-24 14:47:47 +0100 | [diff] [blame] | 16 | /** |
| 17 | * DefaultSettingService handles all business logic related to user |
| 18 | * default setting. |
| 19 | * |
| 20 | * @author margaretha |
| 21 | * |
| 22 | */ |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 23 | @Service |
| 24 | public class DefaultSettingService { |
| 25 | |
| 26 | @Autowired |
| 27 | private DefaultSettingDao settingDao; |
| margaretha | 6cd27f3 | 2019-01-24 14:47:47 +0100 | [diff] [blame] | 28 | @Autowired |
| 29 | private ApacheValidator validator; |
| margaretha | 0bcde4c | 2019-01-23 19:08:51 +0100 | [diff] [blame] | 30 | |
| 31 | private String verifiyUsername (String username, String contextUsername) |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 32 | throws KustvaktException { |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 33 | username = username.substring(1); |
| margaretha | 0bcde4c | 2019-01-23 19:08:51 +0100 | [diff] [blame] | 34 | if (!username.equals(contextUsername)) { |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 35 | throw new KustvaktException(StatusCodes.INVALID_ARGUMENT, |
| 36 | "Username verification failed. Path parameter username " |
| margaretha | 0bcde4c | 2019-01-23 19:08:51 +0100 | [diff] [blame] | 37 | + "without prefix must be the same as the " |
| 38 | + "authenticated username.", |
| margaretha | 62c0676 | 2019-01-23 16:58:30 +0100 | [diff] [blame] | 39 | username); |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 40 | } |
| margaretha | 0bcde4c | 2019-01-23 19:08:51 +0100 | [diff] [blame] | 41 | return username; |
| margaretha | 62c0676 | 2019-01-23 16:58:30 +0100 | [diff] [blame] | 42 | } |
| 43 | |
| margaretha | 6cd27f3 | 2019-01-24 14:47:47 +0100 | [diff] [blame] | 44 | private void validateSettingMap (Map<String, Object> map) |
| 45 | throws KustvaktException { |
| margaretha | 62c0676 | 2019-01-23 16:58:30 +0100 | [diff] [blame] | 46 | if (map == null || map.isEmpty()) { |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 47 | throw new KustvaktException(StatusCodes.INVALID_ARGUMENT, |
| 48 | "Entity body is empty. No settings are given."); |
| 49 | } |
| margaretha | 6cd27f3 | 2019-01-24 14:47:47 +0100 | [diff] [blame] | 50 | for (String k : map.keySet()) { |
| 51 | validator.validateEntry(k, "setting"); |
| 52 | } |
| 53 | } |
| 54 | |
| 55 | public int handlePutRequest (String username, Map<String, Object> map, |
| 56 | String contextUsername) throws KustvaktException { |
| 57 | username = verifiyUsername(username, contextUsername); |
| 58 | validateSettingMap(map); |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 59 | |
| margaretha | 0bcde4c | 2019-01-23 19:08:51 +0100 | [diff] [blame] | 60 | UserSettingProcessor processor = new UserSettingProcessor(); |
| 61 | processor.readQuietly(map, false); |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 62 | |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 63 | DefaultSetting defaultSetting = settingDao |
| 64 | .retrieveDefaultSetting(username); |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 65 | if (defaultSetting == null) { |
| margaretha | 0bcde4c | 2019-01-23 19:08:51 +0100 | [diff] [blame] | 66 | createDefaultSetting(username, processor); |
| margaretha | 62c0676 | 2019-01-23 16:58:30 +0100 | [diff] [blame] | 67 | return HttpStatus.SC_CREATED; |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 68 | } |
| 69 | else { |
| margaretha | 0bcde4c | 2019-01-23 19:08:51 +0100 | [diff] [blame] | 70 | updateDefaultSetting(defaultSetting, processor); |
| margaretha | 62c0676 | 2019-01-23 16:58:30 +0100 | [diff] [blame] | 71 | return HttpStatus.SC_OK; |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 72 | } |
| 73 | } |
| 74 | |
| margaretha | 0bcde4c | 2019-01-23 19:08:51 +0100 | [diff] [blame] | 75 | public void createDefaultSetting (String username, |
| 76 | UserSettingProcessor processor) throws KustvaktException { |
| 77 | String jsonSettings = processor.serialize(); |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 78 | settingDao.createDefaultSetting(username, jsonSettings); |
| 79 | } |
| 80 | |
| margaretha | 0bcde4c | 2019-01-23 19:08:51 +0100 | [diff] [blame] | 81 | public void updateDefaultSetting (DefaultSetting setting, |
| 82 | UserSettingProcessor newProcessor) throws KustvaktException { |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 83 | UserSettingProcessor processor = new UserSettingProcessor( |
| 84 | setting.getSettings()); |
| margaretha | 0bcde4c | 2019-01-23 19:08:51 +0100 | [diff] [blame] | 85 | processor.update(newProcessor); |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 86 | |
| margaretha | 0bcde4c | 2019-01-23 19:08:51 +0100 | [diff] [blame] | 87 | String jsonSettings = processor.serialize(); |
| 88 | setting.setSettings(jsonSettings); |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 89 | settingDao.updateDefaultSetting(setting); |
| 90 | } |
| 91 | |
| margaretha | 62c0676 | 2019-01-23 16:58:30 +0100 | [diff] [blame] | 92 | public String retrieveDefaultSettings (String username, |
| margaretha | 0bcde4c | 2019-01-23 19:08:51 +0100 | [diff] [blame] | 93 | String contextUsername) throws KustvaktException { |
| margaretha | 62c0676 | 2019-01-23 16:58:30 +0100 | [diff] [blame] | 94 | |
| margaretha | 0bcde4c | 2019-01-23 19:08:51 +0100 | [diff] [blame] | 95 | username = verifiyUsername(username, contextUsername); |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 96 | return retrieveDefaultSettings(username); |
| 97 | } |
| margaretha | b5e1e0a | 2019-01-29 22:11:57 +0100 | [diff] [blame] | 98 | |
| 99 | public String retrieveDefaultSettings (String username) |
| 100 | throws KustvaktException { |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 101 | DefaultSetting defaultSetting = settingDao |
| 102 | .retrieveDefaultSetting(username); |
| margaretha | 4fa4b06 | 2019-01-28 19:43:30 +0100 | [diff] [blame] | 103 | if (defaultSetting == null) { |
| 104 | return null; |
| 105 | } |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 106 | return defaultSetting.getSettings(); |
| margaretha | b5e1e0a | 2019-01-29 22:11:57 +0100 | [diff] [blame] | 107 | } |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 108 | |
| margaretha | 0bcde4c | 2019-01-23 19:08:51 +0100 | [diff] [blame] | 109 | public void deleteKey (String username, String contextUsername, String key) |
| 110 | throws KustvaktException { |
| 111 | username = verifiyUsername(username, contextUsername); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 112 | DefaultSetting defaultSetting = settingDao |
| 113 | .retrieveDefaultSetting(username); |
| margaretha | 0bcde4c | 2019-01-23 19:08:51 +0100 | [diff] [blame] | 114 | |
| 115 | String jsonSettings = defaultSetting.getSettings(); |
| 116 | UserSettingProcessor processor = new UserSettingProcessor(jsonSettings); |
| 117 | processor.removeField(key); |
| 118 | String json = processor.serialize(); |
| 119 | |
| 120 | defaultSetting.setSettings(json); |
| 121 | settingDao.updateDefaultSetting(defaultSetting); |
| 122 | } |
| 123 | |
| margaretha | b5e1e0a | 2019-01-29 22:11:57 +0100 | [diff] [blame] | 124 | public void deleteSetting (String username, String contextUsername) |
| 125 | throws KustvaktException { |
| 126 | username = verifiyUsername(username, contextUsername); |
| 127 | settingDao.deleteDefaultSetting(username); |
| 128 | } |
| 129 | |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 130 | } |