Skip to content

Commit 11303c0

Browse files
committed
ST5AS-55 Add OpenAPI spec for relationship direction
1 parent 3dc305e commit 11303c0

4 files changed

Lines changed: 30 additions & 23 deletions

File tree

app/controllers/RelationshipController.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@
1616
import services.RelationshipService;
1717

1818
import javax.inject.Inject;
19-
import java.util.List;
20-
import java.util.Optional;
21-
import java.util.Set;
22-
import java.util.UUID;
19+
import java.util.*;
2320
import java.util.stream.Collectors;
2421

2522
/**
@@ -59,17 +56,13 @@ public Result create(Http.Request request) {
5956
}
6057

6158
public Result getRelationshipsByProjectIdCommitIdRelatedElementId(UUID projectId, UUID commitId, UUID elementId, Optional<String> direction, Http.Request request) {
62-
RelationshipDirection relDirection = RelationshipDirection.BOTH;
63-
if(direction.isPresent()) {
64-
if(direction.get().equalsIgnoreCase(RelationshipDirection.IN.toString()))
65-
relDirection = RelationshipDirection.IN;
66-
else if(direction.get().equalsIgnoreCase(RelationshipDirection.OUT.toString()))
67-
relDirection = RelationshipDirection.OUT;
68-
else
69-
relDirection = RelationshipDirection.BOTH;
70-
}
59+
RelationshipDirection relDirection = direction
60+
.flatMap(d -> Arrays.stream(RelationshipDirection.values())
61+
.filter(rd -> rd.toString().equalsIgnoreCase(d))
62+
.findAny())
63+
.orElse(RelationshipDirection.BOTH);
7164

72-
Set<Relationship> relationships = relationshipService.getRelationshipsByProjectCommitRelatedElement(projectId, commitId, elementId, Optional.of(relDirection));
65+
Set<Relationship> relationships = relationshipService.getRelationshipsByProjectCommitRelatedElement(projectId, commitId, elementId, relDirection);
7366
boolean respondWithJsonLd = ElementController.respondWithJsonLd(request);
7467
return ok(JacksonHelper.collectionValueToTree(Set.class,
7568
respondWithJsonLd ? JsonLdMofObjectAdornment.class : metamodelProvider.getImplementationClass(Relationship.class),

app/services/RelationshipService.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,23 @@ public Optional<Relationship> create(Relationship relationship) {
4141
return relationship.getIdentifier() != null ? relationshipDao.update(relationship) : relationshipDao.persist(relationship);
4242
}
4343

44-
public Set<Relationship> getRelationshipsByProjectCommitRelatedElement(UUID projectId, UUID commitId, UUID relatedElementId, Optional<RelationshipDirection> direction) {
44+
public Set<Relationship> getRelationshipsByProjectCommitRelatedElement(UUID projectId, UUID commitId, UUID relatedElementId, RelationshipDirection direction) {
4545
Commit commit = projectDao.findById(projectId).flatMap(project -> commitDao.findByProjectAndId(project, commitId)).orElseThrow(() -> new IllegalArgumentException("Commit " + commitId + " not found."));
4646
Element relatedElement = elementDao.findByCommitAndId(commit, relatedElementId).orElseThrow(() -> new IllegalArgumentException("Element " + relatedElementId + " not found."));
4747
Set<Relationship> allRelationships = relationshipDao.findAllByCommitRelatedElement(commit, relatedElement);
4848
Set<Relationship> results = allRelationships;
49-
if (direction.isPresent()) {
50-
if (direction.get().equals(RelationshipDirection.OUT)) {
51-
results = allRelationships.stream().filter(r -> r.getSource().stream().anyMatch(e -> e.getIdentifier().equals(relatedElementId))).collect(Collectors.toSet());
52-
} else if (direction.get().equals(RelationshipDirection.IN)) {
53-
results = allRelationships.stream().filter(r -> r.getTarget().stream().anyMatch(e -> e.getIdentifier().equals(relatedElementId))).collect(Collectors.toSet());
54-
}
49+
if (RelationshipDirection.OUT.equals(direction)) {
50+
results = allRelationships.stream()
51+
.filter(r -> r.getSource().stream()
52+
.anyMatch(e -> Objects.equals(e.getIdentifier(), relatedElementId))
53+
)
54+
.collect(Collectors.toSet());
55+
} else if (RelationshipDirection.IN.equals(direction)) {
56+
results = allRelationships.stream()
57+
.filter(r -> r.getTarget().stream()
58+
.anyMatch(e -> Objects.equals(e.getIdentifier(), relatedElementId))
59+
)
60+
.collect(Collectors.toSet());
5561
}
5662

5763
return results;

build.sbt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,3 @@ javacOptions in Compile ++= Seq("-s", "generated")
3333

3434
sources in(Compile, doc) := Seq.empty
3535
publishArtifact in(Compile, packageDoc) := false
36-
37-
//routesImport += “org.omg.sysml.utils.RelationshipDirection”

public/swagger/openapi.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,16 @@ paths:
337337
type: string
338338
format: uuid
339339
required: true
340+
- name: direction
341+
in: query
342+
description: Filter for relationships that are incoming (in), outgoing (out), or both relative to the related element
343+
type: string
344+
enum:
345+
- 'in'
346+
- 'out'
347+
- 'both'
348+
default: 'both'
349+
required: false
340350
get:
341351
tags:
342352
- Relationship

0 commit comments

Comments
 (0)