|
|
@ -3,26 +3,17 @@ package org.ros.chatto.service; |
|
|
|
import java.io.IOException; |
|
|
|
import java.nio.charset.StandardCharsets; |
|
|
|
import java.sql.Connection; |
|
|
|
import java.sql.DriverManager; |
|
|
|
import java.sql.PreparedStatement; |
|
|
|
import java.sql.ResultSet; |
|
|
|
import java.sql.SQLException; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
import javax.persistence.EntityManager; |
|
|
|
import javax.persistence.PersistenceContext; |
|
|
|
import javax.transaction.Transactional; |
|
|
|
|
|
|
|
import org.hibernate.Session; |
|
|
|
import org.ros.chatto.model.ApplicationStatus; |
|
|
|
import org.ros.chatto.model.UserSession; |
|
|
|
import org.ros.chatto.repository.UserSessionRepository; |
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
|
import org.springframework.boot.context.event.ApplicationReadyEvent; |
|
|
|
import org.springframework.context.annotation.PropertySource; |
|
|
@ -37,77 +28,34 @@ import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
public class DBInitializerService { |
|
|
|
|
|
|
|
@Value("${spring.datasource.url}") |
|
|
|
private String url; |
|
|
|
|
|
|
|
@Value("${spring.datasource.username}") |
|
|
|
private String userName; |
|
|
|
|
|
|
|
@Value("${spring.datasource.password}") |
|
|
|
private String password; |
|
|
|
|
|
|
|
@Value("${database-name}") |
|
|
|
private String dbName; |
|
|
|
|
|
|
|
@Value("${num-tables}") |
|
|
|
private String numTablesQuery; |
|
|
|
|
|
|
|
@Value("${test.bindAddress}") |
|
|
|
private String bindAddress; |
|
|
|
|
|
|
|
private Connection connection; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private UserSessionRepository userSessionRepository; |
|
|
|
|
|
|
|
@Value("${reset-sessions}") |
|
|
|
private String resetSessionsQuery; |
|
|
|
|
|
|
|
private final Logger logger = LoggerFactory.getLogger(DBInitializerService.class); |
|
|
|
|
|
|
|
@PersistenceContext |
|
|
|
private EntityManager entityManager; |
|
|
|
|
|
|
|
public void connectDB() throws SQLException { |
|
|
|
connection = DriverManager.getConnection(url, userName, password); |
|
|
|
} |
|
|
|
|
|
|
|
public int getNumTables() throws SQLException { |
|
|
|
PreparedStatement preparedStatement = connection.prepareStatement(numTablesQuery); |
|
|
|
// preparedStatement.get |
|
|
|
preparedStatement.setString(1, dbName); |
|
|
|
ResultSet resultSet = preparedStatement.executeQuery(); |
|
|
|
// while(resultSet.next()) |
|
|
|
// { |
|
|
|
// System.out.println(resultSet.get); |
|
|
|
// } |
|
|
|
resultSet.next(); |
|
|
|
int numTables = resultSet.getInt("num_tables"); |
|
|
|
// System.out.println(numTables); |
|
|
|
return numTables; |
|
|
|
} |
|
|
|
|
|
|
|
public int getNumTables(Connection connection) throws SQLException { |
|
|
|
PreparedStatement preparedStatement = connection.prepareStatement(numTablesQuery); |
|
|
|
// preparedStatement.get |
|
|
|
preparedStatement.setString(1, dbName); |
|
|
|
ResultSet resultSet = preparedStatement.executeQuery(); |
|
|
|
// while(resultSet.next()) |
|
|
|
// { |
|
|
|
// System.out.println(resultSet.get); |
|
|
|
// } |
|
|
|
resultSet.next(); |
|
|
|
int numTables = resultSet.getInt("num_tables"); |
|
|
|
// System.out.println(numTables); |
|
|
|
return numTables; |
|
|
|
} |
|
|
|
|
|
|
|
@EventListener(ApplicationReadyEvent.class) |
|
|
|
@Transactional |
|
|
|
public void doSomethingAfterStartup() throws SQLException, IOException { |
|
|
|
// setProperties(); |
|
|
|
|
|
|
|
// connectDB(); |
|
|
|
|
|
|
|
logger.info("Application Started - running initializer service"); |
|
|
|
// System.out.println("Checking database and application state"); |
|
|
|
|
|
|
|
Session session = entityManager.unwrap(Session.class); |
|
|
|
|
|
|
@ -123,25 +71,10 @@ public class DBInitializerService { |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
// if (getNumTables() == 0) { |
|
|
|
// logger.info("Database is empty. Populating tables and roles"); |
|
|
|
// populateDB(); |
|
|
|
// } |
|
|
|
// closeConnection(); |
|
|
|
|
|
|
|
session.doWork(connection -> { |
|
|
|
logger.info("Resetting all user sessions"); |
|
|
|
resetAllUserSessions(connection); |
|
|
|
}); |
|
|
|
|
|
|
|
resetAllUserSessions(userSessionRepository.findAll()); |
|
|
|
} |
|
|
|
|
|
|
|
private void populateDB() throws SQLException, IOException { |
|
|
|
ScriptUtils.executeSqlScript(connection, |
|
|
|
new EncodedResource(new ClassPathResource("scheme.sql"), StandardCharsets.UTF_8)); |
|
|
|
ScriptUtils.executeSqlScript(connection, |
|
|
|
new EncodedResource(new ClassPathResource("datae.sql"), StandardCharsets.UTF_8)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private void populateDB(Connection connection) throws SQLException, IOException { |
|
|
@ -152,43 +85,10 @@ public class DBInitializerService { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private void populateTables() { |
|
|
|
ScriptUtils.executeSqlScript(connection, |
|
|
|
new EncodedResource(new ClassPathResource("scheme.sql"), StandardCharsets.UTF_8)); |
|
|
|
} |
|
|
|
|
|
|
|
private void populateRoles() { |
|
|
|
ScriptUtils.executeSqlScript(connection, |
|
|
|
new EncodedResource(new ClassPathResource("datae.sql"), StandardCharsets.UTF_8)); |
|
|
|
} |
|
|
|
|
|
|
|
Map<String, Boolean> listToMap(List<ApplicationStatus> applicationStatusList) { |
|
|
|
Map<String, Boolean> statusMap = new HashMap<>(); |
|
|
|
for (ApplicationStatus applicationStatus : applicationStatusList) { |
|
|
|
statusMap.put(applicationStatus.getName(), applicationStatus.isDone()); |
|
|
|
} |
|
|
|
return statusMap; |
|
|
|
} |
|
|
|
|
|
|
|
public void closeConnection() throws SQLException { |
|
|
|
connection.close(); |
|
|
|
} |
|
|
|
|
|
|
|
private void resetAllUserSessions(List<UserSession> userSessionsList) { |
|
|
|
List<UserSession> userSessionsResetList = userSessionsList.stream().map(us -> { |
|
|
|
us.setNumSessions(0); |
|
|
|
us.setOnline(false); |
|
|
|
return us; |
|
|
|
}).collect(Collectors.toList()); |
|
|
|
userSessionRepository.saveAll(userSessionsResetList); |
|
|
|
} |
|
|
|
|
|
|
|
private void resetAllUserSessions(Connection connection) throws SQLException |
|
|
|
{ |
|
|
|
String sql = "update user_sessions set online=0, num_sessions=0"; |
|
|
|
|
|
|
|
PreparedStatement preparedStatement = connection.prepareStatement(sql); |
|
|
|
|
|
|
|
PreparedStatement preparedStatement = connection.prepareStatement(resetSessionsQuery); |
|
|
|
preparedStatement.executeUpdate(); |
|
|
|
} |
|
|
|
|