e2158f7be859e59e8b46ebd3fbc469503c1e6841
[proteocache.git] / datadb / compbio / cassandra / CassandraUserManager.java
1 package compbio.cassandra;
2
3 import java.util.ArrayList;
4 import java.util.Date;
5 import java.util.List;
6
7 import org.apache.log4j.Logger;
8 import org.springframework.dao.DataIntegrityViolationException;
9
10 import com.datastax.driver.core.Row;
11 import com.datastax.driver.core.Session;
12 import com.datastax.driver.core.ResultSet;
13 import com.datastax.driver.core.exceptions.QueryExecutionException;
14 import com.datastax.driver.core.exceptions.QueryValidationException;
15
16 import compbio.proteocache.users.User;
17 import compbio.proteocache.users.UserManager;
18
19 public class CassandraUserManager implements UserManager {
20         private Session session;
21         private static Logger log = Logger.getLogger(CassandraNativeConnector.class);
22
23         public CassandraUserManager() {
24                 Session inis = CassandraNativeConnector.getSession();
25                 setSession(inis);
26         }
27
28         private void setSession(Session s) {
29                 assert s != null;
30                 session = s;
31         }
32
33         public boolean addUser(User user) throws DataIntegrityViolationException {
34                 String chkcom = "SELECT * FROM Users WHERE email = '" + user.getEmail() + "';";
35                 try {
36                         ResultSet users = session.execute(chkcom);
37                         if (0 < users.all().size()) {
38                                 throw new DataIntegrityViolationException("A user with email " + user.getEmail() + " exists");
39                         }
40                         
41                 } catch (QueryExecutionException e) {
42                         String mess = "CassandraUserManagerImpl.addUser: query execution exception...";
43                         System.out.println(mess);
44                         log.error(mess);
45                         log.error(e.getLocalizedMessage(), e.getCause());
46                         return false;
47                 } catch (QueryValidationException e) {
48                         String mess = "CassandraUserManagerImpl.addUser: query validation exception... Command: " + chkcom;
49                         System.out.println(mess);
50                         log.error(mess);
51                         log.error(e.getLocalizedMessage(), e.getCause());
52                         return false;
53                 }
54
55                 long id = user.getId().longValue();
56                 if (id < 1) {
57                         String com = "SELECT * FROM MainParameters WHERE Name = 'MaxUserId';";
58                         try {
59                                 ResultSet values = session.execute(com);
60                                 List<Row> list = values.all();
61                                 if (0 < list.size()) {
62                                         String test = list.get(0).getString("Value");
63                                         id = Long.parseLong(test, 10);
64                                 } else {
65                                         // if the MaxUserId parameter does not exist it is inserted with id = 1
66                                         id = 0;
67                                 }
68                                 id++;
69                                 com = "INSERT INTO MainParameters (name,value) VALUES ('MaxUserId','" + id + "');";
70                                 session.execute(com);
71                         } catch (QueryExecutionException e) {
72                                 String mess = "CassandraUserManagerImpl.addUser: query execution exception...";
73                                 System.out.println(mess);
74                                 log.error(mess);
75                                 log.error(e.getLocalizedMessage(), e.getCause());
76                                 return false;
77                         } catch (QueryValidationException e) {
78                                 String mess = "CassandraUserManagerImpl.addUser: query validation exception... Command: " + com;
79                                 System.out.println(mess);
80                                 log.error(mess);
81                                 log.error(e.getLocalizedMessage(), e.getCause());
82                                 return false;
83                         }
84                 }
85
86                 String incom = "INSERT INTO Users (name, id, email, password, organisation, position, signedtolist, registrationdate) VALUES ('"
87                                 + user.getFullName() + "'," + id + ",'" + user.getEmail() + "','" + user.getPassword() + "','"
88                                 + user.getOrganisation() + "','" + user.getPosition() + "'," + user.isUpdateByEmail() + ","
89                                 + user.getRegistrationDate().getTime() + ");";
90                 try {
91                         session.execute(incom);
92                 } catch (QueryExecutionException e) {
93                         String mess = "CassandraUserManagerImpl.addUser: query execution exception...";
94                         System.out.println(mess);
95                         log.error(mess);
96                         log.error(e.getLocalizedMessage(), e.getCause());
97                         return false;
98                 } catch (QueryValidationException e) {
99                         String mess = "CassandraUserManagerImpl.addUser: query validation exception... Command: " + incom;
100                         System.out.println(mess);
101                         log.error(mess);
102                         log.error(e.getLocalizedMessage(), e.getCause());
103                         return false;
104                 }
105                 return true;
106         }
107
108         public boolean saveUser(User user) {
109                 boolean isSaved = false;
110                 String com = "SELECT * FROM Users WHERE id = " + user.getId() + ";";
111                 try {
112                         ResultSet users = session.execute(com);
113                         if (1 < users.all().size()) {
114                                 return false;
115                         }
116                         isSaved = addUser(user);
117                 } catch (QueryExecutionException e) {
118                         String mess = "CassandraUserManagerImpl.saveUser: query execution exception...";
119                         System.out.println(mess);
120                         log.error(mess);
121                         log.error(e.getLocalizedMessage(), e.getCause());
122                 } catch (QueryValidationException e) {
123                         String mess = "CassandraUserManagerImpl.saveUser: query validation exception... Command: " + com;
124                         System.out.println(mess);
125                         log.error(mess);
126                         log.error(e.getLocalizedMessage(), e.getCause());
127                 }
128                 return isSaved;
129         }
130
131         public boolean deleteUser(long id) {
132                 String com = "DELETE FROM Users WHERE id = " + id + ";";
133                 try {
134                         session.execute(com);
135                 } catch (QueryExecutionException e) {
136                         String mess = "CassandraUserManagerImpl.deleteUser: query execution exception...";
137                         System.out.println(mess);
138                         log.error(mess);
139                         log.error(e.getLocalizedMessage(), e.getCause());
140                         return false;
141                 } catch (QueryValidationException e) {
142                         String mess = "CassandraUserManagerImpl.deleteUser: query validation exception... Command: " + com;
143                         System.out.println(mess);
144                         log.error(mess);
145                         log.error(e.getLocalizedMessage(), e.getCause());
146                         return false;
147                 }
148                 return true;
149         }
150
151         public User getUserById(long id) {
152                 String com = "SELECT * FROM Users WHERE Id = " + id + ";";
153                 User user = new User();
154                 try {
155                         ResultSet users = session.execute(com);
156                         if (1 != users.all().size()) {
157                                 return null;
158                         }
159                         user = buildUser(users.one());
160                 } catch (QueryExecutionException e) {
161                         String mess = "CassandraUserManagerImpl.addUser: query execution exception...";
162                         System.out.println(mess);
163                         log.error(mess);
164                         log.error(e.getLocalizedMessage(), e.getCause());
165                         return null;
166                 } catch (QueryValidationException e) {
167                         String mess = "CassandraUserManagerImpl.addUser: query validation exception... Command: " + com;
168                         System.out.println(mess);
169                         log.error(mess);
170                         log.error(e.getLocalizedMessage(), e.getCause());
171                         return null;
172                 }
173                 return user;
174         }
175
176         public User getUserByEmail(String email) {
177                 String com = "SELECT * FROM Users WHERE Email = '" + email + "';";
178                 User user = new User();
179                 try {
180                         ResultSet users = session.execute(com);
181                         if (1 != users.all().size()) {
182                                 return null;
183                         }
184                         user = buildUser(users.one());
185                 } catch (QueryExecutionException e) {
186                         String mess = "CassandraUserManagerImpl.getUserByEmail: query execution exception...";
187                         System.out.println(mess);
188                         log.error(mess);
189                         log.error(e.getLocalizedMessage(), e.getCause());
190                         return null;
191                 } catch (QueryValidationException e) {
192                         String mess = "CassandraUserManagerImpl.getUserByEmail: query validation exception... Command: " + com;
193                         System.out.println(mess);
194                         log.error(mess);
195                         log.error(e.getLocalizedMessage(), e.getCause());
196                         return null;
197                 }
198                 return user;
199         }
200
201         public List<User> findAllUsers() {
202                 List<User> list = new ArrayList<User>();
203                 String com = "SELECT * FROM Users;";
204                 try {
205                         ResultSet results = session.execute(com);
206                         List<Row> rows = results.all();
207                         for (Row r : rows) {
208                                 list.add(buildUser(r));
209                         }
210                 } catch (QueryExecutionException e) {
211                         String mess = "CassandraUserManagerImpl.findAllUsers: query execution exception...";
212                         System.out.println(mess);
213                         log.error(mess);
214                         log.error(e.getLocalizedMessage(), e.getCause());
215                         return null;
216                 } catch (QueryValidationException e) {
217                         String mess = "CassandraUserManagerImpl.findAllUsers: query validation exception... Command: " + com;
218                         System.out.println(mess);
219                         log.error(mess);
220                         log.error(e.getLocalizedMessage(), e.getCause());
221                         return null;
222                 }
223                 return list;
224         }
225
226         private User buildUser(Row r) {
227                 User u = new User();
228                 u.setFullName(r.getString("Name"));
229                 u.setId(new Long(r.getLong("Id")));
230                 u.setEmail(r.getString("Email"));
231                 u.setPassword(r.getString("Password"));
232                 u.setOrganisation(r.getString("Organisation"));
233                 u.setPosition(r.getString("Position"));
234                 u.setUpdateByEmail(r.getBool("SignedToList"));
235                 u.setRegistrationDate(new Date(r.getLong("RegistrationDate")));
236                 return u;
237         }
238 }