Partly working security: registration form, authorisaztion, simple authentication
[proteocache.git] / datadb / compbio / cassandra / CassandraUserManager.java
diff --git a/datadb/compbio/cassandra/CassandraUserManager.java b/datadb/compbio/cassandra/CassandraUserManager.java
new file mode 100644 (file)
index 0000000..4bcd4b9
--- /dev/null
@@ -0,0 +1,238 @@
+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;
+       }
+}