Kenmegne
2025-12-10 e9d80d486b912144b59ebd5939d4837105b37b99
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
 * 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<Map<String, Object>> execute(DataBaseConnection dbConnection, String tableName, List<String> columnsToSelect) throws Exception {
        List<Map<String, Object>> data = select(tableName, dbConnection.getConnection(), columnsToSelect);
        dbConnection.closeConnection();
 
        return data;
    }
 
    protected File writeToFile(List<Map<String, Object>> data, List<DbColumnDescription> 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<String, Object> 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<Map<String, Object>> select(String tableName, Connection connection, List<String> columnsToSelect) throws Exception;
}