/// <summary> /// Saves the given file. /// </summary> protected override void Save(string fileName) { DslModeling::SerializationResult serializationResult = new DslModeling::SerializationResult(); global::nHydrate.Dsl.nHydrateModel modelRoot = (global::nHydrate.Dsl.nHydrateModel) this.RootElement; // Only save the diagrams if // a) There are any to save // b) This is NOT a SaveAs operation. SaveAs should allow the subordinate document to control the save of its data as it is writing a new file. // Except DO save the diagram on SaveAs if there isn't currently a diagram as there won't be a subordinate document yet to save it. bool saveAs = global::System.StringComparer.OrdinalIgnoreCase.Compare(fileName, this.FileName) != 0; global::System.Collections.Generic.IList <DslDiagrams::PresentationElement> diagrams = DslDiagrams::PresentationViewsSubject.GetPresentation(this.RootElement); if (diagrams.Count > 0 && (!saveAs || this.diagramDocumentLockHolder == null)) { global::nHydrate.Dsl.nHydrateDiagram diagram = diagrams[0] as global::nHydrate.Dsl.nHydrateDiagram; if (diagram != null) { string diagramFileName = fileName + this.DiagramExtension; try { this.SuspendFileChangeNotification(diagramFileName); global::nHydrate.Dsl.nHydrateSerializationHelper.Instance.SaveModelAndDiagram(serializationResult, modelRoot, fileName, diagram, diagramFileName, this.Encoding, false); } finally { this.ResumeFileChangeNotification(diagramFileName); } } } else { global::nHydrate.Dsl.nHydrateSerializationHelper.Instance.SaveModel(serializationResult, modelRoot, fileName, this.Encoding, false); } // Report serialization messages. this.SuspendErrorListRefresh(); try { foreach (DslModeling::SerializationMessage serializationMessage in serializationResult) { this.AddErrorListItem(new DslShell::SerializationErrorListItem(this.ServiceProvider, serializationMessage)); } } finally { this.ResumeErrorListRefresh(); } if (serializationResult.Failed) { // Save failed. throw new global::System.InvalidOperationException(global::nHydrate.Dsl.nHydrateDomainModel.SingletonResourceManager.GetString("CannotSaveDocument")); } }
/// <summary> /// Called on both document load and reload. /// </summary> protected virtual void OnDocumentLoaded() { // Enable CompartmentItems events. global::nHydrate.Dsl.nHydrateModel modelRoot = this.RootElement as global::nHydrate.Dsl.nHydrateModel; if (modelRoot != null) { global::System.Collections.Generic.IList <DslDiagrams::PresentationElement> diagrams = DslDiagrams::PresentationViewsSubject.GetPresentation(modelRoot); if (diagrams.Count > 0) { global::nHydrate.Dsl.nHydrateDiagram diagram = diagrams[0] as global::nHydrate.Dsl.nHydrateDiagram; if (diagram != null) { diagram.SubscribeCompartmentItemsEvents(); } } } }
/// <summary> /// Loads the given file. /// </summary> protected override void Load(string fileName, bool isReload) { DslModeling::SerializationResult serializationResult = new DslModeling::SerializationResult(); global::nHydrate.Dsl.nHydrateModel modelRoot = null; DslModeling::ISchemaResolver schemaResolver = new DslShell::ModelingSchemaResolver(this.ServiceProvider); //clear the current root element this.SetRootElement(null); // Enable diagram fixup rules in our store, because we will load diagram data. global::nHydrate.Dsl.nHydrateDomainModel.EnableDiagramRules(this.Store); string diagramFileName = fileName + this.DiagramExtension; modelRoot = global::nHydrate.Dsl.nHydrateSerializationHelper.Instance.LoadModelAndDiagram(serializationResult, this.GetModelPartition(), fileName, this.GetDiagramPartition(), diagramFileName, schemaResolver, null /* no load-time validation */, this.SerializerLocator); // Report serialization messages. this.SuspendErrorListRefresh(); try { foreach (DslModeling::SerializationMessage serializationMessage in serializationResult) { this.AddErrorListItem(new DslShell::SerializationErrorListItem(this.ServiceProvider, serializationMessage)); } } finally { this.ResumeErrorListRefresh(); } if (serializationResult.Failed) { // Load failed, can't open the file. throw new global::System.InvalidOperationException(global::nHydrate.Dsl.nHydrateDomainModel.SingletonResourceManager.GetString("CannotOpenDocument")); } else { this.SetRootElement(modelRoot); // Attempt to set the encoding if (serializationResult.Encoding != null) { this.ModelingDocStore.SetEncoding(serializationResult.Encoding); global::Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(this.SetDocDataDirty(0)); // Setting the encoding will mark the document as dirty, so clear the dirty flag. } if (this.Hierarchy != null && global::System.IO.File.Exists(diagramFileName)) { // Add a lock to the subordinate diagram file. if (this.diagramDocumentLockHolder == null) { uint itemId = DslShell::SubordinateFileHelper.GetChildProjectItemId(this.Hierarchy, this.ItemId, this.DiagramExtension); if (itemId != global::Microsoft.VisualStudio.VSConstants.VSITEMID_NIL) { this.diagramDocumentLockHolder = DslShell::SubordinateFileHelper.LockSubordinateDocument(this.ServiceProvider, this, diagramFileName, itemId); if (this.diagramDocumentLockHolder == null) { throw new global::System.InvalidOperationException(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, global::nHydrate.Dsl.nHydrateDomainModel.SingletonResourceManager.GetString("CannotCloseExistingDiagramDocument"), diagramFileName)); } } } } } }