/// <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; }