--- /dev/null
+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<Row> list = values.all();
+ /*
+ if (1 != list.size()) {
+ return false;
+ }
+ */
+ String test = list.get(0).getString("Value");
+ id = Long.parseLong(test, 10);
+ 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<User> findAllUsers() {
+ List<User> list = new ArrayList<User>();
+ String com = "SELECT * FROM Users;";
+ try {
+ ResultSet results = session.execute(com);
+ List<Row> 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;
+ }
+}