Projekt

Obecné

Profil

Stáhnout (5.11 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
        Assembly assembly = getAssemblyById(updatedAssemblyValues.getId());
89
        assembly.setName(updatedAssemblyValues.getName());
90
        assembly.setSQLQuery(updatedAssemblyValues.getSQLQuery());
91
        assembly.setAssemblyOrder(updatedAssemblyValues.getAssemblyOrder());
92
        assembly.setIsPublic(updatedAssemblyValues.getIsPublic());
93
        this.assemblyRepository.save(assembly);
94

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

    
97
        return assembly.getId();
98
    }
99

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

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

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

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

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

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

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

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

    
155
        assembly.setRoles(roles);
156

    
157
        // Create new record in database.
158
        this.assemblyRepository.save(assembly);
159

    
160
        return assembly.getId();
161
    }
162
}
(2-2/16)