This is an automated email from the git hooks/post-receive script. New commit to branch feature/7017 in repository observe. See http://git.codelutin.com/observe.git commit b820d62b094ae70913ca6c95ccfe31f257a57672 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat May 2 15:16:21 2015 +0200 - Amélioration de la validation des activités - Revue de la cinématiques pour les écrans de type Open (ajout méthode onOpenUI) - implantation du service pour les TargetCatch - ménache! refs #7017 --- .../main/java/fr/ird/observe/BinderService.java | 128 ++--- .../fr/ird/observe/ObserveApplicationContext.java | 8 - .../java/fr/ird/observe/entities/Entities.java | 14 +- .../observe/entities/seine/ActivitySeineImpl.java | 38 +- .../ird/observe/entities/seine/ActivitySeines.java | 3 +- .../java/fr/ird/observe/entities/seine/Routes.java | 22 + .../ird/observe/entities/seine/TargetCatches.java | 24 + .../observe/services/AbstractObserveService.java | 31 -- .../data/longline/ActivityLonglineService.java | 2 - .../data/longline/ActivityLonglineServiceImpl.java | 7 +- .../services/data/longline/SetLonglineService.java | 2 +- .../data/longline/SetLonglineServiceImpl.java | 34 +- .../services/data/seine/NonTargetCatchService.java | 2 +- .../data/seine/NonTargetCatchServiceImpl.java | 13 +- .../data/seine/NonTargetSampleService.java | 13 +- .../data/seine/NonTargetSampleServiceImpl.java | 58 +-- .../observe/services/data/seine/RouteService.java | 2 - .../services/data/seine/RouteServiceImpl.java | 8 +- .../services/data/seine/SetSeineServiceImpl.java | 5 +- .../services/data/seine/TargetCatchService.java | 28 ++ .../data/seine/TargetCatchServiceImpl.java | 164 +++++++ .../services/data/seine/TargetSampleService.java | 16 +- .../data/seine/TargetSampleServiceImpl.java | 75 +-- .../services/referential/ReferentialService.java | 2 + .../referential/ReferentialServiceImpl.java | 8 + .../ird/observe/ui/content/ContentUIHandler.java | 69 +-- .../fr/ird/observe/ui/content/ContentUIModel.java | 26 -- .../LonglineGlobalCompositionUIHandler.java | 6 +- .../impl/longline/SetLonglineUIHandler.java | 10 +- .../ActivitySeineObservedSystemUIHandler.java | 1 + .../ui/content/impl/seine/SetSeineUIHandler.java | 6 +- .../ui/content/open/ContentOpenableUIHandler.java | 43 +- .../impl/longline/ActivityLonglineUIHandler.java | 62 +-- .../open/impl/longline/TripLonglineUIHandler.java | 39 +- .../open/impl/seine/ActivitySeineUIHandler.java | 79 ++-- .../ui/content/open/impl/seine/RouteUIHandler.java | 139 ++---- .../open/impl/seine/TripSeineUIHandler.java | 38 +- .../ui/content/table/ContentTableUIHandler.java | 450 ++++++------------ .../ui/content/table/ContentTableUIModel.java | 2 +- .../impl/longline/SizeMeasuresTableModel.java | 3 +- .../impl/longline/WeightMeasuresTableModel.java | 3 +- .../table/impl/seine/NonTargetCatchUIHandler.java | 299 ++++++------ .../table/impl/seine/NonTargetSampleUIHandler.java | 134 +++--- .../impl/seine/ObjectObservedSpeciesUIHandler.java | 8 +- .../table/impl/seine/TargetCatchUIHandler.java | 293 +++++------- .../impl/seine/TargetDiscardCatchUIHandler.java | 514 +++++++++------------ .../table/impl/seine/TargetSampleUIHandler.java | 2 +- .../fr/ird/observe/ui/tree/SetLonglineNode.java | 2 +- .../field/VesselActivityFieldValidator.java | 52 +-- 49 files changed, 1343 insertions(+), 1644 deletions(-) diff --git a/observe-business/src/main/java/fr/ird/observe/BinderService.java b/observe-business/src/main/java/fr/ird/observe/BinderService.java index 0874332..a0cfdba 100644 --- a/observe-business/src/main/java/fr/ird/observe/BinderService.java +++ b/observe-business/src/main/java/fr/ird/observe/BinderService.java @@ -21,6 +21,8 @@ */ package fr.ird.observe; +import com.google.common.base.Preconditions; +import fr.ird.observe.entities.Entities; import fr.ird.observe.entities.longline.ActivityLongline; import fr.ird.observe.entities.longline.BaitsComposition; import fr.ird.observe.entities.longline.Basket; @@ -122,7 +124,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.util.TopiaEntityBinder; -import org.nuiton.topia.persistence.util.TopiaEntityHelper; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderModelBuilder; @@ -226,6 +227,8 @@ public class BinderService { I18nReferenceEntity.PROPERTY_LABEL8 }; + public static final String SIMPLE = "Observe"; + static { try { @@ -253,7 +256,6 @@ public class BinderService { } - public <E extends TopiaEntity> void copyExcluding(Class<E> type, String context, E source, E target, String... propertyNames) { copyExcluding(type, context, source, target, true, propertyNames); @@ -292,40 +294,41 @@ public class BinderService { return binder; } + public <E extends TopiaEntity> void simpleCopy(E source, E target, boolean tech) { + Class<E> entityClass = Entities.getContract(target); + TopiaEntityBinder<E> binder = getBinder(entityClass, SIMPLE); + binder.load(source, target, tech); + } - public static <E extends TopiaEntity> BinderModelBuilder<E, E> newBinderBuilder(Class<E> type, String... properties) { + protected static <E extends TopiaEntity> BinderModelBuilder<E, E> newBinderBuilder(Class<E> type, String... properties) { BinderModelBuilder<E, E> builder = BinderModelBuilder.newEmptyBuilder(type); builder.addSimpleProperties(properties); return builder; } - public <E extends TopiaEntity> TopiaEntityBinder<E> getTopiaBinder(Class<E> entityClass, - String contextName) { + @SuppressWarnings("unchecked") + protected <E extends TopiaEntity> TopiaEntityBinder<E> getTopiaBinder(Class<E> entityClass, String contextName) { + + TopiaEntityBinder<E> binder; if (ObserveBinderHelper.getCachedBinderModel(entityClass, entityClass, contextName) == null) { // we do not want to have auto created binder model by the factory - return null; + binder = null; + } else { + + binder = (TopiaEntityBinder<E>) + ObserveBinderHelper.newBinder(entityClass, entityClass, contextName, TopiaEntityBinder.class); + } - return (TopiaEntityBinder<E>) ObserveBinderHelper.newBinder(entityClass, entityClass, contextName, TopiaEntityBinder.class); + return binder; } - public static <E extends TopiaEntity> TopiaEntityBinder<E> registerTopiaBinder(Class<E> entityClass, + protected static <E extends TopiaEntity> TopiaEntityBinder<E> registerTopiaBinder(Class<E> entityClass, BinderModelBuilder<E, E> builder, String contextName) { - return ObserveBinderHelper.registerTopiaBinder(entityClass, builder, contextName); - } - - public <E extends TopiaEntity> TopiaEntityBinder<E> getSimpleTopiaBinder(Class<E> entityClass) { - return getTopiaBinder(entityClass, "Observe"); - } - public <E extends TopiaEntity> void simpleCopy(E source, E target, boolean tech) { - Class<E> entityClass = (Class<E>) TopiaEntityHelper.getContractClass(ObserveDAOHelper.getContracts(), target.getClass()); - TopiaEntityBinder<E> binder = getSimpleTopiaBinder(entityClass); - if (binder == null) { - throw new NullPointerException("could not find a simple topia binder of type : " + target.getClass()); - } - binder.load(source, target, tech); + Preconditions.checkArgument(ObserveBinderHelper.getCachedBinderModel(entityClass, entityClass, contextName) == null, "there is already a bindermodel resigtred for type " + entityClass + " and context " + contextName); + return ObserveBinderHelper.registerTopiaBinder(entityClass, builder, contextName); } protected static void registerSeineBinders() { @@ -535,69 +538,6 @@ public class BinderService { { - BinderModelBuilder<ActivitySeine, ActivitySeine> builder = newBinderBuilder( - ActivitySeine.class, - ActivitySeine.PROPERTY_QUADRANT, - ActivitySeine.PROPERTY_LATITUDE, - ActivitySeine.PROPERTY_LONGITUDE, - ActivitySeine.PROPERTY_ERS_ID, - ActivitySeine.PROPERTY_TIME, - ActivitySeine.PROPERTY_SEA_SURFACE_TEMPERATURE, - ActivitySeine.PROPERTY_REASON_FOR_NO_FISHING, - ActivitySeine.PROPERTY_COMMENT, - ActivitySeine.PROPERTY_VESSEL_SPEED, - ActivitySeine.PROPERTY_OBSERVED_SYSTEM, - ActivitySeine.PROPERTY_OBSERVED_SYSTEM_DISTANCE, - ActivitySeine.PROPERTY_VESSEL_ACTIVITY_SEINE, - ActivitySeine.PROPERTY_SURROUNDING_ACTIVITY, - ActivitySeine.PROPERTY_WIND, - ActivitySeine.PROPERTY_DETECTION_MODE, - ActivitySeine.PROPERTY_SET_SEINE, - ActivitySeine.PROPERTY_FLOATING_OBJECT, - ActivitySeine.PROPERTY_OPEN, - ActivitySeine.PROPERTY_CURRENT_FPA_ZONE, - ActivitySeine.PROPERTY_PREVIOUS_FPA_ZONE, - ActivitySeine.PROPERTY_NEXT_FPA_ZONE); - - builder.addCollectionStrategy(Binder.CollectionStrategy.duplicate, ActivitySeine.PROPERTY_OBSERVED_SYSTEM); - builder.addCollectionStrategy(Binder.CollectionStrategy.duplicate, ActivitySeine.PROPERTY_FLOATING_OBJECT); - - //FIXME this one was used ? -// BinderModelBuilder<ActivitySeine, ActivitySeine> builder = newBinderBuilder( -// ActivitySeine.class, -// ActivitySeine.PROPERTY_QUADRANT, -// ActivitySeine.PROPERTY_LATITUDE, -// ActivitySeine.PROPERTY_LONGITUDE, -// ActivitySeine.PROPERTY_TIME, -// ActivitySeine.PROPERTY_SEA_SURFACE_TEMPERATURE, -// ActivitySeine.PROPERTY_REASON_FOR_NO_FISHING, -// ActivitySeine.PROPERTY_VESSEL_ACTIVITY_SEINE, -// ActivitySeine.PROPERTY_WIND, -// ActivitySeine.PROPERTY_OPEN); -// - registerTopiaBinder(ActivitySeine.class, builder, EDIT); - } - - { - - BinderModelBuilder<Route, Route> builder = newBinderBuilder( - Route.class, - Route.PROPERTY_DATE, - Route.PROPERTY_START_LOG_VALUE, - Route.PROPERTY_END_LOG_VALUE, - Route.PROPERTY_CHECK_LEVEL, - Route.PROPERTY_ACTIVITY_SEINE, - Route.PROPERTY_OPEN, - Route.PROPERTY_COMMENT); - - builder.addCollectionStrategy(Binder.CollectionStrategy.duplicate, Route.PROPERTY_ACTIVITY_SEINE); - - registerTopiaBinder(Route.class, builder, EDIT); - - } - - { - BinderModelBuilder<Route, Route> builder = newBinderBuilder( Route.class, Route.PROPERTY_DATE, @@ -878,19 +818,6 @@ public class BinderService { } - - { - - BinderModelBuilder<TripSeine, TripSeine> builder = newBinderBuilder( - TripSeine.class, - TripSeine.PROPERTY_GEAR_USE_FEATURES_SEINE); - - builder.addCollectionStrategy(Binder.CollectionStrategy.duplicate, TripSeine.PROPERTY_GEAR_USE_FEATURES_SEINE); - - registerTopiaBinder(TripSeine.class, builder, EDIT_GEAR_USE_FEATURES_SEINE); - - } - { BinderModelBuilder<TripSeine, TripSeine> builder = newBinderBuilder( @@ -1548,6 +1475,13 @@ public class BinderService { protected static void registerReferentialBinders() { { + // Need to add by hand a speciesList binder + // see https://forge.codelutin.com/issues/6963 + BinderModelBuilder<SpeciesList, SpeciesList> builderModel = newBinderBuilder(SpeciesList.class); + registerTopiaBinder(SpeciesList.class, builderModel, "Observe"); + + } + { BinderModelBuilder<Program, Program> builder = newBinderBuilder( Program.class, diff --git a/observe-business/src/main/java/fr/ird/observe/ObserveApplicationContext.java b/observe-business/src/main/java/fr/ird/observe/ObserveApplicationContext.java index 1e92b58..bd17f13 100644 --- a/observe-business/src/main/java/fr/ird/observe/ObserveApplicationContext.java +++ b/observe-business/src/main/java/fr/ird/observe/ObserveApplicationContext.java @@ -25,7 +25,6 @@ import fr.ird.observe.db.DataContext; import fr.ird.observe.db.DataSource; import fr.ird.observe.db.DataSourceFactory; import fr.ird.observe.entities.constants.ReferenceLocale; -import fr.ird.observe.entities.referentiel.SpeciesList; import fr.ird.observe.gps.GPSService; import fr.ird.observe.validation.ObserveValidator; import fr.ird.observe.validation.ValidationContext; @@ -35,7 +34,6 @@ import jaxx.runtime.context.JAXXContextEntryDef; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.decorator.Decorator; -import org.nuiton.util.beans.BinderModelBuilder; import java.util.Locale; @@ -153,12 +151,6 @@ public class ObserveApplicationContext extends DefaultApplicationContext { if (service == null) { service = new BinderService(); - // Need to add by hand a speciesList binder - // see https://forge.codelutin.com/issues/6963 - BinderModelBuilder<SpeciesList, SpeciesList> builderModel= - BinderModelBuilder.newEmptyBuilder(SpeciesList.class); - service.registerTopiaBinder(SpeciesList.class, builderModel, "Observe"); - BINDER_SERVICE_ENTRY_DEF.setContextValue(this, service); } return service; diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/Entities.java b/observe-entities/src/main/java/fr/ird/observe/entities/Entities.java index 822d926..89340df 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/Entities.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/Entities.java @@ -28,6 +28,7 @@ import fr.ird.observe.ObserveEntityEnum; import org.apache.commons.collections4.CollectionUtils; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaId; +import org.nuiton.topia.persistence.util.TopiaEntityHelper; import java.util.Arrays; import java.util.Collection; @@ -353,20 +354,25 @@ public class Entities { public static <E extends TopiaEntity> String getTableName(E entity) { ObserveEntityEnum entityEnum = ObserveEntityEnum.valueOf(entity); - return entityEnum.dbSchemaName()+"."+entityEnum.dbTableName(); + return entityEnum.dbSchemaName() + "." + entityEnum.dbTableName(); } public static boolean isSeineId(String id) { - return id.contains("Seine"); + return id.contains("Seine"); } public static boolean isLonglineId(String id) { - return id.contains("Longline"); + return id.contains("Longline"); } public static <E extends TopiaEntity> boolean isNew(E entity) { - return entity.getTopiaId()==null; + return entity.getTopiaId() == null; + } + + @SuppressWarnings("unchecked") + public static <E extends TopiaEntity> Class<E> getContract(E entity) { + return (Class<E>) TopiaEntityHelper.getContractClass(ObserveDAOHelper.getContracts(), entity.getClass()); } } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/seine/ActivitySeineImpl.java b/observe-entities/src/main/java/fr/ird/observe/entities/seine/ActivitySeineImpl.java index 7bfed7a..444539e 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/seine/ActivitySeineImpl.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/seine/ActivitySeineImpl.java @@ -43,26 +43,28 @@ public class ActivitySeineImpl extends ActivitySeineAbstract { private static final long serialVersionUID = 2L; - public static final String ACTIVITY_FIN_DE_VEILLE = "16"; + public static final String ACTIVITY_FIN_DE_VEILLE_ID = "fr.ird.observe.entities.referentiel.seine.VesselActivitySeine#1239832675372#0.21399033380125898"; - public static final String ACTIVITY_DEBUT_DE_PECHE = "6"; + public static final String ACTIVITY_DEBUT_DE_PECHE_ID = "fr.ird.observe.entities.referentiel.seine.VesselActivitySeine#1239832675369#0.12552908048322586"; - public static final String ACTIVITY_DEBUT_DE_PECHE_ID = "fr.ird.observe.entities.referentiel.seine.VesselActivitySeine#1239832675369#0.027011527426829218"; + public static final String ACTIVITY_FIN_DE_PECHE_ID = "fr.ird.observe.entities.referentiel.seine.VesselActivitySeine#1239832675369#0.10731168577264139"; - public static final String ACTIVITY_FIN_DE_PECHE = "7"; + public static final String ACTIVITY_CHANGED_ZONE_ID = "fr.ird.observe.entities.referentiel.seine.VesselActivitySeine#1379684416896#0.38648073770690594"; - public static final String ACTIVITY_CHANGED_ZONE = "21"; + private static final List<String> CALEE_OPERATIONS_ID = Collections.singletonList(ACTIVITY_DEBUT_DE_PECHE_ID); - private static final List<String> CALEE_OPERATIONS = Collections.singletonList(ACTIVITY_DEBUT_DE_PECHE_ID); + private static final List<String> DCP_OPERATIONS_ID = Arrays.asList( + "fr.ird.observe.entities.referentiel.seine.VesselActivitySeine#1239832675370#0.9125190289998782", + "fr.ird.observe.entities.referentiel.seine.VesselActivitySeine#1239832675371#0.15012142294280495", + "fr.ird.observe.entities.referentiel.seine.VesselActivitySeine#1239832675371#0.23195165331640677"); - private static final List<String> DCP_OPERATIONS = Arrays.asList("13", "14", "15"); - - private static final List<String> SYSTEM_OPERATIONS = Arrays.asList("0", "11", "11", ACTIVITY_FIN_DE_VEILLE); + private static final List<String> SYSTEM_OPERATIONS_ID = Arrays.asList( + "fr.ird.observe.entities.referentiel.seine.VesselActivitySeine#1239832675349#0.363119635949572", + "fr.ird.observe.entities.referentiel.seine.VesselActivitySeine#1239832675370#0.495613158646268", + ACTIVITY_FIN_DE_VEILLE_ID); public static final String PROPERTY_CHANGED_ZONE_OPERATION = "changedZoneOperation"; -// public static final String PROPERTY_SET_OPERATION = "setOperation"; - /** * La valeur du quadrant (utilisé uniquement dans l'interface graphique) : * en base on conserve cette information dans les coordonnées {@link #longitude} @@ -87,25 +89,25 @@ public class ActivitySeineImpl extends ActivitySeineAbstract { /** @return {@code true} si l'activite concerne un DCP */ @Override public boolean isDCPOperation() { - return vesselActivitySeine != null && DCP_OPERATIONS.contains(vesselActivitySeine.getCode()); + return vesselActivitySeine != null && DCP_OPERATIONS_ID.contains(vesselActivitySeine.getTopiaId()); } /** @return {@code true} si l'activite concerne une calée */ @Override public boolean isSetOperation() { - return vesselActivitySeine != null && CALEE_OPERATIONS.contains(vesselActivitySeine.getTopiaId()); + return vesselActivitySeine != null && CALEE_OPERATIONS_ID.contains(vesselActivitySeine.getTopiaId()); } /** @return {@code true} si l'activite concerne un système observé */ @Override public boolean isObservedSystemOperation() { - return vesselActivitySeine != null && SYSTEM_OPERATIONS.contains(vesselActivitySeine.getCode()); + return vesselActivitySeine != null && SYSTEM_OPERATIONS_ID.contains(vesselActivitySeine.getTopiaId()); } /** @return {@code true} si l'activite concerne un changement de zone */ @Override public boolean isChangedZoneOperation() { - return vesselActivitySeine != null && ACTIVITY_CHANGED_ZONE.equals(vesselActivitySeine.getCode()); + return vesselActivitySeine != null && ACTIVITY_CHANGED_ZONE_ID.equals(vesselActivitySeine.getTopiaId()); } @Override @@ -125,7 +127,7 @@ public class ActivitySeineImpl extends ActivitySeineAbstract { @Override public void setQuadrant(Integer quadrant) { if (log.isInfoEnabled()) { - log.info("New quadrant value: "+quadrant); + log.info("New quadrant value: " + quadrant); } Integer old = this.quadrant; // fireOnPreWrite(PROPERTY_QUADRANT, old, quadrant); @@ -151,7 +153,7 @@ public class ActivitySeineImpl extends ActivitySeineAbstract { @Override public boolean isActivityFinDePeche() { - return vesselActivitySeine != null && ACTIVITY_FIN_DE_PECHE.equals(vesselActivitySeine.getCode()); + return vesselActivitySeine != null && ACTIVITY_FIN_DE_PECHE_ID.equals(vesselActivitySeine.getTopiaId()); } @Override @@ -161,7 +163,7 @@ public class ActivitySeineImpl extends ActivitySeineAbstract { @Override public boolean isActivityFinDeVeille() { - return vesselActivitySeine != null && ACTIVITY_FIN_DE_VEILLE.equals(vesselActivitySeine.getCode()); + return vesselActivitySeine != null && ACTIVITY_FIN_DE_VEILLE_ID.equals(vesselActivitySeine.getTopiaId()); } @Override diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/seine/ActivitySeines.java b/observe-entities/src/main/java/fr/ird/observe/entities/seine/ActivitySeines.java index a3dcd99..89a923d 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/seine/ActivitySeines.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/seine/ActivitySeines.java @@ -48,8 +48,7 @@ public class ActivitySeines { @Override public int compare(ActivitySeine o1, ActivitySeine o2) { - return o1.getTime().compareTo( - o2.getTime()); + return o1.getTime().compareTo(o2.getTime()); } }; diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/seine/Routes.java b/observe-entities/src/main/java/fr/ird/observe/entities/seine/Routes.java index c59c644..add626f 100644 --- a/observe-entities/src/main/java/fr/ird/observe/entities/seine/Routes.java +++ b/observe-entities/src/main/java/fr/ird/observe/entities/seine/Routes.java @@ -22,9 +22,11 @@ package fr.ird.observe.entities.seine; * #L% */ +import fr.ird.observe.entities.referentiel.seine.VesselActivitySeine; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -91,4 +93,24 @@ public class Routes { return previous; } + /** + * Recupere les positions des activités d'un certain type. + * + * @param route la route à inspecter + * @param vesselActivityId l'id du type d'activité à rechercher + * @return les positions des activitys d'un certain type donné + */ + public static Integer[] detectActivities(Route route, String vesselActivityId) { + List<Integer> list = new ArrayList<Integer>(); + int index = 0; + for (ActivitySeine a : route.getActivitySeine()) { + VesselActivitySeine vesselActivitySeine = a.getVesselActivitySeine(); + if (vesselActivityId.equals(vesselActivitySeine.getTopiaId())) { + list.add(index); + } + index++; + } + return list.toArray(new Integer[list.size()]); + } + } diff --git a/observe-entities/src/main/java/fr/ird/observe/entities/seine/TargetCatches.java b/observe-entities/src/main/java/fr/ird/observe/entities/seine/TargetCatches.java new file mode 100644 index 0000000..482cbcb --- /dev/null +++ b/observe-entities/src/main/java/fr/ird/observe/entities/seine/TargetCatches.java @@ -0,0 +1,24 @@ +package fr.ird.observe.entities.seine; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; + +/** + * Created on 5/2/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 4.0 + */ +public class TargetCatches { + + public static final Predicate<TargetCatch> TARGET_CATCH_IS_DISCARDED = new Predicate<TargetCatch>() { + @Override + public boolean apply(TargetCatch input) { + return input.isDiscarded(); + } + }; + + public static final Predicate<TargetCatch> TARGET_CATCH_IS_NOT_DISCARDED = + Predicates.not(TARGET_CATCH_IS_DISCARDED); + +} diff --git a/observe-services/src/main/java/fr/ird/observe/services/AbstractObserveService.java b/observe-services/src/main/java/fr/ird/observe/services/AbstractObserveService.java index 2f2df05..9fa8dc1 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/AbstractObserveService.java +++ b/observe-services/src/main/java/fr/ird/observe/services/AbstractObserveService.java @@ -6,7 +6,6 @@ import com.google.common.collect.Lists; import fr.ird.observe.BinderService; import fr.ird.observe.IObserveConfig; import fr.ird.observe.ObserveEntityEnum; -import fr.ird.observe.ObserveServiceHelper; import fr.ird.observe.entities.Entities; import fr.ird.observe.entities.EntityMap; import fr.ird.observe.entities.constants.ReferenceLocale; @@ -20,7 +19,6 @@ import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.util.EntityListUpdator; import org.nuiton.topia.persistence.util.TopiaEntityBinder; import org.nuiton.topia.persistence.util.TopiaEntityHelper; -import org.nuiton.util.beans.BinderModelBuilder; import java.util.ArrayList; import java.util.Collection; @@ -201,35 +199,6 @@ public abstract class AbstractObserveService implements ObserveService { } - - protected <E extends TopiaEntity> TopiaEntityBinder<E> loadBinder(String suffix, Class<E> entityType, CreateBinder<E> createBinder) { - - BinderService binderService = ObserveServiceHelper.get().getBinderService(); - - String binderName = getClass().getName() + suffix; - TopiaEntityBinder<E> r = binderService.getTopiaBinder(entityType, binderName); - - if (r == null) { - - BinderModelBuilder<E, E> builder = createBinder.createBinderBuilder(binderService, binderName); - r = createBinder.registerTopiaBinder(binderService, entityType, builder, binderName); - - } - - return r; - - } - - protected abstract class CreateBinder<E extends TopiaEntity> { - - public abstract BinderModelBuilder<E, E> createBinderBuilder(BinderService binderService, String name); - - public TopiaEntityBinder<E> registerTopiaBinder(BinderService binderService, Class<E> entityType, BinderModelBuilder<E, E> builder, String name) { - return binderService.registerTopiaBinder(entityType, builder, name); - } - - } - public <P extends TopiaEntity, E extends TopiaEntity> String doSave(String parentId, E toSave, SaveAction<P, E> saveAction) { E saved; diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/longline/ActivityLonglineService.java b/observe-services/src/main/java/fr/ird/observe/services/data/longline/ActivityLonglineService.java index 3d640bc..3aaa858 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/data/longline/ActivityLonglineService.java +++ b/observe-services/src/main/java/fr/ird/observe/services/data/longline/ActivityLonglineService.java @@ -18,8 +18,6 @@ public interface ActivityLonglineService extends ObserveService { List<ActivityLongline> getActivityLonglineStubByTrip(String tripId); - ActivityLongline loadForDisplay(String activityLonglineId); - ActivityLongline loadForEdit(String activityLonglineId); ActivityLongline preCreate(String tripLonglineId); diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/longline/ActivityLonglineServiceImpl.java b/observe-services/src/main/java/fr/ird/observe/services/data/longline/ActivityLonglineServiceImpl.java index 8a81987..20a96c5 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/data/longline/ActivityLonglineServiceImpl.java +++ b/observe-services/src/main/java/fr/ird/observe/services/data/longline/ActivityLonglineServiceImpl.java @@ -38,7 +38,7 @@ public class ActivityLonglineServiceImpl extends AbstractObserveService implemen } @Override - public ActivityLongline loadForDisplay(String activityLonglineId) { + public ActivityLongline loadForEdit(String activityLonglineId) { ActivityLongline loaded = getDao().newInstance(); ActivityLongline toLoad = getDao().findByTopiaId(activityLonglineId); @@ -48,11 +48,6 @@ public class ActivityLonglineServiceImpl extends AbstractObserveService implemen } - @Override - public ActivityLongline loadForEdit(String activityLonglineId) { - return loadForDisplay(activityLonglineId); - } - @Override public ActivityLongline preCreate(String tripLonglineId) { diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/longline/SetLonglineService.java b/observe-services/src/main/java/fr/ird/observe/services/data/longline/SetLonglineService.java index 89c8324..a4b4902 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/data/longline/SetLonglineService.java +++ b/observe-services/src/main/java/fr/ird/observe/services/data/longline/SetLonglineService.java @@ -15,7 +15,7 @@ import java.util.List; */ public interface SetLonglineService extends ObserveService { - SetLongline loadSet(String setLonglineId); + SetLongline loadForDisplay(String setLonglineId); List<Section> getSections(String setLonglineId); diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/longline/SetLonglineServiceImpl.java b/observe-services/src/main/java/fr/ird/observe/services/data/longline/SetLonglineServiceImpl.java index 793e631..b6e88aa 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/data/longline/SetLonglineServiceImpl.java +++ b/observe-services/src/main/java/fr/ird/observe/services/data/longline/SetLonglineServiceImpl.java @@ -23,11 +23,6 @@ import java.util.List; */ public class SetLonglineServiceImpl extends AbstractObserveService implements SetLonglineService { - @Override - public SetLongline loadSet(String setLonglineId) { - return null; - } - public List<Section> getSections(String setLonglineId) { TopiaDAO<Section> dao = getDao(Section.class); @@ -69,6 +64,30 @@ public class SetLonglineServiceImpl extends AbstractObserveService implements Se } @Override + public SetLongline loadForDisplay(String setLonglineId) { + + SetLonglineDAO dao = getDao(); + + SetLongline loaded = dao.newInstance(); + SetLongline toLoad = dao.findByTopiaId(setLonglineId); + copy(SetLongline.class, BinderService.EDIT, toLoad, loaded); + return loaded; + + } + + @Override + public SetLongline loadForEdit(String setLonglineId) { + + SetLonglineDAO dao = getDao(); + + SetLongline loaded = dao.newInstance(); + SetLongline toLoad = dao.findByTopiaId(setLonglineId); + copy(SetLongline.class, BinderService.EDIT, toLoad, loaded); + return loaded; + + } + + @Override public SetLongline preCreate(String activityLonglineId) { ActivityLongline activityLongline = findByTopiaId(ActivityLongline.class, activityLonglineId); @@ -98,11 +117,6 @@ public class SetLonglineServiceImpl extends AbstractObserveService implements Se } @Override - public SetLongline loadForEdit(String setLonglineId) { - return null; - } - - @Override public String save(String activityLonglineId, SetLongline setLongline) { String setLonglineId = doSave(activityLonglineId, setLongline, new SaveAction<ActivityLongline, SetLongline>(ActivityLongline.class, SetLongline.class) { diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/seine/NonTargetCatchService.java b/observe-services/src/main/java/fr/ird/observe/services/data/seine/NonTargetCatchService.java index a92d6b4..59786f6 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/data/seine/NonTargetCatchService.java +++ b/observe-services/src/main/java/fr/ird/observe/services/data/seine/NonTargetCatchService.java @@ -15,6 +15,6 @@ public interface NonTargetCatchService extends ObserveService { SetSeine loadForEdit(String setId); @Commit - void save(SetSeine parent, List<NonTargetLength> tailleToDelete); + void save(SetSeine toSave, List<NonTargetLength> nonTargetLengthsToDelete); } diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/seine/NonTargetCatchServiceImpl.java b/observe-services/src/main/java/fr/ird/observe/services/data/seine/NonTargetCatchServiceImpl.java index c7a6139..51d5711 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/data/seine/NonTargetCatchServiceImpl.java +++ b/observe-services/src/main/java/fr/ird/observe/services/data/seine/NonTargetCatchServiceImpl.java @@ -52,14 +52,16 @@ public class NonTargetCatchServiceImpl extends AbstractObserveService implements } return loaded; + } @Override - public void save(SetSeine parent, final List<NonTargetLength> tailleToDelete) { + public void save(SetSeine toSave, final List<NonTargetLength> nonTargetLengthsToDelete) { + TopiaEntityBinder<SetSeine> parentBinder = getBinder(SetSeine.class, BinderService.EDIT_NON_TARGET_CATCH); TopiaEntityBinder<NonTargetCatch> childbinder = getBinder(NonTargetCatch.class, BinderService.EDIT); - doSaveList(parent, new SaveCollectionAction<SetSeine, NonTargetCatch>( + doSaveList(toSave, new SaveCollectionAction<SetSeine, NonTargetCatch>( SetSeine.class, NonTargetCatch.class, getListUpdator(), parentBinder, childbinder) { @Override @@ -81,18 +83,18 @@ public class NonTargetCatchServiceImpl extends AbstractObserveService implements @Override public void onUpdateFinalize(SetSeine parent, Collection<NonTargetCatch> oldChilds) throws TopiaException { - if (CollectionUtils.isNotEmpty(tailleToDelete)) { + if (CollectionUtils.isNotEmpty(nonTargetLengthsToDelete)) { // on a demande la suppression de taille obsoletes if (log.isInfoEnabled()) { - log.info("Will remove " + tailleToDelete.size() + " obsolete nonTargetSample(s)."); + log.info("Will remove " + nonTargetLengthsToDelete.size() + " obsolete nonTargetSample(s)."); } NonTargetSample echantillon = parent.getNonTargetSample().get(0); // on supprime les echantillons obsoletes - echantillon.getNonTargetLength().removeAll(tailleToDelete); + echantillon.getNonTargetLength().removeAll(nonTargetLengthsToDelete); } } @@ -106,4 +108,5 @@ public class NonTargetCatchServiceImpl extends AbstractObserveService implements NonTargetCatch.class, SetSeine.PROPERTY_NON_TARGET_CATCH); } + } diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/seine/NonTargetSampleService.java b/observe-services/src/main/java/fr/ird/observe/services/data/seine/NonTargetSampleService.java index c4bc584..e433ab6 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/data/seine/NonTargetSampleService.java +++ b/observe-services/src/main/java/fr/ird/observe/services/data/seine/NonTargetSampleService.java @@ -6,8 +6,8 @@ import fr.ird.observe.entities.seine.NonTargetSample; import fr.ird.observe.services.Commit; import fr.ird.observe.services.ObserveService; -import java.util.Collection; import java.util.List; +import java.util.Set; /** * Created on 4/26/15. @@ -17,21 +17,18 @@ import java.util.List; */ public interface NonTargetSampleService extends ObserveService { - List<Species> getAvailableEspeceForNonTargetSample(String setSeineId); + List<Species> getAvailableSpeciesForNonTargetSample(String setSeineId); NonTargetSample getNonTargetSample(String setSeineId); boolean canUseNonTargetSample(String setSeineId); - void getObsoleteEspeceForNonTargetSample(String setSeineId, - List<Species> speciessUsed, - Collection<Species> speciessToDelete, - List<NonTargetLength> tailleToDelete); + List<NonTargetLength> getObsoleteNonTargetLengths(String setSeineId, Set<String> speciesIdsUsed); @Commit - void delete(String setId, NonTargetSample editBean); + String save(String setId, NonTargetSample editBean); @Commit - String save(String setId, NonTargetSample editBean); + void delete(String setId, NonTargetSample editBean); } diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/seine/NonTargetSampleServiceImpl.java b/observe-services/src/main/java/fr/ird/observe/services/data/seine/NonTargetSampleServiceImpl.java index b453188..d7a0983 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/data/seine/NonTargetSampleServiceImpl.java +++ b/observe-services/src/main/java/fr/ird/observe/services/data/seine/NonTargetSampleServiceImpl.java @@ -16,6 +16,7 @@ import org.nuiton.topia.persistence.util.TopiaEntityBinder; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Set; /** * Created on 4/26/15. @@ -33,7 +34,7 @@ public class NonTargetSampleServiceImpl extends AbstractObserveService implement } @Override - public List<Species> getAvailableEspeceForNonTargetSample(String setSeineId) { + public List<Species> getAvailableSpeciesForNonTargetSample(String setSeineId) { List<Species> speciesList = new ArrayList<Species>(); @@ -110,36 +111,38 @@ public class NonTargetSampleServiceImpl extends AbstractObserveService implement } @Override - public void getObsoleteEspeceForNonTargetSample(String setSeineId, - List<Species> speciessUsed, - Collection<Species> speciessToDelete, - List<NonTargetLength> tailleToDelete) { + public List<NonTargetLength> getObsoleteNonTargetLengths(String setSeineId, Set<String> speciessUsed) { SetSeine setSeine = findByTopiaId(SetSeine.class, setSeineId); - if (setSeine.isNonTargetSampleEmpty()) { - return; - } + List<NonTargetLength> nonTargetLengthsToDelete = new ArrayList<NonTargetLength>(); - NonTargetSample echantillon = setSeine.getNonTargetSample().get(0); + if (!setSeine.isNonTargetSampleEmpty()) { - if (echantillon.isNonTargetLengthEmpty()) { - return; - } + NonTargetSample nonTargetSample = setSeine.getNonTargetSample().get(0); + + if (!nonTargetSample.isNonTargetLengthEmpty()) { + + for (NonTargetLength taille : nonTargetSample.getNonTargetLength()) { + + Species species = taille.getSpecies(); + if (!speciessUsed.contains(species.getTopiaId())) { + + // l'espèce n'existe plus dans les rejet faune, on doit le supprimer + nonTargetLengthsToDelete.add(taille); + if (log.isDebugEnabled()) { + log.debug("remove obsolote echantillon " + taille + " for species " + species); + } + + } - for (NonTargetLength taille : echantillon.getNonTargetLength()) { - Species tailleEspece = taille.getSpecies(); - if (!speciessUsed.contains(tailleEspece)) { - // l'species n'existe plus dans les rejet faune, - // on doit le supprimer - tailleToDelete.add(taille); - speciessToDelete.add(tailleEspece); - if (log.isDebugEnabled()) { - log.debug("remove obsolote echantillon " + taille + " for species " + tailleEspece); } + } + } + return nonTargetLengthsToDelete; } @@ -161,11 +164,11 @@ public class NonTargetSampleServiceImpl extends AbstractObserveService implement } @Override - public NonTargetSample onUpdate(SetSeine parentBean, NonTargetSample toSave, NonTargetSample beanToSave) { + public NonTargetSample onUpdate(SetSeine parentBean, NonTargetSample toUpdate, NonTargetSample updated) { - copyExcluding(NonTargetSample.class, BinderService.EDIT, toSave, beanToSave, NonTargetSample.PROPERTY_NON_TARGET_LENGTH); - getDao().update(beanToSave); - return beanToSave; + copyExcluding(NonTargetSample.class, BinderService.EDIT, toUpdate, updated, NonTargetSample.PROPERTY_NON_TARGET_LENGTH); + getDao().update(updated); + return updated; } }); @@ -175,8 +178,9 @@ public class NonTargetSampleServiceImpl extends AbstractObserveService implement } @Override - public void delete(String setId, NonTargetSample bean) { - doDelete(setId, bean.getTopiaId(), new DeleteAction<SetSeine, NonTargetSample>(SetSeine.class, NonTargetSample.class) { + public void delete(String setId, NonTargetSample toDelete) { + + doDelete(setId, toDelete.getTopiaId(), new DeleteAction<SetSeine, NonTargetSample>(SetSeine.class, NonTargetSample.class) { @Override public void onDelete(SetSeine parent, NonTargetSample toDelete) { diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/seine/RouteService.java b/observe-services/src/main/java/fr/ird/observe/services/data/seine/RouteService.java index 72efcf3..76976c9 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/data/seine/RouteService.java +++ b/observe-services/src/main/java/fr/ird/observe/services/data/seine/RouteService.java @@ -18,8 +18,6 @@ public interface RouteService extends ObserveService { Route getRouteStub(String routeId); - Route loadForDisplay(String routeId); - Route loadForEdit(String routeId); Route preCreate(String tripSeineId); diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/seine/RouteServiceImpl.java b/observe-services/src/main/java/fr/ird/observe/services/data/seine/RouteServiceImpl.java index c524c74..533f3a7 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/data/seine/RouteServiceImpl.java +++ b/observe-services/src/main/java/fr/ird/observe/services/data/seine/RouteServiceImpl.java @@ -37,7 +37,7 @@ public class RouteServiceImpl extends AbstractObserveService implements RouteSer } @Override - public Route loadForDisplay(String routeId) { + public Route loadForEdit(String routeId) { Route loaded = getDao().newInstance(); Route toLoad = getDao().findByTopiaId(routeId); @@ -54,12 +54,6 @@ public class RouteServiceImpl extends AbstractObserveService implements RouteSer } @Override - public Route loadForEdit(String routeId) { - Route loaded = loadForDisplay(routeId); - return loaded; - } - - @Override public Route preCreate(String tripSeineId) { TripSeine tripLongline = findByTopiaId(TripSeine.class, tripSeineId); diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/seine/SetSeineServiceImpl.java b/observe-services/src/main/java/fr/ird/observe/services/data/seine/SetSeineServiceImpl.java index ed9bd24..87b0113 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/data/seine/SetSeineServiceImpl.java +++ b/observe-services/src/main/java/fr/ird/observe/services/data/seine/SetSeineServiceImpl.java @@ -38,8 +38,9 @@ public class SetSeineServiceImpl extends AbstractObserveService implements SetSe @Override public SetSeine loadForEdit(String setSeineId) { - SetSeine loaded = getDao().newInstance(); - SetSeine toLoad = getDao().findByTopiaId(setSeineId); + SetSeineDAO dao = getDao(); + SetSeine loaded = dao.newInstance(); + SetSeine toLoad = dao.findByTopiaId(setSeineId); copy(SetSeine.class, BinderService.EDIT, toLoad, loaded); //FIXME See why need this ? diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetCatchService.java b/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetCatchService.java new file mode 100644 index 0000000..0ae9764 --- /dev/null +++ b/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetCatchService.java @@ -0,0 +1,28 @@ +package fr.ird.observe.services.data.seine; + +import fr.ird.observe.entities.seine.SetSeine; +import fr.ird.observe.entities.seine.TargetLength; +import fr.ird.observe.services.Commit; +import fr.ird.observe.services.ObserveService; + +import java.util.List; + +/** + * Created on 5/2/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 4.0 + */ +public interface TargetCatchService extends ObserveService { + + SetSeine loadForEdit(String setSeineId); + + SetSeine loadForEditDiscarded(String setSeineId); + + @Commit + void save(SetSeine setSeinetoSave, List<TargetLength> targetLengthsToDelete); + + @Commit + void saveForDiscarded(SetSeine setSeinetoSave, List<TargetLength> targetLengthsToDelete); + +} diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetCatchServiceImpl.java b/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetCatchServiceImpl.java new file mode 100644 index 0000000..e2155d1 --- /dev/null +++ b/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetCatchServiceImpl.java @@ -0,0 +1,164 @@ +package fr.ird.observe.services.data.seine; + +import com.google.common.base.Predicate; +import fr.ird.observe.BinderService; +import fr.ird.observe.entities.referentiel.seine.WeightCategory; +import fr.ird.observe.entities.seine.SetSeine; +import fr.ird.observe.entities.seine.TargetCatch; +import fr.ird.observe.entities.seine.TargetCatches; +import fr.ird.observe.entities.seine.TargetLength; +import fr.ird.observe.entities.seine.TargetSample; +import fr.ird.observe.services.AbstractObserveService; +import fr.ird.observe.services.referential.ReferentialService; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.util.EntityListUpdator; +import org.nuiton.topia.persistence.util.TopiaEntityBinder; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * Created on 5/2/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 4.0 + */ +public class TargetCatchServiceImpl extends AbstractObserveService implements TargetCatchService { + + /** Logger. */ + private static final Log log = LogFactory.getLog(TargetCatchServiceImpl.class); + + @Override + public SetSeine loadForEdit(String setSeineId) { + + SetSeine loaded = load(setSeineId, BinderService.EDIT_TARGET_CATCH, TargetCatches.TARGET_CATCH_IS_NOT_DISCARDED); + return loaded; + + } + + @Override + public SetSeine loadForEditDiscarded(String setSeineId) { + + SetSeine loaded = load(setSeineId, BinderService.EDIT_DISCARD_TARGET_CATCH, TargetCatches.TARGET_CATCH_IS_DISCARDED); + return loaded; + + } + + @Override + public void save(SetSeine setSeinetoSave, final List<TargetLength> targetLengthsToDelete) { + + save(setSeinetoSave, BinderService.EDIT_TARGET_CATCH, TargetCatches.TARGET_CATCH_IS_NOT_DISCARDED, targetLengthsToDelete); + + } + + @Override + public void saveForDiscarded(SetSeine setSeinetoSave, final List<TargetLength> targetLengthsToDelete) { + + save(setSeinetoSave, BinderService.EDIT_DISCARD_TARGET_CATCH, TargetCatches.TARGET_CATCH_IS_DISCARDED, targetLengthsToDelete); + + } + + protected SetSeine load(String setId, String binderContext, Predicate<TargetCatch> predicate) { + + TopiaDAO<SetSeine> setSeineDao = getDao(SetSeine.class); + SetSeine toLoad = setSeineDao.findByTopiaId(setId); + SetSeine loaded = setSeineDao.newInstance(); + + copyExcluding(SetSeine.class, binderContext, toLoad, loaded, SetSeine.PROPERTY_TARGET_CATCH); + + if (!toLoad.isTargetCatchEmpty()) { + + ReferentialService referentialService = newService(ReferentialService.class); + + TopiaDAO<TargetCatch> dao = getDao(TargetCatch.class); + TopiaEntityBinder<TargetCatch> binder = getBinder(TargetCatch.class, binderContext); + + List<TargetCatch> childsLoaded = new ArrayList<TargetCatch>(); + + for (TargetCatch childToLoad : toLoad.getTargetCatch()) { + + if (predicate.apply(childToLoad)) { + + WeightCategory weightCategory = childToLoad.getWeightCategory(); + if (weightCategory != null) { + referentialService.loadDecoratedWeightCategory(weightCategory); + } + + TargetCatch childLoaded = dao.newInstance(); + binder.load(childToLoad, childLoaded, true); + childsLoaded.add(childLoaded); + + } + + } + + loaded.setTargetCatch(childsLoaded); + + } + + return loaded; + + } + + void save(SetSeine setSeinetoSave, String binderContext, final Predicate<TargetCatch> predicate, final List<TargetLength> targetLengthsToDelete) { + + TopiaEntityBinder<SetSeine> parentBinder = getBinder(SetSeine.class, binderContext); + TopiaEntityBinder<TargetCatch> childBinder = getBinder(TargetCatch.class, binderContext); + + doSaveList(setSeinetoSave, new SaveCollectionAction<SetSeine, TargetCatch>( + SetSeine.class, TargetCatch.class, getListUpdator(), parentBinder, childBinder) { + + @Override + public void onUpdateFinalize(SetSeine parent, Collection<TargetCatch> oldChilds) throws TopiaException { + + if (CollectionUtils.isNotEmpty(oldChilds)) { + + Collection<TargetCatch> targetCatchesToReinject = new ArrayList<TargetCatch>(); + + for (TargetCatch oldChild : oldChilds) { + + if (predicate.apply(oldChild)) { + + // on réinjecte cette capture + targetCatchesToReinject.add(oldChild); + + } + + } + + parent.addAllTargetCatch(targetCatchesToReinject); + + } + + if (CollectionUtils.isNotEmpty(targetLengthsToDelete)) { + + // suppression des échantillons obsoletes + + if (log.isInfoEnabled()) { + log.info("Will remove " + targetLengthsToDelete.size() + " obsolete targetLength(s)."); + } + + TargetSample targetSample = parent.getTargetSample().get(0); + + // on supprime les echantillons obsoletes + targetSample.getTargetLength().removeAll(targetLengthsToDelete); + + } + } + }); + + } + + protected EntityListUpdator<SetSeine, TargetCatch> getListUpdator() { + return EntityListUpdator.newEntityListUpdator( + SetSeine.class, + TargetCatch.class, + SetSeine.PROPERTY_TARGET_CATCH); + } + +} diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetSampleService.java b/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetSampleService.java index 689f730..c1b2d32 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetSampleService.java +++ b/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetSampleService.java @@ -6,8 +6,8 @@ import fr.ird.observe.entities.seine.TargetSample; import fr.ird.observe.services.Commit; import fr.ird.observe.services.ObserveService; -import java.util.Collection; import java.util.List; +import java.util.Set; /** * Created on 4/26/15. @@ -17,20 +17,18 @@ import java.util.List; */ public interface TargetSampleService extends ObserveService { - List<Species> getAvailableEspeceForTargetSample(String setSeineId, boolean discarded); + List<Species> getAvailableSpeciesForTargetSample(String setSeineId, boolean discarded); + + List<TargetLength> getObsoleteTargetLengths(String setSeineId, Set<String> speciesIdsUsed, boolean discarded); TargetSample getTargetSample(String setSeineId, boolean discarded); boolean canUseTargetSample(String setSeineId, boolean discarded); - void getObsoleteEspeceForTargetSample(String setSeineId, - Collection<Species> speciessUsed, - Collection<Species> speciessToDelete, - List<TargetLength> tailleToDelete, - boolean discarded); @Commit - void delete(String setId, TargetSample bean); + String save(String setSeineId, TargetSample toSave); @Commit - String save(String setSeineId, TargetSample toSave); + void delete(String setId, TargetSample bean); + } diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetSampleServiceImpl.java b/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetSampleServiceImpl.java index 2ce82b8..8735b1b 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetSampleServiceImpl.java +++ b/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetSampleServiceImpl.java @@ -16,6 +16,7 @@ import org.nuiton.topia.persistence.util.TopiaEntityBinder; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Set; /** * Created on 4/26/15. @@ -37,7 +38,7 @@ public class TargetSampleServiceImpl extends AbstractObserveService implements T } @Override - public List<Species> getAvailableEspeceForTargetSample(String setSeineId, boolean discarded) { + public List<Species> getAvailableSpeciesForTargetSample(String setSeineId, boolean discarded) { List<Species> speciesList = new ArrayList<Species>(); @@ -136,48 +137,36 @@ public class TargetSampleServiceImpl extends AbstractObserveService implements T } @Override - public void getObsoleteEspeceForTargetSample(String setSeineId, - Collection<Species> speciessUsed, - Collection<Species> speciessToDelete, - List<TargetLength> tailleToDelete, - boolean discarded) { + public List<TargetLength> getObsoleteTargetLengths(String setSeineId, Set<String> speciesIdsUsed, boolean discarded) { SetSeine setSeine = findByTopiaId(SetSeine.class, setSeineId); - if (setSeine.isTargetSampleEmpty()) { - return; - } + List<TargetLength> targetLengthsToDelete = new ArrayList<TargetLength>(); - TargetSample echantillon = setSeine.getTargetSample(discarded); + if (!setSeine.isTargetSampleEmpty()) { - if (echantillon == null || echantillon.isTargetLengthEmpty()) { - return; - } + TargetSample targetSample = setSeine.getTargetSample(discarded); + if (targetSample != null && !targetSample.isTargetLengthEmpty()) { + + for (TargetLength targetLength : targetSample.getTargetLength()) { + + Species species = targetLength.getSpecies(); + + if (!speciesIdsUsed.contains(species.getTopiaId())) { + // l'espèce n'existe plus dans les rejet faune, on doit le supprimer + targetLengthsToDelete.add(targetLength); + if (log.isDebugEnabled()) { + log.debug("remove obsolote echantillon " + targetLength + " for species " + species); + } + } - for (TargetLength taille : echantillon.getTargetLength()) { - Species tailleEspece = taille.getSpecies(); - if (!speciessUsed.contains(tailleEspece)) { - // l'species n'existe plus dans les rejet faune, - // on doit le supprimer - tailleToDelete.add(taille); - speciessToDelete.add(tailleEspece); - if (log.isDebugEnabled()) { - log.debug("remove obsolote echantillon " + taille + " for species " + tailleEspece); } + } - } - } + } - @Override - public void delete(String setId, TargetSample bean) { - doDelete(setId, bean.getTopiaId(), new DeleteAction<SetSeine, TargetSample>(SetSeine.class, TargetSample.class) { - @Override - public void onDelete(SetSeine parent, TargetSample toDelete) { - super.onDelete(parent, toDelete); - parent.removeTargetSample(toDelete); - } - }); + return targetLengthsToDelete; } @@ -196,11 +185,11 @@ public class TargetSampleServiceImpl extends AbstractObserveService implements T } @Override - public TargetSample onUpdate(SetSeine parentBean, TargetSample toSave, TargetSample beanToSave) { + public TargetSample onUpdate(SetSeine parentBean, TargetSample toUpdate, TargetSample updated) { - copyExcluding(TargetSample.class, BinderService.EDIT, toSave, beanToSave, TargetSample.PROPERTY_TARGET_LENGTH); - getDao().update(beanToSave); - return beanToSave; + copyExcluding(TargetSample.class, BinderService.EDIT, toUpdate, updated, TargetSample.PROPERTY_TARGET_LENGTH); + getDao().update(updated); + return updated; } }); @@ -209,4 +198,16 @@ public class TargetSampleServiceImpl extends AbstractObserveService implements T } + @Override + public void delete(String setId, TargetSample bean) { + doDelete(setId, bean.getTopiaId(), new DeleteAction<SetSeine, TargetSample>(SetSeine.class, TargetSample.class) { + @Override + public void onDelete(SetSeine parent, TargetSample toDelete) { + super.onDelete(parent, toDelete); + parent.removeTargetSample(toDelete); + } + }); + + } + } diff --git a/observe-services/src/main/java/fr/ird/observe/services/referential/ReferentialService.java b/observe-services/src/main/java/fr/ird/observe/services/referential/ReferentialService.java index 5ae0df8..654a379 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/referential/ReferentialService.java +++ b/observe-services/src/main/java/fr/ird/observe/services/referential/ReferentialService.java @@ -34,6 +34,8 @@ public interface ReferentialService extends ObserveService { List<WeightCategory> loadDecoratedWeightCategory(); + void loadDecoratedWeightCategory(WeightCategory weightCategory); + Set<String> getSpeciesListSpeciesIds(String speciesListId); <R extends ReferenceEntity> R preCreate(Class<R> entityType); diff --git a/observe-services/src/main/java/fr/ird/observe/services/referential/ReferentialServiceImpl.java b/observe-services/src/main/java/fr/ird/observe/services/referential/ReferentialServiceImpl.java index 270858f..fa3c99a 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/referential/ReferentialServiceImpl.java +++ b/observe-services/src/main/java/fr/ird/observe/services/referential/ReferentialServiceImpl.java @@ -123,6 +123,14 @@ public class ReferentialServiceImpl extends AbstractObserveService implements Re } @Override + public void loadDecoratedWeightCategory(WeightCategory weightCategory) { + + decorate(WeightCategory.class, weightCategory); + decorate(Species.class, weightCategory.getSpecies()); + + } + + @Override public Set<String> getSpeciesListSpeciesIds(String speciesListId) { SpeciesList speciesList = findByTopiaId(SpeciesList.class, speciesListId); diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/ContentUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/ContentUIHandler.java index 01dad8b..1ef2472 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/ContentUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/ContentUIHandler.java @@ -22,7 +22,6 @@ package fr.ird.observe.ui.content; import fr.ird.observe.BinderService; -import fr.ird.observe.DataService; import fr.ird.observe.DecoratorService; import fr.ird.observe.ObserveContext; import fr.ird.observe.ObserveServiceHelper; @@ -64,6 +63,8 @@ import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JToolBar; import javax.swing.UIManager; +import javax.swing.event.TableModelListener; +import javax.swing.table.TableModel; import java.awt.Component; import java.util.ArrayList; import java.util.List; @@ -92,15 +93,15 @@ public abstract class ContentUIHandler<E extends TopiaEntity> { /** l'interface graphique que le controleur utilise */ protected ObserveContentUI<E> ui; - public ContentUIHandler(ObserveContentUI<E> ui, DataContextType parentType, DataContextType type) { + protected ContentUIHandler(ObserveContentUI<E> ui, DataContextType parentType, DataContextType type) { this.ui = ui; this.parentType = parentType; this.type = type; - prefix = "[" + ui.getClass().getSimpleName() + "] "; + this.prefix = "[" + ui.getClass().getSimpleName() + "] "; if (log.isDebugEnabled()) { log.debug("New handler [" + this + "] for ui " + prefix); } - errorIcon = UIManager.getIcon("action.error"); + this.errorIcon = UIManager.getIcon("action.error"); } public static <E extends TopiaEntity> ContentUIHandler<E> newHandler(ObserveContentUI<E> ui) { @@ -301,22 +302,14 @@ public abstract class ContentUIHandler<E extends TopiaEntity> { return ObserveContext.get().getBinderService(); } - public <E extends TopiaEntity> void copy(Class<E> type, String context, E source, E target) { + public <EE extends TopiaEntity> void copy(Class<EE> type, String context, EE source, EE target) { getBinderService().copy(type, context, source, target); } - public <E extends TopiaEntity> void copyExcluding(Class<E> type, String context, E source, E target, String... propertyNames) { - getBinderService().copyExcluding(type, context, source, target, propertyNames); - } - - public <E extends TopiaEntity> void copy(Class<E> type, String context, E source, E target, boolean bindTechnical) { + public <EE extends TopiaEntity> void copy(Class<EE> type, String context, EE source, EE target, boolean bindTechnical) { getBinderService().copy(type, context, source, target, bindTechnical); } - public <E extends TopiaEntity> TopiaEntityBinder<E> getBinder(Class<E> type, String context) { - return getBinderService().getBinder(type, context); - } - protected DataSource getDataSource() { return ui.getDataSource(); } @@ -613,19 +606,6 @@ public abstract class ContentUIHandler<E extends TopiaEntity> { } } -// protected E onCreate(TopiaContext tx, Object parentBean, E editBean) throws TopiaException { -// return editBean; -// } -// -// protected E onUpdate(TopiaContext tx, Object parentBean, E beanToSave) throws TopiaException { -// // rien par defaut -// return beanToSave; -// } -// -// protected void onDelete(TopiaContext tx, Object parentBean, E beanToDelete) throws TopiaException { -// // rien par defaut -// } - protected void addInfoMessage(String message) { addMessage(ui, NuitonValidatorScope.INFO, @@ -649,26 +629,6 @@ public abstract class ContentUIHandler<E extends TopiaEntity> { return getModel().getLoadBinder(); } -// protected final TopiaExecutor<E> getLoadExecutor() { -// return loadExecutor; -// } -// -// protected final TopiaExecutor2<? extends TopiaEntity, E> getPreCreateExecutor() { -// return preCreateExecutor; -// } -// -// protected final TopiaExecutor2<? extends TopiaEntity, E> getCreateExecutor() { -// return createExecutor; -// } -// -// protected final TopiaExecutor2<? extends TopiaEntity, E> getUpdateExecutor() { -// return updateExecutor; -// } -// -// protected final TopiaExecutor2<? extends TopiaEntity, E> getDeleteExecutor() { -// return deleteExecutor; -// } - protected final ContentMode computeContentMode() { ContentMode mode; @@ -693,10 +653,6 @@ public abstract class ContentUIHandler<E extends TopiaEntity> { return contextName; } - protected final DataService getDataService() { - return ObserveContext.get().getDataService(); - } - protected final <S extends ObserveService> S getService(Class<S> serviceType) { return ObserveContext.get().getService(serviceType); } @@ -805,4 +761,15 @@ public abstract class ContentUIHandler<E extends TopiaEntity> { quadrantBG.add(editor.getQuadrant4()); } + + protected void setQuadrant(CoordinatesEditor editor, Integer quadrant) { + editor.setQuadrant(null); + editor.setQuadrant(quadrant); + } + + protected void reloadTableModelListener(TableModel tableModel, TableModelListener listener) { + tableModel.removeTableModelListener(listener); + tableModel.addTableModelListener(listener); + } + } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/ContentUIModel.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/ContentUIModel.java index 48eb5af..42f3797 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/ContentUIModel.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/ContentUIModel.java @@ -137,35 +137,9 @@ public abstract class ContentUIModel<E extends TopiaEntity> extends AbstractSeri } public final TopiaEntityBinder<E> getLoadBinder() { - -// if (loadBinder == null) { -// -// BinderService binderService = ObserveServiceHelper.get().getBinderService(); -// -// String binderName = getClass().getName() + "-open"; -// TopiaEntityBinder<E> r = binderService.getTopiaBinder(beanType, binderName); -// if (r == null) { -// -// BinderModelBuilder<E, E> builder = createOpeningBinder(binderService, binderName); -// -// if (builder != null) { -// -// r = binderService.registerTopiaBinder(beanType, builder, binderName); -// -// } -// -// } -// -// loadBinder = r; -// -// } - return loadBinder; - } -// protected abstract BinderModelBuilder<E, E> createOpeningBinder(BinderService binderService, String binderName); - public E getBean() { return bean; } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/LonglineGlobalCompositionUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/LonglineGlobalCompositionUIHandler.java index 3a5fec7..70d3ef9 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/LonglineGlobalCompositionUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/LonglineGlobalCompositionUIHandler.java @@ -50,7 +50,7 @@ import static org.nuiton.i18n.I18n.t; public class LonglineGlobalCompositionUIHandler extends ContentUIHandler<SetLongline> { /** Logger */ - static private Log log = LogFactory.getLog(LonglineGlobalCompositionUIHandler.class); + public static final Log log = LogFactory.getLog(LonglineGlobalCompositionUIHandler.class); public LonglineGlobalCompositionUIHandler(LonglineGlobalCompositionUI ui) { super(ui, DataContextType.ActivityLongline, DataContextType.SetLongline); @@ -142,7 +142,7 @@ public class LonglineGlobalCompositionUIHandler extends ContentUIHandler<SetLong // utilisation du mode requis setContentMode(mode); - if (mode != ContentMode.READ) { + if (ContentMode.READ != mode) { getUi().startEdit(null); } @@ -184,7 +184,7 @@ public class LonglineGlobalCompositionUIHandler extends ContentUIHandler<SetLong } @Override - protected boolean doSave(SetLongline bean) throws Exception { + protected boolean doSave(SetLongline bean) { copy(SetLongline.class, BinderService.EDIT_FLOATLINES_COMPOSITION, getUi().getFloatlinesCompositionUI().getBean(), bean); copy(SetLongline.class, BinderService.EDIT_BRANCHLINES_COMPOSITION, getUi().getBranchlinesCompositionUI().getBean(), bean); diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/SetLonglineUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/SetLonglineUIHandler.java index 7cf9f43..34e4f92 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/SetLonglineUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/longline/SetLonglineUIHandler.java @@ -145,6 +145,9 @@ public class SetLonglineUIHandler extends ContentUIHandler<SetLongline> { super.initUI(); + // listen messages to see if required to add + reloadTableModelListener(getUi().getErrorTableModel(), computeTabValidStateListener); + getUi().getSettingStartTimeStamp().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); getUi().getSettingEndTimeStamp().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); getUi().getHaulingStartTimeStamp().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); @@ -226,15 +229,10 @@ public class SetLonglineUIHandler extends ContentUIHandler<SetLongline> { // utilisation du mode requis setContentMode(mode); - // To be sure always remove listener (could prevent some leaks) - getUi().getErrorTableModel().removeTableModelListener(computeTabValidStateListener); - // listen messages to see if required to add - getUi().getErrorTableModel().addTableModelListener(computeTabValidStateListener); - SwingValidatorMessageTableModel errorTableModel = getUi().getErrorTableModel(); computeTabValidState(errorTableModel); - if (mode != ContentMode.READ) { + if (ContentMode.READ != mode) { getUi().startEdit(null); } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/seine/ActivitySeineObservedSystemUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/seine/ActivitySeineObservedSystemUIHandler.java index 86ace0a..149899d 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/seine/ActivitySeineObservedSystemUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/seine/ActivitySeineObservedSystemUIHandler.java @@ -109,6 +109,7 @@ public class ActivitySeineObservedSystemUIHandler extends ContentUIHandler<Activ copy(ActivitySeine.class, BinderService.EDIT_OBSERVED_SYSTEM, saved, bean); return true; + } } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/seine/SetSeineUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/seine/SetSeineUIHandler.java index 1fe72ea..d8dc84c 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/seine/SetSeineUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/impl/seine/SetSeineUIHandler.java @@ -137,10 +137,8 @@ public class SetSeineUIHandler extends ContentUIHandler<SetSeine> { super.initUI(); - // To be sure always remove listener (could prevent some leaks) - getUi().getErrorTableModel().removeTableModelListener(computeTabValidStateListener); // listen messages to see if required to add - getUi().getErrorTableModel().addTableModelListener(computeTabValidStateListener); + reloadTableModelListener(getUi().getErrorTableModel(), computeTabValidStateListener); getUi().getStartTime().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); getUi().getEndPursingTimeStamp().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); @@ -199,7 +197,7 @@ public class SetSeineUIHandler extends ContentUIHandler<SetSeine> { SwingValidatorMessageTableModel errorTableModel = getUi().getErrorTableModel(); computeTabValidState(errorTableModel); - if (mode != ContentMode.READ) { + if (ContentMode.READ != mode) { getUi().startEdit(null); } } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/ContentOpenableUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/ContentOpenableUIHandler.java index 1b52eef..7aafb12 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/ContentOpenableUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/ContentOpenableUIHandler.java @@ -55,6 +55,20 @@ public abstract class ContentOpenableUIHandler<E extends TopiaEntity & OpenableE protected final String closeMessage; + /** + * Méthode invoquée à chaque ouverture de l'écran. + * + * La méthode est invoquée par {@link #openUI()}. + * + * @param selectedParentId l'id du parent sélectionné + * @param selectedId l'id de l'entité de l'écran, peut être {@code null} en cas de création. + * @param mode le mode de l'écran + * @since 4.0 + */ + protected abstract void onOpenUI(String selectedParentId, String selectedId, ContentMode mode); + + protected abstract boolean obtainCanReopen(boolean create); + protected ContentOpenableUIHandler(ContentOpenableUI<E> ui, DataContextType parentType, DataContextType type, @@ -65,8 +79,6 @@ public abstract class ContentOpenableUIHandler<E extends TopiaEntity & OpenableE } - protected abstract boolean obtainCanReopen(boolean create); - protected void updateOpenState(String beanId, boolean openState) { OpenableService service = getService(OpenableService.class); service.updateOpenState(beanId, openState); @@ -88,6 +100,29 @@ public abstract class ContentOpenableUIHandler<E extends TopiaEntity & OpenableE } @Override + public void openUI() throws Exception { + + super.openUI(); + + String selectedParentId = getSelectedParentId(); + String selectedId = getSelectedId(); + ContentMode mode = computeContentMode(); + + if (log.isInfoEnabled()) { + log.info(prefix + "selectedParentId = " + selectedParentId); + log.info(prefix + "selectedId = " + selectedId); + log.info(prefix + "content mode = " + mode); + } + + onOpenUI(selectedParentId, selectedId, mode); + + boolean create = selectedId == null; + + finalizeOpenUI(mode, create); + + } + + @Override protected boolean computeCanWrite(DataSource source) { return source.canWriteData(); } @@ -297,6 +332,7 @@ public abstract class ContentOpenableUIHandler<E extends TopiaEntity & OpenableE log.debug("PARENT NODE = " + parentNode); } treeHelper.addUnsavedNode(parentNode, getBeanType()); + } protected final void obtainChildPosition(E bean) throws DataSourceException { @@ -310,6 +346,7 @@ public abstract class ContentOpenableUIHandler<E extends TopiaEntity & OpenableE } getUi().setContextValue(position, POSITION_OPENABLE); + } protected final void finalizeOpenUI(ContentMode mode, boolean create) { @@ -345,7 +382,7 @@ public abstract class ContentOpenableUIHandler<E extends TopiaEntity & OpenableE } model.setCanReopen(canReopen); - if (mode != ContentMode.READ) { + if (ContentMode.READ != mode) { getUi().startEdit(null); } } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUIHandler.java index 61e8c9a..bc11d0a 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/ActivityLonglineUIHandler.java @@ -33,6 +33,7 @@ import fr.ird.observe.ui.content.ContentUIModel; import fr.ird.observe.ui.content.open.ContentOpenableUIHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.jaxx.widgets.gis.absolute.CoordinatesEditor; import org.nuiton.validator.NuitonValidatorScope; import static org.nuiton.i18n.I18n.n; @@ -77,18 +78,18 @@ public class ActivityLonglineUIHandler extends ContentOpenableUIHandler<Activity // mode creation return ContentMode.CREATE; + } - // l'activity existe en base + // l'activité existe en base if (dataContext.isSelectedOpen(ActivityLongline.class)) { - // l'activity est ouverte, donc modifiable + // l'activité est ouverte, donc modifiable return ContentMode.UPDATE; - } - ActivityLonglineUI ui = getUi(); + } - // l'activity n'est pas ouverte, donc pas éditable + // l'activité n'est pas ouverte, donc pas éditable if (!dataContext.isSelectedOpen(TripLongline.class)) { // la marée n'est pas ouverte @@ -100,35 +101,25 @@ public class ActivityLonglineUIHandler extends ContentOpenableUIHandler<Activity if (getModel().isHistoricalData()) { addInfoMessage(t("observe.message.historical.data")); + } } else { - // seule l'activity n'est pas ouverte + // seule l'activité n'est pas ouverte addInfoMessage(t(closeMessage)); + } return ContentMode.READ; + } @Override - public void openUI() throws Exception { - super.openUI(); - - resetQuadrant(getUi().getCoordinatesEditor()); - - String tripId = getSelectedParentId(); - String activityId = getSelectedId(); - - if (log.isInfoEnabled()) { - log.info(prefix + "tripId = " + tripId); - log.info(prefix + "activityId = " + activityId); - } + protected void onOpenUI(String tripId, String activityId, ContentMode mode) { - ContentMode mode = computeContentMode(); - if (log.isInfoEnabled()) { - log.info(prefix + "content mode " + mode); - } + CoordinatesEditor coordinatesEditor = getUi().getCoordinatesEditor(); + resetQuadrant(coordinatesEditor); boolean create = activityId == null; @@ -143,39 +134,32 @@ public class ActivityLonglineUIHandler extends ContentOpenableUIHandler<Activity } else { // update mode - if (mode == ContentMode.UPDATE) { - loaded = service.loadForEdit(activityId); - } else { - loaded = service.loadForDisplay(activityId); - } + loaded = service.loadForEdit(activityId); } ActivityLongline bean = getBean(); copy(ActivityLongline.class, BinderService.EDIT, loaded, bean); - finalizeOpenUI(mode, create); - - getUi().getCoordinatesEditor().setLatitudeAndLongitude(bean.getLatitude(), bean.getLongitude()); + coordinatesEditor.setLatitudeAndLongitude(bean.getLatitude(), bean.getLongitude()); if (create) { + + // on positionne le quadrant (celui de l'activité précédent si elle existe) Integer quadrant = bean.getQuadrant(); - getUi().getCoordinatesEditor().setQuadrant(null); - getUi().getCoordinatesEditor().setQuadrant(quadrant); + setQuadrant(coordinatesEditor, quadrant); + } - // on annule la modification engendree par ce binding - getModel().setModified(create); } @Override public void startEditUI(String... binding) { - ActivityLonglineUI ui = getUi(); ContentUIModel<ActivityLongline> model = getModel(); boolean create = model.getMode() == ContentMode.CREATE; String contextName = getValidatorContextName(model.getMode()); - ui.getValidator().setContext(contextName); + getUi().getValidator().setContext(contextName); if (create) { addMessage(ui, NuitonValidatorScope.INFO, @@ -196,7 +180,9 @@ public class ActivityLonglineUIHandler extends ContentOpenableUIHandler<Activity ActivityLonglineUI.BINDING_FPA_ZONE_SELECTED_ITEM, ActivityLonglineUI.BINDING_CLOSE_ENABLED, ActivityLonglineUI.BINDING_CLOSE_AND_CREATE_ENABLED); + model.setModified(create); + } @Override @@ -232,9 +218,6 @@ public class ActivityLonglineUIHandler extends ContentOpenableUIHandler<Activity ActivityLonglineService service = getService(ActivityLonglineService.class); String tripId = getSelectedParentId(); service.delete(tripId, bean.getTopiaId()); - if (log.isInfoEnabled()) { - log.info("Delete done for Activity " + bean.getTopiaId()); - } result = true; } @@ -255,6 +238,7 @@ public class ActivityLonglineUIHandler extends ContentOpenableUIHandler<Activity dataContext.isSelectedOpen(TripLongline.class) && !dataContext.isOpenActivity(); return canReopen; + } } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/TripLonglineUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/TripLonglineUIHandler.java index 9d0b3c8..a85a3ed 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/TripLonglineUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/longline/TripLonglineUIHandler.java @@ -87,11 +87,14 @@ public class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLongline } addInfoMessage(t(closeMessage)); + return ContentMode.READ; + } @Override public void initUI() throws Exception { + super.initUI(); TripLonglineUI ui = getUi(); @@ -131,19 +134,7 @@ public class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLongline } @Override - public void openUI() throws Exception { - super.openUI(); - - ContentMode mode = computeContentMode(); - - String programId = getSelectedParentId(); - String tripId = getSelectedId(); - - if (log.isInfoEnabled()) { - log.info(prefix + "programId = " + programId); - log.info(prefix + "tripId = " + tripId); - log.info(prefix + "mode = " + mode); - } + protected void onOpenUI(String programId, String tripId, ContentMode mode) { TripLongline loaded; @@ -154,24 +145,19 @@ public class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLongline if (create) { // create mode - - if (log.isInfoEnabled()) { - log.info(prefix + "create a new trip"); - } - loaded = service.preCreate(programId); } else { // update mode - if (log.isInfoEnabled()) { - log.info(prefix + "using existing trip " + tripId); - } + if (ContentMode.UPDATE == mode) { - if (mode == ContentMode.UPDATE) { loaded = service.loadForEdit(tripId); + } else { + loaded = service.loadForDisplay(tripId); + } } @@ -181,14 +167,11 @@ public class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLongline getUi().getTripLonglineTabPane().setSelectedIndex(0); buildTripMap = true; - finalizeOpenUI(mode, create); } @Override public void startEditUI(String... binding) { - TripLonglineUI ui = getUi(); - ContentOpenableUIModel<TripLongline> model = getModel(); ContentMode mode = model.getMode(); @@ -196,7 +179,7 @@ public class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLongline boolean create = mode == ContentMode.CREATE; String contextName = getValidatorContextName(mode); - ui.getValidator().setContext(contextName); + getUi().getValidator().setContext(contextName); if (create) { addInfoMessage(t("observe.tripLongline.message.creating")); @@ -205,6 +188,7 @@ public class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLongline if (model.isHistoricalData()) { addInfoMessage(t("observe.message.historical.data")); + } } @@ -221,7 +205,9 @@ public class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLongline TripLonglineUI.BINDING_HOME_ID_TEXT, TripLonglineUI.BINDING_CLOSE_ENABLED, TripLonglineUI.BINDING_CLOSE_AND_CREATE_ENABLED); + model.setModified(create); + } @Override @@ -237,6 +223,7 @@ public class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLongline obtainChildPosition(bean); return true; + } @Override diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUIHandler.java index 7e0e1fe..3b3ab5f 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/ActivitySeineUIHandler.java @@ -29,8 +29,8 @@ import fr.ird.observe.entities.seine.ActivitySeine; import fr.ird.observe.entities.seine.ActivitySeineImpl; import fr.ird.observe.entities.seine.Route; import fr.ird.observe.entities.seine.TripSeine; -import fr.ird.observe.services.referential.ReferentialService; import fr.ird.observe.services.data.seine.ActivitySeineService; +import fr.ird.observe.services.referential.ReferentialService; import fr.ird.observe.ui.content.ContentMode; import fr.ird.observe.ui.content.ContentUIModel; import fr.ird.observe.ui.content.open.ContentOpenableUIHandler; @@ -38,6 +38,7 @@ import jaxx.runtime.validator.swing.SwingValidatorMessage; import jaxx.runtime.validator.swing.SwingValidatorMessageTableModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.jaxx.widgets.gis.absolute.CoordinatesEditor; import org.nuiton.validator.NuitonValidatorScope; import javax.swing.event.TableModelEvent; @@ -81,6 +82,16 @@ public class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySei } @Override + public void initUI() throws Exception { + + super.initUI(); + + // listen messages to see if required to add + reloadTableModelListener(getUi().getErrorTableModel(), computeTabValidStateListener); + + } + + @Override protected ContentMode getContentMode(DataContext dataContext) { String activityId = getSelectedId(); @@ -91,16 +102,15 @@ public class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySei return ContentMode.CREATE; } - // l'activity existe en base + // l'activité existe en base if (dataContext.isSelectedOpen(ActivitySeine.class)) { - // l'activity est ouverte, donc modifiable + // l'activité est ouverte, donc modifiable return ContentMode.UPDATE; - } - ActivitySeineUI ui = getUi(); + } - // l'activity n'est pas ouverte, donc pas éditable + // l'activité n'est pas ouverte, donc pas éditable if (!dataContext.isSelectedOpen(Route.class)) { // la route n'est pas ouverte @@ -120,47 +130,26 @@ public class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySei if (getModel().isHistoricalData()) { addInfoMessage(t("observe.message.historical.data")); + } } else { - // seule l'activity n'est pas ouverte + // seule l'activité n'est pas ouverte addInfoMessage(t(closeMessage)); + } return ContentMode.READ; - } - - @Override - public void initUI() throws Exception { - - super.initUI(); - - // To be sure always remove listener (could prevent some leaks) - getUi().getErrorTableModel().removeTableModelListener(computeTabValidStateListener); - // listen messages to see if required to add - getUi().getErrorTableModel().addTableModelListener(computeTabValidStateListener); } @Override - public void openUI() throws Exception { - super.openUI(); - - resetQuadrant(getUi().getCoordinatesEditor()); + protected void onOpenUI(String routeId, String activityId, ContentMode mode) { - String routeId = getSelectedParentId(); - String activityId = getSelectedId(); - - if (log.isInfoEnabled()) { - log.info(prefix + "routeId = " + routeId); - log.info(prefix + "activityId = " + activityId); - } + CoordinatesEditor coordinatesEditor = getUi().getCoordinatesEditor(); - ContentMode mode = computeContentMode(); - if (log.isInfoEnabled()) { - log.info(prefix + "content mode " + mode); - } + resetQuadrant(coordinatesEditor); boolean create = activityId == null; @@ -185,29 +174,25 @@ public class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySei SwingValidatorMessageTableModel errorTableModel = getUi().getErrorTableModel(); computeTabValidState(errorTableModel); - finalizeOpenUI(mode, create); - - getUi().getCoordinatesEditor().setLatitudeAndLongitude(bean.getLatitude(), bean.getLongitude()); + coordinatesEditor.setLatitudeAndLongitude(bean.getLatitude(), bean.getLongitude()); if (create) { + + // on positionne le quadrant (celui de l'activité précédent si elle existe) Integer quadrant = bean.getQuadrant(); - getUi().getCoordinatesEditor().setQuadrant(null); - getUi().getCoordinatesEditor().setQuadrant(quadrant); - } + setQuadrant(coordinatesEditor, quadrant); - // on annule la modification engendree par ce binding - getModel().setModified(create); + } } @Override public void startEditUI(String... binding) { - ActivitySeineUI ui = getUi(); ContentUIModel<ActivitySeine> model = getModel(); boolean create = model.getMode() == ContentMode.CREATE; String contextName = getValidatorContextName(model.getMode()); - ui.getValidator().setContext(contextName); + getUi().getValidator().setContext(contextName); if (create) { addMessage(ui, NuitonValidatorScope.INFO, @@ -215,9 +200,9 @@ public class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySei t("observe.activitySeine.message.creating")); } else { addMessage(ui, - NuitonValidatorScope.INFO, - getEntityLabel(ActivitySeine.class), - t("observe.activitySeine.message.updating")); + NuitonValidatorScope.INFO, + getEntityLabel(ActivitySeine.class), + t("observe.activitySeine.message.updating")); } super.startEditUI(ActivitySeineUI.BINDING_TIME_TIME, @@ -232,7 +217,9 @@ public class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySei ActivitySeineUI.BINDING_CLOSE_ENABLED, ActivitySeineUI.BINDING_ADD_SET_ENABLED, ActivitySeineUI.BINDING_CLOSE_AND_CREATE_ENABLED); + model.setModified(create); + } @Override diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUIHandler.java index 2fc2bd5..90ba8bc 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/RouteUIHandler.java @@ -42,6 +42,7 @@ import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JOptionPane; import java.util.Date; +import java.util.List; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -78,6 +79,7 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { // mode creation return ContentMode.CREATE; + } // route deja existante @@ -85,9 +87,8 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { // la route est ouverte return ContentMode.UPDATE; - } - RouteUI ui = getUi(); + } // route non ouverte if (!dataContext.isSelectedOpen(TripSeine.class)) { @@ -104,26 +105,11 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { t(closeMessage)); } return ContentMode.READ; + } @Override - public void openUI() throws Exception { - - super.openUI(); - - String tripId = getSelectedParentId(); - String routeId = getSelectedId(); - - if (log.isInfoEnabled()) { - log.info(prefix + "tripId = " + tripId); - log.info(prefix + "routeId = " + routeId); - } - - ContentMode mode = computeContentMode(); - - if (log.isInfoEnabled()) { - log.info(prefix + "content mode = " + mode); - } + protected void onOpenUI(String tripId, String routeId, ContentMode mode) { Route loaded; @@ -138,19 +124,13 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { } else { // update mode - if (mode == ContentMode.UPDATE) { - loaded = service.loadForEdit(routeId); - } else { - loaded = service.loadForDisplay(routeId); - } + loaded = service.loadForEdit(routeId); } Route bean = getBean(); copy(Route.class, BinderService.EDIT, loaded, bean); - finalizeOpenUI(mode, create); - } @Override @@ -159,9 +139,7 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { boolean create = getModel().getMode() == ContentMode.CREATE; String contextName = getValidatorContextName(getModel().getMode()); - RouteUI ui = getUi(); - - ui.getValidator().setContext(contextName); + getUi().getValidator().setContext(contextName); if (create) { addMessage(ui, @@ -189,6 +167,7 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { // le formulaire est en état modifié uniquement si on est en création getModel().setModified(create); + } @Override @@ -200,7 +179,6 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { log.info("will save route " + bean.getTopiaId()); } - bean.setOpen(true); RouteService service = getService(RouteService.class); @@ -214,64 +192,12 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { @Override protected void afterSave(boolean refresh) { + super.afterSave(refresh); repaintTripNode(); - } - @Override - protected void afterDelete() { - super.afterDelete(); - repaintTripNode(); } -// @Override -// protected Route onCreate(TopiaContext tx, Object parent, Route editBean) throws TopiaException { -// -// TripSeine parentBean = (TripSeine) parent; -// -// // creation de la route -// Route beanToSave = ObserveDAOHelper.getRouteDAO(tx).create(); -// editBean.setTopiaId(beanToSave.getTopiaId()); -// -// // ajout de la route dans la amree -// parentBean.addRoute(beanToSave); -// -// // on renseigne le jour d'observation car on en a besoin pour -// // mettre la date de fin de la maree -// beanToSave.setDate(editBean.getDate()); -// -// // on met a jour si necessaire la date de fin de la maree -// updateDateFin(parentBean); -// -// return beanToSave; -// } -// -// @Override -// protected Route onUpdate(TopiaContext tx, Object parent, Route beanToSave) throws TopiaException { -// -// TripSeine parentBean = (TripSeine) parent; -// -// Route editBean = getBean(); -// -// // on conserve l'ancienne date d'observation -// Date oldDate = DateUtil.getDay(beanToSave.getDate()); -// -// // recopie des propriétés vers le bean a sauver -// getLoadBinder().copyExcluding(editBean, beanToSave, Route.PROPERTY_ACTIVITY_SEINE); -// -// if (!oldDate.equals(editBean.getDate())) { -// -// // le jour a change, il faut mettre à jour les dates des activitys -// // et des sets -// beanToSave.updateDates(); -// } -// -// // on met a jour si necessaire la date de fin de la maree -// updateDateFin(parentBean); -// -// return beanToSave; -// } - @Override protected boolean doDelete(Route bean) { @@ -300,6 +226,14 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { } @Override + protected void afterDelete() { + + super.afterDelete(); + repaintTripNode(); + + } + + @Override public boolean doCloseData() throws Exception { Route route = getBean(); @@ -335,7 +269,6 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { log.debug("response : " + reponse); } - switch (reponse) { case JOptionPane.CLOSED_OPTION: case 3: @@ -390,6 +323,7 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { super.doCloseData(); return true; + } protected ActivitySeineUI addActivityFinDeVeille(boolean close) { @@ -398,26 +332,22 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { // on créee l'activity de fin de veille ObserveNode parentNode = treeHelper.getSelectedNode(); - parentNode = treeHelper.findNode( - parentNode, - n("observe.common.activities") - ); + parentNode = treeHelper.findNode(parentNode, n("observe.common.activities")); if (log.isDebugEnabled()) { log.debug("PARENT NODE = " + parentNode); } treeHelper.addUnsavedNode(parentNode, ActivitySeine.class); // on recupère l'écran d'édition - ActivitySeineUI selectedUI = (ActivitySeineUI) - ObserveContext.get().getSelectedContentUI(); + ActivitySeineUI selectedUI = (ActivitySeineUI) ObserveContext.get().getSelectedContentUI(); // on recupère l'activity de fin de veille VesselActivitySeine vesselActivitySeine = null; - for (Object o : selectedUI.getVesselActivitySeine().getData()) { - VesselActivitySeine a = (VesselActivitySeine) o; - if (ActivitySeineImpl.ACTIVITY_FIN_DE_VEILLE.equals(a.getCode())) { - vesselActivitySeine = a; + List<VesselActivitySeine> vesselActivitySeines = selectedUI.getVesselActivitySeine().getData(); + for (VesselActivitySeine vesselActivitySeine1 : vesselActivitySeines) { + if (ActivitySeineImpl.ACTIVITY_FIN_DE_VEILLE_ID.equals(vesselActivitySeine1.getTopiaId())) { + vesselActivitySeine = vesselActivitySeine1; break; } } @@ -434,14 +364,16 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { // on ferme l'écean selectedUI.stopEdit(); + } + return selectedUI; + } @Override protected boolean obtainCanReopen(boolean create) { - DataContext dataContext = getDataContext(); // on peut reouvrir une route si : @@ -451,6 +383,7 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { dataContext.isSelectedOpen(TripSeine.class) && !dataContext.isOpenRoute(); return canReopen; + } protected void repaintTripNode() { @@ -463,20 +396,20 @@ public class RouteUIHandler extends ContentOpenableUIHandler<Route> { getUi().removeContextValue(Boolean.class, UPDATE_TRIP_NODE); - if (updateTripNode == null || !updateTripNode) { - return; - } + if (updateTripNode != null && updateTripNode) { + ObserveTreeHelper treeHelper = getTreeHelper(getUi()); + ObserveNode tripNode = treeHelper.getSelectedNode().getParent().getParent(); + if (log.isInfoEnabled()) { + log.info("Refresh trip node : " + tripNode); + } + treeHelper.reloadNode(tripNode, false); - ObserveTreeHelper treeHelper = getTreeHelper(getUi()); - ObserveNode tripNode = treeHelper.getSelectedNode().getParent().getParent(); - if (log.isInfoEnabled()) { - log.info("Refresh trip node : " + tripNode); } - treeHelper.reloadNode(tripNode, false); } + //FIXME Remettre ça en place protected void updateDateFin(TripSeine parentBean) { Date endDate = parentBean.getEndDate(); diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripSeineUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripSeineUIHandler.java index 619a52c..661bc93 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripSeineUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripSeineUIHandler.java @@ -90,6 +90,7 @@ public class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeine> { @Override public void initUI() throws Exception { + super.initUI(); TripSeineUI ui = getUi(); @@ -130,19 +131,7 @@ public class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeine> { } @Override - public void openUI() throws Exception { - super.openUI(); - - ContentMode mode = computeContentMode(); - - String programId = getSelectedParentId(); - final String tripId = getSelectedId(); - - if (log.isInfoEnabled()) { - log.info(prefix + "programId = " + programId); - log.info(prefix + "tripId = " + tripId); - log.info(prefix + "mode = " + mode); - } + protected void onOpenUI(String programId, String tripId, ContentMode mode) { TripSeineService service = getService(TripSeineService.class); @@ -152,25 +141,19 @@ public class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeine> { if (create) { // create mode - - if (log.isInfoEnabled()) { - log.info(prefix + "create a new trip"); - } - - loaded = service.preCreate(programId); } else { // update mode - if (log.isInfoEnabled()) { - log.info(prefix + "using existing trip " + tripId); - } + if (ContentMode.UPDATE == mode) { - if (mode == ContentMode.UPDATE) { loaded = service.loadForEdit(tripId); + } else { + loaded = service.loadForDisplay(tripId); + } } @@ -178,16 +161,14 @@ public class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeine> { TripSeine bean = getBean(); copy(TripSeine.class, BinderService.EDIT, loaded, bean); getUi().getTripSeineTabPane().setSelectedIndex(0); + buildTripMap = true; - finalizeOpenUI(mode, create); } @Override public void startEditUI(String... binding) { - TripSeineUI ui = getUi(); - ContentOpenableUIModel<TripSeine> model = getModel(); ContentMode mode = model.getMode(); @@ -195,7 +176,7 @@ public class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeine> { boolean create = mode == ContentMode.CREATE; String contextName = getValidatorContextName(mode); - ui.getValidator().setContext(contextName); + getUi().getValidator().setContext(contextName); if (create) { @@ -219,7 +200,9 @@ public class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeine> { TripSeineUI.BINDING_ERS_ID_TEXT, TripSeineUI.BINDING_CLOSE_ENABLED, TripSeineUI.BINDING_CLOSE_AND_CREATE_ENABLED); + model.setModified(create); + } @Override @@ -235,6 +218,7 @@ public class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeine> { obtainChildPosition(bean); return true; + } @Override diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/ContentTableUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/ContentTableUIHandler.java index c5be916..1242dfc 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/ContentTableUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/ContentTableUIHandler.java @@ -33,11 +33,8 @@ import fr.ird.observe.ui.content.ContentMode; import fr.ird.observe.ui.content.ContentUIHandler; import fr.ird.observe.ui.content.ObserveContentUI; import fr.ird.observe.ui.tree.ObserveNode; -import jaxx.runtime.swing.ErrorDialogUI; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.validator.NuitonValidatorScope; @@ -47,7 +44,6 @@ import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; import javax.swing.table.DefaultTableCellRenderer; import java.awt.Rectangle; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Set; @@ -79,6 +75,33 @@ public abstract class ContentTableUIHandler<E extends TopiaEntity, D extends Top */ protected abstract void onSelectedRowChanged(int editingRow, D bean, boolean create); + /** + * Initialiser le tableau de l'écran. + * + * Cette méthode est appelée la première fois que l'écran est affiché. + * + * @param renderer le renderer par défaut à utiliser. + */ + protected abstract void initTableUI(DefaultTableCellRenderer renderer); + + /** + * Pour charger le bean d'édition dans la méthode {@link #openUI()}. + * + * Cette méthode est appelée à chaque affichage de l'écran. + * + * @param mode le mode de l'écran + */ + protected abstract void loadEditBean(ContentMode mode); + + /** + * Pour enregistre l'objet en cours d'édition. + * + * Cette méthode est appelé dans la méthode {@link #doSave(TopiaEntity)}. + * + * @param editBean l'objet à enregistrer + */ + protected abstract void doPersist(E editBean); + @Override protected boolean computeCanWrite(DataSource source) { return source.canWriteData(); @@ -123,10 +146,102 @@ public abstract class ContentTableUIHandler<E extends TopiaEntity, D extends Top return (ObserveContentTableUI<E, D>) super.getUi(); } + protected ContentTableModel<E, D> getTableModel() { + return getUi().getTableModel(); + } + public final D getTableEditBean() { return getModel().getTableEditBean(); } + @Override + public void initUI() throws Exception { + + ContentTableUIInitializer<E, D, ObserveContentTableUI<E, D>> uiInitializer = + new ContentTableUIInitializer<E, D, ObserveContentTableUI<E, D>>(getUi()); + uiInitializer.initUI(ObserveContext.get().getServices()); + + } + + @Override + public void openUI() throws Exception { + + super.openUI(); + + ContentTableModel<E, D> tableModel = getTableModel(); + + // récupération de la ligne sélectionnée + int oldIndex = tableModel.getSelectedRow(); + + // on déttache le modèle du tableau + tableModel.dettachModel(); + + // récupération du mode de l'écran + ContentMode mode = computeContentMode(); + + // chargement du bean d'édition + loadEditBean(mode); + + // chargement de l'écran d'édition + loadTableEditBeanForm(mode); + + // enregistrement du mode de l'écran + getModel().setMode(mode); + + // initialisation du modèle du tableau + tableModel.attachModel(); + + boolean canEdit = mode == ContentMode.UPDATE; + + if (canEdit) { + // on lance le mode edition + ui.startEdit(null); + } + + if (!tableModel.isEmpty()) { + + if (tableModel.getRowCount() <= oldIndex) { + oldIndex = 0; + } + if (oldIndex == -1) { + oldIndex = 0; + } + + // le tableau contient au moins une entrée + // on la sélectionne la première entrée + tableModel.changeSelectedRow(oldIndex); + + } + + if (canEdit) { + + // on force l'ecran en non modification + //FIXME normalement, on ne devrait pas a avoir a faire ca ? + //FIXME mais il est possible que les validateurs modifient l'état + //FIXME modified sur l'ecran lors des bindings d'initilisation... + getModel().setModified(false); + + } + + } + + protected void loadTableEditBeanForm(ContentMode mode) { + // par defaut, rien à faire + } + + + @Override + public void startEditUI(String... binding) { + + addUpdateInfoMessage(); + super.startEditUI(binding); + + } + + protected void resetEditBean() { + getTableModel().resetEditBean(); + } + public final void updateEditor(ListSelectionEvent event) { final ObserveContentTableUI<E, D> ui = getUi(); @@ -142,7 +257,10 @@ public abstract class ContentTableUIHandler<E extends TopiaEntity, D extends Top if (log.isDebugEnabled()) { log.debug(event); } - if (getTableModel().isEmpty()) { + + ContentTableModel<E, D> tableModel = getTableModel(); + + if (tableModel.isEmpty()) { // le modele est vide, on ne propage rien //FIXME le modèle de selection ne devrait plus declancher des evenement //FIXME des que le modele est vide ? @@ -172,111 +290,28 @@ public abstract class ContentTableUIHandler<E extends TopiaEntity, D extends Top } }); - int selectedRow = getTableModel().getSelectedRow(); + int selectedRow = tableModel.getSelectedRow(); if (newIndex == selectedRow) { // on bloque du code re-entrant log.debug("new index already set in model " + newIndex + ", do nothing"); return; } // on doit changer de ligne selectionne dans le modele - getTableModel().changeSelectedRow(newIndex); - } - - protected abstract void initTableUI(DefaultTableCellRenderer renderer); + tableModel.changeSelectedRow(newIndex); -// protected String getEditBeanIdToLoad(DataContext dataContext, -// DataService dataService, -// DataSource dataSource) throws DataSourceException { -// throw new IllegalStateException("Do NOT USE ME!!!"); -// } - -// protected E loadEditBean(ContentMode mode, -// DataContext dataContext, -// DataService dataService, -// DataSource dataSource) throws DataSourceException { -// -// loadEditBean(mode); -// -//// String id = getEditBeanIdToLoad(dataContext, dataService, dataSource); -//// -//// if (id == null) { -//// throw new IllegalStateException("Could not find id form " + this); -//// } -//// -//// // preparation du bean d'édition -//// dataService.loadEditEntity(dataSource, id, getLoadExecutor()); -// -//// getModel().setMode(mode); -//// -//// // initialisation du modèle du tableau -//// getUi().getTableModel().attachModel(); -// -// E editBean = getBean(); -// return editBean; -// -// } - - //FIXME Rendre cette methode abstract - protected abstract void loadEditBean(ContentMode mode) ; - -// protected abstract void loadEditBean() throws DataSourceException { -// -// String id = getEditBeanIdToLoad(getDataContext(), getDataService(), getDataSource()); -// -// if (id == null) { -// throw new IllegalStateException("Could not find id form " + this); -// } -// -// // preparation du bean d'édition -// getDataService().loadEditEntity(getDataSource(), id, getLoadExecutor()); -// -// } - -// //FIXME A supprimer -// @Override -// protected final void onLoad(TopiaContext tx, E bean) throws TopiaException { -// super.onLoad(tx, bean); -// -// // on duplique la liste des fils traites dans le tableau -// // sinon on reste sur les references d'origine et on aura pas -// // la possibilité d'annuler l'edition ensuite car on aura modifie -// // les entrées d'origine... -// E editBean = getBean(); -// Collection<D> data = loadChilds(tx, editBean); -// getModel().getChildsUpdator().setChilds(editBean, data); -// } -// -// //FIXME A supprimer -// protected Collection<D> loadChilds(TopiaContext tx, E bean) throws TopiaException { -// Collection<D> childs = getModel().getChildsUpdator().getChilds(bean); -// Collection<D> data = new ArrayList<D>(); -// if (CollectionUtils.isNotEmpty(childs)) { -// Loador<D> loader = getModel().getChildLoador(); -// TopiaDAO<D> dao = getDataSource().getDAO(tx, getTableEditBean()); -// for (D c : childs) { -// try { -// D cUp = dao.findByTopiaId(c.getTopiaId()); -// D c2 = getModel().newTableEditBean(); -// loader.load(cUp, c2, true); -// data.add(c2); -// } catch (Exception e) { -// throw new RuntimeException(e); -// } -// } -// } -// return data; -// } - - @Override - public void initUI() throws Exception { + } - ContentTableUIInitializer<E, D, ObserveContentTableUI<E, D>> uiInitializer = - new ContentTableUIInitializer<E, D, ObserveContentTableUI<E, D>>(getUi()); - uiInitializer.initUI(ObserveContext.get().getServices()); + public void removeSelectedRow(int selectedRow) { + try { + getTableModel().doRemoveRow(selectedRow, false); + } finally { + // always reset busy model to false + ObserveContext.get().getObserveMainUI().setBusy(false); + } } - public Set<String> loadSpeciesList(String speciesListId, String errorMessage) { + protected Set<String> loadSpeciesList(String speciesListId, String errorMessage) { Set<String> speciesIds; try { @@ -294,7 +329,6 @@ public abstract class ContentTableUIHandler<E extends TopiaEntity, D extends Top } - protected void prepareSpeciesList(String speciesListId, JComponent speciesComponent, String errorMessage) throws DataSourceException { Set<String> speciesIds = loadSpeciesList(speciesListId, errorMessage); @@ -303,73 +337,6 @@ public abstract class ContentTableUIHandler<E extends TopiaEntity, D extends Top Species2.newSpeciesByIdPredicate(speciesIds)); } - protected void loadTableEditBeanForm(ContentMode mode) { - // par defaut, rien à faire - } - - @Override - public void openUI() throws Exception { - - super.openUI(); - - // récupération du mode de l'écran - ContentMode mode = computeContentMode(); - - ObserveContentTableUI<E, D> ui = getUi(); - - int oldIndex = ui.getTableModel().getSelectedRow(); - - ui.getTableModel().dettachModel(); - - // chargement du bean d'édition - loadEditBean(mode); - - // chargement de l'écran d'édition - loadTableEditBeanForm(mode); - - // enregistrement du mode de l'écran - getModel().setMode(mode); - - // initialisation du modèle du tableau - getUi().getTableModel().attachModel(); - - boolean canEdit = mode == ContentMode.UPDATE; - - if (canEdit) { - // on lance le mode edition - ui.startEdit(null); - } - - if (!ui.getTableModel().isEmpty()) { - if (ui.getTableModel().getRowCount() <= oldIndex) { - oldIndex = 0; - } - if (oldIndex == -1) { - oldIndex = 0; - } - - // le tableau contient au moins une entrée - // on la sélectionne la première entrée - ui.getTableModel().changeSelectedRow(oldIndex); - } - - if (canEdit) { - - // on force l'ecran en non modification - //FIXME normalement, on ne devrait pas a avoir a faire ca ? - //FIXME mais il est possible que les validateurs modifient l'état - //FIXME modified sur l'ecran lors des bindings d'initilisation... - getModel().setModified(false); - } - } - - @Override - public void startEditUI(String... binding) { - - addUpdateInfoMessage(); - super.startEditUI(binding); - } - protected void addUpdateInfoMessage() { String message = n("observe.entity.message.updating"); ObserveNode node = getTreeHelper(getUi()).getSelectedNode(); @@ -379,163 +346,36 @@ public abstract class ContentTableUIHandler<E extends TopiaEntity, D extends Top addMessage(getUi(), NuitonValidatorScope.INFO, entityLabel, message); } - public void removeSelectedRow(int selectedRow) { - try { - getTableModel().doRemoveRow(selectedRow, false); - } finally { - - // always reset busy model to false - ObserveContext.get().getObserveMainUI().setBusy(false); - } - } - -// @Override -// protected boolean doSave(E bean, -// DataService dataService, -// DataSource dataSource, -// TopiaEntityBinder<E> binder) throws Exception { -// -// ObserveContentTableUI<E, D> ui = getUi(); -// -// List<D> objets = ui.getTableModel().getData(); -// -// boolean canContinue; -// try { -// canContinue = prepareSave(bean, objets); -// } catch (Exception e) { -// if (log.isErrorEnabled()) { -// log.error(e); -// } -// ErrorDialogUI.showError(e); -// canContinue = false; -// } -// if (!canContinue) { -// -// // l'utilisateur a choisi de ne pas sauvegarder -// return false; -// } -// doPersist(bean, dataService, dataSource); -// -// -// return true; -// } - @Override - protected boolean doSave(E bean) { + protected final boolean doSave(E bean) { - ObserveContentTableUI<E, D> ui = getUi(); + List<D> objets = getTableModel().getData(); - List<D> objets = ui.getTableModel().getData(); + boolean canContinue = prepareSave(bean, objets); - boolean canContinue; - try { - canContinue = prepareSave(bean, objets); - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error(e); - } - ErrorDialogUI.showError(e); - canContinue = false; - } - if (!canContinue) { + if (canContinue) { + + doPersist(bean); + canContinue = true; - // l'utilisateur a choisi de ne pas sauvegarder - return false; } - doPersist(bean); + return canContinue; - return true; } + protected boolean prepareSave(E editBean, List<D> objets) { -// protected void doPersist(E bean, DataService dataService, DataSource dataSource) throws DataSourceException { -// // sauvegarde du bean en base -// dataService.update(dataSource, null, bean, getUpdateExecutor()); -// } - - protected void doPersist(E editBean) { - + // par defaut, rien de specifique a faire avant de faire la sauvegarde + return true; } -// @Override -// protected E onUpdate(TopiaContext tx, Object parentBean, E beanToSave) throws TopiaException { -// -// List<D> childs = getUi().getTableModel().getData(); -// -// E editBean = getBean(); -// -// TopiaEntityBinder<E> binder = getLoadBinder(); -// -// Loador<D> childBinder = getModel().getChildLoador(); -// -// EntityListUpdator<E, D> childUpdator = getModel().getChildsUpdator(); -// -// // recopie des propriétés du bean en excluant toujours la liste des fils -// binder.copyExcluding(editBean, beanToSave, childUpdator.getPropertyName()); -// -// // on conserve l'ancienne liste des fils (pour traitement ultérieure) -// Collection<D> oldChilds = -// new ArrayList<D>(childUpdator.getChilds(beanToSave)); -// -// // suppression des fils dans le bean a sauver -// childUpdator.removeAll(beanToSave); -// -// TopiaDAO<D> dao = ObserveDAOHelper.getDAO(tx, getModel().getChildType()); -// -// for (D child : childs) { -// -// D childToSave; -// -// if (child.getTopiaId() == null) { -// -// // creation du fils -// Map<String, Object> map = childBinder.obtainProperties(child); -// -// childToSave = dao.create(map); -// -// } else { -// -// // mise a jour du fils -// -// childToSave = dao.findByTopiaId(child.getTopiaId()); -// -// childBinder.load(child, childToSave, false); -// } -// -// // ajout du fils au bean à sauver -// childUpdator.addToList(beanToSave, childToSave); -// } -// -// // on donne la main aux implantations pour faire des traitements -// // supplémentaires -// onUpdateFinalize(tx, beanToSave, oldChilds); -// -// return beanToSave; -// } - @Override protected void afterSave(boolean refresh) { // on recharge l'écran resetEditUI(); - } - - protected boolean prepareSave(E editBean, List<D> objets) throws Exception { - // par defaut, rien de specifique a faire avant de faire la sauvegarde - return true; } - protected void onUpdateFinalize(TopiaContext tx, E bean, Collection<D> oldChilds) throws TopiaException { - // par défaut, rien à faire - } - - protected ContentTableModel<E, D> getTableModel() { - return getUi().getTableModel(); - } - - protected void resetEditBean() { - getTableModel().resetEditBean(); - } } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/ContentTableUIModel.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/ContentTableUIModel.java index 2f6646b..fadfe3c 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/ContentTableUIModel.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/ContentTableUIModel.java @@ -99,7 +99,7 @@ public abstract class ContentTableUIModel<E extends TopiaEntity, D extends Topia BinderService binderService = ObserveServiceHelper.get().getBinderService(); - this.childLoador = binderService.getTopiaBinder(childType, childBinderContext); + this.childLoador = binderService.getBinder(childType, childBinderContext); } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/SizeMeasuresTableModel.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/SizeMeasuresTableModel.java index 3bb120a..a08f575 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/SizeMeasuresTableModel.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/SizeMeasuresTableModel.java @@ -22,6 +22,7 @@ package fr.ird.observe.ui.content.table.impl.longline; * #L% */ +import fr.ird.observe.BinderService; import fr.ird.observe.ObserveServiceHelper; import fr.ird.observe.entities.longline.SizeMeasure; import fr.ird.observe.entities.longline.SizeMeasureImpl; @@ -40,7 +41,7 @@ public class SizeMeasuresTableModel extends EditableTableWithCacheTableModelSupp public SizeMeasuresTableModel() { - super(ObserveServiceHelper.get().getBinderService().getSimpleTopiaBinder(SizeMeasure.class)); + super(ObserveServiceHelper.get().getBinderService().getBinder(SizeMeasure.class, BinderService.EDIT)); } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/WeightMeasuresTableModel.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/WeightMeasuresTableModel.java index d36086d..e125f4b 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/WeightMeasuresTableModel.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/longline/WeightMeasuresTableModel.java @@ -22,6 +22,7 @@ package fr.ird.observe.ui.content.table.impl.longline; * #L% */ +import fr.ird.observe.BinderService; import fr.ird.observe.ObserveServiceHelper; import fr.ird.observe.entities.longline.WeightMeasure; import fr.ird.observe.entities.longline.WeightMeasureImpl; @@ -39,7 +40,7 @@ public class WeightMeasuresTableModel extends EditableTableWithCacheTableModelSu private static final long serialVersionUID = 1L; public WeightMeasuresTableModel() { - super(ObserveServiceHelper.get().getBinderService().getSimpleTopiaBinder(WeightMeasure.class)); + super(ObserveServiceHelper.get().getBinderService().getBinder(WeightMeasure.class, BinderService.EDIT)); } @Override diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUIHandler.java index 0a96590..8e59f98 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetCatchUIHandler.java @@ -54,10 +54,10 @@ import javax.swing.table.DefaultTableCellRenderer; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Set; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -71,11 +71,16 @@ public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Non /** Logger */ static private Log log = LogFactory.getLog(NonTargetCatchUIHandler.class); - /** l'entrée dans le contexte pour récupérer la liste complete des speciess */ + /** + * L'entrée dans le contexte pour récupérer la liste complete des espèces. + */ protected final JAXXContextEntryDef<List<Species>> ALL_ESPECES_ENTRY = UIHelper.newListContextEntryDef("NonTargetCatchUI-all-speciess"); - protected final JAXXContextEntryDef<List<NonTargetLength>> ALL_TAILLES_TO_DELETE_ENTRY = + /** + * L'entrée dans le contexte pour conserver les mensurations obsolètes à supprimer lors de la sauvegarde. + */ + protected final JAXXContextEntryDef<List<NonTargetLength>> ALL_NON_TARGET_LENGTH_TO_DELETE_ENTRY = UIHelper.newListContextEntryDef("NonTargetCatchUI-all-taille-to-delete"); /** @@ -147,69 +152,44 @@ public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Non return (NonTargetCatchUI) super.getUi(); } - public String getCatchWeightDataTip(NonTargetCatchComputedValueSource computed) { - String result; - - if (computed == null) { - result = t("observe.common.catchWeightComputed.observed.tip"); - } else { - result = t("observe.common.catchWeightComputed.computed.tip", computed.toString()); - } - return result; - } - - public String getTotalCountDataTip(NonTargetCatchComputedValueSource computed) { - String result; - - if (computed == null) { - result = t("observe.common.totalCountComputed.observed.tip"); - } else { - result = t("observe.common.totalCountComputed.computed.tip", computed.toString()); - - } - return result; - } - - public String getMeanWeightDataTip(NonTargetCatchComputedValueSource computed) { - String result; - - if (computed == null) { - result = t("observe.common.meanWeightComputed.observed.tip"); - } else { - result = t("observe.common.meanWeightComputed.computed.tip", computed.toString()); - } - return result; - } - - public String getMeanLengthDataTip(NonTargetCatchComputedValueSource computed) { - String result; - - if (computed == null) { - result = t("observe.common.meanLengthComputed.observed.tip"); - } else { - result = t("observe.common.meanLengthComputed.computed.tip", computed.toString()); - } - return result; - } + @Override + protected void initTableUI(DefaultTableCellRenderer renderer) { - public void resetCatchWeightComputed() { - getTableEditBean().setCatchWeightComputedSource(null); - getUi().getCatchWeight().grabFocus(); - } + JTable table = getUi().getTable(); - public void resetTotalCountComputed() { - getTableEditBean().setTotalCountComputedSource(null); - getUi().getTotalCount().grabFocus(); - } + UIHelper.fixTableColumnWidth(table, 3, 55); + UIHelper.fixTableColumnWidth(table, 4, 65); + UIHelper.fixTableColumnWidth(table, 5, 75); + UIHelper.fixTableColumnWidth(table, 6, 55); + UIHelper.fixTableColumnWidth(table, 7, 50); - public void resetMeanWeightComputed() { - getTableEditBean().setMeanWeightComputedSource(null); - getUi().getMeanWeight().grabFocus(); - } + UIHelper.setI18nTableHeaderRenderer( + table, + n("observe.nonTargetCatch.table.speciesFaune"), + n("observe.nonTargetCatch.table.speciesFaune.tip"), + n("observe.nonTargetCatch.table.speciesFate"), + n("observe.nonTargetCatch.table.speciesFate.tip"), + n("observe.nonTargetCatch.table.reasonForDiscard"), + n("observe.nonTargetCatch.table.reasonForDiscard.tip"), + n("observe.nonTargetCatch.table.catchWeight"), + n("observe.nonTargetCatch.table.catchWeight.tip"), + n("observe.nonTargetCatch.table.totalCount"), + n("observe.nonTargetCatch.table.totalCount.tip"), + n("observe.nonTargetCatch.table.meanWeight"), + n("observe.nonTargetCatch.table.meanWeight.tip"), + n("observe.nonTargetCatch.table.meanLength"), + n("observe.nonTargetCatch.table.meanLength.tip"), + n("observe.nonTargetCatch.table.comment"), + n("observe.nonTargetCatch.table.comment.tip")); - public void resetMeanLengthComputed() { - getTableEditBean().setMeanLengthComputedSource(null); - getUi().getMeanLength().grabFocus(); + UIHelper.setTableColumnRenderer(table, 0, UIHelper.newDecorateTableCellRenderer(renderer, Species.class)); + UIHelper.setTableColumnRenderer(table, 1, UIHelper.newDecorateTableCellRenderer(renderer, SpeciesFate.class)); + UIHelper.setTableColumnRenderer(table, 2, UIHelper.newDecorateTableCellRenderer(renderer, ReasonForDiscard.class)); + UIHelper.setTableColumnRenderer(table, 3, UIHelper.newEmptyNumberTableCellRenderer(renderer)); + UIHelper.setTableColumnRenderer(table, 4, UIHelper.newEmptyNumberTableCellRenderer(renderer)); + UIHelper.setTableColumnRenderer(table, 5, UIHelper.newEmptyNumberTableCellRenderer(renderer)); + UIHelper.setTableColumnRenderer(table, 6, UIHelper.newEmptyNumberTableCellRenderer(renderer)); + UIHelper.setTableColumnRenderer(table, 7, UIHelper.newStringTableCellRenderer(renderer, 10, true)); } @Override @@ -289,9 +269,8 @@ public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Non } @Override - protected void onSelectedRowChanged(int editingRow, - NonTargetCatch bean, - boolean create) { + protected void onSelectedRowChanged(int editingRow, NonTargetCatch bean, boolean create) { + NonTargetCatchUI ui = getUi(); ContentTableModel<SetSeine, NonTargetCatch> model = getTableModel(); @@ -302,20 +281,23 @@ public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Non return; } - List<Species> availableEspeces; + List<Species> availableSpecies; JComponent requestFocus; if (create) { - availableEspeces = new ArrayList<Species>(ALL_ESPECES_ENTRY.getContextValue(ui)); + availableSpecies = new ArrayList<Species>(ALL_ESPECES_ENTRY.getContextValue(ui)); requestFocus = ui.getSpecies(); + } else { + Species species = bean.getSpecies(); - availableEspeces = Arrays.asList(species); + availableSpecies = Collections.singletonList(species); requestFocus = ui.getTable(); + } - ui.getSpecies().setData(availableEspeces); + ui.getSpecies().setData(availableSpecies); requestFocus.requestFocus(); NonTargetCatch tableEditBean = getTableEditBean(); @@ -330,103 +312,48 @@ public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Non tableEditBean.removePropertyChangeListener(NonTargetCatch.PROPERTY_MEAN_LENGTH, meanLengthChanged); tableEditBean.addPropertyChangeListener(NonTargetCatch.PROPERTY_MEAN_LENGTH, meanLengthChanged); - } - - @Override - protected void initTableUI(DefaultTableCellRenderer renderer) { - - JTable table = getUi().getTable(); - - UIHelper.fixTableColumnWidth(table, 3, 55); - UIHelper.fixTableColumnWidth(table, 4, 65); - UIHelper.fixTableColumnWidth(table, 5, 75); - UIHelper.fixTableColumnWidth(table, 6, 55); - UIHelper.fixTableColumnWidth(table, 7, 50); - - UIHelper.setI18nTableHeaderRenderer( - table, - n("observe.nonTargetCatch.table.speciesFaune"), - n("observe.nonTargetCatch.table.speciesFaune.tip"), - n("observe.nonTargetCatch.table.speciesFate"), - n("observe.nonTargetCatch.table.speciesFate.tip"), - n("observe.nonTargetCatch.table.reasonForDiscard"), - n("observe.nonTargetCatch.table.reasonForDiscard.tip"), - n("observe.nonTargetCatch.table.catchWeight"), - n("observe.nonTargetCatch.table.catchWeight.tip"), - n("observe.nonTargetCatch.table.totalCount"), - n("observe.nonTargetCatch.table.totalCount.tip"), - n("observe.nonTargetCatch.table.meanWeight"), - n("observe.nonTargetCatch.table.meanWeight.tip"), - n("observe.nonTargetCatch.table.meanLength"), - n("observe.nonTargetCatch.table.meanLength.tip"), - n("observe.nonTargetCatch.table.comment"), - n("observe.nonTargetCatch.table.comment.tip")); - - UIHelper.setTableColumnRenderer(table, 0, UIHelper.newDecorateTableCellRenderer(renderer, Species.class)); - UIHelper.setTableColumnRenderer(table, 1, UIHelper.newDecorateTableCellRenderer(renderer, SpeciesFate.class)); - UIHelper.setTableColumnRenderer(table, 2, UIHelper.newDecorateTableCellRenderer(renderer, ReasonForDiscard.class)); - UIHelper.setTableColumnRenderer(table, 3, UIHelper.newEmptyNumberTableCellRenderer(renderer)); - UIHelper.setTableColumnRenderer(table, 4, UIHelper.newEmptyNumberTableCellRenderer(renderer)); - UIHelper.setTableColumnRenderer(table, 5, UIHelper.newEmptyNumberTableCellRenderer(renderer)); - UIHelper.setTableColumnRenderer(table, 6, UIHelper.newEmptyNumberTableCellRenderer(renderer)); - UIHelper.setTableColumnRenderer(table, 7, UIHelper.newStringTableCellRenderer(renderer, 10, true)); - } - - @Override - protected boolean doSave(SetSeine bean) { - - try { - - return super.doSave(bean); - - } finally { - - // toujours supprimer la référence du context, quoiqu'il arrive - ALL_TAILLES_TO_DELETE_ENTRY.removeContextValue(getUi()); - } } @Override - protected boolean prepareSave(SetSeine editBean, List<NonTargetCatch> objets) throws Exception { + protected boolean prepareSave(SetSeine editBean, List<NonTargetCatch> objets) { super.prepareSave(editBean, objets); List<Species> speciessUsed = getTableModel().getColumnValues(0); - - Collection<Species> speciessToDelete = new HashSet<Species>(); - List<NonTargetLength> tailleToDelete = new ArrayList<NonTargetLength>(); + Set<String> speciesIdsUsed = new HashSet<String>(); + for (Species species : speciessUsed) { + speciesIdsUsed.add(species.getTopiaId()); + } NonTargetSampleService service = getService(NonTargetSampleService.class); - service.getObsoleteEspeceForNonTargetSample(editBean.getTopiaId(), - speciessUsed, - speciessToDelete, - tailleToDelete); + List<NonTargetLength> lengthsToDelete = service.getObsoleteNonTargetLengths(editBean.getTopiaId(), speciesIdsUsed); - if (!tailleToDelete.isEmpty()) { + if (!lengthsToDelete.isEmpty()) { + + // il existe des echantillon faune a supprimer on demande une confirmation + + Set<Species> speciessToDelete = new HashSet<Species>(); + for (NonTargetLength targetLength : lengthsToDelete) { + speciessToDelete.add(targetLength.getSpecies()); + } - // il existe des echantillon faune a supprimer on demande une - // confirmation StringBuilder sb = new StringBuilder(); StringBuilder sb2 = new StringBuilder(); - Decorator<Species> decorator; - Decorator<NonTargetLength> decorator2; - decorator = getDecoratorService().getDecoratorByType(Species.class); - decorator2 = getDecoratorService().getDecoratorByType(NonTargetLength.class); + Decorator<Species> speciesDecorator = getDecoratorService().getDecoratorByType(Species.class); + Decorator<NonTargetLength> nonTargetLengthDecorator = getDecoratorService().getDecoratorByType(NonTargetLength.class); for (Species e : speciessToDelete) { - sb.append(" - ").append(decorator.toString(e)).append('\n'); + sb.append(" - ").append(speciesDecorator.toString(e)).append('\n'); } - for (NonTargetLength t : tailleToDelete) { - sb2.append(" - ").append(decorator2.toString(t)).append('\n'); + for (NonTargetLength t : lengthsToDelete) { + sb2.append(" - ").append(nonTargetLengthDecorator.toString(t)).append('\n'); } int reponse = UIHelper.askUser( t("observe.title.need.confirm"), t("observe.nonTargetCatch.message.table.will.delete.nonTargetSample", sb.toString(), sb2.toString()), JOptionPane.ERROR_MESSAGE, - new Object[]{ - t("observe.choice.continue"), - t("observe.choice.cancel")}, + new Object[]{t("observe.choice.continue"), t("observe.choice.cancel")}, 0); if (log.isDebugEnabled()) { log.debug("response : " + reponse); @@ -444,7 +371,8 @@ public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Non } // on conserve les tailles a supprimer - ALL_TAILLES_TO_DELETE_ENTRY.setContextValue(getUi(), tailleToDelete); + ALL_NON_TARGET_LENGTH_TO_DELETE_ENTRY.setContextValue(getUi(), lengthsToDelete); + } return true; @@ -454,11 +382,84 @@ public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Non @Override protected void doPersist(SetSeine editBean) { - List<NonTargetLength> tailleToDelete = ALL_TAILLES_TO_DELETE_ENTRY.getContextValue(getUi()); + List<NonTargetLength> tailleToDelete = ALL_NON_TARGET_LENGTH_TO_DELETE_ENTRY.getContextValue(getUi()); - NonTargetCatchService service = getService(NonTargetCatchService.class); - service.save(editBean, tailleToDelete); + try { + NonTargetCatchService service = getService(NonTargetCatchService.class); + service.save(editBean, tailleToDelete); + + } finally { + + // toujours supprimer la référence du context, quoiqu'il arrive + ALL_NON_TARGET_LENGTH_TO_DELETE_ENTRY.removeContextValue(getUi()); + } + + } + + public String getCatchWeightDataTip(NonTargetCatchComputedValueSource computed) { + String result; + + if (computed == null) { + result = t("observe.common.catchWeightComputed.observed.tip"); + } else { + result = t("observe.common.catchWeightComputed.computed.tip", computed.toString()); + } + return result; + } + + public String getTotalCountDataTip(NonTargetCatchComputedValueSource computed) { + String result; + + if (computed == null) { + result = t("observe.common.totalCountComputed.observed.tip"); + } else { + result = t("observe.common.totalCountComputed.computed.tip", computed.toString()); + + } + return result; + } + + public String getMeanWeightDataTip(NonTargetCatchComputedValueSource computed) { + String result; + + if (computed == null) { + result = t("observe.common.meanWeightComputed.observed.tip"); + } else { + result = t("observe.common.meanWeightComputed.computed.tip", computed.toString()); + } + return result; + } + + public String getMeanLengthDataTip(NonTargetCatchComputedValueSource computed) { + String result; + + if (computed == null) { + result = t("observe.common.meanLengthComputed.observed.tip"); + } else { + result = t("observe.common.meanLengthComputed.computed.tip", computed.toString()); + } + return result; + } + + public void resetCatchWeightComputed() { + getTableEditBean().setCatchWeightComputedSource(null); + getUi().getCatchWeight().grabFocus(); + } + + public void resetTotalCountComputed() { + getTableEditBean().setTotalCountComputedSource(null); + getUi().getTotalCount().grabFocus(); + } + + public void resetMeanWeightComputed() { + getTableEditBean().setMeanWeightComputedSource(null); + getUi().getMeanWeight().grabFocus(); + } + + public void resetMeanLengthComputed() { + getTableEditBean().setMeanLengthComputedSource(null); + getUi().getMeanLength().grabFocus(); } } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetSampleUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetSampleUIHandler.java index 920fd6c..88bc806 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetSampleUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/NonTargetSampleUIHandler.java @@ -36,6 +36,7 @@ import fr.ird.observe.ui.content.ContentMode; import fr.ird.observe.ui.content.table.ContentTableModel; import fr.ird.observe.ui.content.table.ContentTableUIHandler; import jaxx.runtime.context.JAXXContextEntryDef; +import jaxx.runtime.swing.editor.NumberEditor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorScope; @@ -46,7 +47,7 @@ import javax.swing.table.DefaultTableCellRenderer; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Collections; import java.util.List; import static org.nuiton.i18n.I18n.n; @@ -103,6 +104,38 @@ public class NonTargetSampleUIHandler extends ContentTableUIHandler<NonTargetSam return (NonTargetSampleUI) super.getUi(); } + @Override + protected void initTableUI(DefaultTableCellRenderer renderer) { + + JTable table = getUi().getTable(); + + UIHelper.fixTableColumnWidth(table, 1, 100); + UIHelper.fixTableColumnWidth(table, 2, 100); + + UIHelper.setI18nTableHeaderRenderer( + table, + n("observe.nonTargetSample.table.speciesFaune"), + n("observe.nonTargetSample.table.speciesFaune.tip"), + n("observe.nonTargetSample.table.length"), + n("observe.nonTargetSample.table.length.tip"), + n("observe.nonTargetSample.table.meanWeight"), + n("observe.nonTargetSample.table.meanWeight.tip"), + n("observe.nonTargetSample.table.count"), + n("observe.nonTargetSample.table.count.tip"), + n("observe.nonTargetSample.table.gender"), + n("observe.nonTargetSample.table.gender.tip"), + n("observe.nonTargetSample.table.picturesReferences"), + n("observe.nonTargetSample.table.picturesReferences.tip")); + + UIHelper.setTableColumnRenderer(table, 0, UIHelper.newDecorateTableCellRenderer(renderer, Species.class)); + UIHelper.setTableColumnRenderer(table, 1, UIHelper.newEmptyNumberTableCellRenderer(renderer)); + UIHelper.setTableColumnRenderer(table, 2, UIHelper.newEmptyNumberTableCellRenderer(renderer)); + UIHelper.setTableColumnRenderer(table, 3, UIHelper.newEmptyNumberTableCellRenderer(renderer)); + UIHelper.setTableColumnRenderer(table, 4, UIHelper.newDecorateTableCellRenderer(renderer, Sex.class)); + UIHelper.setTableColumnRenderer(table, 5, renderer); + + } + public void resetWeightSource() { getTableEditBean().setWeightSource(false); getUi().getWeight().grabFocus(); @@ -134,7 +167,7 @@ public class NonTargetSampleUIHandler extends ContentTableUIHandler<NonTargetSam String setId = getDataContext().getSelectedSetId(); NonTargetSampleService service = getService(NonTargetSampleService.class); - speciesList = service.getAvailableEspeceForNonTargetSample(setId); + speciesList = service.getAvailableSpeciesForNonTargetSample(setId); ALL_ESPECES_ENTRY.setContextValue(getUi(), speciesList); } @@ -152,6 +185,8 @@ public class NonTargetSampleUIHandler extends ContentTableUIHandler<NonTargetSam String setId = getDataContext().getSelectedSetId(); + NonTargetSampleService service = getService(NonTargetSampleService.class); + if (editBean.getTopiaId() != null && editBean.isNonTargetLengthEmpty()) { // remove orphan target sample @@ -159,47 +194,22 @@ public class NonTargetSampleUIHandler extends ContentTableUIHandler<NonTargetSam log.info("Remove obsolete nonTargetSample " + editBean.getTopiaId() + " from Set: " + setId); } - getService(NonTargetSampleService.class).delete(setId, editBean); + service.delete(setId, editBean); } else { - String savedId = getService(NonTargetSampleService.class).save(setId, editBean); + String savedId = service.save(setId, editBean); editBean.setTopiaId(savedId); getService(NonTargetLengthService.class).save(editBean); + } } -// @Override -// protected NonTargetSample onCreate(TopiaContext tx, -// Object parent, -// NonTargetSample editBean) throws TopiaException { -// SetSeine parentBean = (SetSeine) parent; -// NonTargetSample beanToSave = -// ObserveDAOHelper.getNonTargetSampleDAO(tx).create(); -// if (log.isInfoEnabled()) { -// log.info("Echantillon faune " + beanToSave.getTopiaId() + -// " was created."); -// } -// editBean.setTopiaId(beanToSave.getTopiaId()); -// editBean.setTopiaCreateDate(beanToSave.getTopiaCreateDate()); -// editBean.setTopiaVersion(beanToSave.getTopiaVersion()); -// parentBean.addNonTargetSample(beanToSave); -// return beanToSave; -// } - -// @Override -// protected void onDelete(TopiaContext tx, Object parent, NonTargetSample beanToDelete) throws TopiaException { -// SetSeine parentBean = (SetSeine) parent; -// parentBean.removeNonTargetSample(beanToDelete); -// } - - @SuppressWarnings("unchecked") @Override - protected void onSelectedRowChanged(int editingRow, - NonTargetLength bean, - boolean create) { + protected void onSelectedRowChanged(int editingRow, NonTargetLength bean, boolean create) { + ContentTableModel<NonTargetSample, NonTargetLength> model = getTableModel(); if (!model.isEditable()) { @@ -223,12 +233,10 @@ public class NonTargetSampleUIHandler extends ContentTableUIHandler<NonTargetSam ui.getAcquisitionModeGroup().setSelectedValue(ModeSaisieEchantillonEnum.byEffectif); } - availableEspeces = new ArrayList<Species>( - ALL_ESPECES_ENTRY.getContextValue(ui)); + availableEspeces = new ArrayList<Species>(ALL_ESPECES_ENTRY.getContextValue(ui)); requestFocus = ui.getSpecies(); - } else { - requestFocus = ui.getCount(); + } else { // on passe le mode de saisie int acquisitionMode = bean.getAcquisitionMode(); @@ -237,8 +245,11 @@ public class NonTargetSampleUIHandler extends ContentTableUIHandler<NonTargetSam ui.getAcquisitionModeGroup().setSelectedValue(null); ui.getAcquisitionModeGroup().setSelectedValue(enumValue); - availableEspeces = Arrays.asList(species); + availableEspeces = Collections.singletonList(species); + requestFocus = ui.getCount(); + } + ui.getSpecies().setData(availableEspeces); requestFocus.requestFocus(); @@ -248,40 +259,12 @@ public class NonTargetSampleUIHandler extends ContentTableUIHandler<NonTargetSam tableEditBean.removePropertyChangeListener(NonTargetLength.PROPERTY_LENGTH, lengthChanged); tableEditBean.addPropertyChangeListener(NonTargetLength.PROPERTY_LENGTH, lengthChanged); - } - - @Override - protected void initTableUI(DefaultTableCellRenderer renderer) { - JTable table = getUi().getTable(); - - UIHelper.fixTableColumnWidth(table, 1, 100); - UIHelper.fixTableColumnWidth(table, 2, 100); - - UIHelper.setI18nTableHeaderRenderer( - table, - n("observe.nonTargetSample.table.speciesFaune"), - n("observe.nonTargetSample.table.speciesFaune.tip"), - n("observe.nonTargetSample.table.length"), - n("observe.nonTargetSample.table.length.tip"), - n("observe.nonTargetSample.table.meanWeight"), - n("observe.nonTargetSample.table.meanWeight.tip"), - n("observe.nonTargetSample.table.count"), - n("observe.nonTargetSample.table.count.tip"), - n("observe.nonTargetSample.table.gender"), - n("observe.nonTargetSample.table.gender.tip"), - n("observe.nonTargetSample.table.picturesReferences"), - n("observe.nonTargetSample.table.picturesReferences.tip")); - UIHelper.setTableColumnRenderer(table, 0, UIHelper.newDecorateTableCellRenderer(renderer, Species.class)); - UIHelper.setTableColumnRenderer(table, 1, UIHelper.newEmptyNumberTableCellRenderer(renderer)); - UIHelper.setTableColumnRenderer(table, 2, UIHelper.newEmptyNumberTableCellRenderer(renderer)); - UIHelper.setTableColumnRenderer(table, 3, UIHelper.newEmptyNumberTableCellRenderer(renderer)); - UIHelper.setTableColumnRenderer(table, 4, UIHelper.newDecorateTableCellRenderer(renderer, Sex.class)); - UIHelper.setTableColumnRenderer(table, 5, renderer); } @Override protected ContentMode getContentMode(DataContext dataContext) { + ContentMode mode = super.getContentMode(dataContext); String setId = getDataContext().getSelectedSetId(); @@ -320,20 +303,21 @@ public class NonTargetSampleUIHandler extends ContentTableUIHandler<NonTargetSam return; } - NonTargetSampleUI ui = getUi(); + NumberEditor weight = getUi().getWeight(); + NumberEditor count = getUi().getCount(); - boolean createMode = ui.getTableModel().isCreate(); + boolean createMode = getTableModel().isCreate(); - NonTargetLength editBean = ui.getTableEditBean(); + NonTargetLength editBean = getTableEditBean(); switch (newMode) { case byEffectif: // le weight n'est pas modifiable - ui.getWeight().setEnabled(false); + weight.setEnabled(false); // l'count est modifiable - ui.getCount().setEnabled(true); + count.setEnabled(true); if (createMode) { @@ -347,11 +331,10 @@ public class NonTargetSampleUIHandler extends ContentTableUIHandler<NonTargetSam case byIndividu: // le weight est pas modifiable - ui.getWeight().setEnabled(true); + weight.setEnabled(true); // l'count n'est pas modifiable et est toujours de 1 - ui.getCount().setEnabled(false); - + count.setEnabled(false); if (createMode) { @@ -365,6 +348,9 @@ public class NonTargetSampleUIHandler extends ContentTableUIHandler<NonTargetSam // on propage le mode de saisie dans le bean editBean.setAcquisitionMode(newMode.ordinal()); + } + } + } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/ObjectObservedSpeciesUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/ObjectObservedSpeciesUIHandler.java index f012ad7..1db6bda 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/ObjectObservedSpeciesUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/ObjectObservedSpeciesUIHandler.java @@ -47,8 +47,7 @@ import static org.nuiton.i18n.I18n.n; public class ObjectObservedSpeciesUIHandler extends ContentTableUIHandler<FloatingObject, ObjectObservedSpecies> { /** Logger */ - static private Log log = - LogFactory.getLog(ObjectObservedSpeciesUIHandler.class); + public static final Log log = LogFactory.getLog(ObjectObservedSpeciesUIHandler.class); public ObjectObservedSpeciesUIHandler(ObjectObservedSpeciesUI ui) { super(ui, DataContextType.SetSeine); @@ -72,11 +71,6 @@ public class ObjectObservedSpeciesUIHandler extends ContentTableUIHandler<Floati } -// @Override -// protected String getEditBeanIdToLoad(DataContext dataContext, DataService dataService, DataSource dataSource) { -// return dataContext.getSelectedFloatingObjectId(); -// } - @Override protected void onSelectedRowChanged(int editingRow, ObjectObservedSpecies bean, boolean create) { if (log.isDebugEnabled()) { diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetCatchUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetCatchUIHandler.java index d9a3e19..3967c6a 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetCatchUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetCatchUIHandler.java @@ -23,8 +23,8 @@ package fr.ird.observe.ui.content.table.impl.seine; import fr.ird.observe.BinderService; import fr.ird.observe.ObserveConfig; -import fr.ird.observe.db.DataSourceException; import fr.ird.observe.db.constants.DataContextType; +import fr.ird.observe.entities.Entities; import fr.ird.observe.entities.referentiel.Ocean; import fr.ird.observe.entities.referentiel.ReferenceEntities; import fr.ird.observe.entities.referentiel.Species; @@ -34,7 +34,7 @@ import fr.ird.observe.entities.seine.SetSeine; import fr.ird.observe.entities.seine.TargetCatch; import fr.ird.observe.entities.seine.TargetLength; import fr.ird.observe.services.data.TripService; -import fr.ird.observe.services.data.seine.NonTargetCatchService; +import fr.ird.observe.services.data.seine.TargetCatchService; import fr.ird.observe.services.data.seine.TargetSampleService; import fr.ird.observe.services.referential.ReferentialService; import fr.ird.observe.ui.UIHelper; @@ -55,12 +55,11 @@ import javax.swing.table.DefaultTableCellRenderer; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -74,12 +73,14 @@ public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Target /** Logger */ private static final Log log = LogFactory.getLog(TargetCatchUIHandler.class); - JAXXContextEntryDef<List<TargetLength>> ALL_TAILLES_TO_DELETE_ENTRY = + /** + * L'entrée dans le contexte pour conserver les mensurations obsolètes à supprimer lors de la sauvegarde. + */ + JAXXContextEntryDef<List<TargetLength>> ALL_TARGET_LENGTH_TO_DELETE_ENTRY = UIHelper.newListContextEntryDef("TargetCatchUI-all-taille-to-delete"); /** - * l'entrée dans le contexte pour récupérer la liste complètes des - * catégories + * L'entrée dans le contexte pour récupérer la liste complète des catégories. */ JAXXContextEntryDef<List<WeightCategory>> ALL_CATEGORIES_ENTRY = UIHelper.newListContextEntryDef("TargetCatchUI-all-categories"); @@ -95,10 +96,11 @@ public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Target @Override public void initUI() throws Exception { + super.initUI(); - // lors de la modification d'une species (sur une entree non sauvee) - // - on recalcule la liste des categories pour cette species. + // lors de la modification d'une espèces (sur une entree non sauvee) + // - on recalcule la liste des categories pour cette espèce. // - on reinitialiser la categorie selectionnee getUi().getSpecies().addPropertyChangeListener( @@ -108,18 +110,15 @@ public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Target @Override public void propertyChange(PropertyChangeEvent evt) { - ContentTableModel<SetSeine, TargetCatch> model; - model = getTableModel(); + ContentTableModel<SetSeine, TargetCatch> model = getTableModel(); + TargetCatch bean = model.getRowBean(); - if (model.getRowBean().getTopiaId() == null) { - - // en mode creation , on doit recalculer la liste - // des categories + if (Entities.isNew(bean)) { + // en mode creation , on doit recalculer la liste des categories Species species = (Species) evt.getNewValue(); - - onEspeceChanged(species); + } } } @@ -127,12 +126,42 @@ public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Target } @Override + protected void initTableUI(DefaultTableCellRenderer renderer) { + + JTable table = getUi().getTable(); + + UIHelper.fixTableColumnWidth(table, 2, 100); + UIHelper.fixTableColumnWidth(table, 3, 50); + UIHelper.fixTableColumnWidth(table, 4, 50); + + UIHelper.setI18nTableHeaderRenderer( + table, + n("observe.targetCatch.table.speciesThon"), + n("observe.targetCatch.table.speciesThon.tip"), + n("observe.targetCatch.table.weightCategory"), + n("observe.targetCatch.table.weightCategory.tip"), + n("observe.targetCatch.table.well"), + n("observe.targetCatch.table.well.tip"), + n("observe.targetCatch.table.weight"), + n("observe.targetCatch.table.weight.tip"), + n("observe.targetCatch.table.comment"), + n("observe.targetCatch.table.comment.tip")); + + UIHelper.setTableColumnRenderer(table, 0, UIHelper.newDecorateTableCellRenderer(renderer, Species.class)); + UIHelper.setTableColumnRenderer(table, 1, UIHelper.newDecorateTableCellRenderer(renderer, WeightCategory.class)); + UIHelper.setTableColumnRenderer(table, 2, renderer); + UIHelper.setTableColumnRenderer(table, 3, UIHelper.newEmptyNumberTableCellRenderer(renderer)); + UIHelper.setTableColumnRenderer(table, 4, UIHelper.newStringTableCellRenderer(renderer, 10, true)); + + } + + @Override protected void loadEditBean(ContentMode mode) { List<Species> speciesList; List<WeightCategory> categorieList; - if (mode == ContentMode.UPDATE) { + if (ContentMode.UPDATE == mode) { // on charge le formulaire uniquement si en mode édition @@ -142,7 +171,7 @@ public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Target ObserveConfig config = getUi().getContextValue(ObserveConfig.class); String speciesListId = config.getSpeciesListSeineTargetCatchId(); - java.util.Set<String> speciesIds = loadSpeciesList(speciesListId, n("observe.error.speciesList.seine.targetCatch.notFound")); + Set<String> speciesIds = loadSpeciesList(speciesListId, n("observe.error.speciesList.seine.targetCatch.notFound")); categorieList = Species2.filterWeightCategoryBySpeciesIds(categorieList, speciesIds); @@ -165,109 +194,63 @@ public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Target speciesList = new ArrayList<Species>(); categorieList = new ArrayList<WeightCategory>(); - } - TargetCatchUI ui = getUi(); + } ALL_CATEGORIES_ENTRY.setContextValue(ui, categorieList); - ui.getSpecies().setData(speciesList); + getUi().getSpecies().setData(speciesList); String setId = getDataContext().getSelectedSetId(); - SetSeine setSeine = getService(NonTargetCatchService.class).loadForEdit(setId); + TargetCatchService service = getService(TargetCatchService.class); + SetSeine setSeine = service.loadForEdit(setId); copy(SetSeine.class, BinderService.EDIT_TARGET_CATCH, setSeine, getBean()); } -// @Override -// protected Collection<TargetCatch> loadChilds(TopiaContext tx, SetSeine bean) throws TopiaException { -// Collection<TargetCatch> childs = getModel().getChildsUpdator().getChilds(bean); -// Collection<TargetCatch> data = new ArrayList<TargetCatch>(); -// if (CollectionUtils.isNotEmpty(childs)) { -// TopiaDAO<TargetCatch> dao = -// getDataSource().getDAO(tx, getTableEditBean()); -// TopiaEntityBinder<TargetCatch> childLoador = getModel().getChildLoador(); -// -// DecoratorService decoratorService = getDecoratorService(); -// -// for (TargetCatch c : childs) { -// if (c.isDiscarded()) { -// // c'est un rejet, on ne le retient pas dans cette liste -// if (log.isDebugEnabled()) { -// log.debug("targetDiscarded " + c.getSpecies().getLabel2() + -// " non retenu."); -// } -// continue; -// } -// try { -// -// TargetCatch c2 = getModel().newTableEditBean(); -// TargetCatch safeC = dao.findByTopiaId(c.getTopiaId()); -// WeightCategory weightCategory = safeC.getWeightCategory(); -// if (weightCategory != null) { -// Species species = weightCategory.getSpecies(); -// decoratorService.decorate(species); -// } -// childLoador.load(safeC, c2, true); -// data.add(c2); -// } catch (Exception e) { -// throw new RuntimeException(e); -// } -// } -// } -// return data; -// } - @Override - protected boolean prepareSave(SetSeine bean, List<TargetCatch> objets) throws DataSourceException { + protected boolean prepareSave(SetSeine bean, List<TargetCatch> objets) { - // on recupere les speciess acceptables pour des echantillonnages - // i.e une species d'un targetCatch + // on recupere les espèces acceptables pour des echantillonnages + // i.e une espèce d'un targetCatch - Collection<Species> speciessUsed = new HashSet<Species>(); - for (TargetCatch c : objets) { - speciessUsed.add(c.getSpecies()); + Set<String> speciesIdsUsed = new HashSet<String>(); + for (TargetCatch targetCatch : objets) { + speciesIdsUsed.add(targetCatch.getSpecies().getTopiaId()); } - // il faut supprimer les echantillon thons sur des speciess qui ne - // sont plus sur un rejet - - List<TargetLength> tailleToDelete = new ArrayList<TargetLength>(); - Collection<Species> speciessToDelete = new HashSet<Species>(); + // il faut supprimer les echantillon thons sur des espèces qui ne sont plus sur un rejet TargetSampleService service = getService(TargetSampleService.class); - service.getObsoleteEspeceForTargetSample(bean.getTopiaId(), - speciessUsed, - speciessToDelete, - tailleToDelete, - false); + List<TargetLength> targetLengthsToDelete = + service.getObsoleteTargetLengths(bean.getTopiaId(), speciesIdsUsed, false); + + if (!targetLengthsToDelete.isEmpty()) { - if (!tailleToDelete.isEmpty()) { + Set<Species> speciessToDelete = new HashSet<Species>(); + for (TargetLength targetLength : targetLengthsToDelete) { + speciessToDelete.add(targetLength.getSpecies()); + } - // il existe des echantillon thon a supprimer on demande une - // confirmation + // il existe des echantillon thon a supprimer on demande une confirmation StringBuilder sb = new StringBuilder(512); StringBuilder sb2 = new StringBuilder(512); - Decorator<Species> decorator = - getDecoratorService().getDecoratorByType(Species.class); - Decorator<TargetLength> decorator2 = - getDecoratorService().getDecoratorByType(TargetLength.class); + Decorator<Species> speciesDecorator = getDecoratorService().getDecoratorByType(Species.class); + Decorator<TargetLength> targetLengthDecorator = getDecoratorService().getDecoratorByType(TargetLength.class); for (Species e : speciessToDelete) { - sb.append(" - ").append(decorator.toString(e)).append('\n'); + sb.append(" - ").append(speciesDecorator.toString(e)).append('\n'); } - for (TargetLength t : tailleToDelete) { - sb2.append(" - ").append(decorator2.toString(t)).append('\n'); + for (TargetLength t : targetLengthsToDelete) { + sb2.append(" - ").append(targetLengthDecorator.toString(t)).append('\n'); } int reponse = UIHelper.askUser( t("observe.title.need.confirm"), t("observe.targetDiscarded.message.table.will.delete.targetLength", sb.toString(), sb2.toString()), JOptionPane.ERROR_MESSAGE, - new Object[]{ - t("observe.choice.continue"), - t("observe.choice.cancel")}, + new Object[]{t("observe.choice.continue"), t("observe.choice.cancel")}, 0); if (log.isDebugEnabled()) { log.debug("response : " + reponse); @@ -284,77 +267,69 @@ public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Target // l'utilisateur a choisi de ne pas continuer return false; + } // on conserve les tailles a supprimer - ALL_TAILLES_TO_DELETE_ENTRY.setContextValue(getUi(), tailleToDelete); + ALL_TARGET_LENGTH_TO_DELETE_ENTRY.setContextValue(getUi(), targetLengthsToDelete); + } for (TargetCatch targetCatch : objets) { // on attache la set targetCatch.setSetSeine(bean); + } + return true; + } -// @Override -// protected void onUpdateFinalize(TopiaContext tx, SetSeine bean, Collection<TargetCatch> oldChilds) { -// -// if (oldChilds != null && !oldChilds.isEmpty()) { -// -// // on reinjecte les rejet thon precedemment saisie dans la set -// for (TargetCatch targetCatch : oldChilds) { -// if (targetCatch.isDiscarded()) { -// bean.addTargetCatch(targetCatch); -// } -// } -// } -// -// -// List<TargetLength> tailleToDelete = ALL_TAILLES_TO_DELETE_ENTRY.getContextValue(getUi()); -// -// if (tailleToDelete != null && !tailleToDelete.isEmpty()) { -// -// // on a demande la suppression de taille obsoletes -// -// if (log.isInfoEnabled()) { -// log.info("Will remove " + tailleToDelete.size() + -// " obsolete targetLength(s)."); -// } -// -// TargetSample echantillon = bean.getTargetSample(false); -// -// // on supprime les echantillons obsoletes -// echantillon.getTargetLength().removeAll(tailleToDelete); -// } -// } + @Override + protected void doPersist(SetSeine editBean) { + + List<TargetLength> tailleToDelete = ALL_TARGET_LENGTH_TO_DELETE_ENTRY.getContextValue(getUi()); + + try { + + TargetCatchService service = getService(TargetCatchService.class); + service.save(editBean, tailleToDelete); + + } finally { + + // toujours supprimer la référence du context, quoiqu'il arrive + ALL_TARGET_LENGTH_TO_DELETE_ENTRY.removeContextValue(getUi()); + + } + + } @Override protected void onSelectedRowChanged(int editingRow, TargetCatch bean, boolean create) { TargetCatchUI ui = getUi(); - WeightCategory beanWeightCategory = bean.getWeightCategory(); - Species beanEspece = beanWeightCategory == null ? - null : beanWeightCategory.getSpecies(); + WeightCategory weightCategory = bean.getWeightCategory(); + Species species = weightCategory == null ? null : weightCategory.getSpecies(); + + BeanComboBox<Species> speciesComboBox = ui.getSpecies(); + BeanComboBox<WeightCategory> weightCategoryComboBox = ui.getWeightCategory(); JComponent requestFocus; if (create) { - // on reinitilise toujours l'species (pour reinitialiser la liste - // des categories) - ui.getSpecies().setSelectedItem(null); + // on reinitilise toujours l'espèce (pour reinitialiser la liste des categories) + speciesComboBox.setSelectedItem(null); if (!getTableModel().isCreate()) { - // on repositionne l'species (cela reconstruira la liste - // des categories) - ui.getSpecies().setSelectedItem(beanEspece); + // on repositionne l'espèce (cela reconstruira la liste des categories) + speciesComboBox.setSelectedItem(species); // on repositionne la categorie - ui.getWeightCategory().setSelectedItem(beanWeightCategory); + weightCategoryComboBox.setSelectedItem(weightCategory); } - requestFocus = ui.getSpecies(); + requestFocus = speciesComboBox; } else { @@ -362,48 +337,20 @@ public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Target // au singleton de sa valeur correspondante dans le bean // puisque dans ce mode, pas possibilite de modifier de cette // valeur (clef metier) - ui.getSpecies().setSelectedItem(beanEspece); - ui.getWeightCategory().setData( - Arrays.asList(beanWeightCategory)); - ui.getWeightCategory().setSelectedItem(beanWeightCategory); + speciesComboBox.setSelectedItem(species); + weightCategoryComboBox.setData(Collections.singletonList(weightCategory)); + weightCategoryComboBox.setSelectedItem(weightCategory); requestFocus = ui.getCatchWeight(); + } if (log.isDebugEnabled()) { - log.debug("selected categoriePoid " + beanWeightCategory); - log.debug("selected species " + beanEspece); + log.debug("selected categoriePoid " + weightCategory); + log.debug("selected species " + species); } requestFocus.requestFocus(); - } - - @Override - protected void initTableUI(DefaultTableCellRenderer renderer) { - - JTable table = getUi().getTable(); - - UIHelper.fixTableColumnWidth(table, 2, 100); - UIHelper.fixTableColumnWidth(table, 3, 50); - UIHelper.fixTableColumnWidth(table, 4, 50); - UIHelper.setI18nTableHeaderRenderer( - table, - n("observe.targetCatch.table.speciesThon"), - n("observe.targetCatch.table.speciesThon.tip"), - n("observe.targetCatch.table.weightCategory"), - n("observe.targetCatch.table.weightCategory.tip"), - n("observe.targetCatch.table.well"), - n("observe.targetCatch.table.well.tip"), - n("observe.targetCatch.table.weight"), - n("observe.targetCatch.table.weight.tip"), - n("observe.targetCatch.table.comment"), - n("observe.targetCatch.table.comment.tip")); - - UIHelper.setTableColumnRenderer(table, 0, UIHelper.newDecorateTableCellRenderer(renderer, Species.class)); - UIHelper.setTableColumnRenderer(table, 1, UIHelper.newDecorateTableCellRenderer(renderer, WeightCategory.class)); - UIHelper.setTableColumnRenderer(table, 2, renderer); - UIHelper.setTableColumnRenderer(table, 3, UIHelper.newEmptyNumberTableCellRenderer(renderer)); - UIHelper.setTableColumnRenderer(table, 4, UIHelper.newStringTableCellRenderer(renderer, 10, true)); } @SuppressWarnings("unchecked") @@ -418,21 +365,22 @@ public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Target // species puis une categorie availableCategories = Collections.emptyList(); + } else { - // un species est selectionnee, + // une espèce est selectionnee, // on calcule les categories pour cette species availableCategories = getAllCategories(getUi()); - // on ne conserve que les categories de l'species - for (Iterator<WeightCategory> it = availableCategories.iterator(); - it.hasNext(); ) { + // on ne conserve que les categories de l'espèce + for (Iterator<WeightCategory> it = availableCategories.iterator(); it.hasNext(); ) { WeightCategory weighte = it.next(); if (!species.equals(weighte.getSpecies())) { it.remove(); } } + } // on met a jour la liste des categories disponibles @@ -441,6 +389,7 @@ public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeine, Target // on reinitialise toujours la categorie selectionnee combo.setSelectedItem(null); + } protected List<WeightCategory> getAllCategories(JAXXContext context) { diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetDiscardCatchUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetDiscardCatchUIHandler.java index f1ad697..b640cda 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetDiscardCatchUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetDiscardCatchUIHandler.java @@ -24,6 +24,7 @@ package fr.ird.observe.ui.content.table.impl.seine; import fr.ird.observe.BinderService; import fr.ird.observe.ObserveConfig; import fr.ird.observe.db.constants.DataContextType; +import fr.ird.observe.entities.Entities; import fr.ird.observe.entities.referentiel.Ocean; import fr.ird.observe.entities.referentiel.ReferenceEntities; import fr.ird.observe.entities.referentiel.Species; @@ -34,7 +35,8 @@ import fr.ird.observe.entities.seine.SetSeine; import fr.ird.observe.entities.seine.TargetCatch; import fr.ird.observe.entities.seine.TargetLength; import fr.ird.observe.services.data.TripService; -import fr.ird.observe.services.data.seine.NonTargetCatchService; +import fr.ird.observe.services.data.seine.TargetCatchService; +import fr.ird.observe.services.data.seine.TargetSampleService; import fr.ird.observe.services.referential.ReferentialService; import fr.ird.observe.ui.UIHelper; import fr.ird.observe.ui.content.ContentMode; @@ -45,21 +47,24 @@ import jaxx.runtime.context.JAXXContextEntryDef; import jaxx.runtime.swing.editor.bean.BeanComboBox; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.decorator.Decorator; import javax.swing.JComponent; +import javax.swing.JOptionPane; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; /** * @author Tony Chemit - chemit@codelutin.com @@ -68,47 +73,30 @@ import static org.nuiton.i18n.I18n.n; public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeine, TargetCatch> { /** Logger */ - static private Log log = LogFactory.getLog(TargetDiscardCatchUIHandler.class); + private static final Log log = LogFactory.getLog(TargetDiscardCatchUIHandler.class); + /** + * L'entrée dans le contexte pour récupérer la liste complète des catégories. + */ JAXXContextEntryDef<List<WeightCategory>> ALL_CATEGORIES_ENTRY = UIHelper.newListContextEntryDef("RejetThonUI-all-categories"); + /** + * L'entrée dans le contexte pour récupérer la liste complète des raisons de rejet. + */ JAXXContextEntryDef<List<ReasonForDiscard>> ALL_RAISONS_REJET_ENTRY = UIHelper.newListContextEntryDef("RejetThonUI-all-reasonForDiscards"); - JAXXContextEntryDef<List<TargetLength>> ALL_TAILLES_TO_DELETE_ENTRY = + /** + * L'entrée dans le contexte pour conserver les mensurations obsolètes à supprimer lors de la sauvegarde. + */ + JAXXContextEntryDef<List<TargetLength>> ALL_TARGET_LENGTH_TO_DELETE_ENTRY = UIHelper.newListContextEntryDef("RejetThonUI-all-taille-to-delete"); public TargetDiscardCatchUIHandler(TargetDiscardCatchUI ui) { super(ui, DataContextType.SetSeine); } - protected static Collection<WeightCategory> getWeightCategoryUsed( - ContentTableModel<SetSeine, TargetCatch> model) { - List<WeightCategory> list = model.getColumnValues(1); - Collection<WeightCategory> set = new HashSet<WeightCategory>(list); - list.clear(); - return set; - } - - protected static Collection<ReasonForDiscard> getReasonForDiscardUsed( - ContentTableModel<SetSeine, TargetCatch> model, - WeightCategory weightCategory) { - - Collection<ReasonForDiscard> set = new HashSet<ReasonForDiscard>(); - if (weightCategory != null) { - for (int i = 0; i < model.getRowCount(); i++) { - TargetCatch c = model.getValueAt(i); - if (c != null && - weightCategory.equals(c.getWeightCategory()) && - c.getReasonForDiscard() != null) { - set.add(c.getReasonForDiscard()); - } - } - } - return set; - } - @Override public TargetDiscardCatchUI getUi() { return (TargetDiscardCatchUI) super.getUi(); @@ -119,29 +107,26 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeine, super.initUI(); - TargetDiscardCatchUI ui = getUi(); - - // lors de la modification d'une species (sur une entree non sauvee) - // - on recalcule la liste des categories pour cette species. + // lors de la modification d'une espèce (sur une entree non sauvee) + // - on recalcule la liste des categories pour cette espèce. // - on reinitialiser la categorie selectionnee - ui.getSpecies().addPropertyChangeListener( + getUi().getSpecies().addPropertyChangeListener( BeanComboBox.PROPERTY_SELECTED_ITEM, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { - ContentTableModel<SetSeine, TargetCatch> model = - getTableModel(); + ContentTableModel<SetSeine, TargetCatch> model = getTableModel(); TargetCatch bean = model.getRowBean(); - if (bean.getTopiaId() == null) { - // en mode creation , on doit recalculer la liste - // des categories + if (Entities.isNew(bean)) { + // en mode creation , on doit recalculer la liste des categories Species species = (Species) evt.getNewValue(); onEspeceChanged(bean, species); + } } } @@ -151,22 +136,22 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeine, // - on recalcule la liste des raison rejets. // - on reinitialiser la raison rejet selectionnee - ui.getWeightCategory().addPropertyChangeListener( + getUi().getWeightCategory().addPropertyChangeListener( BeanComboBox.PROPERTY_SELECTED_ITEM, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { - ContentTableModel<SetSeine, TargetCatch> model = - getTableModel(); + ContentTableModel<SetSeine, TargetCatch> model = getTableModel(); TargetCatch bean = model.getRowBean(); - if (bean.getTopiaId() == null) { - // en mode creation , on doit recalculer la liste - // des raison rejet - WeightCategory weightCategory = - (WeightCategory) evt.getNewValue(); + + if (Entities.isNew(bean)) { + + // en mode creation , on doit recalculer la liste des raison rejet + WeightCategory weightCategory = (WeightCategory) evt.getNewValue(); onCategorieChanged(bean, weightCategory); + } } @@ -176,12 +161,44 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeine, } @Override + protected void initTableUI(DefaultTableCellRenderer renderer) { + + JTable table = getUi().getTable(); + UIHelper.fixTableColumnWidth(table, 3, 75); + UIHelper.fixTableColumnWidth(table, 4, 20); + UIHelper.fixTableColumnWidth(table, 5, 50); + + UIHelper.setI18nTableHeaderRenderer( + table, + n("observe.targetDiscarded.table.speciesThon"), + n("observe.targetDiscarded.table.speciesThon.tip"), + n("observe.targetDiscarded.table.weightCategory"), + n("observe.targetDiscarded.table.weightCategory.tip"), + n("observe.targetDiscarded.table.reasonForDiscard"), + n("observe.targetDiscarded.table.reasonForDiscard.tip"), + n("observe.targetDiscarded.table.weight"), + n("observe.targetDiscarded.table.weight.tip"), + n("observe.targetDiscarded.table.broughtOnDeck"), + n("observe.targetDiscarded.table.broughtOnDeck.tip"), + n("observe.targetDiscarded.table.comment"), + n("observe.targetDiscarded.table.comment.tip")); + + UIHelper.setTableColumnRenderer(table, 0, UIHelper.newDecorateTableCellRenderer(renderer, Species.class)); + UIHelper.setTableColumnRenderer(table, 1, UIHelper.newDecorateTableCellRenderer(renderer, WeightCategory.class)); + UIHelper.setTableColumnRenderer(table, 2, UIHelper.newDecorateTableCellRenderer(renderer, ReasonForDiscard.class)); + UIHelper.setTableColumnRenderer(table, 3, UIHelper.newEmptyNumberTableCellRenderer(renderer)); + UIHelper.setTableColumnRenderer(table, 4, UIHelper.newStringTableCellRenderer(renderer, 20, false)); + UIHelper.setTableColumnRenderer(table, 5, UIHelper.newStringTableCellRenderer(renderer, 10, true)); + + } + + @Override protected void loadEditBean(ContentMode mode) { List<WeightCategory> categorieList; List<ReasonForDiscard> reasonForDiscardList; - if (mode == ContentMode.UPDATE) { + if (ContentMode.UPDATE == mode) { // on charge le formulaire uniquement si en mode édition @@ -192,7 +209,7 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeine, // filtre sur la liste d'espèce configuree ObserveConfig config = getUi().getContextValue(ObserveConfig.class); String speciesListId = config.getSpeciesListSeineTargetCatchId(); - java.util.Set<String> speciesIds = loadSpeciesList(speciesListId, n("observe.error.speciesList.seine.targetCatch.notFound")); + Set<String> speciesIds = loadSpeciesList(speciesListId, n("observe.error.speciesList.seine.targetCatch.notFound")); categorieList = Species2.filterWeightCategoryBySpeciesIds(categorieList, speciesIds); @@ -214,203 +231,128 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeine, categorieList = new ArrayList<WeightCategory>(); reasonForDiscardList = new ArrayList<ReasonForDiscard>(); - } - TargetDiscardCatchUI ui = getUi(); + } ALL_CATEGORIES_ENTRY.setContextValue(ui, categorieList); ALL_RAISONS_REJET_ENTRY.setContextValue(ui, reasonForDiscardList); String setId = getDataContext().getSelectedSetId(); - SetSeine setSeine = getService(NonTargetCatchService.class).loadForEdit(setId); + TargetCatchService service = getService(TargetCatchService.class); + SetSeine setSeine = service.loadForEditDiscarded(setId); copy(SetSeine.class, BinderService.EDIT_DISCARD_TARGET_CATCH, setSeine, getBean()); } -// @Override -// protected String getEditBeanIdToLoad(DataContext dataContext, DataService dataService, DataSource dataSource) { -// return dataContext.getSelectedSetId(); -// } - -// @Override -// protected Collection<TargetCatch> loadChilds(TopiaContext tx, SetSeine bean) throws TopiaException { -// Collection<TargetCatch> childs = getModel().getChildsUpdator().getChilds(bean); -// Collection<TargetCatch> data = new ArrayList<TargetCatch>(); -// if (CollectionUtils.isNotEmpty(childs)) { -// TopiaDAO<TargetCatch> dao = -// getDataSource().getDAO(tx, getTableEditBean()); -// TopiaEntityBinder<TargetCatch> childLoador = getModel().getChildLoador(); -// DecoratorService decoratorService = getDecoratorService(); -// for (TargetCatch c : childs) { -// if (!c.isDiscarded()) { -// // ce n'est pas un rejet, on ne le retient pas dans cette -// // liste -// if (log.isDebugEnabled()) { -// log.debug("targetCatch " + c.getSpecies().getLabel2() + " non retenu."); -// } -// continue; -// } -// try { -// TargetCatch c2 = getModel().newTableEditBean(); -// TargetCatch safeC = dao.findByTopiaId(c.getTopiaId()); -// WeightCategory weightCategory = safeC.getWeightCategory(); -// if (weightCategory != null) { -// Species species = weightCategory.getSpecies(); -// decoratorService.decorate(species); -// } -// childLoador.load(safeC, c2, true); -// data.add(c2); -// } catch (Exception e) { -// throw new RuntimeException(e); -// } -// } -// } -// return data; -// } - -// @Override -// protected boolean doSave(SetSeine bean, -// DataService dataService, -// DataSource dataSource, -// TopiaEntityBinder<SetSeine> binder) throws Exception { -// try { -// return super.doSave(bean, dataService, dataSource, binder); -// } finally { -// -// // toujours supprimer la référence du context, quoiqu'il arrive -// ALL_TAILLES_TO_DELETE_ENTRY.removeContextValue(getUi()); -// } -// } - -// @Override -// protected boolean prepareSave(SetSeine bean, List<TargetCatch> objets) throws DataSourceException { -// -// // on recupere les speciess acceptables pour des echantillonnages -// // i.e une species d'un targetDiscarded montee sur le pont -// -// java.util.Set<Species> speciessUsed = new HashSet<Species>(); -// for (TargetCatch c : objets) { -// if (c.getBroughtOnDeck() != null && c.getBroughtOnDeck()) { -// speciessUsed.add(c.getSpecies()); -// } -// } -// -// // il faut supprimer les echantillon thons sur des speciess qui ne -// // sont plus sur un rejet -// -// List<TargetLength> tailleToDelete = new ArrayList<TargetLength>(); -// java.util.Set<Species> speciessToDelete = new HashSet<Species>(); -// -// TargetSampleService service = getService(TargetSampleService.class); -// service.getObsoleteEspeceForTargetSample(bean.getTopiaId(), -// speciessUsed, -// speciessToDelete, -// tailleToDelete, -// true); -// -// if (!tailleToDelete.isEmpty()) { -// -// // il existe des echantillon thon a supprimer on demande une -// // confirmation -// StringBuilder sb = new StringBuilder(512); -// StringBuilder sb2 = new StringBuilder(512); -// Decorator<Species> decorator = -// getDecoratorService().getDecoratorByType(Species.class); -// Decorator<TargetLength> decorator2 = -// getDecoratorService().getDecoratorByType(TargetLength.class); -// -// for (Species e : speciessToDelete) { -// sb.append(" - ").append(decorator.toString(e)).append('\n'); -// } -// for (TargetLength t : tailleToDelete) { -// sb2.append(" - ").append(decorator2.toString(t)).append('\n'); -// } -// int reponse = UIHelper.askUser( -// t("observe.title.need.confirm"), -// t("observe.targetDiscarded.message.table.will.delete.targetLength", sb.toString(), sb2.toString()), -// JOptionPane.ERROR_MESSAGE, -// new Object[]{ -// t("observe.choice.continue"), -// t("observe.choice.cancel")}, -// 0); -// if (log.isDebugEnabled()) { -// log.debug("response : " + reponse); -// } -// boolean canContinue = false; -// switch (reponse) { -// case 0: -// // wil reset ui -// canContinue = true; -// break; -// } -// -// if (!canContinue) { -// -// // l'utilisateur a choisi de ne pas continuer -// return false; -// } -// -// // on conserve les tailles a supprimer -// ALL_TAILLES_TO_DELETE_ENTRY.setContextValue(getUi(), tailleToDelete); -// } -// -// // mise a jour de la propriete targetDiscarded -// bean.setTargetDiscarded(!objets.isEmpty()); -// -// for (TargetCatch discarded : objets) { -// -// // FIXME : on devrait pas a avoir a repositionner la propriete discarded -// discarded.setDiscarded(true); -// -// // on attache la set -// discarded.setSetSeine(bean); -// } -// -// return true; -// } - -// @Override -// protected void onUpdateFinalize(TopiaContext tx, SetSeine bean, Collection<TargetCatch> oldChilds) { -// -// if (oldChilds != null && !oldChilds.isEmpty()) { -// -// // on reinjecte les discarded thon precedemment saisies dans la set -// // et qui ne sont pas des rejets -// -// for (TargetCatch targetCatch : oldChilds) { -// if (!targetCatch.isDiscarded()) { -// bean.addTargetCatch(targetCatch); -// } -// } -// } -// -// List<TargetLength> tailleToDelete = ALL_TAILLES_TO_DELETE_ENTRY.getContextValue(getUi()); -// -// if (tailleToDelete != null && !tailleToDelete.isEmpty()) { -// -// // on a demande la suppression de taille obsoletes -// -// if (log.isInfoEnabled()) { -// log.info("Will remove " + tailleToDelete.size() + -// " obsolete targetLength(s)."); -// } -// -// TargetSample echantillon = bean.getTargetSample(true); -// -// // on supprime les echantillons obsoletes -// echantillon.getTargetLength().removeAll(tailleToDelete); -// } -// } + @Override + protected boolean prepareSave(SetSeine editBean, List<TargetCatch> objets) { + + // on recupere les espèces acceptables pour des echantillonnages + // i.e une espèces d'un targetDiscarded montee sur le pont + + Set<String> speciesIdsUsed = new HashSet<String>(); + for (TargetCatch targetCatch : objets) { + speciesIdsUsed.add(targetCatch.getSpecies().getTopiaId()); + } + + // il faut supprimer les echantillon thons sur des espèces qui ne sont plus sur un rejet + + TargetSampleService service = getService(TargetSampleService.class); + List<TargetLength> targetLengthsToDelete = service.getObsoleteTargetLengths(editBean.getTopiaId(), speciesIdsUsed, true); + + if (!targetLengthsToDelete.isEmpty()) { + + // il existe des echantillon thon a supprimer on demande une confirmation + + Set<Species> speciessToDelete = new HashSet<Species>(); + for (TargetLength targetLength : targetLengthsToDelete) { + speciessToDelete.add(targetLength.getSpecies()); + } + + StringBuilder sb = new StringBuilder(512); + StringBuilder sb2 = new StringBuilder(512); + Decorator<Species> speciesDecorator = getDecoratorService().getDecoratorByType(Species.class); + Decorator<TargetLength> targetLengthDecorator = getDecoratorService().getDecoratorByType(TargetLength.class); + + for (Species e : speciessToDelete) { + sb.append(" - ").append(speciesDecorator.toString(e)).append('\n'); + } + for (TargetLength t : targetLengthsToDelete) { + sb2.append(" - ").append(targetLengthDecorator.toString(t)).append('\n'); + } + int reponse = UIHelper.askUser( + t("observe.title.need.confirm"), + t("observe.targetDiscarded.message.table.will.delete.targetLength", sb.toString(), sb2.toString()), + JOptionPane.ERROR_MESSAGE, + new Object[]{t("observe.choice.continue"), t("observe.choice.cancel")}, + 0); + if (log.isDebugEnabled()) { + log.debug("response : " + reponse); + } + boolean canContinue = false; + switch (reponse) { + case 0: + // wil reset ui + canContinue = true; + break; + } + + if (!canContinue) { + + // l'utilisateur a choisi de ne pas continuer + return false; + + } + + // on conserve les tailles a supprimer + ALL_TARGET_LENGTH_TO_DELETE_ENTRY.setContextValue(getUi(), targetLengthsToDelete); + + } + + // mise a jour de la propriete targetDiscarded + editBean.setTargetDiscarded(!objets.isEmpty()); + + for (TargetCatch targetCatch : objets) { + + // FIXME : on devrait pas a avoir a repositionner la propriete discarded + targetCatch.setDiscarded(true); + + // on attache la set + targetCatch.setSetSeine(editBean); + + } + + return true; + + } + + @Override + protected void doPersist(SetSeine editBean) { + + List<TargetLength> targetLengthsToDelete = ALL_TARGET_LENGTH_TO_DELETE_ENTRY.getContextValue(ui); + + try { + + TargetCatchService service = getService(TargetCatchService.class); + service.saveForDiscarded(editBean, targetLengthsToDelete); + + } finally { + + ALL_TARGET_LENGTH_TO_DELETE_ENTRY.removeContextValue(ui); + + } + + } @Override protected void onSelectedRowChanged(int editingRow, TargetCatch bean, boolean create) { + TargetDiscardCatchUI ui = getUi(); WeightCategory beanWeightCategory = bean.getWeightCategory(); - Species beanEspece = beanWeightCategory == null ? null : - beanWeightCategory.getSpecies(); + Species beanEspece = beanWeightCategory == null ? null : beanWeightCategory.getSpecies(); ReasonForDiscard beanReasonForDiscard = bean.getReasonForDiscard(); if (log.isDebugEnabled()) { log.debug("selected categoriePoid " + beanWeightCategory); @@ -418,8 +360,11 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeine, log.debug("selected reasonForDiscard " + beanReasonForDiscard); } + BeanComboBox<Species> speciesComboBox = ui.getSpecies(); + JComponent requestFocus; if (create) { + ContentTableModel<SetSeine, TargetCatch> model = getTableModel(); if (model.isCreate()) { // par défaut, on considère que l'espèce a été monté sur le pont @@ -428,71 +373,42 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeine, } // on recalcule la liste des speciess disponibles - List<Species> availableEspeces = buildEspeceList( - beanEspece, beanWeightCategory); - ui.getSpecies().setData(availableEspeces); + List<Species> availableEspeces = buildEspeceList(beanEspece, beanWeightCategory); + speciesComboBox.setData(availableEspeces); - // on reinitilise toujours l'species (pour reinitialiser la liste - // des categories) - ui.getSpecies().setSelectedItem(null); + // on reinitilise toujours la liste des espèces (pour reinitialiser la liste des categories) + speciesComboBox.setSelectedItem(null); if (!model.isCreate()) { // on repositionne l'species (cela reconstruira la liste // des categories) - ui.getSpecies().setSelectedItem(beanEspece); + speciesComboBox.setSelectedItem(beanEspece); // on repositionne la categorie ui.getWeightCategory().setSelectedItem(beanWeightCategory); ui.getReasonForDiscard().setSelectedItem(beanReasonForDiscard); } - requestFocus = ui.getSpecies(); + requestFocus = speciesComboBox; + } else { + // en mode mise a jour, on restreint la liste des categories // au singleton de sa valeur correspondante dans le bean // puisque dans ce mode, pas possibilite de modifier de cette // valeur (clef metier) - ui.getSpecies().setSelectedItem(beanEspece); - ui.getWeightCategory().setData(Arrays.asList(beanWeightCategory)); + speciesComboBox.setSelectedItem(beanEspece); + ui.getWeightCategory().setData(Collections.singletonList(beanWeightCategory)); ui.getWeightCategory().setSelectedItem(beanWeightCategory); - ui.getReasonForDiscard().setData(Arrays.asList(beanReasonForDiscard)); + ui.getReasonForDiscard().setData(Collections.singletonList(beanReasonForDiscard)); ui.getReasonForDiscard().setSelectedItem(beanReasonForDiscard); requestFocus = ui.getCatchWeight(); + } requestFocus.requestFocus(); } - @Override - protected void initTableUI(DefaultTableCellRenderer renderer) { - JTable table = getUi().getTable(); - UIHelper.fixTableColumnWidth(table, 3, 75); - UIHelper.fixTableColumnWidth(table, 4, 20); - UIHelper.fixTableColumnWidth(table, 5, 50); - - UIHelper.setI18nTableHeaderRenderer( - table, - n("observe.targetDiscarded.table.speciesThon"), - n("observe.targetDiscarded.table.speciesThon.tip"), - n("observe.targetDiscarded.table.weightCategory"), - n("observe.targetDiscarded.table.weightCategory.tip"), - n("observe.targetDiscarded.table.reasonForDiscard"), - n("observe.targetDiscarded.table.reasonForDiscard.tip"), - n("observe.targetDiscarded.table.weight"), - n("observe.targetDiscarded.table.weight.tip"), - n("observe.targetDiscarded.table.broughtOnDeck"), - n("observe.targetDiscarded.table.broughtOnDeck.tip"), - n("observe.targetDiscarded.table.comment"), - n("observe.targetDiscarded.table.comment.tip")); - - UIHelper.setTableColumnRenderer(table, 0, UIHelper.newDecorateTableCellRenderer(renderer, Species.class)); - UIHelper.setTableColumnRenderer(table, 1, UIHelper.newDecorateTableCellRenderer(renderer, WeightCategory.class)); - UIHelper.setTableColumnRenderer(table, 2, UIHelper.newDecorateTableCellRenderer(renderer, ReasonForDiscard.class)); - UIHelper.setTableColumnRenderer(table, 3, UIHelper.newEmptyNumberTableCellRenderer(renderer)); - UIHelper.setTableColumnRenderer(table, 4, UIHelper.newStringTableCellRenderer(renderer, 20, false)); - UIHelper.setTableColumnRenderer(table, 5, UIHelper.newStringTableCellRenderer(renderer, 10, true)); - } - protected void onEspeceChanged(TargetCatch bean, Species species) { WeightCategory weightCategory = null; @@ -511,15 +427,13 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeine, // un species est selectionne, on met a jour la liste des categories // disponibles pour cet species - List<WeightCategory> availableCategories = buildWeightCategoryList( - species); + List<WeightCategory> availableCategories = buildWeightCategoryList(species); data = availableCategories; weightCategory = bean.getWeightCategory(); - if (weightCategory != null && - !availableCategories.contains(weightCategory)) { + if (weightCategory != null && !availableCategories.contains(weightCategory)) { weightCategory = null; } } @@ -530,9 +444,11 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeine, // on selectionne la categorie retenue combo.setSelectedItem(weightCategory); + } protected void onCategorieChanged(TargetCatch bean, WeightCategory weightCategory) { + TargetDiscardCatchUI ui = getUi(); ReasonForDiscard reasonForDiscard = null; @@ -574,6 +490,7 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeine, // on selectionne la raison rejet retenue combo.setSelectedItem(reasonForDiscard); + } protected List<Species> buildEspeceList(Species species, WeightCategory weightCategory) { @@ -594,7 +511,9 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeine, List<Species> result = new ArrayList<Species>(usedEspeces); weightCategoryList.clear(); usedEspeces.clear(); + return result; + } protected List<WeightCategory> buildWeightCategoryList(Species species) { @@ -615,9 +534,9 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeine, removeFullyUsedCategories(weightCategoryList); return weightCategoryList; + } - @SuppressWarnings("unchecked") protected List<ReasonForDiscard> buildReasonFordiscardList(WeightCategory weightCategory) { ContentTableModel<SetSeine, TargetCatch> model = getTableModel(); @@ -634,6 +553,7 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeine, } return reasonForDiscardList; + } protected List<WeightCategory> getAllCategories(JAXXContext context) { @@ -642,22 +562,46 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeine, return list; } - protected void removeFullyUsedCategories( - List<WeightCategory> weightCategoryAvaillable) { - - ContentTableModel<SetSeine, TargetCatch> model = getTableModel(); + protected void removeFullyUsedCategories(List<WeightCategory> weightCategoryAvaillable) { - int nbReasonForDiscard = - ALL_RAISONS_REJET_ENTRY.getContextValue(getUi()).size(); + int nbReasonForDiscard = ALL_RAISONS_REJET_ENTRY.getContextValue(getUi()).size(); - // on filtre toutes les weightCategory qui ont deja references toutes - // les raisons rejets - for (WeightCategory c : getWeightCategoryUsed(model)) { - Collection<ReasonForDiscard> raisonUsed = getReasonForDiscardUsed(model, c); + // on filtre toutes les weightCategory qui ont deja references toutes les raisons rejets + for (WeightCategory c : getWeightCategoryUsed()) { + Collection<ReasonForDiscard> raisonUsed = getReasonForDiscardUsed(c); if (raisonUsed.size() == nbReasonForDiscard) { // toutes les raison de rejet epuisé pour cette categorie weightCategoryAvaillable.remove(c); } } + + } + + protected Collection<WeightCategory> getWeightCategoryUsed() { + + ContentTableModel<SetSeine, TargetCatch> model = getTableModel(); + + List<WeightCategory> list = model.getColumnValues(1); + Collection<WeightCategory> set = new HashSet<WeightCategory>(list); + list.clear(); + return set; + + } + + protected Collection<ReasonForDiscard> getReasonForDiscardUsed(WeightCategory weightCategory) { + + ContentTableModel<SetSeine, TargetCatch> model = getTableModel(); + + Collection<ReasonForDiscard> set = new HashSet<ReasonForDiscard>(); + if (weightCategory != null) { + for (int i = 0; i < model.getRowCount(); i++) { + TargetCatch c = model.getValueAt(i); + if (c != null && weightCategory.equals(c.getWeightCategory()) && c.getReasonForDiscard() != null) { + set.add(c.getReasonForDiscard()); + } + } + } + return set; + } } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetSampleUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetSampleUIHandler.java index bcfc0d7..5a90ee1 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetSampleUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetSampleUIHandler.java @@ -148,7 +148,7 @@ public class TargetSampleUIHandler extends ContentTableUIHandler<TargetSample, T String setId = getDataContext().getSelectedSetId(); // on ne charge les speciess uniquement si on est en mode édition - List<Species> speciesList = getService(TargetSampleService.class).getAvailableEspeceForTargetSample(setId, discarded); + List<Species> speciesList = getService(TargetSampleService.class).getAvailableSpeciesForTargetSample(setId, discarded); getUi().getSpecies().setData(speciesList); } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/tree/SetLonglineNode.java b/observe-swing/src/main/java/fr/ird/observe/ui/tree/SetLonglineNode.java index 4b0fb0c..570f852 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/tree/SetLonglineNode.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/tree/SetLonglineNode.java @@ -44,7 +44,7 @@ public class SetLonglineNode extends EntityNodeSupport<SetLongline> { @Override protected SetLongline getEntity(ObserveServiceFactory services) { SetLonglineService service = services.getService(SetLonglineService.class); - return service.loadSet(id); + return service.loadForDisplay(id); } } diff --git a/observe-validation/src/main/java/fr/ird/observe/validation/field/VesselActivityFieldValidator.java b/observe-validation/src/main/java/fr/ird/observe/validation/field/VesselActivityFieldValidator.java index 191eab6..0710dd2 100644 --- a/observe-validation/src/main/java/fr/ird/observe/validation/field/VesselActivityFieldValidator.java +++ b/observe-validation/src/main/java/fr/ird/observe/validation/field/VesselActivityFieldValidator.java @@ -25,15 +25,15 @@ package fr.ird.observe.validation.field; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.validator.ValidationException; import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; +import fr.ird.observe.entities.referentiel.seine.VesselActivitySeine; import fr.ird.observe.entities.seine.ActivitySeine; import fr.ird.observe.entities.seine.ActivitySeineImpl; -import fr.ird.observe.entities.seine.TripSeine; import fr.ird.observe.entities.seine.Route; -import fr.ird.observe.entities.referentiel.seine.VesselActivitySeine; +import fr.ird.observe.entities.seine.Routes; +import fr.ird.observe.entities.seine.TripSeine; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import java.util.ArrayList; import java.util.List; /** @@ -144,29 +144,28 @@ public class VesselActivityFieldValidator extends FieldValidatorSupport { log.debug("route : " + route); } - String activityCode = activitySeine.getVesselActivitySeine().getCode(); + String vesselActivityId = activitySeine.getVesselActivitySeine().getTopiaId(); int nbActivitys = route.sizeActivitySeine(); - if (code.equals("-16") && !activityCode.equals(ActivitySeineImpl.ACTIVITY_FIN_DE_VEILLE)) { + if (code.equals("-16") && !activitySeine.isActivityFinDeVeille()) { valid = validate_16(activitySeine, maree, route, nbActivitys, false); } switch (Integer.valueOf(code)) { case 6: - if (activityCode.equals(ActivitySeineImpl.ACTIVITY_DEBUT_DE_PECHE)) { + if (vesselActivityId.equals(ActivitySeineImpl.ACTIVITY_DEBUT_DE_PECHE_ID)) { valid = validate_6(activitySeine, maree, route, nbActivitys); } break; case 7: - if (activityCode.equals(ActivitySeineImpl.ACTIVITY_FIN_DE_PECHE)) { + if (vesselActivityId.equals(ActivitySeineImpl.ACTIVITY_FIN_DE_PECHE_ID)) { valid = validate_7(activitySeine, maree, route, nbActivitys); } break; case 16: - if (activityCode.equals(ActivitySeineImpl.ACTIVITY_FIN_DE_VEILLE)) { - valid = validate_16(activitySeine, maree, route, - nbActivitys, true); + if (activitySeine.isActivityFinDeVeille()) { + valid = validate_16(activitySeine, maree, route, nbActivitys, true); } break; } @@ -223,8 +222,8 @@ public class VesselActivityFieldValidator extends FieldValidatorSupport { //FIXME: sinon on verifier que l'activity qu'on veut créer n'est pas //FIXME: dans un intervalle (debut-fin) List<ActivitySeine> activitySeines = route.getActivitySeine(); - Integer[] detectDebutSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_DEBUT_DE_PECHE); - Integer[] detectFinSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_FIN_DE_PECHE); + Integer[] detectDebutSet = Routes.detectActivities(route, ActivitySeineImpl.ACTIVITY_DEBUT_DE_PECHE_ID); + Integer[] detectFinSet = Routes.detectActivities(route, ActivitySeineImpl.ACTIVITY_FIN_DE_PECHE_ID); int nbDebutReal = 0; int lastDebutReal = 0; for (Integer i : detectDebutSet) { @@ -273,8 +272,8 @@ public class VesselActivityFieldValidator extends FieldValidatorSupport { return false; } List<ActivitySeine> activitySeines = route.getActivitySeine(); - Integer[] detectDebutSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_DEBUT_DE_PECHE); - Integer[] detectFinSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_FIN_DE_PECHE); + Integer[] detectDebutSet = Routes.detectActivities(route, ActivitySeineImpl.ACTIVITY_DEBUT_DE_PECHE_ID); + Integer[] detectFinSet = Routes.detectActivities(route, ActivitySeineImpl.ACTIVITY_FIN_DE_PECHE_ID); Integer lastFinSet = null; if (detectFinSet.length > 0) { lastFinSet = detectFinSet[detectFinSet.length - 1]; @@ -359,7 +358,7 @@ public class VesselActivityFieldValidator extends FieldValidatorSupport { // on est sur une activity de fin de veille List<ActivitySeine> activitySeines = route.getActivitySeine(); // une seule activity de fin de veille par route - Integer[] detectActivity = detectActivity(route, ActivitySeineImpl.ACTIVITY_FIN_DE_VEILLE); + Integer[] detectActivity = Routes.detectActivities(route, ActivitySeineImpl.ACTIVITY_FIN_DE_VEILLE_ID); if (activitySeine.getTopiaId() == null && detectActivity.length > 0) { log.info("il existe deja une activity de fin de veille!"); @@ -380,8 +379,8 @@ public class VesselActivityFieldValidator extends FieldValidatorSupport { // } // il ne peut pas rester une activity de debut de peche sans fin // de set (sauf si non coup de senne ?) - Integer[] detectDebutSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_DEBUT_DE_PECHE); - Integer[] detectFinSet = detectActivity(route, ActivitySeineImpl.ACTIVITY_FIN_DE_PECHE); + Integer[] detectDebutSet = Routes.detectActivities(route, ActivitySeineImpl.ACTIVITY_DEBUT_DE_PECHE_ID); + Integer[] detectFinSet = Routes.detectActivities(route, ActivitySeineImpl.ACTIVITY_FIN_DE_PECHE_ID); int nbDebutReal = 0; for (Integer i : detectDebutSet) { ActivitySeine bActivitySeine = activitySeines.get(i); @@ -423,23 +422,4 @@ public class VesselActivityFieldValidator extends FieldValidatorSupport { return true; } - /** - * Recupere les positions des activitys d'un certain type - * - * @param route la route à inspecter - * @param code le code du type d'activité à rechercher - * @return les positions des activitys d'un certain type donné - */ - protected Integer[] detectActivity(Route route, String code) { - List<Integer> list = new ArrayList<Integer>(); - int index = 0; - for (ActivitySeine a : route.getActivitySeine()) { - String c = a.getVesselActivitySeine().getCode(); - if (code.equals(c)) { - list.add(index); - } - index++; - } - return list.toArray(new Integer[list.size()]); - } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.