mailman.cloud.codelutin.com
Sign In Sign Up
Manage this list Sign In Sign Up

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview

Observe-commits

Thread Start a new thread
Download
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
observe-commits@list.forge.codelutin.com

  • 7199 discussions
[Git][ultreiaio/ird-observe][develop] 3 commits: Add referential replication order more easy from topia application context - See #1691
by Tony CHEMIT 22 Dec '20

22 Dec '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: d0cee04c by Tony Chemit at 2020-12-22T19:35:16+01:00 Add referential replication order more easy from topia application context - See #1691 - - - - - 17341bb8 by Tony Chemit at 2020-12-22T19:37:31+01:00 Add referential replication order more easy from topia application context - Closes #1691 - - - - - 1acf1864 by Tony Chemit at 2020-12-22T19:37:38+01:00 fix typo - - - - - 8 changed files: - models/persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java - models/persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaEntitySqlModelSupportImpl.java - server/core/src/main/filtered-resources/mapping - services/api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java - services/api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService.java - services/api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeResult.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceLocal.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/ReplaceSqlStatementGenerator.java Changes: ===================================== models/persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java ===================================== @@ -22,6 +22,8 @@ package fr.ird.observe.entities; * #L% */ +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.dto.referential.ReferentialDto; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.hibernate.tool.hbm2ddl.SchemaExport; @@ -165,6 +167,10 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat return getTopiaEntitySqlModelSupport().getSqlModel(); } + public ImmutableSet<Class<? extends ReferentialDto>> referentialForReplicationDto() { + return getTopiaEntitySqlModelSupport().referentialForReplicationDto(); + } + @Override public boolean equals(Object o) { if (this == o) return true; ===================================== models/persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaEntitySqlModelSupportImpl.java ===================================== @@ -22,7 +22,12 @@ package fr.ird.observe.entities; * #L% */ +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.entities.referential.ReferentialEntity; +import fr.ird.observe.spi.PersistenceBusinessProject; +import fr.ird.observe.spi.context.ReferentialDtoEntityContext; +import io.ultreia.java4all.lang.Objects2; import org.nuiton.topia.persistence.metadata.sql.TopiaEntitySqlDescriptor; import org.nuiton.topia.persistence.metadata.sql.TopiaEntitySqlDescriptors; @@ -34,6 +39,8 @@ import org.nuiton.topia.persistence.metadata.sql.TopiaEntitySqlDescriptors; */ public class ObserveTopiaEntitySqlModelSupportImpl extends ObserveTopiaEntitySqlModelSupport { + private ImmutableSet<Class<? extends ReferentialDto>> referentialForReplication; + public TopiaEntitySqlDescriptors dataPsTripForReplication() { return getSqlModel().getReplicationOrderByEntryPointDescriptors(fr.ird.observe.entities.data.ps.common.Trip.class.getName()); } @@ -64,4 +71,21 @@ public class ObserveTopiaEntitySqlModelSupportImpl extends ObserveTopiaEntitySql return getSqlModel().getDescriptor(fqn); } + @SuppressWarnings({"rawtypes", "unchecked"}) + public ImmutableSet<Class<? extends ReferentialDto>> referentialForReplicationDto() { + if (referentialForReplication == null) { + ImmutableSet.Builder<Class<? extends ReferentialDto>> builder = ImmutableSet.builder(); + for (TopiaEntitySqlDescriptor descriptor : getSqlModel().getReplicationOrderWithStandaloneDescriptors()) { + String entityName = descriptor.getTable().getEntityName(); + Class<? extends ReferentialEntity> entityType = Objects2.forName(entityName); + ReferentialDtoEntityContext spi = PersistenceBusinessProject.fromReferentialEntity(entityType); + if (spi != null) { + Class<? extends ReferentialDto> dtoType = spi.toDtoType(); + builder.add(dtoType); + } + } + referentialForReplication = builder.build(); + } + return referentialForReplication; + } } ===================================== server/core/src/main/filtered-resources/mapping ===================================== @@ -81,6 +81,7 @@ POST /api/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynch GET /api/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService/filterIdsUsedInLocalSource v1.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeLocalServiceRestApi.filterIdsUsedInLocalSource GET /api/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService/generateSqlRequests v1.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeLocalServiceRestApi.generateSqlRequests GET /api/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService/getLocalSourceReferentialToDelete v1.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeLocalServiceRestApi.getLocalSourceReferentialToDelete +GET /api/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService/referentialReplicationOrder v1.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeLocalServiceRestApi.referentialReplicationOrder POST /api/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService/updateLastUpdateDates v1.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeLocalServiceRestApi.updateLastUpdateDates POST /api/v1/actions/synchro/referential/ng/ReferentialSynchronizeService/executeSqlListRequest v1.actions.synchro.referential.ng.ReferentialSynchronizeServiceRestApi.executeSqlListRequest POST /api/v1/actions/synchro/referential/ng/ReferentialSynchronizeService/produceSqlListRequest v1.actions.synchro.referential.ng.ReferentialSynchronizeServiceRestApi.produceSqlListRequest ===================================== services/api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java ===================================== @@ -78,6 +78,8 @@ public class UnidirectionalReferentialSynchronizeEngine { .addAll(rightDiffStates.keySet()) .build(); + ImmutableSet<Class<? extends ReferentialDto>> replicationOrder = localService.referentialReplicationOrder(); + ImmutableSet.Builder<UnidirectionalReferentialSynchronizeRequest.Builder<?>> referentialSynchronizeRequestBuilders = ImmutableSet.builder(); UnidirectionalReferentialSynchronizeCallbackRequests callbackRequests = new UnidirectionalReferentialSynchronizeCallbackRequests(); @@ -86,7 +88,7 @@ public class UnidirectionalReferentialSynchronizeEngine { ObserveBusinessProject businessProject = ObserveBusinessProject.get(); - for (Class<? extends ReferentialDto> dtoType : businessProject.getReferentialTypes()) { + for (Class<? extends ReferentialDto> dtoType : replicationOrder) { if (types.contains(dtoType)) { @SuppressWarnings("rawtypes") DtoReferenceDefinition referentialDefinition = businessProject.getOptionalReferenceDefinition(dtoType).orElseThrow(IllegalStateException::new); @@ -141,7 +143,7 @@ public class UnidirectionalReferentialSynchronizeEngine { result.flushRequest(referentialSynchronizeRequest); - Set<String> generatedSqlRequests = localService.generateSqlRequests(referentialSynchronizeRequest); + List<String> generatedSqlRequests = localService.generateSqlRequests(referentialSynchronizeRequest); for (String sqlStatement : generatedSqlRequests) { if (sqlStatement.startsWith("INSERT")) { ===================================== services/api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService.java ===================================== @@ -22,6 +22,7 @@ package fr.ird.observe.services.service.actions.synchro.referential.legacy; * #L% */ +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet; @@ -43,6 +44,14 @@ import io.ultreia.java4all.http.spi.Post; */ public interface UnidirectionalReferentialSynchronizeLocalService extends ObserveService { + /** + * @return the replication order to insert data + * @since 8.0.2 + */ + @MethodCredential(Permission.READ_REFERENTIAL) + @Get + ImmutableSet<Class<? extends ReferentialDto>> referentialReplicationOrder(); + /** * Pour un référentiel d'un type donné (son nom est donné), détecte les référentiels dont * les identifiants sont passés en paramètres qui sont réellement utilisés dans la source locale. @@ -73,16 +82,16 @@ public interface UnidirectionalReferentialSynchronizeLocalService extends Observ * * @param <D> type des référentiels à traiter * @param request la demande des actions à produire pour un référentiel donné - * @return l'ensemble des requètes sql à appliquer. + * @return l'ensemble des requêtes sql à appliquer. */ @MethodCredential(Permission.READ_REFERENTIAL) @Get - <D extends ReferentialDto> ImmutableSet<String> generateSqlRequests(UnidirectionalReferentialSynchronizeRequest<D> request); + <D extends ReferentialDto> ImmutableList<String> generateSqlRequests(UnidirectionalReferentialSynchronizeRequest<D> request); /** - * Pour appliquer les requètes sql de mise à jour du réferentiel. + * Pour appliquer les requêtes sql de mise à jour du référentiel. * - * @param sqlRequests les requètes sql à appliquer + * @param sqlRequests les requêtes sql à appliquer */ @MethodCredential(Permission.READ_REFERENTIAL) //FIXME::Security Il faut introduire une nouvelle permission EditReferentialPermission et ici bien utiliser WriteReferentialPermission ===================================== services/api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeResult.java ===================================== @@ -23,14 +23,12 @@ package fr.ird.observe.services.service.actions.synchro.referential.legacy; */ import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.Multimap; import fr.ird.observe.dto.ObserveDto; import fr.ird.observe.dto.referential.ReferentialDto; import org.apache.commons.lang3.tuple.Pair; -import java.util.Collection; import java.util.LinkedHashSet; -import java.util.Map; +import java.util.List; import java.util.Set; /** @@ -44,10 +42,10 @@ import java.util.Set; public class UnidirectionalReferentialSynchronizeResult implements ObserveDto { private final Set<Class<? extends ReferentialDto>> referentialNames; - private final Multimap<Class<? extends ReferentialDto>, String> referentialAdded; - private final Multimap<Class<? extends ReferentialDto>, String> referentialUpdated; - private final Multimap<Class<? extends ReferentialDto>, Pair<String, String>> referentialReplaced; - private final Multimap<Class<? extends ReferentialDto>, String> referentialRemoved; + private final ArrayListMultimap<Class<? extends ReferentialDto>, String> referentialAdded; + private final ArrayListMultimap<Class<? extends ReferentialDto>, String> referentialUpdated; + private final ArrayListMultimap<Class<? extends ReferentialDto>, Pair<String, String>> referentialReplaced; + private final ArrayListMultimap<Class<? extends ReferentialDto>, String> referentialRemoved; public UnidirectionalReferentialSynchronizeResult() { this.referentialNames = new LinkedHashSet<>(); @@ -65,58 +63,36 @@ public class UnidirectionalReferentialSynchronizeResult implements ObserveDto { return referentialNames; } - public Collection<String> getReferentialAdded(Class<? extends ReferentialDto> referentialName) { + public List<String> getReferentialAdded(Class<? extends ReferentialDto> referentialName) { return referentialAdded.get(referentialName); } - public Collection<String> getReferentialUpdated(Class<? extends ReferentialDto> referentialName) { + public List<String> getReferentialUpdated(Class<? extends ReferentialDto> referentialName) { return referentialUpdated.get(referentialName); } - public Collection<Pair<String, String>> getReferentialReplaced(Class<? extends ReferentialDto> referentialName) { + public List<Pair<String, String>> getReferentialReplaced(Class<? extends ReferentialDto> referentialName) { return referentialReplaced.get(referentialName); } - public Collection<String> getReferentialRemoved(Class<? extends ReferentialDto> referentialName) { + public List<String> getReferentialRemoved(Class<? extends ReferentialDto> referentialName) { return referentialRemoved.get(referentialName); } void flushRequest(UnidirectionalReferentialSynchronizeRequest<?> referentialSynchronizeRequest) { - Class<? extends ReferentialDto> referentialName = referentialSynchronizeRequest.getReferentialName(); - if (referentialSynchronizeRequest.withReferentialToAdd()) { - - for (ReferentialDto referentialDto : referentialSynchronizeRequest.getReferentialToAdd()) { - addReferentialAdded(referentialName, referentialDto.getId()); - } - + referentialSynchronizeRequest.getReferentialToAdd().forEach(referentialDto -> addReferentialAdded(referentialName, referentialDto.getId())); } - if (referentialSynchronizeRequest.withReferentialToUpdate()) { - - for (ReferentialDto referentialDto : referentialSynchronizeRequest.getReferentialToUpdate()) { - addReferentialUpdated(referentialName, referentialDto.getId()); - } - + referentialSynchronizeRequest.getReferentialToUpdate().forEach(referentialDto -> addReferentialUpdated(referentialName, referentialDto.getId())); } - if (referentialSynchronizeRequest.withReferentialToRemove()) { - - for (String id : referentialSynchronizeRequest.getReferentialToRemove()) { - addReferentialRemoved(referentialName, id); - } - + referentialSynchronizeRequest.getReferentialToRemove().forEach(id -> addReferentialRemoved(referentialName, id)); } - if (referentialSynchronizeRequest.withReferentialToReplace()) { - - for (Map.Entry<String, String> entry : referentialSynchronizeRequest.getReferentialToReplace().entrySet()) { - addReferentialReplaced(referentialName, entry.getKey(), entry.getValue()); - } - + referentialSynchronizeRequest.getReferentialToReplace().forEach((key, value) -> addReferentialReplaced(referentialName, key, value)); } - } private void addReferentialAdded(Class<? extends ReferentialDto> referentialName, String id) { ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceLocal.java ===================================== @@ -32,7 +32,6 @@ import fr.ird.observe.entities.ObserveEntityEnum; import fr.ird.observe.entities.referential.ReferentialEntity; import fr.ird.observe.services.local.ObserveServiceContextLocal; import fr.ird.observe.services.local.service.ObserveServiceLocal; -import fr.ird.observe.services.local.service.actions.synchro.referential.sql.ApplySqlRequestWork; import fr.ird.observe.services.local.service.actions.synchro.referential.sql.DeleteSqlStatementGenerator; import fr.ird.observe.services.local.service.actions.synchro.referential.sql.InsertSqlStatementGenerator; import fr.ird.observe.services.local.service.actions.synchro.referential.sql.ReplaceSqlStatementGenerator; @@ -45,12 +44,18 @@ import fr.ird.observe.services.service.usage.DtoUsageCountResult; import fr.ird.observe.services.service.usage.UsageService; import fr.ird.observe.spi.ObservePersistenceBusinessProject; import fr.ird.observe.spi.context.ReferentialDtoEntityContext; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; import org.nuiton.topia.persistence.metadata.TopiaMetadataModel; -import org.nuiton.topia.persistence.support.TopiaSqlWork; +import org.nuiton.topia.persistence.script.SqlScriptReader; +import org.nuiton.topia.persistence.script.TopiaSqlScript; +import java.io.IOException; +import java.nio.file.Path; import java.util.LinkedHashSet; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; @@ -62,6 +67,7 @@ import java.util.Set; * @since 5.0 */ public class UnidirectionalReferentialSynchronizeLocalServiceLocal extends ObserveServiceLocal implements UnidirectionalReferentialSynchronizeLocalService { + private static final Logger log = LogManager.getLogger(UnidirectionalReferentialSynchronizeLocalServiceLocal.class); private LastUpdateDateService lastUpdateDateService; private UsageService usageService; @@ -73,6 +79,11 @@ public class UnidirectionalReferentialSynchronizeLocalServiceLocal extends Obser usageService = serviceContext.newService(UsageService.class); } + @Override + public ImmutableSet<Class<? extends ReferentialDto>> referentialReplicationOrder() { + return serviceContext.getTopiaApplicationContext().referentialForReplicationDto(); + } + @Override public <D extends ReferentialDto> ImmutableSet<String> filterIdsUsedInLocalSource(Class<D> dtoType, ImmutableSet<String> ids) { Set<String> result = new LinkedHashSet<>(); @@ -89,13 +100,12 @@ public class UnidirectionalReferentialSynchronizeLocalServiceLocal extends Obser public <D extends ReferentialDto, R extends ReferentialDtoReference> ReferentialDtoReferenceSet<R> getLocalSourceReferentialToDelete(Class<D> dtoType, ImmutableSet<String> ids) { ReferentialDtoEntityContext<D, R, ?, ?> modelContext = ObservePersistenceBusinessProject.fromReferentialDto(dtoType); Class<? extends ReferentialEntity<D, R>> entityType = modelContext.toEntityType(); - Class<R> referenceType = modelContext.toReferenceType(); - return getLocalSourceReferentialToDelete0(entityType, referenceType, ids); + return getLocalSourceReferentialToDelete0(entityType, ids); } @Override - public <D extends ReferentialDto> ImmutableSet<String> generateSqlRequests(UnidirectionalReferentialSynchronizeRequest<D> request) { - Set<String> result = new LinkedHashSet<>(); + public <D extends ReferentialDto> ImmutableList<String> generateSqlRequests(UnidirectionalReferentialSynchronizeRequest<D> request) { + List<String> result = new LinkedList<>(); Class<D> dtoType = request.getReferentialName(); Class<ReferentialEntity<D, ?>> entityType = ObservePersistenceBusinessProject.fromReferentialDtoWeak(dtoType).toEntityType(); ObserveEntityEnum entityEnum = ObserveEntityEnum.valueOf(entityType); @@ -137,13 +147,23 @@ public class UnidirectionalReferentialSynchronizeLocalServiceLocal extends Obser result.addAll(sql); } } - return ImmutableSet.copyOf(result); + return ImmutableList.copyOf(result); } @Override public void applySqlRequests(ImmutableSet<String> sqlRequests) { - TopiaSqlWork applySqlWork = new ApplySqlRequestWork(sqlRequests); - getTopiaPersistenceContext().getSqlSupport().doSqlWork(applySqlWork); + + Path scriptPath = serviceContext.getTemporaryDirectoryRoot().toPath().resolve("apply-UnidirectionalReferentialSynchronize-" + serviceContext.now().getTime() + "-sql"); + + TopiaSqlScript topiaSqlScript = TopiaSqlScript.of(scriptPath); + topiaSqlScript.setLocation(() -> SqlScriptReader.of(sqlRequests)); + try { + topiaSqlScript.copy(scriptPath); + } catch (IOException e) { + throw new IllegalStateException("Can't write script at: " + scriptPath, e); + } + log.info(String.format("Will execute script (with %d statement(s): %s", sqlRequests.size(), scriptPath)); + getTopiaPersistenceContext().executeSqlScript(topiaSqlScript); } @Override @@ -157,7 +177,7 @@ public class UnidirectionalReferentialSynchronizeLocalServiceLocal extends Obser return usageCount.getCount().values().stream().reduce(Long::sum).orElse(0L); } - private <E extends ReferentialEntity<D, R>, D extends ReferentialDto, R extends ReferentialDtoReference> ReferentialDtoReferenceSet<R> getLocalSourceReferentialToDelete0(Class<E> entityType, Class<R> referenceType, ImmutableSet<String> ids) { + private <E extends ReferentialEntity<D, R>, D extends ReferentialDto, R extends ReferentialDtoReference> ReferentialDtoReferenceSet<R> getLocalSourceReferentialToDelete0(Class<E> entityType, ImmutableSet<String> ids) { TopiaDao<E> dao = getTopiaPersistenceContext().getDao(entityType); List<E> entities = dao.forTopiaIdIn(ids).findAll(); ReferentialDtoEntityContext<D, R, E, ?> spi = ObservePersistenceBusinessProject.fromReferentialEntity(entityType); ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/ReplaceSqlStatementGenerator.java ===================================== @@ -70,7 +70,7 @@ public class ReplaceSqlStatementGenerator { for (TopiaMetadataAssociation replacementStruct : associations) { Class<? extends TopiaEntity> entityType = ObserveEntityEnum.valueOf(replacementStruct.getOwner().getType()).getContract(); if (ReferentialEntity.class.isAssignableFrom(entityType)) { - // do not update referentials associations (see https://gitlab.com/ultreiaio/ird-observe/issues/1065) + // do not update referential associations (see https://gitlab.com/ultreiaio/ird-observe/issues/1065) continue; } String sql = SqlStatements.generateAssociationUpdateStatement(replacementStruct, sourceId, replacementId); View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/5ffad0061b1ace8710dd1c0a… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/5ffad0061b1ace8710dd1c0a… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] Ajouter un onglet cartographie dans la configuration - Closes #1689
by Tony CHEMIT 22 Dec '20

22 Dec '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 5ffad006 by Tony Chemit at 2020-12-22T16:26:21+01:00 Ajouter un onglet cartographie dans la configuration - Closes #1689 - - - - - 6 changed files: - client/core/src/main/i18n/getters/java.getter - client/core/src/main/java/fr/ird/observe/client/main/body/ClientConfigUI.java - client/datasource/editor/api/src/main/i18n/getters/jaxx.getter - client/i18n/src/main/i18n/translations/observe_en_GB.properties - client/i18n/src/main/i18n/translations/observe_es_ES.properties - client/i18n/src/main/i18n/translations/observe_fr_FR.properties Changes: ===================================== client/core/src/main/i18n/getters/java.getter ===================================== @@ -7,6 +7,8 @@ observe.config.category.application observe.config.category.application.description observe.config.category.expert observe.config.category.expert.description +observe.config.category.map +observe.config.category.map.description observe.config.category.observation observe.config.category.observation.description observe.config.category.speciesList.longline ===================================== client/core/src/main/java/fr/ird/observe/client/main/body/ClientConfigUI.java ===================================== @@ -107,7 +107,7 @@ public class ClientConfigUI extends JXTitledPanel { private final SpeciesListsTableCellRenderer speciesListsTableCellRenderer; protected ObserveConfigUIBuilder(ClientConfig config, - ObserveUICallbackManager uiCallbackManager, SpeciesListTableCellEditor speciesListTableCellEditor, + SpeciesListTableCellEditor speciesListTableCellEditor, SpeciesListsTableCellRenderer speciesListsTableCellRenderer) { super(config, config.get(), config.get().getUserConfigFile()); this.speciesListTableCellEditor = speciesListTableCellEditor; @@ -189,7 +189,6 @@ public class ClientConfigUI extends JXTitledPanel { @Override public void setValue(Object value) { if (value instanceof String) { - value = SpeciesListTableCellEditor.this.entityMap.get(String.valueOf(value)); } component.setSelectedItem((SpeciesListReference) value); @@ -197,10 +196,8 @@ public class ClientConfigUI extends JXTitledPanel { @Override public Object getCellEditorValue() { - String result = null; SpeciesListReference selectedItem = component.getModel().getSelectedItem(); - result = selectedItem.getId(); - return result; + return selectedItem.getId(); } @Override @@ -216,15 +213,12 @@ public class ClientConfigUI extends JXTitledPanel { public boolean stopCellEditing() { if (component.getConfig().isEditable()) { // Commit edited value. - component.getCombobox().actionPerformed( - new ActionEvent(SpeciesListTableCellEditor.this, 0, "")); + component.getCombobox().actionPerformed(new ActionEvent(SpeciesListTableCellEditor.this, 0, "")); } return super.stopCellEditing(); } }; - } - } private void quit() { @@ -232,24 +226,17 @@ public class ClientConfigUI extends JXTitledPanel { } private ObserveConfigUIBuilder buildUI(ObserveUICallbackManager uiCallbackManager, ClientConfig config, ObserveSwingDataSource dataSource, DecoratorService decoratorService) { - SpeciesListTableCellEditor editor = null; SpeciesListsTableCellRenderer renderer = null; - if (dataSource != null && dataSource.isOpen()) { - Set<SpeciesListReference> speciesLists = dataSource.getReferentialReferences(SpeciesListReference.class); - Map<String, SpeciesListReference> speciesListMap = ReferentialDtoReference.splitById(speciesLists); - ReferentialReferenceDecorator<SpeciesListReference> referenceDecorator = decoratorService.getReferentialReferenceDecorator(SpeciesListReference.class); - editor = new SpeciesListTableCellEditor(speciesLists, speciesListMap, referenceDecorator); renderer = new SpeciesListsTableCellRenderer(speciesListMap, referenceDecorator); - } - ObserveConfigUIBuilder helper = new ObserveConfigUIBuilder(config, uiCallbackManager, editor, renderer); + ObserveConfigUIBuilder helper = new ObserveConfigUIBuilder(config, editor, renderer); uiCallbackManager.getCallbacks().forEach(helper::registerCallBack); @@ -264,6 +251,7 @@ public class ClientConfigUI extends JXTitledPanel { addApplicationOptions(helper); addUiOptions(helper); addNavigationOptions(helper); + addMapOptions(helper); addDataOptions(helper, dataSource); addExpertOptions(helper); addTechnicalOptions(helper); @@ -304,6 +292,13 @@ public class ClientConfigUI extends JXTitledPanel { helper.addOption(ClientConfigOption.DEFAULT_DB_MODE); helper.addOption(ClientConfigOption.DEFAULT_CREATION_MODE); helper.addOption(ClientConfigOption.STORE_REMOTE_STORAGE); + } + + private void addMapOptions(ObserveConfigUIBuilder helper) { + + helper.addCategory(n("observe.config.category.map"), + n("observe.config.category.map.description"), + "ui"); helper.addOption(ClientConfigOption.MAP_BACKGROUND_COLOR); ClientConfig.MAP_LAYERS.forEach(helper::addOption); ===================================== client/datasource/editor/api/src/main/i18n/getters/jaxx.getter ===================================== @@ -69,4 +69,3 @@ observe.ui.usage.action.shouldReplace observe.ui.usage.replaceTitle observe.ui.usage.usageTitle observe.ui.view.message -observe.ui.view.navigation ===================================== client/i18n/src/main/i18n/translations/observe_en_GB.properties ===================================== @@ -39,6 +39,8 @@ observe.config.category.application=Application observe.config.category.application.description=Application options observe.config.category.expert=Expert observe.config.category.expert.description=Export mode options +observe.config.category.map=Map +observe.config.category.map.description=Maps configuration observe.config.category.observation=Qualification of observations observe.config.category.observation.description=Qualification of observations observe.config.category.speciesList.longline=Species lists for longline @@ -1689,6 +1691,5 @@ observe.ui.usage.action.shouldReplace=Remplace desactivated referential ? observe.ui.usage.replaceTitle=Replacement object observe.ui.usage.usageTitle=Founded references observe.ui.view.message=Messages -observe.ui.view.navigation=Navigation observe.warning.nimbus.landf=Could not use Look and Fell Nimbus, need at least version 1.6u10 of java. observe.warning.no.ui=No gui environment found ===================================== client/i18n/src/main/i18n/translations/observe_es_ES.properties ===================================== @@ -39,6 +39,8 @@ observe.config.category.application=Aplicación observe.config.category.application.description=Opciones de la aplicación observe.config.category.expert=Experto observe.config.category.expert.description=Opciones de modo experto +observe.config.category.map=Mapa +observe.config.category.map.description=Mapa Configuración observe.config.category.observation=Calificación de las observaciones observe.config.category.observation.description=Gestion de los indicadores de calificación de los programas observe.config.category.speciesList.longline=Configuración de las listas de especies (Palangre) @@ -1689,6 +1691,5 @@ observe.ui.usage.action.shouldReplace=Reemplaza referencial desactivado? observe.ui.usage.replaceTitle=Objeto de sustitución observe.ui.usage.usageTitle=Referencias encontradas observe.ui.view.message=Mensajes -observe.ui.view.navigation=Navegación observe.warning.nimbus.landf=El look and Feel Nimbus no fue encontrado, se necesita como mínimo la versión 1.6 ó 10 de java. observe.warning.no.ui=Ninguno entorno gráfico fue detectado ===================================== client/i18n/src/main/i18n/translations/observe_fr_FR.properties ===================================== @@ -39,6 +39,8 @@ observe.config.category.application=Application observe.config.category.application.description=Options applicatives observe.config.category.expert=Avancé observe.config.category.expert.description=Configuration avancée +observe.config.category.map=Cartographie +observe.config.category.map.description=Configuration de la cartographie observe.config.category.observation=Qualification des observations observe.config.category.observation.description=Gestion des indicateurs de qualification des programmes observe.config.category.speciesList.longline=Configuration des listes d'espèces (Palangre) @@ -1689,6 +1691,5 @@ observe.ui.usage.action.shouldReplace=Remplacer le référentiel désactivé ? observe.ui.usage.replaceTitle=Objet de remplacement observe.ui.usage.usageTitle=Références trouvées observe.ui.view.message=Messages -observe.ui.view.navigation=Navigation observe.warning.nimbus.landf=Le look and Feel Nimbus n'a pas été trouvé, il faut au moins la version 1.6u10 de java. observe.warning.no.ui=Aucun environnement graphique détecté View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/5ffad0061b1ace8710dd1c0a0… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/5ffad0061b1ace8710dd1c0a0… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] 4 commits: La 1ère liste déroulante de chaque form s'ouvre toute seule à l'affichage d'un...
by Tony CHEMIT 22 Dec '20

22 Dec '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 6dd42c94 by Tony Chemit at 2020-12-22T15:48:45+01:00 La 1ère liste déroulante de chaque form s&#39;ouvre toute seule à l&#39;affichage d&#39;un onglet - Closes #1684 - - - - - fdc62d8b by Tony Chemit at 2020-12-22T15:51:41+01:00 Open API - - - - - bdf480bd by Tony Chemit at 2020-12-22T15:52:00+01:00 Open API - - - - - cedaee45 by Tony Chemit at 2020-12-22T16:13:31+01:00 À la sortie de la configuration (avec un appel de rechargement d&#39;interface graphique), la base est masquée et innacessible - Closes #1690 - - - - - 9 changed files: - client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java - client/core/src/main/java/fr/ird/observe/client/main/body/MainUIBodyContent.java - client/core/src/main/java/fr/ird/observe/client/main/body/MainUIBodyContentManager.java - client/core/src/main/java/fr/ird/observe/client/main/callback/ReloadUiCallback.java - client/core/src/main/java/fr/ird/observe/client/util/init/DefaultUIInitializer.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorBodyContent.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/ContentUIHandler.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/ContentUIInitializer.java - pom.xml Changes: ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java ===================================== @@ -443,7 +443,7 @@ public class ObserveSwingDataSource extends ObserveServicesProviderSupport imple listenerList.remove(ObserveSwingDataSourceListener.class, listener); } - private ObserveSwingDataSourceListener[] getObserveSwingDataSourceListener() { + public ObserveSwingDataSourceListener[] getObserveSwingDataSourceListener() { return listenerList.getListeners(ObserveSwingDataSourceListener.class); } ===================================== client/core/src/main/java/fr/ird/observe/client/main/body/MainUIBodyContent.java ===================================== @@ -22,6 +22,7 @@ package fr.ird.observe.client.main.body; * #L% */ +import fr.ird.observe.client.ClientUIContext; import fr.ird.observe.client.main.ObserveMainUI; import io.ultreia.java4all.util.SingletonSupplier; @@ -120,6 +121,15 @@ public abstract class MainUIBodyContent<B extends JComponent> implements Supplie supplier.clear(); } + /** + * when ui was recreated, make what you can to reload this content. + * @param clientUIContext new client context + * @param mainUI new main ui + */ + public void reloadContent(ClientUIContext clientUIContext, ObserveMainUI mainUI) { + + } + public void setSupplier(SingletonSupplier<B> supplier) { this.supplier = Objects.requireNonNull(supplier); } ===================================== client/core/src/main/java/fr/ird/observe/client/main/body/MainUIBodyContentManager.java ===================================== @@ -195,4 +195,8 @@ public class MainUIBodyContentManager extends AbstractJavaBean { changeCurrentBody(previousBody); } } + + public MainUIBodyContent<?> getPreviousBody() { + return previousBody; + } } ===================================== client/core/src/main/java/fr/ird/observe/client/main/callback/ReloadUiCallback.java ===================================== @@ -26,15 +26,19 @@ import com.google.auto.service.AutoService; import fr.ird.observe.client.ClientUIContext; import fr.ird.observe.client.configuration.ClientConfig; import fr.ird.observe.client.configuration.WithClientConfig; +import fr.ird.observe.client.datasource.api.ObserveSwingDataSource; import fr.ird.observe.client.main.ObserveMainUI; import fr.ird.observe.client.main.body.ClientConfigUI; +import fr.ird.observe.client.main.body.MainUIBodyContent; import fr.ird.observe.client.main.body.NoBodyContentComponent; +import fr.ird.observe.client.util.UIHelper; import io.ultreia.java4all.application.context.ApplicationContext; import org.nuiton.jaxx.runtime.swing.SwingUtil; import javax.swing.Icon; import javax.swing.JComponent; import java.util.Objects; +import java.util.Optional; import static io.ultreia.java4all.i18n.I18n.n; @@ -74,21 +78,33 @@ public class ReloadUiCallback implements ObserveUICallback, WithClientConfig { //FIXME:BodyContent, cela doit être délégué au body content concerné Class<? extends JComponent> bodyContent = NoBodyContentComponent.class; + MainUIBodyContent<?> previousBody = null; if (ui != null) { // Keep a reference on ui instance since it will be reset in close method // FIXME Should use a closing state in application to improve this ObserveMainUI ui = this.ui; - bodyContent = ui.getMainUIBodyContentManager().getCurrentBodyType(); - if (ClientConfigUI.class.equals(bodyContent)) { - bodyContent = NoBodyContentComponent.class; + previousBody = ui.getMainUIBodyContentManager().getPreviousBody(); + Optional<ObserveSwingDataSource> mainDataSource = clientUIContext.getDataSourcesManager().getOptionalMainDataSource(); + if (mainDataSource.isPresent() && previousBody != null) { + bodyContent = previousBody.type(); + } else { + previousBody = null; + bodyContent = ui.getMainUIBodyContentManager().getCurrentBodyType(); + if (ClientConfigUI.class.equals(bodyContent)) { + bodyContent = NoBodyContentComponent.class; + } } ui.dispose(); System.runFinalization(); } ui = clientUIContext.initUI(rootContext, config); - - ui.changeBodyContent(bodyContent); + if (previousBody != null) { + MainUIBodyContent<? extends JComponent> body = ui.getMainUIBodyContentManager().getBody(bodyContent); + body.reloadContent(clientUIContext, ui); + } else { + ui.changeBodyContent(bodyContent); + } // show ui clientUIContext.setMainUIVisible(ui, true); ===================================== client/core/src/main/java/fr/ird/observe/client/util/init/DefaultUIInitializer.java ===================================== @@ -166,6 +166,7 @@ public class DefaultUIInitializer<UI extends JComponent & JAXXObject> extends UI initializerContext.checkFirstPass(); editor.getCombobox().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F4, 0), "none"); editor.setI18nPrefix("observe.common."); + editor.setAutoSelectContent(true); editor.setMinimumSize(new Dimension(0, 24)); if (StringUtils.isEmpty(editor.getConfig().getProperty())) { editor.setProperty(editor.getName()); ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/DataSourceEditorBodyContent.java ===================================== @@ -23,11 +23,13 @@ package fr.ird.observe.client.datasource.editor.api; */ import com.google.auto.service.AutoService; +import fr.ird.observe.client.ClientUIContext; import fr.ird.observe.client.WithClientUIContext; import fr.ird.observe.client.configuration.ClientConfig; import fr.ird.observe.client.configuration.WithClientConfig; import fr.ird.observe.client.constants.DbMode; import fr.ird.observe.client.datasource.api.ObserveSwingDataSource; +import fr.ird.observe.client.datasource.api.event.ObserveSwingDataSourceListener; import fr.ird.observe.client.datasource.editor.api.menu.DataSourceEditorMenu; import fr.ird.observe.client.datasource.editor.api.menu.DataSourceEditorNavigationMenu; import fr.ird.observe.client.datasource.editor.api.menu.actions.ChangeStorageAction; @@ -177,6 +179,28 @@ public class DataSourceEditorBodyContent extends MainUIBodyContent<DataSourceEdi } } + @Override + public void reloadContent(ClientUIContext clientUIContext, ObserveMainUI mainUI) { + ObserveSwingDataSource mainDataSource = clientUIContext.getDataSourcesManager().getMainDataSource(); + if (mainDataSource.isOpen()) { + // need to remove any old listeners + for (ObserveSwingDataSourceListener listener : mainDataSource.getObserveSwingDataSourceListener()) { + if (listener instanceof MainDataSourceListener) { + log.info("Remove obsolete listener: "+listener); + mainDataSource.removeObserveSwingDataSourceListener(listener); + } + } + } + prepareMainStorage(mainDataSource); + try { + setDataSource(mainDataSource); + mainUI.changeBodyContent(DataSourceEditor.class); + } catch (Exception e) { + UIHelper.handlingError(e); + mainUI.removeBodyContent(); + } + } + public void doChangeStorage(Set<DbMode> dbModes, String title) { ChangeStorageAction action = new ChangeStorageAction(dbModes, title); action.run(); ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/ContentUIHandler.java ===================================== @@ -48,7 +48,6 @@ import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.services.ObserveServicesProvider; import fr.ird.observe.services.service.ObserveService; -import io.ultreia.java4all.jaxx.widgets.combobox.JaxxComboBox; import io.ultreia.java4all.util.SingletonSupplier; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -61,10 +60,8 @@ import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JMenuItem; -import javax.swing.JTextField; import javax.swing.SwingUtilities; import java.awt.Component; -import java.awt.Container; import java.awt.FocusTraversalPolicy; import java.awt.KeyboardFocusManager; import java.beans.PropertyChangeListener; @@ -445,30 +442,14 @@ public abstract class ContentUIHandler<U extends ContentUI> implements ObserveSe focusAdjusting = true; try { getModel().setFormFocusOwner(newValue); - //FIXME on contentTable should also check we are in entry form if (getDataSourceEditor().getModel().isFocusOnNavigation()) { - return; - } - if ("ComboBox.textField".equals(newValue.getName())) { - if (!getModel().getStates().isReadingMode()) { - // we are on jaxx combo box, let's open popup - Container parent = newValue.getParent(); - if (parent!=null) { - parent = parent.getParent(); - if (parent!=null) { - JaxxComboBox<?> combo = (JaxxComboBox<?>) parent; - log.debug(String.format("On a JaxxComboBox: %s on edit mode, will open popup", combo.getName())); - ((JTextField)newValue).setCaretPosition(0); - combo.getCombobox().setPopupVisible(true); - } - } - } + //FIXME on contentTable should also check we are in entry form } } finally { focusAdjusting = false; } } else { - log.debug(String.format("%sCan't set focus owner: %s", prefix,newValue)); + log.debug(String.format("%sCan't set focus owner: %s", prefix, newValue)); } } ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/ContentUIInitializer.java ===================================== @@ -309,6 +309,7 @@ public class ContentUIInitializer<UI extends ContentUI> extends UIInitializerSup editor.getCombobox().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F4, 0), "none"); @SuppressWarnings({"RawTypeCanBeGeneric", "rawtypes"}) Class referenceType = editor.getBeanType(); editor.setI18nPrefix("observe.common."); + editor.setAutoSelectContent(true); editor.setMinimumSize(new Dimension(0, 24)); editor.setShowReset(true); if (StringUtils.isEmpty(editor.getConfig().getProperty())) { ===================================== pom.xml ===================================== @@ -155,7 +155,7 @@ <!-- <lib.version.java4all.topia>1.35</lib.version.java4all.topia>--> <!-- <lib.version.java4all.eugene>3.0-alpha-38</lib.version.java4all.eugene>--> -<!-- <lib.version.java4all.jaxx>3.0-alpha-85</lib.version.java4all.jaxx>--> + <lib.version.java4all.jaxx>3.0-alpha-86</lib.version.java4all.jaxx> <!--<lib.version.java4all.application-context>1.0.3-SNAPSHOT</lib.version.java4all.application-context>--> <!--<lib.version.java4all.application-template>1.0.2-SNAPSHOT</lib.version.java4all.application-template>--> <!--<lib.version.java4all.i18n>4.0-beta-3-SNAPSHOT</lib.version.java4all.i18n>--> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/c15bb44901049f5e7c1f3f46… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/c15bb44901049f5e7c1f3f46… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] 23 commits: realign gearUseFeatures model (should be always exactly the same on both domains)
by Tony CHEMIT 21 Dec '20

21 Dec '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 88af34fc by Tony Chemit at 2020-12-20T10:50:13+01:00 realign gearUseFeatures model (should be always exactly the same on both domains) - - - - - 9a7cf35f by Tony Chemit at 2020-12-20T11:47:48+01:00 Add more methods on WithFormula contract (and then remove the entity formula abstract class) - - - - - 7220e32d by Tony Chemit at 2020-12-20T11:49:39+01:00 Fix a relation bad inverse (the main relation was considered as not main by topia) - - - - - 62ef95c0 by Tony Chemit at 2020-12-20T15:32:46+01:00 Generate all missing indexes - See #1683 - - - - - 901d6ab3 by Tony Chemit at 2020-12-20T18:49:39+01:00 Add new test (but still not used to generate schema) - - - - - 66b4ed2e by Tony Chemit at 2020-12-20T18:50:12+01:00 Open API - - - - - 90f7005d by Tony Chemit at 2020-12-20T18:50:26+01:00 add ressource in ExecuteRunnerMojo - - - - - c3d08308 by Tony Chemit at 2020-12-20T18:50:56+01:00 Add a runner to generate schema - - - - - 1df711f7 by Tony Chemit at 2020-12-20T19:13:15+01:00 Il reste quelques optimisations à réaliser sur la couche de persistence - See #1664 - - - - - ba18ad03 by Tony Chemit at 2020-12-21T09:57:40+01:00 Rename full schema scripts - - - - - 778075e6 by Tony Chemit at 2020-12-21T11:51:42+01:00 Introduce create and finalize schema scripts - - - - - fa575825 by Tony Chemit at 2020-12-21T11:52:16+01:00 clean dto code - - - - - febdf613 by Tony Chemit at 2020-12-21T11:52:57+01:00 Introduce digits tagvalue in topia and use it - - - - - 4ef63975 by Tony Chemit at 2020-12-21T12:20:39+01:00 Mise en place du schéma avec les bonnes précisions sur les numériques - - - - - b3cc1c42 by Tony Chemit at 2020-12-21T12:28:51+01:00 Missing dependency - - - - - 71ad2d89 by Tony Chemit at 2020-12-21T12:29:09+01:00 Génération du type précis pour les champs textes - Closes #1687 - - - - - 5a42e519 by Tony Chemit at 2020-12-21T12:57:47+01:00 Rename generated schema script to be usable in migration - - - - - c6ce8204 by Tony Chemit at 2020-12-21T20:56:02+01:00 Fix blog generation for postgres - - - - - bb222cf1 by Tony Chemit at 2020-12-21T21:03:08+01:00 update topia-extension - - - - - 8c3a3635 by Tony Chemit at 2020-12-21T22:12:38+01:00 use last pom - - - - - 174c3bdf by Tony Chemit at 2020-12-21T22:36:15+01:00 fix typo - - - - - a827043d by Tony Chemit at 2020-12-21T22:37:04+01:00 clean entities - - - - - c15bb449 by Tony Chemit at 2020-12-21T22:42:07+01:00 Génération du type précis pour les champs textes - Closes #1687 Il semble manquer des index sur des relations many-to-one (par exemple Tdr → Section) - Closes #1683 Meilleur intégration de la précision sur les champs numériques - Closes #1686 Il reste quelques optimisations à réaliser sur la couche de persistence - See #1664 - - - - - 30 changed files: - models/dto/src/main/java/fr/ird/observe/dto/data/ps/TypeTransmittingBuoyOperation.java - models/persistence/pom.xml - models/persistence/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ll/observation/SectionObsTemplate.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ps/observation/ActivityImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ps/observation/FloatingObjectImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ps/observation/LengthWeightComputableAware.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ps/observation/NonTargetCatchImpl.java - − models/persistence/src/main/java/fr/ird/observe/entities/data/ps/observation/NonTargetLengthImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ps/observation/SetImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ps/observation/TargetCatchImpl.java - − models/persistence/src/main/java/fr/ird/observe/entities/data/ps/observation/TargetLengthImpl.java - − models/persistence/src/main/java/fr/ird/observe/entities/data/ps/observation/TargetSampleImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/migration/DataSourceMigrationForVersion_8_0.java - − models/persistence/src/main/java/fr/ird/observe/entities/referential/common/AbstractLengthFormulaSupportTopiaDao.java - models/persistence/src/main/java/fr/ird/observe/entities/referential/common/HarbourImpl.java - − models/persistence/src/main/java/fr/ird/observe/entities/referential/common/LengthFormulaSupportImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/referential/common/LengthLengthParameterImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/referential/common/LengthLengthParameterTopiaDao.java - models/persistence/src/main/java/fr/ird/observe/entities/referential/common/LengthWeightParameterImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/referential/common/LengthWeightParameterTopiaDao.java - − models/persistence/src/main/java/fr/ird/observe/entities/referential/common/PersonImpl.java - − models/persistence/src/main/java/fr/ird/observe/entities/referential/common/ProgramImpl.java - − models/persistence/src/main/java/fr/ird/observe/entities/referential/common/SpeciesImpl.java - − models/persistence/src/main/java/fr/ird/observe/entities/referential/common/VesselImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/referential/ps/common/ObjectMaterialImpl.java - + models/persistence/src/main/java/fr/ird/observe/entities/spi/GenerateEmptyDatabases.java - models/persistence/src/main/models/Observe-00-common.model - models/persistence/src/main/models/Observe-01-referential-common.model - models/persistence/src/main/models/Observe-02-referential-ps-common.model The diff was not included because it is too large. View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/b7bd2bc4a5aaf25223ec8409… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/b7bd2bc4a5aaf25223ec8409… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] Generate some missing indexes - Closes #1683
by Tony CHEMIT 18 Dec '20

18 Dec '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: b7bd2bc4 by Tony Chemit at 2020-12-18T20:49:16+01:00 Generate some missing indexes - Closes #1683 - - - - - 1 changed file: - pom.xml Changes: ===================================== pom.xml ===================================== @@ -153,7 +153,7 @@ <lib.version.h2>1.4.196</lib.version.h2> <lib.version.nuiton.utils>3.0</lib.version.nuiton.utils> -<!-- <lib.version.java4all.topia>1.31</lib.version.java4all.topia>--> + <lib.version.java4all.topia>1.32</lib.version.java4all.topia> <!-- <lib.version.java4all.eugene>3.0-alpha-38</lib.version.java4all.eugene>--> <lib.version.java4all.jaxx>3.0-alpha-85</lib.version.java4all.jaxx> <!--<lib.version.java4all.application-context>1.0.3-SNAPSHOT</lib.version.java4all.application-context>--> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/b7bd2bc4a5aaf25223ec8409f… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/b7bd2bc4a5aaf25223ec8409f… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] Generate some missing indexes - Closes #1664
by Tony CHEMIT 18 Dec '20

18 Dec '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 18ea7843 by Tony Chemit at 2020-12-18T20:48:44+01:00 Generate some missing indexes - Closes #1664 - - - - - 1 changed file: - pom.xml Changes: ===================================== pom.xml ===================================== @@ -153,7 +153,7 @@ <lib.version.h2>1.4.196</lib.version.h2> <lib.version.nuiton.utils>3.0</lib.version.nuiton.utils> -<!-- <lib.version.java4all.topia>1.31</lib.version.java4all.topia>--> + <lib.version.java4all.topia>1.32</lib.version.java4all.topia> <!-- <lib.version.java4all.eugene>3.0-alpha-38</lib.version.java4all.eugene>--> <lib.version.java4all.jaxx>3.0-alpha-85</lib.version.java4all.jaxx> <!--<lib.version.java4all.application-context>1.0.3-SNAPSHOT</lib.version.java4all.application-context>--> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/18ea7843a3271eeb66d3652d7… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/18ea7843a3271eeb66d3652d7… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] 3 commits: remove unused method
by Tony CHEMIT 18 Dec '20

18 Dec '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 0c952acb by Tony Chemit at 2020-12-18T20:32:47+01:00 remove unused method - - - - - b2ace90a by Tony Chemit at 2020-12-18T20:34:52+01:00 Il reste quelques optimisations à réaliser sur la couche de persistence - See #1664 * Suppression de contrat sur les entités inutiles * Utilisation de requetes optimisées pour construire le dto de la composition détaillée * suppression de liens sur le modèle de persistence inutiles - - - - - f11cbc8e by Tony Chemit at 2020-12-18T20:47:37+01:00 Generate some missing indexes - Closes #58 - - - - - 13 changed files: - − models/persistence/src/main/java/fr/ird/observe/entities/data/ll/observation/LonglinePositionAware.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ll/observation/SetImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ll/observation/LonglineElementAware.java → models/persistence/src/main/java/fr/ird/observe/entities/data/ll/observation/SetTopiaDao.java - models/persistence/src/main/models/Observe-30-data-ll-observation.model - pom.xml - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/observation/SetDetailCompositionServiceLocal.java - services/local-impl/src/test/java/fr/ird/observe/services/local/service/data/ll/observation/SetDetailCompositionServiceLocalTest.java - tests/test/src/main/resources/db/8.0/dataForTestLongline.sql.gz - tests/test/src/main/resources/db/8.0/dataForTestSeine.sql.gz - tests/test/src/main/resources/db/8.0/empty_h2.sql.gz - tests/test/src/main/resources/db/8.0/empty_pg.sql.gz - tests/test/src/main/resources/db/8.0/referentiel.sql.gz - toolkit/persistence/src/main/java/fr/ird/observe/entities/EntityHelper.java Changes: ===================================== models/persistence/src/main/java/fr/ird/observe/entities/data/ll/observation/LonglinePositionAware.java deleted ===================================== @@ -1,53 +0,0 @@ -package fr.ird.observe.entities.data.ll.observation; - -/* - * #%L - * ObServe Models :: Persistence - * %% - * Copyright (C) 2008 - 2020 IRD, Code Lutin, Ultreia.io - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ird.observe.dto.data.DataDto; -import fr.ird.observe.dto.reference.DataDtoReference; -import fr.ird.observe.entities.data.DataEntity; - -/** - * Place this contract on any data that use a position on a longline. - * Created on 1/6/15. - * - * @author Tony Chemit - dev(a)tchemit.fr - * @see Catch - * @see Tdr - * @see fr.ird.observe.dto.data.ll.observation.LonglinePositionAware - * @since 3.11 - */ -public interface LonglinePositionAware<Dt extends DataDto, R extends DataDtoReference> extends DataEntity<Dt, R> { - - void setSection(Section section); - - Section getSection(); - - void setBasket(Basket basket); - - Basket getBasket(); - - void setBranchline(Branchline branchline); - - Branchline getBranchline(); - -} ===================================== models/persistence/src/main/java/fr/ird/observe/entities/data/ll/observation/SetImpl.java ===================================== @@ -22,15 +22,12 @@ package fr.ird.observe.entities.data.ll.observation; * #L% */ -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Maps; import fr.ird.observe.dto.CoordinateHelper; import fr.ird.observe.dto.data.DataDto; import fr.ird.observe.dto.data.ll.observation.BasketReference; import fr.ird.observe.dto.data.ll.observation.BranchlineReference; import fr.ird.observe.dto.data.ll.observation.LonglinePositionContainerAware; import fr.ird.observe.dto.data.ll.observation.SectionReference; -import fr.ird.observe.dto.data.ll.observation.SetDetailCompositionDto; import fr.ird.observe.dto.data.ll.observation.SetDto; import fr.ird.observe.dto.referential.ReferentialLocale; @@ -44,10 +41,6 @@ public class SetImpl extends SetAbstract { @Override public <D extends DataDto> void toDto(ReferentialLocale referentialLocale, D dto) { boolean useLonglinePosition = dto instanceof LonglinePositionContainerAware; - boolean detailComposition = dto instanceof SetDetailCompositionDto; - if (useLonglinePosition || detailComposition) { - loadEntityParents(); - } super.toDto(referentialLocale, dto); if (dto instanceof SetDto) { SetDto dto1 = (SetDto) dto; @@ -56,62 +49,27 @@ public class SetImpl extends SetAbstract { dto1.setHaulingStartQuadrant(CoordinateHelper.getQuadrant(haulingStartLongitude, haulingStartLatitude)); dto1.setHaulingEndQuadrant(CoordinateHelper.getQuadrant(haulingEndLongitude, haulingEndLatitude)); } - if (detailComposition) { - loadDtoParents((SetDetailCompositionDto) dto); - } if (useLonglinePosition) { loadDtoReferenceParents((LonglinePositionContainerAware) dto, referentialLocale); } } - private void loadEntityParents() { - getSection().forEach(section -> { - section.setParentId(getTopiaId()); - section.getBasket().forEach(basket -> { - String sectionId = section.getTopiaId(); - basket.setParentId(sectionId); - String basketId = basket.getTopiaId(); - basket.getBranchline().forEach(branchline -> branchline.setParentId(basketId)); - }); - }); - } - - private void loadDtoParents(SetDetailCompositionDto dto) { - //FIXME If not performant, let's used an optimized dao query - ImmutableMap<String, Section> sectionsById = Maps.uniqueIndex(getSection(), Section::getTopiaId); - dto.getSection().forEach(section -> { - section.setParentId(dto.getId()); - String sectionId = section.getTopiaId(); - Section entitySection = sectionsById.get(sectionId); - ImmutableMap<String, Basket> basketsById = Maps.uniqueIndex(entitySection.getBasket(), Basket::getTopiaId); - section.setNotUsed(entitySection.isNotUsed()); - section.getBasket().forEach(basket -> { - basket.setParentId(sectionId); - String basketId = basket.getTopiaId(); - Basket entityBasket = basketsById.get(basketId); - basket.setNotUsed(entityBasket.isNotUsed()); - ImmutableMap<String, Branchline> branchlinesById = Maps.uniqueIndex(entityBasket.getBranchline(), Branchline::getTopiaId); - basket.getBranchline().forEach(branchline -> { - String branchlineId = branchline.getId(); - Branchline entityBranchline = branchlinesById.get(branchlineId); - branchline.setParentId(basketId); - branchline.setNotUsed(entityBranchline.isNotUsed()); - }); - }); - }); - } - private void loadDtoReferenceParents(LonglinePositionContainerAware dto, ReferentialLocale referentialLocale) { List<SectionReference> sections = new LinkedList<>(); List<BasketReference> baskets = new LinkedList<>(); List<BranchlineReference> branchlines = new LinkedList<>(); getSection().forEach(section -> { + section.setParentId(getTopiaId()); + String sectionId = section.getTopiaId(); SectionReference sectionReference = section.toReference(referentialLocale); sections.add(sectionReference); section.getBasket().forEach(basket -> { + String basketId = basket.getTopiaId(); + basket.setParentId(sectionId); BasketReference basketReference = basket.toReference(referentialLocale); baskets.add(basketReference); basket.getBranchline().forEach(branchline -> { + branchline.setParentId(basketId); BranchlineReference branchlineReference = branchline.toReference(referentialLocale); branchlines.add(branchlineReference); }); ===================================== models/persistence/src/main/java/fr/ird/observe/entities/data/ll/observation/LonglineElementAware.java → models/persistence/src/main/java/fr/ird/observe/entities/data/ll/observation/SetTopiaDao.java ===================================== @@ -1,6 +1,6 @@ package fr.ird.observe.entities.data.ll.observation; -/* +/*- * #%L * ObServe Models :: Persistence * %% @@ -22,37 +22,44 @@ package fr.ird.observe.entities.data.ll.observation; * #L% */ -import fr.ird.observe.dto.DtoParentAware; -import fr.ird.observe.dto.data.DataDto; -import fr.ird.observe.dto.reference.DataDtoReference; -import fr.ird.observe.entities.data.DataEntity; +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.spi.context.DataDtoEntityContext; + +import java.util.List; /** - * Place this contract on any element involved in longline definition. - * Created on 12/13/14. + * Created on 12/18/2020. * * @author Tony Chemit - dev(a)tchemit.fr - * @see Section - * @see Basket - * @see Branchline - * @see fr.ird.observe.dto.data.ll.observation.LonglineElementAware - * @since 3.10 + * @since 8.0.1 */ -public interface LonglineElementAware<Dt extends DataDto, R extends DataDtoReference> extends DataEntity<Dt, R>, DtoParentAware { - - Integer getSettingIdentifier(); - - void setSettingIdentifier(Integer settingIdentifier); +public class SetTopiaDao extends AbstractSetTopiaDao<Set> { - Integer getHaulingIdentifier(); + private static final String SQL_PATTERN = "SELECT DISTINCT(%1$s) FROM %2$s WHERE set = '%3$s' AND %1$s IS NOT NULL"; - void setHaulingIdentifier(Integer haulingIdentifier); + public ImmutableSet<String> getSectionUsed(String setId) { + ImmutableSet.Builder<String> builder = ImmutableSet.builder(); + getUsages(Tdr.SPI, Tdr.PROPERTY_SECTION, setId, builder); + getUsages(Catch.SPI, Catch.PROPERTY_SECTION, setId, builder); + return builder.build(); + } - boolean isTdrEmpty(); + public ImmutableSet<String> getBasketUsed(String setId) { + ImmutableSet.Builder<String> builder = ImmutableSet.builder(); + getUsages(Tdr.SPI, Tdr.PROPERTY_BASKET, setId, builder); + getUsages(Catch.SPI, Catch.PROPERTY_BASKET, setId, builder); + return builder.build(); + } - boolean isCatchesEmpty(); + public ImmutableSet<String> getBranchlineUsed(String setId) { + ImmutableSet.Builder<String> builder = ImmutableSet.builder(); + getUsages(Tdr.SPI, Tdr.PROPERTY_BRANCHLINE, setId, builder); + getUsages(Catch.SPI, Catch.PROPERTY_BRANCHLINE, setId, builder); + return builder.build(); + } - default boolean isNotUsed() { - return isTdrEmpty() && isCatchesEmpty(); + protected void getUsages(DataDtoEntityContext<?, ?, ?, ?> spi, String propertyName, String setId, ImmutableSet.Builder<String> ids) { + List<String> newIds = topiaSqlSupport.findMultipleResult(String.format(SQL_PATTERN, propertyName, spi.getEntitySqlDescriptor().getTable().getSchemaAndTableName(), setId), r -> r.getString(1)); + ids.addAll(newIds); } } ===================================== models/persistence/src/main/models/Observe-30-data-ll-observation.model ===================================== @@ -1,19 +1,5 @@ package fr.ird.observe.entities.data.ll.observation | dbSchema=ll_observation -interface data.ll.observation.LonglineElementAware > fr.ird.observe.entities.data.DataEntity -getSettingIdentifier() Integer -setSettingIdentifier(identifier Integer) -getHaulingIdentifier() Integer -setHaulingIdentifier(identifier Integer) - -interface data.ll.observation.LonglinePositionAware > fr.ird.observe.entities.data.DataEntity -getSection() data.ll.observation.Section -setSection(section data.ll.observation.Section) -getBasket() data.ll.observation.Basket -setBasket(basket data.ll.observation.Basket) -getBranchline() data.ll.observation.Branchline -setBranchline(branchline data.ll.observation.Branchline) - data.ll.observation.Activity > data.DataEntity | entity constants=date,time comment + {*:1} String | hibernateAttributeType=text timeStamp + {*:1} Date @@ -35,16 +21,14 @@ individualWeight + {*:1} Float baitSettingStatus {*:1} referential.ll.common.BaitSettingStatus baitType {*:1} referential.ll.common.BaitType -data.ll.observation.Basket > data.DataEntity >> data.ll.observation.LonglineElementAware fr.ird.observe.dto.DtoParentAware | entity +data.ll.observation.Basket > data.DataEntity >> fr.ird.observe.dto.DtoParentAware | entity settingIdentifier + {*:1} Integer | notNull haulingIdentifier + {*:1} Integer floatline1Length + {*:1} Float floatline2Length + {*:1} Float branchline + {*} data.ll.observation.Branchline | unique orderBy=settingIdentifier inverse=false -catches {*} data.ll.observation.Catch | skipModelNavigation inverse -tdr {*} data.ll.observation.Tdr | skipModelNavigation inverse -data.ll.observation.Branchline > data.DataEntity >> data.ll.observation.LonglineElementAware fr.ird.observe.dto.DtoParentAware | entity constants=timerTimeOnBoardDate,timerTimeOnBoardTime +data.ll.observation.Branchline > data.DataEntity >> fr.ird.observe.dto.DtoParentAware | entity constants=timerTimeOnBoardDate,timerTimeOnBoardTime comment + {*:1} String | hibernateAttributeType=text settingIdentifier + {*:1} Integer | notNull haulingIdentifier + {*:1} Integer @@ -62,8 +46,6 @@ tracelineLength + {*:1} Float | sqlType=numeric hookLost + {*:1} Boolean traceCutOff + {*:1} Boolean hookType {*:0..1} referential.ll.common.HookType -catches {*} data.ll.observation.Catch | skipModelNavigation inverse -tdr {*} data.ll.observation.Tdr | skipModelNavigation inverse baitType {*:0..1} referential.ll.common.BaitType topType {*:0..1} referential.ll.common.LineType tracelineType {*:0..1} referential.ll.common.LineType @@ -78,7 +60,7 @@ tracelineLength + {*:1} Float topType {*:0..1} referential.ll.common.LineType tracelineType {*:0..1} referential.ll.common.LineType -data.ll.observation.Catch > data.DataEntity >> data.ll.observation.LonglinePositionAware | entity +data.ll.observation.Catch > data.DataEntity | entity comment + {*:1} String | hibernateAttributeType=text count + {*:1} Integer totalWeight + {*:1} Float | sqlType=numeric @@ -123,12 +105,10 @@ hookOffset + {*:1} Integer hookType {*:1} referential.ll.common.HookType hookSize {*:1} referential.ll.common.HookSize -data.ll.observation.Section > data.DataEntity >> data.ll.observation.LonglineElementAware fr.ird.observe.dto.DtoParentAware | entity +data.ll.observation.Section > data.DataEntity >> fr.ird.observe.dto.DtoParentAware | entity settingIdentifier + {*:1} Integer | notNull haulingIdentifier + {*:1} Integer basket + {*} data.ll.observation.Basket | unique orderBy=settingIdentifier inverse=false -catches {*} data.ll.observation.Catch | skipModelNavigation inverse -tdr {*} data.ll.observation.Tdr | skipModelNavigation inverse data.ll.observation.SensorUsed > data.DataEntity >> data.DataFileAware | entity data + {*:1} !java.sql.Blob @@ -190,7 +170,7 @@ size + {*:1} Float | sqlType=numeric sizeMeasureType {*:1} referential.common.SizeMeasureType lengthMeasureMethod {*:0..1} referential.common.LengthMeasureMethod -data.ll.observation.Tdr > data.DataEntity >> data.ll.observation.LonglinePositionAware data.DataFileAware | entity constants=deploymentStartDate,deploymentStartTime,deploymentEndDate,deploymentEndTime,fishingStartDate,fishingStartTime,fishingEndDate,fishingEndTime +data.ll.observation.Tdr > data.DataEntity >> data.DataFileAware | entity constants=deploymentStartDate,deploymentStartTime,deploymentEndDate,deploymentEndTime,fishingStartDate,fishingStartTime,fishingEndDate,fishingEndTime floatline1Length + {*:1} Float | sqlType=numeric floatline2Length + {*:1} Float | sqlType=numeric serialNo + {*:1} String ===================================== pom.xml ===================================== @@ -153,7 +153,7 @@ <lib.version.h2>1.4.196</lib.version.h2> <lib.version.nuiton.utils>3.0</lib.version.nuiton.utils> -<!-- <lib.version.java4all.topia>1.31</lib.version.java4all.topia>--> + <lib.version.java4all.topia>1.32</lib.version.java4all.topia> <!-- <lib.version.java4all.eugene>3.0-alpha-38</lib.version.java4all.eugene>--> <lib.version.java4all.jaxx>3.0-alpha-85</lib.version.java4all.jaxx> <!--<lib.version.java4all.application-context>1.0.3-SNAPSHOT</lib.version.java4all.application-context>--> ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/observation/SetDetailCompositionServiceLocal.java ===================================== @@ -22,8 +22,11 @@ package fr.ird.observe.services.local.service.data.ll.observation; * #L% */ +import com.google.common.collect.ImmutableSet; import fr.ird.observe.dto.data.ll.observation.SetDetailCompositionDto; +import fr.ird.observe.dto.form.Form; import fr.ird.observe.entities.data.ll.observation.Set; +import fr.ird.observe.entities.data.ll.observation.SetTopiaDao; import fr.ird.observe.services.local.service.data.Simple2DataServiceLocalSupport; import fr.ird.observe.services.service.data.ll.observation.SetDetailCompositionService; @@ -37,4 +40,29 @@ public class SetDetailCompositionServiceLocal extends Simple2DataServiceLocalSup super(Set.SPI, Set.SET_DETAIL_COMPOSITION_SPI, null); } + @Override + protected Form<SetDetailCompositionDto> entityToForm(Set entity) { + Form<SetDetailCompositionDto> form = super.entityToForm(entity); + SetDetailCompositionDto dto = form.getObject(); + SetTopiaDao dao = Set.SPI.getDao(getTopiaPersistenceContext()); + ImmutableSet<String> sectionUsed = dao.getSectionUsed(entity.getTopiaId()); + ImmutableSet<String> basketUsed = dao.getBasketUsed(entity.getTopiaId()); + ImmutableSet<String> branchlineUsed = dao.getBranchlineUsed(entity.getTopiaId()); + dto.getSection().forEach(section -> { + section.setParentId(dto.getId()); + String sectionId = section.getTopiaId(); + section.setNotUsed(!sectionUsed.contains(sectionId)); + section.getBasket().forEach(basket -> { + basket.setParentId(sectionId); + String basketId = basket.getTopiaId(); + basket.setNotUsed(!basketUsed.contains(basketId)); + basket.getBranchline().forEach(branchline -> { + String branchlineId = branchline.getId(); + branchline.setParentId(basketId); + branchline.setNotUsed(!branchlineUsed.contains(branchlineId)); + }); + }); + }); + return form; + } } ===================================== services/local-impl/src/test/java/fr/ird/observe/services/local/service/data/ll/observation/SetDetailCompositionServiceLocalTest.java ===================================== @@ -79,6 +79,7 @@ public class SetDetailCompositionServiceLocalTest extends ServiceLocalTestSuppor Assert.assertEquals(Integer.valueOf(18), sectionDto.getHaulingIdentifier()); Assert.assertEquals(13, sectionDto.getBasketSize()); Assert.assertNotNull(sectionDto.getParentId()); + Assert.assertTrue(sectionDto.isNotUsed()); Assert.assertEquals(compositionDto.getId(), sectionDto.getParentId()); Assert.assertNotNull(sectionDto.toReference(ReferentialLocale.FR)); Assert.assertNotNull(sectionDto.toReference(ReferentialLocale.FR).getParentId()); @@ -88,6 +89,8 @@ public class SetDetailCompositionServiceLocalTest extends ServiceLocalTestSuppor Assert.assertEquals(Integer.valueOf(13), basketDto.getHaulingIdentifier()); Assert.assertEquals(6, basketDto.getBranchlineSize()); Assert.assertNotNull(basketDto.getParentId()); + Assert.assertTrue(basketDto.isNotUsed()); + Assert.assertEquals(sectionDto.getId(), basketDto.getParentId()); Assert.assertNotNull(basketDto.toReference(ReferentialLocale.FR)); Assert.assertNotNull(basketDto.toReference(ReferentialLocale.FR).getParentId()); @@ -96,9 +99,14 @@ public class SetDetailCompositionServiceLocalTest extends ServiceLocalTestSuppor Assert.assertEquals(Integer.valueOf(1), branchlineDto.getSettingIdentifier()); Assert.assertEquals(Integer.valueOf(6), branchlineDto.getHaulingIdentifier()); Assert.assertNotNull(branchlineDto.getParentId()); + Assert.assertTrue(branchlineDto.isNotUsed()); Assert.assertEquals(basketDto.getId(), branchlineDto.getParentId()); Assert.assertNotNull(branchlineDto.toReference(ReferentialLocale.FR)); Assert.assertNotNull(branchlineDto.toReference(ReferentialLocale.FR).getParentId()); + + sectionDto = compositionDto.getSection(6); + basketDto = sectionDto.getBasket(8); + Assert.assertFalse(basketDto.isNotUsed()); } @Test ===================================== tests/test/src/main/resources/db/8.0/dataForTestLongline.sql.gz ===================================== Binary files a/tests/test/src/main/resources/db/8.0/dataForTestLongline.sql.gz and b/tests/test/src/main/resources/db/8.0/dataForTestLongline.sql.gz differ ===================================== tests/test/src/main/resources/db/8.0/dataForTestSeine.sql.gz ===================================== Binary files a/tests/test/src/main/resources/db/8.0/dataForTestSeine.sql.gz and b/tests/test/src/main/resources/db/8.0/dataForTestSeine.sql.gz differ ===================================== tests/test/src/main/resources/db/8.0/empty_h2.sql.gz ===================================== Binary files a/tests/test/src/main/resources/db/8.0/empty_h2.sql.gz and b/tests/test/src/main/resources/db/8.0/empty_h2.sql.gz differ ===================================== tests/test/src/main/resources/db/8.0/empty_pg.sql.gz ===================================== Binary files a/tests/test/src/main/resources/db/8.0/empty_pg.sql.gz and b/tests/test/src/main/resources/db/8.0/empty_pg.sql.gz differ ===================================== tests/test/src/main/resources/db/8.0/referentiel.sql.gz ===================================== Binary files a/tests/test/src/main/resources/db/8.0/referentiel.sql.gz and b/tests/test/src/main/resources/db/8.0/referentiel.sql.gz differ ===================================== toolkit/persistence/src/main/java/fr/ird/observe/entities/EntityHelper.java ===================================== @@ -204,18 +204,6 @@ public class EntityHelper { return dtoList; } - public static <DD extends DataDto, RR extends DataDtoReference, EE extends DataEntity<DD, RR>> LinkedHashSet<RR> toDataReferenceLinkedHashSet(ReferentialLocale referentialLocale, Collection<EE> entities) { - LinkedHashSet<RR> result = null; - if (entities != null) { - result = new LinkedHashSet<>(); - for (EE entity : entities) { - result.add(entity.toReference(referentialLocale)); - } - } - return result; - } - - @SuppressWarnings({"unchecked", "unused"}) public static <DD extends DataDto, RR extends DataDtoReference, EE extends DataEntity<?, ?>, C extends Collection<EE>> C toDataEntityCollectionFromReference(Collection<RR> referencesList, C entities) { if (entities == null) { View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/5af39beb242c07d5e4268bd1… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/5af39beb242c07d5e4268bd1… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] 3 commits: clean some tests
by Tony CHEMIT 18 Dec '20

18 Dec '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: fe0a298a by Tony Chemit at 2020-12-18T11:29:18+01:00 clean some tests - - - - - 55095dec by Tony Chemit at 2020-12-18T11:29:48+01:00 Let&#39;s the framework manage WtiDatafile data - - - - - 5af39beb by Tony Chemit at 2020-12-18T13:32:10+01:00 Première passe pour supprimer toutes le code inutile et il y en a! Il reste quelques optimisations à réaliser sur la couche de persistence - See #1664 Première passe pour supprimer toutes le code inutile et il y en a! - - - - - 30 changed files: - − models/persistence/src/main/java/fr/ird/observe/entities/data/ActivityAware.java - − models/persistence/src/main/java/fr/ird/observe/entities/data/SetAware.java - models/persistence/src/main/java/fr/ird/observe/entities/data/TripAware.java - − models/persistence/src/main/java/fr/ird/observe/entities/data/ll/common/GearUseFeaturesImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ll/common/TripImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ll/logbook/ActivityImpl.java - − models/persistence/src/main/java/fr/ird/observe/entities/data/ll/logbook/ActivityTopiaDao.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ll/logbook/SampleImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ll/logbook/SetImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ll/observation/ActivityImpl.java - − models/persistence/src/main/java/fr/ird/observe/entities/data/ll/observation/ActivityTopiaDao.java - − models/persistence/src/main/java/fr/ird/observe/entities/data/ll/observation/BranchlineImpl.java - − models/persistence/src/main/java/fr/ird/observe/entities/data/ll/observation/SensorUsedImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ll/observation/SetImpl.java - − models/persistence/src/main/java/fr/ird/observe/entities/data/ll/observation/TdrImpl.java - − models/persistence/src/main/java/fr/ird/observe/entities/data/ps/common/GearUseFeaturesImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ps/common/TripImpl.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ps/observation/ActivityImpl.java - − models/persistence/src/main/java/fr/ird/observe/entities/data/ps/observation/ActivityTopiaDao.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ps/observation/RouteTopiaDao.java - models/persistence/src/main/java/fr/ird/observe/entities/data/ps/observation/SetImpl.java - models/persistence/src/main/models/Observe-00-common.model - models/persistence/src/main/models/Observe-20-data-ps-observation.model - models/persistence/src/main/models/Observe-25-data-ps-common.model - models/persistence/src/main/models/Observe-30-data-ll-observation.model - models/persistence/src/main/models/Observe-31-data-ll-logbook.model - models/persistence/src/main/models/Observe-35-data-ll-common.model - services/local-impl/pom.xml - services/local-impl/src/main/java/fr/ird/observe/services/local/service/actions/report/ReportServiceLocal.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/logbook/SetServiceLocal.java The diff was not included because it is too large. View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/c485f84c32a2207a2d64fd1f… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/c485f84c32a2207a2d64fd1f… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] Comportement des combobox - Closes #1642
by Tony CHEMIT 18 Dec '20

18 Dec '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: c485f84c by Tony Chemit at 2020-12-18T11:10:44+01:00 Comportement des combobox - Closes #1642 - - - - - 1 changed file: - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/ContentUIHandler.java Changes: ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/ContentUIHandler.java ===================================== @@ -48,6 +48,7 @@ import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.services.ObserveServicesProvider; import fr.ird.observe.services.service.ObserveService; +import io.ultreia.java4all.jaxx.widgets.combobox.JaxxComboBox; import io.ultreia.java4all.util.SingletonSupplier; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -60,8 +61,10 @@ import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JMenuItem; +import javax.swing.JTextField; import javax.swing.SwingUtilities; import java.awt.Component; +import java.awt.Container; import java.awt.FocusTraversalPolicy; import java.awt.KeyboardFocusManager; import java.beans.PropertyChangeListener; @@ -442,9 +445,30 @@ public abstract class ContentUIHandler<U extends ContentUI> implements ObserveSe focusAdjusting = true; try { getModel().setFormFocusOwner(newValue); + //FIXME on contentTable should also check we are in entry form + if (getDataSourceEditor().getModel().isFocusOnNavigation()) { + return; + } + if ("ComboBox.textField".equals(newValue.getName())) { + if (!getModel().getStates().isReadingMode()) { + // we are on jaxx combo box, let's open popup + Container parent = newValue.getParent(); + if (parent!=null) { + parent = parent.getParent(); + if (parent!=null) { + JaxxComboBox<?> combo = (JaxxComboBox<?>) parent; + log.debug(String.format("On a JaxxComboBox: %s on edit mode, will open popup", combo.getName())); + ((JTextField)newValue).setCaretPosition(0); + combo.getCombobox().setPopupVisible(true); + } + } + } + } } finally { focusAdjusting = false; } + } else { + log.debug(String.format("%sCan't set focus owner: %s", prefix,newValue)); } } @@ -460,7 +484,7 @@ public abstract class ContentUIHandler<U extends ContentUI> implements ObserveSe return; } - log.debug(String.format("%sSet form focus on %s", prefix, focusComponent)); + log.info(String.format("%sSet form focus on %s", prefix, focusComponent)); if (focusComponent != null) { focusAdjusting = true; SwingUtilities.invokeLater(() -> { View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/c485f84c32a2207a2d64fd1f5… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/c485f84c32a2207a2d64fd1f5… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] Lisibilité de la carte - police de la date - Closes #1640
by Tony CHEMIT 18 Dec '20

18 Dec '20
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: b9d86eb8 by Tony Chemit at 2020-12-18T10:14:17+01:00 Lisibilité de la carte - police de la date - Closes #1640 - - - - - 3 changed files: - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/map/TripMapContentBuilderSupport.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/map/TripMapUIHandler.java - client/datasource/editor/ps/src/main/resources/map/ps-style.xml Changes: ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/map/TripMapContentBuilderSupport.java ===================================== @@ -83,7 +83,7 @@ public abstract class TripMapContentBuilderSupport implements TripMapContentBuil protected static final String LOGBOOK_LINES_LAYER_NAME = "Logbook lines"; protected static final String LOGBOOK_POINTS_LAYER_NAME = "Logbook points"; - protected static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM"); + protected static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("MM-dd"); protected final List<ObserveMapPaneLegendItem> legendItems; protected final List<TripMapPoint> notValidPoints = new LinkedList<>(); ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/map/TripMapUIHandler.java ===================================== @@ -123,16 +123,16 @@ public class TripMapUIHandler implements UIHandler<TripMapUI> { if (zoomRatio != 1 && !rendererRunning) { JMapPane mapPane = getObserveMapPane(); - log.info("Zoom ratio: " + zoomRatio); + log.debug("Zoom ratio: " + zoomRatio); ReferencedEnvelope displayArea = mapPane.getDisplayArea(); double deltaWidth = displayArea.getWidth() * (zoomRatio - 1); double deltaHeight = displayArea.getHeight() * (zoomRatio - 1); - double ratioLeft = zoomCenter.getX() * 1d / mapPane.getWidth(); + double ratioLeft = zoomCenter.getX() / mapPane.getWidth(); // l'axe de Y est inversé entre le référentiel du composant swing et le référentiel géographique - double ratioTop = 1 - (zoomCenter.getY() * 1d / mapPane.getHeight()); + double ratioTop = 1 - (zoomCenter.getY() / mapPane.getHeight()); double deltaLeft = deltaWidth * ratioLeft; double deltaRight = deltaLeft - deltaWidth; ===================================== client/datasource/editor/ps/src/main/resources/map/ps-style.xml ===================================== @@ -58,7 +58,7 @@ <Font> <CssParameter name="font-size">14</CssParameter> <CssParameter name="font-style">normal</CssParameter> - <CssParameter name="font-weight">bold</CssParameter> + <CssParameter name="font-family">Sans-Serif</CssParameter> </Font> </TextSymbolizer> </Rule> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/b9d86eb83242e40585297e2bc… -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/b9d86eb83242e40585297e2bc… You're receiving this email because of your account on gitlab.com.
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • ...
  • 720
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.