/* * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */ package com.megatim.queryadhoc.query.abstracts; import com.megatim.queryadhoc.connection.abtracts.DataBaseConnection; import com.megatim.queryadhoc.model.ConnectionParameter; import com.megatim.queryadhoc.model.DbColumnDescription; import com.megatim.queryadhoc.utils.DataFormatter; import java.io.BufferedWriter; import java.io.File; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import java.sql.Connection; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Collections; import java.util.List; import java.util.Map; /** * * @author ASUS */ public abstract class DatabaseSelectQuery { protected final ConnectionParameter connectionParameter; public DatabaseSelectQuery(ConnectionParameter connectionParameter) { this.connectionParameter = connectionParameter; } public ConnectionParameter getConnectionParameter() { return connectionParameter; } protected List> execute(DataBaseConnection dbConnection, String tableName, List columnsToSelect) throws Exception { List> data = select(tableName, dbConnection.getConnection(), columnsToSelect); dbConnection.closeConnection(); return data; } protected File writeToFile(List> data, List columnsDescription, String outputDir, String codeTypeFichier, String tableName, boolean shouldTruncate) throws Exception { Collections.sort(columnsDescription, (DbColumnDescription c1, DbColumnDescription c2) -> Integer.valueOf(c1.getPosition()).compareTo(c2.getPosition())); Path path = constructFileName(codeTypeFichier, outputDir); try ( BufferedWriter bufferWriter = Files.newBufferedWriter(path, StandardCharsets.UTF_8, StandardOpenOption.APPEND, StandardOpenOption.CREATE, StandardOpenOption.SYNC)) { for (Map map : data) { String line = DataFormatter.formatDatum(map, columnsDescription, tableName, shouldTruncate); bufferWriter.write(line + System.lineSeparator()); } } return path.toFile(); } private Path constructFileName(String codeTypeFichier, String exportDirectory) { LocalDateTime date = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); Path path = Paths.get(exportDirectory, codeTypeFichier.toUpperCase() + date.format(formatter) + ".txt"); return path; } protected abstract List> select(String tableName, Connection connection, List columnsToSelect) throws Exception; }