Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 9135411f by Tony Chemit at 2021-01-20T20:23:08+01:00 Dysfonctionnement de l'arbre - Closes #1763 - - - - - 11 changed files: - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/root/RootNavigationCapability.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/root/RootNavigationInitializer.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/root/RootNavigationTreeNodeProvider.java - client/datasource/editor/common/src/main/java/fr/ird/observe/client/datasource/editor/common/CommonRootNavigationTreeNodeProvider.java - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/LlRootNavigationTreeNodeProvider.java - client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/PsRootNavigationTreeNodeProvider.java - models/persistence/src/main/java/fr/ird/observe/entities/data/TripAwareTopiaDao.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ll/common/TripTopiaDao.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ps/common/TripTopiaDao.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/NavigationServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/TripServiceLocalSupport.java Changes: ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/root/RootNavigationCapability.java ===================================== @@ -75,8 +75,8 @@ public class RootNavigationCapability implements ReferenceContainerCapability<Ro NavigationTreeConfig config = initializer.getConfig(); NavigationResult navigationResult = initializer.getNavigationResult(); List<ProgramReference> programs = initializer.getPrograms(); - List<? extends RootNavigationTreeNodeProvider> rootNodeProviders = initializer.getRootNodeProviders(); - List<? extends RootNavigationTreeNodeProvider> providers = rootNodeProviders.stream().filter(p -> config.isShowModule(p.getModule())).collect(Collectors.toList()); + List<? extends RootNavigationTreeNodeProvider<?>> rootNodeProviders = initializer.getRootNodeProviders(); + List<? extends RootNavigationTreeNodeProvider<?>> providers = rootNodeProviders.stream().filter(p -> config.isShowModule(p.getModule())).collect(Collectors.toList()); providers.forEach(p -> p.initRootDataNode(config, navigationResult, programs, rootNode)); if (config.isLoadReferential()) { providers.forEach(p -> p.initRootReferentialNode(rootNode, navigationResult)); @@ -98,13 +98,13 @@ public class RootNavigationCapability implements ReferenceContainerCapability<Ro return 0; } - public RootNavigationTreeNodeProvider getProvider(ProgramReference referenceType) { + public RootNavigationTreeNodeProvider<?> getProvider(ProgramReference referenceType) { return getNode().getInitializer().getRootNodeProvider(referenceType); } public NavigationNode newChildNode(ProgramReference reference) { RootNavigationNode node = getNode(); - RootNavigationTreeNodeProvider provider = getProvider(reference); + RootNavigationTreeNodeProvider<?> provider = getProvider(reference); return provider.newChildNode(node, reference, 0); } ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/root/RootNavigationInitializer.java ===================================== @@ -42,7 +42,7 @@ import java.util.Objects; * @since 8.0.1 */ public class RootNavigationInitializer extends NavigationInitializer<RootNavigationContext> { - private final SingletonSupplier<List<? extends RootNavigationTreeNodeProvider>> rootNodeProviders; + private final SingletonSupplier<List<? extends RootNavigationTreeNodeProvider<?>>> rootNodeProviders; private final SingletonSupplier<Boolean> canLoadChildrenOnOpen; private final NavigationTreeConfig config; private final NavigationResult navigationResult; @@ -73,7 +73,7 @@ public class RootNavigationInitializer extends NavigationInitializer<RootNavigat protected void reload(NavigationContext<RootNavigationContext> context) { } - public final List<? extends RootNavigationTreeNodeProvider> getRootNodeProviders() { + public final List<? extends RootNavigationTreeNodeProvider<?>> getRootNodeProviders() { return rootNodeProviders.get(); } ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/tree/root/RootNavigationTreeNodeProvider.java ===================================== @@ -30,11 +30,10 @@ import fr.ird.observe.client.datasource.editor.api.content.referential.Referenti import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode; import fr.ird.observe.dto.reference.DataDtoReference; import fr.ird.observe.dto.referential.ReferentialDto; -import fr.ird.observe.dto.referential.common.GearType; import fr.ird.observe.dto.referential.common.ProgramReference; import fr.ird.observe.services.service.data.NavigationResult; -import fr.ird.observe.spi.module.BusinessModule; import fr.ird.observe.spi.module.BusinessProject; +import fr.ird.observe.spi.module.ObserveBusinessModule; import java.util.Comparator; import java.util.LinkedList; @@ -49,19 +48,17 @@ import java.util.stream.Collectors; * @author Tony Chemit - dev@tchemit.fr * @since 8.0 */ -public abstract class RootNavigationTreeNodeProvider { - public static List<RootNavigationTreeNodeProvider> PROVIDERS; - private final BusinessModule module; - //FIXME Add this in BusinessModule - private final GearType gearType; +public abstract class RootNavigationTreeNodeProvider<B extends fr.ird.observe.spi.module.BusinessModule & ObserveBusinessModule> { + public static List<RootNavigationTreeNodeProvider<?>> PROVIDERS; + private final B module; private final int priority; private final ImmutableList<Class<? extends NavigationNode>> acceptedNodeTypes; private final Class<? extends DataDtoReference> acceptedType; - public static synchronized List<RootNavigationTreeNodeProvider> getProviders() { + public static synchronized List<RootNavigationTreeNodeProvider<?>> getProviders() { if (PROVIDERS == null) { PROVIDERS = new LinkedList<>(); - for (RootNavigationTreeNodeProvider o : ServiceLoader.load(RootNavigationTreeNodeProvider.class)) { + for (RootNavigationTreeNodeProvider<?> o : ServiceLoader.load(RootNavigationTreeNodeProvider.class)) { PROVIDERS.add(o); } PROVIDERS.sort(Comparator.comparing(RootNavigationTreeNodeProvider::priority)); @@ -69,9 +66,8 @@ public abstract class RootNavigationTreeNodeProvider { return PROVIDERS; } - protected RootNavigationTreeNodeProvider(BusinessProject project, BusinessModule module, GearType gearType, ImmutableList<Class<? extends NavigationNode>> acceptedNodeTypes, Class<? extends DataDtoReference> acceptedType) { + protected RootNavigationTreeNodeProvider(BusinessProject project, B module, ImmutableList<Class<? extends NavigationNode>> acceptedNodeTypes, Class<? extends DataDtoReference> acceptedType) { this.module = Objects.requireNonNull(module); - this.gearType = gearType; this.acceptedNodeTypes = acceptedNodeTypes; this.acceptedType = acceptedType; this.priority = Objects.requireNonNull(project).getModulePriority(module); @@ -124,7 +120,7 @@ public abstract class RootNavigationTreeNodeProvider { return priority; } - public BusinessModule getModule() { + public B getModule() { return module; } @@ -140,7 +136,7 @@ public abstract class RootNavigationTreeNodeProvider { } public boolean accept(ProgramReference childrenReference) { - return gearType != null && Objects.equals(gearType, childrenReference.getGearType()); + return module.accept(childrenReference); } public ContentListUINavigationNode newChildNode(RootNavigationNode node, ProgramReference reference, int tripCount) { ===================================== client/datasource/editor/common/src/main/java/fr/ird/observe/client/datasource/editor/common/CommonRootNavigationTreeNodeProvider.java ===================================== @@ -26,21 +26,18 @@ import com.google.auto.service.AutoService; import com.google.common.collect.ImmutableList; import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationTreeNodeProvider; import fr.ird.observe.spi.module.ObserveBusinessProject; +import fr.ird.observe.spi.module.common.BusinessModule; /** * @author Tony Chemit - dev@tchemit.fr * @since 8.0 */ @AutoService(RootNavigationTreeNodeProvider.class) -public class CommonRootNavigationTreeNodeProvider extends RootNavigationTreeNodeProvider { +public class CommonRootNavigationTreeNodeProvider extends RootNavigationTreeNodeProvider<BusinessModule> { public CommonRootNavigationTreeNodeProvider() { - super(ObserveBusinessProject.get(), ObserveBusinessProject.get().getCommonBusinessModule(), null, + super(ObserveBusinessProject.get(), ObserveBusinessProject.get().getCommonBusinessModule(), ImmutableList.of(fr.ird.observe.client.datasource.editor.common.referential.common.ReferentialHomeUINavigationNode.class), null); } -// @Override -// public void initRootDataNode(NavigationTreeConfig config, NavigationResult navigationResult, List<ProgramReference> programs, RootNavigationNode rootNode) { -// } - } ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/LlRootNavigationTreeNodeProvider.java ===================================== @@ -28,19 +28,19 @@ import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavi import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationTreeNodeProvider; import fr.ird.observe.client.datasource.editor.ll.data.common.TripListUINavigationNode; import fr.ird.observe.dto.data.ll.common.TripReference; -import fr.ird.observe.dto.referential.common.GearType; import fr.ird.observe.dto.referential.common.ProgramReference; import fr.ird.observe.spi.module.ObserveBusinessProject; +import fr.ird.observe.spi.module.ll.BusinessModule; /** * @author Tony Chemit - dev@tchemit.fr * @since 8.0 */ @AutoService(RootNavigationTreeNodeProvider.class) -public class LlRootNavigationTreeNodeProvider extends RootNavigationTreeNodeProvider { +public class LlRootNavigationTreeNodeProvider extends RootNavigationTreeNodeProvider<BusinessModule> { public LlRootNavigationTreeNodeProvider() { - super(ObserveBusinessProject.get(), ObserveBusinessProject.get().getLlBusinessModule(), GearType.longline, + super(ObserveBusinessProject.get(), ObserveBusinessProject.get().getLlBusinessModule(), ImmutableList.of(TripListUINavigationNode.class, fr.ird.observe.client.datasource.editor.ll.referential.common.ReferentialHomeUINavigationNode.class, fr.ird.observe.client.datasource.editor.ll.referential.landing.ReferentialHomeUINavigationNode.class, ===================================== client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/PsRootNavigationTreeNodeProvider.java ===================================== @@ -28,19 +28,19 @@ import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavi import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationTreeNodeProvider; import fr.ird.observe.client.datasource.editor.ps.data.common.TripListUINavigationNode; import fr.ird.observe.dto.data.ll.common.TripReference; -import fr.ird.observe.dto.referential.common.GearType; import fr.ird.observe.dto.referential.common.ProgramReference; import fr.ird.observe.spi.module.ObserveBusinessProject; +import fr.ird.observe.spi.module.ps.BusinessModule; /** * @author Tony Chemit - dev@tchemit.fr * @since 8.0 */ @AutoService(RootNavigationTreeNodeProvider.class) -public class PsRootNavigationTreeNodeProvider extends RootNavigationTreeNodeProvider { +public class PsRootNavigationTreeNodeProvider extends RootNavigationTreeNodeProvider<BusinessModule> { public PsRootNavigationTreeNodeProvider() { - super(ObserveBusinessProject.get(), ObserveBusinessProject.get().getPsBusinessModule(), GearType.seine, + super(ObserveBusinessProject.get(), ObserveBusinessProject.get().getPsBusinessModule(), ImmutableList.of(TripListUINavigationNode.class, fr.ird.observe.client.datasource.editor.ps.referential.common.ReferentialHomeUINavigationNode.class, fr.ird.observe.client.datasource.editor.ps.referential.observation.ReferentialHomeUINavigationNode.class), @@ -49,6 +49,6 @@ public class PsRootNavigationTreeNodeProvider extends RootNavigationTreeNodeProv @Override public TripListUINavigationNode newChildNode(RootNavigationNode node, ProgramReference reference, int tripCount) { - return TripListUINavigationNode.create(reference, (int) tripCount); + return TripListUINavigationNode.create(reference, tripCount); } } ===================================== models/persistence/src/main/java/fr/ird/observe/entities/data/TripAwareTopiaDao.java ===================================== @@ -62,7 +62,7 @@ public interface TripAwareTopiaDao<D extends DataDto & fr.ird.observe.dto.data.T List<E> getMatchingTripsVesselWithinDateRange(String id, String vesselId, Date startDate, Date endDate); - List<R> getChildren(ReferentialLocale referentialLocale, ImmutableMap<String, ProgramReference> programById, ImmutableMap<String, PersonReference> personById, ImmutableMap<String, VesselReference> vesselById); + List<R> getChildren(ReferentialLocale referentialLocale, String programId, ImmutableMap<String, ProgramReference> programById, ImmutableMap<String, PersonReference> personById, ImmutableMap<String, VesselReference> vesselById); default void fillTripCountByProgramId(Map<String, Integer> map) { TopiaEntityEnum entityEnum = ((AbstractObserveTopiaDao<?>) this).getTopiaEntityEnum(); @@ -72,7 +72,7 @@ public interface TripAwareTopiaDao<D extends DataDto & fr.ird.observe.dto.data.T default List<E> getChildren(Program parent, Date lastUpdate) { if (lastUpdate == null) { - return forProperties(TripAware.PROPERTY_PROGRAM, parent).findAll(); + return forEquals(TripAware.PROPERTY_PROGRAM, parent).findAll(); } return forLastUpdateDateGreaterThan(lastUpdate).addEquals(TripAware.PROPERTY_PROGRAM, parent).findAll(); } ===================================== models/persistence/src/main/java/fr/ird/observe/entities/data/ll/common/TripTopiaDao.java ===================================== @@ -55,7 +55,7 @@ import java.util.stream.Collectors; public class TripTopiaDao extends AbstractTripTopiaDao<Trip> implements TripAwareTopiaDao<TripDto, TripReference, Trip> { - public static final String GET_TRIP_REFERENCES = "SELECT" + + public static final String GET_ALL_TRIP_REFERENCES = "SELECT" + " t.program," + " t.topiaId," + " t.startDate," + @@ -66,6 +66,19 @@ public class TripTopiaDao extends AbstractTripTopiaDao<Trip> implements TripAwar " t.observationsAvailability," + " t.logbookAvailability" + " FROM %s.%s t;"; + public static final String GET_TRIP_REFERENCES = "SELECT" + + " t.program," + + " t.topiaId," + + " t.startDate," + + " t.endDate," + + " t.tripType," + + " t.observer," + + " t.vessel," + + " t.observationsAvailability," + + " t.logbookAvailability" + + " FROM %s.%s t" + + " WHERE t.program = '%s';"; + private static class TripMapActivityObsPointQuery extends TopiaSqlQuery<List<TripMapPoint>> { @@ -269,7 +282,7 @@ public class TripTopiaDao extends AbstractTripTopiaDao<Trip> implements TripAwar } @Override - public List<TripReference> getChildren(ReferentialLocale referentialLocale, ImmutableMap<String, ProgramReference> programById, ImmutableMap<String, PersonReference> personById, ImmutableMap<String, VesselReference> vesselById) { + public List<TripReference> getChildren(ReferentialLocale referentialLocale, String programId, ImmutableMap<String, ProgramReference> programById, ImmutableMap<String, PersonReference> personById, ImmutableMap<String, VesselReference> vesselById) { String dbTableName = getTopiaEntityEnum().dbTableName(); Map<String, Integer> observationActivityCount = new TreeMap<>(); @@ -281,12 +294,16 @@ public class TripTopiaDao extends AbstractTripTopiaDao<Trip> implements TripAwar Map<String, Integer> landingCount = new TreeMap<>(); fillCount(getCountSql(ObserveEntityEnum.ll_landing_Landing, dbTableName), landingCount); - String sql = String.format(GET_TRIP_REFERENCES, getTopiaEntityEnum().dbSchemaName(), dbTableName); - + String sql; + if (programId == null) { + sql = String.format(GET_ALL_TRIP_REFERENCES, getTopiaEntityEnum().dbSchemaName(), dbTableName); + } else { + sql = String.format(GET_TRIP_REFERENCES, getTopiaEntityEnum().dbSchemaName(), dbTableName, programId); + } TopiaSqlQuery<TripReference> query = TopiaSqlQuery.wrap(sql, resultSet -> { TripDto dto = new TripDto(); - String programId = resultSet.getString(1); - dto.setProgram(programById.get(programId)); + String thisProgramId = resultSet.getString(1); + dto.setProgram(programById.get(thisProgramId)); String id = resultSet.getString(2); dto.setId(id); dto.setStartDate(resultSet.getDate(3)); ===================================== models/persistence/src/main/java/fr/ird/observe/entities/data/ps/common/TripTopiaDao.java ===================================== @@ -59,7 +59,7 @@ import java.util.stream.Collectors; */ public class TripTopiaDao extends AbstractTripTopiaDao<Trip> implements TripAwareTopiaDao<TripDto, TripReference, Trip> { - public static final String GET_TRIP_REFERENCES = "SELECT" + + public static final String GET_ALL_TRIP_REFERENCES = "SELECT" + " t.program," + " t.topiaId," + " t.startDate," + @@ -68,6 +68,16 @@ public class TripTopiaDao extends AbstractTripTopiaDao<Trip> implements TripAwar " t.vessel" + " FROM %s.%s t;"; + public static final String GET_TRIP_REFERENCES = "SELECT" + + " t.program," + + " t.topiaId," + + " t.startDate," + + " t.endDate," + + " t.observer," + + " t.vessel" + + " FROM %s.%s t" + + " WHERE t.program = '%s';"; + private static class TripMapActivityObservationPointQuery extends TopiaSqlQuery<TripMapPoint> { private static final String SQL = "SELECT" + @@ -169,14 +179,20 @@ public class TripTopiaDao extends AbstractTripTopiaDao<Trip> implements TripAwar } @Override - public List<TripReference> getChildren(ReferentialLocale referentialLocale, ImmutableMap<String, ProgramReference> programById, ImmutableMap<String, PersonReference> personById, ImmutableMap<String, VesselReference> vesselById) { + public List<TripReference> getChildren(ReferentialLocale referentialLocale, String programId, ImmutableMap<String, ProgramReference> programById, ImmutableMap<String, PersonReference> personById, ImmutableMap<String, VesselReference> vesselById) { String dbTableName = getTopiaEntityEnum().dbTableName(); - String sql = String.format(GET_TRIP_REFERENCES, getTopiaEntityEnum().dbSchemaName(), dbTableName); + + String sql; + if (programId == null) { + sql = String.format(GET_ALL_TRIP_REFERENCES, getTopiaEntityEnum().dbSchemaName(), dbTableName); + } else { + sql = String.format(GET_TRIP_REFERENCES, getTopiaEntityEnum().dbSchemaName(), dbTableName, programId); + } Map<String, Integer> observationRouteCount = new TreeMap<>(); fillCount(getCountSql(ObserveEntityEnum.ps_observation_Route, dbTableName), observationRouteCount); TopiaSqlQuery<TripReference> query = TopiaSqlQuery.wrap(sql, resultSet -> { - String programId = resultSet.getString(1); + String thisProgramId = resultSet.getString(1); String id = resultSet.getString(2); Integer routeCount = observationRouteCount.getOrDefault(id, 0); @@ -186,7 +202,7 @@ public class TripTopiaDao extends AbstractTripTopiaDao<Trip> implements TripAwar return routeCount; } }; - dto.setProgram(programById.get(programId)); + dto.setProgram(programById.get(thisProgramId)); dto.setId(id); dto.setStartDate(resultSet.getDate(3)); dto.setEndDate(resultSet.getDate(4)); ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/NavigationServiceLocalSupport.java ===================================== @@ -113,12 +113,12 @@ class NavigationServiceLocalSupport extends ObserveServiceLocal implements Navig ArrayListMultimap<String, fr.ird.observe.dto.data.ll.common.TripReference> tripLlByProgram = ArrayListMultimap.create(); if (canReadData) { if (loadPs) { - List<fr.ird.observe.dto.data.ps.common.TripReference> trips = fr.ird.observe.entities.data.ps.common.Trip.SPI.getDao(getTopiaPersistenceContext()).getChildren(referentialLocale, programById, personById, vesselById); + List<fr.ird.observe.dto.data.ps.common.TripReference> trips = fr.ird.observe.entities.data.ps.common.Trip.SPI.getDao(getTopiaPersistenceContext()).getChildren(referentialLocale, null, programById, personById, vesselById); trips.forEach(t -> tripPsByProgram.put(t.getProgram().getId(), t)); } if (loadLl) { - List<fr.ird.observe.dto.data.ll.common.TripReference> tripLl = fr.ird.observe.entities.data.ll.common.Trip.SPI.getDao(getTopiaPersistenceContext()).getChildren(referentialLocale, programById, personById, vesselById); + List<fr.ird.observe.dto.data.ll.common.TripReference> tripLl = fr.ird.observe.entities.data.ll.common.Trip.SPI.getDao(getTopiaPersistenceContext()).getChildren(referentialLocale, null, programById, personById, vesselById); tripLl.forEach(t -> tripLlByProgram.put(t.getProgram().getId(), t)); } } ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/TripServiceLocalSupport.java ===================================== @@ -182,8 +182,7 @@ public abstract class TripServiceLocalSupport<D extends OpenableDto & fr.ird.obs ImmutableSet<VesselReference> vessels = Vessel.toReferenceSet(referentialLocale, getTopiaPersistenceContext(), null).toSet(); ImmutableMap<String, VesselReference> vesselById = Maps.uniqueIndex(vessels, VesselReference::getId); - - List<R> references = spi.getDao(getTopiaPersistenceContext()).getChildren(referentialLocale, programById, personById, vesselById); + List<R> references = spi.getDao(getTopiaPersistenceContext()).getChildren(referentialLocale, parentId, programById, personById, vesselById); return DataDtoReferenceSet.of(spi.toReferenceType(), references, now()); } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/9135411f689f22614ef9f6c4f6... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/9135411f689f22614ef9f6c4f6... You're receiving this email because of your account on gitlab.com.