[Git][ultreiaio/ird-observe][feature/issue-2846] 5 commits: [core-services-local] implements ReferentialService.save new method
Tony CHEMIT pushed to branch feature/issue-2846 at ultreiaio / ird-observe Commits: ef91c221 by Tony Chemit at 2024-09-30T17:22:19+02:00 [core-services-local] implements ReferentialService.save new method - - - - - 5df804a7 by Tony Chemit at 2024-09-30T17:22:19+02:00 [core-services-tests] adapt tests - - - - - 9f28eb6d by Tony Chemit at 2024-09-30T17:22:19+02:00 [ui] Introduce ContentReferentialUIModelStates.secondLevelUsages to keep second level usages - - - - - d36001f2 by Tony Chemit at 2024-09-30T17:22:19+02:00 [ui] Fill ContentReferentialUIModelStates.secondLevelUsages from ReferentialSavePredicate (to be used in the deactivate process) - - - - - 6584c596 by Tony Chemit at 2024-09-30T17:22:19+02:00 [ui] Review save action (using now the ExtraSaveRequest) - - - - - 9 changed files: - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/referential/ContentReferentialUIHandler.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/referential/ContentReferentialUIModelStates.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/referential/ReferentialSavePredicate.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/referential/usage/UsageForDesactivateUIHandler.java - core/persistence/java/src/main/java/fr/ird/observe/entities/referential/common/OceanSpi.java - core/services/local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocalSupport.java - core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultIssue2208Test.java - core/services/test/src/main/java/fr/ird/observe/services/service/referential/ReferentialServiceFixtures.java - toolkit/persistence/src/main/java/fr/ird/observe/spi/context/ReferentialDtoEntityContext.java Changes: ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/referential/ContentReferentialUIHandler.java ===================================== @@ -44,11 +44,11 @@ import fr.ird.observe.client.datasource.editor.api.content.referential.actions.S import fr.ird.observe.client.datasource.editor.api.content.referential.actions.ShowUsagesReferential; import fr.ird.observe.client.util.UIHelper; import fr.ird.observe.datasource.security.ConcurrentModificationException; -import fr.ird.observe.dto.ToolkitIdLabel; import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.dto.referential.ReferentialDtoReferenceWithNoCodeAware; import fr.ird.observe.services.service.SaveResultDto; +import fr.ird.observe.services.service.referential.ExtraSaveRequest; import io.ultreia.java4all.i18n.I18n; import io.ultreia.java4all.jaxx.widgets.list.ListHeader; import org.apache.logging.log4j.LogManager; @@ -284,14 +284,8 @@ public class ContentReferentialUIHandler<D extends ReferentialDto, R extends Ref } protected SaveResultDto doSave(D bean) throws ConcurrentModificationException { - ToolkitIdLabel replaceReference = getModel().getStates().getReplaceReference(); - if (replaceReference != null) { - String id = bean.getId(); - String replaceId = replaceReference.getId(); - log.info(String.format("Do replace reference before save (%s → %s)", id, replaceId)); - getReferentialService().replaceReference(getModel().getSource().getScope().getMainType(), id, replaceId); - } - SaveResultDto result = getReferentialService().save(bean); + ExtraSaveRequest request = getModel().getStates().toExtraSaveRequest(); + SaveResultDto result = getReferentialService().save(bean, request); bean.copy(getModel().getStates().getForm().getObject()); return result; } ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/referential/ContentReferentialUIModelStates.java ===================================== @@ -30,6 +30,7 @@ import fr.ird.observe.client.datasource.editor.api.content.ContentUIModel; import fr.ird.observe.client.datasource.editor.api.content.ContentUIModelStates; import fr.ird.observe.client.datasource.editor.api.content.actions.save.SavePredicate; import fr.ird.observe.client.util.init.DefaultUIInitializerResult; +import fr.ird.observe.dto.ToolkitIdBean; import fr.ird.observe.dto.ToolkitIdDtoBean; import fr.ird.observe.dto.ToolkitIdLabel; import fr.ird.observe.dto.form.Form; @@ -38,11 +39,20 @@ import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.dto.referential.ReferentialLocale; import fr.ird.observe.navigation.id.Project; import fr.ird.observe.services.ObserveServicesProvider; +import fr.ird.observe.services.service.referential.ExtraSaveRequest; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import javax.swing.ListModel; +import java.util.Collection; +import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; /** * Created on 30/10/2020. @@ -52,6 +62,7 @@ import java.util.Objects; */ public abstract class ContentReferentialUIModelStates<D extends ReferentialDto, R extends ReferentialDtoReference> extends ContentUIModelStates { public static final String PROPERTY_SELECTED_BEAN_REFERENCE = "selectedBeanReference"; + private static final Logger log = LogManager.getLogger(ContentReferentialUIModelStates.class); /** * Reference cache. */ @@ -67,6 +78,12 @@ public abstract class ContentReferentialUIModelStates<D extends ReferentialDto, private Form<D> form; private ToolkitIdLabel replaceReference; private ContentReferentialUI<D, R, ?> ui; + /** + * To keep the second level usages when necessary). + * + * @since 9.4.0 + */ + private Map<Class<? extends ReferentialDto>, Collection<ToolkitIdLabel>> secondLevelUsages; public ContentReferentialUIModelStates(ContentReferentialUIModel<D, R> model, D bean) { source = Objects.requireNonNull(model).getSource(); @@ -194,7 +211,45 @@ public abstract class ContentReferentialUIModelStates<D extends ReferentialDto, return mainType; } + public ExtraSaveRequest toExtraSaveRequest() { + ToolkitIdLabel replaceReference = getReplaceReference(); + if (replaceReference != null) { + String id = bean.getId(); + String replaceId = replaceReference.getId(); + log.info("Do replace reference before save ({} → {})", id, replaceId); + } + Map<Class<? extends ReferentialDto>, Set<String>> toDisableIds = getToDisableIds(); + if (toDisableIds != null) { + toDisableIds.forEach((k, v) -> log.info("Do disable references before save of type {} → {} id(s)", k, v.size())); + } + String replaceId = Optional.ofNullable(replaceReference).map(ToolkitIdBean::getId).orElse(null); + if (replaceId == null && toDisableIds == null) { + return null; + } + return new ExtraSaveRequest(replaceId, toDisableIds); + } + + private Map<Class<? extends ReferentialDto>, Set<String>> getToDisableIds() { + Map<Class<? extends ReferentialDto>, Collection<ToolkitIdLabel>> secondLevelUsages = getSecondLevelUsages(); + Map<Class<? extends ReferentialDto>, Set<String>> toDisableIds; + if (secondLevelUsages == null) { + toDisableIds = null; + } else { + toDisableIds = new LinkedHashMap<>(secondLevelUsages.size()); + secondLevelUsages.forEach((k, v) -> toDisableIds.put(k, v.stream().map(ToolkitIdBean::getId).collect(Collectors.toSet()))); + } + return toDisableIds; + } + public Class<R> mainReferenceType() { return mainReferenceType; } + + public Map<Class<? extends ReferentialDto>, Collection<ToolkitIdLabel>> getSecondLevelUsages() { + return secondLevelUsages; + } + + public void setSecondLevelUsages(Map<Class<? extends ReferentialDto>, Collection<ToolkitIdLabel>> secondLevelUsages) { + this.secondLevelUsages = secondLevelUsages; + } } ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/referential/ReferentialSavePredicate.java ===================================== @@ -24,16 +24,28 @@ package fr.ird.observe.client.datasource.editor.api.content.referential; import fr.ird.observe.client.datasource.editor.api.content.actions.save.SavePredicateSupport; import fr.ird.observe.client.datasource.editor.api.content.referential.usage.UsageForDesactivateUIHandler; +import fr.ird.observe.dto.BusinessDto; import fr.ird.observe.dto.ToolkitIdDtoBean; import fr.ird.observe.dto.ToolkitIdLabel; import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.dto.referential.ReferenceStatus; import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.services.service.UsageCount; +import fr.ird.observe.services.service.UsageCountWithLabel; import fr.ird.observe.services.service.UsageService; +import fr.ird.observe.services.service.referential.ObserveReferentialSecondLevelDeepBehaviourModel; +import fr.ird.observe.spi.module.ObserveBusinessProject; +import io.ultreia.java4all.i18n.I18n; import org.apache.commons.lang3.tuple.Pair; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import java.util.Collection; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; /** @@ -43,7 +55,7 @@ import java.util.stream.Collectors; * @since 9.0.0 */ public class ReferentialSavePredicate<D extends ReferentialDto, R extends ReferentialDtoReference, S extends ContentReferentialUIModelStates<D, R>> extends SavePredicateSupport<S,D> { - + private static final Logger log = LogManager.getLogger(ReferentialSavePredicate.class); public ReferentialSavePredicate(S states) { super(states); } @@ -66,26 +78,51 @@ public class ReferentialSavePredicate<D extends ReferentialDto, R extends Refere ToolkitIdDtoBean request = states.toUsageRequest(bean.getId()); UsageCount usages = usageService.countReferential(request); - if (!usages.isEmpty()) { - // some usages were found + if (usages.isEmpty()) { + return true; + } - // get replacements - List<R> referentialReferences = states.getReferentialReferences(); - List<R> referenceList = referentialReferences - .stream() - .filter(ReferentialDtoReference::isEnabled) - .filter(r -> !bean.getId().equals(r.getId())) - .collect(Collectors.toList()); + // some usages were found + UsageCountWithLabel realUsages = new UsageCountWithLabel(I18n.getDefaultLocale(), ObserveBusinessProject.get(), usages); + UsageForDesactivateUIHandler.DisableReferentialUsagesGetter getter = new UsageForDesactivateUIHandler.DisableReferentialUsagesGetter(realUsages, usageService, request); - ToolkitIdLabel dtoLabel = bean.toLabel(); - states.getDecoratorService().installToolkitIdLabelDecorator(bean.getClass(), dtoLabel); - Pair<Boolean, ToolkitIdLabel> result = UsageForDesactivateUIHandler.showUsages(usageService, dtoLabel, request, usages, referenceList.stream().map(ReferentialDtoReference::toLabel).collect(Collectors.toList())); - boolean willSave = result.getLeft(); - if (!willSave) { - return false; + ObserveReferentialSecondLevelDeepBehaviourModel referentialSecondLevelDeepBehaviourModel = ObserveReferentialSecondLevelDeepBehaviourModel.get(); + Map<Class<? extends ReferentialDto>, Collection<ToolkitIdLabel>> secondLevelUsages = new LinkedHashMap<>(); + Set<Class<? extends BusinessDto>> typesFound = usages.keySet(); + for (Class<? extends BusinessDto> type : typesFound) { + if (!ReferentialDto.class.isAssignableFrom(type) ) { + continue; } - states.setReplaceReference(result.getRight()); + @SuppressWarnings("unchecked") Class<? extends ReferentialDto> referentialType = (Class<? extends ReferentialDto>) type; + if (referentialSecondLevelDeepBehaviourModel.useSecondLevelDeepBehaviour(referentialType)) { + Collection<ToolkitIdLabel> toolkitIdLabels = getter.getUsages(type).get(); + log.info("Found second level type: {} - {} occurrence(s).", referentialType, toolkitIdLabels.size()); + secondLevelUsages.put(referentialType,toolkitIdLabels); + } + } + if (!secondLevelUsages.isEmpty()) { + states.setSecondLevelUsages(secondLevelUsages); + } + + // get replacements + List<R> referentialReferences = states.getReferentialReferences(); + List<ToolkitIdLabel> referenceList = referentialReferences + .stream() + .filter(ReferentialDtoReference::isEnabled) + .filter(r -> !Objects.equals(bean.getId(), r.getId())) + .map(ReferentialDtoReference::toLabel) + .collect(Collectors.toList()); + + ToolkitIdLabel dtoLabel = bean.toLabel(); + states.getDecoratorService().installToolkitIdLabelDecorator(bean.getClass(), dtoLabel); + Pair<Boolean, ToolkitIdLabel> result = UsageForDesactivateUIHandler.showUsages(dtoLabel, + getter, + referenceList); + boolean willSave = result.getLeft(); + if (!willSave) { + return false; } + states.setReplaceReference(result.getRight()); } return true; } ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/referential/usage/UsageForDesactivateUIHandler.java ===================================== @@ -29,12 +29,10 @@ import fr.ird.observe.client.util.init.UIInitHelper; import fr.ird.observe.dto.BusinessDto; import fr.ird.observe.dto.ToolkitIdDtoBean; import fr.ird.observe.dto.ToolkitIdLabel; -import fr.ird.observe.services.service.UsageCount; import fr.ird.observe.services.service.UsageCountWithLabel; import fr.ird.observe.services.service.UsageService; import fr.ird.observe.spi.module.ObserveBusinessProject; import io.ultreia.java4all.application.template.spi.GenerateTemplate; -import io.ultreia.java4all.i18n.I18n; import io.ultreia.java4all.jaxx.widgets.combobox.FilterableComboBox; import io.ultreia.java4all.jaxx.widgets.combobox.FilterableComboBoxModel; import io.ultreia.java4all.util.SingletonSupplier; @@ -85,15 +83,10 @@ public class UsageForDesactivateUIHandler extends UsageUIHandlerSupport<UsageFor } } - public static Pair<Boolean, ToolkitIdLabel> showUsages(UsageService usageService, - ToolkitIdLabel dto, - ToolkitIdDtoBean request, - UsageCount usages, + public static Pair<Boolean, ToolkitIdLabel> showUsages(ToolkitIdLabel dto, + DisableReferentialUsagesGetter getter, List<ToolkitIdLabel> referenceList) { ObserveBusinessProject businessProject = ObserveBusinessProject.get(); - UsageCountWithLabel realUsages = new UsageCountWithLabel(I18n.getDefaultLocale(), businessProject, usages); - DisableReferentialUsagesGetter getter = new DisableReferentialUsagesGetter(realUsages, usageService, request); - Class<? extends BusinessDto> dtoType = dto.getType(); String type = businessProject.getLongTitle(dtoType); String message = t("observe.ui.message.show.usage.referential.disabled", type, dto); ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/referential/common/OceanSpi.java ===================================== @@ -28,6 +28,7 @@ import fr.ird.observe.dto.referential.common.SpeciesReference; import fr.ird.observe.services.service.SaveResultDto; import fr.ird.observe.spi.result.AddEntityToUpdateStep; import fr.ird.observe.spi.service.ServiceContext; +import io.ultreia.java4all.util.sql.SqlScript; import java.util.LinkedHashSet; import java.util.List; @@ -54,7 +55,7 @@ public class OceanSpi extends GeneratedOceanSpi { } @Override - public SaveResultDto saveEntity(ServiceContext context, Ocean entity, OceanDto dto) { + public SaveResultDto saveEntity(ServiceContext context, Ocean entity, OceanDto dto, List<SqlScript> extraScripts) { Set<Species> speciesToUpdate = new LinkedHashSet<>(); Set<String> newSpeciesWithThisOceanIds = dto.getSpecies().stream().map(SpeciesReference::getId).collect(Collectors.toSet()); if (dto.isPersisted()) { @@ -87,6 +88,6 @@ public class OceanSpi extends GeneratedOceanSpi { for (Species species : speciesToUpdate) { update.update(Species.SPI, species); } - return update.build(entity); + return update.addExtraSqlScripts(extraScripts).build(entity); } -} //OceanSpi +} ===================================== core/services/local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocalSupport.java ===================================== @@ -31,6 +31,7 @@ import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet; import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.services.local.service.ObserveServiceLocal; import fr.ird.observe.services.service.SaveResultDto; +import fr.ird.observe.services.service.referential.ExtraSaveRequest; import fr.ird.observe.services.service.referential.ReferentialIds; import fr.ird.observe.services.service.referential.ReferentialService; import fr.ird.observe.spi.context.ReferentialDtoEntityContext; @@ -85,10 +86,10 @@ class ReferentialServiceLocalSupport extends ObserveServiceLocal implements Refe } @Override - public <D extends ReferentialDto> SaveResultDto save(D bean) throws ConcurrentModificationException { + public <D extends ReferentialDto> SaveResultDto save(D bean, ExtraSaveRequest extraSaveRequest) throws ConcurrentModificationException { @SuppressWarnings("unchecked") Class<D> type = (Class<D>) bean.getClass(); ReferentialDtoEntityContext<D, ?, ?, ?> spi = fromReferentialDto(type); - return spi.save(this, bean); + return spi.save(this, bean, extraSaveRequest); } @Override ===================================== core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultIssue2208Test.java ===================================== @@ -31,6 +31,7 @@ import fr.ird.observe.dto.referential.common.SpeciesDto; import fr.ird.observe.services.local.LocalTestClassResource; import fr.ird.observe.services.local.LocalTestMethodResourceWrite; import fr.ird.observe.services.local.service.ServiceLocalTestSupportWrite; +import fr.ird.observe.services.service.referential.ExtraSaveRequest; import fr.ird.observe.services.service.referential.ReferentialService; import fr.ird.observe.services.service.referential.ReferentialServiceFixtures; import fr.ird.observe.services.service.referential.SynchronizeEngine; @@ -121,7 +122,7 @@ public class UnidirectionalResultIssue2208Test extends ServiceLocalTestSupportWr centralSpecies.getOcean().add(ocean); TOPIA_TEST_CLASS_RESOURCE_CENTRAL.setGenerateNow(true); try { - centralReferentialService.save(centralSpecies); + centralReferentialService.save(centralSpecies, null); } finally { TOPIA_TEST_CLASS_RESOURCE_CENTRAL.setGenerateNow(false); } ===================================== core/services/test/src/main/java/fr/ird/observe/services/service/referential/ReferentialServiceFixtures.java ===================================== @@ -189,7 +189,7 @@ public class ReferentialServiceFixtures extends GeneratedReferentialServiceFixtu fr.ird.observe.dto.referential.ps.common.ProgramDto actual = service.loadDto(fr.ird.observe.dto.referential.ps.common.ProgramDto.class, getProperty("loadDto.id")); Assert.assertNotNull(actual); try { - SaveResultDto actualResult = service.save(actual); + SaveResultDto actualResult = service.save(actual, null); Assert.assertNotNull(actualResult); } catch (ConcurrentModificationException e) { throw new RuntimeException(e); ===================================== toolkit/persistence/src/main/java/fr/ird/observe/spi/context/ReferentialDtoEntityContext.java ===================================== @@ -40,6 +40,7 @@ import fr.ird.observe.entities.referential.I18nReferentialEntity; import fr.ird.observe.entities.referential.ReferentialEntity; import fr.ird.observe.services.service.SaveResultDto; import fr.ird.observe.services.service.UsageCount; +import fr.ird.observe.services.service.referential.ExtraSaveRequest; import fr.ird.observe.spi.referential.ReferentialExtraScripts; import fr.ird.observe.spi.service.ServiceContext; import fr.ird.observe.spi.usage.UsageHelper; @@ -52,10 +53,11 @@ import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaException; import org.nuiton.topia.service.sql.script.DeleteReferentialScript; import org.nuiton.topia.service.sql.script.DisableReferentialScript; -import org.nuiton.topia.service.sql.script.ReplaceReferentialInReferentialScript; import org.nuiton.topia.service.sql.script.ReplaceReferentialInDataScript; +import org.nuiton.topia.service.sql.script.ReplaceReferentialInReferentialScript; import org.nuiton.topia.service.sql.script.TopiaEntitySqlScript; +import java.sql.Timestamp; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; @@ -83,23 +85,22 @@ public abstract class ReferentialDtoEntityContext< private final SingletonSupplier<ReferentialExtraScripts<E>> extraScripts; - protected abstract TopiaEntitySqlScript loadSqlScript(); - - - protected abstract ReferentialExtraScripts<E> loadExtraScripts(); - public ReferentialDtoEntityContext() { this.extraScripts = SingletonSupplier.of(this::loadExtraScripts); } + protected abstract TopiaEntitySqlScript loadSqlScript(); + + protected abstract ReferentialExtraScripts<E> loadExtraScripts(); + @Override public Form<D> loadForm(ServiceContext context, String id) { E entity = loadEntity(context, id); return referentialEntityToForm(context.getReferentialLocale(), entity); } - public SaveResultDto saveEntity(ServiceContext context, E entity, D dto) { - return saveEntity(context, entity); + public SaveResultDto saveEntity(ServiceContext context, E entity, D dto, List<SqlScript> extraScripts) { + return newSaveHelper(context).update(this, entity).addExtraSqlScripts(extraScripts).build(entity); } public Optional<ReplaceReferentialInDataScript> getReplaceInDataScript() { @@ -261,6 +262,15 @@ public abstract class ReferentialDtoEntityContext< sqlScript.ifPresent(s -> context.getTopiaPersistenceContext().executeSqlScript(s)); } + public final Optional<SqlScript> replaceReferenceScript(ServiceContext context, String idToReplace, String replaceId, boolean replaceInReferential, boolean replaceInData) { + if (!replaceInReferential && !replaceInData) { + throw new IllegalStateException("Need at least one of the parameters *replaceInReferential* or *replaceInData* to be on."); + } + checkEntityExists(context, idToReplace); + checkEntityExists(context, replaceId); + return generateReplaceScript(idToReplace, replaceId, context.now(), replaceInReferential, replaceInData); + } + public final void changeId(ServiceContext context, String id, String newId) { checkEntityExists(context, id); log.info(String.format("will change id from %s to %s", id, newId)); @@ -284,11 +294,33 @@ public abstract class ReferentialDtoEntityContext< // delete(context, id); } - public final SaveResultDto save(ServiceContext context, D dto) throws ConcurrentModificationException { + public final SaveResultDto save(ServiceContext context, D dto, ExtraSaveRequest extraSaveRequest) throws ConcurrentModificationException { E entity = loadOrCreateEntityFromReferentialDto(context, dto); checkLastUpdateDate(context, entity, dto); + // if replace id is here, let's do the replacement in data (never replace in referential) + List<SqlScript> extraScripts = new ArrayList<>(); + if (extraSaveRequest != null) { + extraSaveRequest.getReplaceId().ifPresent(replaceId -> { + Optional<SqlScript> sqlScript = replaceReferenceScript(context, dto.getId(), replaceId, false, true); + sqlScript.ifPresent(extraScripts::add); + }); + Timestamp timestamp = context.timestampNow(); + extraSaveRequest.getToDisableIds().ifPresent(toDisableIds -> { + // if toDisableIds is here, let's do the disable actions + List<String> sqlStatements = new ArrayList<>(); + toDisableIds.forEach((k, v) -> { + ReferentialDtoEntityContext<? extends ReferentialDto, ?, ?, ?> spi2 = context.fromReferentialDto(k); + DisableReferentialScript disableScript = spi2.getDisableScript(); + v.forEach(id -> sqlStatements.addAll(disableScript.generate(id, timestamp))); + sqlStatements.addAll(spi2.updateLastUpdateDateTable(context.getTopiaPersistenceContext(), timestamp)); + }); + if (!sqlStatements.isEmpty()) { + extraScripts.add(SqlScript.of(String.join("\n", sqlStatements))); + } + }); + } fromDto(context.getReferentialLocale(), entity, dto); - return saveEntity(context, entity, dto); + return saveEntity(context, entity, dto, extraScripts); } private SqlScript generateDuplicateScript(ServiceContext context, String id, String newId) { @@ -357,10 +389,6 @@ public abstract class ReferentialDtoEntityContext< return toReference(context.getReferentialLocale(), entity); } - public final SaveResultDto saveEntity(ServiceContext context, E entity) { - return newSaveHelper(context).update(this, entity).build(entity); - } - public final UsageCount count(ServiceContext context, ToolkitIdDtoBean request) { ReferentialEntity entity = loadEntity(context, request.getId()); return newUsageHelper(context).count(entity); View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/b53964d3f24ee742dffdea6dc... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/b53964d3f24ee742dffdea6dc... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT (@tchemit)