Projekt

Obecné

Profil

Stáhnout (5.16 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.AssemblyRepository;
10
import vldc.aswi.dao.RoleRepository;
11
import vldc.aswi.domain.Assembly;
12
import vldc.aswi.domain.Role;
13

    
14
import javax.transaction.Transactional;
15
import java.util.LinkedList;
16
import java.util.List;
17

    
18
/**
19
 * Manager for Assembly.
20
 */
21
@Service
22
@Slf4j
23
public class AssemblyManagerImpl implements AssemblyManager {
24

    
25
    /** Autowired assembly repository. */
26
    @Autowired
27
    private AssemblyRepository assemblyRepository;
28

    
29
    @Autowired
30
    private RoleRepository roleRepository;
31

    
32
    /**
33
     * Initialization setup for assembly manager. Check if assembly repository contains
34
     * records and if not, initialize default values.
35
     */
36
    @EventListener(classes = {
37
            ContextRefreshedEvent.class
38
    })
39
    @Order(1)
40
    @Transactional
41
    public void setup() {
42
        if (this.assemblyRepository.count() == 0) {
43
            log.info("No assembly present, creating items.");
44

    
45
        }
46
    }
47

    
48
    /**
49
     * Get all Assemblies from database.
50
     * @return List of assemblies.
51
     */
52
    @Override
53
    public List<Assembly> getAssemblies() {
54
        List<Assembly> retVal = new LinkedList<>();
55
        this.assemblyRepository.findAll().forEach(retVal::add);
56
        return retVal;
57
    }
58

    
59
    /**
60
     * Get assembly by id.
61
     * @param id - ID of assembly.
62
     * @return Assembly.
63
     */
64
    @Override
65
    public Assembly getAssemblyById(Long id) {
66
        return assemblyRepository.getById(id);
67
    }
68

    
69
    /**
70
     * Update assembly's order.
71
     * @param id - ID of assembly.
72
     * @param order - Assembly's order.
73
     */
74
    @Override
75
    public void updateAssemblyOrder(Long id, int order) {
76
        Assembly assembly = getAssemblyById(id);
77
        assembly.setAssemblyOrder(order);
78
        this.assemblyRepository.save(assembly);
79
    }
80

    
81
    /**
82
     * Update assembly.
83
     * @param updatedAssemblyValues - Assembly values.
84
     * @return ID of assembly.
85
     */
86
    @Override
87
    public Long updateAssembly(Assembly updatedAssemblyValues) {
88
        // TODO: test it.
89
        Assembly assembly = getAssemblyById(updatedAssemblyValues.getId());
90
        assembly.setName(updatedAssemblyValues.getName());
91
        assembly.setSQLQuery(updatedAssemblyValues.getSQLQuery());
92
        assembly.setAssemblyOrder(updatedAssemblyValues.getAssemblyOrder());
93
        assembly.setIsPublic(updatedAssemblyValues.getIsPublic());
94
        this.assemblyRepository.save(assembly);
95

    
96
        updateAssemblyRoles(updatedAssemblyValues.getId(), updatedAssemblyValues.getRoles());
97

    
98
        return assembly.getId();
99
    }
100

    
101
    /**
102
     * Update assembly's roles.
103
     * @param id - ID of assembly.
104
     * @param updatedRoles - List of roles.
105
     */
106
    private void updateAssemblyRoles(Long id, List<Role> updatedRoles) {
107
        // TODO: test it.
108
        Assembly assembly = getAssemblyById(id);
109
        List<Role> currentRoles = assembly.getRoles();
110

    
111
        // Find new roles.
112
        List<Role> currentRolesNew = new LinkedList<>(currentRoles);
113
        List<Role> updatedRolesNew = new LinkedList<>(updatedRoles);
114
        updatedRolesNew.removeAll(currentRolesNew);
115

    
116
        // Find deleted roles.
117
        List<Role> currentRolesDeleted = new LinkedList<>(currentRoles);
118
        List<Role> updatedRolesDeleted = new LinkedList<>(updatedRoles);
119
        currentRolesDeleted.removeAll(updatedRolesDeleted);
120

    
121
        // If no role has been deleted or added, then updating is unnecessary.
122
        if (updatedRolesNew.size() == 0 && currentRolesDeleted.size() == 0) return;
123

    
124
        // Add new roles and remove deleted roles.
125
        for (Role newRole : updatedRolesNew) {
126
            currentRoles.add(this.roleRepository.getById(newRole.getId()));
127
        }
128
        currentRoles.removeAll(currentRolesDeleted);
129

    
130
        // Save updates to database.
131
        this.assemblyRepository.save(assembly);
132
    }
133

    
134
    /**
135
     * Create new assembly.
136
     * @param assemblyValues - Assembly values.
137
     * @return ID of assembly.
138
     */
139
    @Override
140
    public Long createAssembly(Assembly assemblyValues) {
141
        // TODO: test it.
142
        // Create new assembly and assign values.
143
        Assembly assembly = new Assembly();
144
        assembly.setName(assemblyValues.getName());
145
        assembly.setSQLQuery(assemblyValues.getSQLQuery());
146
        assembly.setAssemblyOrder(this.assemblyRepository.findFirst1ByOrderByAssemblyOrder().getAssemblyOrder() + 1);
147
        assembly.setIsPublic(assemblyValues.getIsPublic());
148
        List<Role> roles = new LinkedList<>();
149

    
150
        // Add access for roles.
151
        if (assemblyValues.getRoles() != null && assemblyValues.getRoles().size() > 0) {
152
            for (Role newRole : assemblyValues.getRoles()) {
153
                roles.add(this.roleRepository.getById(newRole.getId()));
154
            }
155
        }
156

    
157
        assembly.setRoles(roles);
158

    
159
        // Create new record in database.
160
        this.assemblyRepository.save(assembly);
161

    
162
        return assembly.getId();
163
    }
164
}
(2-2/16)