Observe-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
March 2022
- 1 participants
- 59 discussions
[Git][ultreiaio/ird-observe] Pushed new branch release/9.0.0-RC-26
by Tony CHEMIT (@tchemit) 20 Mar '22
by Tony CHEMIT (@tchemit) 20 Mar '22
20 Mar '22
Tony CHEMIT pushed new branch release/9.0.0-RC-26 at ultreiaio / ird-observe
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/tree/release/9.0.0-RC-26
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 6 commits: Update changelog for v.9.0.0-rc-26 [skip CI]
by Tony CHEMIT (@tchemit) 20 Mar '22
by Tony CHEMIT (@tchemit) 20 Mar '22
20 Mar '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
18fcf0e3 by Tony Chemit at 2022-03-20T21:34:57+01:00
Update changelog for v.9.0.0-rc-26 [skip CI]
- - - - -
7f5fb1b0 by Tony Chemit at 2022-03-20T21:34:57+01:00
Fix some errors on LL - Observation - SetCatch (inline models editable but should not)
- - - - -
850a0f11 by Tony Chemit at 2022-03-20T21:34:57+01:00
Amélioration écran Compositions globales - See #2230
- - - - -
a2c579eb by Tony Chemit at 2022-03-20T21:34:57+01:00
Fix some errors on LL - Logbook - Set (action are not visible)
- - - - -
e58ad56a by Tony Chemit at 2022-03-20T21:34:57+01:00
update pom
- - - - -
d0e30109 by Tony Chemit at 2022-03-20T21:37:26+01:00
Amélioration de la fin de la synchronisation simple de référentiel - Closes ultreiaio/ird-observe#2231
- - - - -
12 changed files:
- CHANGELOG.md
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/save/actions/Start.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/legacy/actions/SynchroUIActionSupport.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/table/ContentTableUITableModel.java
- client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/SetUI.jaxx
- client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/SetUI.jcss
- client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/SetCatchUIHandler.java
- client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/SetCatchUITableModel.java
- client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/SetDetailCompositionUI.jaxx
- client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/SetDetailCompositionUI.jcss
- core/services/local/src/main/java/fr/ird/observe/services/local/service/referential/SynchronizeServiceLocalSupport.java
- pom.xml
Changes:
=====================================
CHANGELOG.md
=====================================
@@ -1,7 +1,57 @@
# ObServe changelog
* Author [Tony Chemit](mailto:dev@tchemit.fr)
- * Last generated at 2022-03-03 09:21.
+ * Last generated at 2022-03-20 21:33.
+
+## Version [9.0.0-RC-26](https://gitlab.com/ultreiaio/ird-observe/-/milestones/217)
+
+**Closed at 2022-03-20.**
+
+### Download
+* [Client (observe-9.0.0-RC-26-client.zip)](https://repo1.maven.org/maven2/fr/ird/obse…)
+* [Serveur (observe-9.0.0-RC-26.war)](https://repo1.maven.org/maven2/fr/ird/observe/obs…)
+* [Serveur (observe-9.0.0-RC-26-server.zip)](https://repo1.maven.org/maven2/fr/ird/obse…)
+
+### Issues
+ * [[Type::Anomalie 629]](https://gitlab.com/ultreiaio/ird-observe/-/issues/629) **[SERVEUR WEB] Exceptions probablement lorsque la connexion est ponctuellement coupée** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 886]](https://gitlab.com/ultreiaio/ird-observe/-/issues/886) **Problème d'exports de marées LL en v5.4** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 1832]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1832) **Erreur lors de l'effacement d'une base v9 par la v8** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 1867]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1867) **Impossible d'enregistrer le formulaire Marée LL avec section livre de bord et données associées** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 1868]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1868) **Impossible d'accéder au formulaire Composition détaillée en LL observations** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2137]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2137) **OptimisticLockException suite à requête PUT avortée** (Thanks to Pascal Cauquil) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2183]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2183) **Création d'un programme : exiger 'Observations' ou 'Livre de bord'** (Thanks to Pascal Cauquil) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2195]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2195) **Message d'erreur d'insertion de Trip** (Thanks to Tony CHEMIT) (Reported by adelphe n'goran)
+ * [[Type::Anomalie 2196]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2196) **Erreur sur utilisation de PUT pour MAJ une marée** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2197]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2197) **Bouton "Créer la base locale" ne marche pas** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2198]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2198) **La génération d'une base locale ne marche pas :(:(:(** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2199]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2199) **Impossible d'enregistrer une base :(:(:(** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2201]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2201) **Le changement de l'heure ne fire pas le bouton Enregistrer** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2202]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2202) **Le changement d'heure n'est pas enregistré** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2205]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2205) **Les trois formulaires Calée ont perdu le reset** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 2210]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2210) **Les messages de validation sont mal encodés** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 2213]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2213) **Correction sur les actions du comportements lors du retour sur onglet précédent après une action** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 2219]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2219) **Plein d'échantillons, comptage de l'arbre : 0** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2220]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2220) **Problème de décoration de l'arbre de navigation** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 2221]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2221) **Amélioration du mécanisme de remplacement de marée suite à un petit soucis lors de l'export de données (détection de faux positifs dans le script d'insertion)** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 2222]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2222) **Si on utilise un favori sur source serveur, le nom de la base optionel n'est pas renseigné dans son éditeur** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 2227]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2227) **Corrections sur l'appairement d'activités** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 2228]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2228) **Enfin avoir les erreur de WebMotion!** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 123]](https://gitlab.com/ultreiaio/ird-observe/-/issues/123) **Uniformiser les topiaid entre ObServe et t3+** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 236]](https://gitlab.com/ultreiaio/ird-observe/-/issues/236) **Permettre de copier-coller facilement le contenu de la fenêtre "Erreur..."** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 1085]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1085) **Generate navigation API** (Thanks to ) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 1107]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1107) **Déplacer le fichier observe-client.conf dans le .observe** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 1595]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1595) **Supprimer les vieilles migrations ?** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 1668]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1668) **Extraire les configurations sauvegardés de sources de données dans des fichiers séparé** (Thanks to ) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 1699]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1699) **Générer les usines de services** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 2186]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2186) **Libellé d'affichage des marées** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2194]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2194) **Le classement des bateaux pourrait se faire sur les noms** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2203]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2203) **Contrôle sur l'heure d'activité sur le WS public en create et update** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2204]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2204) **Ne plus retourner le contenu en erreur de validation dans l'API publique** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 2206]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2206) **Amélioration de la documentation de l'API publique pour voir les types de date utilisés** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 2207]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2207) **Amélioration des validateurs sur collection** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 2224]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2224) **Améloration sur l'écran Marée** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 2231]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2231) **Amélioration de la fin de la synchronisation simple de référentiel** (Thanks to ) (Reported by Tony CHEMIT)
+ * [[Type::Tâche 2208]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2208) **Synchro simple du référentiel, associations espèce/océan** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
## Version [9.0.0-RC-25](https://gitlab.com/ultreiaio/ird-observe/-/milestones/216)
@@ -12,12 +62,10 @@
* [Serveur (observe-9.0.0-RC-25.war)](https://repo1.maven.org/maven2/fr/ird/observe/obs…)
* [Serveur (observe-9.0.0-RC-25-server.zip)](https://repo1.maven.org/maven2/fr/ird/obse…)
-
### Issues
* [[Type::Anomalie 2178]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2178) **Souci lors de la configuration de l'arbre 1 avec base vierge** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Anomalie 2180]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2180) **Souci lors de la configuration de l'arbre 2** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Anomalie 2181]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2181) **Soucis lors de la configuration de l'arbre 3 avec base vierge** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
- * [[Type::Anomalie 2183]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2183) **Création d'un programme : exiger 'Observations' ou 'Livre de bord'** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Anomalie 2188]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2188) **Import AVDTH ne devrait pas être visible en mode serveur** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Anomalie 2189]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2189) **Impossible d'annuler une édition si un référentiel est désactivé** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Anomalie 2190]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2190) **Exception sur chargement de l'arbre (mode serveur) PS / Par bateaux** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
@@ -68,7 +116,7 @@
* [[Type::Evolution 1959]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1959) **Critères de groupement pour le nouvel arbre** (Thanks to Pascal Cauquil) (Reported by Pascal Cauquil)
* [[Type::Evolution 2051]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2051) **Supprimer ces flags sur Program** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Evolution 2133]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2133) **Ajout d'un ordre naturel sur les requêtes GetAll et GetSome** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
- * [[Type::Evolution 2134]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2134) **Permettre d'avoir sur le serveur plusieurs instances du serveur tournant sur des configurations différentes** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 2134]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2134) **Permettre d'avoir plusieurs instances du serveur tournant sur des configurations différentes** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
* [[Type::Evolution 2135]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2135) **Utilisation d'un seul fichier server.yml pour la configuration du serveur (remplace databases.yml et users.yml)** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
* [[Type::Evolution 2155]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2155) **Amélioration de l'interface graphique des source de données** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
* [[Type::Evolution 2156]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2156) **Amélioration de l'API publique (GetSome)** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
@@ -693,6 +741,7 @@ Merry Christmas
* [Serveur (observe-8.0.0.war)](https://repo1.maven.org/maven2/fr/ird/observe/observe/8…)
### Issues
+ * [[Type::Anomalie 1428]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1428) **[V8] Bug sur clic sur programme** (Thanks to Pascal Cauquil) (Reported by Pascal Cauquil)
* [[Type::Anomalie 1576]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1576) **L'option afficher/cacher la légende semble ne pas fonctionner** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Anomalie 1580]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1580) **Défauts d'affichage dans l'arbre** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Anomalie 1581]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1581) **Les rapports FOB ne fonctionnent pas** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/save/actions/Start.java
=====================================
@@ -92,7 +92,6 @@ public class Start extends SaveLocalUIActionSupport {
}
if (stepModel.containsStepForSave(AdminStep.SYNCHRONIZE)) {
- sendMessage("Sauvegarde du référentiel.");
saveUnidirectionalSynchronizeReferential();
}
@@ -108,8 +107,11 @@ public class Start extends SaveLocalUIActionSupport {
UnidirectionalSynchronizeContext referentialSynchronizeContext = stepModel.getReferentialSynchronizeContext();
- sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.script.path", referentialSynchronizeContext.getSqlScriptPath()));
-
+ if (referentialSynchronizeContext.getSqlScript().isPresent()) {
+ sendMessage("Sauvegarde des modifications de la synchronisation simple.");
+ sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.script.path", referentialSynchronizeContext.getSqlScriptPath()));
+ }
+ sendMessage("Mise à jour de la date de dernière de synchronisation de référentiel simple.");
referentialSynchronizeContext.finish(stepModel.getSource().getSynchronizeService());
stepModel.getSource().setModified(true);
sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.apply.done", new Date()));
=====================================
client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/synchronize/referential/legacy/actions/SynchroUIActionSupport.java
=====================================
@@ -59,7 +59,9 @@ public abstract class SynchroUIActionSupport extends AdminTabUIActionSupport<Syn
stepModel.setReferentialSynchronizeResult(referentialSynchronizeResult);
if (referentialSynchronizeResult.isEmpty()) {
+ //Update lastUpdateDate anyway (See https://gitlab.com/ultreiaio/ird-observe/-/issues/2231)
sendMessage(t("observe.ui.datasource.editor.actions.synchro.referential.message.ref.is.updtodate"));
+ ui.getModel().getSaveLocalModel().addStepForSave(AdminStep.SYNCHRONIZE);
} else {
for (Class<? extends ReferentialDto> referentialName : referentialSynchronizeResult.getReferentialNames()) {
String referentialStr = t(I18nDecoratorHelper.getType(referentialName));
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/table/ContentTableUITableModel.java
=====================================
@@ -243,6 +243,10 @@ public abstract class ContentTableUITableModel<D extends DataDto, C extends Cont
validator.setBean(tableEditBean);
validator.setChanged(false);
inlineModels.keySet().forEach(t -> t.getRowValidator().setParentValidator(validator));
+ startEditTableEditBeanOnInlineModels();
+ }
+
+ protected void startEditTableEditBeanOnInlineModels() {
// make inline models editable
inlineModels.keySet().forEach(t -> t.setEditable(true));
}
=====================================
client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/SetUI.jaxx
=====================================
@@ -368,7 +368,7 @@
</row>
</Table>
</JPanel>
- <Table id='actions' addToContainer="true" forceOverride="2">
+ <Table id='actions' forceOverride="2">
<row>
<cell fill="both" columns="2">
<JButton id='copyValuesAndSave'/>
=====================================
client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/SetUI.jcss
=====================================
@@ -29,10 +29,6 @@ DateTimeEditor {
showReset:true;
}
-#extraActions {
- visible:{!states.isReadingMode()};
-}
-
#copyValuesAndSave {
enabled:{states.isUpdatingMode() && states.getCopySetCandidate() != null && states.isValid()};
text:"observe.data.ll.logbook.Set.action.copyValuesAndSave";
=====================================
client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/SetCatchUIHandler.java
=====================================
@@ -275,12 +275,14 @@ public class SetCatchUIHandler extends GeneratedSetCatchUIHandler {
// on propage le mode de saisie dans le bean
editBean.setAcquisitionMode(newMode.ordinal());
}
- boolean showIndividualTabs = !createMode && isIndividual;
+// boolean showIndividualTabs = !createMode && isIndividual;
+ boolean showIndividualTabs = isIndividual;
getModel().getStates().setShowIndividualTabs(showIndividualTabs);
}
void updateShowIndividualTabs() {
- boolean showIndividualTabs = !ui.getTableModel().isCreate() && ui.getTableEditBean().getAcquisitionMode() == CatchAcquisitionMode.INDIVIDUAL.ordinal();
+// boolean showIndividualTabs = !ui.getTableModel().isCreate() && ui.getTableEditBean().getAcquisitionMode() == CatchAcquisitionMode.INDIVIDUAL.ordinal();
+ boolean showIndividualTabs = ui.getTableEditBean().getAcquisitionMode() == CatchAcquisitionMode.INDIVIDUAL.ordinal();
getModel().getStates().setShowIndividualTabs(showIndividualTabs);
}
=====================================
client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/SetCatchUITableModel.java
=====================================
@@ -135,4 +135,11 @@ public class SetCatchUITableModel extends GeneratedSetCatchUITableModel {
getModel().getStates().resetPosition(tableEditBean);
}
+
+ @Override
+ protected void startEditTableEditBeanOnInlineModels() {
+ if (getModel().getStates().isShowIndividualTabs()) {
+ super.startEditTableEditBeanOnInlineModels();
+ }
+ }
}
=====================================
client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/SetDetailCompositionUI.jaxx
=====================================
@@ -86,7 +86,7 @@
<BeanValidator id='basketValidator' beanClass='fr.ird.observe.dto.data.ll.observation.BasketDto'
errorTableModel='{getErrorTableModel()}' context='update'>
- <field name='branchline' component='basketsPane'/>
+ <field name='branchline' component='basketsPanel'/>
<field name='floatline1Length' component='basketsPanel'/>
<field name='floatline2Length' component='basketsPanel'/>
</BeanValidator>
=====================================
client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/SetDetailCompositionUI.jcss
=====================================
@@ -92,6 +92,10 @@ EditableTableModel {
_doNotTranslateFieldName: true;
}
+#branchlinesPane {
+ _doNotTranslateFieldName: true;
+}
+
/* ***************************************************************************** */
/* BRANCHLINE TAB ************************************************************* */
/* ***************************************************************************** */
=====================================
core/services/local/src/main/java/fr/ird/observe/services/local/service/referential/SynchronizeServiceLocalSupport.java
=====================================
@@ -77,7 +77,9 @@ public class SynchronizeServiceLocalSupport extends ObserveServiceLocal implemen
@Override
public void applySql(TopiaSqlScript script, String lastUpdateDateKey) {
- getTopiaPersistenceContext().executeSqlScript(script);
+ if (script != null) {
+ getTopiaPersistenceContext().executeSqlScript(script);
+ }
updateLastUpdateDates(lastUpdateDateKey);
}
=====================================
pom.xml
=====================================
@@ -23,7 +23,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2022.39</version>
+ <version>2022.40</version>
</parent>
<groupId>fr.ird.observe</groupId>
<artifactId>ird-observe</artifactId>
@@ -155,7 +155,7 @@
<!-- build timestamp configuration -->
<maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format>
<buildDate>${maven.build.timestamp}</buildDate>
- <lib.version.toolkit>6.0.6</lib.version.toolkit>
+ <lib.version.toolkit>6.0.7</lib.version.toolkit>
<lib.version.ognl>3.1.29</lib.version.ognl>
<!--can't use 1.4.197 (date has changed + blob also)-->
<lib.version.h2>1.4.196</lib.version.h2>
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/b5fe8033cce56c6b13d87df4…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/b5fe8033cce56c6b13d87df4…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] Update changelog for v.9.0.0-rc-26 [skip CI]
by Tony CHEMIT (@tchemit) 20 Mar '22
by Tony CHEMIT (@tchemit) 20 Mar '22
20 Mar '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
b5fe8033 by Tony Chemit at 2022-03-20T16:46:14+01:00
Update changelog for v.9.0.0-rc-26 [skip CI]
- - - - -
1 changed file:
- CHANGELOG.md
Changes:
=====================================
CHANGELOG.md
=====================================
@@ -1,7 +1,52 @@
# ObServe changelog
* Author [Tony Chemit](mailto:dev@tchemit.fr)
- * Last generated at 2022-03-03 09:21.
+ * Last generated at 2022-03-20 16:46.
+
+## Version [9.0.0-RC-26](https://gitlab.com/ultreiaio/ird-observe/-/milestones/217)
+
+**Closed at 2022-03-20.**
+
+
+### Issues
+ * [[Type::Anomalie 629]](https://gitlab.com/ultreiaio/ird-observe/-/issues/629) **[SERVEUR WEB] Exceptions probablement lorsque la connexion est ponctuellement coupée** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 886]](https://gitlab.com/ultreiaio/ird-observe/-/issues/886) **Problème d'exports de marées LL en v5.4** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 1832]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1832) **Erreur lors de l'effacement d'une base v9 par la v8** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 1867]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1867) **Impossible d'enregistrer le formulaire Marée LL avec section livre de bord et données associées** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 1868]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1868) **Impossible d'accéder au formulaire Composition détaillée en LL observations** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2137]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2137) **OptimisticLockException suite à requête PUT avortée** (Thanks to Pascal Cauquil) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2183]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2183) **Création d'un programme : exiger 'Observations' ou 'Livre de bord'** (Thanks to Pascal Cauquil) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2195]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2195) **Message d'erreur d'insertion de Trip** (Thanks to Tony CHEMIT) (Reported by adelphe n'goran)
+ * [[Type::Anomalie 2196]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2196) **Erreur sur utilisation de PUT pour MAJ une marée** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2197]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2197) **Bouton "Créer la base locale" ne marche pas** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2198]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2198) **La génération d'une base locale ne marche pas :(:(:(** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2199]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2199) **Impossible d'enregistrer une base :(:(:(** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2201]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2201) **Le changement de l'heure ne fire pas le bouton Enregistrer** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2202]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2202) **Le changement d'heure n'est pas enregistré** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2205]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2205) **Les trois formulaires Calée ont perdu le reset** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 2210]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2210) **Les messages de validation sont mal encodés** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 2213]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2213) **Correction sur les actions du comportements lors du retour sur onglet précédent après une action** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 2219]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2219) **Plein d'échantillons, comptage de l'arbre : 0** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Anomalie 2220]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2220) **Problème de décoration de l'arbre de navigation** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 2221]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2221) **Amélioration du mécanisme de remplacement de marée suite à un petit soucis lors de l'export de données (détection de faux positifs dans le script d'insertion)** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 2222]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2222) **Si on utilise un favori sur source serveur, le nom de la base optionel n'est pas renseigné dans son éditeur** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 2227]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2227) **Corrections sur l'appairement d'activités** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Anomalie 2228]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2228) **Enfin avoir les erreur de WebMotion!** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 123]](https://gitlab.com/ultreiaio/ird-observe/-/issues/123) **Uniformiser les topiaid entre ObServe et t3+** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 236]](https://gitlab.com/ultreiaio/ird-observe/-/issues/236) **Permettre de copier-coller facilement le contenu de la fenêtre "Erreur..."** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 1085]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1085) **Generate navigation API** (Thanks to ) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 1107]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1107) **Déplacer le fichier observe-client.conf dans le .observe** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 1595]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1595) **Supprimer les vieilles migrations ?** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 1668]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1668) **Extraire les configurations sauvegardés de sources de données dans des fichiers séparé** (Thanks to ) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 1699]](https://gitlab.com/ultreiaio/ird-observe/-/issues/1699) **Générer les usines de services** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 2186]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2186) **Libellé d'affichage des marées** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2194]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2194) **Le classement des bateaux pourrait se faire sur les noms** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2203]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2203) **Contrôle sur l'heure d'activité sur le WS public en create et update** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
+ * [[Type::Evolution 2204]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2204) **Ne plus retourner le contenu en erreur de validation dans l'API publique** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 2206]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2206) **Amélioration de la documentation de l'API publique pour voir les types de date utilisés** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 2207]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2207) **Amélioration des validateurs sur collection** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Evolution 2224]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2224) **Améloration sur l'écran Marée** (Thanks to Tony CHEMIT) (Reported by Tony CHEMIT)
+ * [[Type::Tâche 2208]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2208) **Synchro simple du référentiel, associations espèce/océan** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
## Version [9.0.0-RC-25](https://gitlab.com/ultreiaio/ird-observe/-/milestones/216)
@@ -12,12 +57,10 @@
* [Serveur (observe-9.0.0-RC-25.war)](https://repo1.maven.org/maven2/fr/ird/observe/obs…)
* [Serveur (observe-9.0.0-RC-25-server.zip)](https://repo1.maven.org/maven2/fr/ird/obse…)
-
### Issues
* [[Type::Anomalie 2178]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2178) **Souci lors de la configuration de l'arbre 1 avec base vierge** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Anomalie 2180]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2180) **Souci lors de la configuration de l'arbre 2** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Anomalie 2181]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2181) **Soucis lors de la configuration de l'arbre 3 avec base vierge** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
- * [[Type::Anomalie 2183]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2183) **Création d'un programme : exiger 'Observations' ou 'Livre de bord'** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Anomalie 2188]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2188) **Import AVDTH ne devrait pas être visible en mode serveur** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Anomalie 2189]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2189) **Impossible d'annuler une édition si un référentiel est désactivé** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
* [[Type::Anomalie 2190]](https://gitlab.com/ultreiaio/ird-observe/-/issues/2190) **Exception sur chargement de l'arbre (mode serveur) PS / Par bateaux** (Thanks to Tony CHEMIT) (Reported by Pascal Cauquil)
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/b5fe8033cce56c6b13d87df41…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/b5fe8033cce56c6b13d87df41…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 12 commits: Améloration sur l'écran Marée - Closes #2224
by Tony CHEMIT (@tchemit) 20 Mar '22
by Tony CHEMIT (@tchemit) 20 Mar '22
20 Mar '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
8ddab981 by Tony Chemit at 2022-03-20T07:31:59+01:00
Améloration sur l'écran Marée - Closes #2224
- - - - -
cb50b94d by Tony Chemit at 2022-03-20T10:14:57+01:00
Corrections sur l'appairement d'activités - Closes ultreiaio/ird-observe#2227
- - - - -
aa525e0e by Tony Chemit at 2022-03-20T11:40:59+01:00
Corrections sur l'appairement d'activités - Closes ultreiaio/ird-observe#2227
- - - - -
a3e2de16 by Tony Chemit at 2022-03-20T11:41:09+01:00
Clean ObserveRequestBuilder
- - - - -
5ed25b8d by Tony Chemit at 2022-03-20T11:47:31+01:00
Remove JSoup usage in http-api - See ultreiaio/http#49
- - - - -
d0aacabf by Tony Chemit at 2022-03-20T12:00:05+01:00
Add FIXME
- - - - -
90b3ba95 by Tony Chemit at 2022-03-20T12:02:09+01:00
Add FIXME
- - - - -
3966be60 by Tony Chemit at 2022-03-20T14:17:07+01:00
Impossible de créer une base centrale vierge, quelque soit la méthode appliquée - See ultreiaio/ird-observe#2214
- - - - -
72532596 by Tony Chemit at 2022-03-20T15:33:19+01:00
Enfin avoir les erreur de WebMotion! - Closes #2228
- - - - -
0a37a361 by Tony Chemit at 2022-03-20T16:37:54+01:00
Clean webmotion parameters mess (need to be finished) - See #2229
- - - - -
985029be by Tony Chemit at 2022-03-20T16:38:22+01:00
Can see error on loading any datasource
- - - - -
46155b0f by Tony Chemit at 2022-03-20T16:40:53+01:00
update toolkit \o/
- - - - -
30 changed files:
- client/core/src/main/i18n/templates/feedBackOnOpeningLocalDataSource_en_GB.ftl
- client/core/src/main/i18n/templates/feedBackOnOpeningLocalDataSource_es_ES.ftl
- client/core/src/main/i18n/templates/feedBackOnOpeningLocalDataSource_fr_FR.ftl
- client/core/src/main/java/fr/ird/observe/client/datasource/api/action/OpenLocalDataSourceFeedBackModel.java
- client/datasource/actions/src/main/i18n/getters/java.getter
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/ActivityPairingModel.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/actions/Start.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/ll/RootNodeBuilder.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/ps/RootNodeBuilder.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/ps/node/RouteNode.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/ps/node/TripNode.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/tree/PairingTreeTableCellEditor.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/tree/PairingTreeTableCellRenderer.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/tree/PairingTreeTableModelSupport.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/tree/PairingTreeTableSupport.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/tree/node/ActivityNodeSupport.java
- client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/tree/node/ProgramNode.java → client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/pairing/tree/node/GroupByNode.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/loading/open/OpenDataSourceAction.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageUIModel.java
- client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/common/TripUIModelStates.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/common/TripUIModelStates.java
- client/runner/src/main/i18n/translations/client-runner_en_GB.properties
- client/runner/src/main/i18n/translations/client-runner_es_ES.properties
- client/runner/src/main/i18n/translations/client-runner_fr_FR.properties
- core/api/dto/src/main/i18n/getters/java.getter
- core/api/dto/src/main/java/fr/ird/observe/dto/data/ll/pairing/ActivityPairingResult.java
- core/api/dto/src/main/java/fr/ird/observe/dto/data/ll/pairing/ActivityPairingResultItem.java
- core/api/dto/src/main/java/fr/ird/observe/dto/data/ll/pairing/TripPairingContext.java
- core/api/dto/src/main/java/fr/ird/observe/dto/data/ll/pairing/TripPairingResult.java
- + core/api/dto/src/main/java/fr/ird/observe/dto/data/pairing/ActivityPairingResultItemSupport.java
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/52c61fc7ec3836485eb55076…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/52c61fc7ec3836485eb55076…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 2 commits: Fix save adapters
by Tony CHEMIT (@tchemit) 19 Mar '22
by Tony CHEMIT (@tchemit) 19 Mar '22
19 Mar '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
2e099e71 by Tony Chemit at 2022-03-19T16:49:35+01:00
Fix save adapters
- - - - -
52c61fc7 by Tony Chemit at 2022-03-19T16:49:35+01:00
Improve delete adapters and begin of update statistics
- - - - -
15 changed files:
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/delete/DeleteExecutor.java
- + client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/delete/DeleteRootTreeAdapter.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/delete/DeleteTreeAdapter.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/edit/actions/SaveContentEditUIAdapter.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/actions/SaveContentOpenableUIAdapter.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/ropen/actions/SaveContentRootOpenableUIAdapter.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/NavigationUIHandler.java
- client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/ActivityUIHandler.java
- client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/ActivityUIHandler.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUIHandler.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/ActivityUIHandler.java
- client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/edit/GenerateContentEditUIDeleteTreeAdapter.java
- client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/openable/GenerateContentOpenableUIDeleteTreeAdapter.java
- client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/rlist/GenerateContentRootListUINavigationNode.java
- client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/ropen/GenerateContentRootOpenableUIDeleteTreeAdapter.java
Changes:
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/delete/DeleteExecutor.java
=====================================
@@ -24,6 +24,7 @@ package fr.ird.observe.client.datasource.editor.api.content.actions.delete;
import fr.ird.observe.client.datasource.editor.api.DataSourceEditor;
import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
+import fr.ird.observe.client.datasource.editor.api.navigation.NavigationUI;
import fr.ird.observe.client.util.ObserveSwingTechnicalException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -73,13 +74,14 @@ public class DeleteExecutor {
if (optionalRequest.isPresent()) {
DeleteRequest request = optionalRequest.get();
String label = t("observe.ui.choice.confirm.delete");
- actionExecutor.addAction(label, () -> consume(request, dataSourceEditor.getNavigationUI().getTree()));
+ actionExecutor.addAction(label, () -> consume(request, dataSourceEditor.getNavigationUI()));
return;
}
log.warn("User cancel action.");
}
- protected void consume(DeleteRequest request, NavigationTree tree) {
+ protected void consume(DeleteRequest request, NavigationUI navigationUI) {
+ NavigationTree tree = navigationUI.getTree();
Set<String> ids = request.getIds();
log.info(String.format("Delete adapt tree [start] %s", ids));
Consumer<String> idConsumer = consumer.apply(request);
@@ -88,7 +90,7 @@ public class DeleteExecutor {
}
DeleteTreeAdapter<?> treeAdapter = this.treeAdapter.apply(request);
try {
- SwingUtilities.invokeAndWait(() -> treeAdapter.adaptTree(request, tree));
+ SwingUtilities.invokeAndWait(() -> treeAdapter.adaptTree(request, navigationUI, tree));
} catch (Exception e) {
throw new ObserveSwingTechnicalException(e);
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/delete/DeleteRootTreeAdapter.java
=====================================
@@ -0,0 +1,55 @@
+package fr.ird.observe.client.datasource.editor.api.content.actions.delete;
+
+/*-
+ * #%L
+ * ObServe Client :: DataSource :: Editor :: API
+ * %%
+ * 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.client.datasource.editor.api.navigation.NavigationUI;
+import fr.ird.observe.client.datasource.editor.api.navigation.NavigationUIHandler;
+import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
+import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationInitializer;
+
+import java.util.Set;
+import java.util.function.Function;
+
+/**
+ * Created on 19/03/2022.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 9.0.0
+ */
+public abstract class DeleteRootTreeAdapter<OldParent extends NavigationNode> extends DeleteTreeAdapter<OldParent> {
+
+ public DeleteRootTreeAdapter(NavigationNode incomingNode, Function<NavigationNode, OldParent> parentSupplier) {
+ super(incomingNode, parentSupplier);
+ }
+
+ @Override
+ public void removeChildren(NavigationUI navigationUI, OldParent parentNode, Set<String> ids) {
+ super.removeChildren(navigationUI, parentNode, ids);
+ RootNavigationInitializer initializer = (RootNavigationInitializer) parentNode.getRoot().getInitializer();
+ boolean removeGroupBy = parentNode.getChildCount() == 0 && !initializer.getRequest().isLoadEmptyGroupBy();
+ if (removeGroupBy) {
+ parentNode.removeFromParent();
+ }
+ NavigationUIHandler.updateStatistics(navigationUI, removeGroupBy ? -1 : 0, -ids.size());
+ }
+}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/delete/DeleteTreeAdapter.java
=====================================
@@ -23,6 +23,7 @@ package fr.ird.observe.client.datasource.editor.api.content.actions.delete;
*/
import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
+import fr.ird.observe.client.datasource.editor.api.navigation.NavigationUI;
import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationNode;
import java.util.Objects;
@@ -52,12 +53,14 @@ public abstract class DeleteTreeAdapter<OldParent extends NavigationNode> {
this.parentSupplier = Objects.requireNonNull(parentSupplier);
}
- public abstract void removeChildren(OldParent parentNode, Set<String> ids);
+ public void removeChildren(NavigationUI navigationUI, OldParent parentNode, Set<String> ids) {
+ parentNode.removeChildren(ids);
+ }
- public final void adaptTree(DeleteRequest request, NavigationTree tree) {
+ public final void adaptTree(DeleteRequest request, NavigationUI navigationUI, NavigationTree tree) {
OldParent parentNode = getOldParentNode(getIncomingNode());
Set<String> ids = request.getIds();
- adaptParentNode(parentNode, ids);
+ adaptParentNode(navigationUI, parentNode, ids);
doFinalSelect(tree, parentNode);
}
@@ -65,11 +68,11 @@ public abstract class DeleteTreeAdapter<OldParent extends NavigationNode> {
return parentSupplier.apply(incomingNode);
}
- public final void adaptParentNode(OldParent parentNode, Set<String> ids) {
+ public final void adaptParentNode(NavigationUI navigationUI, OldParent parentNode, Set<String> ids) {
// reload node data
parentNode.reloadNodeData();
// remove obsolete nodes
- removeChildren(parentNode, ids);
+ removeChildren(navigationUI, parentNode, ids);
}
public final void doFinalSelect(NavigationTree tree, OldParent parentNode) {
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/edit/actions/SaveContentEditUIAdapter.java
=====================================
@@ -53,5 +53,9 @@ public class SaveContentEditUIAdapter<D extends EditableDto, U extends ContentEd
// apply extra actions from previous opened content (go back to correct tab if any, ...)
U newUi = dataSourceEditor.getModel().getTypedContent();
newUi.resetFromPreviousUi(ui);
+
+ if (notPersisted) {
+ dataSourceEditor.getNavigationUI().getTree().expandPath(dataSourceEditor.getNavigationUI().getTree().getSelectionPath());
+ }
}
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/actions/SaveContentOpenableUIAdapter.java
=====================================
@@ -27,6 +27,7 @@ import fr.ird.observe.client.datasource.editor.api.content.actions.save.SaveUIAd
import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUI;
import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUIModel;
import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUINavigationNode;
+import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
import fr.ird.observe.dto.data.OpenableDto;
import javax.swing.AbstractButton;
@@ -68,23 +69,28 @@ public class SaveContentOpenableUIAdapter<D extends OpenableDto, U extends Conte
// As I prefer to use a unique code (for persisted or not, keep it like this)
node.updateReference(bean.getId());
- afterNodeUpdated(dataSourceEditor, ui, node, notPersisted, bean);
+ NavigationTree tree = dataSourceEditor.getNavigationUI().getTree();
+ afterNodeUpdated(dataSourceEditor, ui, tree, node, notPersisted, bean);
}
- protected void afterNodeUpdated(DataSourceEditor dataSourceEditor, U ui, ContentOpenableUINavigationNode node, boolean notPersisted, D bean) {
+ protected void afterNodeUpdated(DataSourceEditor dataSourceEditor, U ui, NavigationTree tree, ContentOpenableUINavigationNode node, boolean notPersisted, D bean) {
//FIXME A startEdit should do the math?
- dataSourceEditor.getNavigationUI().getTree().reSelectSafeNode(node);
+ tree.reSelectSafeNode(node);
U newUi = dataSourceEditor.getModel().getTypedContent();
if (notPersisted && predicate.test(bean)) {
// reload ui and do click
-// U content = dataSourceEditor.getModel().getTypedContent();
SwingUtilities.invokeLater(() -> Objects.requireNonNull(buttonGetter).apply(newUi).doClick());
+ return;
} else {
// apply extra actions from previous opened content (go back to correct tab if any, ...)
newUi.resetFromPreviousUi(ui);
}
+
+ if (notPersisted) {
+ tree.expandPath(tree.getSelectionPath());
+ }
}
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/ropen/actions/SaveContentRootOpenableUIAdapter.java
=====================================
@@ -27,14 +27,10 @@ import fr.ird.observe.client.datasource.editor.api.content.actions.save.SaveUIAd
import fr.ird.observe.client.datasource.editor.api.content.data.ropen.ContentRootOpenableUI;
import fr.ird.observe.client.datasource.editor.api.content.data.ropen.ContentRootOpenableUIModel;
import fr.ird.observe.client.datasource.editor.api.content.data.ropen.ContentRootOpenableUINavigationNode;
+import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
+import fr.ird.observe.client.datasource.editor.api.navigation.NavigationUIHandler;
import fr.ird.observe.dto.data.RootOpenableDto;
-import javax.swing.AbstractButton;
-import javax.swing.SwingUtilities;
-import java.util.Objects;
-import java.util.function.Function;
-import java.util.function.Predicate;
-
/**
* Created on 16/10/2020.
*
@@ -43,48 +39,28 @@ import java.util.function.Predicate;
*/
public class SaveContentRootOpenableUIAdapter<D extends RootOpenableDto, U extends ContentRootOpenableUI<D, U>> implements SaveUIAdapter<D, U> {
- private final Predicate<D> predicate;
- private final Function<U, AbstractButton> buttonGetter;
-
- public SaveContentRootOpenableUIAdapter() {
- this.predicate = t -> false;
- this.buttonGetter = null;
- }
-
- public SaveContentRootOpenableUIAdapter(Predicate<D> predicate, Function<U, AbstractButton> buttonGetter) {
- this.predicate = Objects.requireNonNull(predicate);
- this.buttonGetter = Objects.requireNonNull(buttonGetter);
- }
-
@Override
public final void adaptUi(DataSourceEditor dataSourceEditor, U ui, boolean notPersisted, D bean) {
ContentRootOpenableUIModel<?> model = ui.getModel();
ui.stopEdit();
- ContentRootOpenableUINavigationNode node = model.getSource(); //??? .upToReferenceNode(model.getSource().getScope().getMainReferenceType());
-// IdDto bean = request.getBean();
+ ContentRootOpenableUINavigationNode node = model.getSource();
// We need to inject ot node the new reference (it could does not know the id if not persisted)
// As I prefer to use a unique code (for persisted or not, keep it like this)
node.updateReference(bean.getId());
- afterNodeUpdated(dataSourceEditor, ui, node, notPersisted, bean);
- }
-
- protected void afterNodeUpdated(DataSourceEditor dataSourceEditor, U ui, ContentRootOpenableUINavigationNode node, boolean notPersisted, D bean) {
-
- //FIXME A startEdit should do the math?
- dataSourceEditor.getNavigationUI().getTree().reSelectSafeNode(node);
+ NavigationTree tree = dataSourceEditor.getNavigationUI().getTree();
+ tree.reSelectSafeNode(node);
U newUi = dataSourceEditor.getModel().getTypedContent();
- if (notPersisted && predicate.test(bean)) {
- // reload ui and do click
-// U content = dataSourceEditor.getModel().getTypedContent();
- SwingUtilities.invokeLater(() -> Objects.requireNonNull(buttonGetter).apply(newUi).doClick());
- } else {
- // apply extra actions from previous opened content (go back to correct tab if any, ...)
- newUi.resetFromPreviousUi(ui);
+ // apply extra actions from previous opened content (go back to correct tab if any, ...)
+ newUi.resetFromPreviousUi(ui);
+
+ if (notPersisted) {
+ tree.expandPath(tree.getSelectionPath());
}
+ NavigationUIHandler.updateStatistics(dataSourceEditor.getNavigationUI(), 0, 1);
}
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/navigation/NavigationUIHandler.java
=====================================
@@ -50,6 +50,18 @@ public class NavigationUIHandler implements UIHandler<NavigationUI>, WithClientU
private Set<ReloadAction> actionsToReload;
private NavigationUIInitializer initializer;
+ public static void updateStatistics(NavigationUI ui, int groupByCountDiff, int dataCountDiff) {
+ NavigationResult navigationResult = ui.getTree().getRootNode().getInitializer().getNavigationResult();
+ TreeConfigUIHandler.updateStatistics(navigationResult.getRequest(),
+ ui.getTree().getModel().getGroupByHelper(),
+ () -> navigationResult.getGroupByCount() + groupByCountDiff,
+ () -> navigationResult.getGroupByDataCount() + dataCountDiff,
+ () -> navigationResult.getDataCount() + dataCountDiff,
+ ui::setStatisticsText,
+ ui::setStatisticsTip,
+ ui.getStatisticsLabel()::setIcon);
+ }
+
public static void updateStatistics(NavigationUI ui) {
NavigationResult navigationResult = ui.getTree().getRootNode().getInitializer().getNavigationResult();
TreeConfigUIHandler.updateStatistics(navigationResult.getRequest(),
=====================================
client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/ActivityUIHandler.java
=====================================
@@ -27,6 +27,7 @@ import fr.ird.observe.client.datasource.editor.api.content.actions.save.NodeChil
import fr.ird.observe.client.datasource.editor.api.content.actions.save.SaveAction;
import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUINavigationNode;
import fr.ird.observe.client.datasource.editor.api.content.data.open.actions.SaveContentOpenableUIAdapter;
+import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
import fr.ird.observe.dto.data.ll.logbook.ActivityDto;
/**
@@ -44,9 +45,9 @@ class ActivityUIHandler extends GeneratedActivityUIHandler {
.call((r, d) -> getOpenableService().save(r.getParentId(), d))
.then(new SaveContentOpenableUIAdapter<>(ActivityDto::isSetEnabled, ActivityUI::getAddSet) {
@Override
- protected void afterNodeUpdated(DataSourceEditor dataSourceEditor, ActivityUI ui, ContentOpenableUINavigationNode node, boolean notPersisted, ActivityDto bean) {
+ protected void afterNodeUpdated(DataSourceEditor dataSourceEditor, ActivityUI ui, NavigationTree tree, ContentOpenableUINavigationNode node, boolean notPersisted, ActivityDto bean) {
ActivityUINavigationCapability.fillBuilder(NodeChildrenUpdate.afterUpdate(node, bean)).update();
- super.afterNodeUpdated(dataSourceEditor, ui, node, notPersisted, bean);
+ super.afterNodeUpdated(dataSourceEditor, ui, tree, node, notPersisted, bean);
}
})
.install(ui.getSave());
=====================================
client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/ActivityUIHandler.java
=====================================
@@ -27,6 +27,7 @@ import fr.ird.observe.client.datasource.editor.api.content.actions.save.NodeChil
import fr.ird.observe.client.datasource.editor.api.content.actions.save.SaveAction;
import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUINavigationNode;
import fr.ird.observe.client.datasource.editor.api.content.data.open.actions.SaveContentOpenableUIAdapter;
+import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
import fr.ird.observe.dto.data.ll.observation.ActivityDto;
/**
@@ -45,9 +46,9 @@ class ActivityUIHandler extends GeneratedActivityUIHandler {
.call((r, d) -> getOpenableService().save(r.getParentId(), d))
.then(new SaveContentOpenableUIAdapter<>(ActivityDto::isSetEnabled, ActivityUI::getAddSet) {
@Override
- protected void afterNodeUpdated(DataSourceEditor dataSourceEditor, ActivityUI ui, ContentOpenableUINavigationNode node, boolean notPersisted, ActivityDto bean) {
+ protected void afterNodeUpdated(DataSourceEditor dataSourceEditor, ActivityUI ui, NavigationTree tree, ContentOpenableUINavigationNode node, boolean notPersisted, ActivityDto bean) {
ActivityUINavigationCapability.fillBuilder(NodeChildrenUpdate.afterUpdate(node, bean)).update();
- super.afterNodeUpdated(dataSourceEditor, ui, node, notPersisted, bean);
+ super.afterNodeUpdated(dataSourceEditor, ui, tree, node, notPersisted, bean);
}
})
.install(ui.getSave());
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/logbook/ActivityUIHandler.java
=====================================
@@ -26,6 +26,7 @@ import fr.ird.observe.client.datasource.editor.api.content.actions.save.NodeChil
import fr.ird.observe.client.datasource.editor.api.content.actions.save.SaveAction;
import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUINavigationNode;
import fr.ird.observe.client.datasource.editor.api.content.data.open.actions.SaveContentOpenableUIAdapter;
+import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
import fr.ird.observe.dto.data.ps.logbook.ActivityDto;
import fr.ird.observe.dto.referential.ps.common.VesselActivityReference;
@@ -52,9 +53,9 @@ class ActivityUIHandler extends GeneratedActivityUIHandler {
.then(new SaveContentOpenableUIAdapter<>(ActivityDto::isSetEnabled, ActivityUI::getAddSet) {
@Override
- protected void afterNodeUpdated(DataSourceEditor dataSourceEditor, ActivityUI ui, ContentOpenableUINavigationNode node, boolean notPersisted, ActivityDto bean) {
+ protected void afterNodeUpdated(DataSourceEditor dataSourceEditor, ActivityUI ui, NavigationTree tree, ContentOpenableUINavigationNode node, boolean notPersisted, ActivityDto bean) {
ActivityUINavigationCapability.fillBuilder(NodeChildrenUpdate.afterUpdate(node, bean)).update();
- super.afterNodeUpdated(dataSourceEditor, ui, node, notPersisted, bean);
+ super.afterNodeUpdated(dataSourceEditor, ui, tree, node, notPersisted, bean);
}
})
.install(ui.getSave());
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/ActivityUIHandler.java
=====================================
@@ -26,6 +26,7 @@ import fr.ird.observe.client.datasource.editor.api.content.actions.save.NodeChil
import fr.ird.observe.client.datasource.editor.api.content.actions.save.SaveAction;
import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUINavigationNode;
import fr.ird.observe.client.datasource.editor.api.content.data.open.actions.SaveContentOpenableUIAdapter;
+import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree;
import fr.ird.observe.dto.ProtectedIdsPs;
import fr.ird.observe.dto.data.ps.observation.ActivityDto;
import fr.ird.observe.dto.referential.ps.common.VesselActivityReference;
@@ -81,10 +82,9 @@ public class ActivityUIHandler extends GeneratedActivityUIHandler {
.call((r, d) -> getOpenableService().save(r.getParentId(), d))
.then(new SaveContentOpenableUIAdapter<>(ActivityDto::isStrongSetOperation, ActivityUI::getAddSet) {
@Override
- protected void afterNodeUpdated(DataSourceEditor dataSourceEditor, ActivityUI ui, ContentOpenableUINavigationNode node, boolean notPersisted, ActivityDto bean) {
- ActivityUINavigationCapability.fillBuilder(NodeChildrenUpdate.afterUpdate(node, bean))
- .update();
- super.afterNodeUpdated(dataSourceEditor, ui, node, notPersisted, bean);
+ protected void afterNodeUpdated(DataSourceEditor dataSourceEditor, ActivityUI ui, NavigationTree tree, ContentOpenableUINavigationNode node, boolean notPersisted, ActivityDto bean) {
+ ActivityUINavigationCapability.fillBuilder(NodeChildrenUpdate.afterUpdate(node, bean)).update();
+ super.afterNodeUpdated(dataSourceEditor, ui, tree, node, notPersisted, bean);
}
})
.install(ui.getSave());
=====================================
client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/edit/GenerateContentEditUIDeleteTreeAdapter.java
=====================================
@@ -47,10 +47,6 @@ public class GenerateContentEditUIDeleteTreeAdapter extends GenerateContentEditU
" public Generated%1$sUIDeleteTreeAdapter(%1$sUINavigationNode incomingNode) {\n" +
" super(incomingNode, e -> incomingNode.getParent());\n" +
" }\n\n" +
- " @Override\n" +
- " public void removeChildren(%2$sUINavigationNode oldParentNode, Set<String> ids) {\n" +
- " oldParentNode.removeChildren(ids);\n" +
- " }\n" +
"}\n";
public static final String CONTENT = "" +
"public class %1$sUIDeleteTreeAdapter extends Generated%1$sUIDeleteTreeAdapter {\n\n" +
@@ -62,10 +58,10 @@ public class GenerateContentEditUIDeleteTreeAdapter extends GenerateContentEditU
@Override
protected String generateAbstractContent0(Path sourceDirectory, Path targetDirectory, Path path, String packageName, String namePrefix) {
List<String> imports = new LinkedList<>();
- imports.add(Set.class.getName());
- imports.add(DeleteTreeAdapter.class.getName());
imports.add(DeleteRequest.class.getName());
+ imports.add(DeleteTreeAdapter.class.getName());
imports.add(Function.class.getName());
+ imports.add(Set.class.getName());
imports.add(scopeBuilder.editNode.getType().getName());
return generate(GENERATED_CONTENT, imports, dtoNamePrefix, scopeBuilder.editNode.getType().getSimpleName().replace("Dto", ""));
}
=====================================
client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/openable/GenerateContentOpenableUIDeleteTreeAdapter.java
=====================================
@@ -55,10 +55,6 @@ public class GenerateContentOpenableUIDeleteTreeAdapter extends GenerateContentO
" public Generated%1$sUIDeleteTreeAdapter(%1$sUINavigationNode incomingNode) {\n" +
" super(incomingNode, e -> incomingNode.getParent());\n" +
" }\n\n" +
- " @Override\n" +
- " public void removeChildren(%1$sListUINavigationNode oldParentNode, Set<String> ids) {\n" +
- " oldParentNode.removeChildren(ids);\n" +
- " }\n" +
"}\n";
public static final String CONTENT = "" +
"public class %1$sUIDeleteTreeAdapter extends Generated%1$sUIDeleteTreeAdapter {\n\n" +
@@ -73,10 +69,10 @@ public class GenerateContentOpenableUIDeleteTreeAdapter extends GenerateContentO
@Override
protected String generateAbstractContent0(Path sourceDirectory, Path targetDirectory, Path path, String packageName, String namePrefix) {
List<String> imports = new LinkedList<>();
- imports.add(Set.class.getName());
- imports.add(DeleteTreeAdapter.class.getName());
imports.add(DeleteRequest.class.getName());
+ imports.add(DeleteTreeAdapter.class.getName());
imports.add(Function.class.getName());
+ imports.add(Set.class.getName());
String siblingMethod = "findParentSibling";
if (scopeBuilder.selectNode.getParent()==null) {
siblingMethod = "findSibling";
=====================================
client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/rlist/GenerateContentRootListUINavigationNode.java
=====================================
@@ -40,17 +40,6 @@ import java.util.Set;
*/
public class GenerateContentRootListUINavigationNode extends GenerateContentRootListUISupport {
- public static final String REMOVE_CHILDREN = "" +
- " @Override\n" +
- " public void removeChildren(Set<String> ids) {\n" +
- " if (getChildCount() == ids.size() && !getParent().getInitializer().getRequest().isLoadEmptyGroupBy()) {\n" +
- " // limit case : node will be empty, must remove it\n" +
- " removeFromParent();\n" +
- " return;\n" +
- " }\n" +
- " super.removeChildren(ids);\n" +
- " }\n\n";
-
@Override
protected String generateConcreteContent(Path path, String packageName, String namePrefix) {
List<String> imports = new LinkedList<>();
@@ -67,8 +56,6 @@ public class GenerateContentRootListUINavigationNode extends GenerateContentRoot
context += ContentUINavigationContextHelper.generateGetParentSibling(cleanClassName);
imports.add(Set.class.getName());
context += ContentUINavigationContextHelper.generateAddChildren(dtoNamePrefix);
- context += REMOVE_CHILDREN;
return uiNavigationNodeHelper.generateContent(imports, context);
}
-
}
=====================================
client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/ropen/GenerateContentRootOpenableUIDeleteTreeAdapter.java
=====================================
@@ -23,7 +23,7 @@ package fr.ird.observe.client.datasource.editor.spi.content.data.ropen;
*/
import fr.ird.observe.client.datasource.editor.api.content.actions.delete.DeleteRequest;
-import fr.ird.observe.client.datasource.editor.api.content.actions.delete.DeleteTreeAdapter;
+import fr.ird.observe.client.datasource.editor.api.content.actions.delete.DeleteRootTreeAdapter;
import java.nio.file.Path;
import java.util.LinkedList;
@@ -40,7 +40,7 @@ import java.util.function.Function;
public class GenerateContentRootOpenableUIDeleteTreeAdapter extends GenerateContentRootOpenableUISupport {
public static final String GENERATED_CONTENT = "" +
- "public abstract class Generated%1$sUIDeleteTreeAdapter extends DeleteTreeAdapter<%1$sListUINavigationNode> {\n" +
+ "public abstract class Generated%1$sUIDeleteTreeAdapter extends DeleteRootTreeAdapter<%1$sListUINavigationNode> {\n" +
"\n" +
" public static Function<DeleteRequest, %1$sUIDeleteTreeAdapter> create(%1$sListUI ui) {\n" +
" return r -> new %1$sUIDeleteTreeAdapter(ui.getModel().getSource());\n" +
@@ -55,10 +55,6 @@ public class GenerateContentRootOpenableUIDeleteTreeAdapter extends GenerateCont
" public Generated%1$sUIDeleteTreeAdapter(%1$sUINavigationNode incomingNode) {\n" +
" super(incomingNode, e -> incomingNode.getParent());\n" +
" }\n\n" +
- " @Override\n" +
- " public void removeChildren(%1$sListUINavigationNode oldParentNode, Set<String> ids) {\n" +
- " oldParentNode.removeChildren(ids);\n" +
- " }\n" +
"}\n";
public static final String CONTENT = "" +
"public class %1$sUIDeleteTreeAdapter extends Generated%1$sUIDeleteTreeAdapter {\n\n" +
@@ -73,10 +69,10 @@ public class GenerateContentRootOpenableUIDeleteTreeAdapter extends GenerateCont
@Override
protected String generateAbstractContent0(Path sourceDirectory, Path targetDirectory, Path path, String packageName, String namePrefix) {
List<String> imports = new LinkedList<>();
- imports.add(Set.class.getName());
- imports.add(DeleteTreeAdapter.class.getName());
imports.add(DeleteRequest.class.getName());
+ imports.add(DeleteRootTreeAdapter.class.getName());
imports.add(Function.class.getName());
+ imports.add(Set.class.getName());
String siblingMethod = "findParentSibling";
if (scopeBuilder.selectNode.getParent() == null) {
siblingMethod = "findSibling";
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/4af4a51fc0e3a05c07c45d55…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/4af4a51fc0e3a05c07c45d55…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 3 commits: auto update end date of trip when saving route observation
by Tony CHEMIT (@tchemit) 19 Mar '22
by Tony CHEMIT (@tchemit) 19 Mar '22
19 Mar '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
32971917 by Tony Chemit at 2022-03-19T13:52:46+01:00
auto update end date of trip when saving route observation
- - - - -
c02275e0 by Tony Chemit at 2022-03-19T13:55:57+01:00
missing validators on ps observations set
- - - - -
4af4a51f by Tony Chemit at 2022-03-19T13:55:57+01:00
fix Open node isLeaf method
- - - - -
6 changed files:
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/ContentOpenableUINavigationHandler.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/ropen/ContentRootOpenableUINavigationHandler.java
- client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/SetUI.jaxx
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripSpi.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/RouteSpi.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/RouteSpi.java
Changes:
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/ContentOpenableUINavigationHandler.java
=====================================
@@ -54,7 +54,13 @@ public abstract class ContentOpenableUINavigationHandler<N extends ContentOpenab
@Override
public final boolean isLeaf() {
- return getNode().getInitializer().isNotPersisted() || getNode().getInitializer().isLeaf() || super.isLeaf();
+ if (getNode().getInitializer().isNotPersisted()) {
+ return true;
+ }
+ if (!super.isLeaf()) {
+ return false;
+ }
+ return getNode().getInitializer().isLeaf();
}
@Override
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/ropen/ContentRootOpenableUINavigationHandler.java
=====================================
@@ -54,7 +54,13 @@ public abstract class ContentRootOpenableUINavigationHandler<N extends ContentRo
@Override
public final boolean isLeaf() {
- return getNode().getInitializer().isNotPersisted() || getNode().getInitializer().isLeaf() || super.isLeaf();
+ if (getNode().getInitializer().isNotPersisted()) {
+ return true;
+ }
+ if (!super.isLeaf()) {
+ return false;
+ }
+ return getNode().getInitializer().isLeaf();
}
@Override
=====================================
client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/observation/SetUI.jaxx
=====================================
@@ -43,6 +43,10 @@
<BeanValidator id='validator' autoField='true' beanClass='fr.ird.observe.dto.data.ps.observation.SetDto'
errorTableModel='{getErrorTableModel()}' context='update'>
+ <field name='endDate' component='endTimeStamp'/>
+ <field name='endTime' component='endTimeStamp'/>
+ <field name='haulingEndDate' component='haulingEndTimeStamp'/>
+ <field name='haulingEndTime' component='haulingEndTimeStamp'/>
</BeanValidator>
<JPanel id="contentBody" layout='{new BorderLayout()}'>
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripSpi.java
=====================================
@@ -155,12 +155,14 @@ public class TripSpi extends GeneratedTripSpi {
return new TripGroupByReferentialHelper(context);
}
- protected void updateEndDate(Trip entity) {
+ public static boolean updateEndDate(Trip entity) {
Date theoreticalEndDate = entity.getTheoreticalEndDate();
Date realEndDate = entity.getEndDate();
if (realEndDate == null || theoreticalEndDate.after(realEndDate)) {
entity.setEndDate(theoreticalEndDate);
+ return true;
}
+ return false;
}
public ReferentialDtoReferenceSet<SpeciesReference> getSpeciesByListAndTrip(ServiceContext context, String tripId, String speciesListId) {
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/RouteSpi.java
=====================================
@@ -26,7 +26,9 @@ import fr.ird.observe.dto.ToolkitIdDtoBean;
import fr.ird.observe.dto.data.ps.logbook.ActivityDto;
import fr.ird.observe.dto.data.ps.logbook.RouteDto;
import fr.ird.observe.dto.form.Form;
+import fr.ird.observe.dto.result.SaveResultDto;
import fr.ird.observe.entities.data.ps.common.Trip;
+import fr.ird.observe.entities.data.ps.common.TripSpi;
import fr.ird.observe.spi.service.ServiceContext;
import io.ultreia.java4all.util.Dates;
import org.apache.commons.lang3.time.DateUtils;
@@ -77,6 +79,17 @@ public class RouteSpi extends GeneratedRouteSpi {
super.onDelete(context, parentEntity, entityToDelete, oldCollection);
}
+ @Override
+ protected SaveResultDto saveEntity(ServiceContext context, Trip parent, Route entity) {
+ if (TripSpi.updateEndDate(parent)) {
+ return newSaveHelper(context)
+ .update(parentSpi(), parent)
+ .update(this, entity)
+ .build(entity);
+ }
+ return super.saveEntity(context, parent, entity);
+ }
+
@Override
public Set<ToolkitIdDtoBean> getRealDependencies(ServiceContext context, Set<String> ids) {
return Activity.SPI.byParentId(context, ids).map(id -> ToolkitIdDtoBean.of(ActivityDto.class, id)).collect(Collectors.toSet());
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/RouteSpi.java
=====================================
@@ -27,8 +27,10 @@ import fr.ird.observe.dto.data.ps.observation.ActivityDto;
import fr.ird.observe.dto.data.ps.observation.ActivityStubDto;
import fr.ird.observe.dto.data.ps.observation.RouteDto;
import fr.ird.observe.dto.form.Form;
+import fr.ird.observe.dto.result.SaveResultDto;
import fr.ird.observe.entities.data.DataEntity;
import fr.ird.observe.entities.data.ps.common.Trip;
+import fr.ird.observe.entities.data.ps.common.TripSpi;
import fr.ird.observe.spi.service.ServiceContext;
import io.ultreia.java4all.util.Dates;
import org.apache.commons.lang3.time.DateUtils;
@@ -87,6 +89,17 @@ public class RouteSpi extends GeneratedRouteSpi {
super.onSave(context, parent, entity, dto, needCopy);
}
+ @Override
+ protected SaveResultDto saveEntity(ServiceContext context, Trip parent, Route entity) {
+ if (TripSpi.updateEndDate(parent)) {
+ return newSaveHelper(context)
+ .update(parentSpi(), parent)
+ .update(this, entity)
+ .build(entity);
+ }
+ return super.saveEntity(context, parent, entity);
+ }
+
@SuppressWarnings("unchecked")
@Override
public Class<? extends DataEntity>[] getEntityTypeToCreateOnReplicate() {
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/9fcd579f4a5f7410aa71e3ed…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/9fcd579f4a5f7410aa71e3ed…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 11 commits: Impossible de créer une base centrale vierge, quelque soit la méthode...
by Tony CHEMIT (@tchemit) 19 Mar '22
by Tony CHEMIT (@tchemit) 19 Mar '22
19 Mar '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
e5033f7a by Tony Chemit at 2022-03-18T19:43:41+01:00
Impossible de créer une base centrale vierge, quelque soit la méthode appliquée - See ultreiaio/ird-observe#2214
- - - - -
ea31a3de by Tony Chemit at 2022-03-18T19:43:41+01:00
update pom
- - - - -
f4cf5908 by Tony Chemit at 2022-03-18T19:43:41+01:00
add FIXME
- - - - -
9a0cfd7c by Tony Chemit at 2022-03-18T19:43:41+01:00
Plein d'échantillons, comptage de l'arbre : 0 - Closes #2219
- - - - -
475c7d09 by Tony Chemit at 2022-03-18T19:43:41+01:00
Correction validation ObjectMaterial (des faux positifs étaient détecté sur tous les fils directs de parent.code == null
- - - - -
2552f5f6 by Tony Chemit at 2022-03-18T19:43:41+01:00
Problème de décoration de l'arbre de navigation - Closes #2220
- - - - -
8b83e6d0 by Tony Chemit at 2022-03-18T19:43:41+01:00
Amélioration du mécanisme de remplacement de marée suite à un petit soucis lors de l'export de données (détection de faux positifs dans le script d'insertion) - See ultreiaio/ird-observe#2221
Improve association table column names order - Closes ultreiaio/topia-extension#120
- - - - -
4437134f by Tony Chemit at 2022-03-18T19:43:41+01:00
Improve TopiaMetadataModel design - Closes ultreiaio/topia-extension#121
- - - - -
077fc6f8 by Tony Chemit at 2022-03-18T19:43:41+01:00
update pom
- - - - -
842d3b05 by Tony Chemit at 2022-03-18T19:43:41+01:00
Si on utilise un favori sur source serveur, le nom de la base optionel n'est pas renseigné dans son éditeur - Closes #2222
- - - - -
9fcd579f by Tony Chemit at 2022-03-19T10:00:32+01:00
Impossible de créer une base centrale vierge, quelque soit la méthode appliquée - See ultreiaio/ird-observe#2214
- - - - -
30 changed files:
- client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveDataSourcesManager.java
- client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
- client/core/src/main/java/fr/ird/observe/client/datasource/config/form/ServerConfigurationModel.java
- client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/BackupsManager.java
- client/datasource/editor/api/src/main/i18n/getters/java.getter
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorHelper.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/mode/ChangeModeExecutor.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/loading/open/OpenDataSourceActionStep.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/DataSourceHelper.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageUIHandler.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageUIModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/launchers/CreateLauncher.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/ConfigDataUI.jaxx
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/ConfigDataUI.jcss
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/ConfigDataUIHandler.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/ConfigReferentialUI.jaxx
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/ConfigReferentialUI.jcss
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/ConfigReferentialUIHandler.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/SelectDataUIHandler.java
- + client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/actions/ConfigDataUISelectDataSourceCreateModeAction.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/actions/ConfigDataUITestRemoteConnexionAction.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/actions/ConfigDataUITestServerConnexionAction.java
- + client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/actions/ConfigReferentialUISelectDataSourceCreateModeAction.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/actions/ConfigReferentialUITestServerConnexionAction.java
- client/runner/src/test/java/fr/ird/observe/client/ClientTestClassResource.java
- + core/persistence/java/src/main/java/fr/ird/observe/entities/DataSourceCreateHelper.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SetImpl.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SetSpi.java
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/b495452199cbe2467e6c501c…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/b495452199cbe2467e6c501c…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 9 commits: Impossible de créer une base centrale vierge, quelque soit la méthode...
by Tony CHEMIT (@tchemit) 18 Mar '22
by Tony CHEMIT (@tchemit) 18 Mar '22
18 Mar '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
b77f16c0 by Tony Chemit at 2022-03-18T12:08:45+01:00
Impossible de créer une base centrale vierge, quelque soit la méthode appliquée - See ultreiaio/ird-observe#2214
- - - - -
9b688e1c by Tony Chemit at 2022-03-18T12:08:45+01:00
update pom
- - - - -
041a6bf6 by Tony Chemit at 2022-03-18T12:08:45+01:00
add FIXME
- - - - -
dbe8018b by Tony Chemit at 2022-03-18T12:08:45+01:00
Plein d'échantillons, comptage de l'arbre : 0 - Closes #2219
- - - - -
d0fa78ba by Tony Chemit at 2022-03-18T12:08:45+01:00
Correction validation ObjectMaterial (des faux positifs étaient détecté sur tous les fils directs de parent.code == null
- - - - -
efc705f7 by Tony Chemit at 2022-03-18T12:08:45+01:00
Problème de décoration de l'arbre de navigation - Closes #2220
- - - - -
63c59f3a by Tony Chemit at 2022-03-18T15:30:30+01:00
Amélioration du mécanisme de remplacement de marée suite à un petit soucis lors de l'export de données (détection de faux positifs dans le script d'insertion) - See ultreiaio/ird-observe#2221
Improve association table column names order - Closes ultreiaio/topia-extension#120
- - - - -
17e4dcd0 by Tony Chemit at 2022-03-18T16:59:21+01:00
Improve TopiaMetadataModel design - Closes ultreiaio/topia-extension#121
- - - - -
b4954521 by Tony Chemit at 2022-03-18T18:44:02+01:00
update pom
- - - - -
18 changed files:
- client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveDataSourcesManager.java
- client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
- client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/BackupsManager.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorHelper.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/mode/ChangeModeExecutor.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/loading/open/OpenDataSourceActionStep.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/DataSourceHelper.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageUIModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/launchers/CreateLauncher.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/ConfigDataUI.jaxx
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/SelectDataUIHandler.java
- client/runner/src/test/java/fr/ird/observe/client/ClientTestClassResource.java
- + core/persistence/java/src/main/java/fr/ird/observe/entities/DataSourceCreateHelper.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SetImpl.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SetSpi.java
- core/persistence/java/src/main/resources/META-INF/persistence/Observe/TopiaEntitySqlCopyPlanModel.json
The diff was not included because it is too large.
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/068e8cb4d7a4c6d178bfd4f8…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/068e8cb4d7a4c6d178bfd4f8…
You're receiving this email because of your account on gitlab.com.
1
0
18 Mar '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
f58b7358 by Tony Chemit at 2022-03-18T09:53:53+01:00
add FIXME
- - - - -
9d5dda9f by Tony Chemit at 2022-03-18T10:47:24+01:00
Plein d'échantillons, comptage de l'arbre : 0 - Closes #2219
- - - - -
1a567975 by Tony Chemit at 2022-03-18T10:53:45+01:00
Correction validation ObjectMaterial (des faux positifs étaient détecté sur tous les fils directs de parent.code == null
- - - - -
068e8cb4 by Tony Chemit at 2022-03-18T11:24:29+01:00
Problème de décoration de l'arbre de navigation - Closes #2220
- - - - -
7 changed files:
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/mode/ChangeModeExecutor.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SetImpl.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SetSpi.java
- model/src/main/models/Observe/persistence/20-data-ps-observation.model
- server/core/src/main/java/fr/ird/observe/server/ObserveWebMainHandler.java
- server/runner/src/main/webResources/doc/api/public/referential/ps/common/ObjectMaterial/validation-create-error.xml
- server/runner/src/main/webResources/doc/api/public/referential/ps/common/ObjectMaterial/validation-update-error.xml
Changes:
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/mode/ChangeModeExecutor.java
=====================================
@@ -33,6 +33,7 @@ import fr.ird.observe.navigation.id.IdNode;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import javax.swing.SwingUtilities;
import java.util.Objects;
/**
@@ -115,6 +116,7 @@ public class ChangeModeExecutor<U extends ContentUI> {
selectedNode.reloadNodeData();
selectedNode.nodeChangedDeep();
afterOpenReselectNode(ui, dataSourceEditor, tree, selectedNode, id);
+ SwingUtilities.invokeLater(tree::invalidateCellSizeCache);
}
protected void afterOpenReselectNode(U ui, DataSourceEditor dataSourceEditor, NavigationTree tree, NavigationNode selectedNode, String id) {
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SetImpl.java
=====================================
@@ -64,4 +64,12 @@ public class SetImpl extends SetAbstract {
public boolean isUnknownSchoolType() {
return schoolType != null && ProtectedIdsPs.PS_COMMON_SCHOOL_TYPE_UNDEFINED_ID.equals(schoolType.getTopiaId());
}
+
+ @Override
+ public int getSampleMeasureSize() {
+ if (isSampleEmpty()) {
+ return 0;
+ }
+ return getSample().iterator().next().getSampleMeasureSize();
+ }
}
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SetSpi.java
=====================================
@@ -41,9 +41,10 @@ public class SetSpi extends GeneratedSetSpi {
@Override
public void toDto(ReferentialLocale referentialLocale, Set entity, SetDto dto) {
- super.toDto(referentialLocale, entity, dto);
dto.setSampleMeasureEnabled(entity.canUseSample());
dto.setNonTargetCatchReleaseEnabled(entity.canUseNonTargetCatchRelease());
+ dto.setSampleMeasureSize(entity.getSampleMeasureSize());
+ super.toDto(referentialLocale, entity, dto);
}
@Override
=====================================
model/src/main/models/Observe/persistence/20-data-ps-observation.model
=====================================
@@ -117,6 +117,7 @@ canUseNonTargetCatchRelease() boolean
isFreeSchoolType() boolean
isSchoolObjectType() boolean
isUnknownSchoolType() boolean
+getSampleMeasureSize() int
data.ps.observation.TransmittingBuoy > data.DataEntity
comment + {*:1} String
=====================================
server/core/src/main/java/fr/ird/observe/server/ObserveWebMainHandler.java
=====================================
@@ -31,7 +31,6 @@ import org.debux.webmotion.server.handler.ExecutorMethodInvokerHandler;
import org.debux.webmotion.server.handler.ExecutorParametersConvertorHandler;
import org.debux.webmotion.server.handler.FilterFinderHandler;
import org.debux.webmotion.server.handler.FilterMethodFinderHandler;
-import org.debux.webmotion.server.handler.ParametersExtractorHandler;
import org.debux.webmotion.server.handler.ParametersMultipartHandler;
import org.debux.webmotion.server.tools.OrderedList;
@@ -59,8 +58,10 @@ public class ObserveWebMainHandler extends WebMotionMainHandler {
@Override
public OrderedList<Class<? extends WebMotionHandler>> getExecutorHandlers() {
return OrderedList.asList(
+ //FIXME Replace with by a better version of it
ExecutorInstanceCreatorHandler.class,
ObserveExecutorParametersInjectorHandler.class,
+ //FIXME Replace with by a better version of it
ExecutorParametersConvertorHandler.class
);
}
=====================================
server/runner/src/main/webResources/doc/api/public/referential/ps/common/ObjectMaterial/validation-create-error.xml
=====================================
@@ -38,7 +38,7 @@
<!-- code must be compliant with his parent code -->
<field-validator type="fieldexpression" short-circuit="true">
<param name="expression">
- <![CDATA[ parent == null || parent.code == null || code.startsWith(parent.code + "-") ]]>
+ <![CDATA[ codeValid ]]>
</param>
<message>observe.referential.ps.common.ObjectMaterial.validation.bad.parentCode##${parent.code}</message>
</field-validator>
=====================================
server/runner/src/main/webResources/doc/api/public/referential/ps/common/ObjectMaterial/validation-update-error.xml
=====================================
@@ -38,7 +38,7 @@
<!-- code must be compliant with his parent code -->
<field-validator type="fieldexpression" short-circuit="true">
<param name="expression">
- <![CDATA[ parent == null || parent.code == null || code.startsWith(parent.code + "-") ]]>
+ <![CDATA[ codeValid ]]>
</param>
<message>observe.referential.ps.common.ObjectMaterial.validation.bad.parentCode##${parent.code}</message>
</field-validator>
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/6883c98a842015f693cdd0a5…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/6883c98a842015f693cdd0a5…
You're receiving this email because of your account on gitlab.com.
1
0
[Git][ultreiaio/ird-observe][develop] 2 commits: Impossible de créer une base centrale vierge, quelque soit la méthode...
by Tony CHEMIT (@tchemit) 18 Mar '22
by Tony CHEMIT (@tchemit) 18 Mar '22
18 Mar '22
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
9995f02b by Tony Chemit at 2022-03-18T09:19:10+01:00
Impossible de créer une base centrale vierge, quelque soit la méthode appliquée - See ultreiaio/ird-observe#2214
- - - - -
6883c98a by Tony Chemit at 2022-03-18T09:40:35+01:00
update pom
- - - - -
24 changed files:
- client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveDataSourcesManager.java
- client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
- client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/BackupsManager.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorHelper.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/loading/open/OpenDataSourceActionStep.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/DataSourceHelper.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageUIModel.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/launchers/CreateLauncher.java
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/ConfigDataUI.jaxx
- client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/SelectDataUIHandler.java
- client/runner/src/test/java/fr/ird/observe/client/ClientTestClassResource.java
- + core/persistence/java/src/main/java/fr/ird/observe/entities/DataSourceCreateHelper.java
- core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java
- core/services/client/src/main/java/fr/ird/observe/services/client/AnonymousServiceClient.java
- core/services/client/src/test/java/fr/ird/observe/services/client/service/AnonymousServiceClientReadTest.java
- core/services/local/src/main/java/fr/ird/observe/services/local/service/AnonymousServiceLocalSupport.java
- core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestClassResource.java
- core/services/test/src/main/java/fr/ird/observe/services/service/AnonymousServiceFixtures.java
- pom.xml
- server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
- server/core/src/main/java/fr/ird/observe/server/ObserveWebApplicationContext.java
- server/core/src/main/java/fr/ird/observe/server/controller/AnonymousServiceRestApi.java
- server/core/src/main/java/fr/ird/observe/server/converter/JsonAwareDtoConverter.java
Changes:
=====================================
client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveDataSourcesManager.java
=====================================
@@ -28,7 +28,6 @@ import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceListener
import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
@@ -41,6 +40,7 @@ import fr.ird.observe.spi.decoration.DecoratorService;
import io.ultreia.java4all.i18n.I18n;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
import java.io.Closeable;
import java.io.File;
@@ -170,6 +170,17 @@ public class ObserveDataSourcesManager implements Closeable {
return dataSource;
}
+ public ObserveSwingDataSource newDataSource(ObserveDataSourceConfigurationTopiaH2 configuration, TopiaSqlScript dump) {
+ ObserveSwingDataSource dataSource = new ObserveSwingDataSource(config, serviceFactory, decoratorService, configuration) {
+ @Override
+ public void open() throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
+ createFromDump(dump);
+ }
+ };
+ addInternalListener(dataSource);
+ return dataSource;
+ }
+
void addInternalListener(ObserveSwingDataSource dataSource) {
dataSource.addObserveSwingDataSourceListener(new ObserveSwingDataSourceListenerAdapter() {
@@ -195,18 +206,6 @@ public class ObserveDataSourcesManager implements Closeable {
});
}
- public ObserveSwingDataSource newDataSource(ObserveDataSourceConfigurationTopiaH2 configuration, DataSourceCreateConfigurationDto createDto) {
- ObserveSwingDataSource dataSource = new ObserveSwingDataSource(config, serviceFactory, decoratorService, configuration) {
- @Override
- public void open() throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
- create(createDto);
-
- }
- };
- addInternalListener(dataSource);
- return dataSource;
- }
-
@Override
public void close() {
=====================================
client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java
=====================================
@@ -22,6 +22,8 @@ package fr.ird.observe.client.datasource.api;
* #L%
*/
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.Multimap;
import fr.ird.observe.client.WithClientUIContextApi;
import fr.ird.observe.client.configuration.ClientConfig;
import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceEvent;
@@ -38,7 +40,6 @@ import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DataSourceUserDto;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
@@ -86,6 +87,7 @@ import javax.swing.event.EventListenerList;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
@@ -241,27 +243,66 @@ public class ObserveSwingDataSource extends AbstractJavaBean implements ObserveS
fireOpened();
}
- public void createFrom(ObserveSwingDataSource localSource)
+ public void createEmpty()
throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
- DataSourceCreateConfigurationDto createDto = new DataSourceCreateConfigurationDto();
- createDto.setLeaveOpenSource(true);
- createDto.setImportReferentialDataSourceConfiguration(localSource.getConfiguration());
- create(createDto);
+ checkIsNotOpen();
+ fireNewMessage(t("observe.ui.datasource.storage.message.creating", getLabel()));
+ fireOpening();
+ AnonymousService dataSourceService = getAnonymousService();
+ setConnection(dataSourceService.createEmpty(getConfiguration()));
+ fireNewMessage(t("observe.ui.datasource.storage.message.created", getLabel()));
+ fireOpened();
}
- public void create(DataSourceCreateConfigurationDto createDto)
+ public void createFromDump(TopiaSqlScript dump)
throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
checkIsNotOpen();
fireNewMessage(t("observe.ui.datasource.storage.message.creating", getLabel()));
fireOpening();
AnonymousService dataSourceService = getAnonymousService();
- setConnection(dataSourceService.create(getConfiguration(), createDto));
+ setConnection(dataSourceService.createFromDump(getConfiguration(), dump));
fireNewMessage(t("observe.ui.datasource.storage.message.created", getLabel()));
fireOpened();
}
+ public void createFromImport(TopiaSqlScript referential, TopiaSqlScript data)
+ throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
+ DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
+ checkIsNotOpen();
+ fireNewMessage(t("observe.ui.datasource.storage.message.creating", getLabel()));
+ fireOpening();
+ AnonymousService dataSourceService = getAnonymousService();
+ setConnection(dataSourceService.createFromImport(getConfiguration(), referential, data));
+ fireNewMessage(t("observe.ui.datasource.storage.message.created", getLabel()));
+ fireOpened();
+ }
+
+ public TopiaSqlScript extract(boolean loadSchema, Set<String> importDataIds) {
+ checkIsOpen();
+ DataSourceService dataSourceService = getDataSourceService();
+ CreateDatabaseRequest.Builder request = CreateDatabaseRequest.builder(true, getVersion());
+ if (loadSchema) {
+ request.addSchema().addStandaloneTables();
+ }
+ if (importDataIds != null) {
+ Multimap<String, String> idsByType = ArrayListMultimap.create();
+ for (String importDataId : importDataIds) {
+ //FIXME
+ String className = importDataId.contains(".ll.") ? "fr.ird.observe.entities.data.ll.common.Trip" : "fr.ird.observe.entities.data.ps.common.Trip";
+ idsByType.put(className, importDataId);
+ }
+ for (Map.Entry<String, Collection<String>> entry : idsByType.asMap().entrySet()) {
+ String type = entry.getKey();
+ Set<String> dataIds = Set.copyOf(entry.getValue());
+ log.info(String.format("Add %d data of type: %s", dataIds.size(), type));
+ request.dataIdsToAdd(type, dataIds);
+ }
+ }
+ return dataSourceService.produceCreateSqlScript(request.build());
+ }
+
@Override
public void close() {
if (!configurationAndConnection.withConnection()) {
=====================================
client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/BackupsManager.java
=====================================
@@ -30,7 +30,6 @@ import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceEvent;
import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceListenerAdapter;
import fr.ird.observe.client.util.ObserveSwingTechnicalException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import io.ultreia.java4all.lang.Strings;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -98,9 +97,6 @@ public class BackupsManager implements Closeable {
log.info("Will check backup " + backupStorage.getFile());
try {
-// byte[] dump = Files.readAllBytes(backupStorage.getFile().toPath());
- DataSourceCreateConfigurationDto createDto = new DataSourceCreateConfigurationDto();
- createDto.setImportDatabase(TopiaSqlScript.of(backupStorage.getFile().toURI()));
try (ObserveSwingDataSource dataSource = dataSourcesManager.newTemporaryH2DataSource("check-" + backupStorage.getName())) {
dataSource.addObserveSwingDataSourceListener(new ObserveSwingDataSourceListenerAdapter() {
@@ -109,7 +105,7 @@ public class BackupsManager implements Closeable {
dataSource.destroy();
}
});
- dataSource.create(createDto);
+ dataSource.createFromDump(TopiaSqlScript.of(backupStorage.getFile().toURI()));
}
backupStorage.setVerified(true);
log.info("Add sane backup from " + backupStorage.getFile());
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorHelper.java
=====================================
@@ -34,7 +34,6 @@ import fr.ird.observe.client.main.ObserveMainUI;
import fr.ird.observe.client.util.ObserveSwingTechnicalException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.configuration.DataSourceConnectMode;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceInitMode;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceInformation;
@@ -212,13 +211,8 @@ public class DataSourceEditorHelper implements WithClientUIContextApi {
log.info("Will load last backup: " + backupStorage.getFile());
try {
- DataSourceCreateConfigurationDto createDto = new DataSourceCreateConfigurationDto();
- createDto.setImportDatabase(TopiaSqlScript.of(backupStorage.getFile().toPath().toUri()));
-
ObserveDataSourceConfigurationTopiaH2 dataSourceConfigurationH2 = dataSourcesManager.newH2DataSourceConfiguration(I18n.n("observe.runner.initStorage.label.local"));
-
- ObserveSwingDataSource dataSource = dataSourcesManager.newDataSource(dataSourceConfigurationH2, createDto);
-
+ ObserveSwingDataSource dataSource = dataSourcesManager.newDataSource(dataSourceConfigurationH2, TopiaSqlScript.of(backupStorage.getFile().toPath().toUri()));
//FIXME:BodyContent Review progress model, not linked to ui any more...
mainUI.getMainUIBodyContentManager().getBodyTyped(DataSourceEditor.class, DataSourceEditorBodyContent.class).loadStorage(mainUI, dataSource);
} catch (Exception e) {
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/loading/open/OpenDataSourceActionStep.java
=====================================
@@ -31,11 +31,11 @@ import fr.ird.observe.client.datasource.editor.api.DataSourceEditorBodyContent;
import fr.ird.observe.client.datasource.editor.api.loading.LoadingDataSourceContext;
import fr.ird.observe.client.datasource.editor.api.wizard.DataSourceHelper;
import fr.ird.observe.client.datasource.editor.api.wizard.StorageUIModel;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceInitModel;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceInformation;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
import static io.ultreia.java4all.i18n.I18n.t;
@@ -115,8 +115,8 @@ public class OpenDataSourceActionStep extends OpenDataSourceActionStepSupport {
try {
if (initModel.isOnCreateMode()) {
// do create local data source
- DataSourceCreateConfigurationDto creationConfigurationDto = DataSourceHelper.getCreationConfigurationDto(model);
- newDataSource.create(creationConfigurationDto);
+ TopiaSqlScript dump = DataSourceHelper.getCreationConfigurationDto(model);
+ newDataSource.createFromDump(dump);
} else {
// open data source
newDataSource.open();
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/DataSourceHelper.java
=====================================
@@ -32,7 +32,6 @@ import fr.ird.observe.client.util.ObserveSwingTechnicalException;
import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.DataSourceInitModel;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
@@ -49,6 +48,7 @@ import org.nuiton.topia.service.sql.request.CreateDatabaseRequest;
import java.io.File;
import java.nio.file.Path;
+import java.util.Set;
/**
* Created on 01/03/2021.
@@ -57,6 +57,7 @@ import java.nio.file.Path;
* @since 8.0.7
*/
public class DataSourceHelper {
+ public static final String referentialDbLabel = I18n.n("observe.ui.datasource.storage.label.reference.import.db");
private static final Logger log = LogManager.getLogger(DataSourceHelper.class);
public static void importModel(StorageUIModel source, StorageUIModel dst) {
@@ -79,7 +80,6 @@ public class DataSourceHelper {
dst.getChooseDb().updateEditConfig();
}
-
public static void exportModel(StorageUIModel source, StorageUIModel dst) {
source.getChooseDb().copyTo(dst.getChooseDb());
@@ -99,51 +99,74 @@ public class DataSourceHelper {
dst.setDataSourceInformation(source.getDataSourceInformation());
}
- public static DataSourceCreateConfigurationDto getCreationConfigurationDto(StorageUIModel model) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
- DataSourceCreateConfigurationDto result = null;
+ public static TopiaSqlScript getCreationConfigurationDto(StorageUIModel model) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
ChooseDbModel chooseDb = model.getChooseDb();
DataSourceInitModel initModel = chooseDb.getInitModel();
- if (initModel.isOnCreateMode()) {
- result = new DataSourceCreateConfigurationDto();
- TopiaSqlScript importDatabase = null;
- ObserveDataSourceConfiguration configSrc = null;
- switch (initModel.getCreateMode()) {
+ TopiaSqlScript importDatabase = null;
+ ObserveDataSourceConfiguration configSrc = null;
+ switch (initModel.getCreateMode()) {
- case EMPTY:
- break;
- case IMPORT_INTERNAL_DUMP: {
- File dumpFile = model.getClientConfig().getInitialDbDump();
- importDatabase = TopiaSqlScript.of(dumpFile.toURI());
- }
+ case EMPTY:
break;
- case IMPORT_EXTERNAL_DUMP: {
- File dumpFile = model.getDumpFile();
- importDatabase = TopiaSqlScript.of(dumpFile.toURI());
- }
+ case IMPORT_INTERNAL_DUMP: {
+ File dumpFile = model.getClientConfig().getInitialDbDump();
+ importDatabase = TopiaSqlScript.of(dumpFile.toURI());
+ }
+ break;
+ case IMPORT_EXTERNAL_DUMP: {
+ File dumpFile = model.getDumpFile();
+ importDatabase = TopiaSqlScript.of(dumpFile.toURI());
+ }
+ break;
+ case IMPORT_LOCAL_STORAGE:
+ configSrc = model.getLocalConfig().getConfiguration();
+ break;
+ case IMPORT_REMOTE_STORAGE:
+ configSrc = model.getRemoteConfig().getConfiguration();
break;
- case IMPORT_LOCAL_STORAGE:
- configSrc = model.getLocalConfig().getConfiguration();
- break;
- case IMPORT_REMOTE_STORAGE:
- configSrc = model.getRemoteConfig().getConfiguration();
- break;
- case IMPORT_SERVER_STORAGE:
- configSrc = model.getServerConfig().getConfiguration();
- break;
+ case IMPORT_SERVER_STORAGE:
+ configSrc = model.getServerConfig().getConfiguration();
+ break;
+ }
+ if (configSrc != null) {
+ try (ObserveSwingDataSource source = model.getDataSourcesManager().newDataSource(configSrc)) {
+ source.open();
+ DataSourceService dumpService = source.getDataSourceService();
+ CreateDatabaseRequest request = CreateDatabaseRequest.builder(false, source.getVersion()).addSchema().addStandaloneTables().build();
+ importDatabase = dumpService.produceCreateSqlScript(request);
}
- if (configSrc != null) {
- try (ObserveSwingDataSource source = model.getDataSourcesManager().newDataSource(configSrc)) {
- source.open();
- DataSourceService dumpService = source.getDataSourceService();
- CreateDatabaseRequest request = CreateDatabaseRequest.builder(false, source.getVersion()).addSchema().addStandaloneTables().build();
- importDatabase = dumpService.produceCreateSqlScript(request);
- }
+ }
+ return importDatabase;
+ }
+
+ public static TopiaSqlScript extract(ObserveDataSourcesManager dataSourcesManager, File dumpFile, boolean loadSchema, Set<String> importDataIds) {
+ try (ObserveSwingDataSource importDataSource = dataSourcesManager.newTemporaryH2DataSource(referentialDbLabel)) {
+ try {
+ importDataSource.createFromDump(TopiaSqlScript.of(dumpFile.toURI()));
+ return importDataSource.extract(loadSchema, importDataIds);
+ } catch (IncompatibleDataSourceCreateConfigurationException
+ | DataSourceCreateWithNoReferentialImportException
+ | DatabaseNotFoundException
+ | DatabaseConnexionNotAuthorizedException
+ | BabModelVersionException e) {
+ throw new ObserveSwingTechnicalException("Could not create import data source", e);
}
- if (importDatabase != null) {
- result.setImportDatabase(importDatabase);
+ }
+ }
+
+ public static TopiaSqlScript extract(ObserveDataSourcesManager dataSourcesManager, ObserveDataSourceConfiguration sourceConfiguration, boolean loadSchema, Set<String> importDataIds) {
+ try (ObserveSwingDataSource importDataSource = dataSourcesManager.newDataSource(sourceConfiguration)) {
+ try {
+ importDataSource.open();
+ return importDataSource.extract(loadSchema,importDataIds);
+ } catch (IncompatibleDataSourceCreateConfigurationException
+ | DataSourceCreateWithNoReferentialImportException
+ | DatabaseNotFoundException
+ | DatabaseConnexionNotAuthorizedException
+ | BabModelVersionException e) {
+ throw new ObserveSwingTechnicalException("Could not create import data source", e);
}
}
- return result;
}
public static ObserveSwingDataSource initDataSourceFromModel(StorageUIModel model) {
@@ -214,103 +237,6 @@ public class DataSourceHelper {
return dataSource;
}
- public static DataSourceCreateConfigurationDto toImportReferentielSourceConfig(StorageUIModel model) {
- DataSourceCreateConfigurationDto importReferenceConfig = new DataSourceCreateConfigurationDto();
- // can create empty data base
- importReferenceConfig.setCanCreateEmptyDatabase(true);
- if (model.getChooseDb().doImportReferential()) {
- String dbLabel = I18n.n("observe.ui.datasource.storage.label.reference.import.db");
- switch (model.getChooseDb().getReferentielImportMode()) {
- case IMPORT_EXTERNAL_DUMP:
- if (ObstunaAdminAction.CREATE.equals(model.getAdminAction())) {
- // import referential to temporary data source
- DataSourceCreateConfigurationDto createConfigurationDto = new DataSourceCreateConfigurationDto();
- File dumpFile = model.getCentralSourceModel().getDumpFile();
- createConfigurationDto.setImportDatabase(TopiaSqlScript.of(dumpFile.toURI()));
- try (ObserveSwingDataSource importDataSource = model.getDataSourcesManager().newTemporaryH2DataSource(dbLabel)) {
- try {
- importDataSource.create(createConfigurationDto);
- } catch (IncompatibleDataSourceCreateConfigurationException
- | DataSourceCreateWithNoReferentialImportException
- | DatabaseNotFoundException
- | DatabaseConnexionNotAuthorizedException
- | BabModelVersionException e) {
- throw new ObserveSwingTechnicalException("Could not create import data source", e);
- }
- importReferenceConfig.setImportReferentialDataSourceConfiguration(importDataSource.getConfiguration());
- }
- } else {
- File dumpFile = model.getDumpFile();
- importReferenceConfig.setImportDatabase(TopiaSqlScript.of(dumpFile.toURI()));
- }
- break;
- case IMPORT_REMOTE_STORAGE:
- // import referentiel from a remote db
- ObserveDataSourceConfigurationTopiaPG pgConfig = toPGStorageConfig(model.getCentralSourceModel(), dbLabel);
- pgConfig.setCanMigrate(false);
- importReferenceConfig.setImportReferentialDataSourceConfiguration(pgConfig);
- break;
- case IMPORT_SERVER_STORAGE:
- // import referentiel from a server db
- ObserveDataSourceConfigurationRest restConfig = toRestStorageConfig(model.getCentralSourceModel(), dbLabel);
- importReferenceConfig.setImportReferentialDataSourceConfiguration(restConfig);
- break;
- default:
- throw new IllegalStateException("Can't come here");
- }
- }
- return importReferenceConfig;
- }
-
- public static ObserveSwingDataSource toImportDataSourceConfig(StorageUIModel model) {
-
- ObserveSwingDataSource importDataSource;
-
- if (model.getChooseDb().doImportData()) {
-
- String dbLabel = I18n.n("observe.ui.datasource.storage.label.data.import.db");
-
- ObserveDataSourcesManager dataSourcesManager = model.getDataSourcesManager();
- switch (model.getChooseDb().getDataImportMode()) {
- case IMPORT_EXTERNAL_DUMP:
- DataSourceCreateConfigurationDto createConfigurationDto = new DataSourceCreateConfigurationDto();
- File dumpFile = ObstunaAdminAction.CREATE.equals(model.getAdminAction()) ? model.getDataSourceModel().getDumpFile() : model.getDumpFile();
- createConfigurationDto.setImportDatabase(TopiaSqlScript.of(dumpFile.toURI()));
- try (ObserveSwingDataSource importDataSource2 = dataSourcesManager.newTemporaryH2DataSource(dbLabel)) {
- importDataSource = importDataSource2;
- try {
- importDataSource2.create(createConfigurationDto);
- } catch (IncompatibleDataSourceCreateConfigurationException
- | DataSourceCreateWithNoReferentialImportException
- | DatabaseNotFoundException
- | DatabaseConnexionNotAuthorizedException
- | BabModelVersionException e) {
- throw new ObserveSwingTechnicalException("Could not create import data source", e);
- }
- }
- break;
- case IMPORT_REMOTE_STORAGE: {
- // import referentiel from a remote db
- ObserveDataSourceConfigurationTopiaPG dataSourceConfig = toPGStorageConfig(model.getDataSourceModel(), dbLabel);
- dataSourceConfig.setCanMigrate(false);
- importDataSource = dataSourcesManager.newDataSource(dataSourceConfig);
- }
- break;
- case IMPORT_SERVER_STORAGE: {
- // import referentiel from a server db
- ObserveDataSourceConfigurationRest dataSourceConfig = toRestStorageConfig(model.getDataSourceModel(), dbLabel);
- importDataSource = dataSourcesManager.newDataSource(dataSourceConfig);
- }
- break;
- default:
- throw new IllegalStateException("Can't come here");
- }
- } else {
- importDataSource = null;
- }
- return importDataSource;
- }
-
static ObserveDataSourceConfigurationTopiaH2 toH2StorageConfig(StorageUIModel model, String label) {
ObserveDataSourceConfigurationTopiaH2 h2Config = model.getLocalConfig().getConfiguration();
return ObserveDataSourceConfigurationTopiaH2.create(
@@ -326,7 +252,7 @@ public class DataSourceHelper {
);
}
- static ObserveDataSourceConfigurationTopiaPG toPGStorageConfig(StorageUIModel model, String label) {
+ public static ObserveDataSourceConfigurationTopiaPG toPGStorageConfig(StorageUIModel model, String label) {
ObserveDataSourceConfigurationTopiaPG pgConfig = model.getRemoteConfig().getConfiguration();
return ObserveDataSourceConfigurationTopiaPG.create(
label,
@@ -341,7 +267,7 @@ public class DataSourceHelper {
);
}
- static ObserveDataSourceConfigurationRest toRestStorageConfig(StorageUIModel model, String label) {
+ public static ObserveDataSourceConfigurationRest toRestStorageConfig(StorageUIModel model, String label) {
ObserveDataSourceConfigurationRest restConfig = model.getServerConfig().getConfiguration();
return ObserveDataSourceConfigurationRest.create(
label,
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java
=====================================
@@ -42,6 +42,7 @@ import fr.ird.observe.navigation.tree.selection.SelectionTreeModel;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.jaxx.runtime.JAXXContext;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
import java.awt.Window;
import java.io.File;
@@ -137,7 +138,8 @@ public class StorageBackupUILauncher extends StorageUILauncher {
try (ObserveSwingDataSource targetSource = dataSourcesManager.newTemporaryH2DataSource("Backup-" + backupFile.getName())) {
// create temporary source
- targetSource.createFrom(incomingSource);
+ TopiaSqlScript referentialDump = incomingSource.extract(true, null);
+ targetSource.createFromDump(referentialDump);
progressModel.increments();
// insert selected data
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageUIModel.java
=====================================
@@ -671,7 +671,9 @@ public class StorageUIModel extends WizardModel<StorageStep> implements WithClie
}
break;
case CONFIG_REFERENTIAL:
-
+ if (chooseDb.getReferentielImportMode() == null) {
+ return false;
+ }
switch (chooseDb.getReferentielImportMode()) {
case EMPTY:
@@ -703,7 +705,9 @@ public class StorageUIModel extends WizardModel<StorageStep> implements WithClie
break;
case CONFIG_DATA:
-
+ if (chooseDb.getDataImportMode() == null) {
+ return false;
+ }
switch (chooseDb.getDataImportMode()) {
case EMPTY:
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/launchers/CreateLauncher.java
=====================================
@@ -22,29 +22,37 @@ package fr.ird.observe.client.datasource.editor.api.wizard.launchers;
* #L%
*/
+import fr.ird.observe.client.datasource.api.ObserveDataSourcesManager;
import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
import fr.ird.observe.client.datasource.editor.api.wizard.DataSourceHelper;
import fr.ird.observe.client.datasource.editor.api.wizard.ObstunaAdminAction;
import fr.ird.observe.client.datasource.editor.api.wizard.StorageUI;
import fr.ird.observe.client.datasource.editor.api.wizard.StorageUIModel;
+import fr.ird.observe.client.util.ObserveSwingTechnicalException;
import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
import fr.ird.observe.dto.db.configuration.DataSourceConnectMode;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
+import fr.ird.observe.dto.db.configuration.DataSourceCreateMode;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceInformation;
-import fr.ird.observe.navigation.tree.selection.SelectionTreeModel;
+import fr.ird.observe.dto.db.configuration.rest.ObserveDataSourceConfigurationRest;
+import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaPG;
+import io.ultreia.java4all.i18n.I18n;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.jaxx.runtime.JAXXContext;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
import java.awt.Window;
+import java.io.File;
import java.util.Objects;
import java.util.Set;
+import static fr.ird.observe.client.datasource.editor.api.wizard.DataSourceHelper.toPGStorageConfig;
+
/**
* Created on 14/09/2021.
*
@@ -53,7 +61,53 @@ import java.util.Set;
*/
public class CreateLauncher extends RemoteUILauncher {
private static final Logger log = LogManager.getLogger(CreateLauncher.class);
- DataSourceCreateConfigurationDto createConfigurationDto;
+ private TopiaSqlScript referential;
+ private TopiaSqlScript data;
+
+ public static ObserveSwingDataSource toImportDataSourceConfig(StorageUIModel model) {
+
+ if (!model.getChooseDb().doImportData()) {
+ throw new IllegalStateException(String.format("Must be in select data mode to come here: %s", model));
+ }
+
+ String dbLabel = I18n.n("observe.ui.datasource.storage.label.data.import.db");
+ ObserveSwingDataSource importDataSource;
+
+ ObserveDataSourcesManager dataSourcesManager = model.getDataSourcesManager();
+ switch (model.getChooseDb().getDataImportMode()) {
+ case IMPORT_EXTERNAL_DUMP:
+ File dumpFile = model.getDataSourceModel().getDumpFile();
+ try (ObserveSwingDataSource importDataSource2 = dataSourcesManager.newTemporaryH2DataSource(dbLabel)) {
+ importDataSource = importDataSource2;
+ try {
+ importDataSource2.createFromDump(TopiaSqlScript.of(dumpFile.toURI()));
+ } catch (IncompatibleDataSourceCreateConfigurationException
+ | DataSourceCreateWithNoReferentialImportException
+ | DatabaseNotFoundException
+ | DatabaseConnexionNotAuthorizedException
+ | BabModelVersionException e) {
+ throw new ObserveSwingTechnicalException("Could not create import data source", e);
+ }
+ }
+ break;
+ case IMPORT_REMOTE_STORAGE: {
+ // import referentiel from a remote db
+ ObserveDataSourceConfigurationTopiaPG dataSourceConfig = DataSourceHelper.toPGStorageConfig(model.getDataSourceModel(), dbLabel);
+ dataSourceConfig.setCanMigrate(false);
+ importDataSource = dataSourcesManager.newDataSource(dataSourceConfig);
+ }
+ break;
+ case IMPORT_SERVER_STORAGE: {
+ // import referentiel from a server db
+ ObserveDataSourceConfigurationRest dataSourceConfig = DataSourceHelper.toRestStorageConfig(model.getDataSourceModel(), dbLabel);
+ importDataSource = dataSourcesManager.newDataSource(dataSourceConfig);
+ }
+ break;
+ default:
+ throw new IllegalStateException("Can't come here");
+ }
+ return importDataSource;
+ }
public CreateLauncher(JAXXContext context, Window frame, DataSourceConnectMode connectMode) {
super(ObstunaAdminAction.CREATE, context, frame, connectMode);
@@ -67,27 +121,112 @@ public class CreateLauncher extends RemoteUILauncher {
//FIXME This logic should be done in StorageModel not here, like this!
model.getChooseDb().setCanMigrate(true);
model.getRemoteConfig().setCanCreateDatabase(true);
+ model.getServerConfig().setCanCreateDatabase(true);
super.init(ui);
}
@Override
- protected ObserveSwingDataSource initTask(StorageUIModel model) throws Exception {
+ protected ObserveSwingDataSource initTask(StorageUIModel model) {
ObserveSwingDataSource dataSource = getDataSource(model);
- createConfigurationDto = DataSourceHelper.toImportReferentielSourceConfig(model);
- ObserveDataSourceConfiguration importReferentialConfig = createConfigurationDto.getImportReferentialDataSourceConfiguration();
- if (importReferentialConfig != null) {
- log.info(String.format("Use referentiel import data source %s", importReferentialConfig.getLabel()));
- checkImportDbVersion(model, importReferentialConfig);
+ // can create empty data base
+ boolean importReferential = model.getChooseDb().doImportReferential();
+ boolean importData = model.getChooseDb().doImportData();
+ if (!importReferential && !importData) {
+ // no import at all
+ log.info("Create empty database.");
+ return dataSource;
}
- // data import
- ObserveSwingDataSource importDataConfig = DataSourceHelper.toImportDataSourceConfig(model);
- if (importDataConfig != null) {
- log.info(String.format("Use data import data source %s", importDataConfig.getLabel()));
- checkImportDbVersion(model, importDataConfig.getConfiguration());
- SelectionTreeModel dataModel = model.getSelectDataModel();
- Set<String> importDataIds = dataModel.getSelectedDataIds();
- createConfigurationDto.setImportDataConfiguration(importDataConfig.getConfiguration(), importDataIds);
+
+ DataSourceCreateMode referentialImportMode = model.getChooseDb().getReferentielImportMode();
+ DataSourceCreateMode dataImportMode = model.getChooseDb().getDataImportMode();
+
+ File referentialDump = null;
+ ObserveDataSourceConfiguration referentialConfig = null;
+ File dataDump = null;
+ ObserveDataSourceConfiguration dataConfig = null;
+ Set<String> selectedDataIds = null;
+ if (importReferential && referentialImportMode != null) {
+ switch (referentialImportMode) {
+ case IMPORT_EXTERNAL_DUMP:
+ referentialDump = model.getCentralSourceModel().getDumpFile();
+
+ break;
+ case IMPORT_REMOTE_STORAGE:
+ ObserveDataSourceConfigurationTopiaPG pgConfig = toPGStorageConfig(model.getCentralSourceModel(), DataSourceHelper.referentialDbLabel);
+ pgConfig.setCanMigrate(false);
+ referentialConfig = pgConfig;
+ break;
+ case IMPORT_SERVER_STORAGE:
+ referentialConfig = DataSourceHelper.toRestStorageConfig(model.getCentralSourceModel(), DataSourceHelper.referentialDbLabel);
+ break;
+ default:
+ throw new IllegalStateException("Can't come here");
+ }
}
+ if (importData && dataImportMode != null) {
+ String dbLabel = I18n.n("observe.ui.datasource.storage.label.data.import.db");
+ selectedDataIds = model.getSelectDataModel().getSelectedDataIds();
+ switch (dataImportMode) {
+ case IMPORT_EXTERNAL_DUMP:
+ dataDump = model.getDataSourceModel().getDumpFile();
+ break;
+ case IMPORT_REMOTE_STORAGE: {
+ ObserveDataSourceConfigurationTopiaPG dataSourceConfig = toPGStorageConfig(model.getDataSourceModel(), dbLabel);
+ dataSourceConfig.setCanMigrate(false);
+ dataConfig = dataSourceConfig;
+ }
+ break;
+ case IMPORT_SERVER_STORAGE: {
+ dataConfig = DataSourceHelper.toRestStorageConfig(model.getDataSourceModel(), dbLabel);
+ break;
+ }
+ default:
+ throw new IllegalStateException("Can't come here");
+ }
+ }
+
+ if (referentialDump != null) {
+ if (dataDump != null) {
+ if (referentialDump.equals(dataDump)) {
+
+ log.info(String.format("Extract referential + data from dump %s", referentialDump));
+ referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialDump, true, selectedDataIds);
+ } else {
+ log.info(String.format("Extract referential from dump %s", referentialDump));
+ referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialDump, true, null);
+ log.info(String.format("Extract data from dump %s %s", dataDump, selectedDataIds));
+ data = DataSourceHelper.extract(model.getDataSourcesManager(), dataDump, false, selectedDataIds);
+ }
+ } else {
+ log.info(String.format("Extract referential from dump %s", referentialDump));
+ referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialDump, true, null);
+ if (dataConfig != null) {
+ log.info(String.format("Extract data from config %s %s", dataConfig.getLabel(), selectedDataIds));
+ data = DataSourceHelper.extract(model.getDataSourcesManager(), dataConfig, false, selectedDataIds);
+ }
+ }
+ } else {
+ Objects.requireNonNull(referentialConfig);
+ if (dataConfig != null) {
+ if (referentialConfig.equals(dataConfig)) {
+ log.info(String.format("Extract referential + data from config %s %s", referentialConfig.getLabel(), selectedDataIds));
+ referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialConfig, true, selectedDataIds);
+ } else {
+ log.info(String.format("Extract referential from config %s", referentialConfig.getLabel()));
+ referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialConfig, true, null);
+ log.info(String.format("Extract data from config %s %s", dataConfig.getLabel(), selectedDataIds));
+ data = DataSourceHelper.extract(model.getDataSourcesManager(), dataConfig, false, selectedDataIds);
+ }
+ } else {
+ log.info(String.format("Extract referential from config %s", referentialConfig.getLabel()));
+ referential = DataSourceHelper.extract(model.getDataSourcesManager(), referentialConfig, true, null);
+ if (dataDump != null) {
+ log.info(String.format("Extract data from dump %s %s", dataDump, selectedDataIds));
+ data = DataSourceHelper.extract(model.getDataSourcesManager(), dataDump, false, selectedDataIds);
+ }
+ }
+ }
+ Objects.requireNonNull(referential);
return dataSource;
}
@@ -95,21 +234,15 @@ public class CreateLauncher extends RemoteUILauncher {
protected void execute(ObserveSwingDataSource dataSource, ObserveDataSourceInformation dataSourceInformation) throws Exception {
log.info("Create db...");
try {
- dataSource.create(createConfigurationDto);
+ if (referential != null) {
+ dataSource.createFromImport(referential, data);
+ } else {
+ dataSource.createEmpty();
+ }
log.info(String.format("Open [%s] and create it.", dataSource.getLabel()));
} finally {
- if (dataSource.isOpen()) {
- dataSource.close();
- }
- }
- }
-
- void checkImportDbVersion(StorageUIModel model, ObserveDataSourceConfiguration dataSourceConfig) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException {
- try (ObserveSwingDataSource importDataSource = Objects.requireNonNull(model.getDataSourcesManager().newDataSource(dataSourceConfig))) {
- importDataSource.open();
- model.checkImportDbVersion(importDataSource);
+ ObserveSwingDataSource.doCloseSource(dataSource);
}
}
-
}
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/ConfigDataUI.jaxx
=====================================
@@ -35,8 +35,8 @@
<StorageStep id='step' initializer='StorageStep.CONFIG_DATA'/>
<StorageUIModel id='model'/>
- <StorageUIModel id='centralSourceModel' initializer='model.getDataSourceModel()'/>
<ChooseDbModel id='chooseDbModel' initializer='model.getChooseDb()'/>
+ <StorageUIModel id='centralSourceModel' initializer='model.getDataSourceModel()'/>
<ButtonGroup id='dataSourceCreateMode' onStateChanged='chooseDbModel.setDataImportMode((DataSourceCreateMode) dataSourceCreateMode.getSelectedValue())'/>
=====================================
client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/tabs/SelectDataUIHandler.java
=====================================
@@ -29,9 +29,9 @@ import fr.ird.observe.client.datasource.editor.api.config.TreeConfigUIHandler;
import fr.ird.observe.client.datasource.editor.api.selection.SelectionTreePane;
import fr.ird.observe.client.datasource.editor.api.selection.SelectionTreePaneHandler;
import fr.ird.observe.client.datasource.editor.api.selection.actions.SelectUnselect;
-import fr.ird.observe.client.datasource.editor.api.wizard.DataSourceHelper;
import fr.ird.observe.client.datasource.editor.api.wizard.ObstunaAdminAction;
import fr.ird.observe.client.datasource.editor.api.wizard.StorageUIModel;
+import fr.ird.observe.client.datasource.editor.api.wizard.launchers.CreateLauncher;
import fr.ird.observe.client.util.ObserveKeyStrokesSupport;
import fr.ird.observe.client.util.ObserveSwingTechnicalException;
import fr.ird.observe.navigation.id.Project;
@@ -75,7 +75,7 @@ public class SelectDataUIHandler extends StorageTabUIHandler<SelectDataUI> imple
}
if (createDataSource) {
// create temporary data source
- try (ObserveSwingDataSource dataSource = DataSourceHelper.toImportDataSourceConfig(model)) {
+ try (ObserveSwingDataSource dataSource = CreateLauncher.toImportDataSourceConfig(model)) {
SelectionTreePaneHandler.initDataSource(treePane, dataSource);
dataSource.open();
if (init) {
=====================================
client/runner/src/test/java/fr/ird/observe/client/ClientTestClassResource.java
=====================================
@@ -28,7 +28,6 @@ import fr.ird.observe.client.datasource.api.ObserveSwingDataSource;
import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaH2;
@@ -90,11 +89,9 @@ public class ClientTestClassResource extends TestClassResourceSupport {
boolean sharedDatabaseExist = sharedDatabaseFile.exists();
if (!sharedDatabaseExist) {
log.info(String.format("Create shared database: %s/%s to %s", dbVersion.toString(), dbName, sharedDatabaseFile));
- DataSourceCreateConfigurationDto createConfiguration = new DataSourceCreateConfigurationDto();
TopiaSqlScript script = dataSourcesForTestManager.getCache(dbVersion, dbName);
- createConfiguration.setImportDatabase(script);
observeSwingDataSource = ClientUIContextApplicationComponent.value().getDataSourcesManager().newDataSource(sharedDatabaseConfiguration);
- observeSwingDataSource.create(createConfiguration);
+ observeSwingDataSource.createFromDump(script);
}
if (targetPath == null) {
dataSourceConfiguration = sharedDatabaseConfiguration;
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/DataSourceCreateHelper.java
=====================================
@@ -0,0 +1,103 @@
+package fr.ird.observe.entities;
+
+/*-
+ * #%L
+ * ObServe Core :: 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.db.BabModelVersionException;
+import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
+import fr.ird.observe.dto.db.DatabaseNotFoundException;
+import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
+import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaH2;
+import io.ultreia.java4all.util.Version;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
+import org.nuiton.topia.service.migration.TopiaMigrationService;
+import org.nuiton.topia.service.sql.request.CreateDatabaseRequest;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+/**
+ * Created on 16/03/2022.
+ *
+ * @author Tony Chemit - dev(a)tchemit.fr
+ * @since 6.0.7
+ */
+public class DataSourceCreateHelper {
+
+ private static final Logger log = LogManager.getLogger(DataSourceCreateHelper.class);
+
+ public static void create(ToolkitTopiaApplicationContextSupport<?> applicationContext) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ log.debug(String.format("Create topia application context: %s", applicationContext));
+ // si le referentiel n'est pas importé on aliment la table lastUpdateDate
+ //FIXME Make sure this is ok, but not sure
+ applicationContext.insertLastUpdateDate();
+ }
+
+ public static void create(ToolkitTopiaApplicationContextSupport<?> applicationContext, ObserveDataSourceConfiguration dataSourceConfiguration, TopiaSqlScript importDatabase) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ log.debug(String.format("Create topia application context: %s", applicationContext));
+ Path temporaryDirectory = dataSourceConfiguration.getTemporaryDirectory();
+ log.info("Create new database from a script.");
+ TopiaMigrationService migrationService = (TopiaMigrationService) applicationContext.getMigrationService();
+ if (dataSourceConfiguration.isLocal()) {
+ applicationContext.executeSqlStatements(importDatabase);
+ migrationService.createSchemaIfNotExist();
+ migrationService.runSchemaMigration();
+ } else {
+ // base postgres
+ // do import in temporary h2 database
+ File tmpDir;
+ try {
+ tmpDir = Files.createTempDirectory(temporaryDirectory, "obstuna").toFile();
+ } catch (IOException e) {
+ throw new IllegalStateException("could not create temporary directory ", e);
+ }
+ Version modelVersion = dataSourceConfiguration.getModelVersion();
+ ObserveDataSourceConfigurationTopiaH2 temporaryConfiguration = applicationContext.createTemporaryConfiguration(tmpDir, modelVersion);
+ ObserveTopiaApplicationContext temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(temporaryConfiguration, false);
+ temporaryTopiaApplicationContext.executeSqlStatements(importDatabase);
+ temporaryTopiaApplicationContext.getMigrationService().createSchemaIfNotExist();
+ temporaryTopiaApplicationContext.getMigrationService().runSchemaMigration();
+ CreateDatabaseRequest request = CreateDatabaseRequest.builder(true, modelVersion).addSchema().addStandaloneTables().addAllData().build();
+ TopiaSqlScript dump = applicationContext.getSqlService().consume(request);
+ applicationContext.executeSqlStatements(dump);
+ migrationService.createSchemaIfNotExist();
+ migrationService.runSchemaMigration();
+ temporaryTopiaApplicationContext.close();
+ File databaseFile = temporaryConfiguration.getDatabaseFile();
+ if (!databaseFile.delete()) {
+ throw new IllegalStateException("could not delete " + databaseFile);
+ }
+ }
+ }
+
+ public static void create(ToolkitTopiaApplicationContextSupport<?> applicationContext, TopiaSqlScript dump, TopiaSqlScript optionalDump) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ log.debug(String.format("Create topia application context: %s", applicationContext));
+ applicationContext.executeSqlStatements(dump);
+ if (optionalDump != null) {
+ applicationContext.executeSqlStatements(optionalDump);
+ }
+ }
+}
=====================================
core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java
=====================================
@@ -22,14 +22,10 @@ package fr.ird.observe.entities;
* #L%
*/
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Multimap;
import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
-import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaH2;
import fr.ird.observe.dto.referential.ReferentialDto;
import fr.ird.observe.entities.data.DataGroupByEntity;
import fr.ird.observe.spi.module.BusinessProject;
@@ -37,16 +33,11 @@ import fr.ird.observe.spi.referential.differential.DifferentialMetaModel;
import fr.ird.observe.spi.referential.synchro.OneSideSqlResultBuilder;
import fr.ird.observe.spi.script.ToolkitEntitySqlScriptModel;
import fr.ird.observe.spi.service.ServiceContext;
-import io.ultreia.java4all.util.Version;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import org.nuiton.topia.persistence.TagValues;
import org.nuiton.topia.persistence.TopiaConfigurationExtension;
import org.nuiton.topia.persistence.TopiaEntity;
-import org.nuiton.topia.persistence.TopiaIdFactory;
import org.nuiton.topia.persistence.TopiaPersistenceContextConstructorParameterSupport;
import org.nuiton.topia.persistence.script.TopiaSqlScript;
-import org.nuiton.topia.service.migration.TopiaMigrationService;
import org.nuiton.topia.service.sql.blob.TopiaEntitySqlBlobModel;
import org.nuiton.topia.service.sql.metadata.TopiaMetadataModel;
import org.nuiton.topia.service.sql.metadata.TopiaMetadataModelPaths;
@@ -54,25 +45,15 @@ import org.nuiton.topia.service.sql.model.TopiaEntitySqlModel;
import org.nuiton.topia.service.sql.plan.copy.TopiaEntitySqlCopyPlanModel;
import org.nuiton.topia.service.sql.plan.delete.TopiaEntitySqlDeletePlanModel;
import org.nuiton.topia.service.sql.plan.replicate.TopiaEntitySqlReplicatePlanModel;
-import org.nuiton.topia.service.sql.request.CreateDatabaseRequest;
import org.nuiton.topia.service.sql.usage.TopiaEntitySqlUsageModel;
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
import java.time.Duration;
-import java.util.Collection;
import java.util.Date;
-import java.util.Map;
import java.util.Set;
-import java.util.UUID;
import java.util.function.Consumer;
public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicationContext {
- private static final Logger log = LogManager.getLogger(ObserveTopiaApplicationContext.class);
-
public ObserveTopiaApplicationContext(TopiaConfigurationExtension topiaConfiguration) {
super(topiaConfiguration);
}
@@ -187,131 +168,15 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat
return ObserveTopiaEntitySqlModelResource.get().getScriptModel();
}
- public void create(ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
- log.debug(String.format("Create topia application context: %s", this));
- if (dataSourceCreateConfiguration.isImportDatabase()) {
- log.info("Create new database from a script.");
- TopiaSqlScript importDatabase = dataSourceCreateConfiguration.getImportDatabase();
- boolean migrate = dataSourceCreateConfiguration.isMigrate();
- TopiaMigrationService migrationService = getMigrationService();
- if (dataSourceConfiguration.isLocal()) {
- executeSqlStatements(importDatabase);
- if (migrate) {
- migrationService.createSchemaIfNotExist();
- migrationService.runSchemaMigration();
- }
- } else { // base postgres
- // do import in temporary h2 database
- File tmpDir;
- try {
- Path temporaryDirectory = dataSourceConfiguration.getTemporaryDirectory();
- tmpDir = Files.createTempDirectory(temporaryDirectory, "obstuna").toFile();
- } catch (IOException e) {
- throw new IllegalStateException("could not create temporary directory ", e);
- }
- ObserveDataSourceConfigurationTopiaH2 temporaryConfiguration = createTemporaryConfiguration(tmpDir, dataSourceConfiguration.getModelVersion());
- ObserveTopiaApplicationContext temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(temporaryConfiguration, false);
- temporaryTopiaApplicationContext.executeSqlStatements(importDatabase);
- if (migrate) {
- temporaryTopiaApplicationContext.getMigrationService().createSchemaIfNotExist();
- temporaryTopiaApplicationContext.getMigrationService().runSchemaMigration();
- }
- CreateDatabaseRequest request = CreateDatabaseRequest.builder(true, dataSourceConfiguration.getModelVersion()).addSchema().addStandaloneTables().addAllData().build();
- TopiaSqlScript dump = getSqlService().consume(request);
- executeSqlStatements(dump);
- migrationService.createSchemaIfNotExist();
- migrationService.runSchemaMigration();
- temporaryTopiaApplicationContext.close();
- File databaseFile = temporaryConfiguration.getDatabaseFile();
- if (!databaseFile.delete()) {
- throw new IllegalStateException("could not delete " + databaseFile);
- }
- }
- } else {
- boolean importReferential = dataSourceCreateConfiguration.isImportReferential();
- boolean importData = dataSourceCreateConfiguration.isImportData();
- // si le referentiel n'est pas importé on aliment la table lastUpdateDate
- if (!importReferential) {
- insertLastUpdateDate();
- }
- boolean importStandaloneReferential = importReferential;
- if (importReferential && importData) {
- // Si on est sur la même source de données pour les deux imports, on fait tout sur la même base temporaire
- ObserveDataSourceConfiguration importReferentialDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
- ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
- importStandaloneReferential = !importReferentialDataSourceConfiguration.equals(importDataSourceConfiguration);
- }
- boolean referentialImported = false;
- if (importStandaloneReferential) {
- log.info("Import referential.");
- ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
- Version dbVersion = Version.valueOf(getModelVersion());
- CreateDatabaseRequest request = CreateDatabaseRequest.builder(!dataSourceConfiguration.isLocal(), dbVersion)
- .addStandaloneTables().build();
- TopiaSqlScript referentialDump;
- ObserveTopiaApplicationContext temporaryTopiaApplicationContext = null;
- try {
- temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(importDataSourceConfiguration, false);
-// ObserveDataSourceConnection importDataSourceConnection = serviceContext().newService(importDataSourceConfiguration, AnonymousService.class).open(importDataSourceConfiguration);
-// DataSourceService dumpProducerService = serviceContext().newService(importDataSourceConnection, DataSourceService.class);
- referentialDump = temporaryTopiaApplicationContext.getSqlService().consume(request);
- executeSqlStatements(referentialDump);
- } finally {
- if (!dataSourceCreateConfiguration.isLeaveOpenSource() && temporaryTopiaApplicationContext != null) {
- temporaryTopiaApplicationContext.close();
- }
- }
- referentialImported = true;
- }
-
- if (importData) {
- ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
- Version dbVersion = Version.valueOf(getModelVersion());
- CreateDatabaseRequest.Builder requestBuilder = CreateDatabaseRequest.builder(!dataSourceConfiguration.isLocal(), dbVersion);
- if (!referentialImported) {
- log.info("Get referential.");
- requestBuilder.addStandaloneTables();
- }
-
- // Récupération du dump qui contient les données
- Set<String> importDataIds = dataSourceCreateConfiguration.getImportDataIds();
- TopiaIdFactory idFactory = getTopiaIdFactory();
- Multimap<String, String> idsByType = ArrayListMultimap.create();
- for (String importDataId : importDataIds) {
- Class<TopiaEntity> className = idFactory.getClassName(importDataId);
- idsByType.put(className.getName(), importDataId);
- }
- log.info(String.format("Get data: %s", importDataIds));
- for (Map.Entry<String, Collection<String>> entry : idsByType.asMap().entrySet()) {
- requestBuilder.dataIdsToAdd(entry.getKey(), Set.copyOf(entry.getValue()));
- }
- TopiaSqlScript dataDump;
- ObserveTopiaApplicationContext temporaryTopiaApplicationContext = null;
- CreateDatabaseRequest request = requestBuilder.build();
- try {
- temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(importDataSourceConfiguration, false);
-// ObserveDataSourceConnection importDataSourceConnection = serviceContext().newService(importDataSourceConfiguration, AnonymousService.class).open(importDataSourceConfiguration);
-// DataSourceService dumpProducerService = serviceContext().newService(importDataSourceConnection, DataSourceService.class);
-// dataDump = dumpProducerService.produceCreateSqlScript(request);
- dataDump = temporaryTopiaApplicationContext.getSqlService().consume(request);
- } finally {
- if (!dataSourceCreateConfiguration.isLeaveOpenSource() && temporaryTopiaApplicationContext != null) {
- temporaryTopiaApplicationContext.close();
-// serviceContext().newService(importDataSourceConfiguration, DataSourceService.class).close();
- }
- }
- log.info(String.format("Import data%s", request.isAddStandaloneTables() ? " and referential." : "."));
- executeSqlStatements(dataDump);
- }
- }
+ public void createEmpty() throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ DataSourceCreateHelper.create(this);
}
- private ObserveDataSourceConfigurationTopiaH2 createTemporaryConfiguration(File tmpDirectory, Version version) {
- File dbDirectory = new File(tmpDirectory, "obstuna" + UUID.randomUUID());
- ObserveDataSourceConfigurationTopiaH2 result = ObserveDataSourceConfigurationTopiaH2.create(
- "obtunaTmp", dbDirectory, "obstuna", "sa", "sa".toCharArray(), true, true, version);
- result.setTemporaryDirectory(tmpDirectory.toPath());
- return result;
+ public void createFromDump(ObserveDataSourceConfiguration dataSourceConfiguration, TopiaSqlScript dump) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ DataSourceCreateHelper.create(this, dataSourceConfiguration, dump);
}
+ public void createAndImport(TopiaSqlScript dump, TopiaSqlScript optionalDump) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ DataSourceCreateHelper.create(this, dump, optionalDump);
+ }
}
=====================================
core/services/client/src/main/java/fr/ird/observe/services/client/AnonymousServiceClient.java
=====================================
@@ -25,30 +25,50 @@ package fr.ird.observe.services.client;
import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConnection;
import fr.ird.observe.services.ObserveServiceInitializer;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
public class AnonymousServiceClient extends GeneratedAnonymousServiceClient {
@Override
- public ObserveDataSourceConnection create(ObserveDataSourceConfiguration config, DataSourceCreateConfigurationDto createConfiguration) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
- ObserveServiceInitializer initializer = getServiceContext().getInitializer();
- initializer.setConfiguration(config);
- ObserveDataSourceConnection dataSourceConnection = super.create(config, createConfiguration);
- initializer.setConnection(dataSourceConnection);
- initializer.setConfiguration(null);
- return dataSourceConnection;
+ public ObserveDataSourceConnection createEmpty(ObserveDataSourceConfiguration config) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ ObserveServiceInitializer initializer = start(config);
+ ObserveDataSourceConnection dataSourceConnection = super.createEmpty(config);
+ return end(initializer, dataSourceConnection);
+ }
+
+ @Override
+ public ObserveDataSourceConnection createFromDump(ObserveDataSourceConfiguration config, TopiaSqlScript dump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ ObserveServiceInitializer initializer = start(config);
+ ObserveDataSourceConnection dataSourceConnection = super.createFromDump(config, dump);
+ return end(initializer, dataSourceConnection);
+ }
+
+ @Override
+ public ObserveDataSourceConnection createFromImport(ObserveDataSourceConfiguration config, TopiaSqlScript dump, TopiaSqlScript optionalDump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ ObserveServiceInitializer initializer = start(config);
+ ObserveDataSourceConnection dataSourceConnection = super.createFromImport(config, dump, optionalDump);
+ return end(initializer, dataSourceConnection);
}
@Override
public ObserveDataSourceConnection open(ObserveDataSourceConfiguration config) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
+ ObserveServiceInitializer initializer = start(config);
+ ObserveDataSourceConnection dataSourceConnection = super.open(config);
+ return end(initializer, dataSourceConnection);
+ }
+
+ private ObserveServiceInitializer start(ObserveDataSourceConfiguration config) {
ObserveServiceInitializer initializer = getServiceContext().getInitializer();
initializer.setConfiguration(config);
- ObserveDataSourceConnection dataSourceConnection = super.open(config);
+ return initializer;
+ }
+
+ private ObserveDataSourceConnection end(ObserveServiceInitializer initializer, ObserveDataSourceConnection dataSourceConnection) {
initializer.setConnection(dataSourceConnection);
initializer.setConfiguration(null);
return dataSourceConnection;
=====================================
core/services/client/src/test/java/fr/ird/observe/services/client/service/AnonymousServiceClientReadTest.java
=====================================
@@ -25,7 +25,6 @@ package fr.ird.observe.services.client.service;
import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConnection;
@@ -80,11 +79,8 @@ public class AnonymousServiceClientReadTest extends GeneratedAnonymousServiceCli
//FIXME Should get an not implemented exception for this service
ObserveDataSourceConfigurationRest dataSourceConfiguration = serviceClientTestMethodResource.getDataSourceConfiguration();
- DataSourceCreateConfigurationDto dataSourceCreateConfiguration = new DataSourceCreateConfigurationDto();
- dataSourceCreateConfiguration.setCanCreateEmptyDatabase(true);
-
AnonymousService service = serviceClientTestMethodResource.newService(dataSourceConfiguration, AnonymousService.class);
- service.create(dataSourceConfiguration, dataSourceCreateConfiguration);
+ service.createEmpty(dataSourceConfiguration);
}
=====================================
core/services/local/src/main/java/fr/ird/observe/services/local/service/AnonymousServiceLocalSupport.java
=====================================
@@ -28,7 +28,6 @@ import fr.ird.observe.dto.db.DataSourceUserDto;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
import fr.ird.observe.dto.db.DatabaseVersionIsTooHighException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
@@ -45,6 +44,7 @@ import io.ultreia.java4all.util.Version;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.nuiton.topia.persistence.TopiaConfigurationExtension;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
import java.nio.file.Path;
import java.util.Set;
@@ -107,15 +107,39 @@ public class AnonymousServiceLocalSupport extends ObserveServiceLocal implements
}
@Override
- public ObserveDataSourceConnection create(ObserveDataSourceConfiguration config, DataSourceCreateConfigurationDto createConfiguration)
- throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
- BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
- createConfiguration.validateConfiguration(getApplicationLocale());
+ public ObserveDataSourceConnection createEmpty(ObserveDataSourceConfiguration config) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
setTemporaryDirectory(config);
- boolean initSchema = !createConfiguration.isImportDatabase();
- ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(config, initSchema);
+ ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(config, true);
try {
- topiaApplicationContext.create(config, createConfiguration);
+ topiaApplicationContext.createEmpty();
+ } catch (Exception e) {
+ close(config, topiaApplicationContext);
+ throw e;
+ }
+ ObserveDataSourceInformation dataSourceInformation = getDataSourceInformation(config, topiaApplicationContext.getConfiguration(), false);
+ return config.toConnection(topiaApplicationContext.getAuthenticationToken(), dataSourceInformation);
+ }
+
+ @Override
+ public ObserveDataSourceConnection createFromDump(ObserveDataSourceConfiguration config, TopiaSqlScript dump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ setTemporaryDirectory(config);
+ ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(config, false);
+ try {
+ topiaApplicationContext.createFromDump(config, dump);
+ } catch (Exception e) {
+ close(config, topiaApplicationContext);
+ throw e;
+ }
+ ObserveDataSourceInformation dataSourceInformation = getDataSourceInformation(config, topiaApplicationContext.getConfiguration(), false);
+ return config.toConnection(topiaApplicationContext.getAuthenticationToken(), dataSourceInformation);
+ }
+
+ @Override
+ public ObserveDataSourceConnection createFromImport(ObserveDataSourceConfiguration config, TopiaSqlScript dump, TopiaSqlScript optionalDump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ setTemporaryDirectory(config);
+ ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(config, false);
+ try {
+ topiaApplicationContext.createAndImport(dump, optionalDump);
} catch (Exception e) {
close(config, topiaApplicationContext);
throw e;
@@ -192,127 +216,6 @@ public class AnonymousServiceLocalSupport extends ObserveServiceLocal implements
return dataSourceInformation;
}
-// private void create0(ObserveTopiaApplicationContext topiaApplicationContext, ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
-// log.debug(String.format("Create topia application context: %s", topiaApplicationContext));
-// if (dataSourceCreateConfiguration.isImportDatabase()) {
-// log.info("Create new database from a script.");
-// TopiaSqlScript importDatabase = dataSourceCreateConfiguration.getImportDatabase();
-// boolean migrate = dataSourceCreateConfiguration.isMigrate();
-// TopiaMigrationService migrationService = topiaApplicationContext.getMigrationService();
-// if (dataSourceConfiguration.isLocal()) {
-// topiaApplicationContext.executeSqlStatements(importDatabase);
-// if (migrate) {
-// migrationService.createSchemaIfNotExist();
-// migrationService.runSchemaMigration();
-// }
-// } else { // base postgres
-// // on realise les import dans un base H2 temporaire
-// File tmpDir;
-// try {
-// Path temporaryDirectory = dataSourceConfiguration.getTemporaryDirectory();
-// tmpDir = Files.createTempDirectory(temporaryDirectory, "obstuna").toFile();
-// } catch (IOException e) {
-// throw new IllegalStateException("could not create temporary directory ", e);
-// }
-// ObserveDataSourceConfigurationTopiaH2 temporaryConfiguration = createTemporaryConfiguration(tmpDir, dataSourceConfiguration.getModelVersion());
-// ObserveTopiaApplicationContext temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(temporaryConfiguration, false);
-// temporaryTopiaApplicationContext.executeSqlStatements(importDatabase);
-// if (migrate) {
-// temporaryTopiaApplicationContext.getMigrationService().createSchemaIfNotExist();
-// temporaryTopiaApplicationContext.getMigrationService().runSchemaMigration();
-// }
-// DataSourceService dumpProducerService = serviceContext().newService(temporaryConfiguration, DataSourceService.class);
-// CreateDatabaseRequest request = CreateDatabaseRequest.of(true, dataSourceConfiguration.getModelVersion()).addSchema().addStandaloneTables().addAllData();
-// TopiaSqlScript dump = dumpProducerService.produceCreateSqlScript(request);
-// topiaApplicationContext.executeSqlStatements(dump);
-// migrationService.createSchemaIfNotExist();
-// migrationService.runSchemaMigration();
-// temporaryTopiaApplicationContext.close();
-// File databaseFile = temporaryConfiguration.getDatabaseFile();
-// if (!databaseFile.delete()) {
-// throw new IllegalStateException("could not delete " + databaseFile);
-// }
-// }
-// } else {
-// boolean importReferential = dataSourceCreateConfiguration.isImportReferential();
-// boolean importData = dataSourceCreateConfiguration.isImportData();
-// // si le referentiel n'est pas importé on aliment la table lastUpdateDate
-// if (!importReferential) {
-// topiaApplicationContext.insertLastUpdateDate();
-// }
-// boolean importStandaloneReferential = importReferential;
-// if (importReferential && importData) {
-// // Si on est sur la même source de données pour les deux imports, on fait tout sur la même base temporaire
-// ObserveDataSourceConfiguration importReferentialDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
-// ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
-// importStandaloneReferential = !importReferentialDataSourceConfiguration.equals(importDataSourceConfiguration);
-// }
-// boolean referentialImported = false;
-// if (importStandaloneReferential) {
-// log.info("Import referential.");
-// ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration();
-// Version dbVersion = Version.valueOf(topiaApplicationContext.getModelVersion());
-// CreateDatabaseRequest request = CreateDatabaseRequest.of(!dataSourceConfiguration.isLocal(), dbVersion)
-// .addStandaloneTables();
-// TopiaSqlScript referentialDump;
-// try {
-// ObserveDataSourceConnection importDataSourceConnection = serviceContext().newService(importDataSourceConfiguration, AnonymousService.class).open(importDataSourceConfiguration);
-// DataSourceService dumpProducerService = serviceContext().newService(importDataSourceConnection, DataSourceService.class);
-// referentialDump = dumpProducerService.produceCreateSqlScript(request);
-// topiaApplicationContext.executeSqlStatements(referentialDump);
-// } finally {
-// if (!dataSourceCreateConfiguration.isLeaveOpenSource()) {
-// serviceContext().newService(importDataSourceConfiguration, DataSourceService.class).close();
-// }
-// }
-// referentialImported = true;
-// }
-//
-// if (importData) {
-// ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration();
-// Version dbVersion = Version.valueOf(topiaApplicationContext.getModelVersion());
-// CreateDatabaseRequest request = CreateDatabaseRequest.of(!dataSourceConfiguration.isLocal(), dbVersion);
-// if (!referentialImported) {
-// log.info("Get referential.");
-// request.addStandaloneTables();
-// }
-//
-// // Récupération du dump qui contient les données
-// Set<String> importDataIds = dataSourceCreateConfiguration.getImportDataIds();
-// TopiaIdFactory idFactory = getTopiaPersistenceContext().getIdFactory();
-// Multimap<String, String> idsByType = ArrayListMultimap.create();
-// for (String importDataId : importDataIds) {
-// Class<TopiaEntity> className = idFactory.getClassName(importDataId);
-// idsByType.put(className.getName(), importDataId);
-// }
-// log.info(String.format("Get data: %s", importDataIds));
-// for (Map.Entry<String, Collection<String>> entry : idsByType.asMap().entrySet()) {
-// request.dataIdsToAdd(entry.getKey(), Set.copyOf(entry.getValue()));
-// }
-// TopiaSqlScript dataDump;
-// try {
-// ObserveDataSourceConnection importDataSourceConnection = serviceContext().newService(importDataSourceConfiguration, AnonymousService.class).open(importDataSourceConfiguration);
-// DataSourceService dumpProducerService = serviceContext().newService(importDataSourceConnection, DataSourceService.class);
-// dataDump = dumpProducerService.produceCreateSqlScript(request);
-// } finally {
-// if (!dataSourceCreateConfiguration.isLeaveOpenSource()) {
-// serviceContext().newService(importDataSourceConfiguration, DataSourceService.class).close();
-// }
-// }
-// log.info(String.format("Import data%s", request.isAddStandaloneTables() ? " and referential." : "."));
-// topiaApplicationContext.executeSqlStatements(dataDump);
-// }
-// }
-// }
-//
-// private ObserveDataSourceConfigurationTopiaH2 createTemporaryConfiguration(File tmpDirectory, Version version) {
-// File dbDirectory = new File(tmpDirectory, "obstuna" + UUID.randomUUID());
-// ObserveDataSourceConfigurationTopiaH2 result = ObserveDataSourceConfigurationTopiaH2.create(
-// "obtunaTmp", dbDirectory, "obstuna", "sa", "sa".toCharArray(), true, true, version);
-// result.setTemporaryDirectory(tmpDirectory.toPath());
-// return result;
-// }
-
private ObserveDataSourceInformation getDataSourceInformation(ObserveDataSourceConfiguration dataSourceConfiguration, TopiaConfigurationExtension topiaConfiguration, boolean canBeEmpty) throws DatabaseConnexionNotAuthorizedException {
try {
return SecurityHelper.getDataSourceInformation(SECURITY_HELPER_MODEL, dataSourceConfiguration, topiaConfiguration, canBeEmpty);
=====================================
core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestClassResource.java
=====================================
@@ -26,7 +26,6 @@ import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DataSourceValidationMode;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
@@ -66,6 +65,7 @@ public class LocalTestClassResource extends TestClassResourceSupport {
private final ObserveServiceFactoryLocal serviceFactory;
ObserveServiceInitializerConfig serviceInitializerConfig;
+ private boolean generateNow;
public LocalTestClassResource() {
this(DatabaseClassifier.DEFAULT);
@@ -105,11 +105,8 @@ public class LocalTestClassResource extends TestClassResourceSupport {
AnonymousService service = newService(sharedDatabaseConfiguration, AnonymousService.class);
try {
- DataSourceCreateConfigurationDto createConfiguration = new DataSourceCreateConfigurationDto();
TopiaSqlScript script = getDataSourcesForTestManager().getCache(dbVersion, dbName);
- createConfiguration.setImportDatabase(script);
- createConfiguration.setMigrate(false);
- service.create(sharedDatabaseConfiguration, createConfiguration);
+ service.createFromDump(sharedDatabaseConfiguration, script);
} finally {
newService(sharedDatabaseConfiguration, DataSourceService.class).close();
}
@@ -134,15 +131,13 @@ public class LocalTestClassResource extends TestClassResourceSupport {
ObserveServiceInitializer serviceInitializer = new ObserveServiceInitializer(getServiceInitializerConfig(), dataSourceConfiguration, null) {
@Override
public Date now() {
- return generateNow?new Date():ObserveFixtures.DATE;
+ return generateNow ? new Date() : ObserveFixtures.DATE;
}
};
serviceInitializer.setConfiguration(dataSourceConfiguration);
return serviceFactory.newService(serviceInitializer, serviceType);
}
- private boolean generateNow;
-
public boolean isGenerateNow() {
return generateNow;
}
@@ -152,10 +147,10 @@ public class LocalTestClassResource extends TestClassResourceSupport {
}
public <S extends ObserveService> S newService(ObserveDataSourceConnection dataSourceConnection, Class<S> serviceType) {
- ObserveServiceInitializer serviceInitializer = new ObserveServiceInitializer(getServiceInitializerConfig(), null, dataSourceConnection){
+ ObserveServiceInitializer serviceInitializer = new ObserveServiceInitializer(getServiceInitializerConfig(), null, dataSourceConnection) {
@Override
public Date now() {
- return generateNow?new Date():ObserveFixtures.DATE;
+ return generateNow ? new Date() : ObserveFixtures.DATE;
}
};
return serviceFactory.newService(serviceInitializer, serviceType);
=====================================
core/services/test/src/main/java/fr/ird/observe/services/service/AnonymousServiceFixtures.java
=====================================
@@ -72,11 +72,23 @@ public class AnonymousServiceFixtures extends GeneratedAnonymousServiceFixtures
}
@Override
- public void create(fr.ird.observe.services.ObserveServicesProvider servicesProvider, AnonymousService service) {
+ public void createEmpty(fr.ird.observe.services.ObserveServicesProvider servicesProvider, AnonymousService service) {
// FIXME:Test Remove super method invocation and implements fixture
// actual = service.create(getProperty("create.id"));
// Assert.assertNotNull(actual);
- super.create(servicesProvider, service);
+ super.createEmpty(servicesProvider, service);
+ }
+
+ @Override
+ public void createFromDump(ObserveServicesProvider servicesProvider, AnonymousService service) {
+ //FIXME
+ super.createFromDump(servicesProvider, service);
+ }
+
+ @Override
+ public void createFromImport(ObserveServicesProvider servicesProvider, AnonymousService service) {
+ //FIXME
+ super.createFromImport(servicesProvider, service);
}
@Override
=====================================
pom.xml
=====================================
@@ -23,7 +23,7 @@
<parent>
<groupId>io.ultreia.maven</groupId>
<artifactId>pom</artifactId>
- <version>2022.36</version>
+ <version>2022.37</version>
</parent>
<groupId>fr.ird.observe</groupId>
<artifactId>ird-observe</artifactId>
=====================================
server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm
=====================================
@@ -25,7 +25,9 @@ server.main.handler.class=fr.ird.observe.server.ObserveWebMainHandler
GET /AnonymousService/applySecurity AnonymousServiceRestApi.applySecurity
GET /AnonymousService/checkCanConnect AnonymousServiceRestApi.checkCanConnect
GET /AnonymousService/checkCanConnectOrBeEmpty AnonymousServiceRestApi.checkCanConnectOrBeEmpty
-GET /AnonymousService/create AnonymousServiceRestApi.create
+POST /AnonymousService/createEmpty AnonymousServiceRestApi.createEmpty
+POST /AnonymousService/createFromDump AnonymousServiceRestApi.createFromDump
+POST /AnonymousService/createFromImport AnonymousServiceRestApi.createFromImport
GET /AnonymousService/generateHomeId AnonymousServiceRestApi.generateHomeId
GET /AnonymousService/getModelVersion AnonymousServiceRestApi.getModelVersion
GET /AnonymousService/getServerVersion AnonymousServiceRestApi.getServerVersion
=====================================
server/core/src/main/java/fr/ird/observe/server/ObserveWebApplicationContext.java
=====================================
@@ -28,6 +28,7 @@ import fr.ird.observe.dto.server.ServerModelHelper;
import fr.ird.observe.server.configuration.ServerConfig;
import fr.ird.observe.server.configuration.ServerConfigApplicationComponent;
import fr.ird.observe.server.configuration.ServerConfigFinder;
+import fr.ird.observe.server.converter.JsonAwareDtoConverter;
import fr.ird.observe.server.security.ObserveWebSecurityApplicationContext;
import fr.ird.observe.services.ObserveServiceFactory;
import fr.ird.observe.services.ObserveServiceInitializer;
@@ -37,9 +38,11 @@ import fr.ird.observe.services.service.ObserveService;
import fr.ird.observe.spi.json.DtoGsonSupplier;
import io.ultreia.java4all.application.context.ApplicationContext;
import io.ultreia.java4all.util.Version;
+import org.apache.commons.beanutils.ConvertUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.debux.webmotion.server.call.HttpContext;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
import javax.servlet.ServletContext;
import java.io.Closeable;
@@ -125,6 +128,9 @@ public class ObserveWebApplicationContext extends ApplicationContext {
closeDeleteTemporaryFilesTimer();
}
deleteTemporaryFilesTimer = CleanTemporaryFilesTask.create(getApplicationConfiguration());
+
+ JsonAwareDtoConverter<TopiaSqlScript> converter = new JsonAwareDtoConverter<>(getGsonSupplier().get(), TopiaSqlScript.class);
+ ConvertUtils.register(converter, TopiaSqlScript.class);
}
@Override
=====================================
server/core/src/main/java/fr/ird/observe/server/controller/AnonymousServiceRestApi.java
=====================================
@@ -26,7 +26,6 @@ import fr.ird.observe.dto.db.BabModelVersionException;
import fr.ird.observe.dto.db.DataSourceUserDto;
import fr.ird.observe.dto.db.DatabaseConnexionNotAuthorizedException;
import fr.ird.observe.dto.db.DatabaseNotFoundException;
-import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
import fr.ird.observe.dto.db.configuration.DataSourceCreateWithNoReferentialImportException;
import fr.ird.observe.dto.db.configuration.IncompatibleDataSourceCreateConfigurationException;
import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
@@ -38,6 +37,7 @@ import fr.ird.observe.services.service.AnonymousService;
import io.ultreia.java4all.util.Version;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.nuiton.topia.persistence.script.TopiaSqlScript;
import java.lang.reflect.Method;
import java.util.LinkedHashMap;
@@ -49,6 +49,12 @@ public class AnonymousServiceRestApi extends GeneratedAnonymousServiceRestApi {
private static final Logger log = LogManager.getLogger(AnonymousServiceRestApi.class);
+ @Override
+ public ObserveDataSourceInformation checkCanConnectOrBeEmpty(ObserveDataSourceConfiguration config) throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
+ ObserveWebUserSession session = getRequestContext().getConfigurationSession(config);
+ return getService().checkCanConnectOrBeEmpty(session.getConfiguration());
+ }
+
@Override
public ObserveDataSourceInformation checkCanConnect(ObserveDataSourceConfiguration config) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException {
ObserveWebUserSession session = getRequestContext().getConfigurationSession(config);
@@ -56,11 +62,25 @@ public class AnonymousServiceRestApi extends GeneratedAnonymousServiceRestApi {
}
@Override
- public ObserveDataSourceConnection create(ObserveDataSourceConfiguration config, DataSourceCreateConfigurationDto createConfiguration)
- throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException,
- DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException {
+ public ObserveDataSourceConnection createEmpty(ObserveDataSourceConfiguration config) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ ObserveWebUserSession configurationSession = getRequestContext().getConfigurationSession(config);
+ ObserveDataSourceConnection connection = getService().createEmpty(configurationSession.getConfiguration());
+ ObserveWebUserSession authenticatedSession = getSecurityApplicationContext().registerAuthenticatedSession(configurationSession, connection);
+ return authenticatedSession.toRestConnection(config);
+ }
+
+ @Override
+ public ObserveDataSourceConnection createFromDump(ObserveDataSourceConfiguration config, TopiaSqlScript dump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
+ ObserveWebUserSession configurationSession = getRequestContext().getConfigurationSession(config);
+ ObserveDataSourceConnection connection = getService().createFromDump(configurationSession.getConfiguration(), dump);
+ ObserveWebUserSession authenticatedSession = getSecurityApplicationContext().registerAuthenticatedSession(configurationSession, connection);
+ return authenticatedSession.toRestConnection(config);
+ }
+
+ @Override
+ public ObserveDataSourceConnection createFromImport(ObserveDataSourceConfiguration config, TopiaSqlScript dump, TopiaSqlScript optionalDump) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
ObserveWebUserSession configurationSession = getRequestContext().getConfigurationSession(config);
- ObserveDataSourceConnection connection = getService().create(configurationSession.getConfiguration(), createConfiguration);
+ ObserveDataSourceConnection connection = getService().createFromImport(configurationSession.getConfiguration(), dump,optionalDump );
ObserveWebUserSession authenticatedSession = getSecurityApplicationContext().registerAuthenticatedSession(configurationSession, connection);
return authenticatedSession.toRestConnection(config);
}
=====================================
server/core/src/main/java/fr/ird/observe/server/converter/JsonAwareDtoConverter.java
=====================================
@@ -23,31 +23,32 @@ package fr.ird.observe.server.converter;
*/
import com.google.gson.Gson;
-import fr.ird.observe.dto.ObserveDto;
+import io.ultreia.java4all.http.json.JsonAware;
import org.apache.commons.beanutils.converters.AbstractConverter;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import io.ultreia.java4all.http.json.JsonAware;
/**
* Created on 07/09/15.
*
* @author Tony Chemit - dev(a)tchemit.fr
*/
-public class JsonAwareDtoConverter extends AbstractConverter {
+public class JsonAwareDtoConverter<TT extends JsonAware> extends AbstractConverter {
private static final Logger log = LogManager.getLogger(JsonAwareDtoConverter.class);
protected final Gson gson;
+ private final Class<TT> type;
- public JsonAwareDtoConverter(Gson gson) {
+ public JsonAwareDtoConverter(Gson gson, Class<TT> type) {
this.gson = gson;
+ this.type = type;
}
@Override
protected <T> T convertToType(Class<T> type, Object value) {
T observeDto;
- if (JsonAware.class.isAssignableFrom(type)) {
+ if (type.isAssignableFrom(type)) {
String gsonContent = value.toString();
observeDto = gson.fromJson(gsonContent, type);
log.info("convert observeDto: " + observeDto);
@@ -59,7 +60,7 @@ public class JsonAwareDtoConverter extends AbstractConverter {
}
@Override
- protected Class<?> getDefaultType() {
- return ObserveDto.class;
+ protected Class<TT> getDefaultType() {
+ return type;
}
}
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/a864fb664be6b4f57a7edf8a…
--
View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/a864fb664be6b4f57a7edf8a…
You're receiving this email because of your account on gitlab.com.
1
0