package compbio.cassandra; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.log4j.Logger; import org.springframework.dao.DataIntegrityViolationException; import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.exceptions.QueryExecutionException; import com.datastax.driver.core.exceptions.QueryValidationException; import compbio.proteocache.users.User; import compbio.proteocache.users.UserManager; public class CassandraUserManager implements UserManager { private Session session; private static Logger log = Logger.getLogger(CassandraNativeConnector.class); public CassandraUserManager() { Session inis = CassandraNativeConnector.getSession(); setSession(inis); } private void setSession(Session s) { assert s != null; session = s; } public boolean addUser(User user) throws DataIntegrityViolationException { String chkcom = "SELECT * FROM Users WHERE email = '" + user.getEmail() + "';"; try { ResultSet users = session.execute(chkcom); if (0 < users.all().size()) { throw new DataIntegrityViolationException("A user with email " + user.getEmail() + " exists"); } } catch (QueryExecutionException e) { String mess = "CassandraUserManagerImpl.addUser: query execution exception..."; System.out.println(mess); log.error(mess); log.error(e.getLocalizedMessage(), e.getCause()); return false; } catch (QueryValidationException e) { String mess = "CassandraUserManagerImpl.addUser: query validation exception... Command: " + chkcom; System.out.println(mess); log.error(mess); log.error(e.getLocalizedMessage(), e.getCause()); return false; } long id = user.getId().longValue(); if (id < 1) { String com = "SELECT * FROM MainParameters WHERE Name = 'MaxUserId';"; try { ResultSet values = session.execute(com); List list = values.all(); if (0 < list.size()) { String test = list.get(0).getString("Value"); id = Long.parseLong(test, 10); } else { // if the MaxUserId parameter does not exist it is inserted // with id = 1 id = 0; } id++; com = "INSERT INTO MainParameters (name,value) VALUES ('MaxUserId','" + id + "');"; session.execute(com); } catch (QueryExecutionException e) { String mess = "CassandraUserManagerImpl.addUser: query execution exception..."; System.out.println(mess); log.error(mess); log.error(e.getLocalizedMessage(), e.getCause()); return false; } catch (QueryValidationException e) { String mess = "CassandraUserManagerImpl.addUser: query validation exception... Command: " + com; System.out.println(mess); log.error(mess); log.error(e.getLocalizedMessage(), e.getCause()); return false; } } String incom = "INSERT INTO Users (name, id, email, password, organisation, position, signedtolist, registrationdate) VALUES ('" + user.getFullName() + "'," + id + ",'" + user.getEmail() + "','" + user.getPassword() + "','" + user.getOrganisation() + "','" + user.getPosition() + "'," + user.isUpdateByEmail() + "," + user.getRegistrationDate().getTime() + ");"; try { session.execute(incom); } catch (QueryExecutionException e) { String mess = "CassandraUserManagerImpl.addUser: query execution exception..."; System.out.println(mess); log.error(mess); log.error(e.getLocalizedMessage(), e.getCause()); return false; } catch (QueryValidationException e) { String mess = "CassandraUserManagerImpl.addUser: query validation exception... Command: " + incom; System.out.println(mess); log.error(mess); log.error(e.getLocalizedMessage(), e.getCause()); return false; } return true; } public boolean saveUser(User user) { boolean isSaved = false; String com = "SELECT * FROM Users WHERE id = " + user.getId() + ";"; try { ResultSet users = session.execute(com); if (1 < users.all().size()) { return false; } isSaved = addUser(user); } catch (QueryExecutionException e) { String mess = "CassandraUserManagerImpl.saveUser: query execution exception..."; System.out.println(mess); log.error(mess); log.error(e.getLocalizedMessage(), e.getCause()); } catch (QueryValidationException e) { String mess = "CassandraUserManagerImpl.saveUser: query validation exception... Command: " + com; System.out.println(mess); log.error(mess); log.error(e.getLocalizedMessage(), e.getCause()); } return isSaved; } public boolean deleteUser(long id) { String com = "DELETE FROM Users WHERE id = " + id + ";"; try { session.execute(com); } catch (QueryExecutionException e) { String mess = "CassandraUserManagerImpl.deleteUser: query execution exception..."; System.out.println(mess); log.error(mess); log.error(e.getLocalizedMessage(), e.getCause()); return false; } catch (QueryValidationException e) { String mess = "CassandraUserManagerImpl.deleteUser: query validation exception... Command: " + com; System.out.println(mess); log.error(mess); log.error(e.getLocalizedMessage(), e.getCause()); return false; } return true; } public User getUserById(long id) { String com = "SELECT * FROM Users WHERE Id = " + id + ";"; User user = new User(); try { ResultSet users = session.execute(com); if (1 != users.all().size()) { return null; } user = buildUser(users.one()); } catch (QueryExecutionException e) { String mess = "CassandraUserManagerImpl.addUser: query execution exception..."; System.out.println(mess); log.error(mess); log.error(e.getLocalizedMessage(), e.getCause()); return null; } catch (QueryValidationException e) { String mess = "CassandraUserManagerImpl.addUser: query validation exception... Command: " + com; System.out.println(mess); log.error(mess); log.error(e.getLocalizedMessage(), e.getCause()); return null; } return user; } public User getUserByEmail(String email) { String com = "SELECT * FROM Users WHERE Email = '" + email + "';"; User user = new User(); try { ResultSet users = session.execute(com); if (1 != users.all().size()) { return null; } user = buildUser(users.one()); } catch (QueryExecutionException e) { String mess = "CassandraUserManagerImpl.getUserByEmail: query execution exception..."; System.out.println(mess); log.error(mess); log.error(e.getLocalizedMessage(), e.getCause()); return null; } catch (QueryValidationException e) { String mess = "CassandraUserManagerImpl.getUserByEmail: query validation exception... Command: " + com; System.out.println(mess); log.error(mess); log.error(e.getLocalizedMessage(), e.getCause()); return null; } return user; } public List findAllUsers() { List list = new ArrayList(); String com = "SELECT * FROM Users;"; try { ResultSet results = session.execute(com); List rows = results.all(); for (Row r : rows) { list.add(buildUser(r)); } } catch (QueryExecutionException e) { String mess = "CassandraUserManagerImpl.findAllUsers: query execution exception..."; System.out.println(mess); log.error(mess); log.error(e.getLocalizedMessage(), e.getCause()); return null; } catch (QueryValidationException e) { String mess = "CassandraUserManagerImpl.findAllUsers: query validation exception... Command: " + com; System.out.println(mess); log.error(mess); log.error(e.getLocalizedMessage(), e.getCause()); return null; } return list; } private User buildUser(Row r) { User u = new User(); u.setFullName(r.getString("Name")); u.setId(new Long(r.getLong("Id"))); u.setEmail(r.getString("Email")); u.setPassword(r.getString("Password")); u.setOrganisation(r.getString("Organisation")); u.setPosition(r.getString("Position")); u.setUpdateByEmail(r.getBool("SignedToList")); u.setRegistrationDate(new Date(r.getLong("RegistrationDate"))); return u; } }