Author: blavenier Date: 2013-01-17 17:31:22 +0100 (Thu, 17 Jan 2013) New Revision: 216 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/216 Log: ref refs #1920: [Persistence] Adagio Donn?\195?\169es th?\195?\169matiques - Start implementation of FishingOperation.create() - Change date store in CruiseService.create() Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceTest.java Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-01-17 13:55:41 UTC (rev 215) +++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-01-17 16:31:22 UTC (rev 216) @@ -27,6 +27,7 @@ import com.google.common.collect.Lists; import fr.ifremer.adagio.core.dao.administration.user.PersonDao; import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip; +import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.ObservedFishingTrip; import fr.ifremer.adagio.core.dao.data.survey.scientificCruise.ScientificCruise; import fr.ifremer.adagio.core.dao.data.survey.scientificCruise.ScientificCruiseDao; import fr.ifremer.adagio.core.dao.referential.QualityFlagDao; @@ -300,15 +301,24 @@ if (copyIfNull && source.getYear() == null && source.getBeginDate() == null) { target.setDepartureDateTime(null); } else if (source.getBeginDate() != null) { - target.setDepartureDateTime(source.getBeginDate()); + calendar.setTime(source.getBeginDate()); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + target.setDepartureDateTime(calendar.getTime()); } // EndDate if (copyIfNull && source.getEndDate() == null) { target.setReturnDateTime(null); } else if (source.getEndDate() != null) { - target.setReturnDateTime(source.getEndDate()); + calendar.setTime(source.getEndDate()); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + target.setReturnDateTime(calendar.getTime()); } + + // Poche + // TODO BLA : voir si le PSFM exists // Comment if (copyIfNull && source.getComment() == null) { @@ -340,7 +350,12 @@ // Default values : target.setSynchronizationStatus(SynchronizationStatus.DIRTY.getValue()); if (target.getCreationDate() == null) { - target.setCreationDate(new Date()); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + target.setCreationDate(calendar.getTime()); } if (target.getManagerPerson() != null) { target.setRecorderPerson(target.getManagerPerson()); @@ -348,18 +363,18 @@ } // FishingTrip - FishingTrip fishingTrip = null; + ObservedFishingTrip fishingTrip = null; if (target.getFishingTrips() == null || target.getFishingTrips().size() == 0) { - fishingTrip = FishingTrip.Factory.newInstance(); + fishingTrip = ObservedFishingTrip.Factory.newInstance(); if (target.getFishingTrips() == null) { - target.setFishingTrips(Lists.newArrayList(fishingTrip)); + target.setFishingTrips(Lists.newArrayList((FishingTrip)fishingTrip)); fishingTrip.setScientificCruise(target); } else { target.getFishingTrips().add(fishingTrip); fishingTrip.setScientificCruise(target); } } else { - fishingTrip = target.getFishingTrips().iterator().next(); + fishingTrip = (ObservedFishingTrip)target.getFishingTrips().iterator().next(); } // Fill fishing trip with scientificCruise info: @@ -403,9 +418,7 @@ } } - // Save miscDataBuffer into comments - // TODO BLA : vérifier que les UI Allegro n'utilise pas ce commentaires, - // mais bien celui de scientificCruise + // Save miscDataBuffer into fishing trip comments, because it's not used in Allegro fishingTrip.setComments(miscDataBuffer.toString()); } Modified: trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java 2013-01-17 13:55:41 UTC (rev 215) +++ trunk/tutti-persistence-adagio/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java 2013-01-17 16:31:22 UTC (rev 216) @@ -24,13 +24,43 @@ * #L% */ +import fr.ifremer.adagio.core.dao.data.operation.FishingOperationDao; +import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip; +import fr.ifremer.adagio.core.dao.data.survey.scientificCruise.ScientificCruise; +import fr.ifremer.adagio.core.dao.data.survey.scientificCruise.ScientificCruiseDao; +import fr.ifremer.adagio.core.dao.data.vessel.feature.use.GearUseFeatures; +import fr.ifremer.adagio.core.dao.data.vessel.position.VesselPosition; +import fr.ifremer.adagio.core.dao.referential.QualityFlagDao; +import fr.ifremer.adagio.core.dao.referential.gear.Gear; +import fr.ifremer.adagio.core.dao.referential.gear.GearDao; +import fr.ifremer.adagio.core.dao.referential.location.Location; +import fr.ifremer.adagio.core.dao.referential.location.LocationDao; +import fr.ifremer.adagio.core.dao.technical.synchronization.SynchronizationStatus; +import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.Program; +import fr.ifremer.tutti.persistence.entities.referential.Country; +import fr.ifremer.tutti.persistence.entities.referential.Person; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.hibernate.type.IntegerType; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataRetrievalFailureException; import org.springframework.stereotype.Service; +import com.google.common.collect.Lists; + +import java.sql.Timestamp; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.Iterator; import java.util.List; +import javax.annotation.Resource; + /** * @author tchemit <chemit@codelutin.com> * @since 0.3 @@ -42,6 +72,26 @@ private static final Log log = LogFactory.getLog(FishingOperationPersistenceServiceImpl.class); + @Autowired(required = true) + protected ReferentialPersistenceService referentielService; + + @Resource(name = "fishingOperationDao") + protected FishingOperationDao fishingOperationDao; + + @Resource(name = "gearDao") + protected GearDao gearDao; + + @Resource(name = "locationDao") + protected LocationDao locationDao; + + @Resource(name = "scientificCruiseDao") + protected ScientificCruiseDao scientificCruiseDao; + + @Resource(name = "qualityFlagDao") + protected QualityFlagDao qualityFlagDao; + + protected Calendar calendar = new GregorianCalendar(); + @Override public List<FishingOperation> getAllFishingOperation(String cruiseId) { return null; @@ -49,14 +99,242 @@ @Override public FishingOperation getFishingOperation(String id) { - return null; + Object[] source = queryUnique( + "fishingOperation", + "fishingOperationId", IntegerType.INSTANCE, Integer.valueOf(id)); + + if (source == null) { + throw new DataRetrievalFailureException("Could not retrieve fishingOperation with id=" + id); + } + FishingOperation result = new FishingOperation(); + result.setId(id); + + // Cruise : + // do load load Cruise here, because it will be attach upper in the call stack + + int colIndex=0; + + // Start date + calendar.setTimeInMillis(((Timestamp) source[colIndex++]).getTime()); + int millisecond = calendar.get(Calendar.MILLISECOND); + if (millisecond > 0) { + // Recognize a fake date : see method beanToEntity() + result.setGearShootingStartDate(null); + } + else { + result.setGearShootingStartDate(calendar.getTime()); + } + + // End date + result.setGearShootingEndDate((Date) source[colIndex++]); + + // Comment : + result.setComment((String) source[colIndex++]); + + // Gear : + Integer gearId = (Integer)source[colIndex++]; + if (gearId != null) { + // TODO TC : activer un cache sur getGear() + fr.ifremer.tutti.persistence.entities.referential.Gear gear = referentielService.getGear(gearId); + result.setGear(gear); + } + + return result; } @Override public FishingOperation createFishingOperation(FishingOperation bean) { - return null; + if (bean == null) { + throw new IllegalArgumentException("fishingOperation could not be null"); + } + if (bean.getCruise() == null || bean.getCruise().getId() == null) { + throw new IllegalArgumentException("fishingOperation.getCruise() could not be null"); + } + fr.ifremer.adagio.core.dao.data.operation.FishingOperation fishingOperation = fr.ifremer.adagio.core.dao.data.operation.FishingOperation.Factory.newInstance(); + beanToEntity(bean, fishingOperation, true); + fishingOperationDao.create(fishingOperation); + + bean.setId(String.valueOf(fishingOperation.getId())); + return bean; } + + protected void beanToEntity(FishingOperation source, fr.ifremer.adagio.core.dao.data.operation.FishingOperation target, boolean copyIfNull) { + //StringBuffer miscDataBuffer = new StringBuffer(); + ScientificCruise scientificCruise = null; + FishingTrip fishingtrip = target.getFishingTrip(); + if (fishingtrip == null) { + // TODO BLA éviter ici un rechargement de fishingTrip : + scientificCruise = scientificCruiseDao.load(Integer.valueOf(source.getCruise().getId())); + fishingtrip = scientificCruise.getFishingTrips().iterator().next(); + fishingtrip.getOperations().add(target); // Inverse link + } + else { + scientificCruise = fishingtrip.getScientificCruise(); + } + // Link to parent fishing trip + target.setFishingTrip(fishingtrip); + // Store previous start/stop position + VesselPosition startPosition = null; + VesselPosition endPosition = null; + if (target.getVesselPositions() != null) { + for (Iterator iterator = target.getVesselPositions().iterator(); iterator.hasNext();) { + VesselPosition position = (VesselPosition) iterator.next(); + if (position.getDateTime() != null && position.getDateTime().equals(target.getStartDateTime())) { + startPosition = position; + } + else if (position.getDateTime() == null || position.getDateTime().equals(target.getEndDateTime())) { + endPosition = position; + } + } + } + + // StationNumber + if (copyIfNull && source.getStationNumber() == null) { + // TODO BL : where to store station number + } else if (source.getStationNumber() != null) { + //source.getStationNumber(); + // TODO BL : where to store station number + } + + // OP N° + if (copyIfNull && source.getFishingOperationNumber() == null) { + // TODO BL : where to store OP N° + } else if (source.getFishingOperationNumber() != null) { + //source.getStationNumber(); + // TODO BL : where to store OP N° + } + + // Start date : + if (copyIfNull && source.getGearShootingStartDate() == null) { + target.setStartDateTime(null); + target.setFishingStartDateTime(null); + } else if (source.getGearShootingStartDate() != null) { + calendar.setTime(source.getGearShootingStartDate()); + // Reset millisecond (as need for Allegro) + calendar.set(Calendar.MILLISECOND, 0); + target.setStartDateTime(calendar.getTime()); + target.setFishingStartDateTime(calendar.getTime()); + } + + // End date : + if (copyIfNull && source.getGearShootingEndDate() == null) { + target.setEndDateTime(null); + target.setFishingEndDateTime(null); + } else if (source.getGearShootingEndDate() != null) { + calendar.setTime(source.getGearShootingEndDate()); + // Reset millisecond (as need for Allegro) + calendar.set(Calendar.MILLISECOND, 0); + target.setEndDateTime(calendar.getTime()); + target.setFishingEndDateTime(calendar.getTime()); + } + + // Comment + if (copyIfNull && source.getComment() == null) { + target.setComments(null); + } else if (source.getComment() != null) { + target.setComments(source.getComment()); + } + + // Vessel + target.setVessel(fishingtrip.getVessel()); + + // Quality Flag : + if (target.getQualityFlag() == null) { + target.setQualityFlag(qualityFlagDao.load(enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED)); + } + + // Settings not null properties : + if (target.getStartDateTime() == null) { + // Generate a fake departureDate (precision=minute) then add 1 millisecond + calendar.setTime(scientificCruise.getDepartureDateTime()); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 1); + target.setStartDateTime(calendar.getTime()); + target.setFishingStartDateTime(calendar.getTime()); + } + + // Gear Use Features + GearUseFeatures gearUseFeature = null; + if (target.getGearUseFeatures() == null || target.getGearUseFeatures().size() == 0) { + gearUseFeature = GearUseFeatures.Factory.newInstance(); + if (target.getGearUseFeatures() == null) { + target.setGearUseFeatures(Lists.newArrayList(gearUseFeature)); + gearUseFeature.setOperation(target); + } else { + target.getGearUseFeatures().add(gearUseFeature); + gearUseFeature.setOperation(target); + } + } else { + gearUseFeature = target.getGearUseFeatures().iterator().next(); + } + + // Fill fishing trip with scientificCruise info: + gearUseFeature.setStartDate(target.getStartDateTime()); + if (gearUseFeature.getStartDate() == null) { + gearUseFeature.setStartDate(scientificCruise.getDepartureDateTime()); + } + gearUseFeature.setEndDate(target.getEndDateTime()); + gearUseFeature.setVessel(target.getVessel()); + gearUseFeature.setProgram(scientificCruise.getProgram()); + if (gearUseFeature.getCreationDate() == null) { + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + gearUseFeature.setCreationDate(calendar.getTime()); + } + if (gearUseFeature.getQualityFlag() == null) { + gearUseFeature.setQualityFlag(qualityFlagDao.load(enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED)); + } + + // Gear + if (copyIfNull && source.getGear() == null) { + gearUseFeature.setGear(null); + } else if (source.getGear() != null && source.getGear().getId() != null) { + Gear gear = gearDao.load(Integer.valueOf(source.getGear().getId())); + gearUseFeature.setGear(gear); + } + + // Start position : + if (startPosition == null) { + startPosition = VesselPosition.Factory.newInstance(); + startPosition.setOperation(target); + if (target.getVesselPositions() == null) { + target.setVesselPositions(Lists.newArrayList(startPosition)); + } + } + startPosition.setDateTime(target.getStartDateTime()); + startPosition.setLatitude(source.getGearShootingStartLatitude()); + startPosition.setLongitude(source.getGearShootingStartLongitude()); + startPosition.setVessel(target.getVessel()); + startPosition.setProgram(scientificCruise.getProgram()); + startPosition.setRecorderDepartment(scientificCruise.getRecorderDepartment()); + startPosition.setQualityFlag(target.getQualityFlag()); + + if (endPosition == null) { + endPosition = VesselPosition.Factory.newInstance(); + endPosition.setOperation(target); + target.getVesselPositions().add(endPosition); + } + endPosition.setDateTime(target.getEndDateTime()); + if (endPosition.getDateTime() == null) { + calendar.setTime(startPosition.getDateTime()); + calendar.set(Calendar.MILLISECOND, 1); + endPosition.setDateTime(calendar.getTime()); + } + endPosition.setLatitude(source.getGearShootingEndLatitude()); + endPosition.setLongitude(source.getGearShootingEndLongitude()); + endPosition.setVessel(target.getVessel()); + endPosition.setProgram(scientificCruise.getProgram()); + endPosition.setRecorderDepartment(scientificCruise.getRecorderDepartment()); + endPosition.setQualityFlag(target.getQualityFlag()); + + // Save miscDataBuffer into comments + //gearUseFeature.setComments(miscDataBuffer.toString()); + } + @Override public FishingOperation saveFishingOperation(FishingOperation bean) { return null; Modified: trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml =================================================================== --- trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml 2013-01-17 13:55:41 UTC (rev 215) +++ trunk/tutti-persistence-adagio/src/main/resources/queries-override.hbm.xml 2013-01-17 16:31:22 UTC (rev 216) @@ -161,6 +161,23 @@ ]]> <query-param name="cruiseId" type="java.lang.Integer"/> </query> + + <query cacheable="true" name="fishingOperation"> + <![CDATA[ + SELECT + o.startDateTime as startDateTime, + o.endDateTime as endDateTime, + o.comments as comments, + guf.gear.id as gearId + FROM + FishingOperationImpl o + INNER JOIN o.gearUseFeatures guf + WHERE + o.id=:fishingOperationId + ]]> + <query-param name="fishingOperationId" type="java.lang.Integer"/> + </query> + <!-- ===================================================================== --> <!-- === Requete techniques sur référentiels [REF-TXXX] === --> Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java =================================================================== --- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java 2013-01-17 13:55:41 UTC (rev 215) +++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceTest.java 2013-01-17 16:31:22 UTC (rev 216) @@ -95,7 +95,7 @@ cruise.setId(null); - cruise.setName("CGFS_2013"); + cruise.setName("Unit-test-" + System.currentTimeMillis()); cruise.setProgram(programService.getProgram(programCode)); @@ -142,7 +142,19 @@ if (log.isInfoEnabled()) { log.info("Created cruise: " + createdCruise.getId()); } + + // Reload cruise : + Cruise reloadedCruise = service.getCruise(createdCruise.getId()); + calendar.setTime(createdCruise.getBeginDate()); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + assertEquals(calendar.getTime(), reloadedCruise.getBeginDate()); + calendar.setTime(createdCruise.getEndDate()); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + assertEquals(calendar.getTime(), reloadedCruise.getEndDate()); + // New cruise, with empty optional values createdCruise.setId(null); createdCruise.setHeadOfMission(null); @@ -155,7 +167,7 @@ assertNotNull(createdCruise.getId()); assertEquals(cruise.getName(), createdCruise.getName()); - Cruise reloadedCruise = service.getCruise(createdCruise.getId()); + reloadedCruise = service.getCruise(createdCruise.getId()); assertEquals(createdCruise.getBeginDate(), reloadedCruise.getBeginDate()); assertEquals(createdCruise.getEndDate(), reloadedCruise.getEndDate()); @@ -178,7 +190,7 @@ cruise.setId(null); cruise = service.createCruise(cruise); - cruise.setName("unit-TEST"); + cruise.setName("Unit-test-" + System.currentTimeMillis()); Cruise savedCruise = service.saveCruise(cruise); assertNotNull(savedCruise); Modified: trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceTest.java =================================================================== --- trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceTest.java 2013-01-17 13:55:41 UTC (rev 215) +++ trunk/tutti-persistence-adagio/src/test/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceTest.java 2013-01-17 16:31:22 UTC (rev 216) @@ -24,45 +24,134 @@ * #L% */ +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.List; + import fr.ifremer.tutti.persistence.DatabaseResource; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.referential.Gear; + import org.junit.Before; import org.junit.ClassRule; import org.junit.Ignore; import org.junit.Test; +import static org.junit.Assert.*; /** * @author tchemit <chemit@codelutin.com> * @since 0.3 */ -@Ignore + public class FishingOperationPersistenceServiceTest { @ClassRule public static final DatabaseResource dbResource = new DatabaseResource(); protected FishingOperationPersistenceService service; + + protected ReferentialPersistenceService referentialService; + protected ProgramPersistenceService programService; + + protected CruisePersistenceService cruiseService; + + protected Cruise cruise = null; + + @Before public void setUp() throws Exception { service = TuttiPersistenceServiceLocator.getFishingOperationPersistenceService(); + cruiseService = TuttiPersistenceServiceLocator.getCruisePersistenceService(); + referentialService = TuttiPersistenceServiceLocator.getReferentialPersistenceService(); + programService = TuttiPersistenceServiceLocator.getProgramPersistenceService(); + } @Test + @Ignore public void getAllFishingOperation(/*String cruiseId*/) { } @Test + @Ignore public void getFishingOperation(/*String id*/) { } @Test public void createFishingOperation(/*FishingOperation bean*/) { + Calendar calendar = new GregorianCalendar(); + // Duplicate an existing cruise, to attach new fishing operations + cruise = cruiseService.getCruise(dbResource.getFixtures().cruiseId()); + cruise.setId(null); + cruise.setName("Unit-test-" + System.currentTimeMillis()); + cruise.setBeginDate(new Date()); + cruise.setEndDate(null); + cruise = cruiseService.createCruise(cruise); + assertNotNull(cruise.getId()); + + // Create new fishing operation : + FishingOperation fishingOperation = new FishingOperation(); + + // Set properties (with optional value to null) + fishingOperation.setCruise(cruise); + fishingOperation.setStationNumber("1"); + fishingOperation.setFishingOperationNumber(new Integer(1)); + fishingOperation.setGearShootingStartDate(null); + fishingOperation.setGearShootingEndDate(null); + fishingOperation.setGear(null); + + // Store fishing operation into database : + FishingOperation createdFishingOperation = service.createFishingOperation(fishingOperation); + assertNotNull("Fishing operation ID must not be null after creation in database", createdFishingOperation); + assertNotNull(createdFishingOperation.getId()); + // TODO BLA : add asserts on other properties + + // Trying to relaod this fishing operation + FishingOperation reloadedFishingOperation = service.getFishingOperation(createdFishingOperation.getId()); + assertNotNull(reloadedFishingOperation); + assertNull(reloadedFishingOperation.getGearShootingStartDate()); + + // Set properties + fishingOperation.setId(null); + fishingOperation.setStationNumber("2"); + fishingOperation.setFishingOperationNumber(new Integer(2)); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 1); + fishingOperation.setGearShootingStartDate(calendar.getTime()); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 10); + fishingOperation.setGearShootingEndDate(calendar.getTime()); + + fishingOperation.setGearShootingStartLatitude(33.2541f); + fishingOperation.setGearShootingStartLongitude(-5.514f); + fishingOperation.setGearShootingEndLatitude(33.7441f); + fishingOperation.setGearShootingEndLongitude(-5.597f); + + List<Gear> gears = referentialService.getAllFishingGear(); + assertNotNull(gears); + assertTrue(gears.size() > 0); + fishingOperation.setGear(gears.get(0)); + + // Store fishing operation into database : + createdFishingOperation = service.createFishingOperation(fishingOperation); + assertNotNull("Fishing operation ID must not be null after creation in database", createdFishingOperation); + assertNotNull(createdFishingOperation.getId()); + assertNotNull(createdFishingOperation.getGear()); + //assertEquals(fishingOperation.getGearShootingStartLatitude(), createdFishingOperation.getGearShootingStartLatitude()); + //assertEquals(fishingOperation.getGearShootingStartLongitude(), createdFishingOperation.getGearShootingStartLongitude()); + //assertEquals(fishingOperation.getGearShootingEndLatitude(), createdFishingOperation.getGearShootingEndLatitude()); + //assertEquals(fishingOperation.getGearShootingEndLongitude(), createdFishingOperation.getGearShootingEndLongitude()); + } @Test + @Ignore public void saveFishingOperation(/*FishingOperation bean*/) { }