Projekt

Obecné

Profil

Stáhnout (11.3 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.security.authentication.AnonymousAuthenticationToken;
9
import org.springframework.security.core.Authentication;
10
import org.springframework.security.core.context.SecurityContextHolder;
11
import org.springframework.stereotype.Service;
12
import vldc.aswi.dao.*;
13
import vldc.aswi.dao.parameter.ParameterInConfigurationRepository;
14
import vldc.aswi.domain.*;
15
import vldc.aswi.domain.parameter.ParameterInConfiguration;
16
import vldc.aswi.service.parameter.ParameterInConfigurationManager;
17
import vldc.aswi.service.parameter.ParameterTypeManager;
18
import vldc.aswi.utils.AuthControl;
19

    
20
import javax.transaction.Transactional;
21
import java.util.ArrayList;
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
    /**
65
     * Initialization setup for configuration manager. Check if configuration repository contains
66
     * records and if not, initialize default values.
67
     */
68
    @EventListener(classes = {
69
            ContextRefreshedEvent.class
70
    })
71
    @Order(1)
72
    @Transactional
73
    public void setup() {
74
        if (this.configurationRepository.count() == 0) {
75
            log.info("No configuration present, creating items.");
76

    
77
        }
78
    }
79

    
80
    /**
81
     * Get all configurations from database.
82
     * @return List of configurations.
83
     */
84
    @Override
85
    public List<Configuration> getConfigurations() {
86
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
87
        String username;
88
        if (!(authentication instanceof AnonymousAuthenticationToken)) {
89
            username = authentication.getName();
90
        }
91
        else {
92
            // TODO: 04.05.2020 error message, user not authenticated
93
            return null;
94
        }
95
        User user = userRepository.findByUsername(username);
96

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

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

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

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

    
142
    /**
143
     * Delete all configurations by assembly id.
144
     * @param assemblyId - ID of assembly.
145
     * @return True if all configurations were successfully deleted, false if not.
146
     */
147
    @Override
148
    public boolean deleteConfigurations(Long assemblyId) {
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
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
171
        String username = AuthControl.getUserName();
172
        if (username == null) {
173
            // TODO: 04.05.2020 error message, user not authenticated
174
        }
175
        Configuration configuration = new Configuration();
176
        Assembly assembly = assemblyRepository.getById(newConfiguration.getAssembly().getId());
177
        configuration.setAssembly(assembly);
178
        configuration.setName(newConfiguration.getName());
179
        configuration.setTableName(newConfiguration.getTableName());
180
        configuration.setUser(userRepository.findByUsername(username));
181
        Configuration savedConfiguration = configurationRepository.save(configuration);
182

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

    
215
        return savedConfiguration;
216
    }
217

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

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

    
257
        return configurationRepository.save(configuration);
258
    }
259
}
(4-4/16)