package org.kalipo.service; import org.kalipo.aop.KalipoExceptionHandler; import org.kalipo.aop.RateLimit; import org.kalipo.domain.Privilege; import org.kalipo.repository.PrivilegeRepository; import org.kalipo.security.Privileges; import org.kalipo.security.SecurityUtils; import org.kalipo.service.util.Asserts; import org.kalipo.web.rest.KalipoException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.domain.Sort; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.AsyncResult; import org.springframework.stereotype.Service; import javax.annotation.security.RolesAllowed; import javax.inject.Inject; import java.util.List; import java.util.concurrent.Future; @Service @KalipoExceptionHandler public class PrivilegeService { private final Logger log = LoggerFactory.getLogger(PrivilegeService.class); @Inject private PrivilegeRepository privilegeRepository; @RolesAllowed(Privileges.UPDATE_PRIVILEGE) @RateLimit public Privilege update(Privilege privilege) throws KalipoException { Asserts.isNotNull(privilege, "privilege"); Asserts.isNotNull(privilege.getId(), "id"); Asserts.isNotNull(privilege.getReputation(), "reputation"); Privilege original = privilegeRepository.findOne(privilege.getId()); Asserts.isNotNull(original, "id"); Asserts.nullOrEqual(privilege.getName(), original.getName(), "name"); log.info(String.format("User '%s' changes privilege %s to %s (before: %s)", SecurityUtils.getCurrentLogin(), original.getId(), privilege.getReputation(), original.getReputation())); original.setReputation(privilege.getReputation()); return privilegeRepository.save(original); } @Async public Future<List<Privilege>> getAll() { Sort sort = new Sort(Sort.Direction.ASC, "name"); return new AsyncResult<>(privilegeRepository.findAll(sort)); } @Async public Future<Privilege> get(String id) throws KalipoException { return new AsyncResult<>(privilegeRepository.findOne(id)); } }