Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe

Commits:

2 changed files:

Changes:

  • services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java
    ... ... @@ -22,8 +22,10 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.ng;
    22 22
      * #L%
    
    23 23
      */
    
    24 24
     
    
    25
    +import com.google.common.collect.ArrayListMultimap;
    
    25 26
     import com.google.common.collect.ImmutableList;
    
    26 27
     import com.google.common.collect.ImmutableSet;
    
    28
    +import com.google.common.collect.Multimap;
    
    27 29
     import fr.ird.observe.binder.referential.ReferentialEntityDtoBinderSupport;
    
    28 30
     import fr.ird.observe.dto.reference.ReferentialDtoReference;
    
    29 31
     import fr.ird.observe.dto.referential.ReferentialDto;
    
    ... ... @@ -90,14 +92,17 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
    90 92
     
    
    91 93
     
    
    92 94
             ImmutableSet<Class<? extends ReferentialDtoReference>> types = request.getTypes();
    
    95
    +
    
    96
    +        Multimap<Class<? extends ReferentialDtoReference>, String> newIds = request.getNewIds();
    
    97
    +
    
    93 98
             for (Class<? extends ReferentialDto> dtoType : DtoModelClasses.REFERENTIAL_TYPES) {
    
    94
    -            build0(dtoType, types);
    
    99
    +            build0(dtoType, types, newIds);
    
    95 100
             }
    
    96 101
             return resultBuilder.build();
    
    97 102
     
    
    98 103
         }
    
    99 104
     
    
    100
    -    private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void build0(Class<D> dtoType, ImmutableSet<Class<? extends ReferentialDtoReference>> types) {
    
    105
    +    private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void build0(Class<D> dtoType, ImmutableSet<Class<? extends ReferentialDtoReference>> types, Multimap<Class<? extends ReferentialDtoReference>, String> newIds) {
    
    101 106
     
    
    102 107
             ReferentialDtoEntityContext<D, R, E> modelContext = DbModelHelper.fromReferentialDto(dtoType);
    
    103 108
             Class<R> referenceType = modelContext.toReferenceType();
    
    ... ... @@ -117,13 +122,13 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
    117 122
             if (log.isInfoEnabled()) {
    
    118 123
                 log.info("Add: " + addTasks.size());
    
    119 124
             }
    
    120
    -        onAdd(referentialName, referenceType, addTasks, binder);
    
    125
    +        onAdd(referentialName, referenceType, addTasks, binder, newIds);
    
    121 126
     
    
    122 127
             Set<ReferentialSynchronizeTask<R>> updateTasks = request.getUpdateTasks(referenceType);
    
    123 128
             if (log.isInfoEnabled()) {
    
    124 129
                 log.info("Update: " + updateTasks.size());
    
    125 130
             }
    
    126
    -        onUpdate(referentialName, referenceType, updateTasks, binder);
    
    131
    +        onUpdate(referentialName, referenceType, updateTasks, binder, newIds);
    
    127 132
     
    
    128 133
             Set<ReferentialSynchronizeTask<R>> revertTasks = request.getRevertTasks(referenceType);
    
    129 134
             if (log.isInfoEnabled()) {
    
    ... ... @@ -145,7 +150,7 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
    145 150
     
    
    146 151
         }
    
    147 152
     
    
    148
    -    private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void onAdd(String referentialName, Class<R> referenceType, Set<ReferentialSynchronizeTask<R>> tasks, ReferentialEntityDtoBinderSupport<D, E> binder) {
    
    153
    +    private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void onAdd(String referentialName, Class<R> referenceType, Set<ReferentialSynchronizeTask<R>> tasks, ReferentialEntityDtoBinderSupport<D, E> binder, Multimap<Class<? extends ReferentialDtoReference>, String> newIds) {
    
    149 154
     
    
    150 155
             Class<E> entityType = binder.getEntityType();
    
    151 156
             Class<D> dtoType = binder.getDtoType();
    
    ... ... @@ -153,7 +158,9 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
    153 158
             List<E> insertEntities = loadEntities(entityType, tasks);
    
    154 159
             if (metadata.withEntities()) {
    
    155 160
     
    
    156
    -            InsertSqlWithCascadeStatementGenerator<D> insertGenerator = new InsertSqlWithCascadeStatementGenerator<D>(metadataModel, metadata, dtoType, request.getIdsOnlyExistingOnThisSide()) {
    
    161
    +            Multimap<Class<? extends ReferentialDtoReference>, String> allIds = ArrayListMultimap.create(request.getIdsOnlyExistingOnThisSide());
    
    162
    +            allIds.putAll(newIds);
    
    163
    +            InsertSqlWithCascadeStatementGenerator<D> insertGenerator = new InsertSqlWithCascadeStatementGenerator<D>(metadataModel, metadata, dtoType, allIds) {
    
    157 164
     
    
    158 165
                     @Override
    
    159 166
                     protected <DD extends ReferentialDto> ImmutableList<String> insertMissingReferential(Class<DD> referentialType, String id) {
    
    ... ... @@ -188,7 +195,7 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
    188 195
     
    
    189 196
         }
    
    190 197
     
    
    191
    -    private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void onUpdate(String referentialName, Class<R> referenceType, Set<ReferentialSynchronizeTask<R>> tasks, ReferentialEntityDtoBinderSupport<D, E> binder) {
    
    198
    +    private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void onUpdate(String referentialName, Class<R> referenceType, Set<ReferentialSynchronizeTask<R>> tasks, ReferentialEntityDtoBinderSupport<D, E> binder, Multimap<Class<? extends ReferentialDtoReference>, String> newIds) {
    
    192 199
     
    
    193 200
             Class<D> dtoType = binder.getDtoType();
    
    194 201
             TopiaMetadataEntity metadata = metadataModel.getEntity(referentialName);
    
    ... ... @@ -197,6 +204,10 @@ public class ReferentialSynchronizeSqlsRequestBuilder {
    197 204
     
    
    198 205
             if (metadata.withEntities()) {
    
    199 206
     
    
    207
    +
    
    208
    +            Multimap<Class<? extends ReferentialDtoReference>, String> allIds = ArrayListMultimap.create(request.getIdsOnlyExistingOnThisSide());
    
    209
    +            allIds.putAll(newIds);
    
    210
    +
    
    200 211
                 UpdateSqlWithCascadeStatementGenerator<D> updateGenerator = new UpdateSqlWithCascadeStatementGenerator<D>(metadataModel, metadata, dtoType, request.getIdsOnlyExistingOnThisSide()) {
    
    201 212
     
    
    202 213
                     @Override
    

  • services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeRequest.java
    ... ... @@ -71,6 +71,14 @@ public class ReferentialSynchronizeRequest implements ObserveDto {
    71 71
             return idsOnlyExistingOnThisSide;
    
    72 72
         }
    
    73 73
     
    
    74
    +    public Multimap<Class<? extends ReferentialDtoReference>, String> getNewIds() {
    
    75
    +        Multimap<Class<? extends ReferentialDtoReference>, String> result = ArrayListMultimap.create();
    
    76
    +        for (ReferentialSynchronizeTask<?> task : tasks.get(ReferentialSynchronizeTaskType.ADD)) {
    
    77
    +            result.put(task.getReferentialType(), task.getReferentialId());
    
    78
    +        }
    
    79
    +        return result;
    
    80
    +    }
    
    81
    +
    
    74 82
         public ImmutableMultimap<ReferentialSynchronizeTaskType, ReferentialSynchronizeTask<?>> getTasks() {
    
    75 83
             return tasks;
    
    76 84
         }