From a8d5cbb4cc0b3165eb34cfa85705ca9fd211d3e8 Mon Sep 17 00:00:00 2001 From: philippmaihart Date: Fri, 17 Sep 2010 12:49:42 +0200 Subject: [PATCH] Save EDMX: Designer Data is getting saved now --- .../DisplayBinding/EDMDesignerViewContent.cs | 6 +- .../IO/CSDLIO.cs | 14 +-- .../IO/DesignerIO.cs | 92 +++++++++++++------ .../IO/EDMXIO.cs | 11 ++- .../IO/SSDLIO.cs | 4 - 5 files changed, 83 insertions(+), 44 deletions(-) diff --git a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerViewContent.cs b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerViewContent.cs index 7b4eba57f4..f8e8009371 100644 --- a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerViewContent.cs +++ b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerViewContent.cs @@ -115,7 +115,9 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding EntityTypeDesigner.Init = true; if (edmxElement == null || edmxElement.Element("DesignerViews") == null) - edmxElement = new XElement("Designer", DesignerIO.GenerateNewDesignerViewsFromCSDLView(_edmView.CSDL)); + { + edmxElement = new XElement("Designer", DesignerIO.GenerateNewDesignerViewsFromCSDLView(_edmView)); + } if (edmxElement != null && edmxElement.Element("DesignerViews") != null) DesignerIO.Read(_edmView, edmxElement.Element("DesignerViews"), entityType => new EntityTypeDesigner(entityType), complexType => new ComplexTypeDesigner(complexType)); @@ -135,7 +137,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding public override void Save(OpenedFile file, Stream stream) { - EDMXIO.WriteXDocument(_edmView.EDM).Save(stream); + EDMXIO.WriteXDocument(_edmView).Save(stream); } private EDMWizardWindow RunWizard(OpenedFile file) diff --git a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/CSDLIO.cs b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/CSDLIO.cs index b474cb0b4b..8e467ee0c0 100644 --- a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/CSDLIO.cs +++ b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/CSDLIO.cs @@ -266,7 +266,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO XElement entitySetElement = new XElement(csdlNamespace + "EntitySet", new XAttribute("Name", entityType.EntitySetName), new XAttribute("EntityType", string.Concat(entityContainerNamespace, entityType.Name))); - //.AddAttribute(csdlCodeGenerationNamespace, "GetterAccess", entityType.EntitySetVisibility); + //.AddAttribute(csdlCodeGenerationNamespace, "GetterAccess", entityType.EntitySetVisibility); // Not available in EF 4.0 entityContainer.Add(entitySetElement); } @@ -312,7 +312,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO { XElement complexTypeElement = new XElement(csdlNamespace + "ComplexType", new XAttribute("Name", complexType.Name)); - //.AddAttribute(new XAttribute(csdlCodeGenerationNamespace + "TypeAccess", complexType.Visibility)); + //.AddAttribute(new XAttribute(csdlCodeGenerationNamespace + "TypeAccess", complexType.Visibility)); // Not available in EF 4.0 complexTypeElement.Add(WriteScalarProperties(complexType)); complexTypeElement.Add(WriteComplexProperties(complexType, string.Concat(csdlContainer.Alias, "."))); @@ -325,7 +325,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO { XElement entityTypeElement = new XElement(csdlNamespace + "EntityType") .AddAttribute("Name", entityType.Name) - //.AddAttribute(csdlCodeGenerationNamespace, "TypeAccess", entityType.Visibility) + //.AddAttribute(csdlCodeGenerationNamespace, "TypeAccess", entityType.Visibility) // Not available in EF 4.0 .AddAttribute("BaseType", entityType.BaseType == null ? null : string.Concat(entityContainerNamespace, entityType.BaseType.Name)) .AddAttribute("Abstract", entityType.Abstract); @@ -353,7 +353,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO .AddAttribute("Relationship", string.Concat(entityContainerNamespace, navigationProperty.Association.Name)) .AddAttribute("FromRole", navigationProperty.Association.GetRoleName(navigationProperty)) .AddAttribute("ToRole", navigationProperty.Association.GetRoleName(navigationProperty.Association.PropertiesEnd.First(role => role != navigationProperty)))); - //.AddAttribute(csdlCodeGenerationNamespace, "GetterAccess", navigationProperty.GetVisibility) + //.AddAttribute(csdlCodeGenerationNamespace, "GetterAccess", navigationProperty.GetVisibility) // Not available in EF 4.0 //.AddAttribute(csdlCodeGenerationNamespace, "SetterAccess", navigationProperty.SetVisibility)); }); @@ -414,12 +414,12 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO .AddAttribute("ConcurrencyMode", scalarProperty.ConcurrencyMode) .AddAttribute("DefaultValue", scalarProperty.DefaultValue) .AddAttribute("FixedLength", scalarProperty.FixedLength) - //.AddAttribute(csdlCodeGenerationNamespace, "GetterAccess", scalarProperty.GetVisibility) + //.AddAttribute(csdlCodeGenerationNamespace, "GetterAccess", scalarProperty.GetVisibility) // Not available in EF 4.0 .AddAttribute("MaxLength", scalarProperty.MaxLength) .AddAttribute("Nullable", scalarProperty.Nullable) .AddAttribute("Precision", scalarProperty.Precision) .AddAttribute("Scale", scalarProperty.Scale) - //.AddAttribute(csdlCodeGenerationNamespace, "SetterAccess", scalarProperty.SetVisibility) + //.AddAttribute(csdlCodeGenerationNamespace, "SetterAccess", scalarProperty.SetVisibility) // Not available in EF 4.0 .AddAttribute("Unicode", scalarProperty.Unicode); } } @@ -432,7 +432,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO .AddAttribute("Name", complexProperty.Name) .AddAttribute("Type", string.Concat(csdlAlias, complexProperty.ComplexType.Name)) .AddAttribute("Nullable", false); - //.AddAttribute(csdlCodeGenerationNamespace, "GetterAccess", complexProperty.GetVisibility); + //.AddAttribute(csdlCodeGenerationNamespace, "GetterAccess", complexProperty.GetVisibility); // Not available in EF 4.0 } } diff --git a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/DesignerIO.cs b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/DesignerIO.cs index 948cbb10f2..1dcb3d64ec 100644 --- a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/DesignerIO.cs +++ b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/DesignerIO.cs @@ -10,6 +10,7 @@ using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Designer.CSDL.Type; using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Designer.CSDL; using ICSharpCode.Data.EDMDesigner.Core.EDMObjects; using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Designer.Common; +using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Common; #endregion @@ -86,49 +87,88 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO return designerView; } - public static XElement GenerateNewDesignerViewsFromCSDLView(CSDLView csdl) + public static XElement GenerateNewDesignerViewsFromCSDLView(EDMView edmView) { XElement designerView = new XElement("DesignerView", new XAttribute("Name", "View"), new XAttribute("Zoom", 100), new XAttribute("Arrange", true)); - foreach (UIEntityType entityType in csdl.EntityTypes) + foreach (UIEntityType entityType in edmView.CSDL.EntityTypes) { designerView.Add(new XElement("DesignerType", new XAttribute("Name", entityType.Name), new XAttribute("Top", 0), new XAttribute("Left", 0), new XAttribute("IsExpanded", true))); } + edmView.EDM.EDMXDesignerDiagrams = designerView.Elements(); + return new XElement("DesignerViews", designerView); } - public static XElement Write(EDM edm) + public static XElement Write(EDMView edmView) { - if (edm.DesignerProperties == null) - return null; - - XElement connectionElement = new XElement(edmxNamespace + "Connection"); - XElement designerInfoPropertyElement1 = new XElement(edmxNamespace + "DesignerInfoPropertyElement"); - connectionElement.Add(designerInfoPropertyElement1); - - foreach (DesignerProperty designerProperty in edm.DesignerProperties) + XElement connectionElement = null; + XElement optionsElement = null; + + if (edmView.EDM.DesignerProperties != null) { - connectionElement.Add(new XElement(edmxNamespace + "DesignerProperty", - new XAttribute("Name", designerProperty.Name), - new XAttribute("Value", designerProperty.Value))); - } + connectionElement = new XElement(edmxNamespace + "Connection"); + XElement designerInfoPropertyElement1 = new XElement(edmxNamespace + "DesignerInfoPropertyElement"); + connectionElement.Add(designerInfoPropertyElement1); - XElement optionsElement = new XElement(edmxNamespace + "Options"); - XElement designerInfoPropertyElement2 = new XElement(edmxNamespace + "DesignerInfoPropertyElement"); - optionsElement.Add(designerInfoPropertyElement2); + foreach (DesignerProperty designerProperty in edmView.EDM.DesignerProperties) + { + connectionElement.Add(new XElement(edmxNamespace + "DesignerProperty", + new XAttribute("Name", designerProperty.Name), + new XAttribute("Value", designerProperty.Value))); + } - foreach (DesignerProperty designerProperty in edm.DesignerProperties) - { - optionsElement.Add(new XElement(edmxNamespace + "DesignerProperty", - new XAttribute("Name", designerProperty.Name), - new XAttribute("Value", designerProperty.Value))); + optionsElement = new XElement(edmxNamespace + "Options"); + XElement designerInfoPropertyElement2 = new XElement(edmxNamespace + "DesignerInfoPropertyElement"); + optionsElement.Add(designerInfoPropertyElement2); + + foreach (DesignerProperty designerProperty in edmView.EDM.DesignerProperties) + { + optionsElement.Add(new XElement(edmxNamespace + "DesignerProperty", + new XAttribute("Name", designerProperty.Name), + new XAttribute("Value", designerProperty.Value))); + } } - return new XElement(edmxNamespace + "Designer") + XElement designerElement = new XElement(edmxNamespace + "Designer") .AddElement(connectionElement) - .AddElement(optionsElement) - .AddElement(new XElement(edmxNamespace + "Diagrams", edm.EDMXDesignerDiagrams)); + .AddElement(optionsElement); + + //if (edmView.EDM.EDMXDesignerDiagrams != null) + // designerElement.AddElement(new XElement(edmxNamespace + "Diagrams", edmView.EDM.EDMXDesignerDiagrams)); + //else + designerElement.AddElement(new XElement(edmxNamespace + "Diagrams", Write(edmView.DesignerViews))); + + return designerElement; + } + + private static XElement Write(EventedObservableCollection designerViews) + { + XElement designerViewsElement = new XElement("DesignerViews"); + + foreach (DesignerView designerView in designerViews) + designerViewsElement.Add(Write(designerView)); + + return designerViewsElement; + } + + private static XElement Write(DesignerView designerView) + { + XElement designerViewElement = new XElement("DesignerView", + new XAttribute("Name", designerView.Name), + new XAttribute("Zoom", designerView.Zoom)); + + foreach (ITypeDesigner uiType in designerView) + { + designerViewElement.Add(new XElement("DesignerType", + new XAttribute("Name", uiType.UIType.Name), + new XAttribute("Left", uiType.Left), + new XAttribute("Top", uiType.Top), + new XAttribute("IsExpanded", uiType.IsExpanded))); + } + + return designerViewElement; } } } diff --git a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/EDMXIO.cs b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/EDMXIO.cs index c3aa739539..130e3eb492 100644 --- a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/EDMXIO.cs +++ b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/EDMXIO.cs @@ -12,6 +12,7 @@ using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.SSDL; using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.CSDL; using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Designer.Common; using System.IO; +using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Designer; #endregion @@ -82,12 +83,12 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO mslElement))).AddElement(designerElement)); } - public static XDocument WriteXDocument(EDM edm) + public static XDocument WriteXDocument(EDMView edmView) { - XElement ssdlElement = SSDLIO.WriteXElement(edm.SSDLContainer); - XElement csdlElement = CSDLIO.Write(edm.CSDLContainer); - XElement mslElement = MSLIO.Write(edm); - XElement designerElement = DesignerIO.Write(edm); + XElement ssdlElement = SSDLIO.WriteXElement(edmView.EDM.SSDLContainer); + XElement csdlElement = CSDLIO.Write(edmView.EDM.CSDLContainer); + XElement mslElement = MSLIO.Write(edmView.EDM); + XElement designerElement = DesignerIO.Write(edmView); return WriteXDocument(ssdlElement, csdlElement, mslElement, designerElement); } diff --git a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/SSDLIO.cs b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/SSDLIO.cs index ac4fb9b8ff..97058e0dac 100644 --- a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/SSDLIO.cs +++ b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/SSDLIO.cs @@ -273,8 +273,6 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO } role.Properties = properties; - - //role.Properties = role.Type.Properties.Where(p => p.Name == principalElement.Element(XName.Get("PropertyRef", ssdlNamespace.NamespaceName)).Attribute("Name").Value).ToEventedObservableCollection(); } else { @@ -294,8 +292,6 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO } role.Properties = properties; - - //role.Properties = role.Type.Properties.Where(p => p.Name == referentialConstraintElement.Element(XName.Get("Dependent", ssdlNamespace.NamespaceName)).Element(XName.Get("PropertyRef", ssdlNamespace.NamespaceName)).Attribute("Name").Value).ToEventedObservableCollection(); } } if (isPrincipal)