package org.nextprot.api.user.service.impl; import org.nextprot.api.commons.exception.NPreconditions; import org.nextprot.api.security.service.JWTCodec; import org.nextprot.api.security.service.impl.NPSecurityContext; import org.nextprot.api.user.dao.UserApplicationDao; import org.nextprot.api.user.domain.UserApplication; import org.nextprot.api.user.service.UserApplicationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; import java.util.List; import java.util.Map; @Lazy @Service public class UserApplicationServiceImpl implements UserApplicationService { @Autowired private JWTCodec<Map<String, Object>> codec; @Autowired private UserApplicationDao userApplicationDao; @Transactional public UserApplication createUserApplication(UserApplication userApplication) { NPreconditions.checkNotNull(userApplication, "The user application should not be null"); NPreconditions.checkTrue(!userApplication.isPersisted(), "The user application should be new"); long id = userApplicationDao.createUserApplication(userApplication); UserApplication app = userApplicationDao.getUserApplicationById(id); app.setToken(generateToken(app)); userApplicationDao.updateUserApplication(app); return app; } private String generateToken(UserApplication userApplication) { Map<String, Object> appProps = new HashMap<String, Object>(); appProps.put("id", String.valueOf(userApplication.getId())); appProps.put("timestamp", String.valueOf(System.currentTimeMillis())); return codec.encodeJWT(appProps, 0); } @Override public List<UserApplication> getUserApplicationsByOwnerId(long ownerId) { return userApplicationDao.getUserApplicationListByOwnerId(ownerId); } @Override public UserApplication getUserApplication(long id) { return this.userApplicationDao.getUserApplicationById(id); } @Override public void deleteApplication(long id) { UserApplication app = this.userApplicationDao.getUserApplicationById(id); //TODO make checking that is the current user or admin... this.userApplicationDao.deleteUserApplication(app); } }