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 stakeholderContainer.contexts?has_content><#assign contextDescription = stakeholderContainer.contexts?map(c -> c.name)?join("; ")><#else><#assign contextDescription = "none"> <#list stakeholderGroups as sg> <#list sg.stakeholders as stakeholder> ${contextDescription},${sg.name},${stakeholder.name},${stakeholder.description!""},${stakeholder.influence!""},${stakeholder.interest!""} <#list singleStakeholders as stakeholder> -${contextDescription},,${stakeholder.name},${stakeholder.description!""},${stakeholder.influence!""},${stakeholder.interest!""} +${contextDescription},none,${stakeholder.name},${stakeholder.description!""},${stakeholder.influence!""},${stakeholder.interest!""} \ 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 = ""> <#list valueRegister.valueClusters as valueCluster> -<#if valueCluster.coreValue7000?has_content><#assign valueClusterCoreValue = valueCluster.coreValue7000!""><#else><#assign valueClusterCoreValue = valueCluster.coreValue!""> +<#if valueCluster.coreValue7000?has_content && valueCluster.coreValue7000 != "UNDEFINED"><#assign valueClusterCoreValue = valueCluster.coreValue7000><#else><#assign valueClusterCoreValue = valueCluster.coreValue!"UNDEFINED"> <#if valueCluster.demonstrators?has_content><#assign valueClusterDemonstrators = valueCluster.demonstrators?join("; ")><#else><#assign valueClusterDemonstrators = ""> <#if valueCluster.relatedValues?has_content><#assign valueClusterRelatedValues = valueCluster.relatedValues?join("; ")><#else><#assign valueClusterRelatedValues = ""> <#if valueCluster.opposingValues?has_content><#assign valueClusterOpposingValues = valueCluster.opposingValues?join("; ")><#else><#assign valueClusterOpposingValues = ""> @@ -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},, <#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!""},,,, <#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},,,,,,,, @@ -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},, <#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!""},,,, <#else> -${valueRegister.name},${valueRegisterContext},,,,,,${value.name},${value.isCore!""},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},,,,,,,, +${valueRegister.name},${valueRegisterContext},,,,,,${value.name},${value.coreValue?string("yes", "no")},${valueDemonstrators},${valueRelatedValues},${valueOpposingValues},,,,,,,, \ 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}; <#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 value.impact?has_content> + <#if value.impact?has_content && value.impact != "UNDEFINED"> Impact ${value.impact} @@ -47,7 +50,7 @@ Impact ${value.impact} -- <#if value.consequenceType == "GOOD">Positive Consequences<#elseif value.consequenceType == "BAD">Negative Consequences<#else>Consequences -- ${value.consequence} -;<#if value.consequenceType == "GOOD"> <><#elseif value.consequenceType == "BAD"> <> +;<#if value.consequenceType == "GOOD"> <><#elseif value.consequenceType == "BAD"> <><#else> <> <#list value.mitigationActions as mitigationAction> **** ${mitigationAction.actionType}: ${mitigationAction.action} 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) {