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")); }
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"); }
/// <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); }
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")); }
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); }
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")); }
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"); }
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; }
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)); }
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")); }
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); }
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(); }
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); }
/// <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; }
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 }