blob: b0ba7d07dc10f0c6486f777c4309f865d45714b8 [file] [log] [blame]
package de.ids_mannheim.korap.service;
import java.util.Map;
import org.apache.http.HttpStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import de.ids_mannheim.korap.dao.DefaultSettingDao;
import de.ids_mannheim.korap.entity.DefaultSetting;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.exceptions.StatusCodes;
import de.ids_mannheim.korap.user.UserSettingProcessor;
import de.ids_mannheim.korap.validator.ApacheValidator;
/**
* DefaultSettingService handles all business logic related to user
* default setting.
*
* @author margaretha
*
*/
@Service
public class DefaultSettingService {
@Autowired
private DefaultSettingDao settingDao;
@Autowired
private ApacheValidator validator;
private String verifiyUsername (String username, String contextUsername)
throws KustvaktException {
username = username.substring(1);
if (!username.equals(contextUsername)) {
throw new KustvaktException(StatusCodes.INVALID_ARGUMENT,
"Username verification failed. Path parameter username "
+ "without prefix must be the same as the "
+ "authenticated username.",
username);
}
return username;
}
private void validateSettingMap (Map<String, Object> map)
throws KustvaktException {
if (map == null || map.isEmpty()) {
throw new KustvaktException(StatusCodes.INVALID_ARGUMENT,
"Entity body is empty. No settings are given.");
}
for (String k : map.keySet()) {
validator.validateEntry(k, "setting");
}
}
public int handlePutRequest (String username, Map<String, Object> map,
String contextUsername) throws KustvaktException {
username = verifiyUsername(username, contextUsername);
validateSettingMap(map);
UserSettingProcessor processor = new UserSettingProcessor();
processor.readQuietly(map, false);
DefaultSetting defaultSetting = settingDao
.retrieveDefaultSetting(username);
if (defaultSetting == null) {
createDefaultSetting(username, processor);
return HttpStatus.SC_CREATED;
}
else {
updateDefaultSetting(defaultSetting, processor);
return HttpStatus.SC_OK;
}
}
public void createDefaultSetting (String username,
UserSettingProcessor processor) throws KustvaktException {
String jsonSettings = processor.serialize();
settingDao.createDefaultSetting(username, jsonSettings);
}
public void updateDefaultSetting (DefaultSetting setting,
UserSettingProcessor newProcessor) throws KustvaktException {
UserSettingProcessor processor = new UserSettingProcessor(
setting.getSettings());
processor.update(newProcessor);
String jsonSettings = processor.serialize();
setting.setSettings(jsonSettings);
settingDao.updateDefaultSetting(setting);
}
public String retrieveDefaultSettings (String username,
String contextUsername) throws KustvaktException {
username = verifiyUsername(username, contextUsername);
return retrieveDefaultSettings(username);
}
public String retrieveDefaultSettings (String username)
throws KustvaktException {
DefaultSetting defaultSetting = settingDao
.retrieveDefaultSetting(username);
if (defaultSetting == null) {
return null;
}
return defaultSetting.getSettings();
}
public void deleteKey (String username, String contextUsername, String key)
throws KustvaktException {
username = verifiyUsername(username, contextUsername);
DefaultSetting defaultSetting = settingDao
.retrieveDefaultSetting(username);
String jsonSettings = defaultSetting.getSettings();
UserSettingProcessor processor = new UserSettingProcessor(jsonSettings);
processor.removeField(key);
String json = processor.serialize();
defaultSetting.setSettings(json);
settingDao.updateDefaultSetting(defaultSetting);
}
public void deleteSetting (String username, String contextUsername)
throws KustvaktException {
username = verifiyUsername(username, contextUsername);
settingDao.deleteDefaultSetting(username);
}
}