diff --git a/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/generators/plantuml/PlantUMLStakeholderDiagramCreatorTest.java b/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/generators/plantuml/PlantUMLStakeholderDiagramCreatorTest.java
index 70820546..2fdb67db 100644
--- a/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/generators/plantuml/PlantUMLStakeholderDiagramCreatorTest.java
+++ b/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/generators/plantuml/PlantUMLStakeholderDiagramCreatorTest.java
@@ -43,28 +43,34 @@ public void canCreateStakeholderDiagramWithContext() throws IOException {
// then
assertEquals("@startmindmap" + System.lineSeparator()
+ System.lineSeparator()
+ + "" + System.lineSeparator()
+ + "" + System.lineSeparator()
+ "* SameDayDelivery" + System.lineSeparator()
- + "** Product_Suppliers" + System.lineSeparator()
- + "*** Managers" + System.lineSeparator()
- + "*** Logistics_Warehouse_Staff_of_Suppliers" + System.lineSeparator()
- + "*** Delivery_Staff_of_Suppliers" + System.lineSeparator()
- + "** Competing_Companies" + System.lineSeparator()
- + "** Government" + System.lineSeparator()
+ + "** Product_Suppliers" + System.lineSeparator()
+ + "*** Managers" + System.lineSeparator()
+ + "*** Logistics_Warehouse_Staff_of_Suppliers" + System.lineSeparator()
+ + "*** Delivery_Staff_of_Suppliers" + System.lineSeparator()
+ + "** Competing_Companies" + System.lineSeparator()
+ + "** Government" + System.lineSeparator()
+ System.lineSeparator()
- + "left side" + System.lineSeparator()
- + "** Online_Shopping_Company" + System.lineSeparator()
- + "*** Development_Team" + System.lineSeparator()
- + "*** Product_Management" + System.lineSeparator()
- + "*** Customer_Relationship_Manager" + System.lineSeparator()
- + "** Delivery_Partners" + System.lineSeparator()
- + "*** Route_Planners" + System.lineSeparator()
- + "*** Drivers" + System.lineSeparator()
- + "** Logistics_Team" + System.lineSeparator()
- + "*** Logistics_Manager" + System.lineSeparator()
- + "*** Warehouse_Staff" + System.lineSeparator()
- + "** Customers_and_Shoppers" + System.lineSeparator()
- + "*** Shoppers_in_Emergency_Situations" + System.lineSeparator()
- + "*** Others" + System.lineSeparator()
+ + "left side" + System.lineSeparator()
+ + "** Online_Shopping_Company" + System.lineSeparator()
+ + "*** Development_Team" + System.lineSeparator()
+ + "*** Product_Management" + System.lineSeparator()
+ + "*** Customer_Relationship_Manager" + System.lineSeparator()
+ + "** Delivery_Partners" + System.lineSeparator()
+ + "*** Route_Planners" + System.lineSeparator()
+ + "*** Drivers" + System.lineSeparator()
+ + "** Logistics_Team" + System.lineSeparator()
+ + "*** Logistics_Manager" + System.lineSeparator()
+ + "*** Warehouse_Staff" + System.lineSeparator()
+ + "** Customers_and_Shoppers" + System.lineSeparator()
+ + "*** Shoppers_in_Emergency_Situations" + System.lineSeparator()
+ + "*** Others" + System.lineSeparator()
+ System.lineSeparator()
+ System.lineSeparator()
+ "@endmindmap" + System.lineSeparator(), stakeholderDiagram);
@@ -81,28 +87,34 @@ public void canCreateStakeholderDiagramWithMultipleContext() throws IOException
// then
assertEquals("@startmindmap" + System.lineSeparator()
+ System.lineSeparator()
- + "* SameDayDelivery, Context2" + System.lineSeparator()
- + "** Product_Suppliers" + System.lineSeparator()
- + "*** Managers" + System.lineSeparator()
- + "*** Logistics_Warehouse_Staff_of_Suppliers" + System.lineSeparator()
- + "*** Delivery_Staff_of_Suppliers" + System.lineSeparator()
- + "** Competing_Companies" + System.lineSeparator()
- + "** Government" + System.lineSeparator()
+ + "" + System.lineSeparator()
+ System.lineSeparator()
- + "left side" + System.lineSeparator()
- + "** Online_Shopping_Company" + System.lineSeparator()
- + "*** Development_Team" + System.lineSeparator()
- + "*** Product_Management" + System.lineSeparator()
- + "*** Customer_Relationship_Manager" + System.lineSeparator()
- + "** Delivery_Partners" + System.lineSeparator()
- + "*** Route_Planners" + System.lineSeparator()
- + "*** Drivers" + System.lineSeparator()
- + "** Logistics_Team" + System.lineSeparator()
- + "*** Logistics_Manager" + System.lineSeparator()
- + "*** Warehouse_Staff" + System.lineSeparator()
- + "** Customers_and_Shoppers" + System.lineSeparator()
- + "*** Shoppers_in_Emergency_Situations" + System.lineSeparator()
- + "*** Others" + System.lineSeparator()
+ + "* SameDayDelivery, Context2" + System.lineSeparator()
+ + "** Product_Suppliers" + System.lineSeparator()
+ + "*** Managers" + System.lineSeparator()
+ + "*** Logistics_Warehouse_Staff_of_Suppliers" + System.lineSeparator()
+ + "*** Delivery_Staff_of_Suppliers" + System.lineSeparator()
+ + "** Competing_Companies" + System.lineSeparator()
+ + "** Government" + System.lineSeparator()
+ + "" + System.lineSeparator()
+ + "left side" + System.lineSeparator()
+ + "** Online_Shopping_Company" + System.lineSeparator()
+ + "*** Development_Team" + System.lineSeparator()
+ + "*** Product_Management" + System.lineSeparator()
+ + "*** Customer_Relationship_Manager" + System.lineSeparator()
+ + "** Delivery_Partners" + System.lineSeparator()
+ + "*** Route_Planners" + System.lineSeparator()
+ + "*** Drivers" + System.lineSeparator()
+ + "** Logistics_Team" + System.lineSeparator()
+ + "*** Logistics_Manager" + System.lineSeparator()
+ + "*** Warehouse_Staff" + System.lineSeparator()
+ + "** Customers_and_Shoppers" + System.lineSeparator()
+ + "*** Shoppers_in_Emergency_Situations" + System.lineSeparator()
+ + "*** Others" + System.lineSeparator()
+ System.lineSeparator()
+ System.lineSeparator()
+ "@endmindmap" + System.lineSeparator(), stakeholderDiagram);
@@ -118,29 +130,35 @@ public void canCreateStakeholderDiagramWithDefaultContext() throws IOException {
// then
assertEquals("@startmindmap" + System.lineSeparator()
+ + System.lineSeparator()
+ + "" + System.lineSeparator()
+ System.lineSeparator()
+ "* System of Interest" + System.lineSeparator()
- + "** Product_Suppliers" + System.lineSeparator()
- + "*** Managers" + System.lineSeparator()
- + "*** Logistics_Warehouse_Staff_of_Suppliers" + System.lineSeparator()
- + "*** Delivery_Staff_of_Suppliers" + System.lineSeparator()
- + "** Competing_Companies" + System.lineSeparator()
- + "** Government" + System.lineSeparator()
+ + "** Product_Suppliers" + System.lineSeparator()
+ + "*** Managers" + System.lineSeparator()
+ + "*** Logistics_Warehouse_Staff_of_Suppliers" + System.lineSeparator()
+ + "*** Delivery_Staff_of_Suppliers" + System.lineSeparator()
+ + "** Competing_Companies" + System.lineSeparator()
+ + "** Government" + System.lineSeparator()
+ System.lineSeparator()
- + "left side" + System.lineSeparator()
- + "** Online_Shopping_Company" + System.lineSeparator()
- + "*** Development_Team" + System.lineSeparator()
- + "*** Product_Management" + System.lineSeparator()
- + "*** Customer_Relationship_Manager" + System.lineSeparator()
- + "** Delivery_Partners" + System.lineSeparator()
- + "*** Route_Planners" + System.lineSeparator()
- + "*** Drivers" + System.lineSeparator()
- + "** Logistics_Team" + System.lineSeparator()
- + "*** Logistics_Manager" + System.lineSeparator()
- + "*** Warehouse_Staff" + System.lineSeparator()
- + "** Customers_and_Shoppers" + System.lineSeparator()
- + "*** Shoppers_in_Emergency_Situations" + System.lineSeparator()
- + "*** Others" + System.lineSeparator()
+ + "left side" + System.lineSeparator()
+ + "** Online_Shopping_Company" + System.lineSeparator()
+ + "*** Development_Team" + System.lineSeparator()
+ + "*** Product_Management" + System.lineSeparator()
+ + "*** Customer_Relationship_Manager" + System.lineSeparator()
+ + "** Delivery_Partners" + System.lineSeparator()
+ + "*** Route_Planners" + System.lineSeparator()
+ + "*** Drivers" + System.lineSeparator()
+ + "** Logistics_Team" + System.lineSeparator()
+ + "*** Logistics_Manager" + System.lineSeparator()
+ + "*** Warehouse_Staff" + System.lineSeparator()
+ + "** Customers_and_Shoppers" + System.lineSeparator()
+ + "*** Shoppers_in_Emergency_Situations" + System.lineSeparator()
+ + "*** Others" + System.lineSeparator()
+ System.lineSeparator()
+ System.lineSeparator()
+ "@endmindmap" + System.lineSeparator(), stakeholderDiagram);
diff --git a/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/generators/plantuml/PlantUMLUseCaseDiagramCreatorTest.java b/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/generators/plantuml/PlantUMLUseCaseDiagramCreatorTest.java
index c99e7c26..a59f7fbb 100644
--- a/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/generators/plantuml/PlantUMLUseCaseDiagramCreatorTest.java
+++ b/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/generators/plantuml/PlantUMLUseCaseDiagramCreatorTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2023 The Context Mapper Project Team
+ * Copyright 2023-2024 The Context Mapper Project Team
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -58,9 +58,15 @@ public void canCreateUseCaseDiagram() throws IOException {
+ "Actor_1 -- Just_do_something" + System.lineSeparator()
+ System.lineSeparator()
+ "note bottom of (Get_paid_for_car_accident)" + System.lineSeparator()
- + " //Benefit:// A claimant submits a claim and and gets paid from the insurance company." + System.lineSeparator()
- + " //Level:// Summary" + System.lineSeparator()
+ " //Scope:// Insurance company" + System.lineSeparator()
+ + " //Level:// Summary" + System.lineSeparator()
+ + " //Feature:// submit a Claim" + System.lineSeparator()
+ + " //Feature:// verifyExistanceOf Policy" + System.lineSeparator()
+ + " //Feature:// assign an Agent for a Claim" + System.lineSeparator()
+ + " //Feature:// verify Policy" + System.lineSeparator()
+ + " //Feature:// pay Claimant" + System.lineSeparator()
+ + " //Feature:// close Claim" + System.lineSeparator()
+ + " //Benefit:// A claimant submits a claim and and gets paid from the insurance company." + System.lineSeparator()
+ "end note"
+ System.lineSeparator()
+ System.lineSeparator()
@@ -98,9 +104,15 @@ public void canCreateUseCaseDiagramWithSecondaryActors() throws IOException {
+ "Get_paid_for_car_accident -- Actor_2" + System.lineSeparator()
+ System.lineSeparator()
+ "note bottom of (Get_paid_for_car_accident)" + System.lineSeparator()
- + " //Benefit:// A claimant submits a claim and and gets paid from the insurance company." + System.lineSeparator()
- + " //Level:// Summary" + System.lineSeparator()
+ " //Scope:// Insurance company" + System.lineSeparator()
+ + " //Level:// Summary" + System.lineSeparator()
+ + " //Feature:// submit a Claim" + System.lineSeparator()
+ + " //Feature:// verifyExistanceOf Policy" + System.lineSeparator()
+ + " //Feature:// assign an Agent for a Claim" + System.lineSeparator()
+ + " //Feature:// verify Policy" + System.lineSeparator()
+ + " //Feature:// pay Claimant" + System.lineSeparator()
+ + " //Feature:// close Claim" + System.lineSeparator()
+ + " //Benefit:// A claimant submits a claim and and gets paid from the insurance company." + System.lineSeparator()
+ "end note"
+ System.lineSeparator()
+ System.lineSeparator()
@@ -134,11 +146,18 @@ public void canCreateUseCaseDiagramForMixedUseCasesAndUserStories() throws IOExc
+ "Actor_1 -- Just_do_something" + System.lineSeparator()
+ System.lineSeparator()
+ "note bottom of (Get_paid_for_car_accident)" + System.lineSeparator()
- + " //Benefit:// A claimant submits a claim and and gets paid from the insurance company." + System.lineSeparator()
- + " //Level:// Summary" + System.lineSeparator()
+ " //Scope:// Insurance company" + System.lineSeparator()
+ + " //Level:// Summary" + System.lineSeparator()
+ + " //Feature:// submit a Claim" + System.lineSeparator()
+ + " //Feature:// verifyExistanceOf Policy" + System.lineSeparator()
+ + " //Feature:// assign an Agent for a Claim" + System.lineSeparator()
+ + " //Feature:// verify Policy" + System.lineSeparator()
+ + " //Feature:// pay Claimant" + System.lineSeparator()
+ + " //Feature:// close Claim" + System.lineSeparator()
+ + " //Benefit:// A claimant submits a claim and and gets paid from the insurance company." + System.lineSeparator()
+ "end note" + System.lineSeparator()
+ "note bottom of (Just_do_something)" + System.lineSeparator()
+ + " //Feature:// do Nothing" + System.lineSeparator()
+ " //Benefit:// I earn my name" + System.lineSeparator()
+ "end note"
+ System.lineSeparator()
diff --git a/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/generators/plantuml/PlantUMLValueImpactMapDiagramCreatorTest.java b/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/generators/plantuml/PlantUMLValueImpactMapDiagramCreatorTest.java
index 06aa9a44..b6dcd251 100644
--- a/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/generators/plantuml/PlantUMLValueImpactMapDiagramCreatorTest.java
+++ b/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/generators/plantuml/PlantUMLValueImpactMapDiagramCreatorTest.java
@@ -52,6 +52,9 @@ public void canCreateValueImpactMapDiagramDiagramWithoutBoundedContext() throws
+ " .green {" + System.lineSeparator()
+ " BackgroundColor lightgreen" + System.lineSeparator()
+ " }" + System.lineSeparator()
+ + " .yellow {" + System.lineSeparator()
+ + " BackgroundColor gold" + System.lineSeparator()
+ + " }" + System.lineSeparator()
+ " .red {" + System.lineSeparator()
+ " BackgroundColor tomato" + System.lineSeparator()
+ " }" + System.lineSeparator()
@@ -63,10 +66,7 @@ public void canCreateValueImpactMapDiagramDiagramWithoutBoundedContext() throws
+ "System of Interest (SOI);" + System.lineSeparator()
+ "** Drivers" + System.lineSeparator()
+ "***:WorkLifeBalance" + System.lineSeparator()
- + "----" + System.lineSeparator()
- + "Priority HIGH" + System.lineSeparator()
- + "Impact HIGH" + System.lineSeparator()
- + ";" + System.lineSeparator()
+ + "; <>" + System.lineSeparator()
+ "@endmindmap" + System.lineSeparator(), valueImpactMapDiagram);
}
@@ -90,6 +90,9 @@ public void canCreateSimpleValueImpactMapDiagram() throws IOException {
+ " .green {" + System.lineSeparator()
+ " BackgroundColor lightgreen" + System.lineSeparator()
+ " }" + System.lineSeparator()
+ + " .yellow {" + System.lineSeparator()
+ + " BackgroundColor gold" + System.lineSeparator()
+ + " }" + System.lineSeparator()
+ " .red {" + System.lineSeparator()
+ " BackgroundColor tomato" + System.lineSeparator()
+ " }" + System.lineSeparator()
@@ -133,6 +136,9 @@ public void canCreateSimpleValueImpactMapDiagram4ValueCluster() throws IOExcepti
+ " .green {" + System.lineSeparator()
+ " BackgroundColor lightgreen" + System.lineSeparator()
+ " }" + System.lineSeparator()
+ + " .yellow {" + System.lineSeparator()
+ + " BackgroundColor gold" + System.lineSeparator()
+ + " }" + System.lineSeparator()
+ " .red {" + System.lineSeparator()
+ " BackgroundColor tomato" + System.lineSeparator()
+ " }" + System.lineSeparator()
@@ -176,6 +182,9 @@ public void canRespectValuesInValueClusters() throws IOException {
+ " .green {" + System.lineSeparator()
+ " BackgroundColor lightgreen" + System.lineSeparator()
+ " }" + System.lineSeparator()
+ + " .yellow {" + System.lineSeparator()
+ + " BackgroundColor gold" + System.lineSeparator()
+ + " }" + System.lineSeparator()
+ " .red {" + System.lineSeparator()
+ " BackgroundColor tomato" + System.lineSeparator()
+ " }" + System.lineSeparator()
@@ -231,6 +240,9 @@ public void canHandleRecurringStakeholders() throws IOException {
+ " .green {" + System.lineSeparator()
+ " BackgroundColor lightgreen" + System.lineSeparator()
+ " }" + System.lineSeparator()
+ + " .yellow {" + System.lineSeparator()
+ + " BackgroundColor gold" + System.lineSeparator()
+ + " }" + System.lineSeparator()
+ " .red {" + System.lineSeparator()
+ " BackgroundColor tomato" + System.lineSeparator()
+ " }" + System.lineSeparator()
diff --git a/org.contextmapper.dsl.ui/samples/freemarker/csv-files/stakeholders.csv.ftl b/org.contextmapper.dsl.ui/samples/freemarker/csv-files/stakeholders.csv.ftl
index 441e736d..13e60d65 100644
--- a/org.contextmapper.dsl.ui/samples/freemarker/csv-files/stakeholders.csv.ftl
+++ b/org.contextmapper.dsl.ui/samples/freemarker/csv-files/stakeholders.csv.ftl
@@ -2,13 +2,13 @@ Context,Stakeholder Group,Stakeholder,description,influence,interest
<#list stakeholders as stakeholderContainer>
<#assign stakeholderGroups = stakeholderContainer.stakeholders?filter(s -> instanceOf(s, StakeholderGroup))>
<#assign singleStakeholders = stakeholderContainer.stakeholders?filter(s -> instanceOf(s, Stakeholder))>
-<#if stakeholderContainer.contexts?has_content><#assign contextDescription = stakeholderContainer.contexts?map(c -> c.name)?join("; ")><#else><#assign contextDescription = "">#if>
+<#if stakeholderContainer.contexts?has_content><#assign contextDescription = stakeholderContainer.contexts?map(c -> c.name)?join("; ")><#else><#assign contextDescription = "none">#if>
<#list stakeholderGroups as sg>
<#list sg.stakeholders as stakeholder>
${contextDescription},${sg.name},${stakeholder.name},${stakeholder.description!""},${stakeholder.influence!""},${stakeholder.interest!""}
#list>
#list>
<#list singleStakeholders as stakeholder>
-${contextDescription},,${stakeholder.name},${stakeholder.description!""},${stakeholder.influence!""},${stakeholder.interest!""}
+${contextDescription},none,${stakeholder.name},${stakeholder.description!""},${stakeholder.influence!""},${stakeholder.interest!""}
#list>
#list>
\ No newline at end of file
diff --git a/org.contextmapper.dsl.ui/samples/freemarker/csv-files/value-registers.csv.ftl b/org.contextmapper.dsl.ui/samples/freemarker/csv-files/value-registers.csv.ftl
index cc185956..1cfb495b 100644
--- a/org.contextmapper.dsl.ui/samples/freemarker/csv-files/value-registers.csv.ftl
+++ b/org.contextmapper.dsl.ui/samples/freemarker/csv-files/value-registers.csv.ftl
@@ -1,8 +1,8 @@
-Value Register,Context,Value Cluster,Core Value,Demonstrators,Related Values,Opposing Values,Value,isCore,Demonstrators,Related Values,Opposing Values,Stakeholder(s),Priority,Impact,Consequence Type,Consequence,Action Type, Action
+Value Register,Context,Value Cluster,Core Value,Demonstrators,Related Values,Opposing Values,Value,coreValue,Demonstrators,Related Values,Opposing Values,Stakeholder(s),Priority,Impact,Consequence Type,Consequence,Action Type, Action
<#list valueRegisters as valueRegister>
<#if valueRegister.context?has_content><#assign valueRegisterContext = valueRegister.context.name!""><#else><#assign valueRegisterContext = "">#if>
<#list valueRegister.valueClusters as valueCluster>
-<#if valueCluster.coreValue7000?has_content><#assign valueClusterCoreValue = valueCluster.coreValue7000!""><#else><#assign valueClusterCoreValue = valueCluster.coreValue!"">#if>
+<#if valueCluster.coreValue7000?has_content && valueCluster.coreValue7000 != "UNDEFINED"><#assign valueClusterCoreValue = valueCluster.coreValue7000><#else><#assign valueClusterCoreValue = valueCluster.coreValue!"UNDEFINED">#if>
<#if valueCluster.demonstrators?has_content><#assign valueClusterDemonstrators = valueCluster.demonstrators?join("; ")><#else><#assign valueClusterDemonstrators = "">#if>
<#if valueCluster.relatedValues?has_content><#assign valueClusterRelatedValues = valueCluster.relatedValues?join("; ")><#else><#assign valueClusterRelatedValues = "">#if>
<#if valueCluster.opposingValues?has_content><#assign valueClusterOpposingValues = valueCluster.opposingValues?join("; ")><#else><#assign valueClusterOpposingValues = "">#if>
@@ -32,17 +32,17 @@ ${valueRegister.name},${valueRegisterContext},${valueCluster.name},${valueCluste
<#if stakeholderElicitation.consequences?has_content>
<#list stakeholderElicitation.consequences as consequence>
<#if consequence.action?has_content>
-${valueRegister.name},${valueRegisterContext},${valueCluster.name},${valueClusterCoreValue},${valueClusterDemonstrators},${valueClusterRelatedValues},${valueClusterOpposingValues},${value.name},${value.isCore!""!""},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},${stakeholderElicitation.stakeholder.name},${stakeholderElicitation.priority!""},${stakeholderElicitation.impact!""},${consequence.type!""},${consequence.consequence},${consequence.action.type!""},${consequence.action.action!""}
+${valueRegister.name},${valueRegisterContext},${valueCluster.name},${valueClusterCoreValue},${valueClusterDemonstrators},${valueClusterRelatedValues},${valueClusterOpposingValues},${value.name},${value.coreValue?string("yes", "no")},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},${stakeholderElicitation.stakeholder.name},${stakeholderElicitation.priority!""},${stakeholderElicitation.impact!""},${consequence.type!""},${consequence.consequence},${consequence.action.type!""},${consequence.action.action!""}
<#else>
-${valueRegister.name},${valueRegisterContext},${valueCluster.name},${valueClusterCoreValue},${valueClusterDemonstrators},${valueClusterRelatedValues},${valueClusterOpposingValues},${value.name},${value.isCore!""},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},${stakeholderElicitation.stakeholder.name},${stakeholderElicitation.priority!""},${stakeholderElicitation.impact!""},${consequence.type!""},${consequence.consequence},,
+${valueRegister.name},${valueRegisterContext},${valueCluster.name},${valueClusterCoreValue},${valueClusterDemonstrators},${valueClusterRelatedValues},${valueClusterOpposingValues},${value.name},${value.coreValue?string("yes", "no")},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},${stakeholderElicitation.stakeholder.name},${stakeholderElicitation.priority!""},${stakeholderElicitation.impact!""},${consequence.type!""},${consequence.consequence},,
#if>
#list>
<#else>
-${valueRegister.name},${valueRegisterContext},${valueCluster.name},${valueClusterCoreValue},${valueClusterDemonstrators},${valueClusterRelatedValues},${valueClusterOpposingValues},${value.name},${value.isCore!""},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},${stakeholderElicitation.stakeholder.name},${stakeholderElicitation.priority!""},${stakeholderElicitation.impact!""},,,,
+${valueRegister.name},${valueRegisterContext},${valueCluster.name},${valueClusterCoreValue},${valueClusterDemonstrators},${valueClusterRelatedValues},${valueClusterOpposingValues},${value.name},${value.coreValue?string("yes", "no")},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},${stakeholderElicitation.stakeholder.name},${stakeholderElicitation.priority!""},${stakeholderElicitation.impact!""},,,,
#if>
#list>
<#else>
-${valueRegister.name},${valueRegisterContext},${valueCluster.name},${valueClusterCoreValue},${valueClusterDemonstrators},${valueClusterRelatedValues},${valueClusterOpposingValues},${value.name},${value.isCore!""},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},,,,,,,,
+${valueRegister.name},${valueRegisterContext},${valueCluster.name},${valueClusterCoreValue},${valueClusterDemonstrators},${valueClusterRelatedValues},${valueClusterOpposingValues},${value.name},${value.coreValue?string("yes", "no")},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},,,,,,,,
#if>
#list>
#list>
@@ -55,17 +55,17 @@ ${valueRegister.name},${valueRegisterContext},${valueCluster.name},${valueCluste
<#if stakeholderElicitation.consequences?has_content>
<#list stakeholderElicitation.consequences as consequence>
<#if consequence.action?has_content>
-${valueRegister.name},${valueRegisterContext},,,,,,${value.name},${value.isCore!""},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},${stakeholderElicitation.stakeholder.name},${stakeholderElicitation.priority!""},${stakeholderElicitation.impact!""},${consequence.type!""},${consequence.consequence},${consequence.action.type!""},${consequence.action.action!""}
+${valueRegister.name},${valueRegisterContext},,,,,,${value.name},${value.coreValue?string("yes", "no")},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},${stakeholderElicitation.stakeholder.name},${stakeholderElicitation.priority!""},${stakeholderElicitation.impact!""},${consequence.type!""},${consequence.consequence},${consequence.action.type!""},${consequence.action.action!""}
<#else>
-${valueRegister.name},${valueRegisterContext},,,,,,${value.name},${value.isCore!""},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},${stakeholderElicitation.stakeholder.name},${stakeholderElicitation.priority!""},${stakeholderElicitation.impact!""},${consequence.type!""},${consequence.consequence},,
+${valueRegister.name},${valueRegisterContext},,,,,,${value.name},${value.coreValue?string("yes", "no")},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},${stakeholderElicitation.stakeholder.name},${stakeholderElicitation.priority!""},${stakeholderElicitation.impact!""},${consequence.type!""},${consequence.consequence},,
#if>
#list>
<#else>
-${valueRegister.name},${valueRegisterContext},,,,,,${value.name},${value.isCore!""},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},${stakeholderElicitation.stakeholder.name},${stakeholderElicitation.priority!""},${stakeholderElicitation.impact!""},,,,
+${valueRegister.name},${valueRegisterContext},,,,,,${value.name},${value.coreValue?string("yes", "no")},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},${stakeholderElicitation.stakeholder.name},${stakeholderElicitation.priority!""},${stakeholderElicitation.impact!""},,,,
#if>
#list>
<#else>
-${valueRegister.name},${valueRegisterContext},,,,,,${value.name},${value.isCore!""},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},,,,,,,,
+${valueRegister.name},${valueRegisterContext},,,,,,${value.name},${value.coreValue?string("yes", "no")},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},,,,,,,,
#if>
#list>
#list>
\ No newline at end of file
diff --git a/org.contextmapper.dsl/src/org/contextmapper/dsl/ContextMappingDSL.xtext b/org.contextmapper.dsl/src/org/contextmapper/dsl/ContextMappingDSL.xtext
index cebd031b..28786cb6 100644
--- a/org.contextmapper.dsl/src/org/contextmapper/dsl/ContextMappingDSL.xtext
+++ b/org.contextmapper.dsl/src/org/contextmapper/dsl/ContextMappingDSL.xtext
@@ -532,23 +532,23 @@ enum Evolution :
;
enum INFLUENCE :
- HIGH | MEDIUM | LOW
+ UNDEFINED | HIGH | MEDIUM | LOW
;
enum INTEREST :
- HIGH | MEDIUM | LOW
+ UNDEFINED | HIGH | MEDIUM | LOW
;
enum PRIORITY:
- HIGH | MEDIUM | LOW
+ UNDEFINED | HIGH | MEDIUM | LOW
;
enum IMPACT:
- HIGH | MEDIUM | LOW
+ UNDEFINED | HIGH | MEDIUM | LOW
;
enum CoreValue:
- AUTONOMY | CARE | CONTROL | FAIRNESS | INCLUSIVENESS | INNOVATION | PERFECTION | PRIVACY | RESPECT | SUSTAINABILITY | TRANSPARENCY | TRUST
+ UNDEFINED | AUTONOMY | CARE | CONTROL | FAIRNESS | INCLUSIVENESS | INNOVATION | PERFECTION | PRIVACY | RESPECT | SUSTAINABILITY | TRANSPARENCY | TRUST
;
// define terminals
diff --git a/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/PlantUMLGenerator.java b/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/PlantUMLGenerator.java
index 00ab9f8f..18a53efc 100644
--- a/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/PlantUMLGenerator.java
+++ b/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/PlantUMLGenerator.java
@@ -27,6 +27,7 @@
import org.contextmapper.dsl.contextMappingDSL.Stakeholders;
import org.contextmapper.dsl.contextMappingDSL.UseCase;
import org.contextmapper.dsl.contextMappingDSL.UserRequirement;
+import org.contextmapper.dsl.contextMappingDSL.ValueElicitation;
import org.contextmapper.dsl.contextMappingDSL.ValueRegister;
import org.contextmapper.dsl.generator.exception.GeneratorInputException;
import org.contextmapper.dsl.generator.plantuml.PlantUMLAggregateClassDiagramCreator;
@@ -40,6 +41,7 @@
import org.contextmapper.dsl.generator.plantuml.PlantUMLUseCaseDiagramCreator;
import org.contextmapper.dsl.generator.plantuml.PlantUMLUseCaseInteractionsSequenceDiagramCreator;
import org.contextmapper.dsl.generator.plantuml.PlantUMLValueImpactMapGenerator;
+import org.contextmapper.tactic.dsl.tacticdsl.ServiceOperation;
import org.contextmapper.tactic.dsl.tacticdsl.StateTransition;
import org.eclipse.emf.common.util.URI;
import org.eclipse.xtext.EcoreUtil2;
@@ -84,7 +86,8 @@ private void generateStakeholderDiagrams(ContextMappingModel model, IFileSystemA
private void generateValueImpactMapsForValueRegisters(ContextMappingModel model, IFileSystemAccess2 fsa,
String fileName) {
for (ValueRegister valueRegister : model.getValueRegisters()) {
- if (!(valueRegister.getValueClusters().isEmpty() && valueRegister.getValues().isEmpty())) {
+ if (!(valueRegister.getValueClusters().isEmpty() && valueRegister.getValues().isEmpty())
+ && !EcoreUtil2.eAllOfType(valueRegister, ValueElicitation.class).isEmpty()) {
fsa.generateFile(
fileName + "_ValueRegister_" + valueRegister.getName() + "_Value-Impact-Map" + "."
+ PLANT_UML_FILE_EXT,
diff --git a/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/plantuml/PlantUMLStakeholderMapGenerator.java b/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/plantuml/PlantUMLStakeholderMapGenerator.java
index 99805f94..1ba8251f 100644
--- a/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/plantuml/PlantUMLStakeholderMapGenerator.java
+++ b/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/plantuml/PlantUMLStakeholderMapGenerator.java
@@ -38,6 +38,8 @@ public class PlantUMLStakeholderMapGenerator extends AbstractPlantUMLMindMapDiag
protected void printDiagramContent(final Stakeholders stakeholders) {
initData(stakeholders);
+ printStyles();
+
sb.append(STAR).append(" ").append(getStakeholderDiagramContextName(stakeholders.getContexts()));
linebreak();
printStakeholders(right);
@@ -47,6 +49,19 @@ protected void printDiagramContent(final Stakeholders stakeholders) {
printStakeholders(left);
}
+ private void printStyles() {
+ sb.append("");
+ linebreak(2);
+ }
+
public String getStakeholderDiagramContextName(final List bcs) {
if (bcs != null && !bcs.isEmpty())
return String.join(", ", bcs.stream().map(bc -> bc.getName()).collect(Collectors.toList()));
@@ -58,19 +73,32 @@ private void printStakeholders(final List stakeholders) {
if (s instanceof StakeholderGroup) {
printStakeholderGroup((StakeholderGroup) s);
} else if (s instanceof Stakeholder) {
- sb.append(STAR).append(STAR).append(" " + s.getName());
- linebreak();
+ printGeneralStakeholderLine(2, s.getName(), ((Stakeholder) s).getDescription());
}
}
}
private void printStakeholderGroup(final StakeholderGroup group) {
- sb.append(STAR).append(STAR).append(" ").append(group.getName());
- linebreak();
+ printGeneralStakeholderLine(2, group.getName(), null);
for (Stakeholder s : group.getStakeholders()) {
- sb.append(STAR).append(STAR).append(STAR).append(" ").append(s.getName());
+ printGeneralStakeholderLine(3, s.getName(), s.getDescription());
+ }
+ }
+
+ private void printGeneralStakeholderLine(final int level, final String name, final String description) {
+ for (int i = 0; i < level; i++) {
+ sb.append(STAR);
+ }
+ if (description != null && !"".equals(description)) {
+ sb.append(":").append(name).append("");
+ linebreak();
+ sb.append("----");
linebreak();
+ sb.append(description).append(";");
+ } else {
+ sb.append(" ").append(name).append("");
}
+ linebreak();
}
private void initData(final Stakeholders stakeholders) {
diff --git a/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/plantuml/PlantUMLUseCaseDiagramCreator.java b/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/plantuml/PlantUMLUseCaseDiagramCreator.java
index f318dbba..820e62a7 100644
--- a/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/plantuml/PlantUMLUseCaseDiagramCreator.java
+++ b/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/plantuml/PlantUMLUseCaseDiagramCreator.java
@@ -15,12 +15,14 @@
*/
package org.contextmapper.dsl.generator.plantuml;
+import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.TreeSet;
import org.contextmapper.dsl.contextMappingDSL.ContextMappingModel;
+import org.contextmapper.dsl.contextMappingDSL.Feature;
import org.contextmapper.dsl.contextMappingDSL.UseCase;
import org.contextmapper.dsl.contextMappingDSL.UserRequirement;
@@ -89,7 +91,7 @@ private void printNotes(final List userRequirements) {
}
private void printNoteIfAvailable(final UserRequirement requirement) {
- final Set lines = new TreeSet<>();
+ final List lines = new ArrayList<>();
if (requirement instanceof UseCase && ((UseCase) requirement).getScope() != null
&& !"".equals(((UseCase) requirement).getScope())) {
lines.add("//Scope:// " + ((UseCase) requirement).getScope());
@@ -98,6 +100,9 @@ private void printNoteIfAvailable(final UserRequirement requirement) {
&& !"".equals(((UseCase) requirement).getLevel())) {
lines.add("//Level:// " + ((UseCase) requirement).getLevel());
}
+ for (Feature feature : requirement.getFeatures()) {
+ lines.add("//Feature:// " + getFeatureString(feature));
+ }
if (requirement.getBenefit() != null && !"".equals(requirement.getBenefit())) {
lines.add("//Benefit:// " + requirement.getBenefit());
}
@@ -113,6 +118,31 @@ private void printNoteIfAvailable(final UserRequirement requirement) {
}
}
+ private String getFeatureString(final Feature feature) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(feature.getVerb());
+ sb.append(" ");
+ if (feature.getEntityArticle() != null && !"".equals(feature.getEntityArticle())) {
+ sb.append(feature.getEntityArticle());
+ sb.append(" ");
+ }
+ sb.append(feature.getEntity());
+ if (feature.getContainerEntity() != null && !"".equals(feature.getContainerEntity())) {
+ sb.append(" ");
+ if (feature.getContainerEntityPreposition() != null
+ && !"".equals(feature.getContainerEntityPreposition())) {
+ sb.append(feature.getContainerEntityPreposition());
+ sb.append(" ");
+ }
+ if (feature.getContainerEntityArticle() != null && !"".equals(feature.getContainerEntityArticle())) {
+ sb.append(feature.getContainerEntityArticle());
+ sb.append(" ");
+ }
+ sb.append(feature.getContainerEntity());
+ }
+ return sb.toString();
+ }
+
private void prepareData(final List userRequirements) {
initializeDataStructures();
for (UserRequirement req : userRequirements) {
diff --git a/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/plantuml/value_impact_mapping/value-impact-map-puml.ftl b/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/plantuml/value_impact_mapping/value-impact-map-puml.ftl
index 35bae0a9..e5d3de01 100644
--- a/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/plantuml/value_impact_mapping/value-impact-map-puml.ftl
+++ b/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/plantuml/value_impact_mapping/value-impact-map-puml.ftl
@@ -9,6 +9,9 @@ mindmapDiagram {
.green {
BackgroundColor lightgreen
}
+ .yellow {
+ BackgroundColor gold
+ }
.red {
BackgroundColor tomato
}
@@ -28,12 +31,12 @@ ${stakeholder.description};
#if>
<#list stakeholder.values as value>
***:${value.name}
- <#if value.priority?has_content || value.impact?has_content>
+ <#if (value.priority?has_content && value.priority != "UNDEFINED") || (value.impact?has_content && value.impact != "UNDEFINED")>
----
- <#if value.priority?has_content>
+ <#if value.priority?has_content && value.priority != "UNDEFINED">
Priority ${value.priority}
#if>
- <#if value.impact?has_content>
+ <#if value.impact?has_content && value.impact != "UNDEFINED">
Impact ${value.impact}
#if>
#if>
@@ -47,7 +50,7 @@ Impact ${value.impact}
-- <#if value.consequenceType == "GOOD">Positive Consequences<#elseif value.consequenceType == "BAD">Negative Consequences<#else>Consequences#if> --
${value.consequence}
#if>
-;<#if value.consequenceType == "GOOD"> <><#elseif value.consequenceType == "BAD"> <>#if>
+;<#if value.consequenceType == "GOOD"> <><#elseif value.consequenceType == "BAD"> <><#else> <>#if>
<#list value.mitigationActions as mitigationAction>
**** ${mitigationAction.actionType}: ${mitigationAction.action}
#list>
diff --git a/org.contextmapper.dsl/src/org/contextmapper/dsl/refactoring/DeriveSubdomainFromUserRequirements.java b/org.contextmapper.dsl/src/org/contextmapper/dsl/refactoring/DeriveSubdomainFromUserRequirements.java
index 4c7f65b7..e76ad2a3 100644
--- a/org.contextmapper.dsl/src/org/contextmapper/dsl/refactoring/DeriveSubdomainFromUserRequirements.java
+++ b/org.contextmapper.dsl/src/org/contextmapper/dsl/refactoring/DeriveSubdomainFromUserRequirements.java
@@ -21,6 +21,7 @@
import java.util.Set;
import java.util.stream.Collectors;
+import org.contextmapper.dsl.cml.XtextIdHelper;
import org.contextmapper.dsl.contextMappingDSL.ContextMappingDSLFactory;
import org.contextmapper.dsl.contextMappingDSL.Domain;
import org.contextmapper.dsl.contextMappingDSL.Feature;
@@ -45,6 +46,8 @@ public class DeriveSubdomainFromUserRequirements extends AbstractRefactoring imp
private Set userRequiremendIds = Sets.newHashSet();
private String domainName;
private String subdomainName;
+
+ private XtextIdHelper idHelper = new XtextIdHelper();
public DeriveSubdomainFromUserRequirements(String domainName, String subdomainName, Set userRequirements) {
this.domainName = domainName;
@@ -102,7 +105,7 @@ private void deriveSubdomainEntities4Features(Subdomain subdomain, String urName
String entityName = createEntityIfNotExisting(feature.getEntity(), subdomain, feature.getEntityAttributes());
// create the service
- String serviceName = urName.substring(0, 1).toUpperCase() + urName.substring(1) + "Service";
+ String serviceName = idHelper.convertStringToXtextID(urName.substring(0, 1).toUpperCase() + urName.substring(1) + "Service");
Optional alreadyExistingService = subdomain.getServices().stream().filter(s -> serviceName.equals(s.getName())).findFirst();
Service service;
if (!alreadyExistingService.isPresent()) {
@@ -112,7 +115,7 @@ private void deriveSubdomainEntities4Features(Subdomain subdomain, String urName
service = alreadyExistingService.get();
}
- String operationName = feature.getVerb().replace(" ", "_") + entityName;
+ String operationName = idHelper.convertStringToXtextID(feature.getVerb().replace(" ", "_") + entityName);
Optional alreadyExistingServiceOperation = service.getOperations().stream().filter(o -> operationName.equals(o.getName())).findFirst();
if (!alreadyExistingServiceOperation.isPresent())
addElementToEList(service.getOperations(), createServiceOperation(operationName));
@@ -160,7 +163,7 @@ private String createEntityIfNotExisting(String entity, Subdomain subdomain, Lis
}
private String mapEntityName(String entityName) {
- return entityName.trim().replace(" ", "_");
+ return idHelper.convertStringToXtextID(entityName.trim());
}
private void createEntityAttributes(Entity entity, List attributeNames) {
@@ -183,7 +186,7 @@ private void createEntityAttributes(Entity entity, List attributeNames)
private String encodeAttrName(String originalName) {
String name = originalName.trim();
name = name.substring(0, 1).toLowerCase() + name.substring(1);
- return name;
+ return new XtextIdHelper().convertStringToXtextID(name);
}
private Service createService(String serviceName, String entityName, String verb) {