source: DASISH/t5.6/backend/annotator-backend/trunk/annotator-backend/src/main/java/eu/dasish/annotation/backend/dao/impl/JdbcUserDao.java @ 4264

Last change on this file since 4264 was 4264, checked in by olhsha, 10 years ago

replacing "admin_rights" with the "account" in the principals table. A principal can be user, developer or admin. A developer or and admin have access to the debugging uri's. A debugging request GET all annotation infos is added.

File size: 8.5 KB
Line 
1/*
2 * Copyright (C) 2013 DASISH
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
17 */
18package eu.dasish.annotation.backend.dao.impl;
19
20import eu.dasish.annotation.backend.dao.UserDao;
21import eu.dasish.annotation.schema.User;
22import java.sql.ResultSet;
23import java.sql.SQLException;
24import java.util.HashMap;
25import java.util.List;
26import java.util.Map;
27import java.util.UUID;
28import javax.sql.DataSource;
29import org.springframework.jdbc.core.RowMapper;
30
31/**
32 *
33 * @author olhsha
34 */
35public class JdbcUserDao extends JdbcResourceDao implements UserDao {
36
37    public JdbcUserDao(DataSource dataSource) {
38        setDataSource(dataSource);
39        internalIdName = principal_id;
40        resourceTableName = principalTableName;
41    }
42
43    @Override
44    public void setServiceURI(String serviceURI){
45        _serviceURI = serviceURI;
46    }
47   
48    /////////// GETTERS //////////////////////
49    @Override 
50    public User getUser(Number internalID){
51        StringBuilder sql  = new StringBuilder("SELECT ");
52        sql.append(principalStar).append(" FROM ").append(principalTableName).append(" WHERE ").append(principal_id).append("= ? LIMIT 1");
53        List<User> result = getSimpleJdbcTemplate().query(sql.toString(), userRowMapper, internalID);
54        return (!result.isEmpty() ? result.get(0) : null);
55     }
56   
57    private final RowMapper<User> userRowMapper = new RowMapper<User>() {
58        @Override
59        public User mapRow(ResultSet rs, int rowNumber) throws SQLException {
60            User result = new User();
61            result.setURI(externalIDtoURI(rs.getString(external_id)));
62            result.setDisplayName(rs.getString(principal_name));
63            result.setEMail(rs.getString(e_mail));
64            return result;
65        }
66    };
67   
68    @Override 
69    public User getUserByInfo(String eMail){
70        StringBuilder sql  = new StringBuilder("SELECT ");
71        sql.append(principalStar).append(" FROM ").append(principalTableName).append(" WHERE ").append(e_mail).append("= ? LIMIT 1");
72        List<User> result = getSimpleJdbcTemplate().query(sql.toString(), userRowMapper, eMail.toLowerCase());
73        return (!result.isEmpty() ? result.get(0) : null);
74     }
75   
76   
77   
78    @Override
79    public boolean userIsInUse(Number userID) {
80        StringBuilder sqlPermissions  = new StringBuilder("SELECT ");
81        sqlPermissions.append(principal_id).append(" FROM ").append(permissionsTableName).append(" WHERE ").append(principal_id).append("= ? LIMIT 1");
82        List<Number> resultTargets = getSimpleJdbcTemplate().query(sqlPermissions.toString(), principalIDRowMapper, userID);
83        if (resultTargets.size() > 0) {
84            return true;
85        };
86       
87        StringBuilder sqlNotebooks  = new StringBuilder("SELECT ");
88        sqlNotebooks.append(notebookOwner_id).append(" FROM ").append(notebookTableName).append(" WHERE ").append(notebookOwner_id).append("= ? LIMIT 1");
89        List<Number> resultNotebooks = getSimpleJdbcTemplate().query(sqlNotebooks.toString(), notebookOwnerIDRowMapper, userID);
90        if (resultNotebooks.size() > 0) {
91            return true;
92        };
93        return false;
94    }
95   
96   
97    @Override 
98    public boolean userExists(User user){
99        String emailCriterion = user.getEMail().toLowerCase();
100        StringBuilder sqlTargets  = new StringBuilder("SELECT ");
101        sqlTargets.append(principal_id).append(" FROM ").append(principalTableName).append(" WHERE ").append(e_mail).append("= ? LIMIT 1");
102        List<Number> resultTargets = getSimpleJdbcTemplate().query(sqlTargets.toString(), principalIDRowMapper, emailCriterion);
103        if (resultTargets.size() > 0) {
104            return true;
105        }
106        else {
107            return false;
108        }
109    }
110
111    @Override 
112    public String getRemoteID(Number internalID){
113        StringBuilder requestDB  = new StringBuilder("SELECT ");
114        requestDB.append(remote_id).append(" FROM ").append(principalTableName).append(" WHERE ").append(principal_id).append("= ? LIMIT 1");
115        List<String> result = getSimpleJdbcTemplate().query(requestDB.toString(), remoteIDRowMapper, internalID);
116       return  (result.size() > 0) ? result.get(0) :null;
117    }
118    private final RowMapper<String> remoteIDRowMapper = new RowMapper<String>() {
119        @Override
120        public String mapRow(ResultSet rs, int rowNumber) throws SQLException {
121            return rs.getString(remote_id);
122        }
123    };
124   
125    @Override
126    public Number getUserInternalIDFromRemoteID(String remoteID){
127       StringBuilder requestDB  = new StringBuilder("SELECT ");
128       requestDB.append(principal_id).append(" FROM ").append(principalTableName).append(" WHERE ").append(remote_id).append("= ? LIMIT 1");
129       List<Number> result = getSimpleJdbcTemplate().query(requestDB.toString(), internalIDRowMapper, remoteID);
130       return  (result.size() > 0) ? result.get(0) :null; 
131    }
132   
133    @Override
134    public String getTypeOfUserAccount(Number internalID){
135       StringBuilder requestDB  = new StringBuilder("SELECT ");
136       requestDB.append(account).append(" FROM ").append(principalTableName).append(" WHERE ").append(principal_id).append("= ? LIMIT 1");
137       List<String> result = getSimpleJdbcTemplate().query(requestDB.toString(), adminRightsRowMapper, internalID);
138       return  (result.size() > 0) ? result.get(0) :null;   
139    }
140     private final RowMapper<String> adminRightsRowMapper = new RowMapper<String>() {
141        @Override
142        public String mapRow(ResultSet rs, int rowNumber) throws SQLException {
143            return rs.getString(account);
144        }
145    };
146   
147     ///////////////////// ADDERS ////////////////////////////
148     @Override
149     public Number addUser(User user, String remoteID){
150        UUID externalIdentifier = UUID.randomUUID();
151        String newExternalIdentifier = externalIdentifier.toString();
152        Map<String, Object> params = new HashMap<String, Object>();
153        params.put("externalId", newExternalIdentifier);
154        params.put("principalName", user.getDisplayName());
155        params.put("email", user.getEMail().toLowerCase());
156        params.put("remoteID", remoteID);
157        StringBuilder sql = new StringBuilder("INSERT INTO ");
158        sql.append(principalTableName).append("(").append(external_id).append(",").append(principal_name).append(",").append(e_mail).append(",").append(remote_id).append(" ) VALUES (:externalId, :principalName, :email, :remoteID)");
159        final int affectedRows = getSimpleJdbcTemplate().update(sql.toString(), params);
160        return (affectedRows>0 ? getInternalID(externalIdentifier) : null);
161     }
162     
163     ////////// UPDATERS ///////////////////////
164      @Override
165      public Number updateUser(User user){
166        Number principalID = this.getInternalIDFromURI(user.getURI());
167        StringBuilder sql = new StringBuilder("UPDATE ");
168        sql.append(principalTableName).append(" SET ").
169                append(e_mail).append("= '").append(user.getEMail().toLowerCase()).append("',").
170                append(principal_name).append("= '").append(user.getDisplayName()).append("' ").
171                append(" WHERE ").append(principal_id).append("= ?");
172        int affectedRows = getSimpleJdbcTemplate().update(sql.toString(), principalID);
173        return principalID;
174      }
175     
176     
177     ////// DELETERS ////////////
178     @Override
179     public int deleteUser(Number internalID){
180           
181        StringBuilder sql = new StringBuilder("DELETE FROM ");
182        sql.append(principalTableName).append(" where ").append(principal_id).append(" = ?");
183        return getSimpleJdbcTemplate().update(sql.toString(), internalID);
184
185     }
186     
187    @Override 
188    public int deleteUserSafe(Number internalID){
189          if (userIsInUse(internalID)) {
190            return 0;
191        }       
192        StringBuilder sql = new StringBuilder("DELETE FROM ");
193        sql.append(principalTableName).append(" where ").append(principal_id).append(" = ?");
194        return getSimpleJdbcTemplate().update(sql.toString(), internalID);
195
196     }
197}
Note: See TracBrowser for help on using the repository browser.