15 changed files with 365 additions and 45 deletions
@ -0,0 +1,72 @@ |
|||||||
|
#region Usings
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
using System.Linq; |
||||||
|
using System.Text; |
||||||
|
using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Common; |
||||||
|
using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Designer; |
||||||
|
using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Designer.CSDL.Property; |
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
namespace ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Designer.ChangeWatcher |
||||||
|
{ |
||||||
|
public class EDMDesignerChangeWatcher |
||||||
|
{ |
||||||
|
#region Field
|
||||||
|
|
||||||
|
private static List<IEDMDesignerChangeWatcherObserver> _observers = new List<IEDMDesignerChangeWatcherObserver>(); |
||||||
|
private static bool _init = true; |
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Properties
|
||||||
|
|
||||||
|
public static bool Init |
||||||
|
{ |
||||||
|
get { return EDMDesignerChangeWatcher._init; } |
||||||
|
set { EDMDesignerChangeWatcher._init = value; } |
||||||
|
} |
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Methods
|
||||||
|
|
||||||
|
public static void AddEDMDesignerViewContent(IEDMDesignerChangeWatcherObserver observer) |
||||||
|
{ |
||||||
|
_observers.Add(observer); |
||||||
|
} |
||||||
|
|
||||||
|
public static void RemoveEDMDesignerViewContent(IEDMDesignerChangeWatcherObserver observer) |
||||||
|
{ |
||||||
|
_observers.Remove(observer); |
||||||
|
} |
||||||
|
|
||||||
|
public static void ObjectChanged(EDMObjectBase edmObjectBase) |
||||||
|
{ |
||||||
|
if (_init) |
||||||
|
return; |
||||||
|
|
||||||
|
foreach (IEDMDesignerChangeWatcherObserver observer in _observers) |
||||||
|
{ |
||||||
|
if (observer.ObjectChanged(edmObjectBase)) |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void ObjectChanged(ITypeDesigner typeDesigner) |
||||||
|
{ |
||||||
|
if (_init) |
||||||
|
return; |
||||||
|
|
||||||
|
foreach (IEDMDesignerChangeWatcherObserver observer in _observers) |
||||||
|
{ |
||||||
|
if (observer.ObjectChanged(typeDesigner)) |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#endregion
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
#region Usings
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
using System.Linq; |
||||||
|
using System.Text; |
||||||
|
using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Common; |
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
namespace ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Designer.ChangeWatcher |
||||||
|
{ |
||||||
|
public interface IEDMDesignerChangeWatcherObserver |
||||||
|
{ |
||||||
|
bool ObjectChanged(object changedObject); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,51 @@ |
|||||||
|
#region Usings
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
using System.Linq; |
||||||
|
using System.Text; |
||||||
|
using ICSharpCode.SharpDevelop.Project; |
||||||
|
using System.Data.Entity.Design; |
||||||
|
using System.CodeDom; |
||||||
|
using System.Data.Metadata.Edm; |
||||||
|
using System.Xml.Linq; |
||||||
|
using System.IO; |
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
namespace ICSharpCode.Data.EDMDesigner.Core.IO |
||||||
|
{ |
||||||
|
public class EntityModelCodeGenerator : IO, ICustomTool |
||||||
|
{ |
||||||
|
#region ICustomTool Member
|
||||||
|
|
||||||
|
public void GenerateCode(FileProjectItem item, CustomToolContext context) |
||||||
|
{ |
||||||
|
LanguageOption languageToGenerateCode = LanguageOption.GenerateCSharpCode; |
||||||
|
|
||||||
|
if (item.Project.Language != "C#") |
||||||
|
languageToGenerateCode = LanguageOption.GenerateVBCode; |
||||||
|
|
||||||
|
XDocument edmxDocument = XDocument.Load(item.FileName); |
||||||
|
XElement conceptualModelsElement = EDMXIO.ReadSection(edmxDocument, EDMXIO.EDMXSection.CSDL); |
||||||
|
|
||||||
|
if (conceptualModelsElement == null) |
||||||
|
throw new ArgumentException("Input file is not a valid EDMX file."); |
||||||
|
|
||||||
|
XDocument csdlDocument = new XDocument(new XDeclaration("1.0", "utf-8", null), conceptualModelsElement.Element(XName.Get("Schema", csdlNamespace.NamespaceName))); |
||||||
|
|
||||||
|
string tempFileName = IO.GetTempFilenameWithExtension("csdl"); |
||||||
|
csdlDocument.Save(tempFileName); |
||||||
|
|
||||||
|
string outputFileName = context.GetOutputFileName(item, "Designer"); |
||||||
|
|
||||||
|
EntityCodeGenerator entityCodeGenerator = new EntityCodeGenerator(languageToGenerateCode); |
||||||
|
IList<EdmSchemaError> edmSchemaErrors = entityCodeGenerator.GenerateCode(tempFileName, outputFileName); |
||||||
|
File.Delete(tempFileName); |
||||||
|
|
||||||
|
context.EnsureOutputFileIsInProject(item, outputFileName); |
||||||
|
} |
||||||
|
|
||||||
|
#endregion
|
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue