Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 9db1191e by Tony CHEMIT at 2018-09-18T03:13:38Z update changelog - - - - - 5fc6822c by Tony CHEMIT at 2018-09-18T03:41:57Z La synchro avancée du référentiel listes d'espèces provoque une exception - Closes #1054 - - - - - 2b190843 by Tony CHEMIT at 2018-09-18T03:49:01Z Problème de timeout en RC18 en connexion serveur directe à Tomcat (pas de HTTPD) - See #1053 - - - - - 2affe04c by Tony CHEMIT at 2018-09-18T04:10:40Z Suppression de lignes de référentiel : liste de ceux qui plantent avec erreurs spécifiques - Closes #1052 - - - - - 4f2a89cb by Tony CHEMIT at 2018-09-18T04:11:22Z update pom - - - - - 5d1bdbe0 by Tony CHEMIT at 2018-09-18T04:11:59Z add more log when can not get Call.ParameterTree - - - - - f927feaf by Tony CHEMIT at 2018-09-18T04:12:21Z [PS][LL] La synchro avancée de marées plante - Closes #1050 - - - - - 9dbdf820 by Tony CHEMIT at 2018-09-18T04:13:15Z Problème de socket en RC18 en connexion serveur directe à Tomcat (pas de HTTPD) - Closes #1053 - - - - - 716da68e by Tony CHEMIT at 2018-09-18T04:15:33Z use last toolkit to fix topia generation - - - - - 7058994a by Tony CHEMIT at 2018-09-18T04:17:40Z fix entity binder - - - - - 3723f7dd by Tony CHEMIT at 2018-09-18T04:18:24Z [LL] La suppression d'une marée en mode serveur provoque une exception - Closes #1049 - - - - - 26 changed files: - + .mvn/gitlab-cache/milestones/647608-artifacts.json - .mvn/gitlab-cache/milestones/647608-issues.json - .mvn/gitlab-cache/milestones/647608.json - CHANGELOG.md - client/src/main/java/fr/ird/observe/client/ui/content/ref/ContentReferenceUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDeleteUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDesactivateUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDisplayUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageUIHandlerSupport.java - persistence/pom.xml - persistence/src/main/java/fr/ird/observe/binder/data/seine/NonTargetCatchEntityReferenceBinder.java - pom.xml - server/src/main/filtered-resources/mapping - server/src/main/java/fr/ird/observe/server/injector/ObserveDtoInjector.java - services-client/src/main/java/fr/ird/observe/services/client/ObserveRequestBuilder.java - + services-client/src/main/java/fr/ird/observe/services/client/actions/synchro/referential/diff/ReferentialSynchronizeDiffServiceClient.java - + services-client/src/main/java/fr/ird/observe/services/client/referential/ReferentialServiceClient.java - services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceLocal.java - services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocal.java - services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService.java - services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeService.java - services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequest.java - services/src/main/java/fr/ird/observe/services/service/data/NavigationService.java - services/src/main/java/fr/ird/observe/services/service/data/TripManagementService.java - services/src/main/java/fr/ird/observe/services/service/referential/ReferentialService.java - services/src/main/java/fr/ird/observe/services/service/sql/SqlScriptProducerService.java Changes: ===================================== .mvn/gitlab-cache/milestones/647608-artifacts.json ===================================== @@ -0,0 +1,12 @@ +[ + { + "name": "Application", + "filename": "observe-7.0-RC-20.zip", + "url": "https://ultreia.io/release/observe-7.0-RC-20.zip" + }, + { + "name": "Serveur", + "filename": "observe-7.0-RC-20.war", + "url": "https://ultreia.io/release/observe-7.0-RC-20.war" + } +] \ No newline at end of file ===================================== .mvn/gitlab-cache/milestones/647608-issues.json ===================================== The diff for this file was not included because it is too large. ===================================== .mvn/gitlab-cache/milestones/647608.json ===================================== @@ -4,5 +4,8 @@ "projectId": 2722779, "groupId": 0, "title": "7.0-RC-20", - "state": "active" + "description": "", + "dueDate": "Sep 18, 2018 2:00:00 AM", + "startDate": "Sep 17, 2018 2:00:00 AM", + "state": "closed" } \ No newline at end of file ===================================== CHANGELOG.md ===================================== @@ -1,6 +1,7 @@ # ObServe changelog * Author [Tony Chemit](mailto:dev@tchemit.fr) + * Last generated at 2018-09-18 04:46. * Last generated at 2018-09-16 22:22. ## Version [8.0-alpha-3](https://gitlab.com/ultreiaio/ird-observe/milestones/114) @@ -68,6 +69,23 @@ Premier lot du contrat IRD-2018-01-V8 * [[Evolution 922]](https://gitlab.com/ultreiaio/ird-observe/issues/922) **Ajoute le référentiel observe_common.DataQuality sur les données existantes** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) * [[Evolution 950]](https://gitlab.com/ultreiaio/ird-observe/issues/950) **Renommage de la classe seine.WeightCategory en seine.WeightCategorySeine** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) +## Version [7.0-RC-20](https://gitlab.com/ultreiaio/ird-observe/milestones/123) + +**Closed at 2018-09-18.** + +### Download +* [Application (observe-7.0-RC-20.zip)](https://ultreia.io/release/observe-7.0-RC-20.zip) +* [Serveur (observe-7.0-RC-20.war)](https://ultreia.io/release/observe-7.0-RC-20.war) + +### Issues + * [[Anomalie 1049]](https://gitlab.com/ultreiaio/ird-observe/issues/1049) **[LL] La suppression d'une marée en mode serveur provoque une exception** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Anomalie 1050]](https://gitlab.com/ultreiaio/ird-observe/issues/1050) **[PS][LL] La synchro avancée de marées plante** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Anomalie 1051]](https://gitlab.com/ultreiaio/ird-observe/issues/1051) **Suppression de lignes de référentiel : liste de ceux qui plantent avec erreur de type Dto** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Anomalie 1052]](https://gitlab.com/ultreiaio/ird-observe/issues/1052) **Suppression de lignes de référentiel : liste de ceux qui plantent avec erreurs spécifiques** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Anomalie 1053]](https://gitlab.com/ultreiaio/ird-observe/issues/1053) **Problème de socket en RC18 en connexion serveur directe à Tomcat (pas de HTTPD)** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Anomalie 1054]](https://gitlab.com/ultreiaio/ird-observe/issues/1054) **La synchro avancée du référentiel listes d'espèces provoque une exception** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Anomalie 1055]](https://gitlab.com/ultreiaio/ird-observe/issues/1055) **Suppression d'une référence "Equipement bateau" "Radio BLU" : erreur (RC20-SNAPSHOT)** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + ## Version [7.0-RC-19](https://gitlab.com/ultreiaio/ird-observe/milestones/122) **Closed at 2018-09-16.** @@ -144,12 +162,18 @@ Premier lot du contrat IRD-2018-01-V8 * [Serveur (observe-7.0-RC-15.war)](https://ultreia.io/release/observe-7.0-RC-15.war) ### Issues - * [[Anomalie 942]](https://gitlab.com/ultreiaio/ird-observe/issues/942) **Plantage base en sortie de l'outil de traduction** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) - * [[Anomalie 943]](https://gitlab.com/ultreiaio/ird-observe/issues/943) **Trouver une solution aux problèmes de fiabilité d'H2** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) - * [[Anomalie 959]](https://gitlab.com/ultreiaio/ird-observe/issues/959) **[PS][UI] Problème d'UI lors de la création d'activités** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) - * [[Evolution 944]](https://gitlab.com/ultreiaio/ird-observe/issues/944) **Make configurable FOB Form observed system to auto-add to activity** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) - * [[Evolution 948]](https://gitlab.com/ultreiaio/ird-observe/issues/948) **Improve FOB Form (when creating)** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) - * [[Evolution 949]](https://gitlab.com/ultreiaio/ird-observe/issues/949) **Optimisation des flux de données** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT) + * [[Anomalie 976]](https://gitlab.com/ultreiaio/ird-observe/issues/976) **Ecran de configuration du référentiel taille-taille : libellés** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Anomalie 977]](https://gitlab.com/ultreiaio/ird-observe/issues/977) **Ecran de configuration du référentiel taille-taille : petit souci de validation** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Anomalie 979]](https://gitlab.com/ultreiaio/ird-observe/issues/979) **Création de marée : focus forcé sur la carto** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Anomalie 980]](https://gitlab.com/ultreiaio/ird-observe/issues/980) **Equipement bateau : première frappe inhibée** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Anomalie 981]](https://gitlab.com/ultreiaio/ird-observe/issues/981) **Validation écran activité : erreur pas visible sur l'onglet caractéristiques** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Anomalie 984]](https://gitlab.com/ultreiaio/ird-observe/issues/984) **Gestion référentiel taille-taille : message de validation douteux** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Anomalie 986]](https://gitlab.com/ultreiaio/ird-observe/issues/986) **La conversion taille-taille ne fonctionne toujours pas** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Evolution 885]](https://gitlab.com/ultreiaio/ird-observe/issues/885) **[LL][PS] Possibilité de classer les tableaux de captures/échantillons** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Evolution 978]](https://gitlab.com/ultreiaio/ird-observe/issues/978) **Ecran de configuration du référentiel taille-taille : liste des relations existantes** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Evolution 983]](https://gitlab.com/ultreiaio/ird-observe/issues/983) **[PS] Placement des champs sur échantillon faune accessoire** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Evolution 985]](https://gitlab.com/ultreiaio/ird-observe/issues/985) **Gestion référentiel taille-taille : les enregistrements existants ne sont pas modifiables** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) + * [[Tâche 989]](https://gitlab.com/ultreiaio/ird-observe/issues/989) **Requêtes pour insertion préalable des systèmes observés 20, 21 et 22** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil) ## Version [7.0-RC-14](https://gitlab.com/ultreiaio/ird-observe/milestones/111) ===================================== client/src/main/java/fr/ird/observe/client/ui/content/ref/ContentReferenceUIHandler.java ===================================== @@ -36,6 +36,7 @@ import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper; import fr.ird.observe.dto.decoration.decorators.ReferentialReferenceDecorator; import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.form.FormDefinition; +import fr.ird.observe.dto.reference.DtoReference; import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.dto.referential.I18nReferentialDto; import fr.ird.observe.dto.referential.ProgramDto; @@ -49,8 +50,8 @@ import fr.ird.observe.spi.DtoModelHelper; import fr.ird.observe.spi.map.ImmutableSetDtoMap; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.runtime.swing.CardLayout2Ext; import org.nuiton.jaxx.validator.swing.SwingValidatorUtil; @@ -121,7 +122,7 @@ public class ContentReferenceUIHandler<D extends ReferentialDto, R extends Refer } private static <E extends ReferentialDto, R extends ReferentialDtoReference<E, R>> Pair<Boolean, R> showUsagesForDelete(E entity, - ImmutableSetDtoMap<ReferentialDtoReference> usages, + ImmutableSetDtoMap<DtoReference> usages, List<R> referenceList) { DecoratorService service = ObserveSwingApplicationContext.get().getDecoratorService(); @@ -160,7 +161,7 @@ public class ContentReferenceUIHandler<D extends ReferentialDto, R extends Refer } private static <E extends ReferentialDto, R extends ReferentialDtoReference<E, R>> Pair<Boolean, R> showUsagesForDesactivated(E entity, - ImmutableSetDtoMap<ReferentialDtoReference> usages, + ImmutableSetDtoMap<DtoReference> usages, List<R> referenceList) { DecoratorService service = ObserveSwingApplicationContext.get().getDecoratorService(); @@ -372,7 +373,7 @@ public class ContentReferenceUIHandler<D extends ReferentialDto, R extends Refer } // recherche des utilisation du bean dans la base - ImmutableSetDtoMap<ReferentialDtoReference> usages = getReferentialService().findAllUsages(bean); + ImmutableSetDtoMap<DtoReference> usages = getReferentialService().findAllUsages(bean); DecoratorService dService = getDecoratorService(); Decorator<D> decorator = dService.getDecoratorByType(getBeanType()); @@ -671,7 +672,7 @@ public class ContentReferenceUIHandler<D extends ReferentialDto, R extends Refer log.debug("entity status was desactivated, looking for usage"); } - ImmutableSetDtoMap<ReferentialDtoReference> usages = getReferentialService().findAllUsages(bean); + ImmutableSetDtoMap<DtoReference> usages = getReferentialService().findAllUsages(bean); if (usages.isEmpty()) { if (log.isInfoEnabled()) { @@ -745,7 +746,7 @@ public class ContentReferenceUIHandler<D extends ReferentialDto, R extends Refer } // recherche des utilisation du bean dans la base - ImmutableSetDtoMap<ReferentialDtoReference> usages = getReferentialService().findAllUsages(bean); + ImmutableSetDtoMap<DtoReference> usages = getReferentialService().findAllUsages(bean); R replaceReference = null; ===================================== client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDeleteUI.jaxx ===================================== @@ -26,6 +26,7 @@ Interface graphique pour afficher la liste des usages d'une entitee donnee. <import> fr.ird.observe.spi.map.ImmutableSetDtoMap + fr.ird.observe.dto.reference.DtoReference fr.ird.observe.dto.reference.ReferentialDtoReference org.nuiton.jaxx.runtime.context.JAXXInitialContext org.nuiton.jaxx.widgets.select.BeanFilterableComboBox @@ -36,7 +37,7 @@ Interface graphique pour afficher la liste des usages d'une entitee donnee. <script><![CDATA[ -public static <R extends ReferentialDtoReference> UsageForDeleteUI<R> build(String message, ImmutableSetDtoMap<ReferentialDtoReference> usages, List references) { +public static <R extends ReferentialDtoReference> UsageForDeleteUI<R> build(String message, ImmutableSetDtoMap<? extends DtoReference> usages, List references) { return new UsageForDeleteUI<>(new JAXXInitialContext().add(message).add(usages).add(references)); } ===================================== client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDesactivateUI.jaxx ===================================== @@ -24,6 +24,7 @@ Interface graphique pour afficher la liste des usages d'une entitee donnee. <JPanel layout='{new BorderLayout()}' genericType="R extends ReferentialDtoReference"> <import> + fr.ird.observe.dto.reference.DtoReference fr.ird.observe.dto.reference.ReferentialDtoReference fr.ird.observe.spi.map.ImmutableSetDtoMap @@ -36,7 +37,7 @@ Interface graphique pour afficher la liste des usages d'une entitee donnee. <script><![CDATA[ -public static <R extends ReferentialDtoReference> UsageForDesactivateUI<R> build(String message, ImmutableSetDtoMap<ReferentialDtoReference> usages, List references) { +public static <R extends ReferentialDtoReference> UsageForDesactivateUI<R> build(String message, ImmutableSetDtoMap<? extends DtoReference> usages, List references) { return new UsageForDesactivateUI<>(new JAXXInitialContext().add(message).add(usages).add(references)); } ===================================== client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageForDisplayUI.jaxx ===================================== @@ -25,6 +25,7 @@ Interface graphique pour afficher la liste des usages d'une entitee donnee. <import> + fr.ird.observe.dto.reference.DtoReference fr.ird.observe.dto.reference.ReferentialDtoReference fr.ird.observe.spi.map.ImmutableSetDtoMap org.nuiton.jaxx.runtime.context.JAXXInitialContext @@ -34,7 +35,7 @@ Interface graphique pour afficher la liste des usages d'une entitee donnee. <script><![CDATA[ -public static <R extends ReferentialDtoReference> UsageForDisplayUI<R> build(String message, ImmutableSetDtoMap<ReferentialDtoReference> usages) { +public static <R extends ReferentialDtoReference> UsageForDisplayUI<R> build(String message, ImmutableSetDtoMap<? extends DtoReference> usages) { return new UsageForDisplayUI<>(new JAXXInitialContext().add(message).add(usages)); } ===================================== client/src/main/java/fr/ird/observe/client/ui/content/ref/usage/UsageUIHandlerSupport.java ===================================== @@ -24,9 +24,11 @@ package fr.ird.observe.client.ui.content.ref.usage; import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.dto.IdDto; +import fr.ird.observe.dto.data.DataDto; import fr.ird.observe.dto.decoration.DecoratorService; import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper; import fr.ird.observe.dto.decoration.decorators.ReferentialReferenceDecorator; +import fr.ird.observe.dto.reference.DataDtoReference; import fr.ird.observe.dto.reference.DtoReference; import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.dto.referential.ReferentialDto; @@ -91,9 +93,12 @@ public abstract class UsageUIHandlerSupport<R extends ReferentialDtoReference, U Set references = usages.get(dtoType); String typeTitle = t(ObserveI18nDecoratorHelper.getTypeI18nKey(dtoType)); addReferentialReferenceUsages(dtoType, references, typeTitle); - } - + for (Class<? extends DataDtoReference> dtoType : usages.dataReferenceTypes()) { + Set references = usages.get(dtoType); + String typeTitle = t(ObserveI18nDecoratorHelper.getTypeI18nKey(dtoType)); + addDataReferenceUsages(dtoType, references, typeTitle); + } } BeanFilterableComboBox<R> comboBox = getReplace(); @@ -119,18 +124,18 @@ public abstract class UsageUIHandlerSupport<R extends ReferentialDtoReference, U }); } -// protected <D extends DataDto, R extends DataDtoReference<D, R>> void addDataReferenceUsages(Class<R> dtoType, -// Set<R> references, -// String typeTitle) { -// -// String typetitle = n("observe.common.Dto.label.usage.data.title"); -// typetitle = t(typetitle, typeTitle, references.size()); -// -// Decorator<?> decorator = ObserveSwingApplicationContext.get().getDecoratorService().getDataReferenceDecorator(dtoType); -// Objects.requireNonNull(decorator, "could not find decorator for type " + dtoType); -// -// buildUsagePanel(decorator, references, typetitle); -// } + protected <D extends DataDto, R extends DataDtoReference<D, R>> void addDataReferenceUsages(Class<R> dtoType, + Set<R> references, + String typeTitle) { + + String typetitle = n("observe.common.Dto.label.usage.data.title"); + typetitle = t(typetitle, typeTitle, references.size()); + + Decorator<?> decorator = ObserveSwingApplicationContext.get().getDecoratorService().getDataReferenceDecorator(dtoType); + Objects.requireNonNull(decorator, "could not find decorator for type " + dtoType); + + buildUsagePanel(decorator, references, typetitle); + } protected <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>> void addReferentialReferenceUsages(Class<R> referenceType, ===================================== persistence/pom.xml ===================================== @@ -264,6 +264,7 @@ <input>friend:target/models:*.model</input> </inputs> <templates> + org.nuiton.topia.templates.TopiaEntityDaoTransformer, org.nuiton.topia.templates.TopiaMetaTransformer, org.nuiton.topia.templates.TopiaMetadataModelGenerator </templates> ===================================== persistence/src/main/java/fr/ird/observe/binder/data/seine/NonTargetCatchEntityReferenceBinder.java ===================================== @@ -28,6 +28,8 @@ import fr.ird.observe.dto.data.seine.NonTargetCatchReference; import fr.ird.observe.dto.referential.ReferentialLocale; import fr.ird.observe.entities.seine.NonTargetCatch; +import java.util.Optional; + /** * Created on 24/11/15. * @@ -41,9 +43,8 @@ public class NonTargetCatchEntityReferenceBinder extends DataEntityReferenceBind @Override public NonTargetCatchReference toReference(ReferentialLocale referentialLocale, NonTargetCatch entity) { - return new NonTargetCatchReference(entity, entity.getSpecies().getScientificLabel(), - entity.getSpeciesFate().getLabel(referentialLocale)); + Optional.ofNullable(entity.getSpeciesFate()).map(e->e.getLabel(referentialLocale)).orElse(null)); } } ===================================== pom.xml ===================================== @@ -26,7 +26,7 @@ <parent> <groupId>io.ultreia.maven</groupId> <artifactId>pom</artifactId> - <version>2018.52</version> + <version>2018.54</version> </parent> <groupId>fr.ird.observe</groupId> @@ -152,13 +152,13 @@ <maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format> <buildDate>${maven.build.timestamp}</buildDate> - <observeToolkitVersion>4.3</observeToolkitVersion> + <observeToolkitVersion>4.4-SNAPSHOT</observeToolkitVersion> <!--<lib.version.java4all.topia>1.1.1</lib.version.java4all.topia>--> <!--<lib.version.java4all.eugene>3.0-alpha-22</lib.version.java4all.eugene>--> <!--<lib.version.java4all.jaxx>3.0-alpha-35</lib.version.java4all.jaxx>--> <!--<lib.version.nuiton.topia>3.4.2-SNAPSHOT</lib.version.nuiton.topia>--> + <!--<lib.version.java4all.topia>1.1.3</lib.version.java4all.topia>--> <lib.version.nuiton.validation>3.1</lib.version.nuiton.validation> - <lib.version.java4all.topia>1.1.3</lib.version.java4all.topia> <xworkVersion>2.3.35</xworkVersion> <!--<lib.version.hibernate>5.2.10.Final</lib.version.hibernate>--> <!--can't use 1.4.197 (date has changed + blob also--> ===================================== server/src/main/filtered-resources/mapping ===================================== @@ -270,7 +270,7 @@ POST /api/v1/data/seine/TripSeineService/save POST /api/v1/referential/ReferentialService/computeMissingReferential v1.referential.ReferentialServiceRestApi.computeMissingReferential DELETE /api/v1/referential/ReferentialService/delete v1.referential.ReferentialServiceRestApi.delete GET /api/v1/referential/ReferentialService/exists v1.referential.ReferentialServiceRestApi.exists -GET /api/v1/referential/ReferentialService/findAllUsages v1.referential.ReferentialServiceRestApi.findAllUsages +POST /api/v1/referential/ReferentialService/findAllUsages v1.referential.ReferentialServiceRestApi.findAllUsages GET /api/v1/referential/ReferentialService/getReferenceSet v1.referential.ReferentialServiceRestApi.getReferenceSet POST /api/v1/referential/ReferentialService/getReferentialIds v1.referential.ReferentialServiceRestApi.getReferentialIds GET /api/v1/referential/ReferentialService/getReferentialReferenceSets v1.referential.ReferentialServiceRestApi.getReferentialReferenceSets ===================================== server/src/main/java/fr/ird/observe/server/injector/ObserveDtoInjector.java ===================================== @@ -27,8 +27,8 @@ import com.google.gson.JsonParseException; import fr.ird.observe.dto.ObserveDto; import io.ultreia.java4all.http.HRestClientService; import org.apache.commons.beanutils.converters.AbstractConverter; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.debux.webmotion.server.call.Call; import org.debux.webmotion.server.handler.ExecutorParametersInjectorHandler; import org.debux.webmotion.server.mapping.Mapping; @@ -58,7 +58,13 @@ public class ObserveDtoInjector extends AbstractConverter implements ExecutorPar ObserveDto observeDto = null; if (ObserveDto.class.isAssignableFrom(type)) { - Call.ParameterTree parameterTree = call.getParameterTree().getObject().get(name); + Call.ParameterTree parameterTree; + try { + parameterTree = call.getParameterTree().getObject().get(name); + } catch (RuntimeException e) { + log.error(String.format("Could not get parameterTree for mapping: %s, call: %s - name: %s, type: %s", mapping, call, name, type), e); + throw e; + } String gsonContent = ((String[]) parameterTree.getValue())[0]; ===================================== services-client/src/main/java/fr/ird/observe/services/client/ObserveRequestBuilder.java ===================================== @@ -53,6 +53,7 @@ public class ObserveRequestBuilder extends HRequestBuilder { super.checkBeforeBuild(); setTimeout(TimeUnit.MINUTES, serviceContext.getInitializer().getHttpTimeout()); + setSocketTimeout(TimeUnit.MINUTES, serviceContext.getInitializer().getHttpTimeout()); if (serviceContext.withApplicationLocale()) { addHeader(REQUEST_APPLICATION_LOCALE, serviceContext.getApplicationLocale().toString()); ===================================== services-client/src/main/java/fr/ird/observe/services/client/actions/synchro/referential/diff/ReferentialSynchronizeDiffServiceClient.java ===================================== @@ -0,0 +1,43 @@ +package fr.ird.observe.services.client.actions.synchro.referential.diff; + +/*- + * #%L + * ObServe :: Services client implementation + * %% + * Copyright (C) 2008 - 2018 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 com.google.common.collect.ImmutableSet; +import fr.ird.observe.dto.referential.ReferentialDto; +import org.apache.http.HttpStatus; + +import java.util.concurrent.TimeUnit; + +public class ReferentialSynchronizeDiffServiceClient extends GeneratedReferentialSynchronizeDiffServiceClient { + + @Override + public <R extends ReferentialDto> ImmutableSet<R> getReferential(Class<R> referentialName, ImmutableSet<String> ids) { + return executeRequest(create("getReferential") + .addParameter("referentialName", referentialName) + .addParameter("ids", ids, String.class) + .addAuthToken() + .setTimeout(TimeUnit.MINUTES, 1) + .post(), HttpStatus.SC_OK).toImmutableSet(referentialName); + } + +} \ No newline at end of file ===================================== services-client/src/main/java/fr/ird/observe/services/client/referential/ReferentialServiceClient.java ===================================== @@ -0,0 +1,44 @@ +package fr.ird.observe.services.client.referential; + +/*- + * #%L + * ObServe :: Services client implementation + * %% + * Copyright (C) 2008 - 2018 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.reference.ReferentialDtoReference; +import fr.ird.observe.dto.referential.ReferentialDto; +import fr.ird.observe.spi.DtoModelHelper; +import org.apache.http.HttpStatus; + +import java.util.concurrent.TimeUnit; + +public class ReferentialServiceClient extends GeneratedReferentialServiceClient { + + @Override + public <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>> R loadReference(Class<D> type, String id) { + Class<R> rrClass = DtoModelHelper.fromReferentialDto(type).toReferenceType(); + return executeRequest(create("loadReference") + .addParameter("type", type) + .addParameter("id", id) + .addAuthToken() + .setTimeout(TimeUnit.MINUTES, 1) + .get(), HttpStatus.SC_OK).toJson(rrClass); + } +} \ No newline at end of file ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceLocal.java ===================================== @@ -56,13 +56,19 @@ public class ReferentialSynchronizeServiceLocal extends ObserveServiceLocal impl public void executeSqlsRequests(ReferentialSynchronizeSqlsRequest request, ReferentialSynchronizeSqlsRequest oppositeSqlsRequest) { long startTime = TimeLog.getTime(); - + byte[] deleteAssociationSqlCode = request.getDeleteAssociationSqlCode(); byte[] insertSqlCode = oppositeSqlsRequest.getInsertSqlCode(); + byte[] insertAssociationSqlCode = oppositeSqlsRequest.getInsertAssociationSqlCode(); byte[] updateSqlCode = oppositeSqlsRequest.getUpdateSqlCode(); byte[] deleteSqlCode = request.getDeleteSqlCode(); byte[] desactivateSqlCode = request.getDesactivateSqlCode(); - getTopiaPersistenceContext().executeSqlScripts(insertSqlCode, updateSqlCode, desactivateSqlCode, deleteSqlCode); + getTopiaPersistenceContext().executeSqlScripts(deleteAssociationSqlCode, + insertSqlCode, + insertAssociationSqlCode, + updateSqlCode, + desactivateSqlCode, + deleteSqlCode); timeLog.log(startTime, "executeSqlsRequests"); ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocal.java ===================================== @@ -10,12 +10,12 @@ package fr.ird.observe.services.local.service.referential; * 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>. @@ -25,11 +25,16 @@ package fr.ird.observe.services.local.service.referential; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import fr.ird.observe.binder.data.DataEntityReferenceBinderSupport; import fr.ird.observe.binder.referential.ReferentialEntityDtoBinderSupport; import fr.ird.observe.binder.referential.ReferentialEntityReferenceBinderSupport; import fr.ird.observe.dto.IdDto; +import fr.ird.observe.dto.data.DataDto; import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.form.FormDefinition; +import fr.ird.observe.dto.reference.DataDtoReference; +import fr.ird.observe.dto.reference.DataDtoReferenceSet; +import fr.ird.observe.dto.reference.DtoReference; import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet; import fr.ird.observe.dto.referential.ReferenceStatus; @@ -39,6 +44,7 @@ import fr.ird.observe.dto.referential.SpeciesGroupDto; import fr.ird.observe.dto.referential.seine.ObservedSystemReference; import fr.ird.observe.dto.result.SaveResultDto; import fr.ird.observe.entities.EntityMap; +import fr.ird.observe.entities.ObserveDataEntity; import fr.ird.observe.entities.longline.TripLongline; import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; import fr.ird.observe.entities.referentiel.Species; @@ -59,13 +65,14 @@ import fr.ird.observe.services.service.sql.SqlScriptProducerService; import fr.ird.observe.spi.DbModelHelper; import fr.ird.observe.spi.DtoModelClasses; import fr.ird.observe.spi.DtoModelHelper; +import fr.ird.observe.spi.context.DataEntityContext; import fr.ird.observe.spi.context.ReferentialDtoEntityContext; import fr.ird.observe.spi.context.ReferentialEntityContext; import fr.ird.observe.spi.context.ReferentialReferenceEntityContext; import fr.ird.observe.spi.map.ImmutableDtoMap; import fr.ird.observe.spi.map.ImmutableSetDtoMap; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.metadata.TopiaMetadataModel; @@ -208,7 +215,7 @@ public class ReferentialServiceLocal extends ObserveServiceLocal implements Refe } @Override - public <D extends ReferentialDto> ImmutableSetDtoMap<ReferentialDtoReference> findAllUsages(D bean) { + public <D extends ReferentialDto> ImmutableSetDtoMap<DtoReference> findAllUsages(D bean) { ReferentialDtoEntityContext<D, ?, ?> spi = DbModelHelper.fromReferentialDto(bean); Class<ObserveReferentialEntity> entityType = spi.toEntityType(); @@ -218,12 +225,14 @@ public class ReferentialServiceLocal extends ObserveServiceLocal implements Refe TopiaDao<ObserveReferentialEntity> dao = getTopiaPersistenceContext().getDao(entityType); EntityMap allUsages = new EntityMap(dao.findAllUsages(entity)); - ImmutableSetDtoMap.Builder<ReferentialDtoReference> result = ImmutableSetDtoMap.builder(); + ImmutableSetDtoMap.Builder<DtoReference> result = ImmutableSetDtoMap.builder(); for (Class<? extends TopiaEntity> type : allUsages.keySet()) { List<? extends TopiaEntity> entities = allUsages.get(type); if (ObserveReferentialEntity.class.isAssignableFrom(type)) { //noinspection unchecked - findAllUsageReferential(DbModelHelper.fromReferentialEntity((Class) type), (List) entities, result); + addAllReferentialUsage(DbModelHelper.fromReferentialEntity((Class) type), (List) entities, result); + } else { + adddAllDataUsage(DbModelHelper.fromDataEntity((Class) type), (List) entities, result); } } return result.build(); @@ -242,13 +251,20 @@ public class ReferentialServiceLocal extends ObserveServiceLocal implements Refe return result; } - private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void findAllUsageReferential(ReferentialEntityContext<D, R, E> spi, List<E> entities, ImmutableSetDtoMap.Builder<ReferentialDtoReference> result) { + private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void addAllReferentialUsage(ReferentialEntityContext<D, R, E> spi, List<E> entities, ImmutableSetDtoMap.Builder<DtoReference> result) { Class<R> referenceType = spi.toReferenceType(); ReferentialEntityReferenceBinderSupport<D, R, E> binder = spi.toEntityReferenceBinder(); ReferentialDtoReferenceSet<R> referenceSet = toReferentialReferenceSet(binder, entities, null); result.put(referenceType, referenceSet.toSet()); } + private <D extends DataDto, R extends DataDtoReference<D, R>, E extends ObserveDataEntity> void adddAllDataUsage(DataEntityContext<D, R, E> spi, List<E> entities, ImmutableSetDtoMap.Builder<DtoReference> result) { + Class<R> referenceType = spi.toReferenceType(); + DataEntityReferenceBinderSupport<D, R, E> binder = spi.toEntityReferenceBinder(); + DataDtoReferenceSet<R> referenceSet = toDataReferenceSet(binder, entities); + result.put(referenceType, referenceSet.toSet()); + } + @Override public <D extends ReferentialDto> boolean exists(Class<D> type, String id) { if (log.isTraceEnabled()) { ===================================== services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService.java ===================================== @@ -87,7 +87,7 @@ public interface UnidirectionalReferentialSynchronizeLocalService extends Observ //tc-20160713 On ne met pas cette permission, car il s'agit d'appliquer un script sql, sans avoir besoin des droits applicatifs // @WriteReferentialPermission @Write - @Post + @Post(useMultiPartForm = true) void applySqlRequests(ImmutableSet<String> sqlRequests); @ReadReferentialPermission ===================================== services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeService.java ===================================== @@ -40,7 +40,7 @@ public interface ReferentialSynchronizeService extends ObserveService { // Note : sur cette méthode aucun droit métier à poser, les actions sont légitimes @Write - @Post + @Post(useMultiPartForm = true) void executeSqlsRequests(ReferentialSynchronizeSqlsRequest localSqlsRequest, ReferentialSynchronizeSqlsRequest oppositeSqlsRequest); } ===================================== services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequest.java ===================================== @@ -10,12 +10,12 @@ package fr.ird.observe.services.service.actions.synchro.referential.ng; * 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>. @@ -23,8 +23,8 @@ package fr.ird.observe.services.service.actions.synchro.referential.ng; */ import fr.ird.observe.dto.ObserveDto; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; /** * Created on 08/08/16. @@ -37,18 +37,24 @@ public class ReferentialSynchronizeSqlsRequest implements ObserveDto { /** Logger. */ private static final Logger log = LogManager.getLogger(ReferentialSynchronizeSqlsRequest.class); + private final byte[] insertAssociationSqlCode; private final byte[] insertSqlCode; private final byte[] updateSqlCode; + private final byte[] deleteAssociationSqlCode; private final byte[] deleteSqlCode; private final byte[] desactivateSqlCode; private ReferentialSynchronizeSqlsRequest(String insertSqlCode, + String insertAssociationSqlCode, String updateSqlCode, String deleteSqlCode, + String deleteAssociationSqlCode, String desactivateSqlCode) { this.insertSqlCode = insertSqlCode.getBytes(); + this.insertAssociationSqlCode = insertAssociationSqlCode.getBytes(); this.updateSqlCode = updateSqlCode.getBytes(); this.deleteSqlCode = deleteSqlCode.getBytes(); + this.deleteAssociationSqlCode = deleteAssociationSqlCode.getBytes(); this.desactivateSqlCode = desactivateSqlCode.getBytes(); } @@ -68,21 +74,33 @@ public class ReferentialSynchronizeSqlsRequest implements ObserveDto { return deleteSqlCode; } + public byte[] getInsertAssociationSqlCode() { + return insertAssociationSqlCode; + } + + public byte[] getDeleteAssociationSqlCode() { + return deleteAssociationSqlCode; + } + public byte[] getDesactivateSqlCode() { return desactivateSqlCode; } public static class Builder { + private final StringBuilder addAssociationTasksBuilder = new StringBuilder(); private final StringBuilder addTasksBuilder = new StringBuilder(); private final StringBuilder updateTasksBuilder = new StringBuilder(); private final StringBuilder deleteTasksBuilder = new StringBuilder(); + private final StringBuilder deleteAssociationTasksBuilder = new StringBuilder(); private final StringBuilder desactivateTasksBuilder = new StringBuilder(); public ReferentialSynchronizeSqlsRequest build() { return new ReferentialSynchronizeSqlsRequest(addTasksBuilder.toString(), + addAssociationTasksBuilder.toString(), updateTasksBuilder.toString(), deleteTasksBuilder.toString(), + deleteAssociationTasksBuilder.toString(), desactivateTasksBuilder.toString()); } @@ -90,7 +108,11 @@ public class ReferentialSynchronizeSqlsRequest implements ObserveDto { if (log.isInfoEnabled()) { log.info("Add add sql: " + sql); } - addTasksBuilder.append(sql); + if (sql.startsWith("$$_INSERT")) { + addAssociationTasksBuilder.append(sql.substring(3)); + } else { + addTasksBuilder.append(sql); + } return this; } @@ -107,7 +129,11 @@ public class ReferentialSynchronizeSqlsRequest implements ObserveDto { if (log.isInfoEnabled()) { log.info("Add delete sql: " + sql); } - deleteTasksBuilder.append(sql); + if (sql.startsWith("$$_DELETE")) { + deleteAssociationTasksBuilder.append(sql.substring(3)); + } else { + deleteTasksBuilder.append(sql); + } return this; } ===================================== services/src/main/java/fr/ird/observe/services/service/data/NavigationService.java ===================================== @@ -35,7 +35,7 @@ import io.ultreia.java4all.http.spi.Get; */ public interface NavigationService extends ObserveService { - @Get + @Get(useMultiPartForm = true) NavigationResult getNavigation(NavigationRequest request); @Get ===================================== services/src/main/java/fr/ird/observe/services/service/data/TripManagementService.java ===================================== @@ -10,12 +10,12 @@ package fr.ird.observe.services.service.data; * 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>. @@ -39,16 +39,16 @@ public interface TripManagementService extends ObserveService { @ReadDataPermission @ReadReferentialPermission - @Post(timeOut = 120) + @Post(timeOut = 120, useMultiPartForm = true) ExportTripResult exportTrip(ExportTripRequest exportRequest); @WriteDataPermission - @Post(timeOut = 120) + @Post(timeOut = 120, useMultiPartForm = true) @Write DeleteTripResult deleteTrip(DeleteTripRequest request); @WriteDataPermission - @Post(timeOut = 120) + @Post(timeOut = 120, useMultiPartForm = true) @Write ImportTripResult importTrip(ImportTripRequest request); ===================================== services/src/main/java/fr/ird/observe/services/service/referential/ReferentialService.java ===================================== @@ -25,6 +25,7 @@ package fr.ird.observe.services.service.referential; import com.google.common.collect.ImmutableSet; import fr.ird.observe.dto.IdDto; import fr.ird.observe.dto.form.Form; +import fr.ird.observe.dto.reference.DtoReference; import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet; import fr.ird.observe.dto.referential.ReferentialDto; @@ -32,7 +33,6 @@ import fr.ird.observe.dto.referential.SpeciesDto; import fr.ird.observe.dto.referential.SpeciesGroupDto; import fr.ird.observe.dto.referential.seine.ObservedSystemReference; import fr.ird.observe.dto.result.SaveResultDto; -import org.nuiton.topia.persistence.script.TopiaSqlScript; import fr.ird.observe.services.service.ObserveService; import fr.ird.observe.services.spi.ReadDataPermission; import fr.ird.observe.services.spi.ReadReferentialPermission; @@ -44,6 +44,7 @@ import io.ultreia.java4all.http.spi.Delete; import io.ultreia.java4all.http.spi.Get; import io.ultreia.java4all.http.spi.Nullable; import io.ultreia.java4all.http.spi.Post; +import org.nuiton.topia.persistence.script.TopiaSqlScript; import java.util.Date; import java.util.List; @@ -106,10 +107,10 @@ public interface ReferentialService extends ObserveService { @Write <E extends ReferentialDto> void replaceReference(Class<E> beanType, String idToReplace, String replaceId); - @Get + @Post(useMultiPartForm = true) @ReadReferentialPermission @ReadDataPermission - <R extends ReferentialDto> ImmutableSetDtoMap<ReferentialDtoReference> findAllUsages(R bean); + <R extends ReferentialDto> ImmutableSetDtoMap<DtoReference> findAllUsages(R bean); @Get @ReadReferentialPermission @@ -123,12 +124,12 @@ public interface ReferentialService extends ObserveService { @ReadReferentialPermission @ReadDataPermission - @Post + @Post(useMultiPartForm = true) MissingReferentialResult computeMissingReferential(MissingReferentialRequest request); @ReadReferentialPermission @WriteDataPermission - @Post + @Post(useMultiPartForm = true) @Write void insertMissingReferential(TopiaSqlScript sqlContent); ===================================== services/src/main/java/fr/ird/observe/services/service/sql/SqlScriptProducerService.java ===================================== @@ -22,9 +22,9 @@ package fr.ird.observe.services.service.sql; * #L% */ -import org.nuiton.topia.persistence.script.TopiaSqlScript; import fr.ird.observe.services.service.ObserveService; import io.ultreia.java4all.http.spi.Get; +import org.nuiton.topia.persistence.script.TopiaSqlScript; /** * Created on 31/12/15. @@ -33,9 +33,9 @@ import io.ultreia.java4all.http.spi.Get; */ public interface SqlScriptProducerService extends ObserveService { - @Get + @Get(useMultiPartForm = true) TopiaSqlScript produceAddSqlScript(AddSqlScriptProducerRequest request); - @Get + @Get(useMultiPartForm = true) TopiaSqlScript produceDeleteSqlScript(DeleteSqlScriptProducerRequest request); } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/698d4026322bef0fdce6c34612d... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/698d4026322bef0fdce6c34612d... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT