View Javadoc
1   package fr.ifremer.dali.dao.data.samplingoperation;
2   
3   /*
4    * #%L
5    * Dali :: Core
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2014 - 2015 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Affero General Public License as published by
13   * the Free Software Foundation, either version 3 of the License, or
14   * (at your option) any later version.
15   * 
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   * 
21   * You should have received a copy of the GNU Affero General Public License
22   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23   * #L%
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          // create one
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         // check ID
108         assertNotNull(samplingOperation.getId());
109         Integer samplingOperationId = samplingOperation.getId();
110 
111         // reload
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         // modify the first one
119         samplingOperation.setComment("new comment 1");
120         // add pmfms and measurements
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 //        samplingOperation.setPmfms(Lists.newArrayList(pmfm1));
136         samplingOperation.setMeasurements(Lists.newArrayList(m1, m2));
137         samplingOperation.setSamplingEquipment(samplingEquipmentDao.getSamplingEquipmentById(1));
138         samplingOperation.setDirty(true);
139 
140         // create another one
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         // save
156         samplingOperationDao.saveSamplingOperationsBySurveyId(SURVEY_ID, samplingOperations);
157         // check ID
158         assertNotNull(samplingOperation2.getId());
159         assertNotEquals(samplingOperationId, samplingOperation2.getId());
160         assertEquals(samplingOperationId, samplingOperation.getId());
161 
162         // reload
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         // remove a sampling operation
173         samplingOperationDao.remove(samplingOperation.getId());
174 
175 //        // reload
176 //        samplingOperations = samplingOperationDao.getSamplingOperationsBySurveyId(SURVEY_ID, true);
177 //        assertNotNull(samplingOperations);
178 //        assertEquals(1, samplingOperations.size());
179 //        assertEquals(samplingOperation2.getId(), samplingOperations.get(0).getId());
180 
181         // reload as detail
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         // affect more properties
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         // save
202         samplingOperationDao.saveSamplingOperationsBySurveyId(SURVEY_ID, detailedOperations);
203 
204         // reload and compare
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             // useless to go deeper in measurement (see MeasurementDaoWriteTest)
255         }
256     }
257 }