Author: tchemit Date: 2013-10-03 01:25:24 +0200 (Thu, 03 Oct 2013) New Revision: 1267 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1267 Log: refs #3418: [TECH] updates JAXX to 2.5.28 fixes #3334: [CAMPAGNE] gestion des navires asoci?\195?\169 (ex. chalutage en boeuf) Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SecondaryVesselTypeEnum.java Modified: trunk/pom.xml trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseFixtures.java trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml trunk/tutti-persistence/src/main/xmi/tutti-persistence.properties trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SurveyExportRow.java trunk/tutti-ui-swing/src/main/filtered-resources/log4j.properties trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/NewFishingOperationAction.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/pom.xml 2013-10-02 23:25:24 UTC (rev 1267) @@ -131,7 +131,7 @@ <eugenePluginVersion>2.7.2</eugenePluginVersion> <hibernateVersion>3.6.10.Final</hibernateVersion> - <jaxxVersion>2.5.27</jaxxVersion> + <jaxxVersion>2.5.28-SNAPSHOT</jaxxVersion> <swingXVersion>1.6.4</swingXVersion> <xworkVersion>2.3.15.1</xworkVersion> Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistence.java 2013-10-02 23:25:24 UTC (rev 1267) @@ -480,6 +480,8 @@ FishingOperation getFishingOperation(String id); + List<Vessel> getFishingOperationSecondaryVessel(String fishingOperationId); + @Transactional(readOnly = false) FishingOperation createFishingOperation(FishingOperation bean); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java 2013-10-02 23:25:24 UTC (rev 1267) @@ -646,6 +646,11 @@ } @Override + public List<Vessel> getFishingOperationSecondaryVessel(String fishingOperationId) { + return fishingOperationService.getFishingOperationSecondaryVessel(fishingOperationId); + } + + @Override public FishingOperation createFishingOperation(FishingOperation bean) { return fishingOperationService.createFishingOperation(bean); } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java 2013-10-02 23:25:24 UTC (rev 1267) @@ -436,6 +436,11 @@ } @Override + public List<Vessel> getFishingOperationSecondaryVessel(String fishingOperationId) { + throw notImplemented(); + } + + @Override public FishingOperation createFishingOperation(FishingOperation bean) { throw notImplemented(); } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceService.java 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceService.java 2013-10-02 23:25:24 UTC (rev 1267) @@ -26,6 +26,7 @@ import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; import org.springframework.transaction.annotation.Transactional; import java.util.Collection; @@ -48,6 +49,8 @@ FishingOperation getFishingOperation(String id); + List<Vessel> getFishingOperationSecondaryVessel(String fishingOperationId); + @Transactional(readOnly = false) FishingOperation createFishingOperation(FishingOperation bean); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java 2013-10-02 23:25:24 UTC (rev 1267) @@ -292,6 +292,7 @@ // End date result.setGearShootingEndDate(convertDatabase2UI((Timestamp) source[colIndex++])); + // RecorderPerson result.setRecorderPerson(Lists.<Person>newArrayList()); Iterator<Object[]> vesselPersonFeaturesList = queryList( "fishingOperationVesselPersonFeatures", @@ -376,6 +377,10 @@ result.setVessel(vessel); } + // Retrieve secondary vessels + List<Vessel> secondaryVessel = getFishingOperationSecondaryVessel(id); + result.setSecondaryVessel(secondaryVessel); + // Retrieve gear use features getGearUseCaracteristics(id, result); @@ -386,6 +391,27 @@ } @Override + public List<Vessel> getFishingOperationSecondaryVessel(String fishingOperationId) { + Iterator<Object[]> secondaryVesselList = queryList( + "fishingOperationSecondaryVessel", + "fishingOperationId", IntegerType.INSTANCE, Integer.valueOf(fishingOperationId)); + List<Vessel> result = Lists.newArrayList(); + while (secondaryVesselList.hasNext()) { + + Object[] next = secondaryVesselList.next(); + String secondaryVesselCode = (String) next[0]; + if (secondaryVesselCode != null) { + Boolean isCatchOnOperationVessel = (Boolean) next[1]; + if (isCatchOnOperationVessel == null || !isCatchOnOperationVessel) { + + Vessel vessel = referentialService.getVessel(secondaryVesselCode); + result.add(vessel); + } + } + } + return result; + } + @Override public FishingOperation createFishingOperation(FishingOperation bean) { Preconditions.checkNotNull(bean); Preconditions.checkArgument(bean.getId() == null); @@ -537,7 +563,13 @@ } // remove operation vessel associations - removeAllOperationVesselAssociation(fishingOperation); + if (CollectionUtils.isNotEmpty(fishingOperation.getOperationVesselAssociations())) { + for (OperationVesselAssociation asso : fishingOperation.getOperationVesselAssociations()) { + operationVesselAssociationDao.remove(asso); + } + fishingOperation.getOperationVesselAssociations().clear(); + } +// removeAllOperationVesselAssociation(fishingOperation); // remove fishing areas if (CollectionUtils.isNotEmpty(fishingAreas)) { @@ -895,14 +927,14 @@ target.setVessel(fishingTrip.getVessel()); // Associated vessel - if (source.getVessel() == null && target.getOperationVesselAssociations() != null) { - target.getOperationVesselAssociations().clear(); - } else if (source.getVessel() != null - && source.getVessel().getId() != null) { - setOperationVesselAssociation(target, source.getVessel().getId()); + List<String> vesselIds = Lists.newArrayList(); + if (!source.isSecondaryVesselEmpty()) { + for (Vessel vessel : source.getSecondaryVessel()) { + vesselIds.add(vessel.getId()); + } } + setOperationVesselAssociation(target, vesselIds); - // Quality Flag : if (target.getQualityFlag() == null) { target.setQualityFlag(load(QualityFlagImpl.class, enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED)); @@ -1341,47 +1373,73 @@ return gearUseMeasurement; } - protected void setOperationVesselAssociation(Operation target, String vesselCode) { - OperationVesselAssociation ova = null; - OperationVesselAssociationPK ovaPK = new OperationVesselAssociationPK(); - ovaPK.setVessel(load(VesselImpl.class, vesselCode)); - ovaPK.setOperation(target); + protected void setOperationVesselAssociation(Operation target, List<String> vesselCodes) { - // If vessel is equal as cruise vessel : do note store any VesselOperationAssociation entity - if (vesselCode.equals(target.getVessel().getCode())) { - removeAllOperationVesselAssociation(target); - return; + boolean noOperationVesselAssociations = + target.getOperationVesselAssociations() == null; + + Set<OperationVesselAssociation> toAdd = Sets.newHashSet(); + Set<OperationVesselAssociation> notChanged = Sets.newHashSet(); + + if (!noOperationVesselAssociations) { + notChanged.addAll(target.getOperationVesselAssociations()); } - // Retrieve existing association - for (OperationVesselAssociation asso : target.getOperationVesselAssociations()) { - if (asso.getOperationVesselAssociationPk().equals(ovaPK)) { - ova = asso; + for (String vesselCode : vesselCodes) { + + OperationVesselAssociation ova = null; + OperationVesselAssociationPK ovaPK = + OperationVesselAssociationPK.Factory.newInstance(); + ovaPK.setVessel(load(VesselImpl.class, vesselCode)); + ovaPK.setOperation(target); + + // If vessel is equal as cruise vessel : do note store any VesselOperationAssociation entity + if (vesselCode.equals(target.getVessel().getCode())) { + //removeAllOperationVesselAssociation(target); break; } + + // Retrieve existing association + for (OperationVesselAssociation asso : notChanged) { + if (asso.getOperationVesselAssociationPk().equals(ovaPK)) { + ova = asso; + break; + } + } + + // Create a new association + if (ova == null) { + ova = OperationVesselAssociation.Factory.newInstance(); + ova.setOperationVesselAssociationPk(ovaPK); +// if (target.getOperationVesselAssociations() == null) { +// target.setOperationVesselAssociations(Lists.newArrayList(ova)); +// } else { +// removeAllOperationVesselAssociation(target); +// target.getOperationVesselAssociations().add(ova); +// } + } + + ova.setIsCatchOnOperationVessel(Boolean.FALSE); + toAdd.add(ova); + notChanged.remove(ova); } - // Create a new association - if (ova == null) { - ova = OperationVesselAssociation.Factory.newInstance(); - ova.setOperationVesselAssociationPk(ovaPK); - if (target.getOperationVesselAssociations() == null) { - target.setOperationVesselAssociations(Lists.newArrayList(ova)); - } else { - removeAllOperationVesselAssociation(target); - target.getOperationVesselAssociations().add(ova); + if (!noOperationVesselAssociations) { + + // remove all not changed + + for (OperationVesselAssociation operationVesselAssociation : notChanged) { + operationVesselAssociationDao.remove(operationVesselAssociation); } + target.getOperationVesselAssociations().removeAll(notChanged); } - ova.setIsCatchOnOperationVessel(Boolean.FALSE); - } + if (!toAdd.isEmpty()) { - protected void removeAllOperationVesselAssociation(Operation target) { - if (target.getOperationVesselAssociations() != null) { - for (OperationVesselAssociation asso : target.getOperationVesselAssociations()) { - operationVesselAssociationDao.remove(asso); + if (noOperationVesselAssociations) { + target.setOperationVesselAssociations(Sets.<OperationVesselAssociation>newHashSet()); } - target.getOperationVesselAssociations().clear(); + target.getOperationVesselAssociations().addAll(toAdd); } } } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseFixtures.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseFixtures.java 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseFixtures.java 2013-10-02 23:25:24 UTC (rev 1267) @@ -39,6 +39,8 @@ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType; import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrder; +import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrders; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocations; @@ -267,7 +269,16 @@ cruise.setReturnLocation(allHarbour.get(1)); List<Gear> gears = referentialService.getAllFishingGear(); - cruise.setGear(Lists.newArrayList(gears)); + List<GearWithOriginalRankOrder> gearsWithOrder = Lists.newArrayListWithCapacity(gears.size()); + short rankOrder = (short) 0; + for (Gear gear : gears) { + GearWithOriginalRankOrder gearWithOriginalRankOrder = GearWithOriginalRankOrders.newGearWithOriginalRankOrder(gear); + gearWithOriginalRankOrder.setOriginalRankOrder(rankOrder); + gearWithOriginalRankOrder.setRankOrder(rankOrder); + rankOrder++; + gearsWithOrder.add(gearWithOriginalRankOrder); + } + cruise.setGear(Lists.newArrayList(gearsWithOrder)); cruise.setComment("My comments on cruise"); cruise.setSurveyPart("SurveyPart"); Modified: trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml =================================================================== --- trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml 2013-10-02 23:25:24 UTC (rev 1267) @@ -296,7 +296,7 @@ max(case when (rl.locationLevel.id = :locationLevelIdStrata) then rl.id else null end) AS strataId, max(case when (rl.locationLevel.id = :locationLevelIdSubStrata) then rl.id else null end) AS subStrataId, max(case when (rl.locationLevel.id = :locationLevelIdLocalite) then rl.id else null end) AS localiteId, - max(case when (va.isCatchOnOperationVessel = false) then va.id.vessel.code else o.vessel.code end) as vesselCode + max(o.vessel.code) as vesselCode FROM FishingOperationImpl o INNER JOIN o.gearUseFeatures guf @@ -304,20 +304,35 @@ LEFT OUTER JOIN guf.fishingAreas fa LEFT OUTER JOIN fa.regulationLocation fa2rl LEFT OUTER JOIN fa2rl.id.location rl - LEFT OUTER JOIN o.operationVesselAssociations va WHERE o.id=:fishingOperationId GROUP BY o.name, guf.rankOrder ]]> + <!--LEFT OUTER JOIN o.operationVesselAssociations va--> + <!--max(case when (va.isCatchOnOperationVessel = false) then va.id.vessel.code else o.vessel.code end) as vesselCode--> <query-param name="fishingOperationId" type="java.lang.Integer"/> <query-param name="locationLevelIdStrata" type="java.lang.Integer"/> <query-param name="locationLevelIdSubStrata" type="java.lang.Integer"/> <query-param name="locationLevelIdLocalite" type="java.lang.Integer"/> </query> - + + <query cacheable="true" name="fishingOperationSecondaryVessel"> + <![CDATA[ + SELECT + va.operationVesselAssociationPk.vessel.code, + va.isCatchOnOperationVessel + FROM + FishingOperationImpl o + LEFT OUTER JOIN o.operationVesselAssociations va + WHERE + o.id=:fishingOperationId + ]]> + <query-param name="fishingOperationId" type="java.lang.Integer"/> + </query> + <query cacheable="true" name="fishingOperationRankOrder"> <![CDATA[ - SELECT + SELECT count(o1.id) + 1 as fishingOperationRankOrder FROM FishingOperationImpl o1, Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.properties =================================================================== --- trunk/tutti-persistence/src/main/xmi/tutti-persistence.properties 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-persistence/src/main/xmi/tutti-persistence.properties 2013-10-02 23:25:24 UTC (rev 1267) @@ -37,7 +37,9 @@ fr.ifremer.tutti.persistence.entities.data.Cruise.attribute.gear.stereotype=ordered fr.ifremer.tutti.persistence.entities.data.Cruise.attribute.headOfMission.stereotype=ordered fr.ifremer.tutti.persistence.entities.data.Cruise.attribute.headOfSortRoom.stereotype=ordered + fr.ifremer.tutti.persistence.entities.data.FishingOperation.attribute.recorderPerson.stereotype=ordered +fr.ifremer.tutti.persistence.entities.data.FishingOperation.attribute.secondaryVessel.stereotype=ordered fr.ifremer.tutti.persistence.entities.data.SpeciesBatch.attribute.childBatchs.stereotype=ordered fr.ifremer.tutti.persistence.entities.data.BenthosBatch.attribute.childBatchs.stereotype=ordered Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo =================================================================== (Binary files differ) Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-10-02 23:25:24 UTC (rev 1267) @@ -982,6 +982,11 @@ } @Override + public List<Vessel> getFishingOperationSecondaryVessel(String fishingOperationId) { + return driver.getFishingOperationSecondaryVessel(fishingOperationId); + } + + @Override public FishingOperation createFishingOperation(FishingOperation bean) { // see http://forge.codelutin.com/issues/2014 Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SurveyExportRow.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SurveyExportRow.java 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/SurveyExportRow.java 2013-10-02 23:25:24 UTC (rev 1267) @@ -26,7 +26,7 @@ import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Program; -import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrder; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.Vessel; @@ -89,7 +89,7 @@ return cruise.getName(); } - public List<Gear> getGear() { + public List<GearWithOriginalRankOrder> getGear() { return cruise.getGear(); } Modified: trunk/tutti-ui-swing/src/main/filtered-resources/log4j.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/log4j.properties 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-ui-swing/src/main/filtered-resources/log4j.properties 2013-10-02 23:25:24 UTC (rev 1267) @@ -34,12 +34,14 @@ log4j.logger.fr.ifremer.tutti=INFO #log4j.logger.fr.ifremer.tutti.ui.swing.util=WARN #log4j.logger.fr.ifremer.tutti.ui.swing.util.action=INFO -#log4j.logger.fr.ifremer.tutti.ui.swing.util.attachment=INFO +#log4j.logger.org.hibernate.SQL=DEBUG +#log4j.logger.org.hibernate.hql.ast.QueryTranslatorImpl=DEBUG log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.file=${tutti.log.file} log4j.appender.file.MaxFileSize=10MB log4j.appender.file.MaxBackupIndex=4 + log4j.appender.file.layout=org.apache.log4j.PatternLayout #log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %5p [%20t] %c - %m%n log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %5p %c - %m%n Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-10-02 23:25:24 UTC (rev 1267) @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Sat Sep 28 07:21:51 CEST 2013 +#Wed Oct 02 19:41:03 CEST 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -111,8 +111,10 @@ tutti.editBenthosFrequencies.field.totalWeight.help=editFishingOperation.html\#captureBenthosFields tutti.editBenthosFrequencies.help=editFishingOperation.html\#captureBenthos tutti.editCatchBatch.action.cancelEditCatchBatch.help=editFishingOperation.html\#captureResumeActions -tutti.editCatchBatch.action.cleanWeights.help= +tutti.editCatchBatch.action.cleanWeights.help=editFishingOperation.html\#captureResumeActions tutti.editCatchBatch.action.computeWeights.help=editFishingOperation.html\#captureResumeActions +tutti.editCatchBatch.action.exportFishingOperationReport.help=editFishingOperation.html\#captureResumeActions +tutti.editCatchBatch.action.exportFishingOperationReportForSumatra.help=editFishingOperation.html\#captureResumeActions tutti.editCatchBatch.action.importPupitri.help=editFishingOperation.html\#captureResumeActions tutti.editCatchBatch.action.saveCatchBatch.help=editFishingOperation.html\#captureResumeActions tutti.editCatchBatch.field.benthosTotalSampleSortedWeight.help=editFishingOperation.html\#captureResumeFields @@ -177,11 +179,13 @@ tutti.editFishingOperation.field.location.help=editFishingOperation.html\#traitFields tutti.editFishingOperation.field.multirigAggregation.help=editFishingOperation.html\#traitFields tutti.editFishingOperation.field.recorderPerson.help=editFishingOperation.html\#traitFields +tutti.editFishingOperation.field.secondaryVessel.help= tutti.editFishingOperation.field.stationNumber.help=editFishingOperation.html\#traitFields tutti.editFishingOperation.field.strata.help=editFishingOperation.html\#traitFields tutti.editFishingOperation.field.subStrata.help=editFishingOperation.html\#traitFields tutti.editFishingOperation.field.trawlDistance.help=editFishingOperation.html\#traitFields tutti.editFishingOperation.field.vessel.help=editFishingOperation.html\#traitFields +tutti.editFishingOperation.filterSecondaryVesselType.help= tutti.editFishingOperation.help=editFishingOperation.html\#traitFields tutti.editIndividualObservationBatch.action.createBatch.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.editIndividualObservationBatch.action.exportMultiPost.help=editFishingOperation.html\#captureObservationsIndividuellesActions Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-10-02 23:25:24 UTC (rev 1267) @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Sat Sep 28 07:21:51 CEST 2013 +#Wed Oct 02 19:41:03 CEST 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -111,8 +111,10 @@ tutti.editBenthosFrequencies.field.totalWeight.help=editFishingOperation.html\#captureBenthosFields tutti.editBenthosFrequencies.help=editFishingOperation.html\#captureBenthos tutti.editCatchBatch.action.cancelEditCatchBatch.help=editFishingOperation.html\#captureResumeActions -tutti.editCatchBatch.action.cleanWeights.help= +tutti.editCatchBatch.action.cleanWeights.help=editFishingOperation.html\#captureResumeActions tutti.editCatchBatch.action.computeWeights.help=editFishingOperation.html\#captureResumeActions +tutti.editCatchBatch.action.exportFishingOperationReport.help=editFishingOperation.html\#captureResumeActions +tutti.editCatchBatch.action.exportFishingOperationReportForSumatra.help=editFishingOperation.html\#captureResumeActions tutti.editCatchBatch.action.importPupitri.help=editFishingOperation.html\#captureResumeActions tutti.editCatchBatch.action.saveCatchBatch.help=editFishingOperation.html\#captureResumeActions tutti.editCatchBatch.field.benthosTotalSampleSortedWeight.help=editFishingOperation.html\#captureResumeFields @@ -177,11 +179,13 @@ tutti.editFishingOperation.field.location.help=editFishingOperation.html\#traitFields tutti.editFishingOperation.field.multirigAggregation.help=editFishingOperation.html\#traitFields tutti.editFishingOperation.field.recorderPerson.help=editFishingOperation.html\#traitFields +tutti.editFishingOperation.field.secondaryVessel.help= tutti.editFishingOperation.field.stationNumber.help=editFishingOperation.html\#traitFields tutti.editFishingOperation.field.strata.help=editFishingOperation.html\#traitFields tutti.editFishingOperation.field.subStrata.help=editFishingOperation.html\#traitFields tutti.editFishingOperation.field.trawlDistance.help=editFishingOperation.html\#traitFields tutti.editFishingOperation.field.vessel.help=editFishingOperation.html\#traitFields +tutti.editFishingOperation.filterSecondaryVesselType.help= tutti.editFishingOperation.help=editFishingOperation.html\#traitFields tutti.editIndividualObservationBatch.action.createBatch.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.editIndividualObservationBatch.action.exportMultiPost.help=editFishingOperation.html\#captureObservationsIndividuellesActions Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-10-02 23:25:24 UTC (rev 1267) @@ -25,6 +25,7 @@ */ import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.InvalidBatchModelException; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.TuttiEntities; @@ -38,6 +39,7 @@ import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrders; import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.catches.ComputeBatchWeightsAction; @@ -61,6 +63,7 @@ import java.beans.PropertyChangeListener; import java.util.Collections; import java.util.List; +import java.util.Set; import static org.nuiton.i18n.I18n._; @@ -350,20 +353,6 @@ log.info("Edit in ui fishingOperation: " + fishingOperation); } -// // get the rankorder of the gear from cruise gears -// Gear gear = fishingOperation == null ? null : fishingOperation.getGear(); -// if (gear != null) { -// Gear newGear = Gears.newGearWithRankOrder(gear); -// fishingOperation.setGear(newGear); -// Cruise cruise = getDataContext().getCruise(); -// for (Gear cruiseGear : cruise.getGear()) { -// if (Gears.equals(cruiseGear, newGear)) { -// newGear.setRankOrder(cruiseGear.getRankOrder()); -// break; -// } -// } -// } - // now fishing operation is edited model.setEditFishingOperation(fishingOperation); @@ -441,6 +430,12 @@ editFishingOperationUIModel.setFishingOperation(bean); + editFishingOperationUIModel.setAllSecondaryVessel(null); + editFishingOperationUIModel.setFishingSecondaryVessel(null); + editFishingOperationUIModel.setScientificSecondaryVessel(null); + editFishingOperationUIModel.setOnlyCruisSecondaryVessel(null); + editFishingOperationUIModel.setSecondaryVesselType(null); + handler.clearValidators(); handler.resetAllModels(); @@ -519,6 +514,53 @@ editFishingOperationUIModel.addAllAttachment(attachments); } + Vessel cruiseVessel = getDataContext().getCruise().getVessel(); + List<Vessel> scientificVessels = getDataContext().getScientificVessels(); + List<Vessel> fishingVessels = getDataContext().getFishingVessels(); + + { // update all secondary vessel universe + List<Vessel> vessels = Lists.newArrayList(); + vessels.addAll(scientificVessels); + vessels.addAll(fishingVessels); + vessels.remove(cruiseVessel); + editFishingOperationUIModel.setAllSecondaryVessel(vessels); + } + + { // update scientific secondary vessel universe + List<Vessel> vessels = Lists.newArrayList(); + vessels.addAll(scientificVessels); + vessels.remove(cruiseVessel); + editFishingOperationUIModel.setScientificSecondaryVessel(vessels); + } + + { // update fishing secondary vessel universe + List<Vessel> vessels = Lists.newArrayList(); + vessels.addAll(fishingVessels); + vessels.remove(cruiseVessel); + editFishingOperationUIModel.setFishingSecondaryVessel(vessels); + } + + { // update only cruise vessel universe + + List<FishingOperation> fishingOperation = + getModel().getFishingOperation(); + + Set<Vessel> vesselSet = Sets.newHashSet(); + for (FishingOperation operation : fishingOperation) { + List<Vessel> secondaryVessel = persistenceService.getFishingOperationSecondaryVessel(operation.getId()); + if (CollectionUtils.isNotEmpty(secondaryVessel)) { + vesselSet.addAll(secondaryVessel); + } + } + List<Vessel> vessel = Lists.newArrayList(vesselSet); + editFishingOperationUIModel.setOnlyCruisSecondaryVessel(vessel); + } + + // will propagate to model + ui.getSecondaryVesselList().getModel().setSelected(bean.getSecondaryVessel()); + + editFishingOperationUIModel.setSecondaryVesselType(SecondaryVesselTypeEnum.ALL); + editFishingOperationUIModel.setModify(false); handler.getFishingOperationMonitor().clearModified(); handler.registerValidator(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-10-02 23:25:24 UTC (rev 1267) @@ -236,6 +236,56 @@ _validatorLabel: {_("tutti.editFishingOperation.field.multirigAggregation")}; } +#filterSecondaryVesselLabel { + text: "tutti.editFishingOperation.filterSecondaryVesselType"; + _strongStyle: true; + actionIcon: filter; + toolTipText: "tutti.editFishingOperation.filterSecondaryVesselType.tip"; + _help: {"tutti.editFishingOperation.filterSecondaryVesselType.help"}; +} + +#filterSecondaryVesselAllButton { + text: "tutti.editFishingOperation.filterSecondaryVesselType.all"; + toolTipText: "tutti.editFishingOperation.filterSecondaryVesselType.all.tip"; + value: "all"; + selected: {model.isSecondaryVesselTypeAll()}; + buttonGroup: "filterSecondaryVesselType"; +} + +#filterSecondaryVesselScientificButton { + text: "tutti.editFishingOperation.filterSecondaryVesselType.scientific"; + toolTipText: "tutti.editFishingOperation.filterSecondaryVesselType.scientific.tip"; + value: "scientific"; + selected: {model.isSecondaryVesselTypeScientific()}; + buttonGroup: "filterSecondaryVesselType"; +} + +#filterSecondaryVesselFishingButton { + text: "tutti.editFishingOperation.filterSecondaryVesselType.fishing"; + toolTipText: "tutti.editFishingOperation.filterSecondaryVesselType.fishing.tip"; + value: "fishing"; + selected: {model.isSecondaryVesselTypeFishing()}; + buttonGroup: "filterSecondaryVesselType"; +} + +#filterSecondaryVesselOnlyCruiseButton { + text: "tutti.editFishingOperation.filterSecondaryVesselType.onlyCruise"; + toolTipText: "tutti.editFishingOperation.filterSecondaryVesselType.onlyCruise.tip"; + value: "onlyCruise"; + selected: {model.isSecondaryVesselTypeOnlyCruise()}; + buttonGroup: "filterSecondaryVesselType"; +} + +#secondaryVesselList { + property: secondaryVessel; + border: {BorderFactory.createTitledBorder(_("tutti.editFishingOperation.field.secondaryVessel"))}; + useMultiSelect: false; + showSelectPopupEnabled: false; + _validatorLabel: {_("tutti.editFishingOperation.field.secondaryVessel")}; + toolTipText: "tutti.editFishingOperation.field.secondaryVessel.tip"; + _help: {"tutti.editFishingOperation.field.secondaryVessel.help"}; +} + .degree { showReset: false; useFloat: false; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-10-02 23:25:24 UTC (rev 1267) @@ -478,6 +478,27 @@ genericType='Gear'/> </cell> </row> + <row> + <cell columns='2'> + <JPanel id='secondaryVesselFilterPane'> + <JLabel id='filterSecondaryVesselLabel'/> + <JRadioButton id='filterSecondaryVesselAllButton' + onActionPerformed='model.setSecondaryVesselType(SecondaryVesselTypeEnum.ALL)'/> + <JRadioButton id='filterSecondaryVesselScientificButton' + onActionPerformed='model.setSecondaryVesselType(SecondaryVesselTypeEnum.SCIENTIFIC)'/> + <JRadioButton id='filterSecondaryVesselFishingButton' + onActionPerformed='model.setSecondaryVesselType(SecondaryVesselTypeEnum.FISHING)'/> + <JRadioButton id='filterSecondaryVesselOnlyCruiseButton' + onActionPerformed='model.setSecondaryVesselType(SecondaryVesselTypeEnum.ONLY_CRUISE)'/> + </JPanel> + </cell> + </row> + <row weighty='0.3'> + <cell columns="4"> + <BeanDoubleList id='secondaryVesselList' + genericType='Vessel'/> + </cell> + </row> </Table> </JPanel> </cell> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-10-02 23:25:24 UTC (rev 1267) @@ -28,9 +28,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.data.Attachment; 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.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Gear; @@ -62,8 +60,11 @@ import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTabbedPane; +import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; +import java.awt.GridBagConstraints; +import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; @@ -177,6 +178,7 @@ EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_VALID, EditFishingOperationUIModel.PROPERTY_LOCATION, EditFishingOperationUIModel.PROPERTY_RECORDER_PERSON, + EditFishingOperationUIModel.PROPERTY_SECONDARY_VESSEL, EditFishingOperationUIModel.PROPERTY_VESSEL, EditFishingOperationUIModel.PROPERTY_GEAR, EditFishingOperationUIModel.PROPERTY_MULTIRIG_AGGREGATION, @@ -248,6 +250,9 @@ @Override public void afterInitUI() { + + ui.getSecondaryVesselList().getBeforeFilterPanel().add(ui.getSecondaryVesselFilterPane(), BorderLayout.CENTER); + ui.getFishingOperationValidPanel().remove( ui.getFishingOperationResetRadio()); @@ -336,6 +341,74 @@ initBeanFilterableComboBox(ui.getLocationComboBox(), locations, location); + initBeanList(ui.getSecondaryVesselList(), + Lists.<Vessel>newArrayList(), + model.getSecondaryVessel()); + + model.addPropertyChangeListener(EditFishingOperationUIModel.PROPERTY_FISHING_OPERATION_NUMBER, + new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + + } + }); + // Change vessel list and gear list when vessel type changes + model.addPropertyChangeListener(EditFishingOperationUIModel.PROPERTY_SECONDARY_VESSEL_TYPE, new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + + EditFishingOperationUIModel model = + (EditFishingOperationUIModel) evt.getSource(); + + boolean modify = model.isModify(); + + SecondaryVesselTypeEnum vesselType = + (SecondaryVesselTypeEnum) evt.getNewValue(); + + List<Vessel> vessels = Lists.newArrayList(); + + if (vesselType != null) { + switch (vesselType) { + + case SCIENTIFIC: + + vessels = model.getScientificSecondaryVessel(); + break; + case FISHING: + + vessels = model.getFishingSecondaryVessel(); + break; + case ONLY_CRUISE: + + vessels = model.getOnlyCruisSecondaryVessel(); + break; + case ALL: + default: + + vessels = model.getAllSecondaryVessel(); + } + } + + // clean vessel filter + ui.getSecondaryVesselList().getHandler().clearFilters(); + + // get selected vessel + List<Vessel> selected = Lists.newArrayList(ui.getSecondaryVesselList().getModel().getSelected()); + + // set new universe of vessel + ui.getSecondaryVesselList().getModel().setUniverse(vessels); + + // push back selected vessel + ui.getSecondaryVesselList().getModel().setSelected(selected); + + // push back modify state + model.setModify(modify); + } + }); + + model.setSecondaryVesselType(null); + changeValidatorContext(model.getValidationContext(), ui.getValidator()); listenValidationTableHasNoFatalError(ui.getValidator(), model); @@ -389,6 +462,11 @@ protected Set<String> getPropertiesToIgnore() { Set<String> result = super.getPropertiesToIgnore(); result.add(EditFishingOperationUIModel.PROPERTY_ATTACHMENT); + result.add(EditFishingOperationUIModel.PROPERTY_SECONDARY_VESSEL_TYPE); + result.add(EditFishingOperationUIModel.PROPERTY_SECONDARY_VESSEL_TYPE_ALL); + result.add(EditFishingOperationUIModel.PROPERTY_SECONDARY_VESSEL_TYPE_SCIENTIFIC); + result.add(EditFishingOperationUIModel.PROPERTY_SECONDARY_VESSEL_TYPE_FISHING); + result.add(EditFishingOperationUIModel.PROPERTY_SECONDARY_VESSEL_TYPE_ONLY_CRUISE); return result; } @@ -677,15 +755,4 @@ getModel().setModify(false); } - public void reset(FishingOperation bean) { - - List<Attachment> attachments = - getContext().getPersistenceService().getAllAttachments( - getModel().getObjectType(), - bean.getIdAsInt()); - - getModel().removeAllAttachment(getModel().getAttachment()); - getModel().addAllAttachment(attachments); - } - } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIModel.java 2013-10-02 23:25:24 UTC (rev 1267) @@ -104,6 +104,16 @@ public static final String PROPERTY_VALIDATION_CONTEXT = "validationContext"; + public static final String PROPERTY_SECONDARY_VESSEL_TYPE = "secondaryVesselType"; + + public static final String PROPERTY_SECONDARY_VESSEL_TYPE_ALL = "secondaryVesselTypeAll"; + + public static final String PROPERTY_SECONDARY_VESSEL_TYPE_SCIENTIFIC = "secondaryVesselTypeScientific"; + + public static final String PROPERTY_SECONDARY_VESSEL_TYPE_FISHING = "secondaryVesselTypeFishing"; + + public static final String PROPERTY_SECONDARY_VESSEL_TYPE_ONLY_CRUISE = "secondaryVesselTypeOnlyCruise"; + /** * Delegate edit object. * @@ -129,6 +139,8 @@ protected boolean loadingData; + protected SecondaryVesselTypeEnum secondaryVesselType; + protected static Binder<EditFishingOperationUIModel, FishingOperation> toBeanBinder = BinderFactory.newBinder(EditFishingOperationUIModel.class, FishingOperation.class); @@ -475,14 +487,6 @@ return minutes <= 45 && minutes >= 20; } -// public List<FishingOperation> getExistingOperations() { -// return existingOperations; -// } - -// public void setExistingOperations(List<FishingOperation> existingOperations) { -// this.existingOperations = existingOperations; -// } - public void convertGearShootingCoordinatesDDToDMS() { SexagecimalPosition position; Integer degree; @@ -560,6 +564,34 @@ } } + public SecondaryVesselTypeEnum getSecondaryVesselType() { + return secondaryVesselType; + } + + public boolean isSecondaryVesselTypeAll() { + return SecondaryVesselTypeEnum.ALL.equals(getSecondaryVesselType()); + } + + public boolean isSecondaryVesselTypeScientific() { + return SecondaryVesselTypeEnum.SCIENTIFIC.equals(getSecondaryVesselType()); + } + + public boolean isSecondaryVesselTypeFishing() { + return SecondaryVesselTypeEnum.FISHING.equals(getSecondaryVesselType()); + } + + public boolean isSecondaryVesselTypeOnlyCruise() { + return SecondaryVesselTypeEnum.ONLY_CRUISE.equals(getSecondaryVesselType()); + } + + public void setSecondaryVesselType(SecondaryVesselTypeEnum secondaryVesselType) { + this.secondaryVesselType = secondaryVesselType; + firePropertyChange(PROPERTY_SECONDARY_VESSEL_TYPE, null, secondaryVesselType); + firePropertyChange(PROPERTY_SECONDARY_VESSEL_TYPE_ALL, null, isSecondaryVesselTypeAll()); + firePropertyChange(PROPERTY_SECONDARY_VESSEL_TYPE_SCIENTIFIC, null, isSecondaryVesselTypeScientific()); + firePropertyChange(PROPERTY_SECONDARY_VESSEL_TYPE_FISHING, null, isSecondaryVesselTypeFishing()); + } + //------------------------------------------------------------------------// //-- AttachmentModelAware methods --// //------------------------------------------------------------------------// @@ -867,6 +899,106 @@ } @Override + public Vessel getSecondaryVessel(int index) { + return editObject.getSecondaryVessel(index); + } + + @Override + public boolean isSecondaryVesselEmpty() { + return editObject.isSecondaryVesselEmpty(); + } + + @Override + public int sizeSecondaryVessel() { + return editObject.sizeSecondaryVessel(); + } + + @Override + public void addSecondaryVessel(Vessel secondaryVessel) { + editObject.addSecondaryVessel(secondaryVessel); + firePropertyChange(PROPERTY_SECONDARY_VESSEL, null, getSecondaryVessel()); + } + + @Override + public void addAllSecondaryVessel(Collection<Vessel> secondaryVessel) { + editObject.addAllSecondaryVessel(secondaryVessel); + firePropertyChange(PROPERTY_SECONDARY_VESSEL, null, getSecondaryVessel()); + } + + @Override + public boolean removeSecondaryVessel(Vessel secondaryVessel) { + boolean result = editObject.removeSecondaryVessel(secondaryVessel); + firePropertyChange(PROPERTY_SECONDARY_VESSEL, null, getSecondaryVessel()); + return result; + } + + @Override + public boolean removeAllSecondaryVessel(Collection<Vessel> secondaryVessel) { + boolean result = editObject.removeAllSecondaryVessel(secondaryVessel); + firePropertyChange(PROPERTY_SECONDARY_VESSEL, null, getSecondaryVessel()); + return result; + } + + @Override + public boolean containsSecondaryVessel(Vessel secondaryVessel) { + return editObject.containsSecondaryVessel(secondaryVessel); + } + + @Override + public boolean containsAllSecondaryVessel(Collection<Vessel> secondaryVessel) { + return editObject.containsAllSecondaryVessel(secondaryVessel); + } + + @Override + public List<Vessel> getSecondaryVessel() { + return editObject.getSecondaryVessel(); + } + + @Override + public void setSecondaryVessel(List<Vessel> secondaryVessel) { + editObject.setSecondaryVessel(secondaryVessel); + firePropertyChange(PROPERTY_SECONDARY_VESSEL, null, getSecondaryVessel()); + } + + List<Vessel> allSecondaryVessel; + + List<Vessel> onlyCruisSecondaryVessel; + List<Vessel> scientificSecondaryVessel; + List<Vessel> fishingSecondaryVessel; + + public List<Vessel> getAllSecondaryVessel() { + return allSecondaryVessel; + } + + public void setAllSecondaryVessel(List<Vessel> allSecondaryVessel) { + this.allSecondaryVessel = allSecondaryVessel; + } + + public List<Vessel> getOnlyCruisSecondaryVessel() { + return onlyCruisSecondaryVessel; + } + + public void setOnlyCruisSecondaryVessel(List<Vessel> onlyCruisSecondaryVessel) { + this.onlyCruisSecondaryVessel = onlyCruisSecondaryVessel; + } + + public List<Vessel> getFishingSecondaryVessel() { + return fishingSecondaryVessel; + } + + public void setFishingSecondaryVessel(List<Vessel> fishingSecondaryVessel) { + this.fishingSecondaryVessel = fishingSecondaryVessel; + } + + public List<Vessel> getScientificSecondaryVessel() { + return scientificSecondaryVessel; + } + + public void setScientificSecondaryVessel(List<Vessel> scientificSecondaryVessel) { + this.scientificSecondaryVessel = scientificSecondaryVessel; + } + + @Override public boolean isPlanktonObserved() { return false; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/NewFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/NewFishingOperationAction.java 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/NewFishingOperationAction.java 2013-10-02 23:25:24 UTC (rev 1267) @@ -27,7 +27,7 @@ import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.FishingOperations; -import fr.ifremer.tutti.persistence.entities.referential.Gear; +import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrder; import java.util.List; @@ -68,7 +68,7 @@ newFishingOperation.setCruise(cruise); newFishingOperation.setVessel(cruise.getVessel()); - List<Gear> gears = cruise.getGear(); + List<GearWithOriginalRankOrder> gears = cruise.getGear(); if (gears.size() == 1) { newFishingOperation.setGear(gears.get(0)); } Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SecondaryVesselTypeEnum.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SecondaryVesselTypeEnum.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SecondaryVesselTypeEnum.java 2013-10-02 23:25:24 UTC (rev 1267) @@ -0,0 +1,14 @@ +package fr.ifremer.tutti.ui.swing.content.operation; + +/** + * Created on 10/2/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.7 + */ +public enum SecondaryVesselTypeEnum { + ALL, + SCIENTIFIC, + FISHING, + ONLY_CRUISE +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/SecondaryVesselTypeEnum.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-10-02 23:25:24 UTC (rev 1267) @@ -688,6 +688,8 @@ tutti.editFishingOperation.field.multirigAggregation.tip= tutti.editFishingOperation.field.recorderPerson= tutti.editFishingOperation.field.recorderPerson.tip= +tutti.editFishingOperation.field.secondaryVessel= +tutti.editFishingOperation.field.secondaryVessel.tip= tutti.editFishingOperation.field.stationNumber= tutti.editFishingOperation.field.stationNumber.tip= tutti.editFishingOperation.field.strata= @@ -699,6 +701,16 @@ tutti.editFishingOperation.field.trawlDistance.tip= tutti.editFishingOperation.field.vessel= tutti.editFishingOperation.field.vessel.tip= +tutti.editFishingOperation.filterSecondaryVesselType= +tutti.editFishingOperation.filterSecondaryVesselType.all= +tutti.editFishingOperation.filterSecondaryVesselType.all.tip= +tutti.editFishingOperation.filterSecondaryVesselType.fishing= +tutti.editFishingOperation.filterSecondaryVesselType.fishing.tip= +tutti.editFishingOperation.filterSecondaryVesselType.onlyCruise= +tutti.editFishingOperation.filterSecondaryVesselType.onlyCruise.tip= +tutti.editFishingOperation.filterSecondaryVesselType.scientific= +tutti.editFishingOperation.filterSecondaryVesselType.scientific.tip= +tutti.editFishingOperation.filterSecondaryVesselType.tip= tutti.editFishingOperation.label.traitReminder= tutti.editFishingOperation.label.traitReminder.inCreation= tutti.editFishingOperation.message.operation.deleted= @@ -1116,6 +1128,8 @@ tutti.flash.info.species.imported.in.protocol.severalReplaced= tutti.flash.info.species.remove.from.protocol= tutti.flash.info.species.replaced= +tutti.gear.noCaracteristics= +tutti.gear.withCaracteristics= tutti.gearCaracteristicsEditorTable.table.header.key= tutti.gearCaracteristicsEditorTable.table.header.value= tutti.gearUseFeatureTable.action.removeCaracteristic= Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-10-02 16:26:49 UTC (rev 1266) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-10-02 23:25:24 UTC (rev 1267) @@ -688,6 +688,8 @@ tutti.editFishingOperation.field.multirigAggregation.tip=N° de la poche au regard du nombre de poches précisé dans la campagne tutti.editFishingOperation.field.recorderPerson=Saisisseur(s) tutti.editFishingOperation.field.recorderPerson.tip=Nom(s) du (des) personnes qui ont saisi la données de ce trait +tutti.editFishingOperation.field.secondaryVessel=Navire(s) associé(s) +tutti.editFishingOperation.field.secondaryVessel.tip=Navire(s) associé(s) au trait tutti.editFishingOperation.field.stationNumber=Code Station tutti.editFishingOperation.field.stationNumber.tip=Identifiant de la station tutti.editFishingOperation.field.strata=Strate @@ -699,6 +701,16 @@ tutti.editFishingOperation.field.trawlDistance.tip=Distance chalutée en mètres tutti.editFishingOperation.field.vessel=Navire tutti.editFishingOperation.field.vessel.tip=Navire du trait +tutti.editFishingOperation.filterSecondaryVesselType=Filtre \: +tutti.editFishingOperation.filterSecondaryVesselType.all=Tout +tutti.editFishingOperation.filterSecondaryVesselType.all.tip=Tous les navires possibles +tutti.editFishingOperation.filterSecondaryVesselType.fishing=Professionnels +tutti.editFishingOperation.filterSecondaryVesselType.fishing.tip=Uniquement les navires professionnels +tutti.editFishingOperation.filterSecondaryVesselType.onlyCruise=Associés +tutti.editFishingOperation.filterSecondaryVesselType.onlyCruise.tip=Uniquement les navires déjà associés à d'autres traits de cette campagne +tutti.editFishingOperation.filterSecondaryVesselType.scientific=Scientifiques +tutti.editFishingOperation.filterSecondaryVesselType.scientific.tip=Uniquement les navires scientifiques +tutti.editFishingOperation.filterSecondaryVesselType.tip=Filter les navires associés possible pour ce trait tutti.editFishingOperation.label.traitReminder=Trait \: %s tutti.editFishingOperation.label.traitReminder.inCreation=en cours de création tutti.editFishingOperation.message.operation.deleted=Opération de pêche <strong>%s</strong> supprimée. @@ -1117,6 +1129,8 @@ tutti.flash.info.species.imported.in.protocol.severalReplaced=Espèces importées dans le protocole depuis le fichier <strong>%s</strong>. %s remplacées par leur référent. tutti.flash.info.species.remove.from.protocol=L'espèce <strong>%s</strong> a été retirée du protocole. tutti.flash.info.species.replaced=L'espèce <strong>%s</strong> a été remplacée par son référent <strong>%s</strong>. +tutti.gear.noCaracteristics=Pas de caractéristiques. +tutti.gear.withCaracteristics=Caractéristiques de l'engin %s tutti.gearCaracteristicsEditorTable.table.header.key=Caractéristique tutti.gearCaracteristicsEditorTable.table.header.value=Valeur tutti.gearUseFeatureTable.action.removeCaracteristic=Supprimer