Skip to content

Commit

Permalink
Fixes #337
Browse files Browse the repository at this point in the history
  • Loading branch information
Riduidel committed Mar 20, 2023
1 parent 9392490 commit bfd55bc
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ workspace "aadarchi-documentation-system" {
}
person_architect -> archetype_6 "Bootstrap a valid project"
person_architect -> maven "Generates documentation"
person_stakeholder -> architecture_documentation "Read generated documentation"
architecture_documentation -> person_stakeholder "Read generated documentation"
archetype_6 -> architecture_documentation "Generates documentation project"
}
views {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,58 +7,73 @@
import java.util.Set;
import java.util.stream.Collectors;

public class SipocModel {
import org.apache.commons.lang3.StringUtils;

public class SipocModel {

String describeConnectedElement(Element element) {
return String.format(" *%s* %s", element.getName(), StringUtils.isBlank(element.getDescription()) ? "" : element.getDescription());
}

Set<String> buildIncomingRelationships(Element element) {
return element.getModel().getRelationships().stream()
.filter(relationship -> relationship.getDestination().equals(element))
.map(Relationship::getSource)
.map(source -> source.getName() + " - " + source.getDescription())
.sorted()
.collect(Collectors.toCollection(LinkedHashSet::new));
}
Set<String> buildIncomingRelationships(Element element) {
return element.getModel().getRelationships().stream()
.filter(relationship -> relationship.getDestination().equals(element)).map(Relationship::getSource)
.map(this::describeConnectedElement).sorted()
.collect(Collectors.toCollection(LinkedHashSet::new));
}

Set<String> buildIncomingRelationshipDescriptions(Element element) {
return element.getModel().getRelationships().stream()
.filter(relationship -> relationship.getDestination().equals(element))
.map(Relationship::getDescription)
.filter(Objects::nonNull)
.sorted()
.collect(Collectors.toCollection(LinkedHashSet::new));
}
Set<String> buildIncomingRelationshipDescriptions(Element element) {
return element.getModel().getRelationships().stream()
.filter(relationship -> relationship.getDestination().equals(element)).map(Relationship::getDescription)
.filter(Objects::nonNull).sorted().collect(Collectors.toCollection(LinkedHashSet::new));
}

String buildProcessDescriptions(Element element) {
return element.getDescription();
}
String buildProcessDescriptions(Element element) {
return element.getDescription();
}

Set<String> buildOutgoingRelationships(Element element) {
return element.getModel().getRelationships().stream()
.filter(relationship -> relationship.getSource().equals(element))
.map(Relationship::getDestination)
.map(destination -> destination.getName() + " - " + destination.getDescription())
.sorted()
.collect(Collectors.toCollection(LinkedHashSet::new));
}
Set<String> buildOutgoingRelationships(Element element) {
return element.getModel().getRelationships().stream()
.filter(relationship -> relationship.getSource().equals(element)).map(Relationship::getDestination)
.map(this::describeConnectedElement).sorted()
.collect(Collectors.toCollection(LinkedHashSet::new));
}

Set<String> buildOutgoingRelationshipDescriptions(Element element) {
return element.getModel().getRelationships().stream()
.filter(relationship -> relationship.getSource().equals(element))
.map(Relationship::getDescription)
.sorted()
.collect(Collectors.toCollection(LinkedHashSet::new));
}
Set<String> buildOutgoingRelationshipDescriptions(Element element) {
return element.getModel().getRelationships().stream()
.filter(relationship -> relationship.getSource().equals(element)).map(Relationship::getDescription)
.sorted().collect(Collectors.toCollection(LinkedHashSet::new));
}

private String getString(Set<String> treatment) {
return String.join("\n\n", treatment);
}
private String getString(Set<String> treatment) {
return String.join("\n\n", treatment);
}

public String generateSipocDiagram(Element element) {
return element.getModel().getRelationships().stream()
.map(relationship -> String.format("|%s|%s|%s|%s|%s",getString(buildIncomingRelationships(element)), getString(buildIncomingRelationshipDescriptions(element)),
buildProcessDescriptions(element), getString(buildOutgoingRelationshipDescriptions(element)), getString(buildOutgoingRelationships(element))))
.distinct()
.collect(Collectors.joining("\n\n\n\n\n", "[cols=\"1,1,1,1,1\"]\n" + "|===\n|Incoming|Input|Process|Output|Outgoing\n\n\n\n\n", "\n|==="));
}
Set<String> buildIncomingRelationships = buildIncomingRelationships(element);
Set<String> buildIncomingRelationshipDescriptions = buildIncomingRelationshipDescriptions(element);
Set<String> buildOutgoingRelationshipDescriptions = buildOutgoingRelationshipDescriptions(element);
Set<String> buildOutgoingRelationships = buildOutgoingRelationships(element);
if(!buildIncomingRelationships.isEmpty() ||
!buildIncomingRelationshipDescriptions.isEmpty() ||
!buildOutgoingRelationshipDescriptions.isEmpty() ||
!buildOutgoingRelationships.isEmpty()) {
return element.getModel().getRelationships().stream()
.map(relationship -> {
return String.format("|%s|%s|%s|%s|%s",
getString(buildIncomingRelationships),
getString(buildIncomingRelationshipDescriptions),
buildProcessDescriptions(element),
getString(buildOutgoingRelationshipDescriptions),
getString(buildOutgoingRelationships));
})
.distinct()
.collect(Collectors.joining("\n\n\n\n\n",
"[cols=\"1,1,1,1,1\"]\n" + "|===\n|Incoming|Input|Process|Output|Outgoing\n\n\n\n\n",
"\n|==="));
} else {
return "";
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -38,38 +38,46 @@ void test() {
@Test
public void can_create_a_sipoc_table() {
//given
// What is this ?
//when
SipocEnhancer sipocEnhancer = new SipocEnhancer();
//when
String sipocEnhancerTable = sipocEnhancer.generateSipocDiagram(centerContainer);
sipocEnhancer.generateSipocDiagram(centerContainer);
//then
Assertions.assertThat(sipocEnhancerTable).isEqualTo(
"[cols=\"1,1,1,1,1\"]\n" + "|===\n|Incoming|Input|Process|Output|Outgoing\n\n\n\n\n" +
"|"+ inputContainer.getName() + " - " + inputContainer.getDescription() +
"| *"+ inputContainer.getName() + "* " + inputContainer.getDescription() +
"|" + CONNECTS_INPUT_TO_CENTER +
"|"+ centerContainer.getDescription() +
"|" + CONNECTS_CENTER_TO_OUTPUT +
"|"+ outputContainer.getDescription() + " - " + outputContainer.getName() +
"| *"+ outputContainer.getDescription() + "* " + outputContainer.getName() +
"\n|===");
}

@Test
public void can_create_a_sipoc_table_with_multiple_inputs_and_outputs() {
//given
// What is this ?
//when
SipocEnhancer sipocEnhancer = new SipocEnhancer();
//when
String sipocEnhancerTable = sipocEnhancer.generateSipocDiagram(centerContainer1);
sipocEnhancer.generateSipocDiagram(centerContainer1);
//then
Assertions.assertThat(sipocEnhancerTable).isEqualTo(
"[cols=\"1,1,1,1,1\"]\n" + "|===\n|Incoming|Input|Process|Output|Outgoing\n\n\n\n\n" +
"|"+ inputContainer1.getName() + " - " + inputContainer1.getDescription() + "\n\n" + inputContainer2.getName() + " - " + inputContainer2.getDescription()+
"| *"+ inputContainer1.getName() + "* " + inputContainer1.getDescription() + "\n\n" +
" *" + inputContainer2.getName() + "* " + inputContainer2.getDescription()+
"|" + CONNECTS_INPUT_TO_CENTER + "\n\n" + CONNECTS_INPUT2_TO_CENTER +
"|"+ centerContainer1.getDescription() +
"|" + CONNECTS_CENTER_TO_OUTPUT + "\n\n" + CONNECTS_CENTER_TO_OUTPUT2 +
"|"+ outputContainer1.getDescription() + " - " + outputContainer1.getName() + "\n\n" + outputContainer2.getName() + " - " + outputContainer2.getDescription() +
"| *"+ outputContainer1.getDescription() + "* " + outputContainer1.getName() + "\n\n" +
" *" + outputContainer2.getName() + "* " + outputContainer2.getDescription() +
"\n|===");
}

@Test
public void do_not_generate_sipoc_table_when_there_are_no_connections() {
// Given
SipocEnhancer sipocEnhancer = new SipocEnhancer();
// When
String sipocTableForSystem = sipocEnhancer.generateSipocDiagram(system);
// Then
Assertions.assertThat(sipocTableForSystem).isEmpty();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class SipocModelTest extends AbstractSipocTest {
// given
SipocModel sipocModel = new SipocModel();
Set<String> buildIncomingRelationship = Set.of(
String.format("%s - %s", inputContainer.getName(), inputContainer.getDescription()));
String.format(" *%s* %s", inputContainer.getName(), inputContainer.getDescription()));
// when
// then
Assertions.assertThat(sipocModel.buildIncomingRelationships(centerContainer)).isEqualTo(buildIncomingRelationship);
Expand Down Expand Up @@ -52,16 +52,16 @@ public class SipocModelTest extends AbstractSipocTest {
// when
// then
Set<String> buildOutgoingRelationships = Set.of(
String.format("%s - %s", outputContainer.getName(), outputContainer.getDescription()));
String.format(" *%s* %s", outputContainer.getName(), outputContainer.getDescription()));
Assertions.assertThat(sipocModel.buildOutgoingRelationships(centerContainer)).isEqualTo(buildOutgoingRelationships);
}

@Test public void can_create_multiple_input_list() {
// given
SipocModel sipocModel = new SipocModel();
Set<String> buildIncomingRelationship = Set.of(
String.format("%s - %s", inputContainer1.getName(), inputContainer1.getDescription()),
String.format("%s - %s", inputContainer2.getName(), inputContainer2.getDescription()));
String.format(" *%s* %s", inputContainer1.getName(), inputContainer1.getDescription()),
String.format(" *%s* %s", inputContainer2.getName(), inputContainer2.getDescription()));
// when
// then
Assertions.assertThat(sipocModel.buildIncomingRelationships(centerContainer1)).isEqualTo(buildIncomingRelationship);
Expand All @@ -70,8 +70,8 @@ public class SipocModelTest extends AbstractSipocTest {
// given
SipocModel sipocModel = new SipocModel();
Set<String> buildOutgoingRelationship = Set.of(
String.format("%s - %s", outputContainer1.getName(), outputContainer1.getDescription()),
String.format("%s - %s", outputContainer2.getName(), outputContainer2.getDescription()));
String.format(" *%s* %s", outputContainer1.getName(), outputContainer1.getDescription()),
String.format(" *%s* %s", outputContainer2.getName(), outputContainer2.getDescription()));
// when
// then
Assertions.assertThat(sipocModel.buildOutgoingRelationships(centerContainer1)).isEqualTo(buildOutgoingRelationship);
Expand Down

0 comments on commit bfd55bc

Please sign in to comment.