15 changed files with 365 additions and 45 deletions
@ -0,0 +1,72 @@
@@ -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 @@
@@ -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 @@
@@ -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