/// <summary> /// Creates a simple extent containing three elements with four properties /// </summary> /// <returns>The created uri extent</returns> private static IUriExtent CreateSimpleCsvExtent() { var csvFile = "eins 1 one\r\nzwei 2 two\r\ndrei 3 three\r\nvier 4 four\r\n"; File.WriteAllText("data.txt", csvFile); var mapper = new ManualConfigurationToExtentStorageMapper(); mapper.AddMapping(typeof (CSVStorageConfiguration), scope => new CSVStorage(null, null)); DataLayers dataLayers; var dataLayerLogic = DataLayerLogic.InitDefault(out dataLayers); var data = new ExtentStorageData(); var logic = new ExtentStorageLoader(data, mapper, dataLayerLogic); var configuration = new CSVStorageConfiguration() { Path = "data.txt", ExtentUri = "dm:///local/", Settings = { HasHeader = false, Separator = ' ' } }; var csvExtent = logic.LoadExtent(configuration); return csvExtent; }
public void TestFactoryMappingByAttributeForExtentLoaders() { var kernel = new ContainerBuilder(); var builder = kernel.UseDatenMeisterDotNet(new IntegrationSettings {PathToXmiFiles = "Xmi"}); using (var scope = builder.BeginLifetimeScope()) { var mapper = new ManualConfigurationToExtentStorageMapper(); mapper.PerformMappingForConfigurationOfExtentLoaders(); Assert.That(mapper.HasMappingFor(typeof(CSVStorageConfiguration)), Is.True); Assert.That(mapper.HasMappingFor(typeof(CSVDataProvider)), Is.False); } }
public void TestExtentStorageLogic() { var csvFile = "eins 1 one\r\nzwei 2 two\r\ndrei 3 three\r\nvier 4 four\r\n"; File.WriteAllText("data.txt", csvFile); var mapper = new ManualConfigurationToExtentStorageMapper(); mapper.AddMapping(typeof (CSVStorageConfiguration), scope => new CSVStorage(null, null)); DataLayers dataLayers; var dataLayerLogic = DataLayerLogic.InitDefault(out dataLayers); var data = new ExtentStorageData(); var logic = new ExtentStorageLoader(data, mapper, dataLayerLogic); var configuration = new CSVStorageConfiguration() { Path = "data.txt", ExtentUri = "dm:///local/", Settings = { HasHeader = false, Separator = ' ' } }; var csvExtent = logic.LoadExtent(configuration); Assert.That(csvExtent, Is.Not.Null); Assert.That(csvExtent.elements().Count(), Is.EqualTo(4)); logic.StoreExtent(csvExtent); // Changes content, store it and check, if stored (csvExtent.elements().ElementAt(0) as IObject).set(configuration.Settings.Columns[0], "eens"); logic.StoreAll(); var read = File.ReadAllText("data.txt"); Assert.That(read.Contains("eens"), Is.True); }
public IContainer UseDatenMeister(ContainerBuilder kernel) { if (_settings == null) { Debug.WriteLine("No integration settings were given. Loading the default values."); _settings = new IntegrationSettings(); } kernel.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource()); var watch = new Stopwatch(); watch.Start(); // Defines the factory method for a certain extent type var factoryMapper = new DefaultFactoryMapper(); kernel.RegisterInstance(factoryMapper).As<IFactoryMapper>(); // Finds the loader for a certain extent type var storageMap = new ManualConfigurationToExtentStorageMapper(); kernel.RegisterInstance(storageMap).As<IConfigurationToExtentStorageMapper>(); // Workspace collection var workspaceCollection = new WorkspaceCollection(); workspaceCollection.Init(); kernel.RegisterInstance(workspaceCollection).As<IWorkspaceCollection>(); // Defines the extent storage data var extentStorageData = new ExtentStorageData(); kernel.RegisterInstance(extentStorageData).As<ExtentStorageData>(); kernel.RegisterType<ExtentStorageLoader>().As<IExtentStorageLoader>(); // Defines the datalayers var dataLayers = new DataLayers(); kernel.RegisterInstance(dataLayers).As<DataLayers>(); var dataLayerData = new DataLayerData(dataLayers); kernel.RegisterInstance(dataLayerData).As<DataLayerData>(); kernel.RegisterType<DataLayerLogic>().As<IDataLayerLogic>(); // Adds the name resolution kernel.RegisterType<UmlNameResolution>().As<IUmlNameResolution>(); var builder = kernel.Build(); using (var scope = builder.BeginLifetimeScope()) { // Is used by .Net Provider to include the mappings for extent storages and factory types _settings?.Hooks?.OnStartScope(scope); var dataLayerLogic = scope.Resolve<IDataLayerLogic>(); dataLayers.SetRelationsForDefaultDataLayers(dataLayerLogic); // Load the default extents // Performs the bootstrap var paths = new Bootstrapper.FilePaths() { PathPrimitive = Path.Combine(_settings.PathToXmiFiles, "PrimitiveTypes.xmi"), PathUml = Path.Combine(_settings.PathToXmiFiles, "UML.xmi"), PathMof = Path.Combine(_settings.PathToXmiFiles, "MOF.xmi") }; if (_settings.PerformSlimIntegration) { throw new InvalidOperationException("Slim integration is currently not supported"); } else { Bootstrapper.PerformFullBootstrap( paths, workspaceCollection.GetWorkspace("UML"), dataLayerLogic, dataLayers.Uml); Bootstrapper.PerformFullBootstrap( paths, workspaceCollection.GetWorkspace("MOF"), dataLayerLogic, dataLayers.Mof); } // Creates the workspace and extent for the types layer which are belonging to the types var extentTypes = new MofUriExtent("dm:///types"); var typeWorkspace = workspaceCollection.GetWorkspace("Types"); typeWorkspace.AddExtent(extentTypes); dataLayerLogic.AssignToDataLayer(extentTypes, dataLayers.Types); // Boots up the typical DatenMeister Environment if (_settings.EstablishDataEnvironment) { EstablishDataEnvironment(builder, scope); } } watch.Stop(); Debug.WriteLine($"Elapsed time for bootstrap: {watch.Elapsed}"); return builder; }