| ... |
... |
@@ -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
|