Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 45db1344 by Tony Chemit at 2021-02-22T20:14:50+01:00 fixup! build ci on features - - - - - 1e7bb086 by Tony Chemit at 2021-02-22T21:24:18+01:00 Rendre les déplacements impossible si les parents incriminés sont obsolètes. - Closes #1794 - - - - - 6 changed files: - .gitlab-ci.yml - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveRequest.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/move/MoveRequestBuilder.java - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/ActivitySampleUIModel.java - client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/helper/ContentUIModelHelper.java - services/api-test/src/main/java/fr/ird/observe/services/service/data/OpenableDataServiceFixtures.java Changes: ===================================== .gitlab-ci.yml ===================================== @@ -101,7 +101,7 @@ trigger-make-stage: .automatic: &automatic only: - /^develop.*$/i - - /^features/.+$/i + - /^feature/.+$/i except: - triggers @@ -155,7 +155,7 @@ release-deploy-demo: .manual: &manual only: - /^develop.*$/i - - /^features/.+$/i + - /^feature/.+$/i when: manual 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; * @author Tony Chemit - dev@tchemit.fr * @since 8.0.1 */ +@SuppressWarnings("unchecked") public class MoveRequest { /** * Reference type of data to move. */ private final Class<? extends DataDtoReference> referenceType; - /** - * Reference type of parent data to move. - */ - private final Class<? extends DtoReference> parentReferenceType; - /** - * Reference type of parent target. - */ - private final Class<? extends DtoReference> parentTargetReferenceType; /** * Id of parent data to move. */ @@ -66,13 +59,11 @@ public class MoveRequest { */ private final boolean selectTarget; - public MoveRequest(Class<? extends DataDtoReference> referenceType, Class<? extends DtoReference> parentReferenceType, Class<? extends DtoReference> parentTargetReferenceType, String oldParentId, ImmutableSet<String> ids, String newParentId, boolean selectTarget) { + public MoveRequest(Class<? extends DataDtoReference> referenceType, ShortIdDto oldParentId, ImmutableSet<String> ids, ShortIdDto newParentId, boolean selectTarget) { this.referenceType = referenceType; - this.parentReferenceType = parentReferenceType; - this.parentTargetReferenceType = parentTargetReferenceType; - this.oldParentId = ShortIdDto.of(parentReferenceType, oldParentId); + this.oldParentId = oldParentId; this.ids = ids; - this.newParentId = ShortIdDto.of(parentTargetReferenceType, newParentId); + this.newParentId = newParentId; this.selectTarget = selectTarget; } @@ -81,11 +72,11 @@ public class MoveRequest { } public Class<? extends DtoReference> getParentReferenceType() { - return parentReferenceType; + return (Class<? extends DtoReference>) oldParentId.getType(); } public Class<? extends DtoReference> getParentTargetReferenceType() { - return parentTargetReferenceType; + return (Class<? extends DtoReference>) newParentId.getType(); } 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 import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUII18nHelper; import fr.ird.observe.client.datasource.editor.api.content.referential.usage.UsageUIHandlerSupport; import fr.ird.observe.client.util.UIHelper; +import fr.ird.observe.dto.ShortIdDto; import fr.ird.observe.dto.reference.DataDtoReference; import fr.ird.observe.dto.reference.DtoReference; import fr.ird.observe.dto.reference.DtoReferenceCollection; @@ -85,14 +86,10 @@ public class MoveRequestBuilder { * Reference type of data to move. */ private final Class<? extends DataDtoReference> referenceType; - /** - * Reference type of parent data to move. - */ - private final Class<? extends DtoReference> parentReferenceType; /** * Id of parent data to move. */ - private final String oldParentId; + private final ShortIdDto oldParentId; /** * Data to delete. */ @@ -181,18 +178,17 @@ public class MoveRequestBuilder { } } - public static StepSetParentCandidates create(Class<? extends DataDtoReference> referenceType, Class<? extends DtoReference> parentReferenceType, String oldParentId, DtoReference id) { - return create(referenceType, parentReferenceType, oldParentId, ImmutableSet.of(id)); + public static StepSetParentCandidates create(Class<? extends DataDtoReference> referenceType, ShortIdDto oldParentId, DtoReference id) { + return create(referenceType, oldParentId, ImmutableSet.of(id)); } - public static StepSetParentCandidates create(Class<? extends DataDtoReference> referenceType, Class<? extends DtoReference> parentReferenceType, String oldParentId, Collection<? extends DtoReference> data) { - MoveRequestBuilder builder = new MoveRequestBuilder(referenceType, parentReferenceType, oldParentId, data); + public static StepSetParentCandidates create(Class<? extends DataDtoReference> referenceType, ShortIdDto oldParentId, Collection<? extends DtoReference> data) { + MoveRequestBuilder builder = new MoveRequestBuilder(referenceType, oldParentId, data); return new BuilderImpl(builder); } - private MoveRequestBuilder(Class<? extends DataDtoReference> referenceType, Class<? extends DtoReference> parentReferenceType, String oldParentId, Collection<? extends DtoReference> data) { + private MoveRequestBuilder(Class<? extends DataDtoReference> referenceType, ShortIdDto oldParentId, Collection<? extends DtoReference> data) { this.referenceType = Objects.requireNonNull(referenceType); - this.parentReferenceType = Objects.requireNonNull(parentReferenceType); this.oldParentId = Objects.requireNonNull(oldParentId); this.data = Objects.requireNonNull(data); KeyStroke keyStroke = ObserveKeyStrokesEditorApi.KEY_STROKE_SELECT_TARGET; @@ -247,9 +243,10 @@ public class MoveRequestBuilder { return this; } + @SuppressWarnings("unchecked") public Optional<MoveRequest> build(DataSourceEditor dataSourceEditor) { if (parentTargetReferenceType == null) { - parentTargetReferenceType = parentReferenceType; + parentTargetReferenceType = (Class<? extends DtoReference>) oldParentId.getType(); } if (askNewParentTitle == null) { askNewParentTitle = ContentOpenableUII18nHelper.getActionMoveChooseParentTitle(referenceType); @@ -258,7 +255,7 @@ public class MoveRequestBuilder { askNewParentMessage = ContentOpenableUII18nHelper.getActionMoveChooseParentMessage(referenceType); } - DtoReferenceCollection<?> parentCandidates = Objects.requireNonNull(this.parentCandidates, "No parent candidates set.").apply(oldParentId); + DtoReferenceCollection<?> parentCandidates = Objects.requireNonNull(this.parentCandidates, "No parent candidates set.").apply(oldParentId.getId()); String newParentId = askNewParent(parentCandidates.toList(), askNewParentTitle, askNewParentMessage).orElse(null); if (newParentId == null) { return Optional.empty(); @@ -275,7 +272,7 @@ public class MoveRequestBuilder { } } } - return Optional.of(new MoveRequest(referenceType, parentReferenceType, parentTargetReferenceType, oldParentId, ids, newParentId, selectTarget.isSelected())); + return Optional.of(new MoveRequest(referenceType, oldParentId, ids, ShortIdDto.of(parentTargetReferenceType, newParentId), selectTarget.isSelected())); } 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; import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveRequestBuilder; -import fr.ird.observe.dto.data.ll.logbook.ActivityReference; import fr.ird.observe.dto.data.ll.logbook.ActivitySampleReference; public class ActivitySampleUIModel extends GeneratedActivitySampleUIModel { @@ -34,6 +33,6 @@ public class ActivitySampleUIModel extends GeneratedActivitySampleUIModel { } public MoveRequestBuilder.StepSetParentCandidates toMoveRequest() { - return MoveRequestBuilder.create(ActivitySampleReference.class, ActivityReference.class, getStates().getSelectedParentId(), toReference(getStates().getBean())); + return MoveRequestBuilder.create(ActivitySampleReference.class, getSource().getParentReference().toShortReference(), toReference(getStates().getBean())); } } ===================================== 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 { " @Override\n" + " public MoveRequestBuilder.StepSetParentCandidates toMoveRequest() {\n" + " return MoveRequestBuilder\n" + - " .create(%1$s.class, %2$s.class, getStates().getSelectedParentId(), toReference(getStates().getBean()))\n" + + " .create(%1$s.class, getSource().getParentReference().toShortReference(), toReference(getStates().getBean()))\n" + " .setEditNode(getSource().getInitializer().getEditNode());\n" + " }\n\n"; public static final String TO_MOVE_REQUEST_MULTIPLE = "" + " @Override\n" + " public MoveRequestBuilder.StepSetParentCandidates toMoveRequest() {\n" + " return MoveRequestBuilder\n" + - " .create(%1$s.class, %2$s.class, getStates().getSelectedParentId(), getStates().getSelectedDatas())\n" + + " .create(%1$s.class, getSource().getParentReference().toShortReference(), getStates().getSelectedDatas())\n" + " .setEditNode(getSource().getInitializer().getEditNode());\n" + " }\n\n"; public static final String CREATE_FORM = "" + @@ -193,14 +193,14 @@ public class ContentUIModelHelper extends ContentUIHelperSupport { extraMethods += String.format(TO_DELETE_REQUEST_MULTIPLE, referenceType.getSimpleName()); imports.add(MoveRequestBuilder.class.getName()); imports.add(generator.scopeBuilder.parentDtoReferenceType.getName()); - extraMethods += String.format(TO_MOVE_REQUEST_MULTIPLE, referenceType.getSimpleName(), generator.scopeBuilder.parentDtoReferenceType.getSimpleName()); + extraMethods += String.format(TO_MOVE_REQUEST_MULTIPLE, referenceType.getSimpleName()); } else if (uiModel == ContentEditUIModel.class) { extraMethods += String.format(TO_DELETE_REQUEST, referenceType.getSimpleName()); } else if (uiModel == ContentOpenableUIModel.class) { imports.add(MoveRequestBuilder.class.getName()); extraMethods += String.format(TO_DELETE_REQUEST_WITH_EDIT, referenceType.getSimpleName()); imports.add(generator.scopeBuilder.parentDtoReferenceType.getName()); - extraMethods += String.format(TO_MOVE_REQUEST, referenceType.getSimpleName(), generator.scopeBuilder.parentDtoReferenceType.getSimpleName()); + extraMethods += String.format(TO_MOVE_REQUEST, referenceType.getSimpleName()); } } 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 { ShortIdDto oldParentId = getIdReference(fixtures, "move.oldParentId"); ShortIdDto newParentId = getIdReference(fixtures, "move.newParentId"); service.move(oldParentId, newParentId, ImmutableSet.of(id)); + + // move back to original + service.move(newParentId, oldParentId, ImmutableSet.of(id)); + + {// try to move them back using bad timestamp (will fail) + ShortIdDto oldParentId2 = oldParentId.of(new Date(0)); + try { + service.move(oldParentId2, newParentId, ImmutableSet.of(id)); + Assert.fail(String.format("Should got a concurrent modification on move %s", id)); + } catch (ConcurrentModificationException e) { + Assert.assertTrue(true); + } + } + {// try to move them back using bad timestamp (will fail) + ShortIdDto newParentId2 = newParentId.of(new Date(0)); + try { + service.move(oldParentId, newParentId2, ImmutableSet.of(id)); + Assert.fail(String.format("Should got a concurrent modification on move %s", id)); + } catch (ConcurrentModificationException e) { + Assert.assertTrue(true); + } + } + {// try to move them back using bad timestamp (will fail) + ShortIdDto oldParentId2 = oldParentId.of(new Date(0)); + ShortIdDto newParentId2 = newParentId.of(new Date(0)); + try { + service.move(oldParentId2, newParentId2, ImmutableSet.of(id)); + Assert.fail(String.format("Should got a concurrent modification on move %s", id)); + } catch (ConcurrentModificationException e) { + Assert.assertTrue(true); + } + } } public static ShortIdDto getIdReference(ObserveServiceFixtures<?> fixtures, String property) { @@ -97,7 +129,7 @@ public class OpenableDataServiceFixtures { return ObserveBusinessProject.get().toShortDto(id); } else { type = Objects2.forName(id.substring(0, index)); - id = id.substring(index+1); + id = id.substring(index + 1); return ShortIdDto.of(type, id); } } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/35cca7670d8ae0b8d0c24c6ee... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/35cca7670d8ae0b8d0c24c6ee... You're receiving this email because of your account on gitlab.com.