Inheritance: IParser
Example #1
0
        private static void VisualStudio2Uml(IEnumerable <string> paths, string target)
        {
            if (target.Length > 0)
            {
                try {
                    Console.WriteLine("Read: " + target);
                    IUmlObject[] readObjs = new UmlParser().Parse(target).ToArray();
                    Console.WriteLine("Read: " + target);
                } catch (FileNotFoundException ex) {
                    Console.WriteLine(ex.ToString());
                }

                List <IUmlObject> objects = new List <IUmlObject> ();
                for (int _try = 0; _try <= 3 && objects.Count == 0; ++_try)
                {
                    foreach (string _path in paths)
                    {
                        string path = _path;
                        for (int p = 0; p < _try; ++p)
                        {
                            path += "/../";
                        }
                        Console.WriteLine(path);
                        Action <string> processFile = (filename) => {
                            if (filename.Contains("ModelDefinition") && !filename.Contains("ModelingProject"))
                            {
                                Console.WriteLine("Read: " + filename);
                                IParser parser = new VSParser();
                                objects.AddRange(parser.Parse(filename));
                            }
                        };
                        Files.SearchFiles(path, new string[] { ".uml" }, processFile);
                    }
                }
                objects.Sort();
                Console.WriteLine("Write: " + target);
                List <string> lines = new List <string> ();
                foreach (IUmlObject obj in objects.Where((o) => !IsBlacklisted(o.Name)))
                {
                    lines.Add(obj.ToUmlCode());
                    lines.Add("");
                }
                Files.WriteLines(target, lines);
            }
            else
            {
                Console.WriteLine("Error! No target file specified!");
            }
        }
Example #2
0
        private static void Uml2Diagram(IEnumerable <string> paths, string target)
        {
            foreach (string path in paths)
            {
                Console.WriteLine(path);
                string graphdir = target.Length > 0 ? target + "/" : path + "/graphs/";

                List <IUmlObject> allObjects  = new List <IUmlObject> ();
                Action <string>   processFile = (filename) => {
                    if (!filename.Contains("graphs") && !filename.Contains("ModelDefinition"))
                    {
                        IParser parser = new UmlParser();
                        Console.WriteLine("Read: " + filename);
                        allObjects.AddRange(parser.Parse(filename));
                        //foreach (IUmlObject obj in objects) {
                        //	Console.WriteLine (obj);
                        //}
                    }
                };
                Files.SearchFiles(path, new string[] { ".uml" }, processFile);

                Console.WriteLine("Write: " + "classes.dot");
                ClassDiagram allDia = new ClassDiagram(allObjects);
                Files.WriteLines(graphdir + "classes.dot", allDia.DotCode());
                GraphViz.Dot("svg", graphdir + "classes.dot", graphdir + "classes.svg");
                GraphViz.Dot("png", graphdir + "classes.dot", graphdir + "classes.png");

                foreach (UmlClass obj in allObjects.OfType <UmlClass>())
                {
                    string filename = "class-" + obj.Name.Clean();
                    Console.WriteLine("Write: " + filename + ".svg");

                    IEnumerable <IUmlObject> relatedObjects = obj.FindRelated(allObjects);

                    // write class diagram
                    ClassDiagram dia = new ClassDiagram(relatedObjects);
                    Files.WriteLines(graphdir + filename + ".dot", dia.DotCode());
                    GraphViz.Dot("svg", graphdir + filename + ".dot", graphdir + filename + ".svg");

                    // write uml code
                    List <string> lines = new List <string> ();
                    foreach (IUmlObject relObj in relatedObjects)
                    {
                        lines.Add(relObj.ToUmlCode() + "\n");
                    }
                    Files.WriteLines(graphdir + filename + ".uml", lines);
                }
            }
        }
Example #3
0
        private static void Uml2Code(IEnumerable <string> paths, string _target)
        {
            foreach (string path in paths)
            {
                string target = _target.Length > 0 ? _target + "/" : path + "/codegen/";

                Console.WriteLine(path);
                List <IUmlObject> objects     = new List <IUmlObject> ();
                Action <string>   processFile = (filename) => {
                    IParser parser = new UmlParser();
                    objects.AddRange(parser.Parse(filename));
                };
                Files.SearchFiles(path, new string[] { ".uml" }, processFile);

                foreach (IUmlObject obj in objects)
                {
                    List <string> lines = new List <string> ();
                    lines.Add(obj.ToCSharpCode() + "\n");
                    string genfile = target + Packages.GetPackage(obj.Name).Replace(".", "/") + "/" + obj.Name.Clean() + ".cs";
                    Console.WriteLine("Write: " + genfile);
                    Files.WriteLines(genfile, lines);
                }
            }
        }
Example #4
0
        private static void VisualStudio2Uml(IEnumerable<string> paths, string target)
        {
            if (target.Length > 0) {
                try {
                    Console.WriteLine ("Read: " + target);
                    IUmlObject[] readObjs = new UmlParser ().Parse (target).ToArray ();
                    Console.WriteLine ("Read: " + target);
                } catch (FileNotFoundException ex) {
                    Console.WriteLine (ex.ToString ());
                }

                List<IUmlObject> objects = new List<IUmlObject> ();
                for (int _try = 0; _try <= 3 && objects.Count == 0; ++_try) {
                    foreach (string _path in paths) {
                        string path = _path;
                        for (int p = 0; p < _try; ++p)
                            path += "/../";
                        Console.WriteLine (path);
                        Action<string> processFile = (filename) => {
                            if (filename.Contains ("ModelDefinition") && !filename.Contains ("ModelingProject")) {
                                Console.WriteLine ("Read: " + filename);
                                IParser parser = new VSParser ();
                                objects.AddRange (parser.Parse (filename));
                            }
                        };
                        Files.SearchFiles (path, new string[]{".uml"}, processFile);
                    }
                }
                objects.Sort ();
                Console.WriteLine ("Write: " + target);
                List<string> lines = new List<string> ();
                foreach (IUmlObject obj in objects.Where ((o) => !IsBlacklisted(o.Name))) {
                    lines.Add (obj.ToUmlCode ());
                    lines.Add ("");
                }
                Files.WriteLines (target, lines);
            } else {
                Console.WriteLine ("Error! No target file specified!");
            }
        }
Example #5
0
        private static void Uml2Tex(IEnumerable<string> umlfiles, string target)
        {
            List<IUmlObject> allObjects = new List<IUmlObject> ();
            foreach (string umlfile in umlfiles) {
                IParser parser = new UmlParser ();
                Console.WriteLine ("Read: " + umlfile);
                allObjects.AddRange (parser.Parse (umlfile));
            }

            Console.WriteLine ("Write: " + target);
            List<string> lines = new List<string> ();
            lines.AddRange (UmlObject.TexHeader);
            foreach (string package in Packages.PackageMap.Keys) {
                lines.Add (@"\section{Paket " + package + @"}");

                lines.Add (@"\subsection{Klassen}");
                foreach (UmlClass obj in allObjects.OfType<UmlClass>().Where((c) => Packages.IsInPackage(package, c.Name))) {
                    if (obj.type != ClassType.Interface) {
                        lines.Add (obj.ToTexCode ());
                        lines.Add ("");
                    }
                }
                lines.Add (@"\subsection{Schnittstellen}");
                foreach (UmlClass obj in allObjects.OfType<UmlClass>().Where((c) => Packages.IsInPackage(package, c.Name))) {
                    if (obj.type == ClassType.Interface) {
                        lines.Add (obj.ToTexCode ());
                        lines.Add ("");
                    }
                }
                lines.Add (@"\subsection{Enumerationen}");
                foreach (UmlEnum obj in allObjects.OfType<UmlEnum>().Where((c) => Packages.IsInPackage(package, c.Name))) {
                    lines.Add (obj.ToTexCode ());
                    lines.Add ("");
                }
            }

            Files.WriteLines (target, lines);

            lines.Clear ();

            newCommand (ref lines, "CountClasses", "" + allObjects.OfType<UmlClass> ()
                .Where ((o) => o.type == ClassType.Class).Count ()
            );
            newCommand (ref lines, "CountInterfaces", "" + allObjects.OfType<UmlClass> ()
                .Where ((o) => o.type == ClassType.Interface).Count ()
            );
            newCommand (ref lines, "CountEnums", "" + allObjects.OfType<UmlEnum> ()
                .Count ()
            );
            newCommand (ref lines, "CountAll", ""
                + (allObjects.OfType<UmlClass> ()
                .Where ((o) => o.type == ClassType.Class).Count ()
                + allObjects.OfType<UmlClass> ()
                .Where ((o) => o.type == ClassType.Interface).Count ()
                + allObjects.OfType<UmlEnum> () /* Strukturen? */
                .Count ())
            );

            Files.WriteLines (Path.GetDirectoryName (target) + "/Definitionen.gentex", lines);

            if (IsRunningOnMono ()) {
                foreach (UmlClass obj in allObjects.OfType<UmlClass>()) {
                    // write class diagram
                    ClassDiagram dia = new ClassDiagram (new IUmlObject[] { obj });
                    string filename = Path.GetDirectoryName (target) + "/Klassen/" + obj.Name.Clean ();
                    Files.WriteLines (filename + ".dot", dia.DotCode ("", "ffffff", 200));
                    //GraphViz.Dot ("svg", filename + ".dot", filename + ".svg");
                    //GraphViz.Dot ("jpg", filename + ".dot", filename + ".jpg");
                    //GraphViz.Dot ("png", filename + ".dot", filename + ".png");
                    GraphViz.Dot ("svg", filename + ".dot", filename + ".svg");
                    //GraphViz.Convert ("-density 100", "svg:" + filename + ".svg", filename + ".png");
                    //GraphViz.RsvgConvert ("--dpi-x 120", "--dpi-y 120", filename + ".svg", ">", filename + ".png");
                    GraphViz.InkScape ("--export-png=" + filename + ".png", "--export-dpi=150", filename + ".svg");
                }
            }
        }
Example #6
0
        private static void Uml2Diagram(IEnumerable<string> paths, string target)
        {
            foreach (string path in paths) {
                Console.WriteLine (path);
                string graphdir = target.Length > 0 ? target + "/" : path + "/graphs/";

                List<IUmlObject> allObjects = new List<IUmlObject> ();
                Action<string> processFile = (filename) => {
                    if (!filename.Contains ("graphs") && !filename.Contains ("ModelDefinition")) {
                        IParser parser = new UmlParser ();
                        Console.WriteLine ("Read: " + filename);
                        allObjects.AddRange (parser.Parse (filename));
                        //foreach (IUmlObject obj in objects) {
                        //	Console.WriteLine (obj);
                        //}
                    }
                };
                Files.SearchFiles (path, new string[]{".uml"}, processFile);

                Console.WriteLine ("Write: " + "classes.dot");
                ClassDiagram allDia = new ClassDiagram (allObjects);
                Files.WriteLines (graphdir + "classes.dot", allDia.DotCode ());
                GraphViz.Dot ("svg", graphdir + "classes.dot", graphdir + "classes.svg");
                GraphViz.Dot ("png", graphdir + "classes.dot", graphdir + "classes.png");

                foreach (UmlClass obj in allObjects.OfType<UmlClass>()) {
                    string filename = "class-" + obj.Name.Clean ();
                    Console.WriteLine ("Write: " + filename + ".svg");

                    IEnumerable<IUmlObject> relatedObjects = obj.FindRelated (allObjects);

                    // write class diagram
                    ClassDiagram dia = new ClassDiagram (relatedObjects);
                    Files.WriteLines (graphdir + filename + ".dot", dia.DotCode ());
                    GraphViz.Dot ("svg", graphdir + filename + ".dot", graphdir + filename + ".svg");

                    // write uml code
                    List<string> lines = new List<string> ();
                    foreach (IUmlObject relObj in relatedObjects) {
                        lines.Add (relObj.ToUmlCode () + "\n");
                    }
                    Files.WriteLines (graphdir + filename + ".uml", lines);
                }
            }
        }
Example #7
0
        private static void Uml2Code(IEnumerable<string> paths, string _target)
        {
            foreach (string path in paths) {
                string target = _target.Length > 0 ? _target + "/" : path + "/codegen/";

                Console.WriteLine (path);
                List<IUmlObject> objects = new List<IUmlObject> ();
                Action<string> processFile = (filename) => {
                    IParser parser = new UmlParser ();
                    objects.AddRange (parser.Parse (filename));
                };
                Files.SearchFiles (path, new string[]{".uml"}, processFile);

                foreach (IUmlObject obj in objects) {
                    List<string> lines = new List<string> ();
                    lines.Add (obj.ToCSharpCode () + "\n");
                    string genfile = target + Packages.GetPackage (obj.Name).Replace (".", "/") + "/" + obj.Name.Clean () + ".cs";
                    Console.WriteLine ("Write: " + genfile);
                    Files.WriteLines (genfile, lines);
                }
            }
        }
Example #8
0
        private static void Uml2Tex(IEnumerable <string> umlfiles, string target)
        {
            List <IUmlObject> allObjects = new List <IUmlObject> ();

            foreach (string umlfile in umlfiles)
            {
                IParser parser = new UmlParser();
                Console.WriteLine("Read: " + umlfile);
                allObjects.AddRange(parser.Parse(umlfile));
            }

            Console.WriteLine("Write: " + target);
            List <string> lines = new List <string> ();

            lines.AddRange(UmlObject.TexHeader);
            foreach (string package in Packages.PackageMap.Keys)
            {
                lines.Add(@"\section{Paket " + package + @"}");

                lines.Add(@"\subsection{Klassen}");
                foreach (UmlClass obj in allObjects.OfType <UmlClass>().Where((c) => Packages.IsInPackage(package, c.Name)))
                {
                    if (obj.type != ClassType.Interface)
                    {
                        lines.Add(obj.ToTexCode());
                        lines.Add("");
                    }
                }
                lines.Add(@"\subsection{Schnittstellen}");
                foreach (UmlClass obj in allObjects.OfType <UmlClass>().Where((c) => Packages.IsInPackage(package, c.Name)))
                {
                    if (obj.type == ClassType.Interface)
                    {
                        lines.Add(obj.ToTexCode());
                        lines.Add("");
                    }
                }
                lines.Add(@"\subsection{Enumerationen}");
                foreach (UmlEnum obj in allObjects.OfType <UmlEnum>().Where((c) => Packages.IsInPackage(package, c.Name)))
                {
                    lines.Add(obj.ToTexCode());
                    lines.Add("");
                }
            }

            Files.WriteLines(target, lines);

            lines.Clear();

            newCommand(ref lines, "CountClasses", "" + allObjects.OfType <UmlClass> ()
                       .Where((o) => o.type == ClassType.Class).Count()
                       );
            newCommand(ref lines, "CountInterfaces", "" + allObjects.OfType <UmlClass> ()
                       .Where((o) => o.type == ClassType.Interface).Count()
                       );
            newCommand(ref lines, "CountEnums", "" + allObjects.OfType <UmlEnum> ()
                       .Count()
                       );
            newCommand(ref lines, "CountAll", ""
                       + (allObjects.OfType <UmlClass> ()
                          .Where((o) => o.type == ClassType.Class).Count()
                          + allObjects.OfType <UmlClass> ()
                          .Where((o) => o.type == ClassType.Interface).Count()
                          + allObjects.OfType <UmlEnum> ()      /* Strukturen? */
                          .Count())
                       );

            Files.WriteLines(Path.GetDirectoryName(target) + "/Definitionen.gentex", lines);

            if (IsRunningOnMono())
            {
                foreach (UmlClass obj in allObjects.OfType <UmlClass>())
                {
                    // write class diagram
                    ClassDiagram dia      = new ClassDiagram(new IUmlObject[] { obj });
                    string       filename = Path.GetDirectoryName(target) + "/Klassen/" + obj.Name.Clean();
                    Files.WriteLines(filename + ".dot", dia.DotCode("", "ffffff", 200));
                    //GraphViz.Dot ("svg", filename + ".dot", filename + ".svg");
                    //GraphViz.Dot ("jpg", filename + ".dot", filename + ".jpg");
                    //GraphViz.Dot ("png", filename + ".dot", filename + ".png");
                    GraphViz.Dot("svg", filename + ".dot", filename + ".svg");
                    //GraphViz.Convert ("-density 100", "svg:" + filename + ".svg", filename + ".png");
                    //GraphViz.RsvgConvert ("--dpi-x 120", "--dpi-y 120", filename + ".svg", ">", filename + ".png");
                    GraphViz.InkScape("--export-png=" + filename + ".png", "--export-dpi=150", filename + ".svg");
                }
            }
        }