protected override void OnChildConfiguring(Microsoft.VisualStudio.Modeling.Diagrams.ShapeElement child, bool createdDuringViewFixup) { base.OnChildConfiguring(child, createdDuringViewFixup); try { if (!this.IsLoading) { //Add a default field to entities if (child.ModelElement is Entity) { var item = child.ModelElement as Entity; var model = item.nHydrateModel; if (item.Fields.Count == 0) { var field = new Field(item.Partition) { DataType = DataTypeConstants.Int, Identity = IdentityTypeConstants.Database, Name = "ID", }; item.Fields.Add(field); //Add then set PK so it will trigger index code field.IsPrimaryKey = true; } #region Pasting //If there are invalid indexes then try to remap them foreach (var index in item.Indexes.Where(x => x.FieldList.Any(z => z == null))) { foreach (var c in index.IndexColumns.Where(x => x.Field == null && x.FieldID != Guid.Empty)) { var f = model.Entities.SelectMany(x => x.Fields).FirstOrDefault(x => x.Id == c.FieldID); if (f != null) { var f2 = item.Fields.FirstOrDefault(x => x.Name == f.Name); if (f2 != null) { c.FieldID = f2.Id; } } } } //Add a PK index if not one if (!item.Indexes.Any(x => x.IndexType == IndexTypeConstants.PrimaryKey) && item.PrimaryKeyFields.Count > 0) { var index = new Index(item.Partition) { IndexType = IndexTypeConstants.PrimaryKey }; item.Indexes.Add(index); var loop = 0; foreach (var field in item.PrimaryKeyFields) { var newIndexColumn = new IndexColumn(item.Partition); index.IndexColumns.Add(newIndexColumn); newIndexColumn.FieldID = field.Id; newIndexColumn.SortOrder = loop; loop++; } } #endregion } else if (child.ModelElement is View) { var item = child.ModelElement as View; //if ((item.nHydrateModel.DiagramVisibility & VisibilityTypeConstants.View) != VisibilityTypeConstants.View) //{ // if (MessageBox.Show("This type of object cannot be created by dragging onto the diagram because it is not visualized on the diagram. You can change the 'DiagramVisibility' property of the model to visualize it. Otherwise you can only create this object type by using the model tree window.\n\nWould you like to toggle on visualization for this object?", "Information", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes) // { // child.Delete(); // return; // } // item.nHydrateModel.DiagramVisibility = (item.nHydrateModel.DiagramVisibility | VisibilityTypeConstants.View); //} if (item.Fields.Count == 0) { var field = new ViewField(item.Partition) { DataType = DataTypeConstants.Int, Name = "Field1", }; item.Fields.Add(field); } } else if (child.ModelElement is StoredProcedure) { var item = child.ModelElement as StoredProcedure; //if ((item.nHydrateModel.DiagramVisibility & VisibilityTypeConstants.StoredProcedure) != VisibilityTypeConstants.StoredProcedure) //{ // if (MessageBox.Show("This type of object cannot be created by dragging onto the diagram because it is not visualized on the diagram. You can change the 'DiagramVisibility' property of the model to visualize it. Otherwise you can only create this object type by using the model tree window.\n\nWould you like to toggle on visualization for this object?", "Information", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes) // { // child.Delete(); // return; // } // item.nHydrateModel.DiagramVisibility = (item.nHydrateModel.DiagramVisibility | VisibilityTypeConstants.StoredProcedure); //} if (item.Fields.Count == 0) { var field = new StoredProcedureField(item.Partition) { DataType = DataTypeConstants.Int, Name = "Field1", }; item.Fields.Add(field); } if (item.Parameters.Count == 0) { var field = new StoredProcedureParameter(item.Partition) { DataType = DataTypeConstants.Int, Name = "Parameter1", }; item.Parameters.Add(field); } } else if (child.ModelElement is Function) { var item = child.ModelElement as Function; //if ((item.nHydrateModel.DiagramVisibility & VisibilityTypeConstants.Function) != VisibilityTypeConstants.Function) //{ // if (MessageBox.Show("This type of object cannot be created by dragging onto the diagram because it is not visualized on the diagram. You can change the 'DiagramVisibility' property of the model to visualize it. Otherwise you can only create this object type by using the model tree window.\n\nWould you like to toggle on visualization for this object?", "Information", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes) // { // child.Delete(); // return; // } // item.nHydrateModel.DiagramVisibility = (item.nHydrateModel.DiagramVisibility | VisibilityTypeConstants.Function); //} if (item.Fields.Count == 0) { var field = new FunctionField(item.Partition) { DataType = DataTypeConstants.Int, Name = "Field1", }; item.Fields.Add(field); } if (item.Parameters.Count == 0) { var field = new FunctionParameter(item.Partition) { DataType = DataTypeConstants.Int, Name = "Parameter1", }; item.Parameters.Add(field); } } this.OnShapeConfiguring(new ModelElementEventArgs() { Shape = child }); } } catch (Exception ex) { throw; } }
protected override void OnChildConfiguring(Microsoft.VisualStudio.Modeling.Diagrams.ShapeElement child, bool createdDuringViewFixup) { base.OnChildConfiguring(child, createdDuringViewFixup); try { if (!this.IsLoading) { //Add a default field to entities if (child.ModelElement is Entity) { var item = child.ModelElement as Entity; var model = item.nHydrateModel; if (item.Fields.Count == 0) { var field = new Field(item.Partition) { DataType = DataTypeConstants.Int, Identity = IdentityTypeConstants.Database, Name = "ID", }; item.Fields.Add(field); //Add then set PK so it will trigger index code field.IsPrimaryKey = true; } #region Pasting //If there are invalid indexes then try to remap them foreach (var index in item.Indexes.Where(x => x.FieldList.Any(z => z == null))) { foreach (var c in index.IndexColumns.Where(x => x.Field == null && x.FieldID != Guid.Empty)) { var f = model.Entities.SelectMany(x => x.Fields).FirstOrDefault(x => x.Id == c.FieldID); if (f != null) { var f2 = item.Fields.FirstOrDefault(x => x.Name == f.Name); if (f2 != null) c.FieldID = f2.Id; } } } //Add a PK index if not one if (!item.Indexes.Any(x => x.IndexType == IndexTypeConstants.PrimaryKey) && item.PrimaryKeyFields.Count > 0) { var index = new Index(item.Partition) { IndexType = IndexTypeConstants.PrimaryKey }; item.Indexes.Add(index); var loop = 0; foreach (var field in item.PrimaryKeyFields) { var newIndexColumn = new IndexColumn(item.Partition); index.IndexColumns.Add(newIndexColumn); newIndexColumn.FieldID = field.Id; newIndexColumn.SortOrder = loop; loop++; } } #endregion } else if (child.ModelElement is View) { var item = child.ModelElement as View; //if ((item.nHydrateModel.DiagramVisibility & VisibilityTypeConstants.View) != VisibilityTypeConstants.View) //{ // if (MessageBox.Show("This type of object cannot be created by dragging onto the diagram because it is not visualized on the diagram. You can change the 'DiagramVisibility' property of the model to visualize it. Otherwise you can only create this object type by using the model tree window.\n\nWould you like to toggle on visualization for this object?", "Information", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes) // { // child.Delete(); // return; // } // item.nHydrateModel.DiagramVisibility = (item.nHydrateModel.DiagramVisibility | VisibilityTypeConstants.View); //} if (item.Fields.Count == 0) { var field = new ViewField(item.Partition) { DataType = DataTypeConstants.Int, Name = "Field1", }; item.Fields.Add(field); } } else if (child.ModelElement is StoredProcedure) { var item = child.ModelElement as StoredProcedure; //if ((item.nHydrateModel.DiagramVisibility & VisibilityTypeConstants.StoredProcedure) != VisibilityTypeConstants.StoredProcedure) //{ // if (MessageBox.Show("This type of object cannot be created by dragging onto the diagram because it is not visualized on the diagram. You can change the 'DiagramVisibility' property of the model to visualize it. Otherwise you can only create this object type by using the model tree window.\n\nWould you like to toggle on visualization for this object?", "Information", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes) // { // child.Delete(); // return; // } // item.nHydrateModel.DiagramVisibility = (item.nHydrateModel.DiagramVisibility | VisibilityTypeConstants.StoredProcedure); //} if (item.Fields.Count == 0) { var field = new StoredProcedureField(item.Partition) { DataType = DataTypeConstants.Int, Name = "Field1", }; item.Fields.Add(field); } if (item.Parameters.Count == 0) { var field = new StoredProcedureParameter(item.Partition) { DataType = DataTypeConstants.Int, Name = "Parameter1", }; item.Parameters.Add(field); } } else if (child.ModelElement is Function) { var item = child.ModelElement as Function; //if ((item.nHydrateModel.DiagramVisibility & VisibilityTypeConstants.Function) != VisibilityTypeConstants.Function) //{ // if (MessageBox.Show("This type of object cannot be created by dragging onto the diagram because it is not visualized on the diagram. You can change the 'DiagramVisibility' property of the model to visualize it. Otherwise you can only create this object type by using the model tree window.\n\nWould you like to toggle on visualization for this object?", "Information", MessageBoxButtons.YesNo, MessageBoxIcon.Information) != DialogResult.Yes) // { // child.Delete(); // return; // } // item.nHydrateModel.DiagramVisibility = (item.nHydrateModel.DiagramVisibility | VisibilityTypeConstants.Function); //} if (item.Fields.Count == 0) { var field = new FunctionField(item.Partition) { DataType = DataTypeConstants.Int, Name = "Field1", }; item.Fields.Add(field); } if (item.Parameters.Count == 0) { var field = new FunctionParameter(item.Partition) { DataType = DataTypeConstants.Int, Name = "Parameter1", }; item.Parameters.Add(field); } } this.OnShapeConfiguring(new ModelElementEventArgs() { Shape = child }); } } catch (Exception ex) { throw; } }
private static void LoadFromDisk(IEnumerable<Function> list, nHydrateModel model, string rootFolder, Microsoft.VisualStudio.Modeling.Store store) { var folder = Path.Combine(rootFolder, FOLDER_FC); if (!Directory.Exists(folder)) return; #region Load other parameter/field information var fList = Directory.GetFiles(folder, "*.configuration.xml"); foreach (var f in fList) { var document = new XmlDocument(); try { document.Load(f); } catch (Exception ex) { //Do Nothing MessageBox.Show("The file '" + f + "' is not valid and could not be loaded!", "Load Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var fi = new FileInfo(f); var name = fi.Name.Substring(0, fi.Name.Length - ".configuration.xml".Length).ToLower(); var itemID = XmlHelper.GetAttributeValue(document.DocumentElement, "id", Guid.Empty); var item = list.FirstOrDefault(x => x.Id == itemID); if (item == null) { item = new Function(model.Partition, new PropertyAssignment[] { new PropertyAssignment(ElementFactory.IdPropertyAssignment, XmlHelper.GetAttributeValue(document.DocumentElement, "id", Guid.NewGuid())) }); model.Functions.Add(item); } System.Windows.Forms.Application.DoEvents(); item.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(FieldParameter_PropertyChanged); item.Name = XmlHelper.GetAttributeValue(document.DocumentElement, "name", item.Name); item.PrecedenceOrder = XmlHelper.GetAttributeValue(document.DocumentElement, "precedenceorder", item.PrecedenceOrder); item.IsGenerated = XmlHelper.GetAttributeValue(document.DocumentElement, "isgenerated", item.IsGenerated); item.CodeFacade = XmlHelper.GetAttributeValue(document.DocumentElement, "codefacade", item.CodeFacade); item.Schema = XmlHelper.GetAttributeValue(document.DocumentElement, "schema", item.Schema); item.IsTable = XmlHelper.GetAttributeValue(document.DocumentElement, "istable", item.IsTable); item.ReturnVariable = XmlHelper.GetAttributeValue(document.DocumentElement, "returnvariable", item.ReturnVariable); item.Summary = XmlHelper.GetNodeValue(document.DocumentElement, "summary", item.Summary); item.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(FieldParameter_PropertyChanged); //Fields var fieldsNodes = document.DocumentElement.SelectSingleNode("//fieldset"); if (fieldsNodes != null) { var nameList = new List<string>(); foreach (XmlNode n in fieldsNodes.ChildNodes) { var subItemID = XmlHelper.GetAttributeValue(n, "id", Guid.Empty); var field = item.Fields.FirstOrDefault(x => x.Id == subItemID); if (field == null) { field = new FunctionField(item.Partition, new PropertyAssignment[] { new PropertyAssignment(ElementFactory.IdPropertyAssignment, XmlHelper.GetAttributeValue(n, "id", Guid.NewGuid())) }); item.Fields.Add(field); } field.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(FieldParameter_PropertyChanged); field.Name = XmlHelper.GetAttributeValue(n, "name", field.Name); field.CodeFacade = XmlHelper.GetAttributeValue(n, "codefacade", field.CodeFacade); nameList.Add(field.Name.ToLower()); field.Nullable = XmlHelper.GetAttributeValue(n, "nullable", field.Nullable); var dtv = XmlHelper.GetAttributeValue(n, "datatype", field.DataType.ToString()); DataTypeConstants dt; if (Enum.TryParse<DataTypeConstants>(dtv, true, out dt)) field.DataType = dt; field.Default = XmlHelper.GetAttributeValue(n, "default", field.Default); field.IsGenerated = XmlHelper.GetAttributeValue(n, "isgenerated", field.IsGenerated); field.Length = XmlHelper.GetAttributeValue(n, "length", field.Length); field.Scale = XmlHelper.GetAttributeValue(n, "scale", field.Scale); field.Summary = XmlHelper.GetNodeValue(n, "summary", field.Summary); field.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(FieldParameter_PropertyChanged); } if (item.Fields.Remove(x => !nameList.Contains(x.Name.ToLower())) > 0) item.nHydrateModel.IsDirty = true; } //Parameters var parametersNodes = document.DocumentElement.SelectSingleNode("//parameterset"); if (parametersNodes != null) { var nameList = new List<string>(); foreach (XmlNode n in parametersNodes.ChildNodes) { var subItemID = XmlHelper.GetAttributeValue(n, "id", Guid.Empty); var parameter = item.Parameters.FirstOrDefault(x => x.Id == subItemID); if (parameter == null) { parameter = new FunctionParameter(item.Partition, new PropertyAssignment[] { new PropertyAssignment(ElementFactory.IdPropertyAssignment, XmlHelper.GetAttributeValue(n, "id", Guid.NewGuid())) }); item.Parameters.Add(parameter); } parameter.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(FieldParameter_PropertyChanged); parameter.CodeFacade = XmlHelper.GetAttributeValue(n, "codefacade", parameter.CodeFacade); parameter.Name = XmlHelper.GetAttributeValue(n, "name", parameter.Name); nameList.Add(parameter.Name.ToLower()); parameter.Nullable = XmlHelper.GetAttributeValue(n, "nullable", parameter.Nullable); var dtv = XmlHelper.GetAttributeValue(n, "datatype", parameter.DataType.ToString()); DataTypeConstants dt; if (Enum.TryParse<DataTypeConstants>(dtv, true, out dt)) parameter.DataType = dt; parameter.Default = XmlHelper.GetAttributeValue(n, "default", parameter.Default); parameter.IsGenerated = XmlHelper.GetAttributeValue(n, "isgenerated", parameter.IsGenerated); parameter.Length = XmlHelper.GetAttributeValue(n, "length", parameter.Length); parameter.Scale = XmlHelper.GetAttributeValue(n, "scale", parameter.Scale); parameter.Summary = XmlHelper.GetNodeValue(n, "summary", parameter.Summary); parameter.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(FieldParameter_PropertyChanged); } if (item.Parameters.Remove(x => !nameList.Contains(x.Name.ToLower())) > 0) item.nHydrateModel.IsDirty = true; } LoadModules(folder, item); } #endregion #region Load SQL fList = Directory.GetFiles(folder, "*.sql"); foreach (var f in fList) { var fi = new FileInfo(f); if (fi.Name.ToLower().EndsWith(".sql")) { var name = fi.Name.Substring(0, fi.Name.Length - 4).ToLower(); var item = list.FirstOrDefault(x => x.Name.ToLower() == name); if (item != null) { item.SQL = File.ReadAllText(f); System.Windows.Forms.Application.DoEvents(); } } } #endregion }
public static void PopulateFields(nHydrate.Dsl.nHydrateModel model, DataImport.Function function, Function newFunction) { //Fields //newFunction.Fields.Clear(); foreach (var field in function.FieldList) { var newField = newFunction.Fields.FirstOrDefault(x => x.Name.ToLower() == field.Name.ToLower()); if (newField == null) { newField = new nHydrate.Dsl.FunctionField(model.Partition); newField.Name = field.Name; //Correct for invalid identifiers if (!nHydrate.Dsl.ValidationHelper.ValidCodeIdentifier(newField.Name)) { newField.CodeFacade = nHydrate.Dsl.ValidationHelper.MakeCodeIdentifer(newField.Name, string.Empty); } newFunction.Fields.Add(newField); } newField.Length = field.Length; newField.Nullable = field.Nullable; newField.DataType = (DataTypeConstants)Enum.Parse(typeof(DataTypeConstants), field.DataType.ToString()); newField.Default = field.DefaultValue; newField.Scale = field.Scale; } //Remove the fields that need to be remove newFunction.Fields.Remove(x => !function.FieldList.Select(a => a.Name.ToLower()).ToList().Contains(x.Name.ToLower())); }