Projekt

Obecné

Profil

Stáhnout (4 KB) Statistiky
| Větev: | Revize:
1
package vldc.aswi.service;
2

    
3
import lombok.extern.slf4j.Slf4j;
4
import org.springframework.beans.factory.annotation.Autowired;
5
import org.springframework.stereotype.Service;
6
import vldc.aswi.database.DatabaseInterface;
7
import vldc.aswi.domain.Assembly;
8
import vldc.aswi.domain.Configuration;
9
import vldc.aswi.domain.Function;
10
import vldc.aswi.domain.parameter.ParameterInConfiguration;
11
import vldc.aswi.model.table.NameUserName;
12
import vldc.aswi.model.table.TableColumn;
13
import vldc.aswi.model.table.ValueFunction;
14
import vldc.aswi.model.table.contingencyTable.ContingencyTableRow;
15
import vldc.aswi.utils.Converter;
16

    
17
import javax.sql.DataSource;
18
import java.util.*;
19
import java.util.concurrent.TimeUnit;
20

    
21
/**
22
 * Manager for SqlQuery.
23
 */
24
@Service
25
@Slf4j
26
public class SqlQueryManagerImpl implements SqlQueryManager{
27

    
28
    /** Autowired databaseInterface component. */
29
    @Autowired
30
    private DatabaseInterface databaseInterface;
31
    
32
    /**
33
     * Get list of  contingencyTableRow.
34
     * @param sqlQuery
35
     * @param parameterInConfigurations
36
     * @return List of contingencyTableRow.
37
     */
38
    @Override
39
    public List<ContingencyTableRow> getContingencyTableRow(String sqlQuery, List<ParameterInConfiguration> parameterInConfigurations) {
40
        long startTime = System.nanoTime();
41
        Map<String, TableColumn> tableColumns = this.databaseInterface.executeQueryAndReturnTableColumns(sqlQuery);
42
        long stopTime = System.nanoTime();
43
        System.out.println("Select:" + TimeUnit.MILLISECONDS.convert((stopTime - startTime), TimeUnit.NANOSECONDS));
44
        List<NameUserName> rowNames = new ArrayList<>();
45
        List<NameUserName> columnNames = new ArrayList<>();
46
        List<ValueFunction> valueFunctions = new ArrayList<>();
47

    
48
        // Create a copy of list.
49
        List<ParameterInConfiguration> copiedParametersInConfiguration = new ArrayList<>(parameterInConfigurations);
50

    
51
        // sort parameters in configuration to have them in order set by user
52
        Collections.sort(copiedParametersInConfiguration);
53

    
54
        // TODO: 28.05.2020 map would be better
55
        for(ParameterInConfiguration parameterInConfiguration : copiedParametersInConfiguration) {
56
            if (parameterInConfiguration.getLocation() != null && parameterInConfiguration.getLocation().getName().equals("Řádek")) {
57
                rowNames.add(new NameUserName(parameterInConfiguration.getParameter().getNameOfSelect().toUpperCase(),
58
                        parameterInConfiguration.getColumnName()));
59
            }
60
            else if (parameterInConfiguration.getLocation() != null && parameterInConfiguration.getLocation().getName().equals("Sloupec")) {
61
                columnNames.add(new NameUserName(parameterInConfiguration.getParameter().getNameOfSelect().toUpperCase(),
62
                        parameterInConfiguration.getColumnName()));
63
            }
64
            else if(parameterInConfiguration.getLocation() != null && parameterInConfiguration.getLocation().getName().equals("Hodnota")) {
65
                for (Function function : parameterInConfiguration.getFunctions()) {
66
                    valueFunctions.add(new ValueFunction(parameterInConfiguration.getParameter().getNameOfSelect().toUpperCase(),
67
                            function.getName().toUpperCase()));
68
                }
69
            }
70
        }
71

    
72
        Converter converter = new Converter();
73
        return converter.convertTableColumnsToContingencyTableRows(tableColumns, rowNames, columnNames, valueFunctions);
74
    }
75

    
76
    /**
77
     * Validate given SQL query.
78
     * @param sqlQuery - Validated SQL query.
79
     * @return true if SQL query is ok, false if not.
80
     */
81
    @Override
82
    public boolean validateSQLQuery(String sqlQuery) {
83
        return this.databaseInterface.validateSQLQuery(sqlQuery);
84
    }
85

    
86
    /**
87
     * Get list of table column names from SQL query.
88
     * @param sqlQuery - SQL query.
89
     * @return List of table column names.
90
     */
91
    public List<String> getNameOfColumnsFromQuery(String sqlQuery) {
92
        return this.databaseInterface.getNameOfColumnsFromQuery(sqlQuery);
93
    }
94
}
(14-14/16)