Projekt

Obecné

Profil

Stáhnout (3.9 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 configuration - configuration from which table will be created.
35
     * @return List of contingencyTableRow.
36
     */
37
    @Override
38
    public List<ContingencyTableRow> getContingencyTableRow(Configuration configuration) {
39
        long startTime = System.nanoTime();
40
        Map<String, TableColumn> tableColumns = this.databaseInterface.executeQueryAndReturnTableColumns(
41
                configuration.getAssembly().getSQLQuery()
42
        );
43
        long stopTime = System.nanoTime();
44
        System.out.println("Select:" + TimeUnit.MILLISECONDS.convert((stopTime - startTime), TimeUnit.NANOSECONDS));
45
        List<NameUserName> rowNames = new ArrayList<>();
46
        List<NameUserName> columnNames = new ArrayList<>();
47
        List<ValueFunction> valueFunctions = new ArrayList<>();
48

    
49
        // sort parameters in configuration to have them in order set by user
50
        Collections.sort(configuration.getParametersInConfiguration());
51

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

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

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

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