Projekt

Obecné

Profil

Stáhnout (11.8 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.context.event.ContextRefreshedEvent;
6
import org.springframework.context.event.EventListener;
7
import org.springframework.core.annotation.Order;
8
import org.springframework.dao.InvalidDataAccessResourceUsageException;
9
import org.springframework.stereotype.Service;
10
import vldc.aswi.dao.*;
11
import vldc.aswi.dao.parameter.ParameterInConfigurationRepository;
12
import vldc.aswi.domain.*;
13
import vldc.aswi.domain.parameter.ParameterInConfiguration;
14
import vldc.aswi.service.parameter.ParameterInConfigurationManager;
15
import vldc.aswi.service.parameter.ParameterTypeManager;
16
import vldc.aswi.utils.AuthControl;
17

    
18
import javax.transaction.Transactional;
19
import java.util.ArrayList;
20
import java.util.Collections;
21
import java.util.Comparator;
22
import java.util.List;
23

    
24
@Service
25
@Slf4j
26
public class ConfigurationManagerImpl implements ConfigurationManager {
27

    
28
    /**
29
     * Autowired configuration repository.
30
     */
31
    @Autowired
32
    private ConfigurationRepository configurationRepository;
33

    
34
    /**
35
     * Autowired assembly repository.
36
     */
37
    @Autowired
38
    private AssemblyRepository assemblyRepository;
39

    
40
    /**
41
     * Autowired parameterInConfiguration repository.
42
     */
43
    @Autowired
44
    private ParameterInConfigurationRepository parameterInConfigurationRepository;
45

    
46
    /**
47
     * Autowired operator repository.
48
     */
49
    @Autowired
50
    private OperatorRepository operatorRepository;
51

    
52
    /**
53
     * Autowired location repository.
54
     */
55
    @Autowired
56
    private LocationRepository locationRepository;
57

    
58
    /**
59
     * Autowired parameter type manager.
60
     */
61
    @Autowired
62
    private ParameterTypeManager parameterTypeRepository;
63

    
64
    /**
65
     * Autowired function repository.
66
     */
67
    @Autowired
68
    private FunctionRepository functionRepository;
69

    
70
    /**
71
     * Autowired user repository.
72
     */
73
    @Autowired
74
    private UserRepository userRepository;
75

    
76
    /**
77
     * Autowired parameter in configuration manager.
78
     */
79
    @Autowired
80
    private ParameterInConfigurationManager parameterInConfigurationManager;
81

    
82
    /** Autowired assembly manager. */
83
    @Autowired
84
    private AssemblyManager assemblyManager;
85

    
86
    /**
87
     * Initialization setup for configuration manager.
88
     * Check if table "Konfigurace" exists.
89
     */
90
    @EventListener(classes = {
91
            ContextRefreshedEvent.class
92
    })
93
    @Order(3)
94
    @Transactional
95
    public void setup() {
96
        try {
97
            if (this.configurationRepository.count() == 0) {
98
                // Just checking if table exists.
99
            }
100
        } catch (InvalidDataAccessResourceUsageException e) {
101
            log.error("Table \"Konfigurace\" did not exists in database!");
102
            System.exit(1);
103
        }
104
    }
105

    
106
    /**
107
     * Get all configurations from database.
108
     *
109
     * @return List of configurations.
110
     */
111
    @Override
112
    public List<Configuration> getConfigurations() {
113
        String username = AuthControl.getUserName();
114
        if (username == null) {
115
            // TODO: 04.05.2020 error message, user not authenticated
116
        }
117

    
118
        User user = userRepository.findByUsername(username);
119

    
120
        return configurationRepository.getByUserEquals(user);
121
    }
122

    
123
    /**
124
     * Gets configuration according to its ID
125
     *
126
     * @param id ID of configuration
127
     * @return configuration by ID
128
     */
129
    @Override
130
    public Configuration getConfigurationById(Long id) {
131
        Configuration configuration = configurationRepository.getById(id);
132
        Comparator<ParameterInConfiguration> comparator = Comparator.comparingInt(o -> o.getParameter().getParameterOrder());
133
        configuration.getParametersInConfiguration().sort(comparator);
134
        return configuration;
135
    }
136

    
137
    /**
138
     * Saves configuration and its contents into database
139
     *
140
     * @param newConfiguration configuration to save
141
     * @param id               id of configuration, if not empty configuration is updated
142
     * @return saved configuration
143
     */
144
    @Override
145
    public Configuration saveConfiguration(Configuration newConfiguration, String id) {
146
        if (id.equals("")) {
147
            return addConfiguration(newConfiguration);
148
        } else {
149
            return editConfiguration(newConfiguration, Long.valueOf(id));
150
        }
151
    }
152

    
153
    /**
154
     * Delete single configuration by id.
155
     *
156
     * @param id - ID of configuration.
157
     * @return True if deleting was successful, false if not.
158
     */
159
    @Override
160
    public boolean deleteConfiguration(Long id) {
161
        try {
162
            this.parameterInConfigurationManager.deleteParametersInConfiguration(id, true);
163
            this.configurationRepository.deleteById(id);
164
            return true;
165
        } catch (Exception e) {
166
            return false;
167
        }
168
    }
169

    
170
    /**
171
     * Delete all configurations by assembly id.
172
     *
173
     * @param assemblyId - ID of assembly.
174
     * @return True if all configurations were successfully deleted, false if not.
175
     */
176
    @Override
177
    public boolean deleteConfigurations(Long assemblyId) {
178
        // TODO: Do it as transactional.
179
        try {
180
            // Delete parameters in current configuration.
181
            List<Configuration> configurations = this.configurationRepository.getByAssemblyId(assemblyId);
182
            for (Configuration configuration : configurations) {
183
                this.parameterInConfigurationManager.deleteParametersInConfiguration(configuration.getId(), true);
184
            }
185

    
186
            // Delete configuration.
187
            this.configurationRepository.deleteAll(configurations);
188
            return true;
189
        } catch (Exception e) {
190
            return false;
191
        }
192
    }
193

    
194
    /**
195
     * Saves new configuration into database
196
     *
197
     * @param newConfiguration container with data for a new configuration
198
     * @return saved configuration
199
     */
200
    private Configuration addConfiguration(Configuration newConfiguration) {
201
        String username = AuthControl.getUserName();
202
        if (username == null) {
203
            // TODO: 04.05.2020 error message, user not authenticated
204
        }
205
        Configuration configuration = new Configuration();
206
        Assembly assembly = assemblyManager.getAssemblyById(newConfiguration.getAssembly().getId());
207
        Collections.sort(assembly.getParameters());
208
        configuration.setAssembly(assembly);
209
        configuration.setName(newConfiguration.getName());
210
        configuration.setTableName(newConfiguration.getTableName());
211
        configuration.setUser(userRepository.findByUsername(username));
212
        Configuration savedConfiguration = configurationRepository.save(configuration);
213

    
214
        savedConfiguration.setParametersInConfiguration(new ArrayList<>());
215

    
216
        if (newConfiguration.getParametersInConfiguration() != null) {
217
            for (int i = 0; i < newConfiguration.getParametersInConfiguration().size(); i++) {
218
                ParameterInConfiguration parameterInConfiguration = new ParameterInConfiguration();
219
                parameterInConfiguration.setParameter(assembly.getParameters().get(i));
220
                parameterInConfiguration.setConfiguration(savedConfiguration);
221
                parameterInConfiguration.setParameterOrder(newConfiguration.getParametersInConfiguration().get(i).getParameterOrder());
222
                parameterInConfiguration.setOperatorValue(newConfiguration.getParametersInConfiguration().get(i).getOperatorValue());
223
                parameterInConfiguration.setColumnName(assembly.getParameters().get(i).getName());
224
                if (newConfiguration.getParametersInConfiguration().get(i).getColumnName() != null &&
225
                        !newConfiguration.getParametersInConfiguration().get(i).getColumnName().equals("")) {
226
                    parameterInConfiguration.setColumnName(newConfiguration.getParametersInConfiguration().get(i).getColumnName());
227
                }
228
                if (newConfiguration.getParametersInConfiguration().get(i).getLocation() != null) {
229
                    parameterInConfiguration.setLocation(locationRepository.getById(
230
                            newConfiguration.getParametersInConfiguration().get(i).getLocation().getId()));
231
                }
232
                if (newConfiguration.getParametersInConfiguration().get(i).getOperator() != null) {
233
                    parameterInConfiguration.setOperator(operatorRepository.getByName(
234
                            newConfiguration.getParametersInConfiguration().get(i).getOperator().getName()));
235
                }
236
                if (newConfiguration.getParametersInConfiguration().get(i).getFunctions() != null) {
237
                    parameterInConfiguration.setFunctions(new ArrayList<>());
238
                    for (Function function : newConfiguration.getParametersInConfiguration().get(i).getFunctions()) {
239
                        parameterInConfiguration.getFunctions().add(functionRepository.getByName(function.getName()));
240
                    }
241
                }
242
                ParameterInConfiguration savedParameterInConfiguration = parameterInConfigurationRepository.save(
243
                        parameterInConfiguration);
244
                savedConfiguration.getParametersInConfiguration().add(savedParameterInConfiguration);
245
            }
246
        }
247
        savedConfiguration = configurationRepository.save(savedConfiguration);
248

    
249
        return savedConfiguration;
250
    }
251

    
252
    /**
253
     * Saves edited configuration with given ID
254
     *
255
     * @param newConfiguration container with data for edited configuration
256
     * @param id               ID of edited configuration
257
     * @return saved configuration
258
     */
259
    private Configuration editConfiguration(Configuration newConfiguration, Long id) {
260
        Configuration configuration = getConfigurationById(id);
261
        configuration.setName(newConfiguration.getName());
262
        configuration.setTableName(newConfiguration.getTableName());
263

    
264
        for (int i = 0; i < configuration.getParametersInConfiguration().size(); i++) {
265
            ParameterInConfiguration parameterInConfiguration = configuration.getParametersInConfiguration().get(i);
266
            parameterInConfiguration.setParameterOrder(newConfiguration.getParametersInConfiguration().get(i).getParameterOrder());
267
            parameterInConfiguration.setOperatorValue(newConfiguration.getParametersInConfiguration().get(i).getOperatorValue());
268
            if (newConfiguration.getParametersInConfiguration().get(i).getColumnName() != null &&
269
                    !newConfiguration.getParametersInConfiguration().get(i).getColumnName().equals("")) {
270
                parameterInConfiguration.setColumnName(newConfiguration.getParametersInConfiguration().get(i).getColumnName());
271
            }
272
            if (newConfiguration.getParametersInConfiguration().get(i).getLocation() != null) {
273
                parameterInConfiguration.setLocation(locationRepository.getById(
274
                        newConfiguration.getParametersInConfiguration().get(i).getLocation().getId()));
275
            } else {
276
                parameterInConfiguration.setLocation(null);
277
            }
278
            if (newConfiguration.getParametersInConfiguration().get(i).getOperator() != null) {
279
                parameterInConfiguration.setOperator(operatorRepository.getByName(
280
                        newConfiguration.getParametersInConfiguration().get(i).getOperator().getName()));
281
            }
282
            if (newConfiguration.getParametersInConfiguration().get(i).getFunctions() != null) {
283
                parameterInConfiguration.setFunctions(new ArrayList<>());
284
                for (Function function : newConfiguration.getParametersInConfiguration().get(i).getFunctions()) {
285
                    parameterInConfiguration.getFunctions().add(functionRepository.getByName(function.getName()));
286
                }
287
            }
288
            parameterInConfigurationRepository.save(parameterInConfiguration);
289
        }
290

    
291
        return configurationRepository.save(configuration);
292
    }
293
}
(4-4/18)