This is an automated email from the git hooks/post-receive script. New commit to branch feature/reecriture_editeur_de_zones in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 3a436f896fd09e401bae3023c8b3c708098b4bda Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Mar 22 15:48:31 2016 +0100 Revue de la définition des zones au niveau du cache des échantillons --- .../service/samplingCache/CruiseSamplingCache.java | 63 ++++++++++++---------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/samplingCache/CruiseSamplingCache.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/samplingCache/CruiseSamplingCache.java index 0d67031..fc96eab 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/samplingCache/CruiseSamplingCache.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/samplingCache/CruiseSamplingCache.java @@ -28,9 +28,9 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinition; -import fr.ifremer.tutti.persistence.entities.protocol.SubStrata; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.Zone; +import fr.ifremer.tutti.persistence.entities.protocol.Zones; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; @@ -40,15 +40,12 @@ import org.apache.commons.logging.LogFactory; import javax.swing.event.EventListenerList; import java.io.Closeable; import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; import java.util.Objects; import java.util.Optional; -import java.util.stream.Collectors; /** * @author Kevin Morin (Code Lutin) + * @author Tony Chemit - chemit@codelutin.com * @since 4.5 */ public class CruiseSamplingCache implements Closeable { @@ -56,33 +53,35 @@ public class CruiseSamplingCache implements Closeable { /** Logger. */ private static final Log log = LogFactory.getLog(CruiseSamplingCache.class); + /** + * Contient les hits pour toute la campagne. + */ protected final CruiseSamplingInternalCache totalCruiseCache = new CruiseSamplingInternalCache(); + /** + * Contient les hits par zone. + */ protected final CruiseSamplingInternalCache zoneCache = new CruiseSamplingInternalCache(); + /** + * Contient les hits par trait. + */ protected final CruiseSamplingInternalCache operationCache = new CruiseSamplingInternalCache(); - - protected final Map<TuttiLocation, Zone> zonesByLocations = new HashMap<>(); + /** + * Cache pour chaque zone des identifiants de strate / sous-strate qu'elle contient. + */ + protected final Multimap<Zone, Integer> locationIdsPerZone; + /** + * Cache pour chaque espèce définie dans le procotol des définitions de l'algorithme de prélèvement. + */ protected final Multimap<Integer, CalcifiedPiecesSamplingDefinition> cpsDefinitionsBySpecies = HashMultimap.create(); - + /** + * Pour conserver les listeners attachés au cache. + */ protected final EventListenerList listeners = new EventListenerList(); public CruiseSamplingCache(TuttiProtocol protocol) { - // fill the zones by location - protocol.getZone().forEach(zone -> { - Map<TuttiLocation, Zone> zoneByLocations = zone.getStrata().stream() - .map(strata -> { - if (strata.isSubstrataEmpty()) { - return Collections.singleton(strata.getLocation()); - } - return strata.getSubstrata().stream() - .map(SubStrata::getLocation) - .collect(Collectors.toSet()); - }) - .flatMap(Collection::stream) - .collect(Collectors.toMap(location -> location, location -> zone)); - - zonesByLocations.putAll(zoneByLocations); - }); + locationIdsPerZone = HashMultimap.create(); + protocol.getZone().forEach(zone -> locationIdsPerZone.putAll(zone, Zones.getAllLocationIds(zone))); protocol.getSpecies().forEach(speciesProtocol -> cpsDefinitionsBySpecies.putAll(speciesProtocol.getSpeciesReferenceTaxonId(), @@ -97,7 +96,7 @@ public class CruiseSamplingCache implements Closeable { totalCruiseCache.close(); zoneCache.close(); operationCache.close(); - zonesByLocations.clear(); + locationIdsPerZone.clear(); cpsDefinitionsBySpecies.clear(); SamplingListener[] samplingListeners = listeners.getListeners(SamplingListener.class); for (SamplingListener listener : samplingListeners) { @@ -230,11 +229,11 @@ public class CruiseSamplingCache implements Closeable { if (operation.getSubStrata() != null) { - result = Optional.ofNullable(zonesByLocations.get(operation.getSubStrata())); + result = tryFindZone(operation.getSubStrata()); } else if (operation.getStrata() != null) { - result = Optional.ofNullable(zonesByLocations.get(operation.getStrata())); + result = tryFindZone(operation.getStrata()); } else { result = Optional.empty(); @@ -267,4 +266,14 @@ public class CruiseSamplingCache implements Closeable { } + + protected Optional<Zone> tryFindZone(TuttiLocation location) { + + Integer locationId = location.getIdAsInt(); + return locationIdsPerZone.keySet() + .stream() + .filter(zone -> locationIdsPerZone.containsEntry(zone, locationId)) + .findFirst(); + + } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.