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

Commits:

6 changed files:

Changes:

  • .gitlab-ci.yml
    ... ... @@ -101,7 +101,7 @@ trigger-make-stage:
    101 101
     .automatic: &automatic
    
    102 102
       only:
    
    103 103
         - /^develop.*$/i
    
    104
    -    - /^features/.+$/i
    
    104
    +    - /^feature/.+$/i
    
    105 105
       except:
    
    106 106
         - triggers
    
    107 107
     
    
    ... ... @@ -155,7 +155,7 @@ release-deploy-demo:
    155 155
     .manual: &manual
    
    156 156
       only:
    
    157 157
         - /^develop.*$/i
    
    158
    -    - /^features/.+$/i
    
    158
    +    - /^feature/.+$/i
    
    159 159
       when: manual
    
    160 160
     
    
    161 161
     create-docker:
    

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveRequest.java
    ... ... @@ -35,20 +35,13 @@ import java.util.StringJoiner;
    35 35
      * @author Tony Chemit - dev@tchemit.fr
    
    36 36
      * @since 8.0.1
    
    37 37
      */
    
    38
    +@SuppressWarnings("unchecked")
    
    38 39
     public class MoveRequest {
    
    39 40
     
    
    40 41
         /**
    
    41 42
          * Reference type of data to move.
    
    42 43
          */
    
    43 44
         private final Class<? extends DataDtoReference> referenceType;
    
    44
    -    /**
    
    45
    -     * Reference type of parent data to move.
    
    46
    -     */
    
    47
    -    private final Class<? extends DtoReference> parentReferenceType;
    
    48
    -    /**
    
    49
    -     * Reference type of parent target.
    
    50
    -     */
    
    51
    -    private final Class<? extends DtoReference> parentTargetReferenceType;
    
    52 45
         /**
    
    53 46
          * Id of parent data to move.
    
    54 47
          */
    
    ... ... @@ -66,13 +59,11 @@ public class MoveRequest {
    66 59
          */
    
    67 60
         private final boolean selectTarget;
    
    68 61
     
    
    69
    -    public MoveRequest(Class<? extends DataDtoReference> referenceType, Class<? extends DtoReference> parentReferenceType, Class<? extends DtoReference> parentTargetReferenceType, String oldParentId, ImmutableSet<String> ids, String newParentId, boolean selectTarget) {
    
    62
    +    public MoveRequest(Class<? extends DataDtoReference> referenceType, ShortIdDto oldParentId, ImmutableSet<String> ids, ShortIdDto newParentId, boolean selectTarget) {
    
    70 63
             this.referenceType = referenceType;
    
    71
    -        this.parentReferenceType = parentReferenceType;
    
    72
    -        this.parentTargetReferenceType = parentTargetReferenceType;
    
    73
    -        this.oldParentId = ShortIdDto.of(parentReferenceType, oldParentId);
    
    64
    +        this.oldParentId = oldParentId;
    
    74 65
             this.ids = ids;
    
    75
    -        this.newParentId = ShortIdDto.of(parentTargetReferenceType, newParentId);
    
    66
    +        this.newParentId = newParentId;
    
    76 67
             this.selectTarget = selectTarget;
    
    77 68
         }
    
    78 69
     
    
    ... ... @@ -81,11 +72,11 @@ public class MoveRequest {
    81 72
         }
    
    82 73
     
    
    83 74
         public Class<? extends DtoReference> getParentReferenceType() {
    
    84
    -        return parentReferenceType;
    
    75
    +        return (Class<? extends DtoReference>) oldParentId.getType();
    
    85 76
         }
    
    86 77
     
    
    87 78
         public Class<? extends DtoReference> getParentTargetReferenceType() {
    
    88
    -        return parentTargetReferenceType;
    
    79
    +        return (Class<? extends DtoReference>) newParentId.getType();
    
    89 80
         }
    
    90 81
     
    
    91 82
         public ShortIdDto getOldParentId() {
    

  • client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveRequestBuilder.java
    ... ... @@ -30,6 +30,7 @@ import fr.ird.observe.client.datasource.editor.api.content.actions.mode.ChangeMo
    30 30
     import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUII18nHelper;
    
    31 31
     import fr.ird.observe.client.datasource.editor.api.content.referential.usage.UsageUIHandlerSupport;
    
    32 32
     import fr.ird.observe.client.util.UIHelper;
    
    33
    +import fr.ird.observe.dto.ShortIdDto;
    
    33 34
     import fr.ird.observe.dto.reference.DataDtoReference;
    
    34 35
     import fr.ird.observe.dto.reference.DtoReference;
    
    35 36
     import fr.ird.observe.dto.reference.DtoReferenceCollection;
    
    ... ... @@ -85,14 +86,10 @@ public class MoveRequestBuilder {
    85 86
          * Reference type of data to move.
    
    86 87
          */
    
    87 88
         private final Class<? extends DataDtoReference> referenceType;
    
    88
    -    /**
    
    89
    -     * Reference type of parent data to move.
    
    90
    -     */
    
    91
    -    private final Class<? extends DtoReference> parentReferenceType;
    
    92 89
         /**
    
    93 90
          * Id of parent data to move.
    
    94 91
          */
    
    95
    -    private final String oldParentId;
    
    92
    +    private final ShortIdDto oldParentId;
    
    96 93
         /**
    
    97 94
          * Data to delete.
    
    98 95
          */
    
    ... ... @@ -181,18 +178,17 @@ public class MoveRequestBuilder {
    181 178
             }
    
    182 179
         }
    
    183 180
     
    
    184
    -    public static StepSetParentCandidates create(Class<? extends DataDtoReference> referenceType, Class<? extends DtoReference> parentReferenceType, String oldParentId, DtoReference id) {
    
    185
    -        return create(referenceType, parentReferenceType, oldParentId, ImmutableSet.of(id));
    
    181
    +    public static StepSetParentCandidates create(Class<? extends DataDtoReference> referenceType, ShortIdDto oldParentId, DtoReference id) {
    
    182
    +        return create(referenceType, oldParentId, ImmutableSet.of(id));
    
    186 183
         }
    
    187 184
     
    
    188
    -    public static StepSetParentCandidates create(Class<? extends DataDtoReference> referenceType, Class<? extends DtoReference> parentReferenceType, String oldParentId, Collection<? extends DtoReference> data) {
    
    189
    -        MoveRequestBuilder builder = new MoveRequestBuilder(referenceType, parentReferenceType, oldParentId, data);
    
    185
    +    public static StepSetParentCandidates create(Class<? extends DataDtoReference> referenceType, ShortIdDto oldParentId, Collection<? extends DtoReference> data) {
    
    186
    +        MoveRequestBuilder builder = new MoveRequestBuilder(referenceType, oldParentId, data);
    
    190 187
             return new BuilderImpl(builder);
    
    191 188
         }
    
    192 189
     
    
    193
    -    private MoveRequestBuilder(Class<? extends DataDtoReference> referenceType, Class<? extends DtoReference> parentReferenceType, String oldParentId, Collection<? extends DtoReference> data) {
    
    190
    +    private MoveRequestBuilder(Class<? extends DataDtoReference> referenceType, ShortIdDto oldParentId, Collection<? extends DtoReference> data) {
    
    194 191
             this.referenceType = Objects.requireNonNull(referenceType);
    
    195
    -        this.parentReferenceType = Objects.requireNonNull(parentReferenceType);
    
    196 192
             this.oldParentId = Objects.requireNonNull(oldParentId);
    
    197 193
             this.data = Objects.requireNonNull(data);
    
    198 194
             KeyStroke keyStroke = ObserveKeyStrokesEditorApi.KEY_STROKE_SELECT_TARGET;
    
    ... ... @@ -247,9 +243,10 @@ public class MoveRequestBuilder {
    247 243
             return this;
    
    248 244
         }
    
    249 245
     
    
    246
    +    @SuppressWarnings("unchecked")
    
    250 247
         public Optional<MoveRequest> build(DataSourceEditor dataSourceEditor) {
    
    251 248
             if (parentTargetReferenceType == null) {
    
    252
    -            parentTargetReferenceType = parentReferenceType;
    
    249
    +            parentTargetReferenceType = (Class<? extends DtoReference>) oldParentId.getType();
    
    253 250
             }
    
    254 251
             if (askNewParentTitle == null) {
    
    255 252
                 askNewParentTitle = ContentOpenableUII18nHelper.getActionMoveChooseParentTitle(referenceType);
    
    ... ... @@ -258,7 +255,7 @@ public class MoveRequestBuilder {
    258 255
                 askNewParentMessage = ContentOpenableUII18nHelper.getActionMoveChooseParentMessage(referenceType);
    
    259 256
             }
    
    260 257
     
    
    261
    -        DtoReferenceCollection<?> parentCandidates = Objects.requireNonNull(this.parentCandidates, "No parent candidates set.").apply(oldParentId);
    
    258
    +        DtoReferenceCollection<?> parentCandidates = Objects.requireNonNull(this.parentCandidates, "No parent candidates set.").apply(oldParentId.getId());
    
    262 259
             String newParentId = askNewParent(parentCandidates.toList(), askNewParentTitle, askNewParentMessage).orElse(null);
    
    263 260
             if (newParentId == null) {
    
    264 261
                 return Optional.empty();
    
    ... ... @@ -275,7 +272,7 @@ public class MoveRequestBuilder {
    275 272
                     }
    
    276 273
                 }
    
    277 274
             }
    
    278
    -        return Optional.of(new MoveRequest(referenceType, parentReferenceType, parentTargetReferenceType, oldParentId, ids, newParentId, selectTarget.isSelected()));
    
    275
    +        return Optional.of(new MoveRequest(referenceType, oldParentId, ids, ShortIdDto.of(parentTargetReferenceType, newParentId), selectTarget.isSelected()));
    
    279 276
         }
    
    280 277
     
    
    281 278
         private <R extends DtoReference> Optional<String> askNewParent(List<R> parentCandidates, String dialogTitle, String dialogMessage) {
    

  • client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/ActivitySampleUIModel.java
    ... ... @@ -24,7 +24,6 @@ package fr.ird.observe.client.datasource.editor.ll.data.logbook;
    24 24
     
    
    25 25
     
    
    26 26
     import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequestBuilder;
    
    27
    -import fr.ird.observe.dto.data.ll.logbook.ActivityReference;
    
    28 27
     import fr.ird.observe.dto.data.ll.logbook.ActivitySampleReference;
    
    29 28
     
    
    30 29
     public class ActivitySampleUIModel extends GeneratedActivitySampleUIModel {
    
    ... ... @@ -34,6 +33,6 @@ public class ActivitySampleUIModel extends GeneratedActivitySampleUIModel {
    34 33
         }
    
    35 34
     
    
    36 35
         public MoveRequestBuilder.StepSetParentCandidates toMoveRequest() {
    
    37
    -        return MoveRequestBuilder.create(ActivitySampleReference.class, ActivityReference.class, getStates().getSelectedParentId(), toReference(getStates().getBean()));
    
    36
    +        return MoveRequestBuilder.create(ActivitySampleReference.class, getSource().getParentReference().toShortReference(), toReference(getStates().getBean()));
    
    38 37
         }
    
    39 38
     }

  • client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/helper/ContentUIModelHelper.java
    ... ... @@ -120,14 +120,14 @@ public class ContentUIModelHelper extends ContentUIHelperSupport {
    120 120
                 "    @Override\n" +
    
    121 121
                 "    public MoveRequestBuilder.StepSetParentCandidates toMoveRequest() {\n" +
    
    122 122
                 "        return MoveRequestBuilder\n" +
    
    123
    -            "                .create(%1$s.class, %2$s.class, getStates().getSelectedParentId(), toReference(getStates().getBean()))\n" +
    
    123
    +            "                .create(%1$s.class, getSource().getParentReference().toShortReference(), toReference(getStates().getBean()))\n" +
    
    124 124
                 "                .setEditNode(getSource().getInitializer().getEditNode());\n" +
    
    125 125
                 "    }\n\n";
    
    126 126
         public static final String TO_MOVE_REQUEST_MULTIPLE = "" +
    
    127 127
                 "    @Override\n" +
    
    128 128
                 "    public MoveRequestBuilder.StepSetParentCandidates toMoveRequest() {\n" +
    
    129 129
                 "        return MoveRequestBuilder\n" +
    
    130
    -            "                .create(%1$s.class, %2$s.class, getStates().getSelectedParentId(), getStates().getSelectedDatas())\n" +
    
    130
    +            "                .create(%1$s.class, getSource().getParentReference().toShortReference(), getStates().getSelectedDatas())\n" +
    
    131 131
                 "                .setEditNode(getSource().getInitializer().getEditNode());\n" +
    
    132 132
                 "    }\n\n";
    
    133 133
         public static final String CREATE_FORM = "" +
    
    ... ... @@ -193,14 +193,14 @@ public class ContentUIModelHelper extends ContentUIHelperSupport {
    193 193
                     extraMethods += String.format(TO_DELETE_REQUEST_MULTIPLE, referenceType.getSimpleName());
    
    194 194
                     imports.add(MoveRequestBuilder.class.getName());
    
    195 195
                     imports.add(generator.scopeBuilder.parentDtoReferenceType.getName());
    
    196
    -                extraMethods += String.format(TO_MOVE_REQUEST_MULTIPLE, referenceType.getSimpleName(), generator.scopeBuilder.parentDtoReferenceType.getSimpleName());
    
    196
    +                extraMethods += String.format(TO_MOVE_REQUEST_MULTIPLE, referenceType.getSimpleName());
    
    197 197
                 } else if (uiModel == ContentEditUIModel.class) {
    
    198 198
                     extraMethods += String.format(TO_DELETE_REQUEST, referenceType.getSimpleName());
    
    199 199
                 } else if (uiModel == ContentOpenableUIModel.class) {
    
    200 200
                     imports.add(MoveRequestBuilder.class.getName());
    
    201 201
                     extraMethods += String.format(TO_DELETE_REQUEST_WITH_EDIT, referenceType.getSimpleName());
    
    202 202
                     imports.add(generator.scopeBuilder.parentDtoReferenceType.getName());
    
    203
    -                extraMethods += String.format(TO_MOVE_REQUEST, referenceType.getSimpleName(), generator.scopeBuilder.parentDtoReferenceType.getSimpleName());
    
    203
    +                extraMethods += String.format(TO_MOVE_REQUEST, referenceType.getSimpleName());
    
    204 204
                 }
    
    205 205
             }
    
    206 206
             return generate(UI_MODEL_GENERATED, imports, generator.cleanClassName, uiModel, generics, extraMethods);
    

  • services/api-test/src/main/java/fr/ird/observe/services/service/data/OpenableDataServiceFixtures.java
    ... ... @@ -87,6 +87,38 @@ public class OpenableDataServiceFixtures {
    87 87
             ShortIdDto oldParentId = getIdReference(fixtures, "move.oldParentId");
    
    88 88
             ShortIdDto newParentId = getIdReference(fixtures, "move.newParentId");
    
    89 89
             service.move(oldParentId, newParentId, ImmutableSet.of(id));
    
    90
    +
    
    91
    +        // move back to original
    
    92
    +        service.move(newParentId, oldParentId, ImmutableSet.of(id));
    
    93
    +
    
    94
    +        {// try to move them back using bad timestamp (will fail)
    
    95
    +            ShortIdDto oldParentId2 = oldParentId.of(new Date(0));
    
    96
    +            try {
    
    97
    +                service.move(oldParentId2, newParentId, ImmutableSet.of(id));
    
    98
    +                Assert.fail(String.format("Should got a concurrent modification on move %s", id));
    
    99
    +            } catch (ConcurrentModificationException e) {
    
    100
    +                Assert.assertTrue(true);
    
    101
    +            }
    
    102
    +        }
    
    103
    +        {// try to move them back using bad timestamp (will fail)
    
    104
    +            ShortIdDto newParentId2 = newParentId.of(new Date(0));
    
    105
    +            try {
    
    106
    +                service.move(oldParentId, newParentId2, ImmutableSet.of(id));
    
    107
    +                Assert.fail(String.format("Should got a concurrent modification on move %s", id));
    
    108
    +            } catch (ConcurrentModificationException e) {
    
    109
    +                Assert.assertTrue(true);
    
    110
    +            }
    
    111
    +        }
    
    112
    +        {// try to move them back using bad timestamp (will fail)
    
    113
    +            ShortIdDto oldParentId2 = oldParentId.of(new Date(0));
    
    114
    +            ShortIdDto newParentId2 = newParentId.of(new Date(0));
    
    115
    +            try {
    
    116
    +                service.move(oldParentId2, newParentId2, ImmutableSet.of(id));
    
    117
    +                Assert.fail(String.format("Should got a concurrent modification on move %s", id));
    
    118
    +            } catch (ConcurrentModificationException e) {
    
    119
    +                Assert.assertTrue(true);
    
    120
    +            }
    
    121
    +        }
    
    90 122
         }
    
    91 123
     
    
    92 124
         public static ShortIdDto getIdReference(ObserveServiceFixtures<?> fixtures, String property) {
    
    ... ... @@ -97,7 +129,7 @@ public class OpenableDataServiceFixtures {
    97 129
                 return ObserveBusinessProject.get().toShortDto(id);
    
    98 130
             } else {
    
    99 131
                 type = Objects2.forName(id.substring(0, index));
    
    100
    -            id = id.substring(index+1);
    
    132
    +            id = id.substring(index + 1);
    
    101 133
                 return ShortIdDto.of(type, id);
    
    102 134
             }
    
    103 135
         }