Projekt

Obecné

Profil

Stáhnout (10.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.stereotype.Service;
9
import vldc.aswi.dao.*;
10
import vldc.aswi.dao.parameter.ParameterInConfigurationRepository;
11
import vldc.aswi.domain.*;
12
import vldc.aswi.domain.parameter.ParameterInConfiguration;
13
import vldc.aswi.service.parameter.ParameterInConfigurationManager;
14
import vldc.aswi.service.parameter.ParameterTypeManager;
15
import vldc.aswi.utils.AuthControl;
16

    
17
import javax.transaction.Transactional;
18
import java.util.ArrayList;
19
import java.util.List;
20

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

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

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

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

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

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

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

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

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

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

    
61
    /**
62
     * Initialization setup for configuration manager. Check if configuration repository contains
63
     * records and if not, initialize default values.
64
     */
65
    @EventListener(classes = {
66
            ContextRefreshedEvent.class
67
    })
68
    @Order(1)
69
    @Transactional
70
    public void setup() {
71
        if (this.configurationRepository.count() == 0) {
72
            log.info("No configuration present, creating items.");
73

    
74
        }
75
    }
76

    
77
    /**
78
     * Get all configurations from database.
79
     * @return List of configurations.
80
     */
81
    @Override
82
    public List<Configuration> getConfigurations() {
83
        String username = AuthControl.getUserName();
84
        if (username == null) {
85
            // TODO: 04.05.2020 error message, user not authenticated
86
        }
87

    
88
        User user = userRepository.findByUsername(username);
89

    
90
        return configurationRepository.getByUserEquals(user);
91
    }
92

    
93
    /**
94
     * Gets configuration according to its ID
95
     * @param id ID of configuration
96
     * @return configuration by ID
97
     */
98
    @Override
99
    public Configuration getConfigurationById(Long id) {
100
        return configurationRepository.getById(id);
101
    }
102

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

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

    
135
    /**
136
     * Delete all configurations by assembly id.
137
     * @param assemblyId - ID of assembly.
138
     * @return True if all configurations were successfully deleted, false if not.
139
     */
140
    @Override
141
    public boolean deleteConfigurations(Long assemblyId) {
142
        try {
143
            // Delete parameters in current configuration.
144
            List<Configuration> configurations = this.configurationRepository.getByAssemblyId(assemblyId);
145
            for (Configuration configuration : configurations) {
146
                this.parameterInConfigurationManager.deleteParametersInConfiguration(configuration.getId(), true);
147
            }
148

    
149
            // Delete configuration.
150
            this.configurationRepository.deleteAll(configurations);
151
            return true;
152
        } catch (Exception e) {
153
            return false;
154
        }
155
    }
156

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

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

    
207
        return savedConfiguration;
208
    }
209

    
210
    /**
211
     * Saves edited configuration with given ID
212
     * @param newConfiguration container with data for edited configuration
213
     * @param id ID of edited configuration
214
     * @return saved configuration
215
     */
216
    private Configuration editConfiguration(Configuration newConfiguration, Long id) {
217
        Configuration configuration = configurationRepository.getById(id);
218
        configuration.setName(newConfiguration.getName());
219
        configuration.setTableName(newConfiguration.getTableName());
220

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

    
249
        return configurationRepository.save(configuration);
250
    }
251
}
(4-4/16)