Projekt

Obecné

Profil

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

    
3
import org.springframework.beans.factory.annotation.Autowired;
4
import org.springframework.security.authentication.AnonymousAuthenticationToken;
5
import org.springframework.security.core.Authentication;
6
import org.springframework.security.core.context.SecurityContextHolder;
7
import org.springframework.stereotype.Controller;
8
import org.springframework.ui.ModelMap;
9
import org.springframework.validation.BindingResult;
10
import org.springframework.web.bind.annotation.*;
11
import org.springframework.web.servlet.ModelAndView;
12
import vldc.aswi.domain.Assembly;
13
import vldc.aswi.domain.Configuration;
14
import vldc.aswi.domain.Location;
15
import vldc.aswi.domain.Operator;
16
import vldc.aswi.domain.parameter.ParameterInConfiguration;
17
import vldc.aswi.model.table.contingencyTable.ContingencyTableRow;
18
import vldc.aswi.service.AssemblyManager;
19
import vldc.aswi.service.ConfigurationManager;
20
import vldc.aswi.service.LocationManager;
21
import vldc.aswi.service.SqlQueryManager;
22
import vldc.aswi.utils.AuthControl;
23
import vldc.aswi.utils.Utils;
24

    
25
import javax.validation.Valid;
26
import java.util.ArrayList;
27
import java.util.Comparator;
28
import java.util.List;
29

    
30
/**
31
 * Manager for configuration.
32
 */
33
@Controller
34
public class ConfigurationController extends BasicController{
35

    
36
    /** Autowired location manager. */
37
    @Autowired
38
    private LocationManager locationManager;
39

    
40
    /** Autowired assembly manager. */
41
    @Autowired
42
    private AssemblyManager assemblyManager;
43

    
44
    /** Autowired sql query manager. */
45
    @Autowired
46
    private SqlQueryManager sqlQueryManager;
47

    
48
    /** Autowired configuration manager */
49
    @Autowired
50
    private ConfigurationManager configurationManager;
51

    
52
    /**
53
     * Opens an configuration page after configuration name was clicked
54
     * @param id ID of configuration
55
     * @return modelAndView of page to be shown
56
     */
57
    @GetMapping("/configuration")
58
    public ModelAndView configurationGet(@RequestParam("configurationID") String id) {
59
        ModelAndView modelAndView = new ModelAndView("assembly");
60

    
61
        ModelMap modelMap = modelAndView.getModelMap();
62

    
63
        Configuration configuration = configurationManager.getConfigurationById(Long.parseLong(id));
64

    
65
        // TODO: 04.05.2020 error page when id doesn't exist
66

    
67
        String userName = AuthControl.getUserName();
68

    
69
        if (userName == null) {
70
            // TODO: 04.05.2020 error message, user not authenticated
71
        }
72
        else if (!userName.equals(configuration.getUser().getUsername())) {
73
            // TODO: 04.05.2020 error page wrong user
74
            return new ModelAndView("redirect:/");
75
        }
76

    
77
        List<ParameterInConfiguration> parametersInConfiguration = new ArrayList<>(configuration.getParametersInConfiguration());
78
        configuration.setParametersInConfiguration(parametersInConfiguration);
79

    
80
        initializeFields(configuration);
81
        Comparator<ParameterInConfiguration> comparator = Comparator.comparingInt(o -> o.getParameter().getParameterOrder());
82

    
83
        modelMap.addAttribute("configuration", configuration);
84
        modelMap.addAttribute("comparator", comparator);
85
        modelMap.addAttribute("formAction", "/configuration?configurationID=" + configuration.getId());
86

    
87
        return modelAndView;
88
    }
89

    
90
    /**
91
     * Saves or edits configuration and redirects to the page with configuration
92
     * @param newConfiguration contained with configuration data
93
     * @param id ID of configuration, if empty new configuration is created
94
     * @param bindingResult binding result
95
     * @return modelAndView with redirection
96
     */
97
    @PostMapping("/configuration")
98
    public ModelAndView configurationPost(Configuration newConfiguration,
99
                                           BindingResult bindingResult,
100
                                           @RequestParam("configurationID") String id,
101
                                           @RequestParam(required=false, value="generateTable") String generateTable,
102
                                           @RequestParam(required=false, value="exportXls") String exportXls,
103
                                           @RequestParam(required=false, value="exportPdf") String exportPdf,
104
                                           @RequestParam(required=false, value="saveConfiguration") String saveConfiguration)
105
    {
106
        ModelAndView modelAndView = new ModelAndView();
107

    
108
        if (generateTable != null)
109
        {
110
            prepareForTable(newConfiguration);
111
            System.out.println("Generuj tabulku");
112
            ModelMap modelMap = modelAndView.getModelMap();
113
            modelMap.addAttribute("configurationID", id);
114
            modelMap.addAttribute("contingencyTableRows", this.sqlQueryManager.getContingencyTableRow(newConfiguration));
115
            Comparator<ParameterInConfiguration> comparator = Comparator.comparingInt(o -> o.getParameter().getParameterOrder());
116
            initializeFields(newConfiguration);
117
            modelMap.addAttribute("configuration", newConfiguration);
118
            modelMap.addAttribute("comparator", comparator);
119
            modelMap.addAttribute("formAction", "/configuration?configurationID=" + id);
120
            modelAndView.setViewName("assembly");
121
        }
122
        else if (exportXls != null)
123
        {
124
            System.out.println("Generuj XLS");
125
        }
126
        else if (exportPdf != null)
127
        {
128
            System.out.println("Generuj PDF");
129
        }
130
        else if (saveConfiguration != null)
131
        {
132
            System.out.println("ulož konfiguraci");
133
            Configuration configuration = configurationManager.saveConfiguration(newConfiguration, id);
134

    
135
            initializeFields(configuration);
136

    
137
            modelAndView.setViewName("redirect:/configuration?configurationID=" + configuration.getId());
138
        }
139

    
140
        if (bindingResult.hasErrors()) {
141
            // TODO: 04.05.2020 Error message
142
            modelAndView.setViewName("redirect:/");
143

    
144
            return modelAndView;
145
        }
146

    
147

    
148

    
149

    
150

    
151
        return modelAndView;
152
    }
153

    
154
    /**
155
     * Get method for configuration delete.
156
     * @param id - ID of configuration.
157
     * @return ModelAndView for index.
158
     */
159
    @GetMapping("/configuration_delete")
160
    public ModelAndView configurationDeleteGet(@RequestParam("configurationID") String id) {
161
        ModelAndView modelAndView = new ModelAndView("redirect:/");
162

    
163
        Long configurationId = Utils.tryParseLong(id);
164

    
165
        if (configurationId == null) {
166
            // TODO: print error in index.
167
        }
168

    
169
        boolean success = this.configurationManager.deleteConfiguration(configurationId);
170
        // TODO: check success.
171

    
172
        return modelAndView;
173
    }
174

    
175
    /**
176
     * Initializes fields of a given configuration
177
     * @param configuration configuration which fields should be initialized
178
     */
179
    private void initializeFields(Configuration configuration) {
180
        for(ParameterInConfiguration parameterInConfiguration : configuration.getParametersInConfiguration()) {
181
            if(parameterInConfiguration.getLocation() == null) {
182
                parameterInConfiguration.setLocation(new Location());
183
            }
184
            if(parameterInConfiguration.getOperator() == null) {
185
                parameterInConfiguration.setOperator(new Operator());
186
            }
187
            if(parameterInConfiguration.getFunctions() == null) {
188
                parameterInConfiguration.setFunctions(new ArrayList<>());
189
            }
190
        }
191
    }
192

    
193
    /**
194
     * Prepares the configuration for contingency table generation. Initializes assembly and parameters of parameters in
195
     * configuration.
196
     * @param configuration configuration to be prepared.
197
     */
198
    private void prepareForTable(Configuration configuration) {
199
        Assembly assembly = assemblyManager.getAssemblyById(configuration.getAssembly().getId());
200
        configuration.setAssembly(assembly);
201

    
202
        for(int i = 0; i < configuration.getParametersInConfiguration().size(); i++) {
203
            ParameterInConfiguration parameterInConfiguration = configuration.getParametersInConfiguration().get(i);
204
            parameterInConfiguration.setParameter(assembly.getParameters().get(i));
205
            if (parameterInConfiguration.getLocation() != null) {
206
                parameterInConfiguration.setLocation(locationManager.getLocationById(parameterInConfiguration.getLocation().getId()));
207
            }
208
        }
209
    }
210
}
(3-3/5)