-
Notifications
You must be signed in to change notification settings - Fork 13
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feature: VSDSPUB-349: Add ParentUpdaterImpl
- Loading branch information
1 parent
c920d5f
commit 558c8d6
Showing
12 changed files
with
143 additions
and
47 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
8 changes: 8 additions & 0 deletions
8
...aanderen/informatievlaanderen/ldes/server/domain/ldesfragment/services/ParentUpdater.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services; | ||
|
||
import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.entities.LdesFragment; | ||
|
||
public interface ParentUpdater { | ||
|
||
void updateParent(LdesFragment currentChild); | ||
} |
45 changes: 45 additions & 0 deletions
45
...eren/informatievlaanderen/ldes/server/domain/ldesfragment/services/ParentUpdaterImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services; | ||
|
||
import be.vlaanderen.informatievlaanderen.ldes.server.domain.exceptions.MissingFragmentException; | ||
import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.entities.LdesFragment; | ||
import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.repository.LdesFragmentRepository; | ||
import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.valueobjects.FragmentInfo; | ||
import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.valueobjects.TreeRelation; | ||
import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragmentrequest.valueobjects.FragmentPair; | ||
import org.springframework.stereotype.Component; | ||
|
||
import java.util.ArrayList; | ||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
import static be.vlaanderen.informatievlaanderen.ldes.server.domain.constants.RdfConstants.GENERIC_TREE_RELATION; | ||
|
||
@Component | ||
public class ParentUpdaterImpl implements ParentUpdater { | ||
private final LdesFragmentRepository ldesFragmentRepository; | ||
|
||
public ParentUpdaterImpl(LdesFragmentRepository ldesFragmentRepository) { | ||
this.ldesFragmentRepository = ldesFragmentRepository; | ||
} | ||
|
||
public void updateParent(LdesFragment currentChild) { | ||
List<FragmentPair> parentPairs = new ArrayList<>(currentChild.getFragmentInfo().getFragmentPairs()); | ||
parentPairs.remove(parentPairs.size() - 1); | ||
LdesFragment parent = ldesFragmentRepository | ||
.retrieveMutableFragment(currentChild.getFragmentInfo().getViewName(), parentPairs) | ||
.orElseThrow(() -> new MissingFragmentException( | ||
new FragmentInfo(currentChild.getFragmentInfo().getViewName(), parentPairs) | ||
.generateFragmentId())); | ||
Optional<TreeRelation> optionalOldTreeRelation = parent.getRelations().stream() | ||
.filter(treeRelation -> treeRelation.treeNode().equals(currentChild.getFragmentId())).findFirst(); | ||
if (optionalOldTreeRelation.isPresent()) { | ||
TreeRelation oldTreeRelation = optionalOldTreeRelation.get(); | ||
LdesFragment newChild = ldesFragmentRepository | ||
.retrieveNonDeletedChildFragment(parent.getFragmentInfo().getViewName(), parentPairs) | ||
.orElseThrow(() -> new RuntimeException("No non-deleted child")); | ||
parent.removeRelation(oldTreeRelation); | ||
parent.addRelation(new TreeRelation("", newChild.getFragmentId(), "", "", GENERIC_TREE_RELATION)); | ||
ldesFragmentRepository.saveFragment(parent); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
58 changes: 58 additions & 0 deletions
58
.../informatievlaanderen/ldes/server/domain/ldesfragment/services/ParentUpdaterImplTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
package be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.services; | ||
|
||
import be.vlaanderen.informatievlaanderen.ldes.server.domain.exceptions.MissingFragmentException; | ||
import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.entities.LdesFragment; | ||
import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.repository.LdesFragmentRepository; | ||
import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.valueobjects.FragmentInfo; | ||
import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragment.valueobjects.TreeRelation; | ||
import be.vlaanderen.informatievlaanderen.ldes.server.domain.ldesfragmentrequest.valueobjects.FragmentPair; | ||
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.Test; | ||
|
||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertEquals; | ||
import static org.junit.jupiter.api.Assertions.assertThrows; | ||
import static org.mockito.Mockito.*; | ||
|
||
class ParentUpdaterImplTest { | ||
|
||
private final LdesFragmentRepository ldesFragmentRepository = mock(LdesFragmentRepository.class); | ||
private ParentUpdater parentUpdater; | ||
private static final String VIEW = "view"; | ||
private static final LdesFragment DELETED_CHILD = new LdesFragment( | ||
new FragmentInfo(VIEW, List.of(new FragmentPair("key", "value")))); | ||
private static final LdesFragment NON_DELETED_CHILD = new LdesFragment( | ||
new FragmentInfo(VIEW, List.of(new FragmentPair("key", "value2")))); | ||
private static final LdesFragment PARENT = new LdesFragment(new FragmentInfo(VIEW, List.of())); | ||
|
||
@BeforeEach | ||
void setUp() { | ||
parentUpdater = new ParentUpdaterImpl(ldesFragmentRepository); | ||
|
||
} | ||
|
||
@Test | ||
void when_ParentIsPointingToDeletedChild_RelationIsRemovedAndNewRelationToNonDeletedChildIsAdded() { | ||
PARENT.addRelation(new TreeRelation("", DELETED_CHILD.getFragmentId(), "", "", "")); | ||
when(ldesFragmentRepository.retrieveMutableFragment(VIEW, List.of())).thenReturn(Optional.of(PARENT)); | ||
when(ldesFragmentRepository.retrieveNonDeletedChildFragment(VIEW, List.of())) | ||
.thenReturn(Optional.of(NON_DELETED_CHILD)); | ||
|
||
parentUpdater.updateParent(DELETED_CHILD); | ||
|
||
verify(ldesFragmentRepository, times(1)).saveFragment(PARENT); | ||
assertEquals(NON_DELETED_CHILD.getFragmentId(), PARENT.getRelations().get(0).treeNode()); | ||
} | ||
|
||
@Test | ||
void when_ParentDoesNotExist_ExceptionIsThrown() { | ||
when(ldesFragmentRepository.retrieveMutableFragment(VIEW, List.of())).thenReturn(Optional.empty()); | ||
|
||
MissingFragmentException missingFragmentException = assertThrows(MissingFragmentException.class, | ||
() -> parentUpdater.updateParent(DELETED_CHILD)); | ||
assertEquals("No fragment exists with fragment identifier: /view", missingFragmentException.getMessage()); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
30 changes: 0 additions & 30 deletions
30
...laanderen/informatievlaanderen/ldes/server/infra/mongo/entities/MemberRefencesEntity.java
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters