Project

General

Profile

1
package eu.dnetlib.openaire.user.registeredService;
2

    
3
import eu.dnetlib.openaire.user.pojos.RegisteredService;
4
import eu.dnetlib.openaire.user.store.DataSourceConnector;
5
import eu.dnetlib.openaire.user.store.Statement;
6
import org.springframework.beans.factory.annotation.Autowired;
7
import org.springframework.stereotype.Component;
8

    
9
import java.sql.Connection;
10
import java.sql.PreparedStatement;
11
import java.sql.ResultSet;
12
import java.sql.SQLException;
13
import java.util.ArrayList;
14
import java.util.List;
15

    
16
@Component(value = "registeredServiceSQL")
17
public class RegisteredServiceSQL implements RegisteredServiceDao {
18

    
19
    @Autowired
20
    DataSourceConnector dataSourceConnector;
21

    
22
    private final static String INSERT = "INSERT INTO registered_service (" +
23
            "client_id, " +
24
            "owner, " +
25
            "name, " +
26
            "creation_date, " +
27
            "registration_access_token" +
28
            ") VALUES (?,?,?,?,?)";
29

    
30
    private final static String UPDATE = "UPDATE registered_service SET " +
31
            "name = ? " +
32
            "WHERE client_id = ?";
33

    
34
    private final static String DELETE = "DELETE FROM registered_service WHERE id = ?";
35

    
36
    private final static String SELECT = "SELECT * FROM registered_service WHERE owner = ?";
37

    
38
    private final static String COUNT = "SELECT COUNT(*) FROM registered_service WHERE owner = ?";
39
    @Override
40
    public int insertRegisteredService(final RegisteredService registeredService)
41
            throws SQLException {
42
        return executeUpdate(INSERT, new Statement.Initializer() {
43
            @Override
44
            public void prepare(PreparedStatement stmt)
45
                    throws SQLException {
46
                stmt.setString(1, registeredService.getClientId());
47
                stmt.setString(2, registeredService.getOwner());
48
                stmt.setString(3, registeredService.getName());
49
                stmt.setTimestamp(4, registeredService.getDate());
50
                stmt.setString(5, registeredService.getRegistrationAccessToken());
51
            }
52
        });
53
    }
54

    
55
    @Override
56
    public boolean update(final RegisteredService registeredService) throws SQLException {
57
        System.out.println("UPDATE registered_service SET " +
58
                        "name = " + registeredService.getName() +
59
                        "WHERE client_id = " +  registeredService.getClientId());
60
        return executeUpdate(UPDATE, new Statement.Initializer() {
61

    
62
            @Override
63
            public void prepare(PreparedStatement stmt)
64
                    throws SQLException {
65
                stmt.setString(1, registeredService.getName());
66
                stmt.setString(2, registeredService.getClientId());
67
            }
68
        }) > 0;
69
    }
70

    
71
    @Override
72
    public boolean delete(final int id)
73
            throws SQLException {
74
        System.out.println("DELETE FROM registered_service WHERE id = " + id);
75

    
76
        return executeUpdate(DELETE, new Statement.Initializer() {
77
            @Override
78
            public void prepare(PreparedStatement stmt)
79
                    throws SQLException {
80
                stmt.setInt(1, id);
81
            }
82
        }) > 0;
83
    }
84

    
85
    @Override
86
    public RegisteredService fetchRegisteredServiceById(final int id) throws SQLException {
87
        System.out.println("SELECT * FROM registered_service WHERE id = " +id);
88

    
89
        List<RegisteredService> registeredServices = executeQuery("SELECT * FROM registered_service WHERE id = ? ", new Statement.Initializer() {
90
            @Override
91
            public void prepare(PreparedStatement stmt) throws SQLException {
92
                stmt.setInt(1, id);
93
            }
94
        });
95

    
96
        if (registeredServices.isEmpty()) {
97
            return null;
98
        }
99

    
100
        return registeredServices.get(0);
101
    }
102

    
103
    @Override
104
    public List<RegisteredService> fetchAllRegisteredServicesByOwner(final String owner) throws SQLException {
105
        List<RegisteredService> registeredServices = executeQuery(SELECT, new Statement.Initializer() {
106
            @Override
107
            public void prepare(PreparedStatement stmt) throws SQLException {
108
                stmt.setString(1, owner);
109
            }
110
        });
111
        return registeredServices;
112
    }
113

    
114

    
115
    protected List<RegisteredService> executeQuery(String sql, Statement.Initializer init)
116
            throws SQLException {
117
        Connection connection = dataSourceConnector.getDatasource().getConnection();
118

    
119
        try {
120
            PreparedStatement stmt = connection.prepareStatement(sql);
121
            init.prepare(stmt);
122

    
123
            ResultSet set = stmt.executeQuery();
124

    
125
            try {
126
                List<RegisteredService> results = new ArrayList<>();
127

    
128
                while (set.next())
129
                    results.add(fromResultSet(set));
130

    
131
                return results;
132
            } finally {
133
                set.close();
134
            }
135
        } finally {
136
            connection.close();
137
        }
138
    }
139

    
140
    protected List<RegisteredService> executeQuery(String sql)
141
            throws SQLException {
142
        return executeQuery(sql, Statement.emptyInitializer());
143
    }
144

    
145
    protected RegisteredService fromResultSet(ResultSet set) throws SQLException {
146
        RegisteredService registeredService = new RegisteredService();
147

    
148
        registeredService.setId(set.getString("id"));
149
        registeredService.setClientId(set.getString("client_id"));
150
        registeredService.setOwner(set.getString("owner"));
151
        registeredService.setName(set.getString("name"));
152
        registeredService.setDate(set.getTimestamp("creation_date"));
153
        registeredService.setRegistrationAccessToken(set.getString("registration_access_token"));
154

    
155
        return registeredService;
156
    }
157

    
158
    protected int executeUpdate(String sql, Statement.Initializer init)
159
            throws SQLException {
160
        Connection connection = dataSourceConnector.getDatasource().getConnection();
161
        try {
162
            PreparedStatement stmt = connection.prepareStatement(sql);
163
            init.prepare(stmt);
164
            return stmt.executeUpdate();
165
        } finally {
166
            connection.close();
167
        }
168
    }
169

    
170
    public long countRegisteredServices(String owner) throws SQLException {
171
        long numberOfRegisteredServices = executeCount(COUNT, new Statement.Initializer() {
172
            @Override
173
            public void prepare(PreparedStatement stmt) throws SQLException {
174
                stmt.setString(1, owner);
175
            }
176
        });
177

    
178
        return numberOfRegisteredServices;
179
    }
180

    
181
    public long executeCount(String sql, Statement.Initializer init) throws SQLException {
182
        Connection connection = dataSourceConnector.getDatasource().getConnection();
183

    
184
        try {
185
            PreparedStatement stmt = connection.prepareStatement(sql);
186
            init.prepare(stmt);
187

    
188
            ResultSet set = stmt.executeQuery();
189

    
190
            try {
191
                if (set.next())
192
                    return set.getLong(1);
193
                throw new IllegalArgumentException(stmt.toString());
194
            } finally {
195
                set.close();
196
            }
197
        } finally {
198
            connection.close();
199
        }
200
    }
201
}
(3-3/3)