Projekt

Obecné

Profil

Stáhnout (9.18 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 org.springframework.web.servlet.mvc.support.RedirectAttributes;
13
import vldc.aswi.domain.Assembly;
14
import vldc.aswi.domain.Configuration;
15
import vldc.aswi.domain.Location;
16
import vldc.aswi.domain.Operator;
17
import vldc.aswi.domain.parameter.ParameterInConfiguration;
18
import vldc.aswi.model.table.contingencyTable.ContingencyTableRow;
19
import vldc.aswi.service.AssemblyManager;
20
import vldc.aswi.service.ConfigurationManager;
21
import vldc.aswi.service.LocationManager;
22
import vldc.aswi.service.SqlQueryManager;
23
import vldc.aswi.utils.AuthControl;
24
import vldc.aswi.utils.Utils;
25

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

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

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

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

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

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

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

    
64
        ModelMap modelMap = modelAndView.getModelMap();
65

    
66
        Configuration configuration = configurationManager.getConfigurationById(Long.parseLong(id));
67

    
68
        // TODO: 04.05.2020 error page when id doesn't exist
69

    
70
        String userName = AuthControl.getUserName();
71

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

    
80
        List<ParameterInConfiguration> parametersInConfiguration = new ArrayList<>(configuration.getParametersInConfiguration());
81
        configuration.setParametersInConfiguration(parametersInConfiguration);
82

    
83
        initializeFields(configuration);
84
        Comparator<ParameterInConfiguration> comparator = Comparator.comparingInt(o -> o.getParameter().getParameterOrder());
85

    
86
        modelMap.addAttribute("configuration", configuration);
87
        modelMap.addAttribute("comparator", comparator);
88
        modelMap.addAttribute("formAction", "/configuration?configurationID=" + configuration.getId());
89

    
90
        modelMap.addAttribute(assemblySuccessName, successMsg);
91
        modelMap.addAttribute(assemblyErrorName, errorMsg);
92

    
93
        return modelAndView;
94
    }
95

    
96
    /**
97
     * Saves or edits configuration and redirects to the page with configuration
98
     * @param newConfiguration contained with configuration data
99
     * @param id ID of configuration, if empty new configuration is created
100
     * @param bindingResult binding result
101
     * @return modelAndView with redirection
102
     */
103
    @PostMapping("/configuration")
104
    public ModelAndView configurationPost(Configuration newConfiguration,
105
                                           BindingResult bindingResult,
106
                                           @RequestParam("configurationID") String id,
107
                                           @RequestParam(required=false, value="generateTable") String generateTable,
108
                                           @RequestParam(required=false, value="exportXls") String exportXls,
109
                                           @RequestParam(required=false, value="exportPdf") String exportPdf,
110
                                           @RequestParam(required=false, value="saveConfiguration") String saveConfiguration,
111
                                            RedirectAttributes redirectAttributes
112
                                          )
113
    {
114
        ModelAndView modelAndView = new ModelAndView();
115
        ModelMap modelMap = modelAndView.getModelMap();
116

    
117
        if (bindingResult.hasErrors()) {
118
            // TODO: 04.05.2020 Error message
119
            modelAndView.setViewName("redirect:/");
120

    
121
            return modelAndView;
122
        }
123

    
124
        if (generateTable != null)
125
        {
126
            prepareForTable(newConfiguration);
127
            System.out.println("Generuj tabulku");
128
            modelMap.addAttribute("configurationID", id);
129
            modelMap.addAttribute("contingencyTableRows", this.sqlQueryManager.getContingencyTableRow(newConfiguration));
130
            Comparator<ParameterInConfiguration> comparator = Comparator.comparingInt(o -> o.getParameter().getParameterOrder());
131
            initializeFields(newConfiguration);
132
            modelMap.addAttribute("configuration", newConfiguration);
133
            modelMap.addAttribute("comparator", comparator);
134
            modelMap.addAttribute("formAction", "/configuration?configurationID=" + id);
135
            modelAndView.setViewName("assembly");
136
        }
137
        else if (exportXls != null)
138
        {
139
            System.out.println("Generuj XLS");
140
        }
141
        else if (exportPdf != null)
142
        {
143
            System.out.println("Generuj PDF");
144
        }
145
        else if (saveConfiguration != null)
146
        {
147
            System.out.println("ulož konfiguraci");
148
            Configuration configuration = configurationManager.saveConfiguration(newConfiguration, id);
149

    
150
            initializeFields(configuration);
151

    
152
            redirectAttributes.addFlashAttribute(assemblySuccessName, "Šablona byla úspěšně uložena");
153
            modelAndView.setViewName("redirect:/configuration?configurationID=" + configuration.getId());
154

    
155
        }
156

    
157
        return modelAndView;
158
    }
159

    
160
    /**
161
     * Get method for configuration delete.
162
     * @param id - ID of configuration.
163
     * @return ModelAndView for index.
164
     */
165
    @GetMapping("/configuration_delete")
166
    public ModelAndView configurationDeleteGet(@RequestParam("configurationID") String id, RedirectAttributes redirectAttributes) {
167
        ModelAndView modelAndView = new ModelAndView("redirect:/");
168

    
169
        Long configurationId = Utils.tryParseLong(id);
170

    
171
        if (configurationId == null) {
172
            redirectAttributes.addFlashAttribute(assemblyErrorName, "Sestavu se nepodařilo odstranit");
173
        }
174

    
175
        boolean success = this.configurationManager.deleteConfiguration(configurationId);
176

    
177
        if (success)
178
        {
179
            redirectAttributes.addFlashAttribute(assemblySuccessName, "Sestava byla úspěšně odstraněna");
180
        }
181
        else
182
        {
183
            redirectAttributes.addFlashAttribute(assemblyErrorName, "Sestavu se nepodařilo odstranit");
184
        }
185

    
186
        return modelAndView;
187
    }
188

    
189
    /**
190
     * Initializes fields of a given configuration
191
     * @param configuration configuration which fields should be initialized
192
     */
193
    private void initializeFields(Configuration configuration) {
194
        for(ParameterInConfiguration parameterInConfiguration : configuration.getParametersInConfiguration()) {
195
            if(parameterInConfiguration.getLocation() == null) {
196
                parameterInConfiguration.setLocation(new Location());
197
            }
198
            if(parameterInConfiguration.getOperator() == null) {
199
                parameterInConfiguration.setOperator(new Operator());
200
            }
201
            if(parameterInConfiguration.getFunctions() == null) {
202
                parameterInConfiguration.setFunctions(new ArrayList<>());
203
            }
204
        }
205
    }
206

    
207
    /**
208
     * Prepares the configuration for contingency table generation. Initializes assembly and parameters of parameters in
209
     * configuration.
210
     * @param configuration configuration to be prepared.
211
     */
212
    private void prepareForTable(Configuration configuration) {
213
        Assembly assembly = assemblyManager.getAssemblyById(configuration.getAssembly().getId());
214
        configuration.setAssembly(assembly);
215

    
216
        for(int i = 0; i < configuration.getParametersInConfiguration().size(); i++) {
217
            ParameterInConfiguration parameterInConfiguration = configuration.getParametersInConfiguration().get(i);
218
            parameterInConfiguration.setParameter(assembly.getParameters().get(i));
219
            if (parameterInConfiguration.getLocation() != null) {
220
                parameterInConfiguration.setLocation(locationManager.getLocationById(parameterInConfiguration.getLocation().getId()));
221
            }
222
        }
223
    }
224
}
(3-3/5)