Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 7638be72

Přidáno uživatelem Vojtěch Danišík před asi 4 roky(ů)

re #7886 Assembly validator completed (validating sql query, parameter name in select and parameter location) + displaying temp error message.
Added title for edit / add assembly forms.
Added toString method for all domains.

Zobrazit rozdíly:

src/main/java/vldc/aswi/validators/AssemblyValidator.java
8 8
import vldc.aswi.domain.parameter.Parameter;
9 9
import vldc.aswi.service.SqlQueryManager;
10 10

  
11
import java.util.List;
12

  
11 13
/**
12 14
 * Validator for assembly.
13 15
 */
......
25 27
     */
26 28
    @Override
27 29
    public boolean supports(Class<?> aClass) {
28
        return Assembly.class.equals(aClass);
30
        return Assembly.class.isAssignableFrom(aClass);
29 31
    }
30 32

  
31 33
    /**
......
35 37
     */
36 38
    @Override
37 39
    public void validate(Object obj, Errors errors) {
38
        // TODO: VALIDATING   - https://docs.spring.io/spring/docs/4.1.x/spring-framework-reference/html/validation.html
39
        // TODO: ERROR STYLES - https://mkyong.com/spring-mvc/spring-mvc-form-errors-tag-example/
40 40

  
41 41
        // Get assembly values.
42 42
        Assembly assembly = (Assembly) obj;
43 43

  
44 44
        // Validate SQL Query.
45
        boolean isSQLQueryValid = this.sqlQueryManager.validateSQLQuery(assembly.getSQLQuery());
45
        List<String> columnNames = this.sqlQueryManager.getNameOfColumnsFromQuery(assembly.getSQLQuery());
46 46

  
47
        if (!isSQLQueryValid) {
47
        if (columnNames == null) {
48 48
            errors.rejectValue("SQLQuery", "SQL Query není validní!");
49
            // Field error in object 'assembly' on field 'SQLQuery': rejected value [SELECT SP.fakulta_S as fakulta_studia,
50
            // SP.kodSP_i as program_studia, fn_meaning2(SP.typ,'TYP_OBORU') as typ_studia, fn_meaning2(SP.forma,'FORMA_OBORU_NEW')
51
            // as forma_studia, OS.prijmeni || ' ' || OS.jmeno as osoba, trunc((sysdate - OS.datum_naroz) / 365) as vek, 1 as pocet
52
            // FROM studijni_programy SP, studenti ST, osoby OS WHERE SP.stpridno = ST.stpridno AND ST.osobidno = OS.osobidno AND
53
            // exists (SELECT 'a' FROM studenti_v_roce SVR WHERE ST.os_cislo = SVR.os_cislo AND SVR.rok_platnosti >= '2018') AND
54
            // ROWNUM <= 50];
55
            // codes [SQL Query není validní!.assembly.SQLQuery,SQL Query není validní!.
56
            // SQLQuery,SQL Query není validní!.java.lang.String,SQL Query není validní!]; arguments []; default message [null]
57 49
        }
58 50

  
59
        // TODO: test validation for new assembly -> especially for parameters.
60
        for (int i = 0; i < assembly.getParameters().size(); i++) {
61
            // TODO: Parametr - Pokud název v SQL nebude v dotazu SQL, bude vyhozena chyba.
62
            // TODO: Maybe nejdříve vzít všechny sloupce a potom zkontrolovat jestli obsahuje ten vybranej sloupec ?
63
            // TODO: A kontrolovat to podle ".. as NAZEV_SLOUPCE" nebo jako "SP.TYP_STUDIA ...." ???
51
        if (assembly.getParameters() != null && assembly.getParameters().size() > 0) {
52
            for (int i = 0; i < assembly.getParameters().size(); i++) {
53
                Parameter parameter = assembly.getParameters().get(i);
64 54

  
65
            /*
66
            if (!isParameterNameInSQLQuery) {
67
                errors.rejectValue("parameterSQLName" + i, "Název parametru v SQL query není validní!");
68
            }
69
             */
55
                // Check if parameter's nameOfSelect is contained in column names of SQL query.
56
                if (parameter.getNameOfSelect() == null || !columnNames.stream().anyMatch(parameter.getNameOfSelect()::equalsIgnoreCase)) {
57
                    errors.reject("parameters[" + i + "].nameOfSelect", "Název parametru v SQL query není validní u parametru '" + parameter.getName() + "'!");
58
                }
70 59

  
71
            Parameter parameter = assembly.getParameters().get(i);
72
            // Check if current parameter have at least 1 location.
73
            if (parameter == null || parameter.getLocations() == null || parameter.getLocations().size() == 0) {
74
                errors.rejectValue("parameters[" + i + "].locations", "Není vybrána žádná lokace!");
60
                // Check if current parameter have at least 1 location.
61
                if (parameter.getLocations() == null || parameter.getLocations().size() == 0) {
62
                    errors.rejectValue("parameters[" + i + "].locations", "", "Není vybrána žádná lokace u parametru '" + parameter.getName() + "'!");
63
                }
75 64
            }
76 65
        }
77 66
    }

Také k dispozici: Unified diff