Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 90bb94b5 by Tony Chemit at 2022-01-19T16:20:06+01:00 Stabilisation des SPI de persistence. Utilisation uniquement des nouveles API pour récupérer les parents, plus besoin de faire appel au méta-model pour construire les requètes, elles sont générées! - - - - - 30 changed files: - models/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java - models/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaPersistenceContext.java - models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/common/GearUseFeaturesSpi.java - + models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/common/TripGearUseFeaturesSpi.java - models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/common/TripSpi.java - − models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/common/TripTopiaDao.java - models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/logbook/ActivitySampleSpi.java - models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/logbook/SetSpi.java - models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/observation/BranchlineSpi.java - models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/observation/SetDetailCompositionSpi.java - models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/observation/SetSpi.java - models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/GearUseFeaturesSpi.java - models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/localmarket/BatchSpi.java → models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripBatchSpi.java - + models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripGearUseFeaturesSpi.java - models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripSpi.java - − models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripTopiaDao.java - models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/localmarket/SurveySpi.java - models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/RouteSpi.java - models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/RouteSpi.java - models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SampleSpi.java - models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SetSpi.java - models/persistence/test/src/test/java/fr/ird/observe/persistence/test/impl/ObserveTopiaPersistenceContextTest.java - models/persistence/test/src/test/java/fr/ird/observe/persistence/test/impl/TestGetParent.java - services/local/pom.xml - services/local/src/main/java/fr/ird/observe/services/local/service/ObserveServiceLocal.java - services/local/src/main/java/fr/ird/observe/services/local/service/data/ll/common/TripServiceLocalSupport.java - services/local/src/main/java/fr/ird/observe/services/local/service/data/ps/common/TripServiceLocalSupport.java - services/local/src/main/java/fr/ird/observe/services/local/service/internal/ContainerServiceLocalSupport.java - services/local/src/main/java/fr/ird/observe/services/local/service/internal/ValidateServiceLocalSupport.java - services/validation-spi/src/main/java/fr/ird/observe/validation/EntityInterceptors.java Changes: ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java ===================================== @@ -58,7 +58,7 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat public ObserveTopiaPersistenceContext newPersistenceContext(Consumer<ObserveTopiaPersistenceContext> onPreClose) { ObserveTopiaPersistenceContext persistenceContext = newPersistenceContext(); - if (onPreClose!=null) { + if (onPreClose != null) { persistenceContext.setOnPreClose(onPreClose); } return persistenceContext; @@ -76,7 +76,8 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat getTopiaEntitySqlModelSupport(), this, getTopiaUsageModel(), - getConfiguration() + getConfiguration(), + getDaoMapping() ) ); registerPersistenceContext(persistenceContext); ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaPersistenceContext.java ===================================== @@ -28,7 +28,6 @@ import fr.ird.observe.dto.data.ps.dcp.SimplifiedObjectTypeSpecializedRules; import fr.ird.observe.dto.referential.ReferentialLocale; import fr.ird.observe.dto.report.Report; import fr.ird.observe.dto.report.ReportRequestExecutor; -import fr.ird.observe.entities.data.RootOpenableEntity; import fr.ird.observe.entities.data.ps.dcp.SimplifiedObjectTypeManagerFactory; import fr.ird.observe.spi.context.OpenableDtoEntityContext; import fr.ird.observe.spi.navigation.parent.ObserveToParentIdProvider; @@ -36,30 +35,19 @@ import fr.ird.observe.spi.navigation.parent.ObserveToParentIdProviderImpl; import fr.ird.observe.spi.report.ObserveDefaultReportRequestExecutor; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.hibernate.SessionFactory; -import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.topia.persistence.TopiaException; -import org.nuiton.topia.persistence.internal.AbstractTopiaDao; import org.nuiton.topia.persistence.internal.AbstractTopiaPersistenceContextConstructorParameter; -import org.nuiton.topia.persistence.metadata.TopiaMetadataModel; import org.nuiton.topia.persistence.script.SqlScriptReader; -import java.lang.reflect.InvocationTargetException; import java.sql.Timestamp; import java.util.Date; -import java.util.Locale; import java.util.Map; -import java.util.Objects; -import java.util.function.Consumer; import java.util.function.Supplier; public class ObserveTopiaPersistenceContext extends AbstractObserveTopiaPersistenceContext { private static final Logger log = LogManager.getLogger(ObserveTopiaPersistenceContext.class); - private Consumer<ObserveTopiaPersistenceContext> onPreClose; - public ObserveTopiaPersistenceContext(AbstractTopiaPersistenceContextConstructorParameter parameter) { super(parameter); throw new IllegalStateException("Can't use this constructor!"); @@ -93,50 +81,8 @@ public class ObserveTopiaPersistenceContext extends AbstractObserveTopiaPersiste } @Override - public <E extends TopiaEntity> TopiaDao<E> getDao(Class<E> entityClass) { - - SessionFactory hibernateFactory = hibernateSupport.getHibernateFactory(); - Objects.requireNonNull(hibernateFactory, "The Hibernate SessionFactory is null, please initialize"); - - @SuppressWarnings("unchecked") TopiaDao<E> dao = (TopiaDao<E>) daoCache.get(entityClass); - if (dao == null) { - - // Looking for specialized DAO - // This DAO is supposed to exist, as created by generation - String daoClassName = entityClass.getName() + "TopiaDao"; - try { - @SuppressWarnings("unchecked") Class<TopiaDao<E>> daoClass = (Class<TopiaDao<E>>) Class.forName(daoClassName); - dao = daoClass.getConstructor().newInstance(); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { - log.fatal("Unable to instantiate DAO class " + daoClassName, e); - throw new TopiaException("unable to instantiate DAO class " + daoClassName, e); - } catch (ClassNotFoundException e) { - log.fatal("Unable to find DAO class " + daoClassName, e); - throw new TopiaException("unable to find DAO class " + daoClassName, e); - } - if (dao instanceof AbstractTopiaDao) { - AbstractTopiaDao<?> abstractTopiaDao = (AbstractTopiaDao<?>) dao; - abstractTopiaDao.init(jpaSupport, hibernateSupport, sqlSupport, topiaIdFactory, firesSupport, this); - } - daoCache.put(entityClass, dao); - } - return dao; - } - - - @Override - public void close() { - try { - if (onPreClose != null) { - onPreClose.accept(this); - } - } finally { - super.close(); - } - } - - public void setOnPreClose(Consumer<ObserveTopiaPersistenceContext> onPreClose) { - this.onPreClose = Objects.requireNonNull(onPreClose); + public <E extends TopiaEntity> ToolkitTopiaDao<E> getDao(Class<E> entityClass) { + return (ToolkitTopiaDao<E>) super.getDao(entityClass); } @Override @@ -154,16 +100,6 @@ public class ObserveTopiaPersistenceContext extends AbstractObserveTopiaPersiste }; } - @Override - public <E extends Entity> E getSingleAssociationParent(Locale locale, Class<E> associationContainerType, String associationName, String associationId) { - TopiaMetadataModel metadataModel = getMetadataModel(); - if (RootOpenableEntity.class.isAssignableFrom(associationContainerType)) { - throw new IllegalStateException(String.format("Can't get parent of a RootOpenableEntity: %s", associationContainerType.getName())); - } - String parentId = metadataModel.getSingleAssociationParentId(getSqlSupport(), associationContainerType, associationName, associationId); - return getAssociationParent(locale, associationContainerType, associationName, associationId, parentId); - } - public void applyPairing(OpenableDtoEntityContext<?, ?, ?, ?, ?> spi, Date now, Map<String, String> activityMapping) { //FIXME Loosing timeZone ? Timestamp t = new Timestamp(now.getTime()); ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/common/GearUseFeaturesSpi.java ===================================== @@ -26,8 +26,6 @@ import fr.ird.observe.entities.referential.common.GearCharacteristic; import fr.ird.observe.spi.decoration.ObserveI18nLabelsBuilder; import org.apache.commons.lang3.tuple.Pair; -import java.util.Date; -import java.util.function.BiConsumer; import java.util.stream.Collectors; /** @@ -52,13 +50,4 @@ public class GearUseFeaturesSpi extends GeneratedGearUseFeaturesSpi { return String.format("( %s - %s%s = %s )", codeLabel, gearCharacteristic.getLabel2(), unitLabel, measurementValue); } - @Override - public BiConsumer<Trip, Date> saveCallback() { - return (e, lastUpdateDate) -> { - for (GearUseFeatures features : e.getGearUseFeatures()) { - features.setLastUpdateDate(lastUpdateDate); - features.getGearUseFeaturesMeasurement().forEach(measurement -> measurement.setLastUpdateDate(lastUpdateDate)); - } - }; - } } ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/common/TripGearUseFeaturesSpi.java ===================================== @@ -0,0 +1,39 @@ +package fr.ird.observe.entities.data.ll.common; + +/*- + * #%L + * ObServe Models :: Persistence :: Java + * %% + * Copyright (C) 2008 - 2022 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import java.util.Date; +import java.util.function.BiConsumer; + +public class TripGearUseFeaturesSpi extends GeneratedTripGearUseFeaturesSpi { + + @Override + public BiConsumer<Trip, Date> saveCallback() { + return (e, lastUpdateDate) -> { + for (GearUseFeatures features : e.getGearUseFeatures()) { + features.setLastUpdateDate(lastUpdateDate); + features.getGearUseFeaturesMeasurement().forEach(measurement -> measurement.setLastUpdateDate(lastUpdateDate)); + } + }; + } +} ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/common/TripSpi.java ===================================== @@ -31,7 +31,6 @@ import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet; import fr.ird.observe.dto.referential.ReferentialLocale; import fr.ird.observe.dto.referential.common.SpeciesReference; import fr.ird.observe.dto.referential.ll.common.VesselActivityReference; -import fr.ird.observe.entities.ObserveTopiaPersistenceContextSupport; import fr.ird.observe.entities.data.ll.logbook.Activity; import fr.ird.observe.entities.referential.common.Ocean; import fr.ird.observe.entities.referential.common.Species; @@ -43,6 +42,8 @@ import org.apache.logging.log4j.Logger; import java.util.Date; import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Objects; import java.util.stream.Stream; /** @@ -160,15 +161,34 @@ public class TripSpi extends GeneratedTripSpi { } } - public TripMapDto getTripMap(ObserveTopiaPersistenceContextSupport persistenceContext, TripMapConfigDto config) { - LinkedHashSet<TripMapPoint> points = Trip.SPI.getDao(persistenceContext).extractTripMapActivityPoints(config); + public TripMapDto getTripMap(ServiceContext context, TripMapConfigDto config) { + String tripId = config.getTripId(); + TripTopiaDao dao = getDao(context); + Trip trip = dao.forTopiaIdEquals(tripId).findUnique(); + LinkedHashSet<TripMapPoint> points = TripMapBuilder.build(dao.getTopiaSqlSupport(), config, trip); return TripMapDto.of(config.getTripId(), points); } + public int getMatchingTripsVesselWithinDateRange(ServiceContext context, String id, String vesselId, Date startDate, Date endDate) { + if (vesselId == null || startDate == null || endDate == null) { + return 0; + } + return (int) getDao(context). + <Trip>stream("From fr.ird.observe.entities.data.ll.common.TripImpl Where vessel.id = :vesselId " + + "And (( :startDate <= endDate And :endDate >= endDate ) " + + " Or ( :endDate <= startDate And :endDate >= startDate )) " + + "Order By startDate, endDate", Map.of( + "vesselId", vesselId, + "startDate", startDate, + "endDate", endDate)) + .filter(t -> !Objects.equals(id, t.getTopiaId())) + .count(); + } + public ReferentialDtoReferenceSet<SpeciesReference> getSpeciesByListAndTrip(ServiceContext context, String tripId, String speciesListId) { Ocean ocean = null; if (tripId != null) { - Trip trip = Trip.SPI.loadEntity(context, tripId); + Trip trip = loadEntity(context, tripId); ocean = trip.getOcean(); } Stream<Species> speciesList = SpeciesList.loadEntity(context, speciesListId).getSpecies().stream(); @@ -178,4 +198,5 @@ public class TripSpi extends GeneratedTripSpi { } return Species.toReferenceSet(context.getReferentialLocale(), speciesList, null); } + } ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/common/TripTopiaDao.java deleted ===================================== @@ -1,81 +0,0 @@ -package fr.ird.observe.entities.data.ll.common; - -/* - * #%L - * ObServe Models :: Persistence :: Java - * %% - * Copyright (C) 2008 - 2022 IRD, Code Lutin, Ultreia.io - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ird.observe.dto.data.TripMapConfigDto; -import fr.ird.observe.dto.data.TripMapPoint; -import fr.ird.observe.dto.data.ll.common.TripDto; -import fr.ird.observe.dto.data.ll.common.TripReference; -import fr.ird.observe.entities.data.RootOpenableEntityDao; - -import java.util.Date; -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.Objects; - -public class TripTopiaDao extends AbstractTripTopiaDao<Trip> implements RootOpenableEntityDao<TripDto, TripReference, Trip> { - -// @Override -// public String getReferencesSql(String extraCode) { -// String dbTableName = getTopiaEntityEnum().dbTableName(); -// String dbSchemaName = getTopiaEntityEnum().dbSchemaName(); -// return String.format("SELECT" + -// " t.topiaId," + -// " t.topiaCreateDate," + -// " t.topiaVersion," + -// " t.lastUpdateDate," + -// " t.observationsProgram," + -// " t.logbookProgram," + -// " t.startDate," + -// " t.endDate," + -// " t.vessel," + -// " t.tripType," + -// " t.observationsAvailability," + -// " t.logbookAvailability" + -// " FROM %1$s.%2$s t%3$s", -// dbSchemaName, dbTableName, -// (extraCode == null ? "" : " WHERE " + extraCode)); -// } - - public LinkedHashSet<TripMapPoint> extractTripMapActivityPoints(TripMapConfigDto tripMapConfig) { - String tripId = tripMapConfig.getTripId(); - Trip trip = forTopiaIdEquals(tripId).findUnique(); - return TripMapBuilder.build(topiaSqlSupport, tripMapConfig, trip); - } - - public int getMatchingTripsVesselWithinDateRange(String id, String vesselId, Date startDate, Date endDate) { - if (vesselId == null || startDate == null || endDate == null) { - return 0; - } - return (int) this. - <Trip>stream("From fr.ird.observe.entities.data.ll.common.TripImpl Where vessel.id = :vesselId " + - "And (( :startDate <= endDate And :endDate >= endDate ) " + - " Or ( :endDate <= startDate And :endDate >= startDate )) " + - "Order By startDate, endDate", Map.of( - "vesselId", vesselId, - "startDate", startDate, - "endDate", endDate)) - .filter(t -> !Objects.equals(id, t.getTopiaId())) - .count(); - } -} ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/logbook/ActivitySampleSpi.java ===================================== @@ -43,13 +43,12 @@ public class ActivitySampleSpi extends GeneratedActivitySampleSpi { return super.preCreate(context, parent, preCreated); } + //FIXME Use ToParentIdProvider to update all parent lastUpdateDate nice and easy + // As the sample is mainly associated to trip, updating only entity won't update the activity and his ancestor @Override - protected SaveResultDto onSave(ServiceContext context, ActivitySampleDto dto, Activity parent, Sample entity) { - Sample.ACTIVITY_SAMPLE_SPI.fromDto(context.getReferentialLocale(), entity, dto); - parent.setSample(entity); - // As the sample is mainly associated to trip, updating only entity won't update the activity and his ancestor + protected SaveResultDto saveEntity(ServiceContext context, Activity parent, Sample entity) { return newSaveHelper(context) - .update(Sample.ACTIVITY_SAMPLE_SPI, entity, false, true) + .update(this, entity, false, true) .updateLastUpdateDateField(Activity.SPI, parent) .build(entity); } ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/logbook/SetSpi.java ===================================== @@ -76,7 +76,7 @@ public class SetSpi extends GeneratedSetSpi { public java.util.Set<SetStubDto> getBrothers(ServiceContext context, Activity parent) { java.util.Set<SetStubDto> result = new HashSet<>(); ReferentialLocale referentialLocale = context.getReferentialLocale(); - Trip trip = getParent(context, Trip.SPI, Trip.PROPERTY_ACTIVITY_LOGBOOK, parent.getTopiaId()); + Trip trip = Activity.SPI.getParent(context, parent.getTopiaId()); trip.getActivityLogbook().stream().filter(a -> VesselActivityReference.isSetOperation(a.getVesselActivity()) && !Objects.equals(a, parent) && a.getSet() != null).forEach( oneParent -> { Set otherSet = oneParent.getSet(); @@ -133,6 +133,6 @@ public class SetSpi extends GeneratedSetSpi { entity.setLightsticksType(entityToCopy.getLightsticksType()); entity.setLightsticksColor(entityToCopy.getLightsticksColor()); onSave(context, parent, entity, dto); - return saveEntity(context, entity); + return saveEntity(context, parent, entity); } } ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/observation/BranchlineSpi.java ===================================== @@ -30,16 +30,15 @@ import fr.ird.observe.entities.Entity; import fr.ird.observe.spi.service.ServiceContext; public class BranchlineSpi extends GeneratedBranchlineSpi { + public Form<BranchlineDto> loadForm(ServiceContext context, String id) { Branchline entity = loadEntity(context, id); return entityToForm(context, entity); - } public SaveResultDto save(ServiceContext context, BranchlineDto dto) { - Set parent = getParent(context, dto); - Branchline entity = Branchline.SPI.loadOrCreateEntityFromDto(context, dto); + Branchline entity = Branchline.loadOrCreateEntityFromDto(context, dto); Branchline.SPI.checkLastUpdateDate(context, entity, dto); Branchline.fromDto(context.getReferentialLocale(), entity, dto); return newSaveHelper(context) @@ -52,6 +51,6 @@ public class BranchlineSpi extends GeneratedBranchlineSpi { ToolkitParentIdDtoBean basketId = Branchline.SPI.getParentId(context, dto.getTopiaId()); ToolkitParentIdDtoBean sectionId = Basket.SPI.getParentId(context, basketId.getTopiaId()); ToolkitParentIdDtoBean setId = Section.SPI.getParentId(context, sectionId.getTopiaId()); - return Set.SPI.loadEntity(context, setId.getTopiaId()); + return Set.loadEntity(context, setId.getTopiaId()); } -} //BranchlineSpi +} ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/observation/SetDetailCompositionSpi.java ===================================== @@ -37,7 +37,8 @@ public class SetDetailCompositionSpi extends GeneratedSetDetailCompositionSpi { @Override public void onLoadForm(ServiceContext context, Set entity, Form<SetDetailCompositionDto> form) { SetDetailCompositionDto dto = form.getObject(); - SetTopiaDao dao = Set.SPI.getDao(context); + SetTopiaDao dao = Set.getDao(context); + //FIXME Use a real sql query to get this in one time java.util.Set<String> sectionUsed = dao.getSectionUsed(entity.getTopiaId()); java.util.Set<String> basketUsed = dao.getBasketUsed(entity.getTopiaId()); java.util.Set<String> branchlineUsed = dao.getBranchlineUsed(entity.getTopiaId()); ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/observation/SetSpi.java ===================================== @@ -122,7 +122,7 @@ public class SetSpi extends GeneratedSetSpi { public java.util.Set<SetStubDto> getBrothers(ServiceContext context, Activity parent) { java.util.Set<SetStubDto> result = new HashSet<>(); - Trip trip = getParent(context, Trip.SPI, Trip.PROPERTY_ACTIVITY_OBS, parent.getTopiaId()); + Trip trip = Activity.SPI.getParent(context, parent.getTopiaId()); ReferentialLocale referentialLocale = context.getReferentialLocale(); trip.getActivityObs().stream().filter(a -> VesselActivityReference.isSetOperation(a.getVesselActivity())).filter(a -> !Objects.equals(a, parent)).forEach( oneParent -> { ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/GearUseFeaturesSpi.java ===================================== @@ -27,8 +27,6 @@ import fr.ird.observe.entities.referential.common.GearCharacteristic; import fr.ird.observe.spi.decoration.ObserveI18nLabelsBuilder; import org.apache.commons.lang3.tuple.Pair; -import java.util.Date; -import java.util.function.BiConsumer; import java.util.stream.Collectors; /** @@ -53,13 +51,4 @@ public class GearUseFeaturesSpi extends GeneratedGearUseFeaturesSpi { return String.format("( %s - %s%s = %s )", codeLabel, gearCharacteristic.getLabel2(), unitLabel, measurementValue); } - @Override - public BiConsumer<Trip, Date> saveCallback() { - return (e, lastUpdateDate) -> { - for (GearUseFeatures features : e.getGearUseFeatures()) { - features.setLastUpdateDate(lastUpdateDate); - features.getGearUseFeaturesMeasurement().forEach(measurement -> measurement.setLastUpdateDate(lastUpdateDate)); - } - }; - } } ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/localmarket/BatchSpi.java → models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripBatchSpi.java ===================================== @@ -1,4 +1,4 @@ -package fr.ird.observe.entities.data.ps.localmarket; +package fr.ird.observe.entities.data.ps.common; /*- * #%L @@ -25,7 +25,6 @@ package fr.ird.observe.entities.data.ps.localmarket; import fr.ird.observe.dto.data.ps.localmarket.TripBatchDto; import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.referential.ps.localmarket.PackagingReference; -import fr.ird.observe.entities.data.ps.common.Trip; import fr.ird.observe.entities.referential.common.Harbour; import fr.ird.observe.entities.referential.ps.localmarket.Packaging; import fr.ird.observe.spi.service.ServiceContext; @@ -35,19 +34,12 @@ import java.util.LinkedHashSet; import java.util.function.BiConsumer; import java.util.stream.Collectors; -/** - * Created on 10/05/2021. - * - * @author Tony Chemit - dev@tchemit.fr - * @since 9.0.0 - */ -public class BatchSpi extends GeneratedBatchSpi { - public static LinkedHashSet<PackagingReference> getPackaging(ServiceContext context, Trip trip) { - Harbour landingHarbour = trip.getLandingHarbour(); - Date date = trip.getEndDate(); - return Packaging.toReferenceSet(context.getReferentialLocale(), Packaging.getDao(context) - .streamAll() - .filter(p -> p.acceptHarbour(landingHarbour) && p.acceptDate(date)), null).stream().collect(Collectors.toCollection(LinkedHashSet::new)); +public class TripBatchSpi extends GeneratedTripBatchSpi { + + @Override + public void loadForm(ServiceContext context, String id, Trip parent, Form<TripBatchDto> form) { + LinkedHashSet<PackagingReference> availablePackaging = getPackaging(context, parent); + form.getObject().setAvailablePackagings(availablePackaging); } @Override @@ -55,10 +47,12 @@ public class BatchSpi extends GeneratedBatchSpi { return (e, lastUpdateDate) -> e.getLocalmarketBatch().forEach(c -> c.setLastUpdateDate(lastUpdateDate)); } - @Override - public void loadForm(ServiceContext context, Trip parent, Form<TripBatchDto> form) { - LinkedHashSet<PackagingReference> availablePackaging = getPackaging(context, parent); - form.getObject().setAvailablePackagings(availablePackaging); + protected LinkedHashSet<PackagingReference> getPackaging(ServiceContext context, Trip trip) { + Harbour landingHarbour = trip.getLandingHarbour(); + Date date = trip.getEndDate(); + return Packaging.toReferenceSet(context.getReferentialLocale(), Packaging.getDao(context) + .streamAll() + .filter(p -> p.acceptHarbour(landingHarbour) && p.acceptDate(date)), null).stream().collect(Collectors.toCollection(LinkedHashSet::new)); } } ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripGearUseFeaturesSpi.java ===================================== @@ -0,0 +1,39 @@ +package fr.ird.observe.entities.data.ps.common; + +/*- + * #%L + * ObServe Models :: Persistence :: Java + * %% + * Copyright (C) 2008 - 2022 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import java.util.Date; +import java.util.function.BiConsumer; + +public class TripGearUseFeaturesSpi extends GeneratedTripGearUseFeaturesSpi { + + @Override + public BiConsumer<Trip, Date> saveCallback() { + return (e, lastUpdateDate) -> { + for (GearUseFeatures features : e.getGearUseFeatures()) { + features.setLastUpdateDate(lastUpdateDate); + features.getGearUseFeaturesMeasurement().forEach(measurement -> measurement.setLastUpdateDate(lastUpdateDate)); + } + }; + } +} ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripSpi.java ===================================== @@ -33,7 +33,6 @@ import fr.ird.observe.dto.reference.DataDtoReferenceSet; import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet; import fr.ird.observe.dto.referential.ReferentialLocale; import fr.ird.observe.dto.referential.common.SpeciesReference; -import fr.ird.observe.entities.ObserveTopiaPersistenceContextSupport; import fr.ird.observe.entities.data.ps.logbook.Activity; import fr.ird.observe.entities.data.ps.observation.Route; import fr.ird.observe.entities.referential.common.Ocean; @@ -49,6 +48,8 @@ import java.util.Collection; import java.util.Date; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.function.Supplier; import java.util.stream.Stream; @@ -158,7 +159,7 @@ public class TripSpi extends GeneratedTripSpi { public ReferentialDtoReferenceSet<SpeciesReference> getSpeciesByListAndTrip(ServiceContext context, String tripId, String speciesListId) { Ocean ocean = null; if (tripId != null) { - Trip trip = Trip.SPI.loadEntity(context, tripId); + Trip trip = loadEntity(context, tripId); ocean = trip.getOcean(); } Stream<Species> speciesList = SpeciesList.loadEntity(context, speciesListId).getSpecies().stream(); @@ -169,11 +170,30 @@ public class TripSpi extends GeneratedTripSpi { return Species.toReferenceSet(context.getReferentialLocale(), speciesList, null); } - public TripMapDto getTripMap(ObserveTopiaPersistenceContextSupport persistenceContext, TripMapConfigDto config) { - LinkedHashSet<TripMapPoint> points = getDao(persistenceContext).extractTripMapActivityPoints(config); + public TripMapDto getTripMap(ServiceContext context, TripMapConfigDto config) { + String tripId = config.getTripId(); + TripTopiaDao dao = getDao(context); + Trip trip = dao.forTopiaIdEquals(tripId).findUnique(); + LinkedHashSet<TripMapPoint> points = TripMapBuilder.build(dao.getTopiaSqlSupport(), config, trip); return TripMapDto.of(config.getTripId(), points); } + public int getMatchingTripsVesselWithinDateRange(ServiceContext context, String id, String vesselId, Date startDate, Date endDate) { + if (vesselId == null || startDate == null || endDate == null) { + return 0; + } + return (int) getDao(context). + <Trip>stream("From fr.ird.observe.entities.data.ps.common.TripImpl Where vessel.id = :vesselId " + + "And (( :startDate <= endDate And :endDate >= endDate ) " + + " Or ( :endDate <= startDate And :endDate >= startDate )) " + + "Order By startDate, endDate", Map.of( + "vesselId", vesselId, + "startDate", startDate, + "endDate", endDate)) + .filter(t -> !Objects.equals(id, t.getTopiaId())) + .count(); + } + public DataDtoReferenceSet<ActivityReference> getLogbookSetActivities(ServiceContext context, String tripId) { ReferentialLocale referentialLocale = context.getReferentialLocale(); List<Activity> allStubByTripId = Activity.getDao(context).getLogbookSetActivities(tripId, referentialLocale.ordinal()); ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripTopiaDao.java deleted ===================================== @@ -1,91 +0,0 @@ -/* - * #%L - * ObServe Models :: Persistence :: Java - * %% - * Copyright (C) 2008 - 2022 IRD, Code Lutin, Ultreia.io - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ -package fr.ird.observe.entities.data.ps.common; - -import fr.ird.observe.dto.data.TripMapConfigDto; -import fr.ird.observe.dto.data.TripMapPoint; -import fr.ird.observe.dto.data.ps.common.TripDto; -import fr.ird.observe.dto.data.ps.common.TripReference; -import fr.ird.observe.entities.data.RootOpenableEntityDao; - -import java.util.Date; -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.Objects; - -/** - * Add some user methods. - * - * @author Tony Chemit - dev@tchemit.fr - * @since 2.2 - */ -public class TripTopiaDao extends AbstractTripTopiaDao<Trip> implements RootOpenableEntityDao<TripDto, TripReference, Trip> { - -// @Override -// public String getReferencesSql(String extraCode) { -// String dbTableName = getTopiaEntityEnum().dbTableName(); -// String dbSchemaName = getTopiaEntityEnum().dbSchemaName(); -// return String.format("SELECT" + -// " t.topiaId," + -// " t.topiaCreateDate," + -// " t.topiaVersion," + -// " t.lastUpdateDate," + -// " t.observationsProgram," + -// " t.logbookProgram," + -// " t.startDate," + -// " t.endDate," + -// " t.vessel," + -// " t.observationsAcquisitionStatus," + -// " t.logbookAcquisitionStatus," + -// " t.targetWellsSamplingAcquisitionStatus," + -// " t.landingAcquisitionStatus," + -// " t.localMarketAcquisitionStatus," + -// " t.localMarketWellsSamplingAcquisitionStatus," + -// " t.localMarketSurveySamplingAcquisitionStatus," + -// " t.advancedSamplingAcquisitionStatus" + -// " FROM %1$s.%2$s t%3$s", -// dbSchemaName, dbTableName, -// (extraCode == null ? "" : " WHERE " + extraCode)); -// } - - public LinkedHashSet<TripMapPoint> extractTripMapActivityPoints(TripMapConfigDto tripMapConfig) { - String tripId = tripMapConfig.getTripId(); - Trip trip = forTopiaIdEquals(tripId).findUnique(); - return TripMapBuilder.build(topiaSqlSupport, tripMapConfig, trip); - } - - public int getMatchingTripsVesselWithinDateRange(String id, String vesselId, Date startDate, Date endDate) { - if (vesselId == null || startDate == null || endDate == null) { - return 0; - } - return (int) this. - <Trip>stream("From fr.ird.observe.entities.data.ps.common.TripImpl Where vessel.id = :vesselId " + - "And (( :startDate <= endDate And :endDate >= endDate ) " + - " Or ( :endDate <= startDate And :endDate >= startDate )) " + - "Order By startDate, endDate", Map.of( - "vesselId", vesselId, - "startDate", startDate, - "endDate", endDate)) - .filter(t -> !Objects.equals(id, t.getTopiaId())) - .count(); - } -} ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/localmarket/SurveySpi.java ===================================== @@ -62,7 +62,7 @@ public class SurveySpi extends GeneratedSurveySpi { @Override public void onLoadForm(ServiceContext context, Survey entity, Form<SurveyDto> form) { - ToolkitParentIdDtoBean tripId = getDao(context).executeQueryGetParentId(entity.getTopiaId()); + ToolkitParentIdDtoBean tripId = Survey.SPI.getParentId(context, entity.getTopiaId()); Trip trip = Trip.SPI.loadEntity(context, tripId.getId()); fillFormObject(context.getReferentialLocale(), trip, entity, form); } ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/RouteSpi.java ===================================== @@ -79,6 +79,6 @@ public class RouteSpi extends GeneratedRouteSpi { @Override public Set<ToolkitIdDtoBean> getRealDependencies(ServiceContext context, Set<String> ids) { - return Activity.getDao(context).executeQueryByParentId(ids).map(id -> ToolkitIdDtoBean.of(ActivityDto.class, id)).collect(Collectors.toSet()); + return Activity.byParentId(context, ids).map(id -> ToolkitIdDtoBean.of(ActivityDto.class, id)).collect(Collectors.toSet()); } } ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/RouteSpi.java ===================================== @@ -95,7 +95,7 @@ public class RouteSpi extends GeneratedRouteSpi { @Override public Set<ToolkitIdDtoBean> getRealDependencies(ServiceContext context, Set<String> ids) { - return Activity.getDao(context).executeQueryByParentId(ids).map(id -> ToolkitIdDtoBean.of(ActivityDto.class, id)).collect(Collectors.toSet()); + return Activity.byParentId(context, ids).map(id -> ToolkitIdDtoBean.of(ActivityDto.class, id)).collect(Collectors.toSet()); } private void bindEndOfSearchingProperties(Set<Activity> activities, LinkedHashSet<ActivityStubDto> activitySeineList) { ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SampleSpi.java ===================================== @@ -34,6 +34,8 @@ import java.util.stream.Collectors; public class SampleSpi extends GeneratedSampleSpi { + //FIXME We need to fix this code, this is the only case where we create a first entity when not found + @Override public Form<SampleDto> loadForm(ServiceContext context, String id) { Set parent = Set.loadEntity(context, id); Sample entity = loadSampleFormEntity(context, parent); @@ -46,16 +48,7 @@ public class SampleSpi extends GeneratedSampleSpi { return form; } - public Sample loadSampleFormEntity(ServiceContext context, Set parent) { - Sample sample; - if (parent.isSampleEmpty()) { - sample = Sample.newEntity(context.now()); - } else { - sample = parent.getSample().iterator().next(); - } - return sample; - } - + @Override public SaveResultDto save(ServiceContext context, SampleDto dto) { // this is a trick we always use id as parent id... Set parent = Set.loadEntity(context, dto.getId()); @@ -74,4 +67,11 @@ public class SampleSpi extends GeneratedSampleSpi { .updateLastUpdateDateField(Set.SPI, parent) .build(entity); } -} + + protected Sample loadSampleFormEntity(ServiceContext context, Set parent) { + if (parent.isSampleEmpty()) { + return Sample.newEntity(context.now()); + } + return parent.getSample().iterator().next(); + } +} ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SetSpi.java ===================================== @@ -22,7 +22,6 @@ package fr.ird.observe.entities.data.ps.observation; * #L% */ -import fr.ird.observe.dto.ToolkitParentIdDtoBean; import fr.ird.observe.dto.data.ps.observation.SetDto; import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.referential.ReferentialLocale; @@ -49,8 +48,7 @@ public class SetSpi extends GeneratedSetSpi { @Override public Form<SetDto> preCreate(ServiceContext context, Activity parent, Set preCreated) { - ToolkitParentIdDtoBean routeId = Activity.SPI.getParentId(context, parent.getTopiaId()); - Route route = Route.SPI.loadEntity(context, routeId.getId()); + Route route = Activity.SPI.getParent(context, parent.getTopiaId()); Date routeDate = route.getDate(); // on utilise l'heure de l'activité comme début de calée Date date = Dates.getTime(parent.getTime(), false, false); @@ -69,7 +67,7 @@ public class SetSpi extends GeneratedSetSpi { @Override public void onLoadForm(ServiceContext context, Activity parent, Set entity, Form<SetDto> form) { - Route route = getParent(context, Route.SPI, Route.PROPERTY_ACTIVITY, parent.getTopiaId()); + Route route = Activity.SPI.getParent(context, parent.getTopiaId()); Date routeDate = route.getDate(); form.getObject().setStartSetDate(routeDate); } ===================================== models/persistence/test/src/test/java/fr/ird/observe/persistence/test/impl/ObserveTopiaPersistenceContextTest.java ===================================== @@ -26,10 +26,11 @@ import fr.ird.observe.dto.BusinessDto; import fr.ird.observe.dto.ToolkitId; import fr.ird.observe.dto.ToolkitIdMap; import fr.ird.observe.entities.Entity; -import fr.ird.observe.entities.ObserveDaoQuerySupport; import fr.ird.observe.entities.ObserveEntityEnum; import fr.ird.observe.entities.ObserveTopiaPersistenceContext; +import fr.ird.observe.entities.ToolkitTopiaDao; import fr.ird.observe.persistence.test.api.PersistenceTestSupportRead; +import fr.ird.observe.spi.ObservePersistenceBusinessProject; import fr.ird.observe.test.ObserveFixtures; import org.junit.Assert; import org.junit.Test; @@ -87,7 +88,7 @@ public class ObserveTopiaPersistenceContextTest extends PersistenceTestSupportRe continue; } Class<? extends TopiaEntity> contract = value.getContract(); - ObserveDaoQuerySupport dao = (ObserveDaoQuerySupport) persistenceContext.getDao(contract); + ToolkitTopiaDao<? extends TopiaEntity> dao = persistenceContext.getDao(contract); List<String> allIds = dao.findAllIds(); if (allIds.isEmpty()) { continue; @@ -118,34 +119,13 @@ public class ObserveTopiaPersistenceContextTest extends PersistenceTestSupportRe new TestGetParent(persistenceContext) { @Override protected ToolkitId produceQuery(Class<? extends Entity> entityType, Class<? extends BusinessDto> dtoType, String id) { - ToolkitId toolkitId = persistenceContext.executeQueryGetParentId(entityType, id); - if (toolkitId == null) { - toolkitId = persistenceContext.executeQueryGetParentId2(entityType, id); - } - return toolkitId; + return ObservePersistenceBusinessProject.fromEntity(entityType).getParentId(persistenceContext, id); } }.run(); } } - @Test - public void testGetParentIdFromDao() { - try (ObserveTopiaPersistenceContext persistenceContext = localTestMethodResource.newPersistenceContext()) { - new TestGetParent(persistenceContext) { - @Override - protected ToolkitId produceQuery(Class<? extends Entity> entityType, Class<? extends BusinessDto> dtoType, String id) { - ObserveDaoQuerySupport dao = (ObserveDaoQuerySupport) persistenceContext.getDao(entityType); - ToolkitId toolkitId = dao.executeQueryGetParentId(id); - if (toolkitId == null) { - toolkitId = dao.executeQueryGetParentId2(id); - } - return toolkitId; - } - }.run(); - } - } - @Test public void testIdProjection() { try (ObserveTopiaPersistenceContext persistenceContext = localTestMethodResource.newPersistenceContext()) { @@ -192,7 +172,7 @@ public class ObserveTopiaPersistenceContextTest extends PersistenceTestSupportRe continue; } Class<? extends TopiaEntity> contract = value.getContract(); - ObserveDaoQuerySupport dao = (ObserveDaoQuerySupport) persistenceContext.getDao(contract); + ToolkitTopiaDao<? extends TopiaEntity> dao = persistenceContext.getDao(contract); List<String> allIds = dao.findAllIds(); if (allIds.isEmpty()) { continue; ===================================== models/persistence/test/src/test/java/fr/ird/observe/persistence/test/impl/TestGetParent.java ===================================== @@ -26,9 +26,9 @@ import fr.ird.observe.dto.BusinessDto; import fr.ird.observe.dto.ToolkitId; import fr.ird.observe.dto.reference.DtoReference; import fr.ird.observe.entities.Entity; -import fr.ird.observe.entities.ObserveDaoQuerySupport; import fr.ird.observe.entities.ObserveEntityEnum; import fr.ird.observe.entities.ObserveTopiaPersistenceContext; +import fr.ird.observe.entities.ToolkitTopiaDao; import fr.ird.observe.spi.PersistenceBusinessProject; import fr.ird.observe.spi.context.DtoEntityContext; import fr.ird.observe.spi.module.BusinessProject; @@ -73,7 +73,7 @@ public abstract class TestGetParent implements Runnable { if (BusinessProject.isReferential(dtoType)) { continue; } - ObserveDaoQuerySupport dao = (ObserveDaoQuerySupport) persistenceContext.getDao(contract); + ToolkitTopiaDao<? extends Entity> dao = persistenceContext.getDao(contract); List<String> allIds = dao.findAllIds(); if (allIds.isEmpty()) { continue; ===================================== services/local/pom.xml ===================================== @@ -132,10 +132,6 @@ <groupId>org.hashids</groupId> <artifactId>hashids</artifactId> </dependency> - <dependency> - <groupId>org.nuiton.topia</groupId> - <artifactId>topia-persistence</artifactId> - </dependency> <dependency> <groupId>io.ultreia.java4all.decorator</groupId> <artifactId>decorator-api</artifactId> ===================================== services/local/src/main/java/fr/ird/observe/services/local/service/ObserveServiceLocal.java ===================================== @@ -42,14 +42,13 @@ import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.dto.referential.ReferentialLocale; import fr.ird.observe.entities.Entity; -import fr.ird.observe.entities.ObserveDaoQuerySupport; import fr.ird.observe.entities.ObserveTopiaApplicationContext; import fr.ird.observe.entities.ObserveTopiaPersistenceContext; import fr.ird.observe.entities.ReplicateDataEngine; +import fr.ird.observe.entities.ToolkitTopiaDao; import fr.ird.observe.entities.data.DataEntity; import fr.ird.observe.entities.data.DataGroupByEntity; import fr.ird.observe.entities.data.RootOpenableEntity; -import fr.ird.observe.entities.data.RootOpenableEntityDao; import fr.ird.observe.entities.referential.ReferentialEntity; import fr.ird.observe.gson.DtoGsonSupplier; import fr.ird.observe.navigation.select.ProjectSelectModel; @@ -81,7 +80,6 @@ import fr.ird.observe.validation.DefaultServiceValidationContextConfiguration; import fr.ird.observe.validation.ObserveValidationRequest; import fr.ird.observe.validation.ServiceValidationContext; import io.ultreia.java4all.util.TimeLog; -import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.validator.xwork2.XWork2ValidatorUtil; import java.util.Date; @@ -208,7 +206,7 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont public final <D extends DataDto, R extends DataDtoReference, E extends DataEntity, - T extends ObserveDaoQuerySupport & TopiaDao<E>> DataDtoEntityContext<D, R, E, T> fromDataEntity(E dtoType) { + T extends ToolkitTopiaDao<E>> DataDtoEntityContext<D, R, E, T> fromDataEntity(E dtoType) { return ObservePersistenceBusinessProject.fromDataEntity(dtoType); } @@ -216,7 +214,7 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont public final <D extends DataDto, R extends DataDtoReference, E extends DataEntity, - T extends ObserveDaoQuerySupport & TopiaDao<E>> DataDtoEntityContext<D, R, E, T> fromDataDto(Class<D> dtoType) { + T extends ToolkitTopiaDao<E>> DataDtoEntityContext<D, R, E, T> fromDataDto(Class<D> dtoType) { return ObservePersistenceBusinessProject.fromDataDto(dtoType); } @@ -224,7 +222,7 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont public final <D extends DataDto, R extends DataDtoReference, E extends DataEntity, - T extends ObserveDaoQuerySupport & TopiaDao<E>> DataDtoEntityContext<D, R, E, T> fromDataReference(Class<R> referenceType) { + T extends ToolkitTopiaDao<E>> DataDtoEntityContext<D, R, E, T> fromDataReference(Class<R> referenceType) { Class<D> dtoType = ObserveReferenceDtoToDtoClassMapping.get().get(referenceType); return ObservePersistenceBusinessProject.fromDataDto(dtoType); } @@ -233,7 +231,7 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont public final <D extends DataDto, R extends DataDtoReference, E extends DataEntity, - T extends ObserveDaoQuerySupport & TopiaDao<E>> DataDtoEntityContext<D, R, E, T> fromDataDto(ToolkitIdDtoBean dtoType) { + T extends ToolkitTopiaDao<E>> DataDtoEntityContext<D, R, E, T> fromDataDto(ToolkitIdDtoBean dtoType) { @SuppressWarnings("unchecked") Class<D> type = (Class<D>) dtoType.getType(); return ObservePersistenceBusinessProject.fromDataDto(type); } @@ -243,7 +241,7 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont D extends OpenableDto, R extends DataDtoReference, E extends DataEntity, - T extends ObserveDaoQuerySupport & TopiaDao<E>> OpenableDtoEntityContext<PE, D, R, E, T> fromOpenableDto(Class<D> dtoType) { + T extends ToolkitTopiaDao<E>> OpenableDtoEntityContext<PE, D, R, E, T> fromOpenableDto(Class<D> dtoType) { return ObservePersistenceBusinessProject.fromOpenableDto(dtoType); } @@ -251,7 +249,7 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont public final <D extends RootOpenableDto, R extends DataDtoReference, E extends RootOpenableEntity, - T extends ObserveDaoQuerySupport & RootOpenableEntityDao<D, R, E> & TopiaDao<E>, + T extends ToolkitTopiaDao<E>, H extends DataGroupByReferentialHelper<D, R, E>> RootOpenableDtoEntityContext<D, R, E, T, H> fromRootOpenableDto(Class<D> dtoType) { return ObservePersistenceBusinessProject.fromRootOpenableDto(dtoType); } @@ -261,26 +259,24 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont D extends EditableDto, R extends DataDtoReference, E extends DataEntity, - T extends ObserveDaoQuerySupport & TopiaDao<E>> EditableDtoEntityContext<PE, D, R, E, T> fromEditableDto(Class<D> dtoType) { + T extends ToolkitTopiaDao<E>> EditableDtoEntityContext<PE, D, R, E, T> fromEditableDto(Class<D> dtoType) { return ObservePersistenceBusinessProject.fromEditableDto(dtoType); } @Override - public final <PE extends DataEntity, - D extends ContainerChildDto, - M extends ContainerDto<D>, + public final <C extends ContainerChildDto, + D extends ContainerDto<C>, R extends DataDtoReference, E extends DataEntity, - T extends ObserveDaoQuerySupport & TopiaDao<E>> ContainerDtoEntityContext<PE, D, M, R, E, T> fromContainerDto(Class<M> dtoType) { - Class<D> childDtoType = ObserveBusinessProject.get().getMapping().getDtoToFormDtoMapping().get(dtoType); - return ObservePersistenceBusinessProject.fromContainerDto(childDtoType); + T extends ToolkitTopiaDao<E>> ContainerDtoEntityContext<D, R, E, T> fromContainerDto(Class<D> dtoType) { + return ObservePersistenceBusinessProject.fromContainerDto(dtoType); } @Override public final <D extends SimpleDto, R extends DataDtoReference, E extends DataEntity, - T extends ObserveDaoQuerySupport & TopiaDao<E>> SimpleDtoEntityContext<D, R, E, T> fromSimpleDto(Class<D> dtoType) { + T extends ToolkitTopiaDao<E>> SimpleDtoEntityContext<D, R, E, T> fromSimpleDto(Class<D> dtoType) { return ObservePersistenceBusinessProject.fromSimpleDto(dtoType); } @@ -288,7 +284,7 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont public final <D extends ReferentialDto, R extends ReferentialDtoReference, E extends ReferentialEntity, - T extends ObserveDaoQuerySupport & TopiaDao<E>> ReferentialDtoEntityContext<D, R, E, T> fromReferentialDto(ToolkitIdDtoBean dtoType) { + T extends ToolkitTopiaDao<E>> ReferentialDtoEntityContext<D, R, E, T> fromReferentialDto(ToolkitIdDtoBean dtoType) { @SuppressWarnings("unchecked") Class<D> type = (Class<D>) dtoType.getType(); return ObservePersistenceBusinessProject.fromReferentialDto(type); } @@ -297,7 +293,7 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont public final <D extends ReferentialDto, R extends ReferentialDtoReference, E extends ReferentialEntity, - T extends ObserveDaoQuerySupport & TopiaDao<E>> ReferentialDtoEntityContext<D, R, E, T> fromReferentialDto(Class<D> dtoType) { + T extends ToolkitTopiaDao<E>> ReferentialDtoEntityContext<D, R, E, T> fromReferentialDto(Class<D> dtoType) { return ObservePersistenceBusinessProject.fromReferentialDto(dtoType); } @@ -305,7 +301,7 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont public final <D extends ReferentialDto, R extends ReferentialDtoReference, E extends ReferentialEntity, - T extends ObserveDaoQuerySupport & TopiaDao<E>> ReferentialDtoEntityContext<D, R, E, T> fromReferentialReference(Class<R> referenceType) { + T extends ToolkitTopiaDao<E>> ReferentialDtoEntityContext<D, R, E, T> fromReferentialReference(Class<R> referenceType) { Class<D> dtoType = ObserveReferenceDtoToDtoClassMapping.get().get(referenceType); return ObservePersistenceBusinessProject.fromReferentialDto(dtoType); } @@ -314,7 +310,7 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont public final <D extends RootOpenableDto, R extends DataDtoReference, E extends RootOpenableEntity, - T extends ObserveDaoQuerySupport & RootOpenableEntityDao<D, R, E> & TopiaDao<E>, + T extends ToolkitTopiaDao<E>, H extends DataGroupByReferentialHelper<D, R, E>, F extends DataGroupByEntity<E>, FF extends DataGroupByDto<D>> GroupBySpiContext<D, R, E, T, H, F, FF> fromGroupByName(String parentProperty) { @@ -334,8 +330,8 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont return validationContext; } - protected final void initPersistence(String methodName, Permission methodeCredentials) { - serviceContext.initPersistence(methodName, methodeCredentials); + protected final void initPersistence(String methodName) { + serviceContext.initPersistence(methodName, Permission.NONE); } public boolean initReadTransaction(String methodName, Permission methodeCredentials) { @@ -352,14 +348,6 @@ public abstract class ObserveServiceLocal implements ObserveService, ServiceCont } } - protected final ObserveTopiaPersistenceContext newReadTransaction(String methodName) { - return serviceContext.newReadTransaction(methodName); - } - - protected final ObserveTopiaPersistenceContext newWriteTransaction(String methodName) { - return serviceContext.newWriteTransaction(methodName); - } - protected final ObserveServiceInitializer getServiceInitializer() { return serviceContext.getServiceInitializer(); } ===================================== services/local/src/main/java/fr/ird/observe/services/local/service/data/ll/common/TripServiceLocalSupport.java ===================================== @@ -54,7 +54,7 @@ public abstract class TripServiceLocalSupport extends ObserveServiceLocal implem @Override public int getMatchingTripsVesselWithinDateRange(String tripId, String vesselId, Date startDate, Date endDate) { - return Trip.SPI.getDao(getTopiaPersistenceContext()).getMatchingTripsVesselWithinDateRange(tripId, vesselId, startDate, endDate); + return Trip.SPI.getMatchingTripsVesselWithinDateRange(this, tripId, vesselId, startDate, endDate); } @Override @@ -64,7 +64,7 @@ public abstract class TripServiceLocalSupport extends ObserveServiceLocal implem @Override public TripMapDto getTripMap(TripMapConfigDto config) { - return Trip.SPI.getTripMap(getTopiaPersistenceContext(), config); + return Trip.SPI.getTripMap(this, config); } public ReferentialDtoReferenceSet<SpeciesReference> getSpeciesByListAndTrip(String tripId, String speciesListId) { ===================================== services/local/src/main/java/fr/ird/observe/services/local/service/data/ps/common/TripServiceLocalSupport.java ===================================== @@ -47,7 +47,7 @@ public abstract class TripServiceLocalSupport extends ObserveServiceLocal implem @Override public int getMatchingTripsVesselWithinDateRange(String tripId, String vesselId, Date startDate, Date endDate) { - return Trip.SPI.getDao(getTopiaPersistenceContext()).getMatchingTripsVesselWithinDateRange(tripId, vesselId, startDate, endDate); + return Trip.SPI.getMatchingTripsVesselWithinDateRange(this, tripId, vesselId, startDate, endDate); } @Override @@ -62,7 +62,7 @@ public abstract class TripServiceLocalSupport extends ObserveServiceLocal implem @Override public TripMapDto getTripMap(TripMapConfigDto config) { - return Trip.SPI.getTripMap(getTopiaPersistenceContext(), config); + return Trip.SPI.getTripMap(this, config); } @Override ===================================== services/local/src/main/java/fr/ird/observe/services/local/service/internal/ContainerServiceLocalSupport.java ===================================== @@ -24,10 +24,8 @@ package fr.ird.observe.services.local.service.internal; import fr.ird.observe.dto.data.ContainerChildDto; import fr.ird.observe.dto.data.ContainerDto; -import fr.ird.observe.dto.data.ps.observation.SampleDto; import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.result.SaveResultDto; -import fr.ird.observe.entities.data.ps.observation.Sample; import fr.ird.observe.services.local.service.ObserveServiceLocal; import fr.ird.observe.services.service.internal.ContainerService; import fr.ird.observe.spi.context.ContainerDtoEntityContext; @@ -40,25 +38,16 @@ import fr.ird.observe.spi.context.ContainerDtoEntityContext; */ public class ContainerServiceLocalSupport extends ObserveServiceLocal implements ContainerService { - @SuppressWarnings("unchecked") @Override public <C extends ContainerChildDto, D extends ContainerDto<C>> Form<D> loadForm(Class<D> dtoType, String parentId) { - //FIXME Find a better way to do this - if (SampleDto.class.equals(dtoType)) { - return (Form<D>) Sample.SPI.loadForm(this, parentId); - } - ContainerDtoEntityContext<?, C, D, ?, ?, ?> spi = fromContainerDto(dtoType); + ContainerDtoEntityContext<D, ?, ?, ?> spi = fromContainerDto(dtoType); return spi.loadForm(this, parentId); } @Override public <C extends ContainerChildDto, D extends ContainerDto<C>> SaveResultDto save(D dto) { - //FIXME Find a better way to do this - if (dto instanceof SampleDto) { - return Sample.SPI.save(this, (SampleDto) dto); - } @SuppressWarnings("unchecked") Class<D> dtoType = (Class<D>) dto.getClass(); - ContainerDtoEntityContext<?, C, D, ?, ?, ?> spi = fromContainerDto(dtoType); + ContainerDtoEntityContext<D, ?, ?, ?> spi = fromContainerDto(dtoType); return spi.save(this, dto); } } ===================================== services/local/src/main/java/fr/ird/observe/services/local/service/internal/ValidateServiceLocalSupport.java ===================================== @@ -26,7 +26,6 @@ import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.dto.referential.ReferentialLocale; import fr.ird.observe.dto.referential.common.SpeciesDto; -import fr.ird.observe.entities.ObserveDaoQuerySupport; import fr.ird.observe.entities.data.DataEntity; import fr.ird.observe.entities.data.RootOpenableEntity; import fr.ird.observe.entities.referential.ReferentialEntity; @@ -124,7 +123,7 @@ public class ValidateServiceLocalSupport extends ObserveServiceLocal implements } private <D extends ReferentialDto, R extends ReferentialDtoReference, E extends ReferentialEntity> void validateReferential(Class<D> dtoType, ValidationMessageDetector detector, ServiceValidationContext validationContext) { - ReferentialDtoEntityContext<D, R, E, ? extends ObserveDaoQuerySupport> spi = this.fromReferentialDto(dtoType); + ReferentialDtoEntityContext<D, R, E, ?> spi = this.fromReferentialDto(dtoType); Class<E> type = spi.toEntityType(); List<E> entities = getTopiaPersistenceContext().loadEntities(type); validateReferential(dtoType, detector, validationContext, entities); ===================================== services/validation-spi/src/main/java/fr/ird/observe/validation/EntityInterceptors.java ===================================== @@ -28,8 +28,8 @@ import fr.ird.observe.dto.reference.DataDtoReference; import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.dto.referential.ReferentialLocale; import fr.ird.observe.entities.Entity; -import fr.ird.observe.entities.ObserveDaoQuerySupport; import fr.ird.observe.entities.ObserveEntityEnum; +import fr.ird.observe.entities.ToolkitTopiaDao; import fr.ird.observe.entities.data.DataEntity; import fr.ird.observe.navigation.select.ProjectSelectModel; import fr.ird.observe.spi.ObservePersistenceBusinessProject; @@ -38,7 +38,6 @@ import fr.ird.observe.toolkit.navigation.id.NavigationModelNode; import fr.ird.observe.toolkit.navigation.id.select.SelectNode; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.validator.bean.simple.SimpleBeanValidator; import java.util.LinkedHashMap; @@ -108,7 +107,7 @@ public class EntityInterceptors { interceptorsBuilder.put(ObserveEntityEnum.getImplementationClass(entityType), interceptor); } - static <D extends DataDto, R extends DataDtoReference, E extends DataEntity,T extends ObserveDaoQuerySupport & TopiaDao<E>> void toData(Class<D> dtoType, NavigationModelNode<D> consumer, Map<Class<?>, EntityInterceptor<?, ?, ?>> interceptorsBuilder, ValidatorsMap validators, ReferentialLocale referentialLocale) { + static <D extends DataDto, R extends DataDtoReference, E extends DataEntity, T extends ToolkitTopiaDao<E>> void toData(Class<D> dtoType, NavigationModelNode<D> consumer, Map<Class<?>, EntityInterceptor<?, ?, ?>> interceptorsBuilder, ValidatorsMap validators, ReferentialLocale referentialLocale) { SimpleBeanValidator<D> validator = validators.getValidator(dtoType); if (validator == null) { log.warn(String.format("Not a main type (%s), skip it", dtoType)); View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/90bb94b5aed2513062ec9133ec... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/90bb94b5aed2513062ec9133ec... You're receiving this email because of your account on gitlab.com.