/// <inheritdoc /> public override void ElementDeleting(ElementDeletingEventArgs e) { base.ElementDeleting(e); ModelDiagramData element = (ModelDiagramData)e.ModelElement; Store store = element.Store; Transaction current = store.TransactionManager.CurrentTransaction; if (current.IsSerializing || ModelRoot.BatchUpdating) { return; } if (BooleanQuestionDisplay.Show($"About to permanently delete diagram named {element.Name} - are you sure?") != true) { current.Rollback(); return; } EFModelDiagram diagram = element.GetDiagram(); ModelDiagramData.CloseDiagram?.Invoke(diagram); diagram.Delete(); }
public override void ElementPropertyChanged(ElementPropertyChangedEventArgs e) { base.ElementPropertyChanged(e); ModelDiagramData element = (ModelDiagramData)e.ModelElement; if (element.IsDeleted) { return; } Store store = element.Store; Transaction currentTransaction = store.TransactionManager.CurrentTransaction; if (currentTransaction.IsSerializing) { return; } if (Equals(e.NewValue, e.OldValue)) { return; } List <string> errorMessages = new List <string>(); switch (e.DomainProperty.Name) { case "Name": if (string.IsNullOrWhiteSpace(e.NewValue?.ToString())) { errorMessages.Add("Diagram must have a name"); break; } if (store.ElementDirectory.AllElements.OfType <ModelDiagramData>().Where(d => d != element).Any(d => d.Name == e.NewValue.ToString())) { errorMessages.Add("Diagram must have a unique name"); break; } EFModelDiagram diagram = element.GetDiagram(); if (diagram != null) { ModelDiagramData.CloseDiagram?.Invoke(diagram); diagram.Name = element.Name = e.NewValue.ToString(); } break; } errorMessages = errorMessages.Where(m => m != null).ToList(); if (errorMessages.Any()) { currentTransaction.Rollback(); ErrorDisplay.Show(string.Join("\n", errorMessages)); } }
public override void ElementAdded(ElementAddedEventArgs e) { base.ElementAdded(e); ModelDiagramData element = (ModelDiagramData)e.ModelElement; Store store = element.Store; Transaction current = store.TransactionManager.CurrentTransaction; if (current.IsSerializing || ModelRoot.BatchUpdating) { return; } ModelDiagramData.OpenDiagram?.Invoke(element.Name); }
public override void ElementAdded(ElementAddedEventArgs e) { base.ElementAdded(e); ModelDiagramData element = (ModelDiagramData)e.ModelElement; Store store = element.Store; Transaction current = store.TransactionManager.CurrentTransaction; if (current.IsSerializing || ModelRoot.BatchUpdating) { return; } ModelDiagramData.OpenDiagram?.Invoke(element); element.SetDiagram(store.ElementDirectory.AllElements.OfType <EFModelDiagram>().FirstOrDefault(d => d.Name == element.Name)); }
/// <summary> /// public virtual method for the client to have his own user-defined delete rule class /// </summary> /// <param name="e"></param> public override void ElementDeleted(ElementDeletedEventArgs e) { base.ElementDeleted(e); ModelDiagramData element = (ModelDiagramData)e.ModelElement; Store store = element.Store; Transaction current = store.TransactionManager.CurrentTransaction; if (current.IsSerializing || ModelRoot.BatchUpdating) { return; } EFModelDiagram diagram = element.GetDiagram(); ModelDiagramData.CloseDiagram?.Invoke(diagram); diagram.Delete(); }
public override void ElementAdded(ElementAddedEventArgs e) { base.ElementAdded(e); ModelDiagramData element = (ModelDiagramData)e.ModelElement; Store store = element.Store; Transaction current = store.TransactionManager.CurrentTransaction; if (current.IsSerializing || ModelRoot.BatchUpdating) { return; } ModelDiagramData.OpenDiagram?.Invoke(element); if (element.GetDiagram() == null) { element.SetDiagram(store.GetAll <EFModelDiagram>().FirstOrDefault(d => d.Name == store.ModelRoot().GetFileName())); } }
public virtual ModelRoot LoadModelAndDiagrams(DslModeling::SerializationResult serializationResult, DslModeling::Partition modelPartition, string modelFileName, DslModeling::Partition diagramsPartition, string diagramsFileName, DslModeling::ISchemaResolver schemaResolver, DslValidation::ValidationController validationController, DslModeling::ISerializerLocator serializerLocator) { #region Check Parameters if (serializationResult == null) { throw new global::System.ArgumentNullException("serializationResult"); } if (modelPartition == null) { throw new global::System.ArgumentNullException("modelPartition"); } if (diagramsPartition == null) { throw new global::System.ArgumentNullException("diagramsPartition"); } if (string.IsNullOrEmpty(diagramsFileName)) { throw new global::System.ArgumentNullException("diagramsFileName"); } #endregion ModelRoot modelRoot; // Ensure there is an outer transaction spanning both model and diagram load, so moniker resolution works properly. if (!diagramsPartition.Store.TransactionActive) { throw new global::System.InvalidOperationException(EFModelDomainModel.SingletonResourceManager.GetString("MissingTransaction")); } modelRoot = this.LoadModel(serializationResult, modelPartition, modelFileName, schemaResolver, validationController, serializerLocator); ModelDiagramData data = null; if (serializationResult.Failed) { // don't try to deserialize diagram data if model load failed. return(modelRoot); } if (IsValid(diagramsFileName)) { using (var pkgOutputDoc = global::System.IO.Packaging.Package.Open(diagramsFileName, global::System.IO.FileMode.Open, global::System.IO.FileAccess.Read)) { foreach (var packagePart in pkgOutputDoc.GetParts()) { EFModelDiagram diagram = this.LoadDiagram(serializationResult , modelPartition , modelFileName , diagramsFileName , modelRoot , diagramsPartition , packagePart.GetStream(global::System.IO.FileMode.Open, global::System.IO.FileAccess.Read) , schemaResolver , validationController , serializerLocator) as EFModelDiagram; if (diagram != null) { data = FixupDiagramData(diagram); } if (diagram.Name == Path.GetFileNameWithoutExtension(diagramsFileName).Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries).First()) { data.SetLocks(Locks.All); } } } } else { // missing diagram file indicates we should create a new diagram. EFModelDiagram diagram = this.LoadDiagram(serializationResult , modelPartition , modelFileName , diagramsFileName , modelRoot , diagramsPartition , global::System.IO.Stream.Null , schemaResolver , validationController , serializerLocator) as EFModelDiagram; if (diagram != null) { data = FixupDiagramData(diagram); } if (diagram.Name == Path.GetFileNameWithoutExtension(diagramsFileName)) { data.SetLocks(Locks.All); } } modelRoot.Store .GetAll <ModelDiagramData>() .Where(d => d.GetDiagram() == null) .ToList() .ForEach(d => modelRoot.Diagrams.Remove(d)); return(modelRoot); ModelDiagramData FixupDiagramData(EFModelDiagram diagram) { ModelDiagramData diagramData = modelRoot.Store .GetAll <ModelDiagramData>() .FirstOrDefault(d => d.Name == diagram.Name); if (diagramData == null) { modelRoot.Diagrams.Add(diagramData = new ModelDiagramData(modelRoot.Store.DefaultPartition , new DslModeling.PropertyAssignment(ModelDiagramData.NameDomainPropertyId, diagram.Name))); } diagramData.SetDiagram(diagram); return(diagramData); } }