1 package fr.ifremer.dali.dao.referential.pmfm;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 import com.google.common.collect.ImmutableList;
27 import com.google.common.collect.Lists;
28 import fr.ifremer.dali.config.DaliConfiguration;
29 import fr.ifremer.dali.dao.referential.DaliReferentialDao;
30 import fr.ifremer.dali.dao.referential.transcribing.DaliTranscribingItemDao;
31 import fr.ifremer.quadrige3.core.dao.referential.pmfm.QualitativeValueDaoImpl;
32 import fr.ifremer.quadrige3.core.service.technical.CacheService;
33 import fr.ifremer.dali.dao.technical.Daos;
34 import fr.ifremer.dali.dto.DaliBeanFactory;
35 import fr.ifremer.dali.dto.referential.pmfm.QualitativeValueDTO;
36 import fr.ifremer.dali.service.StatusFilter;
37 import org.hibernate.SessionFactory;
38 import org.hibernate.type.IntegerType;
39 import org.hibernate.type.StringType;
40 import org.springframework.beans.factory.annotation.Autowired;
41 import org.springframework.cache.Cache;
42 import org.springframework.dao.DataRetrievalFailureException;
43 import org.springframework.stereotype.Repository;
44
45 import javax.annotation.Resource;
46 import java.util.Arrays;
47 import java.util.Iterator;
48 import java.util.List;
49 import java.util.Map;
50
51
52
53
54
55 @Repository("daliQualitativeValueDao")
56 public class DaliQualitativeValueDaoImpl extends QualitativeValueDaoImpl implements DaliQualitativeValueDao {
57
58 @Resource
59 protected CacheService cacheService;
60
61 @Resource
62 protected DaliConfiguration config;
63
64 @Resource(name = "daliTranscribingItemDao")
65 private DaliTranscribingItemDao transcribingItemDao;
66
67 @Resource(name = "daliReferentialDao")
68 protected DaliReferentialDao referentialDao;
69
70
71
72
73
74
75 @Autowired
76 public DaliQualitativeValueDaoImpl(SessionFactory sessionFactory) {
77 super(sessionFactory);
78 }
79
80
81 @Override
82 public List<QualitativeValueDTO> getQualitativeValuesByParameterCode(String parameterCode) {
83
84 Cache cacheById = cacheService.getCache(QUALITATIVE_VALUE_BY_ID_CACHE);
85 List<QualitativeValueDTO> result = Lists.newArrayList();
86 Map<Integer, String> transcribingNamesById = getTranscribingNames();
87
88 Iterator<Object[]> it = Daos.queryIteratorWithStatus(
89 createQuery("allQualitativeValuesByParameterCode", "parameterCode", StringType.INSTANCE, parameterCode),
90 StatusFilter.ALL.toStatusCodes());
91
92 while (it.hasNext()) {
93 Object[] source = it.next();
94 QualitativeValueDTO qualitativeValue = toQualitativeValueDTO(Arrays.asList(source).iterator(), transcribingNamesById);
95 result.add(qualitativeValue);
96 cacheById.put(qualitativeValue.getId(), qualitativeValue);
97 }
98
99 return ImmutableList.copyOf(result);
100 }
101
102
103 @Override
104 public List<QualitativeValueDTO> getQualitativeValuesByPmfmId(Integer pmfmId) {
105
106 List<QualitativeValueDTO> result = Lists.newArrayList();
107 Map<Integer, String> transcribingNamesById = getTranscribingNames();
108
109 Iterator<Object[]> it = Daos.queryIteratorWithStatus(
110 createQuery("allQualitativeValuesByPmfmId", "pmfmId", IntegerType.INSTANCE, pmfmId),
111 StatusFilter.ACTIVE.toStatusCodes());
112
113 while (it.hasNext()) {
114 Object[] source = it.next();
115 QualitativeValueDTO qualitativeValue = toQualitativeValueDTO(Arrays.asList(source).iterator(), transcribingNamesById);
116 result.add(qualitativeValue);
117 }
118
119 return ImmutableList.copyOf(result);
120 }
121
122
123 @Override
124 public QualitativeValueDTO getQualitativeValueById(int qualitativeValueId) {
125 Object[] source = queryUnique("qualitativeValueById", "qualitativeValueId", IntegerType.INSTANCE, qualitativeValueId);
126
127 if (source == null) {
128 throw new DataRetrievalFailureException("can't load qualitative value with id = " + qualitativeValueId);
129 }
130
131 return toQualitativeValueDTO(Arrays.asList(source).iterator(), getTranscribingNames());
132 }
133
134 private Map<Integer, String> getTranscribingNames() {
135 return transcribingItemDao.getAllTranscribingItemsById(config.getTranscribingItemTypeLbForQualitativeValueNm());
136 }
137
138 private QualitativeValueDTO toQualitativeValueDTO(Iterator<Object> source, Map<Integer, String> transcribingNamesById) {
139 QualitativeValueDTO result = DaliBeanFactory.newQualitativeValueDTO();
140 result.setId((Integer) source.next());
141 result.setName((String) source.next());
142 result.setDescription((String) source.next());
143 result.setStatus(referentialDao.getStatusByCode((String) source.next()));
144
145
146 result.setName(transcribingNamesById.getOrDefault(result.getId(), result.getName()));
147
148 return result;
149 }
150
151 }