protected override void Load(string fileName, bool isReload) { MetaModel.BaseGlobalDirectory = MetaModelLibraryBase.GetBaseDirectory(fileName); LoadVModell(fileName, isReload); MetaModel model = this.RootElement as MetaModel; model.IsTopMost = true; // set locks to imported libraries SetLocksToImportedLibraries(model); // create model data, store and view model ModelData = new ModelData(model); ViewModelStore = new ViewModelStore(ModelData); ViewModel = new MainSurfaceViewModel(ViewModelStore); // register known windows try { IUIVisualizerService popupVisualizer = ViewModel.GlobalServiceProvider.Resolve <IUIVisualizerService>(); popupVisualizer.Register("TargetSelectorForm", typeof(TargetSelectorForm)); popupVisualizer.Register("CategorizedSelectionPopup", typeof(CategorizedSelectionPopup)); popupVisualizer.Register("DiagramClassTemplateSelector", typeof(DiagramClassTemplateSelector)); popupVisualizer.Register("DataTemplatePresetsPopup", typeof(DataTemplatePresetsPopup)); popupVisualizer.Register("OptimizationControl", typeof(OptimizationControl)); } catch { } }
private void SetLocksToImportedLibraries(MetaModel model) { ReadOnlyCollection <ModelElement> elements = model.Store.ElementDirectory.FindElements(MetaModel.DomainClassId); foreach (ModelElement m in elements) { MetaModel meta = m as MetaModel; if (meta != model && meta != null) { MetaModelLibraryBase.SetLocks(meta, Locks.All); } } }
protected override void OnValueChanged(MetaModelLibraryBase element, string oldValue, string newValue) { base.OnValueChanged(element, oldValue, newValue); if (element.Store.InSerializationTransaction || element.Store.InUndoRedoOrRollback || (element.MetaModel == null)) { return; } if (!System.String.IsNullOrWhiteSpace(newValue) && (element.ImportedLibrary == null)) { element.LoadLibrary(); } }
protected override void OnValueChanging(MetaModelLibraryBase element, string oldValue, string newValue) { if (element.Store.InSerializationTransaction || element.Store.InUndoRedoOrRollback || (element.MetaModel == null)) { base.OnValueChanging(element, oldValue, newValue); return; } if (element.ImportedLibrary != null) { element.UnloadLibrary(); } base.OnValueChanging(element, oldValue, newValue); }
protected override void OnValueChanged(MetaModelLibraryBase element, string oldValue, string newValue) { base.OnValueChanged(element, oldValue, newValue); if (element.Store.InSerializationTransaction || element.Store.InUndoRedoOrRollback || (element.MetaModel == null)) return; if (!System.String.IsNullOrWhiteSpace(newValue) && (element.ImportedLibrary == null)) element.LoadLibrary(); }
public MetaModel LoadModel(DslModeling::SerializationResult serializationResult, DslModeling::Partition partition, string fileName, DslModeling::ISchemaResolver schemaResolver, DslValidation::ValidationController validationController, DslModeling::ISerializerLocator serializerLocator, bool bStartT, bool bIsTopMost) { #region Model #region Check Parameters if (serializationResult == null) throw new global::System.ArgumentNullException("serializationResult"); if (partition == null) throw new global::System.ArgumentNullException("partition"); if (string.IsNullOrEmpty(fileName)) throw new global::System.ArgumentNullException("fileName"); #endregion // Ensure there is a transaction for this model to Load in. if (!partition.Store.TransactionActive) { throw new global::System.InvalidOperationException(LanguageDSLDomainModel.SingletonResourceManager.GetString("MissingTransaction")); } MetaModel modelRoot = null; DslModeling::DomainXmlSerializerDirectory directory = this.GetDirectory(partition.Store); DslModeling::DomainClassXmlSerializer modelRootSerializer = directory.GetSerializer(MetaModel.DomainClassId); global::System.Diagnostics.Debug.Assert(modelRootSerializer != null, "Cannot find serializer for MetaModel!"); if (modelRootSerializer != null) { using (global::System.IO.FileStream fileStream = global::System.IO.File.OpenRead(fileName)) { DslModeling::SerializationContext serializationContext = new DslModeling::SerializationContext(directory, fileStream.Name, serializationResult); this.InitializeSerializationContext(partition, serializationContext, true); DslModeling::TransactionContext transactionContext = new DslModeling::TransactionContext(); transactionContext.Add(DslModeling::SerializationContext.TransactionContextKey, serializationContext); DslModeling::Transaction t = null; if (bStartT) { t = partition.Store.TransactionManager.BeginTransaction("Load Model from " + fileName, true, transactionContext); } // Ensure there is some content in the file. Blank (or almost blank, to account for encoding header bytes, etc.) // files will cause a new root element to be created and returned. if (fileStream.Length > 5) { try { global::System.Xml.XmlReaderSettings settings = LanguageDSLSerializationHelper.Instance.CreateXmlReaderSettings(serializationContext, false); using (global::System.Xml.XmlReader reader = global::System.Xml.XmlReader.Create(fileStream, settings)) { // Attempt to read the encoding. reader.Read(); // Move to the first node - will be the XmlDeclaration if there is one. global::System.Text.Encoding encoding; if (this.TryGetEncoding(reader, out encoding)) { serializationResult.Encoding = encoding; } // Load any additional domain models that are required DslModeling::SerializationUtilities.ResolveDomainModels(reader, serializerLocator, partition.Store); reader.MoveToContent(); modelRoot = modelRootSerializer.TryCreateInstance(serializationContext, reader, partition) as MetaModel; if (modelRoot != null && !serializationResult.Failed) { modelRoot.BaseDirectory = MetaModelLibraryBase.GetBaseDirectory(fileName); modelRoot.FilePath = fileName; this.ReadRootElement(serializationContext, modelRoot, reader, schemaResolver); } } } catch (global::System.Xml.XmlException xEx) { DslModeling::SerializationUtilities.AddMessage( serializationContext, DslModeling::SerializationMessageKind.Error, xEx ); } } if (modelRoot == null && !serializationResult.Failed) { // create model root if it doesn't exist. modelRoot = this.CreateModelHelper(partition); modelRoot.BaseDirectory = MetaModelLibraryBase.GetBaseDirectory(fileName); modelRoot.FilePath = fileName; } if (bStartT) if (t.IsActive) t.Commit(); // Do load-time validation if a ValidationController is provided. if (!serializationResult.Failed && validationController != null) { using (new SerializationValidationObserver(serializationResult, validationController)) { validationController.Validate(partition, DslValidation::ValidationCategories.Load); } } } } #endregion MetaModel model = modelRoot; if (bIsTopMost) model.IsTopMost = true; #region Diagrams System.IO.FileInfo info = new System.IO.FileInfo(fileName); string fileNameDiagram = info.DirectoryName + "\\" + info.Name.Remove(info.Name.Length - info.Extension.Length, info.Extension.Length) + DiagramExtension; View view = null; if (System.IO.File.Exists(fileNameDiagram)) { //DslModeling::DomainXmlSerializerDirectory directory = this.GetDirectory(partition.Store); DslModeling::DomainClassXmlSerializer viewSerializer = directory.GetSerializer(View.DomainClassId); global::System.Diagnostics.Debug.Assert(viewSerializer != null, "Cannot find serializer for View!"); if (viewSerializer != null) { using (global::System.IO.FileStream fileStream = global::System.IO.File.OpenRead(fileNameDiagram)) { DslModeling::SerializationContext serializationContext = new DslModeling::SerializationContext(directory, fileStream.Name, serializationResult); this.InitializeSerializationContext(partition, serializationContext, true); DslModeling::TransactionContext transactionContext = new DslModeling::TransactionContext(); transactionContext.Add(DslModeling::SerializationContext.TransactionContextKey, serializationContext); DslModeling::Transaction t = null; if (bStartT) t = partition.Store.TransactionManager.BeginTransaction("Load Model from " + fileNameDiagram, true, transactionContext); // Ensure there is some content in the file. Blank (or almost blank, to account for encoding header bytes, etc.) // files will cause a new root element to be created and returned. if (fileStream.Length > 5) { try { global::System.Xml.XmlReaderSettings settings = LanguageDSLSerializationHelper.Instance.CreateXmlReaderSettings(serializationContext, false); using (global::System.Xml.XmlReader reader = global::System.Xml.XmlReader.Create(fileStream, settings)) { // Attempt to read the encoding. reader.Read(); // Move to the first node - will be the XmlDeclaration if there is one. global::System.Text.Encoding encoding; if (this.TryGetEncoding(reader, out encoding)) { serializationResult.Encoding = encoding; } reader.MoveToContent(); view = viewSerializer.TryCreateInstance(serializationContext, reader, partition) as View; if (view != null && !serializationResult.Failed) { // Use a validating reader if possible viewSerializer.Read(serializationContext, view, reader); model.View = view; } } } catch (global::System.Xml.XmlException xEx) { DslModeling::SerializationUtilities.AddMessage( serializationContext, DslModeling::SerializationMessageKind.Error, xEx ); } } if (bStartT) if (t.IsActive) t.Commit(); } } } #endregion //if( bIsTopMost ) SerializationPostProcessor.PostProcessModelLoad(model); return model; }