Project

General

Profile

Download (4.42 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2017 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.cdm.mock;
10

    
11
import java.util.Collection;
12
import java.util.HashMap;
13
import java.util.HashSet;
14
import java.util.List;
15
import java.util.Map;
16
import java.util.Set;
17
import java.util.UUID;
18

    
19
import org.springframework.beans.factory.annotation.Autowired;
20
import org.springframework.beans.factory.annotation.Qualifier;
21
import org.springframework.stereotype.Service;
22
import org.springframework.transaction.TransactionStatus;
23
import org.springframework.transaction.annotation.Transactional;
24

    
25
import eu.etaxonomy.cdm.api.application.CdmRepository;
26
import eu.etaxonomy.cdm.model.common.CdmBase;
27
import eu.etaxonomy.cdm.model.name.Rank;
28
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
29
import eu.etaxonomy.cdm.vaadin.presenter.phycobank.RegistrationDTO;
30

    
31
/**
32
 * @author a.kohlbecker
33
 * @since Mar 10, 2017
34
 *
35
 */
36
@Service("registrationServiceMock")
37
@Transactional
38
public class RegistrationService {
39

    
40
    @Autowired
41
    @Qualifier("cdmRepository")
42
    private CdmRepository repo;
43

    
44
    private Map<UUID, Registration> registrationsByUUID = new HashMap<>();
45
    private Map<String, Registration> registrationsByRegID = new HashMap<>();
46
    private Map<String, RegistrationDTO> registrationDTOsByRegID = new HashMap<>();
47
    private Map<Integer, Set<RegistrationDTO>> registrationDTOsByCitationID = new HashMap<>();
48

    
49
    private Collection<CdmBase> cdmEntities = new HashSet<>();
50

    
51
    public RegistrationService() {
52
    }
53

    
54

    
55
    int minTypeDesignationCount = 1;
56

    
57
    protected void init(){
58
        if(registrationsByUUID.size() == 0){
59
            TransactionStatus tx = repo.startTransaction(true);
60
            while(registrationsByUUID.size() < 20){
61
                List<TaxonNameBase> names = repo.getNameService().list(TaxonNameBase.class, 100, 0, null, null);
62
                for(TaxonNameBase name : names){
63
                    if(name != null && name.getRank() != null && name.getRank().isLower(Rank.SUBFAMILY())){
64
                        if(name.getTypeDesignations().size() > minTypeDesignationCount - 1) {
65

    
66
                            // name
67
                            Registration nameReg = new Registration();
68
                            nameReg.setName(name);
69
                            cdmEntities.add(name);
70
                            put(nameReg, new RegistrationDTO(nameReg, null));
71

    
72
                            // typedesignation
73
                            Registration typedesignationReg = new Registration();
74
                            typedesignationReg.addTypeDesignations(name.getTypeDesignations());
75
                            cdmEntities.addAll(name.getTypeDesignations());
76
                            put(typedesignationReg,  new RegistrationDTO(typedesignationReg, name));
77
                        }
78
                    }
79
                }
80
            }
81
            repo.commitTransaction(tx);
82
        }
83
    }
84

    
85
    /**
86
     * @param reg
87
     */
88
    private void put(Registration reg, RegistrationDTO dto) {
89
        registrationsByUUID.put(reg.getUuid(), reg);
90
        registrationsByRegID.put(reg.getSpecificIdentifier(), reg);
91
        registrationDTOsByRegID.put(reg.getSpecificIdentifier(), dto);
92
        if(! registrationDTOsByCitationID.containsKey(dto.getCitationID())){
93
            registrationDTOsByCitationID.put(dto.getCitationID(), new HashSet<RegistrationDTO>());
94
        }
95
        registrationDTOsByCitationID.get(dto.getCitationID()).add(dto);
96
    }
97

    
98
    private void mergeBack(){
99
        cdmEntities.forEach(e -> repo.getNameService().getSession().merge(e));
100
    }
101

    
102
    /**
103
     * {@inheritDoc}
104
     */
105
    public Registration load(UUID uuid) {
106
        init();
107
        return registrationsByUUID.get(uuid);
108
    }
109

    
110
    public Collection<Registration> list(){
111
        init();
112
        return registrationsByUUID.values();
113
    }
114

    
115
    public Collection<RegistrationDTO> listDTOs() {
116
        init();
117
        return registrationDTOsByRegID.values();
118
    }
119

    
120
    public Map<Integer, Set<RegistrationDTO>> listDTOsByWorkingSet() {
121
        init();
122
        return registrationDTOsByCitationID;
123
    }
124

    
125
    /**
126
     * @param registrationID
127
     * @return
128
     */
129
    public Registration loadByRegistrationID(Integer registrationID) {
130
        init();
131
        return registrationsByRegID.get(registrationID.toString());
132
    }
133

    
134

    
135
}
(2-2/3)