Projekt

Obecné

Profil

Stáhnout (11.2 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.List;
21

    
22
@Service
23
@Slf4j
24
public class ConfigurationManagerImpl implements ConfigurationManager {
25

    
26
    /** Autowired configuration repository. */
27
    @Autowired
28
    private ConfigurationRepository configurationRepository;
29

    
30
    /** Autowired assembly repository. */
31
    @Autowired
32
    private AssemblyRepository assemblyRepository;
33

    
34
    /** Autowired parameterInConfiguration repository. */
35
    @Autowired
36
    private ParameterInConfigurationRepository parameterInConfigurationRepository;
37

    
38
    /** Autowired operator repository. */
39
    @Autowired
40
    private OperatorRepository operatorRepository;
41

    
42
    /** Autowired location repository. */
43
    @Autowired
44
    private LocationRepository locationRepository;
45

    
46
    /** Autowired parameter type manager. */
47
    @Autowired
48
    private ParameterTypeManager parameterTypeRepository;
49

    
50
    /** Autowired function repository. */
51
    @Autowired
52
    private FunctionRepository functionRepository;
53

    
54
    /** Autowired user repository. */
55
    @Autowired
56
    private UserRepository userRepository;
57

    
58
    /** Autowired parameter in configuration manager. */
59
    @Autowired
60
    private ParameterInConfigurationManager parameterInConfigurationManager;
61

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

    
83
    /**
84
     * Get all configurations from database.
85
     * @return List of configurations.
86
     */
87
    @Override
88
    public List<Configuration> getConfigurations() {
89
        String username = AuthControl.getUserName();
90
        if (username == null) {
91
            // TODO: 04.05.2020 error message, user not authenticated
92
        }
93

    
94
        User user = userRepository.findByUsername(username);
95

    
96
        return configurationRepository.getByUserEquals(user);
97
    }
98

    
99
    /**
100
     * Gets configuration according to its ID
101
     * @param id ID of configuration
102
     * @return configuration by ID
103
     */
104
    @Override
105
    public Configuration getConfigurationById(Long id) {
106
        return configurationRepository.getById(id);
107
    }
108

    
109
    /**
110
     * Saves configuration and its contents into database
111
     * @param newConfiguration configuration to save
112
     * @param id id of configuration, if not empty configuration is updated
113
     * @return saved configuration
114
     */
115
    @Override
116
    public Configuration saveConfiguration(Configuration newConfiguration, String id) {
117
        if (id.equals("")) {
118
            return addConfiguration(newConfiguration);
119
        }
120
        else {
121
            return editConfiguration(newConfiguration, Long.valueOf(id));
122
        }
123
    }
124

    
125
    /**
126
     * Delete single configuration by id.
127
     * @param id - ID of configuration.
128
     * @return True if deleting was successful, false if not.
129
     */
130
    @Override
131
    public boolean deleteConfiguration(Long id) {
132
        try {
133
            this.parameterInConfigurationManager.deleteParametersInConfiguration(id, true);
134
            this.configurationRepository.deleteById(id);
135
            return true;
136
        } catch (Exception e) {
137
            return false;
138
        }
139
    }
140

    
141
    /**
142
     * Delete all configurations by assembly id.
143
     * @param assemblyId - ID of assembly.
144
     * @return True if all configurations were successfully deleted, false if not.
145
     */
146
    @Override
147
    public boolean deleteConfigurations(Long assemblyId) {
148
        // TODO: Do it as transactional.
149
        try {
150
            // Delete parameters in current configuration.
151
            List<Configuration> configurations = this.configurationRepository.getByAssemblyId(assemblyId);
152
            for (Configuration configuration : configurations) {
153
                this.parameterInConfigurationManager.deleteParametersInConfiguration(configuration.getId(), true);
154
            }
155

    
156
            // Delete configuration.
157
            this.configurationRepository.deleteAll(configurations);
158
            return true;
159
        } catch (Exception e) {
160
            return false;
161
        }
162
    }
163

    
164
    /**
165
     * Saves new configuration into database
166
     * @param newConfiguration container with data for a new configuration
167
     * @return saved configuration
168
     */
169
    private Configuration addConfiguration(Configuration newConfiguration) {
170
        String username = AuthControl.getUserName();
171
        if (username == null) {
172
            // TODO: 04.05.2020 error message, user not authenticated
173
        }
174
        Configuration configuration = new Configuration();
175
        Assembly assembly = assemblyRepository.getById(newConfiguration.getAssembly().getId());
176
        configuration.setAssembly(assembly);
177
        configuration.setName(newConfiguration.getName());
178
        configuration.setTableName(newConfiguration.getTableName());
179
        configuration.setUser(userRepository.findByUsername(username));
180
        Configuration savedConfiguration = configurationRepository.save(configuration);
181

    
182
        savedConfiguration.setParametersInConfiguration(new ArrayList<>());
183

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

    
217
        return savedConfiguration;
218
    }
219

    
220
    /**
221
     * Saves edited configuration with given ID
222
     * @param newConfiguration container with data for edited configuration
223
     * @param id ID of edited configuration
224
     * @return saved configuration
225
     */
226
    private Configuration editConfiguration(Configuration newConfiguration, Long id) {
227
        Configuration configuration = configurationRepository.getById(id);
228
        configuration.setName(newConfiguration.getName());
229
        configuration.setTableName(newConfiguration.getTableName());
230

    
231
        for(int i = 0; i < configuration.getParametersInConfiguration().size(); i++) {
232
            ParameterInConfiguration parameterInConfiguration = configuration.getParametersInConfiguration().get(i);
233
            parameterInConfiguration.setParameterOrder(newConfiguration.getParametersInConfiguration().get(i).getParameterOrder());
234
            parameterInConfiguration.setOperatorValue(newConfiguration.getParametersInConfiguration().get(i).getOperatorValue());
235
            if(newConfiguration.getParametersInConfiguration().get(i).getColumnName() != null &&
236
                    !newConfiguration.getParametersInConfiguration().get(i).getColumnName().equals("")) {
237
                parameterInConfiguration.setColumnName(newConfiguration.getParametersInConfiguration().get(i).getColumnName());
238
            }
239
            if(newConfiguration.getParametersInConfiguration().get(i).getLocation() != null) {
240
                parameterInConfiguration.setLocation(locationRepository.getById(
241
                        newConfiguration.getParametersInConfiguration().get(i).getLocation().getId()));
242
            }
243
            else {
244
                parameterInConfiguration.setLocation(null);
245
            }
246
            if(newConfiguration.getParametersInConfiguration().get(i).getOperator() != null) {
247
                parameterInConfiguration.setOperator(operatorRepository.getByName(
248
                        newConfiguration.getParametersInConfiguration().get(i).getOperator().getName()));
249
            }
250
            if(newConfiguration.getParametersInConfiguration().get(i).getFunctions() != null) {
251
                parameterInConfiguration.setFunctions(new ArrayList<>());
252
                for (Function function : newConfiguration.getParametersInConfiguration().get(i).getFunctions()) {
253
                    parameterInConfiguration.getFunctions().add(functionRepository.getByName(function.getName()));
254
                }
255
            }
256
            parameterInConfigurationRepository.save(parameterInConfiguration);
257
        }
258

    
259
        return configurationRepository.save(configuration);
260
    }
261
}
(4-4/16)