Projekt

Obecné

Profil

Stáhnout (11.6 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
    /** Autowired configuration repository. */
29
    @Autowired
30
    private ConfigurationRepository configurationRepository;
31

    
32
    /** Autowired assembly repository. */
33
    @Autowired
34
    private AssemblyRepository assemblyRepository;
35

    
36
    /** Autowired parameterInConfiguration repository. */
37
    @Autowired
38
    private ParameterInConfigurationRepository parameterInConfigurationRepository;
39

    
40
    /** Autowired operator repository. */
41
    @Autowired
42
    private OperatorRepository operatorRepository;
43

    
44
    /** Autowired location repository. */
45
    @Autowired
46
    private LocationRepository locationRepository;
47

    
48
    /** Autowired parameter type manager. */
49
    @Autowired
50
    private ParameterTypeManager parameterTypeRepository;
51

    
52
    /** Autowired function repository. */
53
    @Autowired
54
    private FunctionRepository functionRepository;
55

    
56
    /** Autowired user repository. */
57
    @Autowired
58
    private UserRepository userRepository;
59

    
60
    /** Autowired parameter in configuration manager. */
61
    @Autowired
62
    private ParameterInConfigurationManager parameterInConfigurationManager;
63

    
64
    /** Autowired assembly manager. */
65
    @Autowired
66
    private AssemblyManager assemblyManager;
67

    
68
    /**
69
     * Initialization setup for configuration manager.
70
     * Check if table "Konfigurace" exists.
71
     */
72
    @EventListener(classes = {
73
            ContextRefreshedEvent.class
74
    })
75
    @Order(3)
76
    @Transactional
77
    public void setup() {
78
        try {
79
            if (this.configurationRepository.count() == 0) {
80
                // Just checking if table exists.
81
            }
82
        }
83
        catch (InvalidDataAccessResourceUsageException e) {
84
            log.error("Table \"Konfigurace\" did not exists in database!");
85
            System.exit(1);
86
        }
87
    }
88

    
89
    /**
90
     * Get all configurations from database.
91
     * @return List of configurations.
92
     */
93
    @Override
94
    public List<Configuration> getConfigurations() {
95
        String username = AuthControl.getUserName();
96
        if (username == null) {
97
            // TODO: 04.05.2020 error message, user not authenticated
98
        }
99

    
100
        User user = userRepository.findByUsername(username);
101

    
102
        return configurationRepository.getByUserEquals(user);
103
    }
104

    
105
    /**
106
     * Gets configuration according to its ID
107
     * @param id ID of configuration
108
     * @return configuration by ID
109
     */
110
    @Override
111
    public Configuration getConfigurationById(Long id) {
112
        Configuration configuration = configurationRepository.getById(id);
113
        Comparator<ParameterInConfiguration> comparator = Comparator.comparingInt(o -> o.getParameter().getParameterOrder());
114
        configuration.getParametersInConfiguration().sort(comparator);
115
        return configuration;
116
    }
117

    
118
    /**
119
     * Saves configuration and its contents into database
120
     * @param newConfiguration configuration to save
121
     * @param id id of configuration, if not empty configuration is updated
122
     * @return saved configuration
123
     */
124
    @Override
125
    public Configuration saveConfiguration(Configuration newConfiguration, String id) {
126
        if (id.equals("")) {
127
            return addConfiguration(newConfiguration);
128
        }
129
        else {
130
            return editConfiguration(newConfiguration, Long.valueOf(id));
131
        }
132
    }
133

    
134
    /**
135
     * Delete single configuration by id.
136
     * @param id - ID of configuration.
137
     * @return True if deleting was successful, false if not.
138
     */
139
    @Override
140
    public boolean deleteConfiguration(Long id) {
141
        try {
142
            this.parameterInConfigurationManager.deleteParametersInConfiguration(id, true);
143
            this.configurationRepository.deleteById(id);
144
            return true;
145
        } catch (Exception e) {
146
            return false;
147
        }
148
    }
149

    
150
    /**
151
     * Delete all configurations by assembly id.
152
     * @param assemblyId - ID of assembly.
153
     * @return True if all configurations were successfully deleted, false if not.
154
     */
155
    @Override
156
    public boolean deleteConfigurations(Long assemblyId) {
157
        // TODO: Do it as transactional.
158
        try {
159
            // Delete parameters in current configuration.
160
            List<Configuration> configurations = this.configurationRepository.getByAssemblyId(assemblyId);
161
            for (Configuration configuration : configurations) {
162
                this.parameterInConfigurationManager.deleteParametersInConfiguration(configuration.getId(), true);
163
            }
164

    
165
            // Delete configuration.
166
            this.configurationRepository.deleteAll(configurations);
167
            return true;
168
        } catch (Exception e) {
169
            return false;
170
        }
171
    }
172

    
173
    /**
174
     * Saves new configuration into database
175
     * @param newConfiguration container with data for a new configuration
176
     * @return saved configuration
177
     */
178
    private Configuration addConfiguration(Configuration newConfiguration) {
179
        String username = AuthControl.getUserName();
180
        if (username == null) {
181
            // TODO: 04.05.2020 error message, user not authenticated
182
        }
183
        Configuration configuration = new Configuration();
184
        Assembly assembly = assemblyManager.getAssemblyById(newConfiguration.getAssembly().getId());
185
        Collections.sort(assembly.getParameters());
186
        configuration.setAssembly(assembly);
187
        configuration.setName(newConfiguration.getName());
188
        configuration.setTableName(newConfiguration.getTableName());
189
        configuration.setUser(userRepository.findByUsername(username));
190
        Configuration savedConfiguration = configurationRepository.save(configuration);
191

    
192
        savedConfiguration.setParametersInConfiguration(new ArrayList<>());
193

    
194
        if (newConfiguration.getParametersInConfiguration() != null) {
195
            for (int i = 0; i < newConfiguration.getParametersInConfiguration().size(); i++) {
196
                ParameterInConfiguration parameterInConfiguration = new ParameterInConfiguration();
197
                parameterInConfiguration.setParameter(assembly.getParameters().get(i));
198
                parameterInConfiguration.setConfiguration(savedConfiguration);
199
                parameterInConfiguration.setParameterOrder(newConfiguration.getParametersInConfiguration().get(i).getParameterOrder());
200
                parameterInConfiguration.setOperatorValue(newConfiguration.getParametersInConfiguration().get(i).getOperatorValue());
201
                parameterInConfiguration.setColumnName(assembly.getParameters().get(i).getName());
202
                if (newConfiguration.getParametersInConfiguration().get(i).getColumnName() != null &&
203
                        !newConfiguration.getParametersInConfiguration().get(i).getColumnName().equals("")) {
204
                    parameterInConfiguration.setColumnName(newConfiguration.getParametersInConfiguration().get(i).getColumnName());
205
                }
206
                if (newConfiguration.getParametersInConfiguration().get(i).getLocation() != null) {
207
                    parameterInConfiguration.setLocation(locationRepository.getById(
208
                            newConfiguration.getParametersInConfiguration().get(i).getLocation().getId()));
209
                }
210
                if (newConfiguration.getParametersInConfiguration().get(i).getOperator() != null) {
211
                    parameterInConfiguration.setOperator(operatorRepository.getByName(
212
                            newConfiguration.getParametersInConfiguration().get(i).getOperator().getName()));
213
                }
214
                if (newConfiguration.getParametersInConfiguration().get(i).getFunctions() != null) {
215
                    parameterInConfiguration.setFunctions(new ArrayList<>());
216
                    for (Function function : newConfiguration.getParametersInConfiguration().get(i).getFunctions()) {
217
                        parameterInConfiguration.getFunctions().add(functionRepository.getByName(function.getName()));
218
                    }
219
                }
220
                ParameterInConfiguration savedParameterInConfiguration = parameterInConfigurationRepository.save(
221
                        parameterInConfiguration);
222
                savedConfiguration.getParametersInConfiguration().add(savedParameterInConfiguration);
223
            }
224
        }
225
        savedConfiguration = configurationRepository.save(savedConfiguration);
226

    
227
        return savedConfiguration;
228
    }
229

    
230
    /**
231
     * Saves edited configuration with given ID
232
     * @param newConfiguration container with data for edited configuration
233
     * @param id ID of edited configuration
234
     * @return saved configuration
235
     */
236
    private Configuration editConfiguration(Configuration newConfiguration, Long id) {
237
        Configuration configuration = getConfigurationById(id);
238
        configuration.setName(newConfiguration.getName());
239
        configuration.setTableName(newConfiguration.getTableName());
240

    
241
        for(int i = 0; i < configuration.getParametersInConfiguration().size(); i++) {
242
            ParameterInConfiguration parameterInConfiguration = configuration.getParametersInConfiguration().get(i);
243
            parameterInConfiguration.setParameterOrder(newConfiguration.getParametersInConfiguration().get(i).getParameterOrder());
244
            parameterInConfiguration.setOperatorValue(newConfiguration.getParametersInConfiguration().get(i).getOperatorValue());
245
            if(newConfiguration.getParametersInConfiguration().get(i).getColumnName() != null &&
246
                    !newConfiguration.getParametersInConfiguration().get(i).getColumnName().equals("")) {
247
                parameterInConfiguration.setColumnName(newConfiguration.getParametersInConfiguration().get(i).getColumnName());
248
            }
249
            if(newConfiguration.getParametersInConfiguration().get(i).getLocation() != null) {
250
                parameterInConfiguration.setLocation(locationRepository.getById(
251
                        newConfiguration.getParametersInConfiguration().get(i).getLocation().getId()));
252
            }
253
            else {
254
                parameterInConfiguration.setLocation(null);
255
            }
256
            if(newConfiguration.getParametersInConfiguration().get(i).getOperator() != null) {
257
                parameterInConfiguration.setOperator(operatorRepository.getByName(
258
                        newConfiguration.getParametersInConfiguration().get(i).getOperator().getName()));
259
            }
260
            if(newConfiguration.getParametersInConfiguration().get(i).getFunctions() != null) {
261
                parameterInConfiguration.setFunctions(new ArrayList<>());
262
                for (Function function : newConfiguration.getParametersInConfiguration().get(i).getFunctions()) {
263
                    parameterInConfiguration.getFunctions().add(functionRepository.getByName(function.getName()));
264
                }
265
            }
266
            parameterInConfigurationRepository.save(parameterInConfiguration);
267
        }
268

    
269
        return configurationRepository.save(configuration);
270
    }
271
}
(4-4/18)