/******************************************************************************* * Copyright 2013-2016 alladin-IT GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package at.alladin.rmbt.db; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Timestamp; import java.util.Calendar; import java.util.UUID; import at.alladin.rmbt.shared.Helperfunctions; public class Client { private long uid; private UUID uuid; private int client_type_id; private String client_type_name; private Timestamp time; private Calendar time_zone; private int sync_group_id; private String sync_code; private Connection conn = null; private String errorLabel = ""; private boolean error = false; private boolean tcAccepted; private int tcAcceptedVersion; public Client(final Connection conn) { reset(); this.conn = conn; } public Client(final Connection conn, final long uid, final UUID uuid, final int client_type_id, final Timestamp time, final Calendar time_zone, final int sync_group_id, final String sync_code, final boolean tcAccepted, final int tcAcceptedVersion) { reset(); this.conn = conn; this.uid = uid; this.uuid = uuid; this.client_type_id = client_type_id; this.time = time; this.time_zone = time_zone; this.sync_group_id = sync_group_id; this.sync_code = sync_code; this.tcAccepted = tcAccepted; this.tcAcceptedVersion = tcAcceptedVersion; } public void reset() { uid = 0; uuid = null; client_type_id = 0; client_type_name = ""; time = null; time_zone = null; sync_group_id = 0; sync_code = ""; tcAccepted = false; resetError(); } private void resetError() { error = false; errorLabel = ""; } private void setError(final String errorLabel) { error = true; this.errorLabel = errorLabel; } public long getClientByUuid(final UUID uuid) { resetError(); try { final PreparedStatement st = conn .prepareStatement("SELECT client.*, client_type.name AS client_type_name FROM client , client_type WHERE client.client_type_id = client_type.uid AND client.uuid = CAST ( ? AS uuid)"); st.setString(1, uuid.toString()); final ResultSet rs = st.executeQuery(); if (rs.next()) { uid = rs.getLong("uid"); this.uuid = UUID.fromString(rs.getString("uuid")); client_type_id = rs.getInt("client_type_id"); client_type_name = rs.getString("client_type_name"); time = rs.getTimestamp("time"); time_zone = Helperfunctions.getTimeWithTimeZone(Helperfunctions.getTimezoneId()); sync_group_id = rs.getInt("sync_group_id"); sync_code = rs.getString("sync_code"); tcAccepted = rs.getBoolean("terms_and_conditions_accepted"); tcAcceptedVersion = rs.getInt("terms_and_conditions_accepted_version"); } else { // setError("ERROR_DB_GET_CLIENT"); // errorList.addError(MessageFormat.format(labels.getString("ERROR_DB_GET_CLIENT"), // new Object[] {uuid})); } rs.close(); st.close(); } catch (final SQLException e) { e.printStackTrace(); setError("ERROR_DB_GET_CLIENT_SQL"); // errorList.addError("ERROR_DB_GET_CLIENT_SQL"); } return uid; } public boolean getClientByUid(final long uid) { resetError(); try { final PreparedStatement st = conn .prepareStatement("SELECT client.*, client_type.name AS client_type_name FROM client , client_type WHERE client.client_type_id = client_type.uid AND client.uid = ?"); st.setLong(1, uid); final ResultSet rs = st.executeQuery(); if (rs.next()) { this.uid = rs.getLong("uid"); uuid = UUID.fromString(rs.getString("uuid")); client_type_id = rs.getInt("client_type_id"); client_type_name = rs.getString("client_type_name"); time = rs.getTimestamp("time"); sync_group_id = rs.getInt("sync_group_id"); sync_code = rs.getString("sync_code"); tcAccepted = rs.getBoolean("terms_and_conditions_accepted"); tcAcceptedVersion = rs.getInt("terms_and_conditions_accepted_version"); } else setError("ERROR_DB_GET_CLIENT"); // errorList.addError(MessageFormat.format(labels.getString("ERROR_DB_GET_CLIENT"), // new Object[] {uuid})); rs.close(); st.close(); } catch (final SQLException e) { e.printStackTrace(); setError("ERROR_DB_GET_CLIENT_SQL"); // errorList.addError("ERROR_DB_GET_CLIENT_SQL"); } return !error; } public UUID storeClient(UUID uuid) { resetError(); try { PreparedStatement st; if (uuid == null) uuid = UUID.randomUUID(); st = conn.prepareStatement( "INSERT INTO client(uuid, client_type_id, time, sync_group_id, sync_code, terms_and_conditions_accepted, terms_and_conditions_accepted_version)" + "VALUES( CAST( ? AS UUID), ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS); st.setString(1, uuid.toString()); st.setInt(2, client_type_id); st.setTimestamp(3, time); if (sync_group_id > 0) st.setInt(4, sync_group_id); else st.setObject(4, null); if (sync_code.length() > 0) st.setString(5, sync_code); else st.setObject(5, null); st.setBoolean(6, tcAccepted); st.setInt(7, tcAcceptedVersion); // System.out.println(st.toString()); final int affectedRows = st.executeUpdate(); if (affectedRows == 0) { uid = 0; uuid = null; client_type_id = 0; client_type_name = ""; time = null; setError("ERROR_DB_STORE_CLIENT"); // errorList.addError(labels.getString("ERROR_DB_STORE_CLIENT")); } else { final ResultSet rs = st.getGeneratedKeys(); if (rs.next()) // Retrieve the auto generated key(s). uid = rs.getLong(1); } st.close(); } catch (final SQLException e) { setError("ERROR_DB_STORE_CLIENT_SQL"); // errorList.addError(labels.getString("ERROR_DB_STORE_CLIENT_SQL")); e.printStackTrace(); } return uuid; } public int getTypeId(final String clientType) { resetError(); int id = 0; try { final PreparedStatement st = conn.prepareStatement("SELECT uid FROM client_type WHERE name = ?"); st.setString(1, clientType.toUpperCase()); final ResultSet rs = st.executeQuery(); if (rs.next()) id = rs.getInt(1); else setError("ERROR_DB_GET_CLIENTTYPE"); // errorList.addError(MessageFormat.format(labels.getString("ERROR_DB_GET_CLIENTTYPE"), // new Object[] {clientType})); rs.close(); st.close(); } catch (final SQLException e) { setError("ERROR_DB_GET_CLIENTTYPE_SQL"); // errorList.addError(labels.getString("ERROR_DB_GET_CLIENTTYPE_SQL")); e.printStackTrace(); } return id; } public int updateTcAcceptedVersion(final UUID uuid, final int tcAcceptedVersion) { resetError(); int id = 0; try { final PreparedStatement st = conn.prepareStatement("UPDATE client SET terms_and_conditions_accepted_version = ? WHERE uuid = ? ::UUID"); st.setInt(1, tcAcceptedVersion); st.setString(2, uuid.toString()); st.executeUpdate(); st.close(); } catch (final SQLException e) { setError("ERROR_DB_STORE_CLIENT_SQL"); e.printStackTrace(); } return id; } public int updateLastSeen(final UUID uuid) { resetError(); int id = 0; try { final PreparedStatement st = conn.prepareStatement("UPDATE client SET last_seen = NOW() WHERE uuid = ? ::UUID"); st.setString(1, uuid.toString()); st.executeUpdate(); st.close(); } catch (final SQLException e) { setError("ERROR_DB_STORE_CLIENT_SQL"); e.printStackTrace(); } return id; } public boolean hasError() { return error; } public String getError() { return errorLabel; } public long getUid() { return uid; } public UUID getUuid() { return uuid; } public int getClient_type_id() { return client_type_id; } public String getClient_type_name() { return client_type_name; } public Timestamp getTime() { return time; } public Calendar getTimeZone() { return time_zone; } public void setUid(final long uid) { this.uid = uid; } public void setUuid(final UUID uuid) { this.uuid = uuid; } public int getSync_group_id() { return sync_group_id; } public String getSync_code() { return sync_code; } public void setTcAccepted(final boolean tcAccepted) { this.tcAccepted = tcAccepted; } public void setTcAcceptedVersion(final int tcAcceptedVersion) { this.tcAcceptedVersion = tcAcceptedVersion; } public boolean isTcAccepted() { return tcAccepted; } public int getTcAcceptedVersion() { return tcAcceptedVersion; } public void setClient_type_id(final int client_type_id) { this.client_type_id = client_type_id; } public void setTime(final Timestamp time) { this.time = time; } public void setTimeZone(final Calendar time_zone) { this.time_zone = time_zone; } public void setSync_group_id(final int sync_group_id) { this.sync_group_id = sync_group_id; } public void setSync_code(final String sync_code) { this.sync_code = sync_code; } }