/// <summary> /// Saves the given file. /// </summary> protected override void Save(string fileName) { DslModeling::SerializationResult serializationResult = new DslModeling::SerializationResult(); global::Microsoft.Example.Circuits.ComponentModel modelRoot = (global::Microsoft.Example.Circuits.ComponentModel) 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::Microsoft.Example.Circuits.ComponentDiagram diagram = diagrams[0] as global::Microsoft.Example.Circuits.ComponentDiagram; if (diagram != null) { string diagramFileName = fileName + this.DiagramExtension; try { this.SuspendFileChangeNotification(diagramFileName); global::Microsoft.Example.Circuits.CircuitsSerializationHelper.Instance.SaveModelAndDiagram(serializationResult, modelRoot, fileName, diagram, diagramFileName, this.Encoding, false); } finally { this.ResumeFileChangeNotification(diagramFileName); } } } else { global::Microsoft.Example.Circuits.CircuitsSerializationHelper.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::Microsoft.Example.Circuits.CircuitsDomainModel.SingletonResourceManager.GetString("CannotSaveDocument")); } }
/// <summary> /// Reroute a connector when the role players of its underlying relationship change /// </summary> public override void RolePlayerChanged(DslModeling::RolePlayerChangedEventArgs e) { if (e == null) { throw new global::System.ArgumentNullException("e"); } global::System.Collections.ObjectModel.ReadOnlyCollection <DslDiagrams::PresentationViewsSubject> connectorLinks = DslDiagrams::PresentationViewsSubject.GetLinksToPresentation(e.ElementLink); foreach (DslDiagrams::PresentationViewsSubject connectorLink in connectorLinks) { // Fix up any binary link shapes attached to the element link. DslDiagrams::BinaryLinkShape linkShape = connectorLink.Presentation as DslDiagrams::BinaryLinkShape; if (linkShape != null) { global::Microsoft.Example.Circuits.ComponentDiagram diagram = linkShape.Diagram as global::Microsoft.Example.Circuits.ComponentDiagram; if (diagram != null) { if (e.NewRolePlayer != null) { DslDiagrams::NodeShape fromShape; DslDiagrams::NodeShape toShape; diagram.GetSourceAndTargetForConnector(linkShape, out fromShape, out toShape); if (fromShape != null && toShape != null) { if (!object.Equals(fromShape, linkShape.FromShape)) { linkShape.FromShape = fromShape; } if (!object.Equals(linkShape.ToShape, toShape)) { linkShape.ToShape = toShape; } } else { // delete the connector if we cannot find an appropriate target shape. linkShape.Delete(); } } else { // delete the connector if the new role player is null. linkShape.Delete(); } } } } }
/// <summary> /// Save the given document that is subordinate to this document. /// </summary> /// <param name="subordinateDocument"></param> /// <param name="fileName"></param> protected override void SaveSubordinateFile(DslShell::DocData subordinateDocument, string fileName) { // In this case, the only subordinate is the diagram. DslModeling::SerializationResult serializationResult = new DslModeling::SerializationResult(); global::System.Collections.Generic.IList <DslDiagrams::PresentationElement> diagrams = DslDiagrams::PresentationViewsSubject.GetPresentation(this.RootElement); if (diagrams.Count > 0) { global::Microsoft.Example.Circuits.ComponentDiagram diagram = diagrams[0] as global::Microsoft.Example.Circuits.ComponentDiagram; if (diagram != null) { try { this.SuspendFileChangeNotification(fileName); global::Microsoft.Example.Circuits.CircuitsSerializationHelper.Instance.SaveDiagram(serializationResult, diagram, fileName, this.Encoding, false); } finally { this.ResumeFileChangeNotification(fileName); } } } // 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) { this.NotifySubordinateDocumentSaved(subordinateDocument.FileName, fileName); } else { // Save failed. throw new global::System.InvalidOperationException(global::Microsoft.Example.Circuits.CircuitsDomainModel.SingletonResourceManager.GetString("CannotSaveDocument")); } }