diff --git a/CodeToXMI.sln b/CodeToXMI.sln index ae021f0e5dcf58a865646b8e5df316b0cb63a6cf..07ab8219673b556443a3871dc247b4302f47f378 100644 --- a/CodeToXMI.sln +++ b/CodeToXMI.sln @@ -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 diff --git a/ConsoleApp1/ConsoleApp1.csproj b/ConsoleApp1/ConsoleApp1.csproj deleted file mode 100644 index 830e067b3842f127cdfe3946bd64f510b62b6106..0000000000000000000000000000000000000000 --- a/ConsoleApp1/ConsoleApp1.csproj +++ /dev/null @@ -1,20 +0,0 @@ -<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> diff --git a/ConsoleApp1/Input/Example1.cpp b/ConsoleApp1/Input/Example1.cpp deleted file mode 100644 index 65e4a68e4c6600dfd65b1d0e1f1fc77fc417f07a..0000000000000000000000000000000000000000 --- a/ConsoleApp1/Input/Example1.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#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 diff --git a/ConsoleApp1/Program.cs b/ConsoleApp1/Program.cs deleted file mode 100644 index b58201cce9c048e485b536bd7afe4e78e28aab5a..0000000000000000000000000000000000000000 --- a/ConsoleApp1/Program.cs +++ /dev/null @@ -1,108 +0,0 @@ -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); -*/ - diff --git a/Database/DatabaseContext.cs b/Database/DatabaseContext.cs index 6bdc7a8eeb2e21fcd6644e7fc7287ce5e990b30b..42f5dd02578193de32a67f1e60002b6b0a12f1e2 100644 --- a/Database/DatabaseContext.cs +++ b/Database/DatabaseContext.cs @@ -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) { diff --git a/DiagramBuilder/Activity/Diagram/DecisionBuilder.cs b/DiagramBuilder/Activity/Diagram/DecisionBuilder.cs index ebaed4a01c9c683712a9efc6eaf72b4a589aaf54..bca28cc537ba95915e72df7345b925febb3a0ec8 100644 --- a/DiagramBuilder/Activity/Diagram/DecisionBuilder.cs +++ b/DiagramBuilder/Activity/Diagram/DecisionBuilder.cs @@ -28,9 +28,9 @@ 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); + _lastAddedEdge[^1].Add(BranchType.True, lastAddedNode); + _lastAddedEdge[^1].Add(BranchType.False, lastAddedNode); } public string? BuildDiagram() @@ -43,54 +43,36 @@ 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) - { - if (type is BranchType.True) - { - _xmiActivityDiagramUmlBuilder.AddLabel(_lastAddedEdge.Last()[type], "true"); - } - else if(type is BranchType.False) - { - _xmiActivityDiagramUmlBuilder.AddLabel(_lastAddedEdge.Last()[type], "false"); - } - } - - 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]); - _lastAddedEdge.Remove(_lastAddedEdge.Last()); - _lastAddedNode.Remove(_lastAddedNode.Last()); + _lastAddedNode[^1][BranchType.True], _lastAddedNode[^1][BranchType.False]); + _lastAddedEdge.Remove(_lastAddedEdge[^1]); + _lastAddedNode.Remove(_lastAddedNode[^1]); this._diagramBuilder.LastActivity = mergeNode; if (_lastAddedNode.Count == 0) return this; - _lastAddedNode.Last()[_lastBranchTypeForDecision.Last()] = mergeNode; + _lastAddedNode[^1][_lastBranchTypeForDecision[^1]] = mergeNode; _lastBranchTypeForDecision.RemoveAt(_lastBranchTypeForDecision.Count-1); return this; @@ -106,7 +88,7 @@ namespace DiagramBuilder.Activity.Diagram { node = _xmiActivityDiagramUmlBuilder.AddDecision( _xmiActivityDiagramUmlBuilder.ActivityDiagram, name, null, null, _lastAddedNode[_lastAddedNode.Count-2][type]); - _lastAddedEdge.Last()[type] = _xmiActivityDiagramUmlBuilder.LatestEdge; + _lastAddedEdge[^1][type] = _xmiActivityDiagramUmlBuilder.LatestEdge; } else { @@ -116,39 +98,38 @@ namespace DiagramBuilder.Activity.Diagram } 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]); 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; } diff --git a/DiagramBuilder/Activity/XML/XmiActivityDiagramUmlBuilder.cs b/DiagramBuilder/Activity/XML/XmiActivityDiagramUmlBuilder.cs index affad43246294d7ea5454a4d49d15158fd561c3e..077ee304428e967e0c774bec64c5028fd7d7ecf8 100644 --- a/DiagramBuilder/Activity/XML/XmiActivityDiagramUmlBuilder.cs +++ b/DiagramBuilder/Activity/XML/XmiActivityDiagramUmlBuilder.cs @@ -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; @@ -65,32 +63,13 @@ public class XmiActivityDiagramUmlBuilder : DiagramUmlBuilder public XmiElement AddMerge(XmiElement parent, string? name, XmiElement lastTrueBranchNode, XmiElement lastFalseBranchNode) { - string? id = name; _lastAddedNodeElement = AddMergeNode(parent, name, lastTrueBranchNode, lastFalseBranchNode); _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 +98,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 +106,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 +120,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", @@ -193,17 +169,17 @@ public class XmiActivityDiagramUmlBuilder : DiagramUmlBuilder private XmiElement AddMergeNode(XmiElement parent, string? name, XmiElement lastTrueBranchNode, XmiElement lastFalseBranchNode) { 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, node); + AddEdge(ActivityDiagram, lastFalseBranchNode, node); 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 +191,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 +238,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 +258,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"); } diff --git a/DiagramBuilder/Class/Diagram/ClassBuilder.cs b/DiagramBuilder/Class/Diagram/ClassBuilder.cs index 20d295bd236858757f7e65f7b632dbaa273d43a2..e8b76e26155878b6973eada29c2a8299f3f30b35 100644 --- a/DiagramBuilder/Class/Diagram/ClassBuilder.cs +++ b/DiagramBuilder/Class/Diagram/ClassBuilder.cs @@ -26,15 +26,15 @@ public class ClassBuilder : IClassBuilder return new OperationBuilder(_xmiClassDiagramUmlBuilder, _class, name, returnType, visibilityType); } - public IClassBuilder AddAssociation(string? targetClassName, string? name, VisibilityType visibilityType, AssociationType associationType) + public IClassBuilder AddAssociation(string? targetClass, string? name, VisibilityType visibilityType, AssociationType associationType) { - _xmiClassDiagramUmlBuilder.AddAssociation(_class, targetClassName, name, visibilityType, associationType); + _xmiClassDiagramUmlBuilder.AddAssociation(_class, targetClass, name, visibilityType, associationType); return this; } - public IClassBuilder AddGeneralization(string? targetClassName) + public IClassBuilder AddGeneralization(string? targetClass) { - _xmiClassDiagramUmlBuilder.AddGeneralization(_class, targetClassName); + _xmiClassDiagramUmlBuilder.AddGeneralization(_class, targetClass); return this; } } \ No newline at end of file diff --git a/DiagramBuilder/Class/Diagram/OperationBuilder.cs b/DiagramBuilder/Class/Diagram/OperationBuilder.cs index f1077e48cda708f8e56d94cb65d2088734318a27..d97fcf2e3857a65f302b1bcd33f2c30c65b7dd64 100644 --- a/DiagramBuilder/Class/Diagram/OperationBuilder.cs +++ b/DiagramBuilder/Class/Diagram/OperationBuilder.cs @@ -30,15 +30,15 @@ public class OperationBuilder : IOperationBuilder return this; } - public IClassBuilder AddAssociation(string? targetClassName, string? name, VisibilityType visibilityType, AssociationType associationType) + public IClassBuilder AddAssociation(string? targetClass, string? name, VisibilityType visibilityType, AssociationType associationType) { - _xmiClassDiagramUmlBuilder.AddAssociation(_class, targetClassName, name, visibilityType, associationType); + _xmiClassDiagramUmlBuilder.AddAssociation(_class, targetClass, name, visibilityType, associationType); return this; } - public IClassBuilder AddGeneralization(string? targetClassName) + public IClassBuilder AddGeneralization(string? targetClass) { - _xmiClassDiagramUmlBuilder.AddGeneralization(_class, targetClassName); + _xmiClassDiagramUmlBuilder.AddGeneralization(_class, targetClass); return this; } diff --git a/DiagramBuilder/Class/Diagram/PackageBuilder.cs b/DiagramBuilder/Class/Diagram/PackageBuilder.cs index 25b5493f0894e44d9f21630bb081fb173f2d2df4..fdb28abbd95e8363b9f82815ece8b7b6a92cf68b 100644 --- a/DiagramBuilder/Class/Diagram/PackageBuilder.cs +++ b/DiagramBuilder/Class/Diagram/PackageBuilder.cs @@ -6,7 +6,7 @@ namespace DiagramBuilder.Class.Diagram; public class PackageBuilder : IPackageBuilder { - XmiClassDiagramUmlBuilder _xmiClassDiagramUmlBuilder; + readonly XmiClassDiagramUmlBuilder _xmiClassDiagramUmlBuilder; private XmiElement _package { get; set; } internal PackageBuilder(XmiClassDiagramUmlBuilder xmiClassDiagramUmlBuilder, string? name) diff --git a/DiagramBuilder/Class/XML/XmiClassDiagramUmlBuilder.cs b/DiagramBuilder/Class/XML/XmiClassDiagramUmlBuilder.cs index e6fdadc02e25c4437b7a5c9ebdf0b00f69f3ddbf..f5d91e72c05e4da37b1ecd6aecf7db2b5ed1b67d 100644 --- a/DiagramBuilder/Class/XML/XmiClassDiagramUmlBuilder.cs +++ b/DiagramBuilder/Class/XML/XmiClassDiagramUmlBuilder.cs @@ -30,7 +30,7 @@ public class XmiClassDiagramUmlBuilder : DiagramUmlBuilder public XmiElement AddClass(XmiElement parent, string? name, bool isAbstract) { //add isAbstract attribute - var isAbstractAttribute = new XmiAttributeDTO() + var isAbstractAttribute = new XmiAttributeDto() { AttributeName = "isAbstract", AttributeValue = isAbstract ? "true" : "false" @@ -45,14 +45,14 @@ public class XmiClassDiagramUmlBuilder : DiagramUmlBuilder public void AddProperty(XmiElement parent, string? name, VisibilityType visibilityType, PropertyType propertyType) { //add visibility attribute - var visibilityAttribute = new XmiAttributeDTO() + var visibilityAttribute = new XmiAttributeDto() { AttributeName = "visibility", AttributeValue = Convertor.VisibilityTypeToString(visibilityType) }; var property = AddOwnedAttribute(parent, XmiType.UmlProperty, name, new(){visibilityAttribute}); //add href attribute - var hrefAttribute = new XmiAttributeDTO() + var hrefAttribute = new XmiAttributeDto() { AttributeName = "href", AttributeValue = $"http://www.omg.org/spec/UML/20131001/UML.xmi#{Convertor.PropertyTypeToDataTypeString(propertyType)}" @@ -66,7 +66,7 @@ public class XmiClassDiagramUmlBuilder : DiagramUmlBuilder public XmiElement AddOperation(XmiElement parent, string? name, PropertyType returnType, VisibilityType visibilityType) { //add visibility attribute - var visibilityAttribute = new XmiAttributeDTO() + var visibilityAttribute = new XmiAttributeDto() { AttributeName = "visibility", AttributeValue = Convertor.VisibilityTypeToString(visibilityType) @@ -75,14 +75,14 @@ public class XmiClassDiagramUmlBuilder : DiagramUmlBuilder var operation = AddOwnedOperation(parent, XmiType.UmlOperation, name, new(){visibilityAttribute}); if (returnType != PropertyType.NonPrimitiveType && returnType != PropertyType.NoDataType) { - var directionAttribute = new XmiAttributeDTO() + var directionAttribute = new XmiAttributeDto() { AttributeName = "direction", AttributeValue = "return" }; var parameter = AddOwnedParameter(operation, XmiType.UmlParameter, "returnParameter", new(){ directionAttribute }, false); - var hrefAttribute = new XmiAttributeDTO() + var hrefAttribute = new XmiAttributeDto() { AttributeName = "href", AttributeValue = $"http://www.omg.org/spec/UML/20131001/UML.xmi#{Convertor.PropertyTypeToDataTypeString(returnType)}" @@ -116,24 +116,24 @@ public class XmiClassDiagramUmlBuilder : DiagramUmlBuilder _associations.Add(association); - var attributes = new List<XmiAttributeDTO>() + var attributes = new List<XmiAttributeDto>() { - new XmiAttributeDTO() + new XmiAttributeDto() { AttributeName = "visibility", AttributeValue = Convertor.VisibilityTypeToString(visibilityType) }, - new XmiAttributeDTO() + new XmiAttributeDto() { AttributeName = "association", AttributeValue = associationName }, - new XmiAttributeDTO() + new XmiAttributeDto() { AttributeName = "aggregation", AttributeValue = Convertor.AssociationTypeToString(associationType) }, - new XmiAttributeDTO() + new XmiAttributeDto() { AttributeName = "type", AttributeValue = $"{packageName}-{targetClassName}" @@ -149,13 +149,13 @@ public class XmiClassDiagramUmlBuilder : DiagramUmlBuilder { if (propertyType != PropertyType.NonPrimitiveType && propertyType != PropertyType.NoDataType) { - var directionAttribute = new XmiAttributeDTO() + var directionAttribute = new XmiAttributeDto() { AttributeName = "direction", AttributeValue = "in" }; var parameter = AddOwnedParameter(parent, XmiType.UmlParameter, name, new(){ directionAttribute }); - var hrefAttribute = new XmiAttributeDTO() + var hrefAttribute = new XmiAttributeDto() { AttributeName = "href", AttributeValue = $"http://www.omg.org/spec/UML/20131001/UML.xmi#{Convertor.PropertyTypeToDataTypeString(propertyType)}" @@ -172,9 +172,9 @@ public class XmiClassDiagramUmlBuilder : DiagramUmlBuilder string? parentName = parentClass.XmlElement.GetAttribute("name"); - var attributes = new List<XmiAttributeDTO>() + var attributes = new List<XmiAttributeDto>() { - new XmiAttributeDTO() + new XmiAttributeDto() { AttributeName = "general", AttributeValue = $"{packageName}-{targetClassName}" @@ -184,40 +184,40 @@ public class XmiClassDiagramUmlBuilder : DiagramUmlBuilder _nextClassGeneralizationId[parentName]++; } - private XmiElement AddOwnedAttribute(XmiElement parent, XmiType classXmiType, string? name, List<XmiAttributeDTO>? additionalAttributes) + private XmiElement AddOwnedAttribute(XmiElement parent, XmiType classXmiType, string? name, List<XmiAttributeDto>? additionalAttributes) { return _xmiBuilder.AddElement(parent,"ownedAttribute", classXmiType, name, additionalAttributes); } - private XmiElement AddOwnedOperation(XmiElement parent, XmiType classXmiType, string? name, List<XmiAttributeDTO>? additionalAttributes) + private XmiElement AddOwnedOperation(XmiElement parent, XmiType classXmiType, string? name, List<XmiAttributeDto>? additionalAttributes) { return _xmiBuilder.AddElement(parent,"ownedOperation", classXmiType, name, additionalAttributes); } - private XmiElement AddOwnedParameter(XmiElement parent, XmiType classXmiType, string? name, List<XmiAttributeDTO>? additionalAttributes, bool addAttributeName = true) + private XmiElement AddOwnedParameter(XmiElement parent, XmiType classXmiType, string? name, List<XmiAttributeDto>? additionalAttributes, bool addAttributeName = true) { return _xmiBuilder.AddElement(parent,"ownedParameter", classXmiType, name, additionalAttributes, addAttributeName); } - private XmiElement AddPackagedElement(XmiElement parent, XmiType classXmiType, string? name, List<XmiAttributeDTO>? additionalAttributes) + private XmiElement AddPackagedElement(XmiElement parent, XmiType classXmiType, string? name, List<XmiAttributeDto>? additionalAttributes) { return _xmiBuilder.AddElement(parent, "packagedElement", classXmiType, name, additionalAttributes); } - private XmiElement AddTypeAttribute(XmiElement parent, PropertyType propertyType, List<XmiAttributeDTO>? additionalAttributes) + private XmiElement AddTypeAttribute(XmiElement parent, PropertyType propertyType, List<XmiAttributeDto>? additionalAttributes) { //$"{parent.XmlElement.GetAttribute("id")}-{name}", return _xmiBuilder.AddElement(parent,"type", propertyType, string.Empty, string.Empty, additionalAttributes); } private void AddLowerValueAttribute(XmiElement parent, PropertyType propertyType, - List<XmiAttributeDTO>? additionalAttributes) + List<XmiAttributeDto>? additionalAttributes) { string id = $"{parent.XmlElement.GetAttribute("xmi:id").ToString()}-_lowerValue"; _xmiBuilder.AddElement(parent,"lowerValue", propertyType, id, string.Empty, additionalAttributes); } - private void AddGeneralizationAttribute(XmiElement parent, List<XmiAttributeDTO>? additionalAttributes) + private void AddGeneralizationAttribute(XmiElement parent, List<XmiAttributeDto>? additionalAttributes) { string packageName = parent.XmlElement.GetAttribute("xmi:id").Split('-')[0]; string? parentName = parent.XmlElement.GetAttribute("name"); @@ -238,14 +238,14 @@ public class XmiClassDiagramUmlBuilder : DiagramUmlBuilder if (_elementClasses.TryGetValue(association.Target.ClassName, out var targetElement)) { //add association="package1-Association1" - var attributes = new List<XmiAttributeDTO>() + var attributes = new List<XmiAttributeDto>() { - new XmiAttributeDTO() + new XmiAttributeDto() { AttributeName = "association", AttributeValue = $"{association.Package}-{association.Name}" }, - new XmiAttributeDTO() + new XmiAttributeDto() { AttributeName = "type", AttributeValue = $"{association.Package}-{association.Source.ClassName}" @@ -254,7 +254,7 @@ public class XmiClassDiagramUmlBuilder : DiagramUmlBuilder AddOwnedAttribute(targetElement, XmiType.UmlProperty, association.Target.AssociationProperyName, attributes); var package = _packages[association.Package]; - var memberEndAttribute = new XmiAttributeDTO() + var memberEndAttribute = new XmiAttributeDto() { AttributeName = "memberEnd", AttributeValue = $"{association.Package}-{association.Target.ClassName}-{association.Target.AssociationProperyName} {association.Package}-{association.Source.ClassName}-{association.Source.AssociationProperyName}" diff --git a/DiagramBuilder/Convertor.cs b/DiagramBuilder/Convertor.cs index a26541466d851241d0547a27498b722ecaf4d1a5..01ff212cb48ba11ceb27d3d3cfc8bf8a3d590f3c 100644 --- a/DiagramBuilder/Convertor.cs +++ b/DiagramBuilder/Convertor.cs @@ -3,7 +3,7 @@ using DiagramBuilder.XML; namespace DiagramBuilder; -public class Convertor +public static class Convertor { public static string XmiTypeToString(XmiType classXmiType, string prefix) { diff --git a/DiagramBuilder/XML/XmiAttributeDTO.cs b/DiagramBuilder/XML/XmiAttributeDTO.cs index 31114a6bc211c4a65f2b7124b733a7551622dcd6..bc6188b0b5ca3c34cf58f060f0ccedbb2d0c2837 100644 --- a/DiagramBuilder/XML/XmiAttributeDTO.cs +++ b/DiagramBuilder/XML/XmiAttributeDTO.cs @@ -1,6 +1,6 @@ namespace DiagramBuilder.XML; -public class XmiAttributeDTO +public class XmiAttributeDto { public string Prefix { get; set; } public string AttributeName { get; set; } diff --git a/DiagramBuilder/XML/XmiBuilder.cs b/DiagramBuilder/XML/XmiBuilder.cs index 9f24320964fdc12d51c0304fa2b98e6633dcc650..0b21712472394dabb0801c675e5db53bb27dad9c 100644 --- a/DiagramBuilder/XML/XmiBuilder.cs +++ b/DiagramBuilder/XML/XmiBuilder.cs @@ -6,28 +6,28 @@ public class XmiBuilder : XmlBuilder { public void InitializeUmlRootElement(string? diagramName) { - XmlElementDTO xmlElementDto = new XmlElementDTO() + XmlElementDto xmlElementDto = new XmlElementDto() { Prefix = "uml", ElementName = "Model", XmlNamespace = GetNamespace("uml"), XmlAttributes = new() { - new XmiAttributeDTO() + new XmiAttributeDto() { Prefix = "xmi", AttributeName = "version", AttributeValue = "2.5.1", XmlNamespace = GetNamespace("xmi") }, - new XmiAttributeDTO() + new XmiAttributeDto() { Prefix = "xmi", AttributeName = "id", AttributeValue = "_0", XmlNamespace = GetNamespace("xmi") }, - new XmiAttributeDTO() + new XmiAttributeDto() { AttributeName = "name", AttributeValue = diagramName, @@ -37,56 +37,53 @@ public class XmiBuilder : XmlBuilder InitializeDocument(xmlElementDto); } - public XmiElement AddElement(XmiElement parent, string elementName, List<XmiAttributeDTO>? additionalAttributes) + public XmiElement AddElement(XmiElement parent, string elementName, List<XmiAttributeDto>? additionalAttributes) { - XmlElementDTO element = new XmlElementDTO() + XmlElementDto element = new XmlElementDto() { ElementName = elementName, - XmlAttributes = new List<XmiAttributeDTO>() + XmlAttributes = new List<XmiAttributeDto>() }; - if (!additionalAttributes.Any(x => x.AttributeName == "idref")) + if (!additionalAttributes.Exists(x => x.AttributeName == "idref")) { - element.XmlAttributes.Add(new XmiAttributeDTO() + element.XmlAttributes.Add(new XmiAttributeDto() { Prefix = "xmi", AttributeName = "id", - AttributeValue = string.IsNullOrEmpty(parent?.XmlElement?.GetAttribute("xmi:id")) - ? elementName - : elementName, //$"{parent?.XmlElement?.GetAttribute("xmi:id")}-{elementName}", + AttributeValue = elementName, //$"{parent?.XmlElement?.GetAttribute("xmi:id")}-{elementName}", XmlNamespace = GetNamespace("xmi") }); } - element.XmlAttributes.AddRange(additionalAttributes ?? new List<XmiAttributeDTO>()); + element.XmlAttributes.AddRange(additionalAttributes); if(parent == null) return AddChildElement(_root, element); return AddChildElement(parent.XmlElement, element); } - public XmiElement AddElement(XmiElement parent, string elementName, XmiType classXmiType, string? name, List<XmiAttributeDTO>? additionalAttributes, bool addAttributeName = true) + public XmiElement AddElement(XmiElement parent, string elementName, XmiType classXmiType, string? name, List<XmiAttributeDto>? additionalAttributes, bool addAttributeName = true) { - XmlElementDTO element = new XmlElementDTO() + XmlElementDto element = new XmlElementDto() { ElementName = elementName, - XmlAttributes = new List<XmiAttributeDTO>() + XmlAttributes = new List<XmiAttributeDto>() { - new XmiAttributeDTO() + new XmiAttributeDto() { Prefix = "xmi", AttributeName = "type", AttributeValue = Convertor.XmiTypeToString(classXmiType, "uml"), XmlNamespace = GetNamespace("xmi") }, - new XmiAttributeDTO() + new XmiAttributeDto() { Prefix = "xmi", AttributeName = "id", - AttributeValue = - string.IsNullOrEmpty(parent?.XmlElement?.GetAttribute("xmi:id")) - ? name - : $"{parent?.XmlElement?.GetAttribute("xmi:id")}-{name}", + AttributeValue = string.IsNullOrEmpty(parent?.XmlElement?.GetAttribute("xmi:id")) + ? name + : $"{parent?.XmlElement?.GetAttribute("xmi:id")}-{name}", XmlNamespace = GetNamespace("xmi") } } @@ -94,7 +91,7 @@ public class XmiBuilder : XmlBuilder if (addAttributeName) { - element.XmlAttributes.Add(new XmiAttributeDTO() + element.XmlAttributes.Add(new XmiAttributeDto() { AttributeName = "name", AttributeValue = name, @@ -111,14 +108,14 @@ public class XmiBuilder : XmlBuilder return AddChildElement(parent.XmlElement, element); } - public XmiElement AddElement(XmiElement parent, string elementName, XmiType classXmiType, string id, string name, List<XmiAttributeDTO>? additionalAttributes) + public XmiElement AddElement(XmiElement parent, string elementName, XmiType classXmiType, string id, string name, List<XmiAttributeDto>? additionalAttributes) { - XmlElementDTO element = new XmlElementDTO() + XmlElementDto element = new XmlElementDto() { ElementName = elementName, - XmlAttributes = new List<XmiAttributeDTO>() + XmlAttributes = new List<XmiAttributeDto>() { - new XmiAttributeDTO() + new XmiAttributeDto() { Prefix = "xmi", AttributeName = "type", @@ -135,7 +132,7 @@ public class XmiBuilder : XmlBuilder if (!string.IsNullOrEmpty(id)) { - var attributeId = new XmiAttributeDTO() + var attributeId = new XmiAttributeDto() { Prefix = "xmi", AttributeName = "id", @@ -147,7 +144,7 @@ public class XmiBuilder : XmlBuilder if(!string.IsNullOrEmpty(name)) { - var attributeName = new XmiAttributeDTO() + var attributeName = new XmiAttributeDto() { AttributeName = "name", AttributeValue = name, @@ -160,14 +157,14 @@ public class XmiBuilder : XmlBuilder return AddChildElement(parent.XmlElement, element); } - public XmiElement AddElement(XmiElement parent, string elementName, PropertyType propertyType, string id, string name, List<XmiAttributeDTO>? additionalAttributes) + public XmiElement AddElement(XmiElement parent, string elementName, PropertyType propertyType, string id, string name, List<XmiAttributeDto>? additionalAttributes) { - XmlElementDTO element = new XmlElementDTO() + XmlElementDto element = new XmlElementDto() { ElementName = elementName, - XmlAttributes = new List<XmiAttributeDTO>() + XmlAttributes = new List<XmiAttributeDto>() { - new XmiAttributeDTO() + new XmiAttributeDto() { Prefix = "xmi", AttributeName = "type", @@ -184,7 +181,7 @@ public class XmiBuilder : XmlBuilder if (!string.IsNullOrEmpty(id)) { - var attributeId = new XmiAttributeDTO() + var attributeId = new XmiAttributeDto() { Prefix = "xmi", AttributeName = "id", @@ -196,7 +193,7 @@ public class XmiBuilder : XmlBuilder if(!string.IsNullOrEmpty(name)) { - var attributeName = new XmiAttributeDTO() + var attributeName = new XmiAttributeDto() { AttributeName = "name", AttributeValue = name, @@ -220,15 +217,4 @@ public class XmiBuilder : XmlBuilder }; } - private string GetNamespace(PropertyType propertyType) - { - return propertyType switch - { - PropertyType.PrimitiveTypeBoolean => @"http://www.omg.org/spec/UML/20090901/UML.xmi#Boolean", - PropertyType.LiteralInteger => GetNamespace("uml"), - PropertyType.LiteralBoolean => GetNamespace("uml"), - _ => throw new ArgumentOutOfRangeException(nameof(propertyType), propertyType, null) - }; - } - } \ No newline at end of file diff --git a/DiagramBuilder/XML/XmlBuilder.cs b/DiagramBuilder/XML/XmlBuilder.cs index e115f62f75df7fb1d10b6f0b637de748d6906d3c..6f05d6d90a3fbd1fac08c1610e03c369a1a25261 100644 --- a/DiagramBuilder/XML/XmlBuilder.cs +++ b/DiagramBuilder/XML/XmlBuilder.cs @@ -31,10 +31,10 @@ namespace DiagramBuilder.XML return _xmlDocument.OuterXml.Replace("><", ">\n<"); } - protected void InitializeDocument(XmlElementDTO xmlElementDto) + protected void InitializeDocument(XmlElementDto xmlElementDto) { if(IsDocumentInitialized) - throw new Exception("Document is already initialized"); + throw new NotSupportedException("Document is already initialized"); XmlElement childElement = _xmlDocument.CreateElement(xmlElementDto.Prefix, xmlElementDto.ElementName, xmlElementDto.XmlNamespace); childElement.InnerText = xmlElementDto.ElementValue; foreach(var attribute in xmlElementDto.XmlAttributes) @@ -49,7 +49,7 @@ namespace DiagramBuilder.XML IsDocumentInitialized = true; } - protected XmiElement AddChildElement(XmlElement parent, XmlElementDTO xmlElementDto) + protected XmiElement AddChildElement(XmlElement parent, XmlElementDto xmlElementDto) { XmlElement childElement = _xmlDocument.CreateElement(xmlElementDto.Prefix, xmlElementDto.ElementName, xmlElementDto.XmlNamespace); childElement.InnerText = xmlElementDto.ElementValue; diff --git a/DiagramBuilder/XML/XmlElementDTO.cs b/DiagramBuilder/XML/XmlElementDTO.cs index e4962c95320a3d54c56ad9ff6c4029c40b1393db..b7d62f26516a214dbdf0f2bd0621beb7bdf6b44a 100644 --- a/DiagramBuilder/XML/XmlElementDTO.cs +++ b/DiagramBuilder/XML/XmlElementDTO.cs @@ -2,11 +2,11 @@ namespace DiagramBuilder.XML; -public class XmlElementDTO +public class XmlElementDto { public string Prefix { get; set; } public string ElementName { get; set; } public string ElementValue { get; set; } public string XmlNamespace { get; set; } - public List<XmiAttributeDTO> XmlAttributes { get; set; } = new List<XmiAttributeDTO>(); + public List<XmiAttributeDto> XmlAttributes { get; set; } = new List<XmiAttributeDto>(); } \ No newline at end of file diff --git a/LanguageRecogniser/Cpp/CPP14ParserBase.cs b/LanguageRecogniser/Cpp/CPP14ParserBase.cs index b5478d8fc4b578220d6c194e13ec74c1a197c6a9..69967a91c63454522ad04c205aa463d9150827fe 100644 --- a/LanguageRecogniser/Cpp/CPP14ParserBase.cs +++ b/LanguageRecogniser/Cpp/CPP14ParserBase.cs @@ -1,5 +1,4 @@ using Antlr4.Runtime; -using System.IO; public abstract class CPP14ParserBase : Parser { @@ -21,7 +20,7 @@ public abstract class CPP14ParserBase : Parser { } catch { + return false; } - return false; } } \ No newline at end of file diff --git a/LanguageRecogniser/Cpp/CppActivityDiagramVisitor.cs b/LanguageRecogniser/Cpp/CppActivityDiagramVisitor.cs index 625048505ef2a2641202de8f4cdc08e00097cf5e..f3ef8a1fdb2f357763031923b954e0248b83e56b 100644 --- a/LanguageRecogniser/Cpp/CppActivityDiagramVisitor.cs +++ b/LanguageRecogniser/Cpp/CppActivityDiagramVisitor.cs @@ -12,8 +12,8 @@ public class CppActivityDiagramVisitor : CPP14ParserBaseVisitor<object> private Stack<(IDecisionBuilder, Stack<BranchType>)> _decisionBuilderStack { get; set; } = new Stack<(IDecisionBuilder, Stack<BranchType>)>(); private long decisionUniqueueId { get; set; } = 0; - private string actualContext { get; set; } = string.Empty; - private string contextIdentifier { get; set; } = string.Empty; + private string actualContext { get; set; } = String.Empty; + private string contextIdentifier { get; set; } public CppActivityDiagramVisitor(IDiagramBuilder diagramBuilder, string contextIdentifier, string functionIdentifier) { @@ -82,7 +82,8 @@ public class CppActivityDiagramVisitor : CPP14ParserBaseVisitor<object> var functionName = context.declarator().pointerDeclarator().noPointerDeclarator().noPointerDeclarator() .declaratorid().GetText(); - if (this.functionIdentifier == functionName && this.contextIdentifier == this.actualContext) + if (this.functionIdentifier == functionName && + (string.IsNullOrEmpty(this.contextIdentifier) || this.contextIdentifier == this.actualContext)) { Visit(context.functionBody()); } @@ -98,8 +99,6 @@ public class CppActivityDiagramVisitor : CPP14ParserBaseVisitor<object> public override object VisitCompoundStatement(CPP14Parser.CompoundStatementContext context) { - List<string> statements = new List<string>(); - foreach (var statement in context.statementSeq().statement()) { var text = Visit(statement); @@ -198,7 +197,7 @@ public class CppActivityDiagramVisitor : CPP14ParserBaseVisitor<object> _decisionBuilderStack.Peek().Item2.Pop(); } - long count = _decisionBuilderStack.Count(); + _ = _decisionBuilderStack.Count; decisionUniqueueId++; _decisionBuilderStack.Pop().Item1.AddMerge($"merge-{decisionUniqueueId}"); return null; diff --git a/LanguageRecogniser/Cpp/CppClassDiagramVisitor.cs b/LanguageRecogniser/Cpp/CppClassDiagramVisitor.cs index 69148f204e76c939d20d8e8335a6bd50e764231f..5304757dda98ae33b4ec7499c92aebcd91a950b1 100644 --- a/LanguageRecogniser/Cpp/CppClassDiagramVisitor.cs +++ b/LanguageRecogniser/Cpp/CppClassDiagramVisitor.cs @@ -91,62 +91,84 @@ public class CppClassDiagramVisitor : CPP14ParserBaseVisitor<object> else if (child is CPP14Parser.MemberdeclarationContext mdc) { var member = Visit(mdc); + HandleMemberDeclarationContext(member, actualAccessSpecifier); - if(member is Function function) - { - var operationBuilder = _classes.Last().Value.AddOperation(function.Name, Convertor.StringToPropertyType(function.ReturnType), actualAccessSpecifier); - if (function.Parameters != null) - foreach (var param in function.Parameters) - { - operationBuilder.AddParameter(param.Name, Convertor.StringToPropertyType(param.Type)); - } - } - else if (member is Atribute atribute) - { - var propertyType = atribute.GetPropertyType(); - if (propertyType != PropertyType.NonPrimitiveType) - { - var propertyBuilder = _classes.Last().Value - .AddProperty(atribute.Name, actualAccessSpecifier, propertyType); - } - else - { - // Regular expressions - string aggregationPattern = @"^(?:std::)?(?:vector<)?(\w+)\*>?(?![\w*])$"; - string compositionPattern = @"^(?:std::)?(?:vector<)?(\w+)>?$"; - - // Check if the property type matches aggregation or composition - Match aggregationMatch = Regex.Match(atribute.Type, aggregationPattern); - Match compositionMatch = Regex.Match(atribute.Type, compositionPattern); - int groupMatch = 1; - if (aggregationMatch.Success && !string.IsNullOrEmpty(aggregationMatch.Groups[groupMatch].Value)) - { - // Aggregation type - string? typeName = aggregationMatch.Groups[groupMatch].Value; // Second capturing group - _classes.Last().Value.AddAssociation(typeName, atribute.Name, actualAccessSpecifier, - AssociationType.Aggregation); - } - else if (compositionMatch.Success && !string.IsNullOrEmpty(compositionMatch.Groups[groupMatch].Value)) - { - // Composition type - string? typeName = compositionMatch.Groups[groupMatch].Value; // Second capturing group - _classes.Last().Value.AddAssociation(typeName, atribute.Name, actualAccessSpecifier, - AssociationType.Composition); - } - else - { - // Default to regular association if no match is found - _classes.Last().Value.AddAssociation(atribute.Type, atribute.Name, actualAccessSpecifier, - AssociationType.Association); - } - } - } } } return ""; } + private void HandleMemberDeclarationContext(object member, VisibilityType actualAccessSpecifier) + { + if(member is Function function) + { + HandleFunctionMemberDeclaration(function, actualAccessSpecifier); + } + else if (member is Atribute atribute) + { + HandleAttributeMemberDeclaration(atribute, actualAccessSpecifier); + } + } + + private void HandleFunctionMemberDeclaration(Function function, VisibilityType actualAccessSpecifier) + { + var operationBuilder = _classes.Last().Value.AddOperation(function.Name, Convertor.StringToPropertyType(function.ReturnType), actualAccessSpecifier); + if (function.Parameters != null) + { + foreach (var param in function.Parameters) + { + operationBuilder.AddParameter(param.Name, Convertor.StringToPropertyType(param.Type)); + } + } + } + + private void HandleAttributeMemberDeclaration(Atribute atribute, VisibilityType actualAccessSpecifier) + { + var propertyType = atribute.GetPropertyType(); + if (propertyType != PropertyType.NonPrimitiveType) + { + _ = _classes.Last().Value + .AddProperty(atribute.Name, actualAccessSpecifier, propertyType); + } + else + { + HandleNonPrimitiveAttributeMemberDeclaration(atribute, actualAccessSpecifier); + } + } + + private void HandleNonPrimitiveAttributeMemberDeclaration(Atribute atribute, VisibilityType actualAccessSpecifier) + { + // Regular expressions + string aggregationPattern = @"^(?:std::)?(?:vector<)?(\w+)\*>?(?![\w*])$"; + string compositionPattern = @"^(?:std::)?(?:vector<)?(\w+)>?$"; + + // Check if the property type matches aggregation or composition + Match aggregationMatch = Regex.Match(atribute.Type, aggregationPattern); + Match compositionMatch = Regex.Match(atribute.Type, compositionPattern); + int groupMatch = 1; + if (aggregationMatch.Success && !string.IsNullOrEmpty(aggregationMatch.Groups[groupMatch].Value)) + { + // Aggregation type + string? typeName = aggregationMatch.Groups[groupMatch].Value; // Second capturing group + _classes.Last().Value.AddAssociation(typeName, atribute.Name, actualAccessSpecifier, + AssociationType.Aggregation); + } + else if (compositionMatch.Success && !string.IsNullOrEmpty(compositionMatch.Groups[groupMatch].Value)) + { + // Composition type + string? typeName = compositionMatch.Groups[groupMatch].Value; // Second capturing group + _classes.Last().Value.AddAssociation(typeName, atribute.Name, actualAccessSpecifier, + AssociationType.Composition); + } + else + { + // Default to regular association if no match is found + _classes.Last().Value.AddAssociation(atribute.Type, atribute.Name, actualAccessSpecifier, + AssociationType.Association); + } + } + public override object VisitMemberdeclaration(CPP14Parser.MemberdeclarationContext context) { if(context.declSpecifierSeq() != null) @@ -200,7 +222,7 @@ public class CppClassDiagramVisitor : CPP14ParserBaseVisitor<object> Parameter parameter = new(); if (context.declSpecifierSeq() != null) { - parameter.Type = Visit(context.declSpecifierSeq().declSpecifier().Last().typeSpecifier().trailingTypeSpecifier().simpleTypeSpecifier()).ToString(); + parameter.Type = Visit(context.declSpecifierSeq().declSpecifier()[context.declSpecifierSeq().declSpecifier().Length-1].typeSpecifier().trailingTypeSpecifier().simpleTypeSpecifier()).ToString(); } parameter.Name = Visit(context.declarator().pointerDeclarator().noPointerDeclarator().declaratorid()).ToString(); return parameter; diff --git a/UnitTest/ClassDiagramTests.cs b/UnitTest/ClassDiagramTests.cs index 63d173c4f12b6e3afbdd0fe76afbb11d048fbfa6..032149e60bbf768e58109e15d4fa9f0739c01e85 100644 --- a/UnitTest/ClassDiagramTests.cs +++ b/UnitTest/ClassDiagramTests.cs @@ -33,7 +33,6 @@ public class ClassDiagramTests // Additional assertions for XMI structure Assert.IsTrue(xmi.Contains("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"), "XMI should contain the XML header"); - //Assert.IsTrue(xmi.Contains("<xmi:XMI"), "XMI should contain the XMI root element"); // Add more assertions based on the expected structure of your XMI File.WriteAllText(generatedFileName, xmi); @@ -57,7 +56,7 @@ public class ClassDiagramTests { if (numberOfPackages >= 1) { - var package = ClassDiagramBuilder.AddPackage("TestPackage"); + _ = ClassDiagramBuilder.AddPackage("TestPackage"); for (int i = 1; i < numberOfPackages; i++) { ClassDiagramBuilder.AddPackage($"TestPackage{i}"); @@ -68,7 +67,6 @@ public class ClassDiagramTests // Additional assertions for XMI structure Assert.IsTrue(xmi.Contains("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"), "XMI should contain the XML header"); - //Assert.IsTrue(xmi.Contains("<xmi:XMI"), "XMI should contain the XMI root element"); // Add more assertions based on the expected structure of your XMI File.WriteAllText(generatedFileName, xmi); @@ -96,7 +94,6 @@ public class ClassDiagramTests // Additional assertions for XMI structure Assert.IsTrue(xmi.Contains("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"), "XMI should contain the XML header"); - //Assert.IsTrue(xmi.Contains("<xmi:XMI"), "XMI should contain the XMI root element"); // Add more assertions based on the expected structure of your XMI File.WriteAllText(generatedFileName, xmi); @@ -128,7 +125,6 @@ public class ClassDiagramTests // Additional assertions for XMI structure Assert.IsTrue(xmi.Contains("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"), "XMI should contain the XML header"); - //Assert.IsTrue(xmi.Contains("<xmi:XMI"), "XMI should contain the XMI root element"); // Add more assertions based on the expected structure of your XMI File.WriteAllText(generatedFileName, xmi); @@ -199,7 +195,7 @@ public class ClassDiagramTests public void BuildDiagramWithMixedAssociationsAndGeneralization(string? targetAssociation, AssociationType type, VisibilityType visibilityType, bool isValid) { var package = ClassDiagramBuilder.AddPackage("TestPackage"); - var class1 = package.AddClass("Class1", false); + _ = package.AddClass("Class1", false); var class2 = package.AddClass("Class2", false); class2.AddAssociation(targetAssociation, "association",visibilityType, type); @@ -223,7 +219,7 @@ public class ClassDiagramTests var package = ClassDiagramBuilder.AddPackage("TestPackage"); // Add classes with the same name (should handle gracefully) - var class1 = package.AddClass("Class1", false); + _ = package.AddClass("Class1", false); Assert.Throws<ArgumentException>(() => package.AddClass("Class1", false)); @@ -264,7 +260,7 @@ public class ClassDiagramTests public void BuildDiagramWithGeneralization() { var package = ClassDiagramBuilder.AddPackage("TestPackage"); - var class1 = package.AddClass("Class1", false); + _ = package.AddClass("Class1", false); var class2 = package.AddClass("Class2", false); class2.AddGeneralization("Class1"); @@ -299,7 +295,7 @@ public class ClassDiagramTests using (XmlReader reader = XmlReader.Create(generatedFileName, settings)) { // Read through the XML document - while (reader.Read()) { } + reader.Read(); } // Assert that there are no errors diff --git a/WebAPI/Controllers/ApiController.cs b/WebAPI/Controllers/ApiController.cs index 4ae5993d04a8d73d0fb7452b7a667bcbdf83c1d1..69eb96f778494515a7596a317265e84e69772cea 100644 --- a/WebAPI/Controllers/ApiController.cs +++ b/WebAPI/Controllers/ApiController.cs @@ -154,9 +154,7 @@ namespace WebAPI.Controllers { var user = TokenManager.GetUser(model.Token, tokenValidityMinutes); using var db = new DatabaseContext(); - - //string to base 64 string - //string codeBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(model.Code)); + var sourceCode = new SourceCode { Code = model.Code, @@ -183,7 +181,6 @@ namespace WebAPI.Controllers using var ms = new MemoryStream(); file.CopyTo(ms); var fileBytes = ms.ToArray(); - string code = System.Text.Encoding.UTF8.GetString(fileBytes); var base64code = Convert.ToBase64String(fileBytes); var sourceCode = new SourceCode { diff --git a/WebAPI/DTO/Attribute/Base64Attribute.cs b/WebAPI/DTO/Attribute/Base64Attribute.cs index 78cbeee9cfecd35ed8d2659ca7262074dc6c25f2..a77dac02d49b972c397e3f4c16e24db9dd8ffd85 100644 --- a/WebAPI/DTO/Attribute/Base64Attribute.cs +++ b/WebAPI/DTO/Attribute/Base64Attribute.cs @@ -11,10 +11,10 @@ public class Base64Attribute : ValidationAttribute { return ValidationResult.Success; } - string stringValue = value.ToString(); + string? stringValue = value.ToString(); try { - var fromBase64String = Convert.FromBase64String(stringValue); + _ = Convert.FromBase64String(stringValue); return ValidationResult.Success; } catch (FormatException) diff --git a/WebAPI/DTO/RegisterUserModel.cs b/WebAPI/DTO/RegisterUserModel.cs index 24e29446a7eb913fec9a03f2bfbf699c4c4fb5d8..40322d7a6a1ca6e96cb6a46cb726daa64a944f5f 100644 --- a/WebAPI/DTO/RegisterUserModel.cs +++ b/WebAPI/DTO/RegisterUserModel.cs @@ -3,7 +3,7 @@ using System.ComponentModel.DataAnnotations; namespace WebAPI.DTO; -public class RegisterUserModel : TokenDTO +public class RegisterUserModel : TokenDto { [DisplayName("Username")] [Required(ErrorMessage = "Username is required")] diff --git a/WebAPI/DTO/RemoveCodeModel.cs b/WebAPI/DTO/RemoveCodeModel.cs index 41c88a28ba6d7cceb411ff1b6d6795ae26daec1b..2f9bdc2e22c53dc7d35d8021160734a061e60401 100644 --- a/WebAPI/DTO/RemoveCodeModel.cs +++ b/WebAPI/DTO/RemoveCodeModel.cs @@ -3,7 +3,7 @@ using System.ComponentModel.DataAnnotations; namespace WebAPI.DTO; -public class RemoveCodeModel : TokenDTO +public class RemoveCodeModel : TokenDto { [DisplayName("Id")] [Required(ErrorMessage = "Id is required")] diff --git a/WebAPI/DTO/TokenDTO.cs b/WebAPI/DTO/TokenDTO.cs index b210b2e5b417b7e42090f40e963893b4d3252e58..0d05f1aaad2328781c0d9c87cd365bb274a36c94 100644 --- a/WebAPI/DTO/TokenDTO.cs +++ b/WebAPI/DTO/TokenDTO.cs @@ -3,7 +3,7 @@ using System.ComponentModel.DataAnnotations; namespace WebAPI.DTO; -public abstract class TokenDTO +public abstract class TokenDto { [DisplayName("Token")] [Required(ErrorMessage = "Token is required")] diff --git a/WebAPI/DTO/UploadCodeModel.cs b/WebAPI/DTO/UploadCodeModel.cs index a7982cc8739455b9888ee4c2d9c914299575c9c8..0849a6ff7a48340e6e40649c0f0bf731ecc9ba98 100644 --- a/WebAPI/DTO/UploadCodeModel.cs +++ b/WebAPI/DTO/UploadCodeModel.cs @@ -4,7 +4,7 @@ using WebAPI.DTO.Attribute; namespace WebAPI.DTO; -public class UploadCodeModel : TokenDTO +public class UploadCodeModel : TokenDto { [DisplayName("Code")] [Required(ErrorMessage = "Code is required")] diff --git a/WebAPI/Utils/TokenManager.cs b/WebAPI/Utils/TokenManager.cs index 091053502632f5b2ab2856206dd344ed23c494a6..fc04aa502ff205f021141788f0fff90690f1ce22 100644 --- a/WebAPI/Utils/TokenManager.cs +++ b/WebAPI/Utils/TokenManager.cs @@ -3,7 +3,7 @@ using Database.Model; namespace WebAPI.Utils; -public class TokenManager +public static class TokenManager { public static bool AssignToken(User user) {