Skip to content
Snippets Groups Projects
Commit 6c17a2d2 authored by kon0379's avatar kon0379
Browse files

Merge branch 'develop' into 'main'

merge: develop into main

See merge request !15
parents d151f3fd dec96800
Branches
1 merge request!15merge: develop into main
Pipeline #1032 passed with stages
in 8 minutes and 8 seconds
Showing
with 238 additions and 491 deletions
......@@ -2,4 +2,5 @@ bin/
obj/
/packages/
riderModule.iml
/_ReSharper.Caches/
\ No newline at end of file
/_ReSharper.Caches/
.idea/
......@@ -3,6 +3,8 @@ image: microsoft/dotnet:7.0
stages:
- build
- test
- sonarqube-check
- sonarqube-vulnerability-report
- deploy
variables:
......@@ -25,7 +27,7 @@ unit-tests-development:
only:
- develop
script:
- 'sudo dotnet test --test-adapter-path:. --logger:"junit;LogFilePath=..\artifacts\{assembly}-test-result.xml;MethodFormat=Class;FailureBodyFormat=Verbose"'
- 'dotnet test --test-adapter-path:. --logger:"junit;LogFilePath=..\artifacts\{assembly}-test-result.xml;MethodFormat=Class;FailureBodyFormat=Verbose"'
artifacts:
when: always
paths:
......@@ -49,7 +51,7 @@ deploy-development:
environment:
name: development
needs:
- unit-tests-development
- sonarqube-vulnerability-report
build-production:
stage: build
......@@ -65,7 +67,7 @@ unit-tests-production:
only:
- main
script:
- 'sudo dotnet test --test-adapter-path:. --logger:"junit;LogFilePath=..\artifacts\{assembly}-test-result.xml;MethodFormat=Class;FailureBodyFormat=Verbose"'
- 'dotnet test --test-adapter-path:. --logger:"junit;LogFilePath=..\artifacts\{assembly}-test-result.xml;MethodFormat=Class;FailureBodyFormat=Verbose"'
artifacts:
when: always
paths:
......@@ -89,4 +91,50 @@ deploy-production:
environment:
name: production
needs:
- unit-tests-production
- sonarqube-vulnerability-report
sonarqube-check:
stage: sonarqube-check
image: mcr.microsoft.com/dotnet/sdk:7.0
variables:
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # Defines the location of the analysis task cache
GIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis task
cache:
key: "${CI_JOB_NAME}"
paths:
- .sonar/cache
script:
- "dotnet sonarscanner begin /k:\"kon0379DiplomaThesis\" /d:sonar.token=\"$SONAR_TOKEN\" /d:\"sonar.host.url=$SONAR_HOST_URL\" /d:sonar.cs.vscoveragexml.reportsPaths=coverage.xml"
- sudo dotnet build --no-incremental
- sudo /home/fei/kon0379/.dotnet/tools/dotnet-coverage collect "dotnet test" -f xml -o "coverage.xml"
- "dotnet sonarscanner end /d:sonar.token=\"$SONAR_TOKEN\""
allow_failure: true
only:
- merge_requests
- main
- develop
needs:
- job: unit-tests-production
optional: true
- job: unit-tests-development
optional: true
environment:
name: qa
sonarqube-vulnerability-report:
stage: sonarqube-vulnerability-report
script:
- 'curl -u "${SONAR_TOKEN}:" "${SONAR_HOST_URL}/api/issues/gitlab_sast_export?projectKey=kon0379DiplomaThesis&branch=${CI_COMMIT_BRANCH}&pullRequest=${CI_MERGE_REQUEST_IID}" -o gl-sast-sonar-report.json'
allow_failure: true
only:
- merge_requests
- main
- develop
artifacts:
expire_in: 1 day
reports:
sast: gl-sast-sonar-report.json
needs:
- sonarqube-check
environment:
name: qa
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoGeneratedRunConfigurationManager">
<projectFile>ConsoleApp1/ConsoleApp1.csproj</projectFile>
</component>
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="38df7b5a-e819-45ed-9bf5-eb7ce2106e88" name="Changes" comment="" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="MetaFilesCheckinStateConfiguration" checkMetaFiles="true" />
<component name="ProjectColorInfo"><![CDATA[{
"associatedIndex": 4
}]]></component>
<component name="ProjectId" id="2WL74YsffR7PLpZQhzToFOyb7sj" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectViewState">
<option name="autoscrollFromSource" value="true" />
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"WebServerToolWindowFactoryState": "false",
"git-widget-placeholder": "main",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
"node.js.selected.package.tslint": "(autodetect)",
"nodejs_package_manager_path": "npm",
"settings.editor.selected.configurable": "preferences.pluginManager",
"vue.rearranger.settings.migration": "true"
},
"keyToStringList": {
"rider.external.source.directories": [
"C:\\Users\\root\\AppData\\Roaming\\JetBrains\\Rider2023.2\\resharper-host\\DecompilerCache",
"C:\\Users\\root\\AppData\\Roaming\\JetBrains\\Rider2023.2\\resharper-host\\SourcesCache",
"C:\\Users\\root\\AppData\\Local\\Symbols\\src"
]
}
}]]></component>
<component name="RunManager">
<configuration name="ConsoleApp1" type="DotNetProject" factoryName=".NET Project">
<option name="EXE_PATH" value="" />
<option name="PROGRAM_PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="PASS_PARENT_ENVS" value="1" />
<option name="USE_EXTERNAL_CONSOLE" value="0" />
<option name="USE_MONO" value="0" />
<option name="RUNTIME_ARGUMENTS" value="" />
<option name="PROJECT_PATH" value="$PROJECT_DIR$/ConsoleApp1/ConsoleApp1.csproj" />
<option name="PROJECT_EXE_PATH_TRACKING" value="1" />
<option name="PROJECT_ARGUMENTS_TRACKING" value="1" />
<option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="1" />
<option name="PROJECT_KIND" value="DotNetCore" />
<option name="PROJECT_TFM" value="" />
<method v="2">
<option name="Build" />
</method>
</configuration>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="38df7b5a-e819-45ed-9bf5-eb7ce2106e88" name="Changes" comment="" />
<created>1696499815256</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1696499815256</updated>
<workItem from="1696499816476" duration="339000" />
</task>
<task id="LOCAL-00001" summary="Add project files">
<option name="closed" value="true" />
<created>1696499974654</created>
<option name="number" value="00001" />
<option name="presentableId" value="LOCAL-00001" />
<option name="project" value="LOCAL" />
<updated>1696499974654</updated>
</task>
<task id="LOCAL-00002" summary="Rename solution">
<option name="closed" value="true" />
<created>1696500005181</created>
<option name="number" value="00002" />
<option name="presentableId" value="LOCAL-00002" />
<option name="project" value="LOCAL" />
<updated>1696500005181</updated>
</task>
<option name="localTasksCounter" value="3" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
<component name="UnityCheckinConfiguration" checkUnsavedScenes="true" />
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State />
</value>
</entry>
</map>
</option>
</component>
<component name="VcsManagerConfiguration">
<option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="true" />
<MESSAGE value="Add project files" />
<MESSAGE value="Rename solution" />
<option name="LAST_COMMIT_MESSAGE" value="Rename solution" />
<option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="true" />
</component>
</project>
\ No newline at end of file
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/modules.xml
/projectSettingsUpdater.xml
/.idea.CodeParser.iml
/contentModel.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
CodeToXMI
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ANTLRGenerationPreferences">
<option name="perGrammarGenerationSettings">
<list>
<PerGrammarGenerationSettings>
<option name="fileName" value="$PROJECT_DIR$/LanguageRecogniser/Cpp/CPP14Parser.g4" />
<option name="autoGen" value="true" />
<option name="outputDir" value="/gen" />
<option name="libDir" value="" />
<option name="encoding" value="" />
<option name="pkg" value="" />
<option name="language" value="CSharp" />
<option name="generateVisitor" value="true" />
</PerGrammarGenerationSettings>
</list>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
# This is a generated file. Not intended for manual editing.
version: "3"
services:
codeToXMI_dev:
build:
context: "/Users/jakubkonvicka/RiderProjects/diplomathesis"
dockerfile: "./WebAPI/Dockerfile"
target: "base"
command: []
entrypoint:
- "dotnet"
- "/app/bin/Debug/net7.0/WebAPI.dll"
environment:
DOTNET_USE_POLLING_FILE_WATCHER: "true"
image: "webapi:dev"
ports: []
volumes:
- "/Users/jakubkonvicka/.nuget/packages:/root/.nuget/packages"
- "/Users/jakubkonvicka/RiderProjects/diplomathesis/WebAPI:/app:rw"
- "/Users/jakubkonvicka/RiderProjects/diplomathesis:/src:rw"
working_dir: "/app"
......@@ -2,8 +2,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LanguageRecogniser", "LanguageRecogniser\LanguageRecogniser.csproj", "{2BD73347-D038-4F3F-B501-3A03E370A039}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApp1", "ConsoleApp1\ConsoleApp1.csproj", "{F1BD59D1-4426-41A6-9124-29FBEFDF02B8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiagramBuilder", "DiagramBuilder\DiagramBuilder.csproj", "{6A820208-ABA7-4998-B1A9-F35F55712D54}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Database", "Database\Database.csproj", "{69FC607B-18F4-407B-B9A1-22F7C9961A0B}"
......@@ -22,10 +20,6 @@ Global
{2BD73347-D038-4F3F-B501-3A03E370A039}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2BD73347-D038-4F3F-B501-3A03E370A039}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2BD73347-D038-4F3F-B501-3A03E370A039}.Release|Any CPU.Build.0 = Release|Any CPU
{F1BD59D1-4426-41A6-9124-29FBEFDF02B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F1BD59D1-4426-41A6-9124-29FBEFDF02B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F1BD59D1-4426-41A6-9124-29FBEFDF02B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F1BD59D1-4426-41A6-9124-29FBEFDF02B8}.Release|Any CPU.Build.0 = Release|Any CPU
{6A820208-ABA7-4998-B1A9-F35F55712D54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6A820208-ABA7-4998-B1A9-F35F55712D54}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6A820208-ABA7-4998-B1A9-F35F55712D54}.Release|Any CPU.ActiveCfg = Release|Any CPU
......
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/Environment/Hierarchy/Build/BuildTool/CustomBuildToolPath/@EntryValue">/usr/local/share/dotnet/sdk/7.0.404/MSBuild.dll</s:String>
<s:Int64 x:Key="/Default/Environment/Hierarchy/Build/BuildTool/MsbuildVersion/@EntryValue">1114112</s:Int64>
<s:String x:Key="/Default/Environment/Highlighting/HighlightingSourceSnapshotLocation/@EntryValue">/Users/jakubkonvicka/Library/Caches/JetBrains/Rider2023.3/resharper-host/temp/Rider/vAny/CoverageData/_CodeToXMI.401400098/Snapshot/snapshot.utdcvr</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=7191ef50_002Dfb5e_002D4366_002D876f_002D7faeb1ecbf31/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="BuildEmptyDiagram" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=1172169d_002D8cd5_002D4c97_002D94b5_002D78b35c14dd26/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="BuildActivityDiagramWithDecisionsAndActions #2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildActivityDiagramWithDecisionsAndActions&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=2d2ab9f7_002Dd90c_002D41dc_002D8955_002D125aee8ae064/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="ListAllEmpty" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.WebApiTests&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=33cb20c1_002D7095_002D4c53_002Daff8_002Dbc67f6869c16/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="BuildActivityDiagramWithDecisionsAndActions" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildActivityDiagramWithDecisionsAndActions&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=3e8231df_002D04bd_002D49f0_002D8d73_002Df9481dc4cc9e/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="WebApiTests" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;Project Location="/Users/jakubkonvicka/RiderProjects/diplomathesis/UnitTest" Presentation="&amp;lt;UnitTest&amp;gt;" /&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=447f0ad2_002D3982_002D4c13_002D8562_002D18748dcc27d7/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="BuildActivityDiagramWithDecisionsAndActions #4" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildActivityDiagramWithDecisionsAndActions&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=787f49f1_002D5ae8_002D4593_002Da806_002Dbdff78c88abc/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="AuthenticationTest" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.WebApiTests.AuthenticationTest&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=89ec26b2_002Dc3eb_002D4d79_002D97c5_002D0b5722ace381/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="BuildActivityDiagramWithDecisionsAndActions #3" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildActivityDiagramWithDecisionsAndActions&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=9cd5065d_002Da7a4_002D4689_002Db1fe_002Df606c9e9e91d/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="BuildActivityDiagramWithDecisions" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildActivityDiagramWithDecisions&lt;/TestId&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildActivityDiagramWithDecisionsAndActions&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=c6398b25_002D34a8_002D43e8_002Da6b7_002D390f376e861e/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="RegisterTestWrongToken" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.WebApiTests&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=d5334459_002D70ab_002D4733_002D874a_002D3629f29a0297/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="BuildActivityDiagramWithDecisionsAndActions #5" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests&lt;/TestId&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ClassDiagramTests&lt;/TestId&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.WebApiTests&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String></wpf:ResourceDictionary>
\ No newline at end of file
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=ea6b864b_002D2fca_002D4192_002D9701_002D8b0ec6a1f0b5/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="ClassDiagramTests" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ClassDiagramTests&lt;/TestId&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildEmptyActivityDiagram&lt;/TestId&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildActivityDiagramWithNActivity&lt;/TestId&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ActivityDiagramTests.BuildActivityDiagramWithDecisions&lt;/TestId&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.WebApiTests.AuthenticationTestWrongPassword&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=fda6a1bd_002Dc689_002D49fc_002Db8c6_002D2b90c31a8b5e/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="RegisterTest" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.WebApiTests.RegisterTest&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String>
</wpf:ResourceDictionary>
\ No newline at end of file
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Database\Database.csproj" />
<ProjectReference Include="..\DiagramBuilder\DiagramBuilder.csproj" />
<ProjectReference Include="..\LanguageRecogniser\LanguageRecogniser.csproj" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Input\Example1.cpp" />
</ItemGroup>
</Project>
#include <iostream>
#include <vector>
#define E 1
namespace DatabaseModel
{
int main() {
int cislo = E;
printf("Ahoj, zadej cislo: ");
scanf_s("%d", &cislo);
if(cislo == 0)
{
printf("Cislo je nula");
while(cislo == 0)
{
printf("Zadej cislo: ");
scanf_s("%d", &cislo);
}
}
else
{
int a = 5;
int b = 6;
int c = a + b;
printf(" %d + %d = %d", a, b, c);
}
return;
}
}
\ No newline at end of file
using Antlr4.Runtime;
using Antlr4.Runtime.Tree;
using CodeParser.Cpp;
using Database;
using Database.Model;
using DiagramBuilder.Activity.Diagram.Enum;
using DiagramBuilder.Class.Interface;
using DiagramBuilder.ConcreteCreator;
/*ActivityDiagramBuilderBuilderCreator activityDiagramBuilderCreator = new ActivityDiagramBuilderBuilderCreator();
IDiagramBuilder diagramBuilder = activityDiagramBuilderCreator.FactoryMethod("ActivityDiagram");
IPackageBuilder packageBuilder = diagramBuilder.AddPackage("package1");
//generate test classses with associations and operations and attributes
packageBuilder.AddClass("Class1", false)
.AddProperty("property1", VisibilityType.Private, PropertyType.PrimitiveTypeBoolean)
.AddProperty("property2", VisibilityType.Public, PropertyType.PrimitiveTypeInteger)
.AddProperty("property3", VisibilityType.Protected, PropertyType.PrimitiveTypeString)
.AddOperation("Operation1", VisibilityType.Private)
.AddOperation("Operation2", VisibilityType.Public)
.AddOperation("Operation3", VisibilityType.Protected)
.AddAssociation("Class2", VisibilityType.Public, AssociationType.Association)
.AddAssociation("Class2", VisibilityType.Public, AssociationType.Aggregation)
.AddAssociation("Class2", VisibilityType.Public, AssociationType.Composition);
packageBuilder.AddClass("Class2", false)
.AddProperty("property1", VisibilityType.Private, PropertyType.PrimitiveTypeBoolean)
.AddOperation("Operation1", VisibilityType.Private)
.AddGeneralization("Class1");
packageBuilder.AddClass("Class3", false)
.AddProperty("property1", VisibilityType.Private, PropertyType.PrimitiveTypeBoolean)
.AddOperation("Operation1", VisibilityType.Protected)
.AddGeneralization("Class1");
Console.WriteLine(diagramBuilder.BuildDiagram());*/
//load c++ code from file Example1.cpp
string inputCode = System.IO.File.ReadAllText(@"../../../Input/Example1.cpp");
// Create a lexer and parser for the C++ code
var inputStream = new AntlrInputStream(inputCode);
/*var lexer = new CPP14Lexer(inputStream);
var commonTokenStream = new CommonTokenStream(lexer);
var parser = new CPP14Parser(commonTokenStream);
ActivityDiagramBuilderBuilderCreator activityDiagramBuilderCreator = new ActivityDiagramBuilderBuilderCreator();
IDiagramBuilder diagramBuilder = activityDiagramBuilderCreator.FactoryMethod("ActivityDiagram");*/
// Create your custom listener
/*var listener = new CppClassDiagramListener(diagramBuilder);
// Attach the custom listener to the parser
parser.AddParseListener(listener);
// Start parsing the C++ code using the appropriate entry point
var translationUnitContext = parser.translationUnit(); // Use the correct entry point
// Your custom listener will handle events and process the code
Console.WriteLine("Parsing Complete!");
//Console.WriteLine(diagramBuilder.BuildDiagram());*/
ActivityDiagramBuilderCreatorFactory activityDiagramBuilderCreator = new ActivityDiagramBuilderCreatorFactory();
DiagramBuilder.Activity.Interface.IDiagramBuilder diagramBuilder = activityDiagramBuilderCreator.FactoryMethod("ActivityDiagram");
diagramBuilder
.AddLoop("test", "cond")
.AddDecision("D1", "t","f")
.AddLoop("test2", "cond2", BranchType.True)
.AddAction("a", BranchType.True)
.CloseLoop("loopCLose", BranchType.True)
.AddMerge("merge")
.CloseLoop("a")
.AddAction("c");
var xmi = diagramBuilder.BuildDiagram();
Console.WriteLine(xmi);
File.WriteAllText("/Users/jakubkonvicka/Applications/EA.app/Contents/SharedSupport/prefix/drive_c/xmi/activity.xml", xmi);
//visitor
/*
var lexer = new CPP14Lexer(inputStream);
CommonTokenStream tokens = new CommonTokenStream(lexer);
CPP14Parser parser = new CPP14Parser(tokens);
ClassClassDiagramBuilderBuilderCreator classClassDiagramBuilderCreator = new ClassClassDiagramBuilderBuilderCreator();
IDiagramBuilder diagramBuilder = classClassDiagramBuilderCreator.FactoryMethod("ActivityDiagram");
IParseTree tree = parser.namespaceDefinition();
if (parser.NumberOfSyntaxErrors == 0)
{
CppClassDiagramVisitor classDiagramVisitor = new CppClassDiagramVisitor(diagramBuilder);
Console.WriteLine(classDiagramVisitor.Visit(tree));
}
var xmi = diagramBuilder.BuildDiagram();
Console.WriteLine(xmi);
File.WriteAllText("/Users/jakubkonvicka/Library/Application Support/CrossOver/Bottles/Enterprise Architect 16.x/drive_c/xmi/ActivityDiagram.xmi", xmi);
*/
......@@ -18,8 +18,8 @@ public class DatabaseContext : DbContext
DbPath = System.IO.Path.Join(path, "database.db");
}
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite($"Data Source={DbPath}");
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseSqlite($"Data Source={DbPath}");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
......@@ -28,12 +28,12 @@ public class DatabaseContext : DbContext
.IsUnique();
}
public static void EnsureSeedData(DatabaseContext context)
public static void EnsureSeedData(DatabaseContext context, string path = "default-users.json")
{
context.Database.EnsureCreated(); // Ensure database is created
if (File.Exists("default-users.json"))
if (File.Exists(path))
{
var seedUsers = JsonConvert.DeserializeObject<List<SeedUser>>(File.ReadAllText("default-users.json"));
var seedUsers = JsonConvert.DeserializeObject<List<SeedUser>>(File.ReadAllText(path));
foreach (var seedUser in seedUsers)
{
......
......@@ -14,6 +14,7 @@ public class ActivityDiagramBuilder : IDiagramBuilder
private Stack<XmiElement> _loopElements { get; set; } = new Stack<XmiElement>();
private XmiElement _lastClosedDecision { get; set; } = null;
private XmiElement _lastOpenedDecision { get; set; } = null;
internal ActivityDiagramBuilder()
{
......@@ -43,6 +44,7 @@ public class ActivityDiagramBuilder : IDiagramBuilder
else
LastActivity = _xmiActivityDiagramUmlBuilder.AddDecision(_xmiActivityDiagramUmlBuilder.ActivityDiagram, name, new() {_lastEdge}, null, _lastClosedDecision);
_loopElements.Push(LastActivity);
_lastOpenedDecision = LastActivity;
return this;
}
......@@ -62,7 +64,7 @@ public class ActivityDiagramBuilder : IDiagramBuilder
else
LastActivity = _xmiActivityDiagramUmlBuilder.AddDecision(_xmiActivityDiagramUmlBuilder.ActivityDiagram, name, new() {_lastEdge}, null, _lastClosedDecision);
return new DecisionBuilder(this._name, this._xmiActivityDiagramUmlBuilder, _lastEdge, LastActivity, this);
return new DecisionBuilder(this._name, this._xmiActivityDiagramUmlBuilder, _lastEdge, LastActivity, _lastOpenedDecision, this);
}
public string? BuildDiagram()
......
......@@ -14,13 +14,16 @@ namespace DiagramBuilder.Activity.Diagram
private List<Dictionary<BranchType, XmiElement>> _lastAddedEdge { get; set; } = new();
private List<Dictionary<BranchType, XmiElement>> _loopElements { get; set; } = new();
private List<Dictionary<BranchType, XmiElement>> _lastAddedNode { get; set; } = new();
private List<XmiElement> _lastAddedLoopNode { get; set; } = new();
IDiagramBuilder _diagramBuilder { get; set; }
private List<BranchType> _lastBranchTypeForDecision { get; set; } = new();
private long _actualDecisionId { get; set; } = 0;
public DecisionBuilder(string? name, XmiActivityDiagramUmlBuilder xmiActivityDiagramUmlBuilder, XmiElement trueBranchEdge, XmiElement lastAddedNode, IDiagramBuilder _diagramBuilder)
public DecisionBuilder(string? name, XmiActivityDiagramUmlBuilder xmiActivityDiagramUmlBuilder,
XmiElement trueBranchEdge, XmiElement lastAddedNode, XmiElement lastOpenedDecision,
IDiagramBuilder _diagramBuilder)
{
this._diagramBuilder = _diagramBuilder;
_xmiActivityDiagramUmlBuilder = xmiActivityDiagramUmlBuilder;
......@@ -28,9 +31,10 @@ namespace DiagramBuilder.Activity.Diagram
_lastAddedNode.Add(new Dictionary<BranchType, XmiElement>());
_lastBranchTypeForDecision.Add(BranchType.True);
_lastAddedEdge.Last().Add(BranchType.True, trueBranchEdge);
_lastAddedNode.Last().Add(BranchType.True, lastAddedNode);
_lastAddedNode.Last().Add(BranchType.False, lastAddedNode);
_lastAddedEdge[^1].Add(BranchType.True, trueBranchEdge);
_lastAddedNode[^1].Add(BranchType.True, lastAddedNode);
_lastAddedNode[^1].Add(BranchType.False, lastAddedNode);
_lastAddedLoopNode.Add(lastOpenedDecision);
}
public string? BuildDiagram()
......@@ -43,57 +47,51 @@ namespace DiagramBuilder.Activity.Diagram
public IDecisionBuilder AddAction(string name, BranchType type)
{
XmiElement node;
if (!_lastAddedEdge.Last().TryGetValue(type, out var edge))
if (!_lastAddedEdge[^1].TryGetValue(type, out var edge))
{
node = _xmiActivityDiagramUmlBuilder.AddAction(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name, null, null, _lastAddedNode.Last()[type]);
_lastAddedEdge.Last().Add(type, _xmiActivityDiagramUmlBuilder.LatestEdge);
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name, null, null, _lastAddedNode[^1][type]);
_lastAddedEdge[^1].Add(type, _xmiActivityDiagramUmlBuilder.LatestEdge);
}
else
{
node = _xmiActivityDiagramUmlBuilder.AddAction(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name, new List<XmiElement> { _lastAddedEdge.Last()[type] }, null, _lastAddedNode.Last()[type]);
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name,
new List<XmiElement> { _lastAddedEdge[^1][type] }, null, _lastAddedNode[^1][type]);
}
_lastAddedNode.Last()[type] = node;
_lastAddedNode[^1][type] = node;
return this;
}
private void AddLabeledEdge(BranchType type)
public (IDecisionBuilder, IDiagramBuilder) AddMerge(string? name)
{
if (type is BranchType.True)
{
_xmiActivityDiagramUmlBuilder.AddLabel(_lastAddedEdge.Last()[type], "true");
}
else if(type is BranchType.False)
XmiElement lastAddedDecisionNode = _lastAddedLoopNode[^1];
if(_lastAddedLoopNode.Count > 1)
{
_xmiActivityDiagramUmlBuilder.AddLabel(_lastAddedEdge.Last()[type], "false");
lastAddedDecisionNode = _lastAddedLoopNode[^2];
}
}
public IDiagramBuilder AddAction(string name)
{
this._diagramBuilder.AddAction(name);
return this._diagramBuilder;
}
public IDecisionBuilder AddMerge(string? name)
{
var mergeNode = _xmiActivityDiagramUmlBuilder.AddMerge(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name,
_lastAddedNode.Last()[BranchType.True], _lastAddedNode.Last()[BranchType.False]);
_lastAddedNode[^1][BranchType.True], _lastAddedNode[^1][BranchType.False], lastAddedDecisionNode);
_lastAddedEdge.Remove(_lastAddedEdge.Last());
_lastAddedNode.Remove(_lastAddedNode.Last());
this._diagramBuilder.LastActivity = mergeNode;
if (_lastAddedNode.Count == 0)
return this;
{
return (null, this._diagramBuilder);
}
_lastAddedNode.Last()[_lastBranchTypeForDecision.Last()] = mergeNode;
_lastBranchTypeForDecision.RemoveAt(_lastBranchTypeForDecision.Count-1);
return this;
_lastBranchTypeForDecision.RemoveAt(_lastBranchTypeForDecision.Count - 1);
if (_lastAddedLoopNode.Count > 2)
{
_lastAddedLoopNode.RemoveAt(_lastAddedLoopNode.Count - 1);
}
return (this, null);
}
public IDecisionBuilder AddDecision(string name, string trueCondition, string falseCondition, BranchType type)
......@@ -102,53 +100,68 @@ namespace DiagramBuilder.Activity.Diagram
_lastAddedEdge.Add(new Dictionary<BranchType, XmiElement>());
_lastAddedNode.Add(new Dictionary<BranchType, XmiElement>());
XmiElement node;
if (!_lastAddedNode[_lastAddedNode.Count-2].TryGetValue(type, out _))
if (_lastAddedNode.Count < 2)
{
node = _xmiActivityDiagramUmlBuilder.AddDecision(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name, null, null, _lastAddedNode[_lastAddedNode.Count-2][type]);
_lastAddedEdge.Last()[type] = _xmiActivityDiagramUmlBuilder.LatestEdge;
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name,
new List<XmiElement> { this._xmiActivityDiagramUmlBuilder.LatestEdge }, null,
this._diagramBuilder.LastActivity);
}
else
{
node = _xmiActivityDiagramUmlBuilder.AddDecision(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name,
new List<XmiElement> { _lastAddedNode[_lastAddedNode.Count-2][type] }, null, _lastAddedNode[_lastAddedNode.Count-2][type]);
if (!_lastAddedNode[_lastAddedNode.Count - 2].TryGetValue(type, out _))
{
node = _xmiActivityDiagramUmlBuilder.AddDecision(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name, null, null,
_lastAddedNode[_lastAddedNode.Count - 2][type]);
_lastAddedEdge[^1][type] = _xmiActivityDiagramUmlBuilder.LatestEdge;
}
else
{
node = _xmiActivityDiagramUmlBuilder.AddDecision(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name,
new List<XmiElement> { _lastAddedNode[_lastAddedNode.Count - 2][type] }, null,
_lastAddedNode[_lastAddedNode.Count - 2][type]);
}
}
node.Type = XmiType.UmlDecisionNode;
_lastAddedNode.Last().Add(BranchType.True, node);
_lastAddedNode.Last().Add(BranchType.False, node);
//_lastAddedEdge.Last().Add(BranchType.False, _xmiActivityDiagramUmlBuilder.LatestEdge);
_lastAddedNode[^1].Add(BranchType.True, node);
_lastAddedNode[^1].Add(BranchType.False, node);
return this;
}
public IDecisionBuilder AddLoop(string name, string condition, BranchType type)
{
if (!_lastAddedEdge.Last().TryGetValue(type, out var edge))
{
if (!_lastAddedEdge[^1].TryGetValue(type, out var edge))
{
_lastAddedNode.Last()[type] = _xmiActivityDiagramUmlBuilder.AddDecision(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name, null, null, _lastAddedNode.Last()[type]);
_lastAddedEdge.Last().Add(type, _xmiActivityDiagramUmlBuilder.LatestEdge);
_lastAddedNode[^1][type] = _xmiActivityDiagramUmlBuilder.AddDecision(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name, null, null, _lastAddedNode[^1][type]);
_lastAddedEdge[^1].Add(type, _xmiActivityDiagramUmlBuilder.LatestEdge);
}
else
{
_lastAddedNode.Last()[type] = _xmiActivityDiagramUmlBuilder.AddDecision(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name, new List<XmiElement> { _lastAddedEdge.Last()[type] }, null, _lastAddedNode.Last()[type]);
_lastAddedNode[^1][type] = _xmiActivityDiagramUmlBuilder.AddDecision(
_xmiActivityDiagramUmlBuilder.ActivityDiagram, name,
new List<XmiElement> { _lastAddedEdge[^1][type] }, null, _lastAddedNode[^1][type]);
}
_loopElements.Add(new Dictionary<BranchType, XmiElement>());
_loopElements.Last().Add(type, _lastAddedNode.Last()[type]);
_loopElements[^1].Add(type, _lastAddedNode[^1][type]);
_lastAddedLoopNode.Add(_lastAddedNode[^1][type]);
return this;
}
public IDecisionBuilder CloseLoop(string name, BranchType type)
{
_xmiActivityDiagramUmlBuilder.AddDirectedEdge(_xmiActivityDiagramUmlBuilder.ActivityDiagram, _lastAddedNode.Last()[type],
_loopElements.Last()[type]);
_lastAddedNode.Last()[type] = _loopElements.Last()[type];
_loopElements.Remove(_loopElements.Last());
_xmiActivityDiagramUmlBuilder.AddDirectedEdge(_xmiActivityDiagramUmlBuilder.ActivityDiagram,
_lastAddedNode[^1][type],
_loopElements[^1][type]);
_lastAddedNode[^1][type] = _loopElements[^1][type];
_loopElements.Remove(_loopElements[^1]);
return this;
}
......@@ -158,4 +171,4 @@ namespace DiagramBuilder.Activity.Diagram
return this._diagramBuilder;
}
}
}
}
\ No newline at end of file
......@@ -5,7 +5,7 @@ namespace DiagramBuilder.Activity.Interface;
public interface IDecisionBuilder
{
public IDecisionBuilder AddAction(string name, BranchType type);
public IDecisionBuilder AddMerge(string? name);
public (IDecisionBuilder, IDiagramBuilder) AddMerge(string? name);
public IDecisionBuilder AddDecision(string name, string trueCondition, string falseCondition, BranchType type);
public IDecisionBuilder AddLoop(string name, string condition, BranchType type);
public IDecisionBuilder CloseLoop(string name, BranchType type);
......
......@@ -5,7 +5,7 @@ namespace DiagramBuilder.Activity.XML;
public class XmiActivityDiagramUmlBuilder : DiagramUmlBuilder
{
private List<XmiElement> _decisionBlocks = new List<XmiElement>();
private readonly List<XmiElement> _decisionBlocks = new List<XmiElement>();
private XmiElement _lastAddedNodeElement { get; set; } = null;
public XmiElement ActivityDiagram { get; set; }
......@@ -25,14 +25,12 @@ public class XmiActivityDiagramUmlBuilder : DiagramUmlBuilder
private XmiElement AddActivityDiagram(XmiElement parent, string? name)
{
string? id = name;
var activityDiagram = AddPackagedElement(parent, XmiType.UmlActivity, name, null);
return activityDiagram;
}
public XmiElement AddInitialNode(XmiElement parent, string name)
{
string id = name;
Guid guid = Guid.NewGuid();
var initialNode = AddNode(parent, XmiType.UmlInitialNode, guid, name, null);
return initialNode;
......@@ -63,34 +61,16 @@ public class XmiActivityDiagramUmlBuilder : DiagramUmlBuilder
public XmiElement AddMerge(XmiElement parent, string? name, XmiElement lastTrueBranchNode, XmiElement lastFalseBranchNode)
public XmiElement AddMerge(XmiElement parent, string? name, XmiElement lastTrueBranchNode,
XmiElement lastFalseBranchNode, XmiElement lastAddedDecisionNode)
{
string? id = name;
_lastAddedNodeElement = AddMergeNode(parent, name, lastTrueBranchNode, lastFalseBranchNode);
_lastAddedNodeElement = AddMergeNode(parent, name, lastTrueBranchNode, lastFalseBranchNode, lastAddedDecisionNode);
_nodes.Add(_lastAddedNodeElement.XmlElement.GetAttribute("xmi:id"), _lastAddedNodeElement);
/*
if (edgesIncomming != null)
{
foreach (var edge in edgesIncomming)
{
AddIncomming(merge, edge);
}
}
if (edgesOutgoing != null)
{
foreach (var edge in edgesOutgoing)
{
AddOutgoing(merge, edge);
}
}
*/
return _lastAddedNodeElement;
}
public XmiElement AddAction(XmiElement parent, string name, List<XmiElement> edgesIncomming, List<XmiElement> edgesOutgoing, XmiElement decisionBlock = null)
{
string id = name;
Guid guid = Guid.NewGuid();
var activity = AddNode(parent, XmiType.UmlAction, guid, name, null, decisionBlock);
if(edgesIncomming is null)
......@@ -119,7 +99,7 @@ public class XmiActivityDiagramUmlBuilder : DiagramUmlBuilder
public void AddDirectedEdge(XmiElement parent, XmiElement source, XmiElement target)
{
AddEdge(parent, XmiType.UmlControlFlow, source, target);
AddEdge(parent, source, target);
}
public void AddLabel(XmiElement edge, string label)
......@@ -127,7 +107,7 @@ public class XmiActivityDiagramUmlBuilder : DiagramUmlBuilder
AddEdgeLabel(edge, label);
}
private XmiElement AddActivityFinalNode(XmiElement parent, string name, XmiElement lastClosedDecision)
private void AddActivityFinalNode(XmiElement parent, string name, XmiElement lastClosedDecision)
{
Guid guid = Guid.NewGuid();
var activityFinalNode = AddNode(parent, XmiType.UmlActivityFinalNode, guid, name, null, lastClosedDecision);
......@@ -141,37 +121,34 @@ public class XmiActivityDiagramUmlBuilder : DiagramUmlBuilder
continue;
}
var edge = AddEdge(ActivityDiagram, XmiType.UmlControlFlow, node.Value, activityFinalNode, true);
var edge = AddEdge(ActivityDiagram, node.Value, activityFinalNode, true);
AddIncomming(activityFinalNode, edge);
}
return activityFinalNode;
}
private XmiElement AddPackage(XmiElement parent, string? name)
{
string? id = name;
var package = AddPackagedElement(parent, XmiType.UmlPackage, name, null);
return package;
}
private XmiElement AddPackagedElement(XmiElement parent, XmiType xmiType, string? name, List<XmiAttributeDTO>? additionalAttributes)
private XmiElement AddPackagedElement(XmiElement parent, XmiType xmiType, string? name, List<XmiAttributeDto>? additionalAttributes)
{
return _xmiBuilder.AddElement(parent, "packagedElement", xmiType, name, additionalAttributes);
}
private XmiElement AddEdge(XmiElement parent, XmiType xmiType, XmiElement source, XmiElement target, bool allowNameReturn = false)
private XmiElement AddEdge(XmiElement parent, XmiElement source, XmiElement target, bool allowNameReturn = false)
{
//create source target attributes
var additionalAttributes = new List<XmiAttributeDTO>()
var additionalAttributes = new List<XmiAttributeDto>()
{
new XmiAttributeDTO()
new XmiAttributeDto()
{
Prefix = "",
AttributeName = "source",
AttributeValue = source.XmlElement.GetAttribute("xmi:id"),
},
new XmiAttributeDTO()
new XmiAttributeDto()
{
Prefix = "",
AttributeName = "target",
......@@ -190,20 +167,24 @@ public class XmiActivityDiagramUmlBuilder : DiagramUmlBuilder
return _edges.LastOrDefault();
}
private XmiElement AddMergeNode(XmiElement parent, string? name, XmiElement lastTrueBranchNode, XmiElement lastFalseBranchNode)
private XmiElement AddMergeNode(XmiElement parent, string? name, XmiElement lastTrueBranchNode,
XmiElement lastFalseBranchNode, XmiElement lastAddedDecisionNode)
{
var node = _xmiBuilder.AddElement(parent, "node", XmiType.UmlMergeNode, name, null);
AddEdge(ActivityDiagram, XmiType.UmlControlFlow, lastTrueBranchNode, node);
AddEdge(ActivityDiagram, XmiType.UmlControlFlow, lastFalseBranchNode, node);
AddEdge(ActivityDiagram, lastTrueBranchNode,
lastTrueBranchNode.XmlElement.GetAttribute("name") != "continue;" ? node : lastAddedDecisionNode);
AddEdge(ActivityDiagram, lastFalseBranchNode,
lastFalseBranchNode.XmlElement.GetAttribute("name") != "continue;" ? node : lastAddedDecisionNode);
return node;
}
private XmiElement AddNode(XmiElement parent, XmiType xmiType, Guid guid, string name, List<XmiAttributeDTO>? additionalAttributes, XmiElement decisionBlock = null)
private XmiElement AddNode(XmiElement parent, XmiType xmiType, Guid guid, string name, List<XmiAttributeDto>? additionalAttributes, XmiElement decisionBlock = null)
{
if (_lastAddedNodeElement != null && xmiType != XmiType.UmlMergeNode)
{
var node = _xmiBuilder.AddElement(parent, "node", xmiType, guid.ToString(), name, additionalAttributes);
AddEdge(ActivityDiagram, XmiType.UmlControlFlow, decisionBlock is null ? _lastAddedNodeElement : decisionBlock, node);
AddEdge(ActivityDiagram, decisionBlock is null ? _lastAddedNodeElement : decisionBlock, node);
_lastAddedNodeElement = node;
}
else
......@@ -215,46 +196,46 @@ public class XmiActivityDiagramUmlBuilder : DiagramUmlBuilder
return _lastAddedNodeElement;
}
private XmiElement AddEdgeLabel(XmiElement parent, string label)
private void AddEdgeLabel(XmiElement parent, string label)
{
Guid guid = Guid.NewGuid();
//additional attribute body
var additionalAttributes = new List<XmiAttributeDTO>()
var additionalAttributes = new List<XmiAttributeDto>()
{
new XmiAttributeDTO()
new XmiAttributeDto()
{
Prefix = "",
AttributeName = "body",
AttributeValue = label,
}
};
return _xmiBuilder.AddElement(parent, "guard", XmiType.UmlOpaqueExpression, guid.ToString(), label, additionalAttributes);
_xmiBuilder.AddElement(parent, "guard", XmiType.UmlOpaqueExpression, guid.ToString(), label, additionalAttributes);
}
private XmiElement AddIncomming(XmiElement parent, XmiElement edge)
private void AddIncomming(XmiElement parent, XmiElement edge)
{
if(edge is null)
{
return null;
return;
}
var additionalAttributes = new List<XmiAttributeDTO>()
var additionalAttributes = new List<XmiAttributeDto>()
{
new XmiAttributeDTO()
new XmiAttributeDto()
{
Prefix = "xmi",
AttributeName = "idref",
AttributeValue = edge.XmlElement.GetAttribute("xmi:id"),
XmlNamespace = XmiBuilder.GetNamespace("xmi")
}
};
return _xmiBuilder.AddElement(parent, "incoming", additionalAttributes);
};
_xmiBuilder.AddElement(parent, "incoming", additionalAttributes);
}
private XmiElement AddOutgoing(XmiElement parent, XmiElement edge)
private void AddOutgoing(XmiElement parent, XmiElement edge)
{
var additionalAttributes = new List<XmiAttributeDTO>()
var additionalAttributes = new List<XmiAttributeDto>()
{
new XmiAttributeDTO()
new XmiAttributeDto()
{
Prefix = "xmi",
AttributeName = "idref",
......@@ -262,7 +243,7 @@ public class XmiActivityDiagramUmlBuilder : DiagramUmlBuilder
XmlNamespace = XmiBuilder.GetNamespace("xmi")
}
};
return _xmiBuilder.AddElement(parent, "outgoing", additionalAttributes);
_xmiBuilder.AddElement(parent, "outgoing", additionalAttributes);
}
public string? Build(XmiElement lastClosedDecision)
......@@ -282,7 +263,7 @@ public class XmiActivityDiagramUmlBuilder : DiagramUmlBuilder
for (int i = 0; i < edges.Count && i < 2; i++)
{
var edgeId = edges[i].Attributes.GetNamedItem("xmi:idref").Value;
var edgeElement = _edges.FirstOrDefault(x => x.XmlElement.GetAttribute("xmi:id") == edgeId);
var edgeElement = _edges.Find(x => x.XmlElement.GetAttribute("xmi:id") == edgeId);
AddLabel(edgeElement, i == 0 ? "true" : "false");
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment