Kenmegne
7 days ago 23a46b4be35277e06ec89f48730eeb694e686be8
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package com.megatim.fdxcommons.tools.database.tables;
 
import com.megatim.fdxcommons.model.enumeration.Operateur;
import com.megatim.fdxcommons.tools.database.queries.DataWithTokenToDataProductionQuery;
import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxApiColumnDefinitions;
import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction;
import com.megatim.fdxcommons.model.integration.ColumnDefinition;
import com.megatim.fdxcommons.tools.database.queries.FdxApiInsert;
import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
import com.megatim.fdxcommons.tools.database.contrat.TypeFichierUpdateMetaData;
import com.megatim.fdxcommons.tools.database.exceptions.TypeFichierDataBadRequest;
import com.megatim.fdxcommons.tools.database.contrat.TypeFichierInsertMetaData;
import com.megatim.fdxcommons.tools.database.exceptions.MoreThanOneTableDataNotFoundException;
import com.megatim.fdxcommons.tools.database.exceptions.TableDataNotFoundException;
import com.megatim.fdxcommons.tools.database.queries.CreateTableIfNotExistQuery;
import com.megatim.fdxcommons.tools.database.queries.FdxUpdate;
import com.megatim.fdxcommons.tools.database.queries.metadata.ApiTypeFichierInsertData;
import com.megatim.fdxcommons.tools.database.queries.metadata.ApiUpdateTypeFichierData;
import com.megatim.fdxcommons.tools.database.queries.metadata.FdxParsedData;
import com.megatim.fdxcommons.tools.database.queries.metadata.FdxParsedDataRow;
import com.megatim.fdxcommons.tools.database.queries.metadata.FdxTableDefinition;
import com.megatim.fdxcommons.tools.database.queries.metadata.ParsedQueryCriterion;
import com.megatim.fdxcommons.tools.database.tables.appcolumns.TokenColumnDefinition;
 
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.naming.NamingException;
 
/**
 *
 * @author Gabuntu
 */
public class FdxApiTable extends FdxTable {
 
    public FdxApiTable(String codeTypeFichier, String referentielVersion) {
        super(codeTypeFichier, referentielVersion);
    }
 
    @Override
    public void createTable(List<ColumnDefinition> columnsDefinition, Connection connection) throws NamingException, SQLException, Exception {
        new CreateTableIfNotExistQuery(tableName, columnsDefinition, new FdxApiColumnDefinitions(), connection).execute();
    }
 
    @Override
    public void deleteOne(QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
 
        stopIfTableIsReferentiel(connection);
 
        ParsedQueryCriterion parsedQueryCriterion = parsedQueryCriterion(queryCriterion, connection);
 
        stopIfTableDataNotFound(parsedQueryCriterion, connection);
 
        processDelete(parsedQueryCriterion.parsedCriterion(), dataProduction, connection);
 
    }
 
    @Override
    public void updateOne(Map<String, Object> dataToUpdate, QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection)
            throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
 
        stopIfTableIsReferentiel(connection);
 
        ParsedQueryCriterion parsedQueryCriteria = parsedQueryCriterion(queryCriterion, connection);
 
        stopIfTableDataNotFound(parsedQueryCriteria, connection);
        stopIfNotOneTableDataFound(parsedQueryCriteria, connection);
 
        processUpdate(dataToUpdate, parsedQueryCriteria.parsedCriterion(), dataProduction, connection);
 
    }
 
    @Override
    public void update(Map<String, Object> dataToUpdate, QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
 
        stopIfTableIsReferentiel(connection);
 
        ParsedQueryCriterion parsedQueryCriterion = parsedQueryCriterion(queryCriterion, connection);
 
        stopIfTableDataNotFound(parsedQueryCriterion, connection);
 
        processUpdate(dataToUpdate, parsedQueryCriterion.parsedCriterion(), dataProduction, connection);
 
    }
 
    public void insert(List<LinkedHashMap<String, Object>> originalData, Long dataProductionId, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
        FdxParsedData fdxParsedData = new FdxParsedData(originalData, tableDefinition(connection).tableDefinition());
        TypeFichierInsertMetaData insertMetaData = new ApiTypeFichierInsertData(tableName.name(connection), fdxParsedData);
        new FdxApiInsert(connection, dataProductionId).insert(insertMetaData);
    }
 
    public void insert(List<LinkedHashMap<String, Object>> originalData, String token, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
        FdxParsedData fdxParsedData = new FdxParsedData(originalData, tableDefinition(connection).tableDefinition());
        TypeFichierInsertMetaData insertMetaData = new ApiTypeFichierInsertData(tableName.name(connection), fdxParsedData);
        new FdxApiInsert(connection, null).insert(insertMetaData, token);
    }
 
    public void linkDataWithTokenToDataProduction(CommonDataProduction dataProduction, String token, Connection connection) throws Exception {
        new DataWithTokenToDataProductionQuery(connection, dataProduction, token, tableName.name(connection)).execute();
    }
 
    public void deleteDataLinkedToToken(String token, Connection connection) throws TypeFichierDataBadRequest, SQLException, NamingException, Exception {
        ParsedQueryCriterion parsedQueryCriterion = parsedQueryCriterion(new QueryCriterion(new TokenColumnDefinition().name(), token, Operateur.EQUALS, null, Arrays.asList()), connection);
        processPermanentDelete(parsedQueryCriterion.parsedCriterion(), connection);
    }
 
    private void processUpdate(Map<String, Object> dataToUpdate, QueryCriterion queryCriterion, CommonDataProduction dataProduction, Connection connection) throws NamingException, Exception, SQLException {
        FdxTableDefinition tableDefinition = tableDefinition(connection);
 
        FdxParsedDataRow parsedDataRow = new FdxParsedDataRow(dataToUpdate, tableDefinition.tableDefinition());
        TypeFichierUpdateMetaData updateMetaData = new ApiUpdateTypeFichierData(tableName.name(connection), parsedDataRow);
        new FdxUpdate(connection, parsedQueryCriterion(queryCriterion, connection).parsedCriterion(), updateMetaData, dataProduction).update();
    }
 
    private void stopIfTableDataNotFound(ParsedQueryCriterion parsedQueryCriterion, Connection connection) throws TableDataNotFoundException, Exception {
        Long count = count(parsedQueryCriterion.parsedCriterion(), connection);
        if (count == 0) {
            throw new TableDataNotFoundException("Aucune valeur trouvée dans la table pour les critères indiqués");
        }
    }
 
    private void stopIfNotOneTableDataFound(ParsedQueryCriterion parsedQueryCriterion, Connection connection) throws TableDataNotFoundException, Exception {
        Long count = count(parsedQueryCriterion.parsedCriterion(), connection);
        if (count != 1) {
            throw new MoreThanOneTableDataNotFoundException("Plus d'une ligne trouvée dans la table pour les critères indiqués");
        }
    }
 
}