1 package fr.ifremer.dali.dao.data.samplingoperation;
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.Lists;
27 import fr.ifremer.dali.dao.DaliDatabaseResource;
28 import fr.ifremer.dali.dao.administration.user.DaliDepartmentDao;
29 import fr.ifremer.dali.dao.referential.DaliReferentialDao;
30 import fr.ifremer.dali.dao.referential.DaliSamplingEquipmentDao;
31 import fr.ifremer.dali.dao.referential.DaliUnitDao;
32 import fr.ifremer.dali.dao.referential.pmfm.DaliPmfmDao;
33 import fr.ifremer.dali.dao.technical.Geometries;
34 import fr.ifremer.dali.dto.CoordinateDTO;
35 import fr.ifremer.dali.dto.DaliBeanFactory;
36 import fr.ifremer.dali.dto.DaliBeans;
37 import fr.ifremer.dali.dto.data.measurement.MeasurementDTO;
38 import fr.ifremer.dali.dto.data.sampling.SamplingOperationDTO;
39 import fr.ifremer.dali.dto.referential.pmfm.PmfmDTO;
40 import fr.ifremer.dali.service.DaliServiceLocator;
41 import fr.ifremer.quadrige3.core.test.AbstractDaoTest;
42 import org.junit.Before;
43 import org.junit.ClassRule;
44 import org.junit.FixMethodOrder;
45 import org.junit.Test;
46 import org.junit.runners.MethodSorters;
47
48 import java.math.BigDecimal;
49 import java.util.Collection;
50 import java.util.List;
51 import java.util.Map;
52
53 import static org.junit.Assert.*;
54
55 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
56 public class SamplingOperationDaoWriteTest extends AbstractDaoTest {
57
58 @ClassRule
59 public static final DaliDatabaseResource dbResource = DaliDatabaseResource.writeDb();
60
61 private DaliReferentialDao refDao;
62 private DaliPmfmDao pmfmDao;
63 private DaliSamplingOperationDao samplingOperationDao;
64 private DaliDepartmentDao departmentDao;
65 private DaliSamplingEquipmentDao samplingEquipmentDao;
66 private DaliUnitDao unitDao;
67
68 private static final int SURVEY_ID = 101;
69
70 @Before
71 @Override
72 public void setUp() throws Exception {
73 super.setUp();
74 refDao = DaliServiceLocator.instance().getService("daliReferentialDao", DaliReferentialDao.class);
75 pmfmDao = DaliServiceLocator.instance().getService("daliPmfmDao", DaliPmfmDao.class);
76 samplingOperationDao = DaliServiceLocator.instance().getService("daliSamplingOperationDao", DaliSamplingOperationDao.class);
77 departmentDao = DaliServiceLocator.instance().getService("daliDepartmentDao", DaliDepartmentDao.class);
78 samplingEquipmentDao = DaliServiceLocator.instance().getService("daliSamplingEquipmentDao", DaliSamplingEquipmentDao.class);
79 unitDao = DaliServiceLocator.instance().getService("daliUnitDao", DaliUnitDao.class);
80 setCommitOnTearDown(true);
81 }
82
83 @Test
84 public void createUpdateSamplingOperation() {
85
86 List<SamplingOperationDTO> samplingOperations = samplingOperationDao.getSamplingOperationsBySurveyId(SURVEY_ID, true);
87 assertNotNull(samplingOperations);
88 assertEquals(0, samplingOperations.size());
89
90
91 SamplingOperationDTO samplingOperation = DaliBeanFactory.newSamplingOperationDTO();
92 samplingOperation.setName("1");
93 samplingOperation.setTime(1200);
94 samplingOperation.setSize(10d);
95 samplingOperation.setSizeUnit(unitDao.getUnitById(12));
96 samplingOperation.setComment("comment 1");
97 samplingOperation.setSamplingEquipment(samplingEquipmentDao.getSamplingEquipmentById(4));
98 samplingOperation.setPmfms(null);
99 samplingOperation.setSamplingDepartment(departmentDao.getDepartmentById(1));
100 samplingOperation.setDepthLevel(refDao.getDepthLevelById(1));
101 samplingOperation.setPositioning(refDao.getPositioningSystemById(1));
102 samplingOperation.setDirty(true);
103 samplingOperations = Lists.newArrayList(samplingOperation);
104
105 samplingOperationDao.saveSamplingOperationsBySurveyId(SURVEY_ID, samplingOperations);
106
107
108 assertNotNull(samplingOperation.getId());
109 Integer samplingOperationId = samplingOperation.getId();
110
111
112 samplingOperations = samplingOperationDao.getSamplingOperationsBySurveyId(SURVEY_ID, true);
113 assertNotNull(samplingOperations);
114 assertEquals(1, samplingOperations.size());
115 SamplingOperationDTO reloadedSamplingOperation = samplingOperations.get(0);
116 assertSamplingOperationEquals(samplingOperation, reloadedSamplingOperation);
117
118
119 samplingOperation.setComment("new comment 1");
120
121 PmfmDTO pmfm1 = pmfmDao.getPmfmById(3);
122 assertNotNull(pmfm1);
123 MeasurementDTO m1 = DaliBeanFactory.newMeasurementDTO();
124 m1.setNumericalValue(BigDecimal.valueOf(2.5));
125 m1.setPrecision(2);
126 m1.setDigitNb(1);
127 m1.setComment("numeric measurement on pmfm 143 (sampling operation)");
128 m1.setPmfm(pmfm1);
129 MeasurementDTO m2 = DaliBeanFactory.newMeasurementDTO();
130 m2.setNumericalValue(BigDecimal.valueOf(1.28));
131 m2.setPrecision(3);
132 m2.setDigitNb(2);
133 m2.setComment("numeric measurement 2 on pmfm 143 (sampling operation)");
134 m2.setPmfm(pmfm1);
135
136 samplingOperation.setMeasurements(Lists.newArrayList(m1, m2));
137 samplingOperation.setSamplingEquipment(samplingEquipmentDao.getSamplingEquipmentById(1));
138 samplingOperation.setDirty(true);
139
140
141 SamplingOperationDTO samplingOperation2 = DaliBeanFactory.newSamplingOperationDTO();
142 samplingOperation2.setName("2");
143 samplingOperation2.setTime(260);
144 samplingOperation2.setSize(0.5);
145 samplingOperation2.setSizeUnit(unitDao.getUnitById(13));
146 samplingOperation2.setComment("comment 2");
147 samplingOperation2.setSamplingEquipment(samplingEquipmentDao.getSamplingEquipmentById(5));
148 samplingOperation2.setPmfms(null);
149 samplingOperation2.setSamplingDepartment(departmentDao.getDepartmentById(2));
150 samplingOperation2.setDepthLevel(refDao.getDepthLevelById(2));
151 samplingOperation2.setPositioning(refDao.getPositioningSystemById(2));
152 samplingOperation2.setDirty(true);
153 samplingOperations = Lists.newArrayList(samplingOperation, samplingOperation2);
154
155
156 samplingOperationDao.saveSamplingOperationsBySurveyId(SURVEY_ID, samplingOperations);
157
158 assertNotNull(samplingOperation2.getId());
159 assertNotEquals(samplingOperationId, samplingOperation2.getId());
160 assertEquals(samplingOperationId, samplingOperation.getId());
161
162
163 samplingOperations = samplingOperationDao.getSamplingOperationsBySurveyId(SURVEY_ID, true);
164 assertNotNull(samplingOperations);
165 assertEquals(2, samplingOperations.size());
166
167 Map<Integer, SamplingOperationDTO> map = DaliBeans.mapById(samplingOperations);
168
169 assertSamplingOperationEquals(samplingOperation, map.get(samplingOperation.getId()));
170 assertSamplingOperationEquals(samplingOperation2, map.get(samplingOperation2.getId()));
171
172
173 samplingOperationDao.remove(samplingOperation.getId());
174
175
176
177
178
179
180
181
182 List<SamplingOperationDTO> detailedOperations = samplingOperationDao.getSamplingOperationsBySurveyId(SURVEY_ID, true);
183 assertNotNull(detailedOperations);
184 assertEquals(1, detailedOperations.size());
185 SamplingOperationDTO detailedOperation = detailedOperations.get(0);
186 assertSamplingOperationEquals(samplingOperation2, detailedOperation);
187
188
189 detailedOperation.setDepth(12.);
190 detailedOperation.setMinDepth(10.1);
191 detailedOperation.setMaxDepth(15.5);
192 detailedOperation.setIndividualCount(5);
193 CoordinateDTO coordinate = DaliBeanFactory.newCoordinateDTO();
194 coordinate.setMinLongitude(3.348000);
195 coordinate.setMinLatitude(48.8984100);
196 coordinate.setMaxLongitude(3.655000);
197 coordinate.setMaxLatitude(49.019200);
198 detailedOperation.setCoordinate(coordinate);
199 detailedOperation.setDirty(true);
200
201
202 samplingOperationDao.saveSamplingOperationsBySurveyId(SURVEY_ID, detailedOperations);
203
204
205 List<SamplingOperationDTO> reloadedDetailedOperations = samplingOperationDao.getSamplingOperationsBySurveyId(SURVEY_ID, true);
206 assertNotNull(reloadedDetailedOperations);
207 assertEquals(1, reloadedDetailedOperations.size());
208 assertSamplingOperationEquals(detailedOperation, reloadedDetailedOperations.get(0));
209
210 }
211
212 @Test
213 public void deleteAllSamplingOperations() {
214 samplingOperationDao.removeBySurveyId(SURVEY_ID);
215 }
216
217 private void assertSamplingOperationEquals(SamplingOperationDTO expectedSamplingOperation, SamplingOperationDTO samplingOperationToTest) {
218 assertTrue(expectedSamplingOperation != samplingOperationToTest);
219 assertEquals(expectedSamplingOperation.getId(), samplingOperationToTest.getId());
220 assertEquals(expectedSamplingOperation.getComment(), samplingOperationToTest.getComment());
221 assertCoordinateEquals(expectedSamplingOperation.getCoordinate(), samplingOperationToTest.getCoordinate());
222 assertEquals(expectedSamplingOperation.getSamplingEquipment(), samplingOperationToTest.getSamplingEquipment());
223 assertEquals(expectedSamplingOperation.getTime(), samplingOperationToTest.getTime());
224 assertEquals(expectedSamplingOperation.getDepth(), samplingOperationToTest.getDepth());
225 assertEquals(expectedSamplingOperation.getMaxDepth(), samplingOperationToTest.getMaxDepth());
226 assertEquals(expectedSamplingOperation.getMinDepth(), samplingOperationToTest.getMinDepth());
227 assertEquals(expectedSamplingOperation.getName(), samplingOperationToTest.getName());
228 assertEquals(expectedSamplingOperation.getIndividualCount(), samplingOperationToTest.getIndividualCount());
229 assertEquals(expectedSamplingOperation.getDepthLevel(), samplingOperationToTest.getDepthLevel());
230 assertEquals(expectedSamplingOperation.getSamplingDepartment(), samplingOperationToTest.getSamplingDepartment());
231 assertEquals(expectedSamplingOperation.getSize(), samplingOperationToTest.getSize());
232 assertEquals(expectedSamplingOperation.getSizeUnit(), samplingOperationToTest.getSizeUnit());
233 assertPmfmsEquals(expectedSamplingOperation.getPmfms(), samplingOperationToTest.getPmfms());
234 assertPmfmsEquals(expectedSamplingOperation.getIndividualPmfms(), samplingOperationToTest.getIndividualPmfms());
235 }
236
237 private void assertCoordinateEquals(CoordinateDTO coordinateBase, CoordinateDTO coordinateToControl) {
238 if (coordinateBase == null) {
239 assertFalse(Geometries.isValid(coordinateToControl));
240 return;
241 } else {
242 assertNotNull(coordinateToControl);
243 }
244 assertTrue(Geometries.equals(coordinateBase, coordinateToControl));
245 }
246
247 private void assertPmfmsEquals(Collection<PmfmDTO> expectedPmfms, Collection<PmfmDTO> pmfmsToTest) {
248 assertTrue(expectedPmfms != pmfmsToTest);
249 assertEquals(expectedPmfms.size(), pmfmsToTest.size());
250 Map<Integer, PmfmDTO> map = DaliBeans.mapById(pmfmsToTest);
251 for (PmfmDTO expectedPmfm : expectedPmfms) {
252 PmfmDTO pmfmToTest = map.get(expectedPmfm.getId());
253 assertNotNull(pmfmToTest);
254
255 }
256 }
257 }