blob: b0ba7d07dc10f0c6486f777c4309f865d45714b8 [file] [log] [blame]
margaretha0866a532019-01-22 17:52:40 +01001package de.ids_mannheim.korap.service;
2
3import java.util.Map;
4
margaretha62c06762019-01-23 16:58:30 +01005import org.apache.http.HttpStatus;
margaretha0866a532019-01-22 17:52:40 +01006import org.springframework.beans.factory.annotation.Autowired;
7import org.springframework.stereotype.Service;
8
9import de.ids_mannheim.korap.dao.DefaultSettingDao;
10import de.ids_mannheim.korap.entity.DefaultSetting;
11import de.ids_mannheim.korap.exceptions.KustvaktException;
12import de.ids_mannheim.korap.exceptions.StatusCodes;
margaretha0bcde4c2019-01-23 19:08:51 +010013import de.ids_mannheim.korap.user.UserSettingProcessor;
margaretha6cd27f32019-01-24 14:47:47 +010014import de.ids_mannheim.korap.validator.ApacheValidator;
margaretha0866a532019-01-22 17:52:40 +010015
margaretha6cd27f32019-01-24 14:47:47 +010016/**
17 * DefaultSettingService handles all business logic related to user
18 * default setting.
19 *
20 * @author margaretha
21 *
22 */
margaretha0866a532019-01-22 17:52:40 +010023@Service
24public class DefaultSettingService {
25
26 @Autowired
27 private DefaultSettingDao settingDao;
margaretha6cd27f32019-01-24 14:47:47 +010028 @Autowired
29 private ApacheValidator validator;
margaretha0bcde4c2019-01-23 19:08:51 +010030
31 private String verifiyUsername (String username, String contextUsername)
margaretha0866a532019-01-22 17:52:40 +010032 throws KustvaktException {
margaretha4fa4b062019-01-28 19:43:30 +010033 username = username.substring(1);
margaretha0bcde4c2019-01-23 19:08:51 +010034 if (!username.equals(contextUsername)) {
margaretha0866a532019-01-22 17:52:40 +010035 throw new KustvaktException(StatusCodes.INVALID_ARGUMENT,
36 "Username verification failed. Path parameter username "
margaretha0bcde4c2019-01-23 19:08:51 +010037 + "without prefix must be the same as the "
38 + "authenticated username.",
margaretha62c06762019-01-23 16:58:30 +010039 username);
margaretha0866a532019-01-22 17:52:40 +010040 }
margaretha0bcde4c2019-01-23 19:08:51 +010041 return username;
margaretha62c06762019-01-23 16:58:30 +010042 }
43
margaretha6cd27f32019-01-24 14:47:47 +010044 private void validateSettingMap (Map<String, Object> map)
45 throws KustvaktException {
margaretha62c06762019-01-23 16:58:30 +010046 if (map == null || map.isEmpty()) {
margaretha0866a532019-01-22 17:52:40 +010047 throw new KustvaktException(StatusCodes.INVALID_ARGUMENT,
48 "Entity body is empty. No settings are given.");
49 }
margaretha6cd27f32019-01-24 14:47:47 +010050 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);
margaretha0866a532019-01-22 17:52:40 +010059
margaretha0bcde4c2019-01-23 19:08:51 +010060 UserSettingProcessor processor = new UserSettingProcessor();
61 processor.readQuietly(map, false);
margaretha0866a532019-01-22 17:52:40 +010062
margaretha35e1ca22023-11-16 22:00:01 +010063 DefaultSetting defaultSetting = settingDao
64 .retrieveDefaultSetting(username);
margaretha0866a532019-01-22 17:52:40 +010065 if (defaultSetting == null) {
margaretha0bcde4c2019-01-23 19:08:51 +010066 createDefaultSetting(username, processor);
margaretha62c06762019-01-23 16:58:30 +010067 return HttpStatus.SC_CREATED;
margaretha0866a532019-01-22 17:52:40 +010068 }
69 else {
margaretha0bcde4c2019-01-23 19:08:51 +010070 updateDefaultSetting(defaultSetting, processor);
margaretha62c06762019-01-23 16:58:30 +010071 return HttpStatus.SC_OK;
margaretha0866a532019-01-22 17:52:40 +010072 }
73 }
74
margaretha0bcde4c2019-01-23 19:08:51 +010075 public void createDefaultSetting (String username,
76 UserSettingProcessor processor) throws KustvaktException {
77 String jsonSettings = processor.serialize();
margaretha0866a532019-01-22 17:52:40 +010078 settingDao.createDefaultSetting(username, jsonSettings);
79 }
80
margaretha0bcde4c2019-01-23 19:08:51 +010081 public void updateDefaultSetting (DefaultSetting setting,
82 UserSettingProcessor newProcessor) throws KustvaktException {
margaretha35e1ca22023-11-16 22:00:01 +010083 UserSettingProcessor processor = new UserSettingProcessor(
84 setting.getSettings());
margaretha0bcde4c2019-01-23 19:08:51 +010085 processor.update(newProcessor);
margaretha0866a532019-01-22 17:52:40 +010086
margaretha0bcde4c2019-01-23 19:08:51 +010087 String jsonSettings = processor.serialize();
88 setting.setSettings(jsonSettings);
margaretha0866a532019-01-22 17:52:40 +010089 settingDao.updateDefaultSetting(setting);
90 }
91
margaretha62c06762019-01-23 16:58:30 +010092 public String retrieveDefaultSettings (String username,
margaretha0bcde4c2019-01-23 19:08:51 +010093 String contextUsername) throws KustvaktException {
margaretha62c06762019-01-23 16:58:30 +010094
margaretha0bcde4c2019-01-23 19:08:51 +010095 username = verifiyUsername(username, contextUsername);
margaretha4fa4b062019-01-28 19:43:30 +010096 return retrieveDefaultSettings(username);
97 }
margarethab5e1e0a2019-01-29 22:11:57 +010098
99 public String retrieveDefaultSettings (String username)
100 throws KustvaktException {
margaretha35e1ca22023-11-16 22:00:01 +0100101 DefaultSetting defaultSetting = settingDao
102 .retrieveDefaultSetting(username);
margaretha4fa4b062019-01-28 19:43:30 +0100103 if (defaultSetting == null) {
104 return null;
105 }
margaretha0866a532019-01-22 17:52:40 +0100106 return defaultSetting.getSettings();
margarethab5e1e0a2019-01-29 22:11:57 +0100107 }
margaretha0866a532019-01-22 17:52:40 +0100108
margaretha0bcde4c2019-01-23 19:08:51 +0100109 public void deleteKey (String username, String contextUsername, String key)
110 throws KustvaktException {
111 username = verifiyUsername(username, contextUsername);
margaretha35e1ca22023-11-16 22:00:01 +0100112 DefaultSetting defaultSetting = settingDao
113 .retrieveDefaultSetting(username);
margaretha0bcde4c2019-01-23 19:08:51 +0100114
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
margarethab5e1e0a2019-01-29 22:11:57 +0100124 public void deleteSetting (String username, String contextUsername)
125 throws KustvaktException {
126 username = verifiyUsername(username, contextUsername);
127 settingDao.deleteDefaultSetting(username);
128 }
129
margaretha0866a532019-01-22 17:52:40 +0100130}