예제 #1
0
        public void TestDotNetTypeCreation()
        {
            _MOF mof;
            _UML uml;
            XmiTests.CreateUmlAndMofInstance(out mof, out uml);

            var mofFactory = new MofFactory();
            var dotNetTypeCreator = new DotNetTypeGenerator(mofFactory, uml);
            var dotNetClass = dotNetTypeCreator.CreateTypeFor(typeof(ZipCode));

            Assert.That(dotNetClass.get(_UML._CommonStructure._NamedElement.name), Is.EqualTo("ZipCode"));

            var ownedAttributes = dotNetClass.get(_UML._Classification._Classifier.attribute) as IEnumerable<object>;
            Assert.That(ownedAttributes, Is.Not.Null);

            var asList = ownedAttributes.ToList();
            Assert.That(asList.Count, Is.GreaterThanOrEqualTo(5));

            Assert.That(asList[0] as IElement, Is.Not.Null);
            var firstProperty = (asList[0] as IElement).get(_UML._CommonStructure._NamedElement.name);
            Assert.That(firstProperty, Is.Not.Null);
            Assert.That(firstProperty.ToString(), Is.EqualTo("Id"));

            Assert.That(asList[1] as IElement, Is.Not.Null);
            var secondProperty = (asList[1] as IElement).get(_UML._CommonStructure._NamedElement.name);
            Assert.That(secondProperty, Is.Not.Null);
            Assert.That(secondProperty.ToString(), Is.EqualTo("Zip"));
        }
예제 #2
0
        public void LoadZipCodes(Stream stream)
        {
            var csvSettings = new CSVSettings
            {
                Encoding = "UTF-8",
                Separator = '\t',
                HasHeader = false
            };

            ZipCodes = new MofUriExtent("datenmeister:///zipcodes");
            var factory = new MofFactory();

            var csvProvider = new CSVDataProvider(null, null);

            csvProvider.Load(
                ZipCodes,
                factory,
                stream,
                csvSettings);

            Columns.ZipCode = csvSettings.Columns[1];
            Columns.Name = csvSettings.Columns[4];

            Debug.WriteLine($"Loaded: {ZipCodes.elements().Count()} Zipcodes");
        }
예제 #3
0
        /// <summary>
        /// Integrates the Types into the extent
        /// </summary>
        /// <param name="typeExtent">Extent to be used</param>
        public void Into(IExtent typeExtent)
        {
            var layerOfTypes = _dataLayerLogic.GetDataLayerOfExtent(typeExtent);
            var layerOfUml = _dataLayerLogic.GetMetaLayerFor(layerOfTypes);
            var uml = _dataLayerLogic.Get<_UML>(layerOfUml);
            var factory = new MofFactory();

            var typeProvider = new DotNetTypeGenerator(factory, uml);
            var typeForZipCodes = typeProvider.CreateTypeFor(typeof (Model.ZipCode));
            typeExtent.elements().add(typeForZipCodes);
        }
예제 #4
0
        public void LoadUmlInfrastructure()
        {
            var factory = new MofFactory();
            var extent = new MofUriExtent("datenmeister:///target");
            Assert.That(extent.elements().Count(), Is.EqualTo(0));
            var loader = new SimpleLoader(factory);
            loader.Load(extent, "Xmi/UML.xmi");

            var firstElement = (extent.elements().ElementAt(0) as IObject);
            Assert.That(firstElement, Is.Not.Null);
            Assert.That(firstElement.get("name").ToString(), Is.EqualTo("UML"));
        }
예제 #5
0
        public void Start()
        {
            var typeExtent = _workspaceCollection.FindExtent("dm:///types");
            var layerOfTypes = _dataLayerLogic.GetDataLayerOfExtent(typeExtent);
            var layerOfUml = _dataLayerLogic.GetMetaLayerFor(layerOfTypes);
            var uml = _dataLayerLogic.Get<_UML>(layerOfUml);
            var factory = new MofFactory();

            var typeProvider = new DotNetTypeGenerator(factory, uml);
            var typeForZipCodes = typeProvider.CreateTypeFor(typeof(Model.ZipCode));
            typeExtent.elements().add(typeForZipCodes);
        }
예제 #6
0
        public void TestDotNetTypeCreation()
        {
            _MOF mof;
            _UML uml;
            XmiTests.CreateUmlAndMofInstance(out mof, out uml);

            var mofFactory= new MofFactory();
            var dotNetTypeCreator = new DotNetTypeGenerator(mofFactory, uml);
            var dotNetClass = dotNetTypeCreator.CreateTypeFor(typeof (TestClass));

            Assert.That(dotNetClass.get(_UML._CommonStructure._NamedElement.name), Is.EqualTo("TestClass"));
        }
예제 #7
0
        private static void TestFillTree()
        {
            var watch = new Stopwatch();
            watch.Start();
            var factory = new MofFactory();
            var mofExtent = new MofUriExtent("datenmeister:///mof");
            var umlExtent = new MofUriExtent("datenmeister:///uml");
            var loader = new SimpleLoader(factory);
            loader.Load(mofExtent, "data/MOF.xmi");
            loader.Load(mofExtent, "data/UML.xmi");

            var mof = new _MOF();
            var uml = new _UML();
            FillTheMOF.DoFill(mofExtent.elements(), mof);
            FillTheUML.DoFill(umlExtent.elements(), uml);

            watch.Stop();
            System.Console.WriteLine($"Elapsed Time for MOF and UML Fill {watch.ElapsedMilliseconds.ToString("n0")} ms");
        }
예제 #8
0
        public IUriExtent LoadExtent(ExtentStorageConfiguration configuration, bool createAlsoEmpty)
        {
            var csvConfiguration = (CSVStorageConfiguration) configuration;
            var provider = new CSVDataProvider(_workspaceCollection, _dataLayerLogic);
            var mofExtent = new MofUriExtent(csvConfiguration.ExtentUri);
            var factory = new MofFactory();

            var doesFileExist = File.Exists(csvConfiguration.Path);
            if (doesFileExist)
            {
                provider.Load(mofExtent, factory, csvConfiguration.Path, csvConfiguration.Settings);
            }
            else if (!createAlsoEmpty)
            {
                throw new InvalidOperationException(
                    $"File does not exist and empty extents is not given in argument {nameof(createAlsoEmpty)}");
            }

            return mofExtent;
        }
예제 #9
0
        public void TestFindByUri()
        {
            var workspace = new Workspace<IExtent>("data", "No annotation");

            var extent = new MofUriExtent("http://test/");
            var factory = new MofFactory();
            var element = factory.create(null);
            extent.elements().add(element);

            workspace.AddExtent(extent);

            var elementAsMofElement = (MofElement) element;
            var guid = elementAsMofElement.Id;

            // Now check, if everything is working
            var found = extent.element("http://test/#" + guid);
            Assert.That(found, Is.EqualTo(element));

            var anotherFound = workspace.FindElementByUri("http://test/#" + guid);
            Assert.That(anotherFound, Is.EqualTo(element));
        }
예제 #10
0
        public void TestCopyOfObject()
        {
            var factory = new MofFactory();

            var mofObject = new MofElement();
            mofObject.set(property1, "55130");
            mofObject.set(property2, "Mainz");

            var mofObject2 = new MofElement();
            mofObject2.set(property1, "65474");
            mofObject2.set(property2, "Bischofsheim");

            var copier = new ObjectCopier(factory);
            var result1 = copier.Copy(mofObject);
            var result2 = copier.Copy(mofObject2);

            Assert.That(result1, Is.Not.Null);
            Assert.That(result1.get(property1).ToString(), Is.EqualTo("55130"));
            Assert.That(result1.get(property2).ToString(), Is.EqualTo("Mainz"));
            Assert.That(result2.get(property1).ToString(), Is.EqualTo("65474"));
            Assert.That(result2.get(property2).ToString(), Is.EqualTo("Bischofsheim"));
        }
예제 #11
0
        public void TestIdValidity()
        {
            var factory = new MofFactory();

            var document = XDocument.Load("Xmi/MOF.xmi");
            Assert.That(XmiId.IsValid(document), Is.True);

            // Adds an artificial node, which duplicates an id.
            document.Root.Add(
                new XElement ("other", new XAttribute(Namespaces.Xmi + "id", "_MOF-Identifiers-Extent")));

            Assert.That(XmiId.IsValid(document), Is.False);
        }
예제 #12
0
        private static void TestZipCodes()
        {
            // Checks the loading of the PLZ
            System.Console.WriteLine("Loading the Zip codes");

            var extent = new MofUriExtent("mof:///plz");
            var factory = new MofFactory();

            var csvSettings = new CSVSettings
            {
                Encoding = "ISO-8859-1",
                Separator = '\t',
                HasHeader = false
            };

            var provider = new CSVDataProvider(null, null);
            provider.Load(extent, factory, "data/plz.csv", csvSettings);

            System.Console.WriteLine($"Loaded: {extent.elements().Count().ToString()} Zipcodes");

            System.Console.WriteLine();
        }
예제 #13
0
        public static void GenerateSourceFor(SourceGeneratorOptions options)
        {
            var uml = new _UML();
            var extent = new MofUriExtent("dm:///sourcegenerator");
            var factory = new MofFactory();

            // Creates the dotnet types to real MOF Types
            var dotNetProvider = new DotNetTypeGenerator(factory, uml);
            var package = factory.create(uml.Packages.__Package);
            package.set("name", options.Name);

            // Do the conversion
            var elements = new List<IElement>();
            foreach (var type in options.Types)
            {
                var typeObject = dotNetProvider.CreateTypeFor(type);
                elements.Add(typeObject);
            }

            package.set(_UML._Packages._Package.packagedElement, elements);

            // Adds the package
            extent.elements().add(package);

            var sourceParser = new ElementSourceParser(uml);

            // Creates the class tree
            var classTreeGenerator = new ClassTreeGenerator(sourceParser)
            {
                Namespace = options.Namespace
            };

            classTreeGenerator.Walk(extent);
            var sourceClass = classTreeGenerator.Result.ToString();

            var pathOfClassTree =
                Path.ChangeExtension(
                    Path.Combine(
                        options.Path,
                        options.Name),
                    ".class.cs");

            File.WriteAllText(pathOfClassTree, sourceClass);

            // Creates now the filler
            var fillerGenerator = new FillClassTreeByExtentCreator(options.Name + "Filler", sourceParser)
            {
                Namespace = options.Namespace,
                ClassNameOfTree = classTreeGenerator.UsedClassName
            };

            fillerGenerator.Walk(extent);
            var sourceFiller = fillerGenerator.Result.ToString();

            var pathOfFillerTree =
                Path.ChangeExtension(
                    Path.Combine(
                        options.Path,
                        options.Name),
                    ".filler.cs");

            File.WriteAllText(pathOfFillerTree, sourceFiller);
        }
예제 #14
0
        /// <summary>
        ///     Performs a full bootstrap by reading in the uml class
        /// </summary>
        /// <param name="paths">Paths storing the uml information</param>
        /// <param name="dataLayerLogic">The datalayer logic to be used</param>
        /// <param name="dataLayer">The datalayer to be filled before the bootstrap itself</param>
        /// <returns>The instance of the bootstrapper</returns>
        public static Bootstrapper PerformFullBootstrap(
            FilePaths paths,
            IDataLayerLogic dataLayerLogic,
            IDataLayer dataLayer)
        {
            var factory = new MofFactory();
            var umlExtent = new MofUriExtent("datenmeister:///uml");
            var mofExtent = new MofUriExtent("datenmeister:///mof");
            var primitiveExtent = new MofUriExtent("datenmeister:///prototypes");
            var loader = new SimpleLoader(factory);
            loader.Load(primitiveExtent, paths.PathPrimitive);
            loader.Load(umlExtent, paths.PathUml);
            loader.Load(mofExtent, paths.PathMof);

            // Assigns the extents to the datalayer
            if (dataLayer != null && dataLayerLogic != null)
            {
                dataLayerLogic.AssignToDataLayer(mofExtent, dataLayer);
                dataLayerLogic.AssignToDataLayer(umlExtent, dataLayer);
                dataLayerLogic.AssignToDataLayer(primitiveExtent, dataLayer);
                dataLayerLogic.Create<FillTheMOF, _MOF>(dataLayer);
                dataLayerLogic.Create<FillTheUML, _UML>(dataLayer);
                dataLayerLogic.Create<FillThePrimitiveTypes, _PrimitiveTypes>(dataLayer);

                var dmml = new DmML();
                UmlToDmMLConverter.Convert(dataLayerLogic.Get<_UML>(dataLayer), dmml);
                dataLayerLogic.Set(dataLayer, dmml);
            }
            else
            {
                // To support the creation of _MOF and _UML, we need to have datalayers and their logic
                throw new InvalidOperationException("datalayers or dataLayerLogic is null");
            }

            // Now do the bootstrap
            var bootStrapper = new Bootstrapper(primitiveExtent, umlExtent, mofExtent, dataLayerLogic);
            bootStrapper.Strap();
            return bootStrapper;
        }
예제 #15
0
        public static void Main(string[] args)
        {
            var factory = new MofFactory();
            var umlExtent = new MofUriExtent("datenmeister:///uml");
            var mofExtent = new MofUriExtent("datenmeister:///mof");
            var primitiveTypeExtent = new MofUriExtent("datenmeister:///primitivetypes");
            var loader = new SimpleLoader(factory);
            loader.Load(umlExtent, "data/UML.xmi");
            loader.Load(mofExtent, "data/MOF.xmi");
            loader.Load(primitiveTypeExtent, "data/PrimitiveTypes.xmi");

            // Generates tree for UML
            var generator = new ClassTreeGenerator
            {
                Namespace = "DatenMeister"
            };

            generator.Walk(umlExtent);

            var extentCreator = new FillClassTreeByExtentCreator("DatenMeister._UML")
            {
                Namespace = "DatenMeister.Filler"
            };
            extentCreator.Walk(umlExtent);

            File.WriteAllText("../../uml.cs", generator.Result.ToString());
            File.WriteAllText("../../FillTheUML.cs", extentCreator.Result.ToString());
            Console.WriteLine("C# Code for UML written");

            // Generates tree for MOF
            generator = new ClassTreeGenerator
            {
                Namespace = "DatenMeister"
            };
            generator.Walk(mofExtent);

            extentCreator = new FillClassTreeByExtentCreator("DatenMeister._MOF")
            {
                Namespace = "DatenMeister.Filler"
            };

            extentCreator.Walk(mofExtent);

            File.WriteAllText("../../mof.cs", generator.Result.ToString());
            File.WriteAllText("../../FillTheMOF.cs", extentCreator.Result.ToString());
            Console.WriteLine("C# Code for MOF written");

            // Generates tree for PrimitiveTypes
            generator = new ClassTreeGenerator
            {
                Namespace = "DatenMeister"
            };
            generator.Walk(primitiveTypeExtent);

            extentCreator = new FillClassTreeByExtentCreator("DatenMeister._PrimitiveTypes")
            {
                Namespace = "DatenMeister.Filler"
            };

            extentCreator.Walk(primitiveTypeExtent);

            File.WriteAllText("../../primitivetypes.cs", generator.Result.ToString());
            File.WriteAllText("../../FillThePrimitiveTypes.cs", extentCreator.Result.ToString());
            Console.WriteLine("C# Code for PrimitiveTypes written");

            #if !DEBUG
            File.Copy("../../primitivetypes.cs", "../../../DatenMeister/Filler/primitivetypes.cs", true);
            File.Copy("../../FillThePrimitiveTypes.cs", "../../../DatenMeister/Filler/FillThePrimitiveTypes.cs", true);
            File.Copy("../../mof.cs", "../../../DatenMeister/Filler/mof.cs", true);
            File.Copy("../../FillTheMOF.cs", "../../../DatenMeister/Filler/FillTheMOF.cs", true);
            File.Copy("../../uml.cs", "../../../DatenMeister/Filler/uml.cs", true);
            File.Copy("../../FillTheUML.cs", "../../../DatenMeister/Filler/FillTheUML.cs", true);
            #endif
        }