Projekt

Obecné

Profil

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

    
19
import javax.transaction.Transactional;
20
import java.util.ArrayList;
21
import java.util.LinkedList;
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
        List<Configuration> retVal = new LinkedList<>();
87
        this.configurationRepository.findAll().forEach(retVal::add);
88
        return retVal;
89
    }
90

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

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

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

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

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

    
155
    /**
156
     * Saves new configuration into database
157
     * @param newConfiguration container with data for a new configuration
158
     * @return saved configuration
159
     */
160
    private Configuration addConfiguration(Configuration newConfiguration) {
161
        Configuration configuration = new Configuration();
162
        Assembly assembly = assemblyRepository.getById(newConfiguration.getAssembly().getId());
163
        configuration.setAssembly(assembly);
164
        configuration.setName(newConfiguration.getName());
165
        configuration.setTableName(newConfiguration.getTableName());
166
        configuration.setUser(userRepository.getById((long) 1));
167
        Configuration savedConfiguration = configurationRepository.save(configuration);
168

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

    
201
        return savedConfiguration;
202
    }
203

    
204
    /**
205
     * Saves edited configuration with given ID
206
     * @param newConfiguration container with data for edited configuration
207
     * @param id ID of edited configuration
208
     * @return saved configuration
209
     */
210
    private Configuration editConfiguration(Configuration newConfiguration, Long id) {
211
        Configuration configuration = configurationRepository.getById(id);
212
        configuration.setName(newConfiguration.getName());
213
        configuration.setTableName(newConfiguration.getTableName());
214

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

    
243
        return configurationRepository.save(configuration);
244
    }
245
}
(4-4/16)