public static void SaveToDisk(nHydrateModel modelRoot, string rootFolder, string modelName, nHydrateDiagram diagram) { modelRoot.IsSaving = true; try { var modelFolder = GetModelFolder(rootFolder, modelName); var generatedFileList = new List<string>(); nHydrate.Dsl.Custom.SQLFileManagement.SaveToDisk(modelRoot, modelRoot.ModelMetadata, modelFolder, diagram, generatedFileList); nHydrate.Dsl.Custom.SQLFileManagement.SaveToDisk(modelRoot, modelRoot.Modules, modelFolder, diagram, generatedFileList); nHydrate.Dsl.Custom.SQLFileManagement.SaveToDisk(modelRoot, modelRoot.Views, modelFolder, diagram, generatedFileList); //must come before entities (view relations) nHydrate.Dsl.Custom.SQLFileManagement.SaveToDisk(modelRoot, modelRoot.Entities, modelFolder, diagram, generatedFileList); nHydrate.Dsl.Custom.SQLFileManagement.SaveToDisk(modelRoot, modelRoot.StoredProcedures, modelFolder, diagram, generatedFileList); nHydrate.Dsl.Custom.SQLFileManagement.SaveToDisk(modelRoot, modelRoot.Functions, modelFolder, diagram, generatedFileList); nHydrate.Dsl.Custom.SQLFileManagement.SaveDiagramFiles(modelFolder, diagram, generatedFileList); RemoveOrphans(modelFolder, generatedFileList); } catch (Exception ex) { throw; } finally { modelRoot.IsSaving = false; } }
public RefreshItemFromDatabase( nHydrateModel model, nHydrate.Dsl.IDatabaseEntity modelElement, Microsoft.VisualStudio.Modeling.Store store, Microsoft.VisualStudio.Modeling.Shell.ModelingDocData docData) : this() { if (modelElement == null) throw new Exception("Model element canot be null."); _model = model; _store = store; _modelElement = modelElement; _importDomain = new nHydrate.DataImport.SqlClient.ImportDomain(); this.DatabaseConnectionControl1.FileName = Path.Combine((new FileInfo(docData.FileName)).DirectoryName, "importconnection.cache"); DatabaseConnectionControl1.LoadSettings(); //Setup new model _auditFields.Add(new SpecialField { Name = _model.CreatedByColumnName, Type = SpecialFieldTypeConstants.CreatedBy }); _auditFields.Add(new SpecialField { Name = _model.CreatedDateColumnName, Type = SpecialFieldTypeConstants.CreatedDate }); _auditFields.Add(new SpecialField { Name = _model.ModifiedByColumnName, Type = SpecialFieldTypeConstants.ModifiedBy }); _auditFields.Add(new SpecialField { Name = _model.ModifiedDateColumnName, Type = SpecialFieldTypeConstants.ModifedDate }); _auditFields.Add(new SpecialField { Name = _model.TimestampColumnName, Type = SpecialFieldTypeConstants.Timestamp }); _auditFields.Add(new SpecialField { Name = _model.TenantColumnName, Type = SpecialFieldTypeConstants.Tenant }); wizard1.FinishEnabled = false; }
public UserDefinedScriptOrderForm(nHydrateModel model, Microsoft.VisualStudio.Modeling.Store store) : this() { _model = model; _store = store; if (_model.UseModules) { foreach (var module in _model.Modules) { cboInstaller.Items.Add(this.DefaultNamespace + "." + module.Name + ".Install"); } } else { cboInstaller.Items.Add(this.DefaultNamespace + ".Install"); } if (cboInstaller.Items.Count > 0) cboInstaller.SelectedIndex = 0; else MessageBox.Show("There are no modules in this model so no installer project can be selected.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); LoadItems(); }
public static void PopulateFields(nHydrate.Dsl.nHydrateModel model, DataImport.View view, nHydrate.Dsl.View newView) { //newView.Fields.Clear(); foreach (var field in view.FieldList) { var newField = newView.Fields.FirstOrDefault(x => x.Name.ToLower() == field.Name.ToLower()); if (newField == null) { newField = new nHydrate.Dsl.ViewField(model.Partition); newField.Name = field.Name; newView.Fields.Add(newField); //Correct for invalid identifiers if (!nHydrate.Dsl.ValidationHelper.ValidCodeIdentifier(newField.Name)) { newField.CodeFacade = nHydrate.Dsl.ValidationHelper.MakeCodeIdentifier(newField.Name, string.Empty); } } 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 newView.Fields.Remove(x => !view.FieldList.Select(a => a.Name.ToLower()).ToList().Contains(x.Name.ToLower())); }
public EntityAuditMappings(nHydrate.Dsl.nHydrateModel model) : this() { _model = model; #region Load Tree _isLoading = true; foreach (var item in model.Entities.OrderBy(x => x.Name)) { var n = new TreeNode() { Text = item.Name, Tag = item }; tvwItem.Nodes.Add(n); _nodeCache.Add(item, n); n.Nodes.Add(new TreeNode() { Text = "Create Audit", Tag = "C", Checked = item.AllowCreateAudit }); n.Nodes.Add(new TreeNode() { Text = "Modify Audit", Tag = "M", Checked = item.AllowModifyAudit }); n.Nodes.Add(new TreeNode() { Text = "Concurrency", Tag = "T", Checked = item.AllowTimestamp }); n.Checked = item.AllowCreateAudit || item.AllowModifyAudit || item.AllowTimestamp; } _isLoading = false; #endregion }
public ModelUtilitiesForm(nHydrateModel model, Microsoft.VisualStudio.Modeling.Store store, nHydrateDiagram diagram) : this() { _model = model; _store = store; _diagram = diagram; }
public RefactorCombineTableForm(Microsoft.VisualStudio.Modeling.Store store, nHydrateDiagram diagram, nHydrateModel model, Entity entity1, Entity entity2) : this() { _store = store; _model = model; _diagram = diagram; _entity1 = entity1; _entity2 = entity2; lblEntity1.Text = entity1.Name; lblEntity2.Text = entity2.Name; var fieldList = new List<Field>(); fieldList.AddRange(entity1.Fields); fieldList.AddRange(entity2.Fields); fieldList.Remove(x => entity2.PrimaryKeyFields.Contains(x)); if (fieldList.Select(x => x.Name.ToLower()).Count() != fieldList.Select(x => x.Name.ToLower()).Distinct().Count()) { cmdApply.Enabled = false; lblError.Text = "Duplicate field names are not allowed."; lblError.Visible = true; } fieldList.ForEach(x => lstField.Items.Add(x.Name)); }
public RefactorRetypePkForm(Microsoft.VisualStudio.Modeling.Store store, nHydrateModel model, Entity entity) : this() { _store = store; _model = model; _entity = entity; foreach (var s in Enum.GetNames(typeof(DataTypeConstants))) { cboType.Items.Add(s); } cboType.SelectedItem = entity.PrimaryKeyFields.First().DataType.ToString(); var tree = new Dictionary<EntityHasEntities, Field>(); BuildRelationTree(entity, tree); var used = new List<string>(); foreach (var r in tree.Keys) { var otherField = tree[r]; var c = r.ParentEntity.Name + "." + otherField.Name; var p = r.ChildEntity.Name + "." + otherField.Name; if (!used.Contains(p)) { lstItem.Items.Add(new RelationDisplay() { Display = p, Relation = r }); used.Add(p); } if (!used.Contains(c)) { lstItem.Items.Add(new RelationDisplay() { Display = c, Relation = r }); used.Add(c); } } }
public StaticDataForm(Entity entity, Microsoft.VisualStudio.Modeling.Store store, nHydrateModel model, Microsoft.VisualStudio.Modeling.Shell.ModelingDocData docData) : this() { _entity = entity; _store = store; _model = model; _docData = docData; this.LoadData(); }
public IndexesForm(List<Entity> entityList, nHydrateModel model, Store store) : this() { _model = model; _store = store; _entityList = entityList; LoadGrid(); lblHeader.Text = "A list of indexed fields"; }
public TableCompositeColumnForm(Composite composite, nHydrateModel model, Microsoft.VisualStudio.Modeling.Store store) : this() { _composite = composite; _model = model; _store = store; this.RefreshForm(); }
public PrecedenseOrderForm(nHydrateModel model, Microsoft.VisualStudio.Modeling.Store store) : this() { _model = model; _store = store; var list = PrecedenceUtil.GetAllPrecedenceItems(_model).ToList(); list.Sort(new PrecedenseComparer()); LoadGrid(list); }
public IndexColumnOrder(Index index, nHydrateModel model, Store store) : this() { _index = index; _model = model; _store = store; foreach (var indexColumn in index.IndexColumns.OrderBy(x => x.SortOrder)) { lstItem.Items.Add(indexColumn); } }
public RefactorPreviewCreateAssociativeForm(Microsoft.VisualStudio.Modeling.Store store, nHydrateDiagram diagram, nHydrateModel model, Entity entity1, Entity entity2) : this() { _store = store; _model = model; _diagram = diagram; _entity1 = entity1; _entity2 = entity2; lblEntity1.Text = entity1.Name; lblEntity2.Text = entity2.Name; txtName.Text = _entity1.Name + _entity2.Name; }
public RefactorSplitTableForm(Microsoft.VisualStudio.Modeling.Store store, nHydrateDiagram diagram, nHydrateModel model, Entity entity) : this() { _store = store; _model = model; _diagram = diagram; _entity = entity; wizard1.FinishEnabled = false; lblSourceEntity.Text = entity.Name; foreach (var field in entity.Fields.Where(x => !x.IsPrimaryKey).OrderBy(x => x.Name)) { lstField1.Items.Add(new DisplayFieldItem() { Field = field }); } }
public static void LoadInitialIndexes(nHydrateModel modelRoot) { //Setup primary keys foreach (var entity in modelRoot.Entities) { if (entity.Indexes.Count(x => x.IndexType == IndexTypeConstants.PrimaryKey) == 0 && entity.PrimaryKeyFields.Count > 0) { var newIndex = new Index(entity.Partition); newIndex.ParentEntityID = entity.Id; newIndex.IndexType = IndexTypeConstants.PrimaryKey; newIndex.Clustered = true; entity.Indexes.Add(newIndex); foreach (var field in entity.PrimaryKeyFields) { var newColumn = new IndexColumn(field.Partition); newColumn.FieldID = field.Id; newColumn.IsInternal = true; newIndex.IndexColumns.Add(newColumn); } } } var allIndexedField = modelRoot.Entities.SelectMany(x => x.Fields).Where(x => x.IsIndexed && !x.IsPrimaryKey); var allIndexes = modelRoot.Entities.SelectMany(x => x.Indexes); foreach (var field in allIndexedField) { var index = allIndexes.FirstOrDefault(x => x.IndexColumns.Count == 1 && x.IndexColumns.First().FieldID == field.Id && x.IndexColumns.First().Ascending); if (index == null) { var newIndex = new Index(modelRoot.Partition); newIndex.ParentEntityID = field.Entity.Id; newIndex.IndexType = IndexTypeConstants.IsIndexed; field.Entity.Indexes.Add(newIndex); var newColumn = new IndexColumn(modelRoot.Partition); newColumn.FieldID = field.Id; newColumn.IsInternal = true; newIndex.IndexColumns.Add(newColumn); } } }
public ImportDatabaseForm( nHydrateModel model, Microsoft.VisualStudio.Modeling.Store store, Microsoft.VisualStudio.Modeling.Diagrams.Diagram diagram, nHydrate.DataImport.Database currentDatabase, Microsoft.VisualStudio.Modeling.Shell.ModelingDocData docData) : this() { _model = model; _store = store; _diagram = diagram; _docData = docData; this.CurrentDatabase = currentDatabase; this.DatabaseConnectionControl1.FileName = Path.Combine((new FileInfo(docData.FileName)).DirectoryName, "importconnection.cache"); tvwAdd.AfterCheck += new TreeViewEventHandler(treeView1_AfterCheck); tvwRefresh.AfterCheck += new TreeViewEventHandler(treeView1_AfterCheck); tvwDelete.AfterCheck += new TreeViewEventHandler(treeView1_AfterCheck); //tvwAdd.AfterSelect += new TreeViewEventHandler(treeView1_AfterSelect); //tvwRefresh.AfterSelect += new TreeViewEventHandler(treeView1_AfterSelect); //tvwDelete.AfterSelect += new TreeViewEventHandler(treeView1_AfterSelect); wizard1.BeforeSwitchPages += new nHydrate.Wizard.Wizard.BeforeSwitchPagesEventHandler(wizard1_BeforeSwitchPages); wizard1.AfterSwitchPages += new nHydrate.Wizard.Wizard.AfterSwitchPagesEventHandler(wizard1_AfterSwitchPages); wizard1.Finish += new EventHandler(wizard1_Finish); wizard1.FinishEnabled = false; chkSettingPK.CheckedChanged += new EventHandler(chkSettingPK_CheckedChanged); cmdTestConnection.Click += new EventHandler(cmdTestConnection_Click); this.Settings = new ImportModelSettings(); this.Settings.OverridePrimaryKey = chkSettingPK.Checked; DatabaseConnectionControl1.LoadSettings(); cboModule.Items.Add("(Choose One)"); model.Modules.ForEach(x => cboModule.Items.Add(x.Name)); cboModule.SelectedIndex = 0; cboModule.Enabled = model.UseModules; chkMergeModule.Visible = model.UseModules; EnableButtons(); }
public RefactorPreviewChangeVarcharForm(Microsoft.VisualStudio.Modeling.Store store, nHydrateModel model, List<Microsoft.VisualStudio.Modeling.ModelElement> list) : this() { _store = store; _model = model; _list = list; //If the list is null then this use the whole model if (_list == null) { _list = new List<Microsoft.VisualStudio.Modeling.ModelElement>(); _list.AddRange(_model.Entities); _list.AddRange(_model.Views); _list.AddRange(_model.StoredProcedures); _list.AddRange(_model.Functions); } this.Populate(); }
public RelationshipDialog(nHydrateModel model, Microsoft.VisualStudio.Modeling.Store store, EntityHasEntities connector, bool allowConfigure) : this() { try { _connector = connector; _model = model; _store = store; _allowConfigure = allowConfigure; chkEnforce.Visible = !model.UseModules; //Load the Form var parent = connector.ParentEntity; lblPrimaryTable.Text = parent.Name; if (!allowConfigure) lblSecondaryTable.Text = connector.ChildEntity.Name; LoadRelation(); if (_allowConfigure) { cboChildTable.Items.Clear(); foreach (var entity in _model.Entities.OrderBy(x => x.Name)) { cboChildTable.Items.Add(entity.Name); } lblSecondaryTable.Visible = false; cboChildTable.Visible = true; } } catch (Exception ex) { throw; } }
public static void PopulateFields(nHydrate.Dsl.nHydrateModel model, DataImport.Entity importItem, Entity targetItem) { foreach (var field in importItem.FieldList) { var newField = targetItem.Fields.FirstOrDefault(x => x.Name.ToLower() == field.Name.ToLower()); if (newField == null) { newField = new nHydrate.Dsl.Field(model.Partition); } if (!targetItem.Fields.Contains(newField)) { targetItem.Fields.Add(newField); } newField.SortOrder = field.SortOrder; newField.Name = field.Name; newField.DataType = (DataTypeConstants)Enum.Parse(typeof(DataTypeConstants), field.DataType.ToString()); newField.Length = field.Length; newField.Nullable = field.Nullable; newField.IsCalculated = field.IsComputed; newField.Default = field.DefaultValue; newField.IsUnique = field.IsUnique; newField.Formula = field.Formula; newField.Identity = (field.Identity ? IdentityTypeConstants.Database : IdentityTypeConstants.None); newField.IsPrimaryKey = field.PrimaryKey; newField.Scale = field.Scale; newField.ImportedDefaultName = field.ImportedDefaultName; //DO NOT IMPORT METADATA //Correct for invalid identifiers if (!nHydrate.Dsl.ValidationHelper.ValidCodeIdentifier(newField.Name)) { newField.CodeFacade = nHydrate.Dsl.ValidationHelper.MakeCodeIdentifier(newField.Name, string.Empty); } } var removedFields = targetItem.Fields.Remove(x => !importItem.FieldList.Select(y => y.Name.ToLower()).Contains(x.Name.ToLower())); }
public RelationCollectionForm( nHydrateModel model, EntityShape entityShape, Microsoft.VisualStudio.Modeling.Store store, Microsoft.VisualStudio.Modeling.Diagrams.Diagram diagram, nHydrateDocData docData) : this() { _model = model; _store = store; _diagram = diagram; _docData = docData; _entityShape = entityShape; lvwMembers.Columns.Clear(); lvwMembers.Columns.Add(new ColumnHeader() { Text = "Parent", Width = 200 }); lvwMembers.Columns.Add(new ColumnHeader() { Text = "Child", Width = 200 }); lvwMembers.Columns.Add(new ColumnHeader() { Text = "Role", Width = 200 }); lvwMembers.ListViewItemSorter = new nHydrate.Generator.Common.Forms.CommonLibrary.ListViewItemComparer(0, lvwMembers.Sorting); lvwMembers.Sort(); this.LoadList(); }
public static void ImportDatabase(nHydrate.Dsl.nHydrateModel model, Store store, Microsoft.VisualStudio.Modeling.Diagrams.Diagram diagram, nHydrate.DataImport.Database database) { ((nHydrate.Dsl.nHydrateDiagram)diagram).IsLoading = true; model.IsLoading = true; var pkey = ProgressHelper.ProgressingStarted("Processing Import...", true); model.IsLoading = true; try { var addedEntities = new List <Entity>(); var diagramEntities = model.Entities.ToList(); var diagramViews = model.Views.ToList(); using (var transaction = store.TransactionManager.BeginTransaction(Guid.NewGuid().ToString())) { #region TEMP TEMP - RESET THE PARAMETERS AND FIELDS OF ALL NON-ENTITY OBJECTS - USED FOR DEBUGGING //foreach (var entity in model.Entities) //{ // var table = database.EntityList.FirstOrDefault(x => x.Name == entity.Name); // if (table != null) // { // foreach (var field in entity.Fields) // { // var column = table.FieldList.FirstOrDefault(x => x.Name == field.Name); // if (column != null) // { // field.SortOrder = column.SortOrder; // } // } // } // entity.Fields.Sort((x, y) => (x.SortOrder < y.SortOrder ? -1 : 0)); //} //foreach (var view in database.ViewList) //{ // var newView = diagramViews.FirstOrDefault(x => x.Name.ToLower() == view.Name.ToLower()); // if (newView != null) // { // foreach (var field in view.FieldList) // { // var newField = newView.Fields.FirstOrDefault(x => x.Name.ToLower() == field.Name.ToLower()); // if (newField != null) newField.Nullable = field.Nullable; // } // } //} //foreach (var index in database.IndexList.Where(x => x.FieldList.Count == 1 && !x.FieldList.First().IsDescending)) //{ // var entity = model.Entities.FirstOrDefault(x => x.Name == index.TableName); // if (entity != null) // { // var field = entity.Fields.FirstOrDefault(x => x.Name == index.FieldList.First().Name); // if (field != null) // { // field.IsIndexed = true; // } // } //} //transaction.Commit(); //return; #endregion #region Load Entities var addedChangedEntities = database.EntityList.Where(x => x.ImportState == DataImport.ImportStateConstants.Added || x.ImportState == DataImport.ImportStateConstants.Modified).ToList(); #region Entities foreach (var entity in addedChangedEntities) { var newEntity = diagramEntities.FirstOrDefault(x => x.Id == entity.ID); if (newEntity == null) { newEntity = diagramEntities.FirstOrDefault(x => x.Name.ToLower() == entity.Name.ToLower()); } if (newEntity == null) { newEntity = new Entity(model.Partition) { Name = entity.Name }; model.Entities.Add(newEntity); addedEntities.Add(newEntity); //Correct for invalid identifiers //if (!nHydrate.Dsl.ValidationHelper.ValidCodeIdentifier(newEntity.Name) && !nHydrate.Dsl.ValidationHelper.IsReservedWord(newEntity.Name)) if (!nHydrate.Dsl.ValidationHelper.ValidCodeIdentifier(newEntity.Name)) { newEntity.CodeFacade = nHydrate.Dsl.ValidationHelper.MakeCodeIdentifier(newEntity.Name, string.Empty); } } newEntity.AllowCreateAudit = entity.AllowCreateAudit; newEntity.AllowModifyAudit = entity.AllowModifyAudit; newEntity.AllowTimestamp = entity.AllowTimestamp; newEntity.IsTenant = entity.IsTenant; newEntity.Name = entity.Name; newEntity.Schema = entity.Schema; PopulateFields(model, entity, newEntity); //Order columns by database //newEntity.Fields.Sort((x, y) => x.Name.CompareTo(y.Name)); newEntity.Fields.Sort((x, y) => (x.SortOrder < y.SortOrder ? -1 : 0)); } #endregion //Remove the ones that need to be remove model.Entities.Remove(x => database.EntityList.Where(z => z.ImportState == DataImport.ImportStateConstants.Deleted).Select(a => a.Name).ToList().Contains(x.Name)); #endregion #region Load Relations if (!database.IgnoreRelations) { var allRelationElementList = store.CurrentContext.Partitions.First().Value.ElementDirectory.AllElements .ToList() .Where(x => x is EntityHasEntities) .ToList() .Cast <EntityHasEntities>() .ToList(); foreach (var entity in database.EntityList) { foreach (var relation in entity.RelationshipList) { var isNewConnection = false; var connection = allRelationElementList.FirstOrDefault(x => x.ImportData == relation.ImportData); //Now verify that this is the table has not been renamed if (connection != null) { //If the table names no longer match then create a new relation if (!connection.ChildEntity.Name.Match(relation.TargetEntity.Name) || !connection.ParentEntity.Name.Match(relation.SourceEntity.Name)) { connection.ImportData = string.Empty; connection = null; } } if (connection == null) { //try to find this relation by table/fields/role connection = allRelationElementList.FirstOrDefault(x => x.GetCorePropertiesHash() == relation.CorePropertiesHash); } var parent = model.Entities.FirstOrDefault(x => x.Name == relation.SourceEntity.Name); var child = model.Entities.FirstOrDefault(x => x.Name == relation.TargetEntity.Name); if (connection == null) { var existingRelation = diagram.NestedChildShapes.FirstOrDefault(x => x.Id == relation.ID); if (existingRelation == null) { if (child != null && parent != null) { //var currentList = store.CurrentContext.Partitions.First().Value.ElementDirectory.AllElements.ToList(); //parent.ChildEntities.Add(child); //var updatedList = store.CurrentContext.Partitions.First().Value.ElementDirectory.AllElements.ToList(); //var last = updatedList.Last(); //updatedList.RemoveAll(x => currentList.Contains(x)); //connection = updatedList.First() as EntityHasEntities; //if (connection != last) System.Diagnostics.Debug.Write(""); parent.ChildEntities.Add(child); connection = store.CurrentContext.Partitions.First().Value.ElementDirectory.AllElements.Last() as EntityHasEntities; isNewConnection = true; connection.ImportData = relation.ImportData; } } } //Relation does not exist //Add the relation fields if (parent != null && child != null) { foreach (var ritem in relation.RelationshipColumnList) { var parentField = parent.Fields.FirstOrDefault(x => x.Name == ritem.ParentField.Name); var childField = child.Fields.FirstOrDefault(x => x.Name == ritem.ChildField.Name); if (parentField != null && childField != null) { //Do not import the role name again. if (isNewConnection) { connection.RoleName = relation.RoleName; connection.ImportedConstraintName = relation.ConstraintName; } var currentRelationField = model.RelationFields.FirstOrDefault(x => x.SourceFieldId == parentField.Id && x.TargetFieldId == childField.Id && x.RelationID == connection.Id); //Only add if not there already if (currentRelationField == null) { model.RelationFields.Add( new RelationField(model.Partition) { SourceFieldId = parentField.Id, TargetFieldId = childField.Id, RelationID = connection.Id, } ); } } } //Relation Columns } } } } #endregion #region Process Indexes //Only get the single column indexes ascending var isIndexedList = database.IndexList.Where(x => x.FieldList.Count == 1 && !x.FieldList.First().IsDescending).ToList(); var allIndexList = database.IndexList.Where(x => addedChangedEntities.Select(z => z.Name.ToLower()).Contains(x.TableName.ToLower())).ToList(); //Delete existing indexes by name. These will be recreated. foreach (var index in allIndexList) { var existing = model.Entities.SelectMany(x => x.Indexes).FirstOrDefault(x => x.ImportedName == index.IndexName); if (existing != null) { existing.Delete(); } } //Delete existing IsIndexed indexes with no import names as they will be recreated var existingIsIndexedList = model.Entities.Where(x => addedChangedEntities.Select(z => z.Name.ToLower()).Contains(x.Name.ToLower())).SelectMany(x => x.Indexes).Where(x => x.IsIndexedType).ToList(); foreach (var index in isIndexedList) { foreach (var existing in existingIsIndexedList) { if (index.IsMatch(existing)) { existing.Delete(); } } } //Create all indexes foreach (var index in allIndexList) { var entity = model.Entities.FirstOrDefault(x => x.Name == index.TableName); if (entity != null) { var realFields = entity.Fields.Where(x => index.FieldList.Select(z => z.Name).Contains(x.Name)).ToList(); if (realFields.Count > 0) { //Try to get the PK if one exists var isNew = true; Index newIndex = null; if (index.IsPrimaryKey) { newIndex = entity.Indexes.FirstOrDefault(x => x.IndexType == IndexTypeConstants.PrimaryKey); if (newIndex != null) { isNew = false; newIndex.IndexColumns.Clear(); } } //Create an index if (newIndex == null) { newIndex = new Index(entity.Partition); } newIndex.ParentEntityID = entity.Id; newIndex.ImportedName = index.IndexName; newIndex.Clustered = index.Clustered; newIndex.IsUnique = index.IsUnique; if (index.IsPrimaryKey) { newIndex.IndexType = IndexTypeConstants.PrimaryKey; } else if (isIndexedList.Contains(index)) { newIndex.IndexType = IndexTypeConstants.IsIndexed; } else { newIndex.IndexType = IndexTypeConstants.User; } if (isNew) { entity.Indexes.Add(newIndex); } foreach (var ic in index.FieldList) { var field = realFields.FirstOrDefault(x => x.Name == ic.Name); if (field != null) { var newIndexColumn = new IndexColumn(entity.Partition); newIndexColumn.Ascending = !ic.IsDescending; newIndexColumn.FieldID = field.Id; newIndexColumn.IsInternal = true; newIndexColumn.SortOrder = ic.OrderIndex; newIndex.IndexColumns.Add(newIndexColumn); } } } } } //Create the special IsIndexed settings //This will not create a new index since it was created above foreach (var index in isIndexedList) { var entity = model.Entities.FirstOrDefault(x => x.Name == index.TableName); if ((entity != null) && addedChangedEntities.Select(z => z.Name.ToLower()).Contains(entity.Name.ToLower())) { var field = entity.Fields.FirstOrDefault(x => x.Name == index.FieldList.First().Name); if (field != null) { field.IsIndexed = true; } } } #endregion #region Add Views foreach (var view in database.ViewList.Where(x => x.ImportState == DataImport.ImportStateConstants.Added || x.ImportState == DataImport.ImportStateConstants.Modified)) { var newView = diagramViews.FirstOrDefault(x => x.Id == view.ID); if (newView == null) { newView = diagramViews.FirstOrDefault(x => x.Name.ToLower() == view.Name.ToLower()); } if (newView == null) { newView = new nHydrate.Dsl.View(model.Partition) { Name = view.Name }; model.Views.Add(newView); //Correct for invalid identifiers //if (!nHydrate.Dsl.ValidationHelper.ValidCodeIdentifier(newView.Name) && !nHydrate.Dsl.ValidationHelper.IsReservedWord(newView.Name)) if (!nHydrate.Dsl.ValidationHelper.ValidCodeIdentifier(newView.Name)) { newView.CodeFacade = nHydrate.Dsl.ValidationHelper.MakeCodeIdentifier(newView.Name, string.Empty); } } newView.Name = view.Name; newView.Schema = view.Schema; newView.SQL = view.SQL; PopulateFields(model, view, newView); } //Remove the ones that need to be remove model.Views.Remove(x => database.ViewList.Where(z => z.ImportState == DataImport.ImportStateConstants.Deleted).Select(a => a.Name).ToList().Contains(x.Name)); #endregion transaction.Commit(); } } catch (Exception ex) { throw; } finally { model.IsLoading = false; ProgressHelper.ProgressingComplete(pkey); ((nHydrate.Dsl.nHydrateDiagram)diagram).IsLoading = false; model.IsLoading = false; } }
public override nHydrateModel LoadModelAndDiagram(DslModeling::SerializationResult serializationResult, DslModeling::Partition modelPartition, string modelFileName, DslModeling::Partition diagramPartition, string diagramFileName, DslModeling::ISchemaResolver schemaResolver, DslValidation::ValidationController validationController, DslModeling::ISerializerLocator serializerLocator) { var modelRoot = base.LoadModelAndDiagram(serializationResult, modelPartition, modelFileName, diagramPartition, diagramFileName, schemaResolver, validationController, serializerLocator); _model = modelRoot; //Verify that we can open the model var thisAssem = System.Reflection.Assembly.GetExecutingAssembly(); var thisAssemName = thisAssem.GetName(); var toolVersion = thisAssemName.Version; var modelVersion = new Version(0, 0); var dslVersion = new Version(0, 0); if (!string.IsNullOrEmpty(modelRoot.ModelVersion)) { modelVersion = new Version(modelRoot.ModelVersion); } if (toolVersion < modelVersion) { throw new Exception("This model was created with newer version of the modeler. Please install version '" + modelVersion.ToString() + "' or higher."); } try { var document = new XmlDocument(); document.LoadXml(File.ReadAllText(modelFileName)); var attr = document.DocumentElement.Attributes["dslVersion"]; if (attr != null) { dslVersion = new Version(attr.Value); } } catch { } //When saved the new version will be this tool version modelRoot.ModelVersion = LAST_MODEL_MODEL_COMPATIBLE; modelRoot.ModelFileName = modelFileName; modelRoot.IsDirty = false; var mainInfo = new FileInfo(modelFileName); var modelName = mainInfo.Name.Replace(".nhydrate", ".model"); if (modelRoot.ModelToDisk) { //Load from disk store nHydrate.Dsl.Custom.SQLFileManagement.LoadFromDisk(modelRoot, mainInfo.DirectoryName, modelRoot.Partition.Store, modelName); #region Watch Folder //var modelFolder = nHydrate.Dsl.Custom.SQLFileManagement.GetModelFolder(mainInfo.DirectoryName, modelName); //_watchFolder.Path = modelFolder; //_watchFolder.IncludeSubdirectories = true; //_watchFolder.NotifyFilter = System.IO.NotifyFilters.FileName | // NotifyFilters.LastWrite | // NotifyFilters.Size | // NotifyFilters.CreationTime | // NotifyFilters.DirectoryName; //_watchFolder.Changed += new FileSystemEventHandler(FolderChangedEvent); //_watchFolder.Created += new FileSystemEventHandler(FolderChangedEvent); //_watchFolder.Deleted += new FileSystemEventHandler(FolderChangedEvent); //_watchFolder.Renamed += new System.IO.RenamedEventHandler(FolderFileRenamedEvent); //try //{ // _watchFolder.EnableRaisingEvents = true; //} //catch (ArgumentException) //{ // //Do Nothing //} #endregion } else { try { var f = nHydrate.Dsl.Custom.SQLFileManagement.GetModelFolder(mainInfo.DirectoryName, modelName); if (Directory.Exists(f)) { Directory.Delete(f, true); } } catch { } } modelRoot.IsDirty = false; //SyncServer //var syncServerFile = modelFileName + ".syncserver"; //modelRoot.SyncServerURL = nHydrate.SyncServer.Client.SyncDomain.LoadSyncServerConfig(syncServerFile); //Alphabetized columns if need be //foreach (var entity in modelRoot.Entities) //{ // entity.Fields.Sort((x, y) => x.Name.CompareTo(y.Name)); //} #region Load Indexes //For now load the indexes into the REAL indexes collection //This should only happens the first time using (var transaction = modelRoot.Store.TransactionManager.BeginTransaction(Guid.NewGuid().ToString())) { LoadInitialIndexes(modelRoot); transaction.Commit(); } #endregion #region Handle the Precedence if (modelRoot.StoredProcedures.Count > 0) { modelRoot.MaxPrecedenceOrder = Math.Max(modelRoot.StoredProcedures.Max(x => x.PrecedenceOrder), modelRoot.MaxPrecedenceOrder); } if (modelRoot.Views.Count > 0) { modelRoot.MaxPrecedenceOrder = Math.Max(modelRoot.Views.Max(x => x.PrecedenceOrder), modelRoot.MaxPrecedenceOrder); } if (modelRoot.Functions.Count > 0) { modelRoot.MaxPrecedenceOrder = Math.Max(modelRoot.Functions.Max(x => x.PrecedenceOrder), modelRoot.MaxPrecedenceOrder); } modelRoot.StoredProcedures.Where(x => x.PrecedenceOrder == 0).ToList().ForEach(x => x.PrecedenceOrder = ++modelRoot.MaxPrecedenceOrder); modelRoot.Views.Where(x => x.PrecedenceOrder == 0).ToList().ForEach(x => x.PrecedenceOrder = ++modelRoot.MaxPrecedenceOrder); modelRoot.Functions.Where(x => x.PrecedenceOrder == 0).ToList().ForEach(x => x.PrecedenceOrder = ++modelRoot.MaxPrecedenceOrder); #endregion #region Load the refactorizations if (File.Exists(modelFileName)) { var fi = new FileInfo(modelFileName); if (fi.Length > 5) { var document = new XmlDocument(); document.Load(modelFileName); if (document.DocumentElement != null) { var refactorList = document.DocumentElement.SelectSingleNode("refactorizations"); if (refactorList != null) { foreach (XmlNode n in refactorList.ChildNodes) { //if (XmlHelper.GetAttributeValue(n, "type", string.Empty) == "guidtoid") //{ // modelRoot.Refactorizations.Add(new RefactorChangeGuidToID((XmlElement)n)); //} //else if (XmlHelper.GetAttributeValue(n, "type", string.Empty) == "guidtoididtoguid") //{ // modelRoot.Refactorizations.Add(new RefactorChangeIDToGuid((XmlElement)n)); //} if (XmlHelper.GetAttributeValue(n, "type", string.Empty) == "splittable") { modelRoot.Refactorizations.Add(new RefactorTableSplit((XmlElement)n)); } else if (XmlHelper.GetAttributeValue(n, "type", string.Empty) == "combinetable") { modelRoot.Refactorizations.Add(new RefactorTableCombine((XmlElement)n)); } } } } } } #endregion //If using modules from a previous model version then perform this one time action of //assigning the indexes to all modules so user will not be confronted with a a huge action to perform after upgrade if (dslVersion <= new Version(5, 1, 2, 118) && modelRoot.UseModules) { using (var transaction = modelRoot.Store.TransactionManager.BeginTransaction(Guid.NewGuid().ToString())) { foreach (var module in modelRoot.Modules) { var contained = module.GetEntities().ToList(); foreach (var index in modelRoot.Entities.Where(x => contained.Contains(x)).SelectMany(x => x.IndexList)) { _model.IndexModules.Add(new IndexModule(_model.Partition) { IndexID = index.Id, ModuleId = module.Id }); } } transaction.Commit(); } } return(modelRoot); }
private static void LoadFromDisk(IEnumerable<Entity> list, nHydrateModel model, string rootFolder, Microsoft.VisualStudio.Modeling.Store store) { var folder = Path.Combine(rootFolder, FOLDER_ET); 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 Entity(model.Partition, new PropertyAssignment[] { new PropertyAssignment(ElementFactory.IdPropertyAssignment, XmlHelper.GetAttributeValue(document.DocumentElement, "id", Guid.NewGuid())) }); model.Entities.Add(item); } System.Windows.Forms.Application.DoEvents(); #region Properties item.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(FieldParameter_PropertyChanged); item.Name = XmlHelper.GetAttributeValue(document.DocumentElement, "name", item.Name); item.AllowAuditTracking = XmlHelper.GetAttributeValue(document.DocumentElement, "allowaudittracking", item.AllowAuditTracking); item.AllowCreateAudit = XmlHelper.GetAttributeValue(document.DocumentElement, "allowcreateaudit", item.AllowCreateAudit); item.AllowModifyAudit = XmlHelper.GetAttributeValue(document.DocumentElement, "allowmodifyaudit", item.AllowModifyAudit); item.AllowTimestamp = XmlHelper.GetAttributeValue(document.DocumentElement, "allowtimestamp", item.AllowTimestamp); item.CodeFacade = XmlHelper.GetAttributeValue(document.DocumentElement, "codefacade", item.CodeFacade); item.Immutable = XmlHelper.GetAttributeValue(document.DocumentElement, "immutable", item.Immutable); item.EnforcePrimaryKey = XmlHelper.GetAttributeValue(document.DocumentElement, "enforceprimarykey", item.EnforcePrimaryKey); item.IsAssociative = XmlHelper.GetAttributeValue(document.DocumentElement, "isassociative", item.IsAssociative); item.GeneratesDoubleDerived = XmlHelper.GetAttributeValue(document.DocumentElement, "generatesdoublederived", item.GeneratesDoubleDerived); item.IsGenerated = XmlHelper.GetAttributeValue(document.DocumentElement, "isgenerated", item.IsGenerated); item.IsTenant = XmlHelper.GetAttributeValue(document.DocumentElement, "isTenant", item.IsTenant); var tev = XmlHelper.GetAttributeValue(document.DocumentElement, "typedentity", item.TypedEntity.ToString()); TypedEntityConstants te; if (Enum.TryParse<TypedEntityConstants>(tev, true, out te)) item.TypedEntity = te; item.Schema = XmlHelper.GetAttributeValue(document.DocumentElement, "schema", item.Schema); item.Summary = XmlHelper.GetNodeValue(document.DocumentElement, "summary", item.Summary); item.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(FieldParameter_PropertyChanged); #endregion #region 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 Field(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", string.Empty); 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; var itv = XmlHelper.GetAttributeValue(n, "identity", field.Identity.ToString()); IdentityTypeConstants it; if (Enum.TryParse<IdentityTypeConstants>(itv, true, out it)) field.Identity = it; field.DataFormatString = XmlHelper.GetNodeValue(n, "dataformatstring", field.DataFormatString); field.Default = XmlHelper.GetAttributeValue(n, "default", field.Default); field.DefaultIsFunc = XmlHelper.GetAttributeValue(n, "defaultisfunc", field.DefaultIsFunc); field.Formula = XmlHelper.GetAttributeValue(n, "formula", field.Formula); field.IsGenerated = XmlHelper.GetAttributeValue(n, "isgenerated", field.IsGenerated); field.IsIndexed = XmlHelper.GetAttributeValue(n, "isindexed", field.IsIndexed); field.IsPrimaryKey = XmlHelper.GetAttributeValue(n, "isprimarykey", field.IsPrimaryKey); field.IsCalculated = XmlHelper.GetAttributeValue(n, "Iscalculated", field.IsCalculated); field.IsUnique = XmlHelper.GetAttributeValue(n, "isunique", field.IsUnique); field.Length = XmlHelper.GetAttributeValue(n, "length", field.Length); field.Scale = XmlHelper.GetAttributeValue(n, "scale", field.Scale); field.SortOrder = XmlHelper.GetAttributeValue(n, "sortorder", field.SortOrder); field.IsReadOnly = XmlHelper.GetAttributeValue(n, "isreadonly", field.IsReadOnly); field.Category = XmlHelper.GetAttributeValue(n, "category", field.Category); field.Collate = XmlHelper.GetAttributeValue(n, "collate", field.Collate); field.FriendlyName = XmlHelper.GetAttributeValue(n, "friendlyname", field.FriendlyName); field.IsBrowsable = XmlHelper.GetAttributeValue(n, "isbrowsable", field.IsBrowsable); field.Max = XmlHelper.GetAttributeValue(n, "max", field.Max); field.Min = XmlHelper.GetAttributeValue(n, "min", field.Min); field.ValidationExpression = XmlHelper.GetAttributeValue(n, "validationexpression", field.ValidationExpression); field.Obsolete = XmlHelper.GetAttributeValue(n, "obsolete", field.Obsolete); 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; } #endregion #region Security var secNode = document.DocumentElement.SelectSingleNode("//security"); if (secNode != null) { var secItemID = XmlHelper.GetAttributeValue(secNode, "id", Guid.NewGuid()); var secFunction = new SecurityFunction(item.Partition, new PropertyAssignment[] { new PropertyAssignment(ElementFactory.IdPropertyAssignment, XmlHelper.GetAttributeValue(secNode, "id", secItemID)) }); item.SecurityFunction = secFunction; item.SecurityFunction.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(FieldParameter_PropertyChanged); item.SecurityFunction.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(FieldParameter_PropertyChanged); var ff = Path.Combine(folder, item.Name + ".security.sql"); if (File.Exists(ff)) item.SecurityFunction.SQL = File.ReadAllText(ff); //Parameters var parametersNodes = secNode.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.SecurityFunction.SecurityFunctionParameters.FirstOrDefault(x => x.Id == subItemID); if (parameter == null) { parameter = new SecurityFunctionParameter(item.Partition, new PropertyAssignment[] { new PropertyAssignment(ElementFactory.IdPropertyAssignment, XmlHelper.GetAttributeValue(n, "id", Guid.NewGuid())) }); item.SecurityFunction.SecurityFunctionParameters.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.SecurityFunction.SecurityFunctionParameters.Remove(x => !nameList.Contains(x.Name.ToLower())) > 0) item.nHydrateModel.IsDirty = true; } } #endregion LoadEntityIndexes(folder, item); //Order fields (skip for model that did not have sort order when saved) var fc = new FieldOrderComparer(); if (item.Fields.Count(x => x.SortOrder > 0) > 0) item.Fields.Sort(fc.Compare); } //Must load relations AFTER ALL entities are loaded foreach (var item in model.Entities) { LoadEntityRelations(folder, item); LoadModules(folder, item); LoadEntityStaticData(folder, item); LoadEntityMetaData(folder, item); LoadEntityComposites(folder, item); } #endregion }
public override void SaveModelAndDiagram(Microsoft.VisualStudio.Modeling.SerializationResult serializationResult, nHydrateModel modelRoot, string modelFileName, nHydrateDiagram diagram, string diagramFileName, Encoding encoding, bool writeOptionalPropertiesWithDefaultValue) { var mainInfo = new FileInfo(modelFileName); modelRoot.ModelFileName = modelFileName; var modelName = mainInfo.Name.Replace(".nhydrate", ".model"); if (modelRoot.ModelToDisk) { nHydrate.Dsl.Custom.SQLFileManagement.SaveToDisk(modelRoot, mainInfo.DirectoryName, modelName, diagram); } else { try { var f = nHydrate.Dsl.Custom.SQLFileManagement.GetModelFolder(mainInfo.DirectoryName, modelName); if (Directory.Exists(f)) { Directory.Delete(f, true); } } catch { } } base.SaveModelAndDiagram(serializationResult, modelRoot, modelFileName, diagram, diagramFileName, encoding, writeOptionalPropertiesWithDefaultValue); //Model File if (modelRoot.ModelToDisk) { var document = new XmlDocument(); document.Load(modelFileName); //Remove entire node for Views, Stored Procedures, and Functions for (var ii = document.DocumentElement.ChildNodes.Count - 1; ii >= 0; ii--) { var n = document.DocumentElement.ChildNodes[ii]; document.DocumentElement.RemoveChild(n); } document.Save(modelFileName); } //Diagram File //Now gut the diagram file var diagramFile = modelFileName + ".diagram"; if (modelRoot.ModelToDisk) { if (File.Exists(diagramFile)) { var document = new XmlDocument(); document.Load(diagramFile); //Remove all child nodes var n = document.DocumentElement.SelectSingleNode("nestedChildShapes"); if (n != null) { document.DocumentElement.RemoveChild(n); document.Save(diagramFile); } ////Reset position attributes //var nlist = document.DocumentElement.SelectNodes("//entityShape"); //foreach (XmlElement node in nlist) //{ // //XmlHelper.RemoveAttribute(node, "absoluteBounds"); // XmlHelper.AddAttribute(node, "absoluteBounds", "0, 0, 0, 0"); // var clist = node.SelectNodes("nestedChildShapes/elementListCompartment"); // foreach (XmlElement node2 in clist) // { // //XmlHelper.RemoveAttribute(node2, "absoluteBounds"); // XmlHelper.AddAttribute(node2, "absoluteBounds", "0, 0, 0, 0"); // } //} //document.Save(diagramFile); } } else { //strip out all the colors from the diagram file if (File.Exists(diagramFile)) { var document = new XmlDocument(); document.Load(diagramFile); var list = document.DocumentElement.SelectNodes("//elementListCompartment"); foreach (XmlNode n in list) { n.Attributes.RemoveNamedItem("fillColor"); n.Attributes.RemoveNamedItem("outlineColor"); n.Attributes.RemoveNamedItem("textColor"); n.Attributes.RemoveNamedItem("titleTextColor"); n.Attributes.RemoveNamedItem("itemTextColor"); } document.Save(diagramFile); } } //Save the refactorizations if (modelRoot.Refactorizations.Count > 0) { var document = new XmlDocument(); document.Load(modelFileName); var refactorList = XmlHelper.AddElement(document.DocumentElement, "refactorizations"); foreach (var item in modelRoot.Refactorizations) { var n = XmlHelper.AddElement((XmlElement)refactorList, "refactor"); item.ToXML((XmlElement)n); } document.Save(modelFileName); } }
/// <summary> /// Customize Model and Diagram Loading. /// </summary> /// <param name="serializationResult">Stores serialization result from the load operation.</param> /// <param name="modelPartition">Partition in which the new DslLibrary instance will be created.</param> /// <param name="modelFileName">Name of the file from which the DslLibrary instance will be deserialized.</param> /// <param name="diagramPartition">Partition in which the new DslDesignerDiagram instance will be created.</param> /// <param name="diagramFileName">Name of the file from which the DslDesignerDiagram instance will be deserialized.</param> /// <param name="modelRoot">The root of the file that was loaded.</param> /// <param name="diagram">The diagram matching the modelRoot.</param> private void OnPostLoadModelAndDiagram(DslModeling::SerializationResult serializationResult, DslModeling::Partition modelPartition, string modelFileName, DslModeling::Partition diagramPartition, string diagramFileName, nHydrateModel modelRoot, nHydrateDiagram diagram) { }
public override void SaveModelAndDiagram(Microsoft.VisualStudio.Modeling.SerializationResult serializationResult, nHydrateModel modelRoot, string modelFileName, nHydrateDiagram diagram, string diagramFileName, Encoding encoding, bool writeOptionalPropertiesWithDefaultValue) { var mainInfo = new FileInfo(modelFileName); modelRoot.ModelFileName = modelFileName; nHydrate.Dsl.Custom.SQLFileManagement.SaveToDisk(modelRoot, mainInfo.DirectoryName, mainInfo.Name, diagram); base.SaveModelAndDiagram(serializationResult, modelRoot, modelFileName, diagram, diagramFileName, encoding, writeOptionalPropertiesWithDefaultValue); //Model File if (modelRoot.ModelToDisk) { var document = new XmlDocument(); document.Load(modelFileName); //Remove entire node for Views, Stored Procedures, and Functions for (var ii = document.DocumentElement.ChildNodes.Count - 1; ii >= 0; ii--) { var n = document.DocumentElement.ChildNodes[ii]; document.DocumentElement.RemoveChild(n); } document.Save(modelFileName); } //Diagram File //Now gut the diagram file var diagramFile = modelFileName + ".diagram"; if (modelRoot.ModelToDisk) { if (File.Exists(diagramFile)) { var document = new XmlDocument(); document.Load(diagramFile); //Remove all child nodes var n = document.DocumentElement.SelectSingleNode("nestedChildShapes"); if (n != null) { document.DocumentElement.RemoveChild(n); document.Save(diagramFile); } } } else { //strip out all the colors from the diagram file if (File.Exists(diagramFile)) { var document = new XmlDocument(); document.Load(diagramFile); var list = document.DocumentElement.SelectNodes("//elementListCompartment"); foreach (XmlNode n in list) { n.Attributes.RemoveNamedItem("fillColor"); n.Attributes.RemoveNamedItem("outlineColor"); n.Attributes.RemoveNamedItem("textColor"); n.Attributes.RemoveNamedItem("titleTextColor"); n.Attributes.RemoveNamedItem("itemTextColor"); } document.Save(diagramFile); } } }
public static void LoadFromDisk(nHydrateModel model, string rootFolder, Microsoft.VisualStudio.Modeling.Store store, string modelName) { model.IsSaving = true; try { var modelFolder = GetModelFolder(rootFolder, modelName); nHydrate.Dsl.Custom.SQLFileManagement.LoadFromDisk(model.ModelMetadata, model, modelFolder, store); nHydrate.Dsl.Custom.SQLFileManagement.LoadFromDisk(model.Modules, model, modelFolder, store); nHydrate.Dsl.Custom.SQLFileManagement.LoadFromDisk(model.Views, model, modelFolder, store); //must coem before entities (view relations) nHydrate.Dsl.Custom.SQLFileManagement.LoadFromDisk(model.Entities, model, modelFolder, store); nHydrate.Dsl.Custom.SQLFileManagement.LoadFromDisk(model.StoredProcedures, model, modelFolder, store); nHydrate.Dsl.Custom.SQLFileManagement.LoadFromDisk(model.Functions, model, modelFolder, store); } catch (Exception ex) { throw; } finally { model.IsSaving = false; } }
public ModuleMappings(nHydrate.Dsl.nHydrateModel model) : this() { _model = model; #region Load Tree foreach (var item in model.Entities.OrderBy(x => x.Name)) { var n = new TreeNode() { Text = item.Name, Tag = item }; tvwEntity.Nodes.Add(n); _nodeCache.Add(item, n); n.ImageIndex = 0; //Add fields foreach (var field in item.Fields.OrderBy(x => x.Name)) { var n2 = new TreeNode() { Text = field.Name, Tag = field }; n.Nodes.Add(n2); _nodeCache.Add(field, n2); n2.ImageIndex = 1; } //Add relations foreach (var relation in item.RelationshipList) { var n2 = new TreeNode() { Text = relation.DisplayName, Tag = relation }; n.Nodes.Add(n2); _nodeCache.Add(relation, n2); n2.ImageIndex = 5; } //Add indexes (no need to include as they will always be in there) foreach (var index in item.IndexList.Where(x => x.IndexType != IndexTypeConstants.PrimaryKey)) { var n2 = new TreeNode() { Text = index.ToString(), Tag = index }; n.Nodes.Add(n2); _nodeCache.Add(index, n2); n2.ImageIndex = 6; } } foreach (var item in model.Views.OrderBy(x => x.Name)) { var n = new TreeNode() { Text = item.Name, Tag = item }; tvwView.Nodes.Add(n); _nodeCache.Add(item, n); n.ImageIndex = 2; } foreach (var item in model.StoredProcedures.OrderBy(x => x.Name)) { var n = new TreeNode() { Text = item.Name, Tag = item }; tvwStoredProc.Nodes.Add(n); _nodeCache.Add(item, n); n.ImageIndex = 3; } foreach (var item in model.Functions.OrderBy(x => x.Name)) { var n = new TreeNode() { Text = item.Name, Tag = item }; tvwFunction.Nodes.Add(n); _nodeCache.Add(item, n); n.ImageIndex = 4; } _nodeCache.Keys.ToList().ForEach(x => _nodeCache[x].SelectedImageIndex = _nodeCache[x].ImageIndex); #endregion #region Load Modules cboModule.Items.Add("(Select One)"); model.Modules.ForEach(x => cboModule.Items.Add(x.Name)); cboModule.SelectedIndex = 0; cboModule.Enabled = true; #endregion }
public override nHydrateModel LoadModelAndDiagram(DslModeling::SerializationResult serializationResult, DslModeling::Partition modelPartition, string modelFileName, DslModeling::Partition diagramPartition, string diagramFileName, DslModeling::ISchemaResolver schemaResolver, DslValidation::ValidationController validationController, DslModeling::ISerializerLocator serializerLocator) { var modelRoot = base.LoadModelAndDiagram(serializationResult, modelPartition, modelFileName, diagramPartition, diagramFileName, schemaResolver, validationController, serializerLocator); _model = modelRoot; //Verify that we can open the model var thisAssem = System.Reflection.Assembly.GetExecutingAssembly(); var thisAssemName = thisAssem.GetName(); var toolVersion = thisAssemName.Version; var modelVersion = new Version(0, 0); var dslVersion = new Version(0, 0); if (!string.IsNullOrEmpty(modelRoot.ModelVersion)) modelVersion = new Version(modelRoot.ModelVersion); if (toolVersion < modelVersion) throw new Exception("This model was created with newer version of the modeler. Please install version '" + modelVersion.ToString() + "' or higher."); try { var document = new XmlDocument(); document.LoadXml(File.ReadAllText(modelFileName)); var attr = document.DocumentElement.Attributes["dslVersion"]; if (attr != null) { dslVersion = new Version(attr.Value); } } catch { } //When saved the new version will be this tool version modelRoot.ModelVersion = LAST_MODEL_MODEL_COMPATIBLE; modelRoot.ModelFileName = modelFileName; modelRoot.IsDirty = false; var mainInfo = new FileInfo(modelFileName); var modelName = mainInfo.Name.Replace(".nhydrate", ".model"); if (modelRoot.ModelToDisk) { //Load from disk store nHydrate.Dsl.Custom.SQLFileManagement.LoadFromDisk(modelRoot, mainInfo.DirectoryName, modelRoot.Partition.Store, modelName); #region Watch Folder //var modelFolder = nHydrate.Dsl.Custom.SQLFileManagement.GetModelFolder(mainInfo.DirectoryName, modelName); //_watchFolder.Path = modelFolder; //_watchFolder.IncludeSubdirectories = true; //_watchFolder.NotifyFilter = System.IO.NotifyFilters.FileName | // NotifyFilters.LastWrite | // NotifyFilters.Size | // NotifyFilters.CreationTime | // NotifyFilters.DirectoryName; //_watchFolder.Changed += new FileSystemEventHandler(FolderChangedEvent); //_watchFolder.Created += new FileSystemEventHandler(FolderChangedEvent); //_watchFolder.Deleted += new FileSystemEventHandler(FolderChangedEvent); //_watchFolder.Renamed += new System.IO.RenamedEventHandler(FolderFileRenamedEvent); //try //{ // _watchFolder.EnableRaisingEvents = true; //} //catch (ArgumentException) //{ // //Do Nothing //} #endregion } else { try { var f = nHydrate.Dsl.Custom.SQLFileManagement.GetModelFolder(mainInfo.DirectoryName, modelName); if (Directory.Exists(f)) Directory.Delete(f, true); } catch { } } modelRoot.IsDirty = false; //SyncServer //var syncServerFile = modelFileName + ".syncserver"; //modelRoot.SyncServerURL = nHydrate.SyncServer.Client.SyncDomain.LoadSyncServerConfig(syncServerFile); //Alphabetized columns if need be //foreach (var entity in modelRoot.Entities) //{ // entity.Fields.Sort((x, y) => x.Name.CompareTo(y.Name)); //} #region Load Indexes //For now load the indexes into the REAL indexes collection //This should only happens the first time using (var transaction = modelRoot.Store.TransactionManager.BeginTransaction(Guid.NewGuid().ToString())) { LoadInitialIndexes(modelRoot); transaction.Commit(); } #endregion #region Handle the Precedence if (modelRoot.StoredProcedures.Count > 0) modelRoot.MaxPrecedenceOrder = Math.Max(modelRoot.StoredProcedures.Max(x => x.PrecedenceOrder), modelRoot.MaxPrecedenceOrder); if (modelRoot.Views.Count > 0) modelRoot.MaxPrecedenceOrder = Math.Max(modelRoot.Views.Max(x => x.PrecedenceOrder), modelRoot.MaxPrecedenceOrder); if (modelRoot.Functions.Count > 0) modelRoot.MaxPrecedenceOrder = Math.Max(modelRoot.Functions.Max(x => x.PrecedenceOrder), modelRoot.MaxPrecedenceOrder); modelRoot.StoredProcedures.Where(x => x.PrecedenceOrder == 0).ToList().ForEach(x => x.PrecedenceOrder = ++modelRoot.MaxPrecedenceOrder); modelRoot.Views.Where(x => x.PrecedenceOrder == 0).ToList().ForEach(x => x.PrecedenceOrder = ++modelRoot.MaxPrecedenceOrder); modelRoot.Functions.Where(x => x.PrecedenceOrder == 0).ToList().ForEach(x => x.PrecedenceOrder = ++modelRoot.MaxPrecedenceOrder); #endregion #region Load the refactorizations if (File.Exists(modelFileName)) { var fi = new FileInfo(modelFileName); if (fi.Length > 5) { var document = new XmlDocument(); document.Load(modelFileName); if (document.DocumentElement != null) { var refactorList = document.DocumentElement.SelectSingleNode("refactorizations"); if (refactorList != null) { foreach (XmlNode n in refactorList.ChildNodes) { //if (XmlHelper.GetAttributeValue(n, "type", string.Empty) == "guidtoid") //{ // modelRoot.Refactorizations.Add(new RefactorChangeGuidToID((XmlElement)n)); //} //else if (XmlHelper.GetAttributeValue(n, "type", string.Empty) == "guidtoididtoguid") //{ // modelRoot.Refactorizations.Add(new RefactorChangeIDToGuid((XmlElement)n)); //} if (XmlHelper.GetAttributeValue(n, "type", string.Empty) == "splittable") { modelRoot.Refactorizations.Add(new RefactorTableSplit((XmlElement)n)); } else if (XmlHelper.GetAttributeValue(n, "type", string.Empty) == "combinetable") { modelRoot.Refactorizations.Add(new RefactorTableCombine((XmlElement)n)); } } } } } } #endregion //If using modules from a previous model version then perform this one time action of //assigning the indexes to all modules so user will not be confronted with a a huge action to perform after upgrade if (dslVersion <= new Version(5, 1, 2, 118) && modelRoot.UseModules) { using (var transaction = modelRoot.Store.TransactionManager.BeginTransaction(Guid.NewGuid().ToString())) { foreach (var module in modelRoot.Modules) { var contained = module.GetEntities().ToList(); foreach (var index in modelRoot.Entities.Where(x => contained.Contains(x)).SelectMany(x => x.IndexList)) { _model.IndexModules.Add(new IndexModule(_model.Partition) { IndexID = index.Id, ModuleId = module.Id }); } } transaction.Commit(); } } return modelRoot; }
/// <summary> /// Saves Functions to disk /// </summary> private static void SaveToDisk(nHydrateModel modelRoot, IEnumerable<Function> list, string rootFolder, nHydrateDiagram diagram, List<string> generatedFileList) { var folder = Path.Combine(rootFolder, FOLDER_FC); if (!Directory.Exists(folder)) Directory.CreateDirectory(folder); foreach (var item in list) { var f = Path.Combine(folder, item.Name + ".sql"); WriteFileIfNeedBe(f, item.SQL, generatedFileList); } #region Save other parameter/field information foreach (var item in list) { var document = new XmlDocument(); document.LoadXml(@"<configuration type=""function"" name=""" + item.Name + @"""></configuration>"); XmlHelper.AddLineBreak(document.DocumentElement); XmlHelper.AddCData(document.DocumentElement, "summary", item.Summary); XmlHelper.AddLineBreak(document.DocumentElement); XmlHelper.AddAttribute(document.DocumentElement, "id", item.Id); XmlHelper.AddAttribute(document.DocumentElement, "precedenceorder", item.PrecedenceOrder); XmlHelper.AddAttribute(document.DocumentElement, "codefacade", item.CodeFacade); XmlHelper.AddAttribute(document.DocumentElement, "isgenerated", item.IsGenerated); XmlHelper.AddAttribute(document.DocumentElement, "schema", item.Schema); XmlHelper.AddAttribute(document.DocumentElement, "istable", item.IsTable); XmlHelper.AddAttribute(document.DocumentElement, "returnvariable", item.ReturnVariable); var fieldsNodes = XmlHelper.AddElement(document.DocumentElement, "fieldset") as XmlElement; XmlHelper.AddLineBreak((XmlElement)fieldsNodes); foreach (var field in item.Fields.OrderBy(x => x.Name)) { var fieldNode = XmlHelper.AddElement(fieldsNodes, "field"); XmlHelper.AddLineBreak((XmlElement)fieldNode); XmlHelper.AddCData((XmlElement)fieldNode, "summary", field.Summary); XmlHelper.AddLineBreak((XmlElement)fieldNode); XmlHelper.AddAttribute(fieldNode, "id", field.Id); XmlHelper.AddAttribute(fieldNode, "name", field.Name); XmlHelper.AddAttribute(fieldNode, "nullable", field.Nullable); XmlHelper.AddAttribute(fieldNode, "datatype", field.DataType.ToString()); XmlHelper.AddAttribute(fieldNode, "codefacade", field.CodeFacade); XmlHelper.AddAttribute(fieldNode, "default", field.Default); XmlHelper.AddAttribute(fieldNode, "isgenerated", field.IsGenerated); XmlHelper.AddAttribute(fieldNode, "length", field.Length); XmlHelper.AddAttribute(fieldNode, "scale", field.Scale); XmlHelper.AddLineBreak((XmlElement)fieldsNodes); } var parametersNodes = XmlHelper.AddElement(document.DocumentElement, "parameterset") as XmlElement; XmlHelper.AddLineBreak((XmlElement)parametersNodes); foreach (var parameter in item.Parameters.OrderBy(x => x.Name)) { var parameterNode = XmlHelper.AddElement(parametersNodes, "parameter"); XmlHelper.AddLineBreak((XmlElement)parameterNode); XmlHelper.AddCData((XmlElement)parameterNode, "summary", parameter.Summary); XmlHelper.AddLineBreak((XmlElement)parameterNode); XmlHelper.AddAttribute(parameterNode, "id", parameter.Id); XmlHelper.AddAttribute(parameterNode, "name", parameter.Name); XmlHelper.AddAttribute(parameterNode, "nullable", parameter.Nullable); XmlHelper.AddAttribute(parameterNode, "datatype", parameter.DataType.ToString()); XmlHelper.AddAttribute(parameterNode, "codefacade", parameter.CodeFacade); XmlHelper.AddAttribute(parameterNode, "default", parameter.Default); XmlHelper.AddAttribute(parameterNode, "isgenerated", parameter.IsGenerated); XmlHelper.AddAttribute(parameterNode, "length", parameter.Length); XmlHelper.AddAttribute(parameterNode, "scale", parameter.Scale); XmlHelper.AddLineBreak((XmlElement)parametersNodes); } XmlHelper.AddLineBreak(document.DocumentElement); var f = Path.Combine(folder, item.Name + ".configuration.xml"); WriteFileIfNeedBe(f, document.ToIndentedString(), generatedFileList); //Save other files SaveModules(folder, item, generatedFileList); } #endregion WriteReadMeFile(folder, generatedFileList); }
/// <summary> /// Saves Stored Procedures to disk /// </summary> private static void SaveToDisk(nHydrateModel modelRoot, IEnumerable<Entity> list, string rootFolder, nHydrateDiagram diagram, List<string> generatedFileList) { var folder = Path.Combine(rootFolder, FOLDER_ET); if (!Directory.Exists(folder)) Directory.CreateDirectory(folder); #region Save other parameter/field information foreach (var item in list) { var document = new XmlDocument(); document.LoadXml(@"<configuration type=""entity"" name=""" + item.Name + @"""></configuration>"); XmlHelper.AddLineBreak(document.DocumentElement); XmlHelper.AddCData(document.DocumentElement, "summary", item.Summary); XmlHelper.AddLineBreak(document.DocumentElement); XmlHelper.AddAttribute(document.DocumentElement, "id", item.Id); XmlHelper.AddAttribute(document.DocumentElement, "allowaudittracking", item.AllowAuditTracking); XmlHelper.AddAttribute(document.DocumentElement, "allowcreateaudit", item.AllowCreateAudit); XmlHelper.AddAttribute(document.DocumentElement, "allowmodifyaudit", item.AllowModifyAudit); XmlHelper.AddAttribute(document.DocumentElement, "allowtimestamp", item.AllowTimestamp); XmlHelper.AddAttribute(document.DocumentElement, "codefacade", item.CodeFacade); XmlHelper.AddAttribute(document.DocumentElement, "immutable", item.Immutable); XmlHelper.AddAttribute(document.DocumentElement, "enforceprimarykey", item.EnforcePrimaryKey); XmlHelper.AddAttribute(document.DocumentElement, "isassociative", item.IsAssociative); XmlHelper.AddAttribute(document.DocumentElement, "typedentity", item.TypedEntity.ToString()); XmlHelper.AddAttribute(document.DocumentElement, "schema", item.Schema); XmlHelper.AddAttribute(document.DocumentElement, "generatesdoublederived", item.GeneratesDoubleDerived); XmlHelper.AddAttribute(document.DocumentElement, "isgenerated", item.IsGenerated); XmlHelper.AddAttribute(document.DocumentElement, "isTenant", item.IsTenant); #region Fields { var fieldsNodes = XmlHelper.AddElement(document.DocumentElement, "fieldset") as XmlElement; XmlHelper.AddLineBreak((XmlElement)fieldsNodes); foreach (var field in item.Fields.OrderBy(x => x.Name)) { var fieldNode = XmlHelper.AddElement(fieldsNodes, "field"); XmlHelper.AddLineBreak((XmlElement)fieldNode); XmlHelper.AddCData((XmlElement)fieldNode, "summary", field.Summary); XmlHelper.AddLineBreak((XmlElement)fieldNode); XmlHelper.AddAttribute(fieldNode, "id", field.Id); XmlHelper.AddAttribute(fieldNode, "name", field.Name); XmlHelper.AddAttribute(fieldNode, "nullable", field.Nullable); XmlHelper.AddAttribute(fieldNode, "datatype", field.DataType.ToString()); XmlHelper.AddAttribute(fieldNode, "identity", field.Identity.ToString()); XmlHelper.AddAttribute(fieldNode, "codefacade", field.CodeFacade); XmlHelper.AddAttribute(fieldNode, "dataformatstring", field.DataFormatString); XmlHelper.AddAttribute(fieldNode, "default", field.Default); XmlHelper.AddAttribute(fieldNode, "defaultisfunc", field.DefaultIsFunc); XmlHelper.AddAttribute(fieldNode, "formula", field.Formula); XmlHelper.AddAttribute(fieldNode, "isgenerated", field.IsGenerated); XmlHelper.AddAttribute(fieldNode, "isindexed", field.IsIndexed); XmlHelper.AddAttribute(fieldNode, "isprimarykey", field.IsPrimaryKey); XmlHelper.AddAttribute(fieldNode, "Iscalculated", field.IsCalculated); XmlHelper.AddAttribute(fieldNode, "isunique", field.IsUnique); XmlHelper.AddAttribute(fieldNode, "length", field.Length); XmlHelper.AddAttribute(fieldNode, "scale", field.Scale); XmlHelper.AddAttribute(fieldNode, "sortorder", field.SortOrder); XmlHelper.AddAttribute(fieldNode, "isreadonly", field.IsReadOnly); XmlHelper.AddAttribute(fieldNode, "category", field.Category); XmlHelper.AddAttribute(fieldNode, "collate", field.Collate); XmlHelper.AddAttribute(fieldNode, "friendlyname", field.FriendlyName); XmlHelper.AddAttribute(fieldNode, "isbrowsable", field.IsBrowsable); XmlHelper.AddAttribute(fieldNode, "max", field.Max); XmlHelper.AddAttribute(fieldNode, "min", field.Min); XmlHelper.AddAttribute(fieldNode, "validationexpression", field.ValidationExpression); XmlHelper.AddAttribute(fieldNode, "obsolete", field.Obsolete); XmlHelper.AddLineBreak((XmlElement)fieldsNodes); } XmlHelper.AddLineBreak((XmlElement)document.DocumentElement); } #endregion #region Security if (item.SecurityFunction != null) { var secNode = XmlHelper.AddElement(document.DocumentElement, "security") as XmlElement; XmlHelper.AddAttribute(secNode, "id", item.SecurityFunction.Id); var ff = Path.Combine(folder, item.Name + ".security.sql"); WriteFileIfNeedBe(ff, item.SecurityFunction.SQL, generatedFileList); //Parameters var secParamNodes = XmlHelper.AddElement(secNode, "parameterset") as XmlElement; XmlHelper.AddLineBreak((XmlElement)secParamNodes); foreach (var parameter in item.SecurityFunction.SecurityFunctionParameters.OrderBy(x => x.Name)) { var parameterNode = XmlHelper.AddElement(secParamNodes, "field"); XmlHelper.AddLineBreak((XmlElement)parameterNode); XmlHelper.AddCData((XmlElement)parameterNode, "summary", parameter.Summary); XmlHelper.AddLineBreak((XmlElement)parameterNode); XmlHelper.AddAttribute(parameterNode, "id", parameter.Id); XmlHelper.AddAttribute(parameterNode, "name", parameter.Name); XmlHelper.AddAttribute(parameterNode, "nullable", parameter.Nullable); XmlHelper.AddAttribute(parameterNode, "datatype", parameter.DataType.ToString()); XmlHelper.AddAttribute(parameterNode, "codefacade", parameter.CodeFacade); XmlHelper.AddAttribute(parameterNode, "default", parameter.Default); XmlHelper.AddAttribute(parameterNode, "isgenerated", parameter.IsGenerated); XmlHelper.AddAttribute(parameterNode, "length", parameter.Length); XmlHelper.AddAttribute(parameterNode, "scale", parameter.Scale); } } #endregion XmlHelper.AddLineBreak(document.DocumentElement); var f = Path.Combine(folder, item.Name + ".configuration.xml"); WriteFileIfNeedBe(f, document.ToIndentedString(), generatedFileList); //Save other files SaveEntityIndexes(folder, item, generatedFileList); SaveModules(folder, item, generatedFileList); SaveRelations(folder, item, generatedFileList); SaveEntityStaticData(folder, item, generatedFileList); SaveEntityMetaData(folder, item, generatedFileList); SaveEntityComposites(folder, item, generatedFileList); } #endregion WriteReadMeFile(folder, generatedFileList); }
public override nHydrateModel LoadModelAndDiagram(DslModeling::SerializationResult serializationResult, DslModeling::Partition modelPartition, string modelFileName, DslModeling::Partition diagramPartition, string diagramFileName, DslModeling::ISchemaResolver schemaResolver, DslValidation::ValidationController validationController, DslModeling::ISerializerLocator serializerLocator) { var modelRoot = base.LoadModelAndDiagram(serializationResult, modelPartition, modelFileName, diagramPartition, diagramFileName, schemaResolver, validationController, serializerLocator); _model = modelRoot; //Verify that we can open the model var thisAssem = System.Reflection.Assembly.GetExecutingAssembly(); var thisAssemName = thisAssem.GetName(); var toolVersion = thisAssemName.Version; var modelVersion = new Version(0, 0); var dslVersion = new Version(0, 0); if (!string.IsNullOrEmpty(modelRoot.ModelVersion)) { modelVersion = new Version(modelRoot.ModelVersion); } if (toolVersion < modelVersion) { throw new Exception("This model was created with newer version of the modeler. Please install version '" + modelVersion.ToString() + "' or higher."); } try { var document = new XmlDocument(); document.LoadXml(File.ReadAllText(modelFileName)); var attr = document.DocumentElement.Attributes["dslVersion"]; if (attr != null) { dslVersion = new Version(attr.Value); } } catch { } //When saved the new version will be this tool version modelRoot.ModelVersion = LAST_MODEL_MODEL_COMPATIBLE; modelRoot.ModelFileName = modelFileName; modelRoot.IsDirty = false; var mainInfo = new FileInfo(modelFileName); nHydrate.Dsl.Custom.SQLFileManagement.LoadFromDisk(modelRoot, mainInfo.DirectoryName, modelRoot.Partition.Store, mainInfo.Name); modelRoot.IsDirty = false; #region Load Indexes //For now load the indexes into the REAL indexes collection //This should only happens the first time using (var transaction = modelRoot.Store.TransactionManager.BeginTransaction(Guid.NewGuid().ToString())) { LoadInitialIndexes(modelRoot); transaction.Commit(); } #endregion return(modelRoot); }
private void OnPostLoadModelAndDiagram(DslModeling::SerializationResult serializationResult, DslModeling::Partition modelPartition, string modelFileName, DslModeling::Partition diagramPartition, string diagramFileName, nHydrateModel modelRoot, nHydrateDiagram diagram) { }
public override void SaveModelAndDiagram(Microsoft.VisualStudio.Modeling.SerializationResult serializationResult, nHydrateModel modelRoot, string modelFileName, nHydrateDiagram diagram, string diagramFileName, Encoding encoding, bool writeOptionalPropertiesWithDefaultValue) { var mainInfo = new FileInfo(modelFileName); modelRoot.ModelFileName = modelFileName; var modelName = mainInfo.Name.Replace(".nhydrate", ".model"); if (modelRoot.ModelToDisk) { nHydrate.Dsl.Custom.SQLFileManagement.SaveToDisk(modelRoot, mainInfo.DirectoryName, modelName, diagram); } else { try { var f = nHydrate.Dsl.Custom.SQLFileManagement.GetModelFolder(mainInfo.DirectoryName, modelName); if (Directory.Exists(f)) Directory.Delete(f, true); } catch { } } base.SaveModelAndDiagram(serializationResult, modelRoot, modelFileName, diagram, diagramFileName, encoding, writeOptionalPropertiesWithDefaultValue); //Model File if (modelRoot.ModelToDisk) { var document = new XmlDocument(); document.Load(modelFileName); //Remove entire node for Views, Stored Procedures, and Functions for (var ii = document.DocumentElement.ChildNodes.Count - 1; ii >= 0; ii--) { var n = document.DocumentElement.ChildNodes[ii]; document.DocumentElement.RemoveChild(n); } document.Save(modelFileName); } //Diagram File //Now gut the diagram file var diagramFile = modelFileName + ".diagram"; if (modelRoot.ModelToDisk) { if (File.Exists(diagramFile)) { var document = new XmlDocument(); document.Load(diagramFile); //Remove all child nodes var n = document.DocumentElement.SelectSingleNode("nestedChildShapes"); if (n != null) { document.DocumentElement.RemoveChild(n); document.Save(diagramFile); } ////Reset position attributes //var nlist = document.DocumentElement.SelectNodes("//entityShape"); //foreach (XmlElement node in nlist) //{ // //XmlHelper.RemoveAttribute(node, "absoluteBounds"); // XmlHelper.AddAttribute(node, "absoluteBounds", "0, 0, 0, 0"); // var clist = node.SelectNodes("nestedChildShapes/elementListCompartment"); // foreach (XmlElement node2 in clist) // { // //XmlHelper.RemoveAttribute(node2, "absoluteBounds"); // XmlHelper.AddAttribute(node2, "absoluteBounds", "0, 0, 0, 0"); // } //} //document.Save(diagramFile); } } else { //strip out all the colors from the diagram file if (File.Exists(diagramFile)) { var document = new XmlDocument(); document.Load(diagramFile); var list = document.DocumentElement.SelectNodes("//elementListCompartment"); foreach (XmlNode n in list) { n.Attributes.RemoveNamedItem("fillColor"); n.Attributes.RemoveNamedItem("outlineColor"); n.Attributes.RemoveNamedItem("textColor"); n.Attributes.RemoveNamedItem("titleTextColor"); n.Attributes.RemoveNamedItem("itemTextColor"); } document.Save(diagramFile); } } //Save the refactorizations if (modelRoot.Refactorizations.Count > 0) { var document = new XmlDocument(); document.Load(modelFileName); var refactorList = XmlHelper.AddElement(document.DocumentElement, "refactorizations"); foreach (var item in modelRoot.Refactorizations) { var n = XmlHelper.AddElement((XmlElement)refactorList, "refactor"); item.ToXML((XmlElement)n); } document.Save(modelFileName); } }
/// <summary> /// Customize Model Loading. /// </summary> /// <param name="serializationResult">Stores serialization result from the load operation.</param> /// <param name="partition">Partition in which the new nHydrateModel instance will be created.</param> /// <param name="fileName">Name of the file from which the nHydrateModel instance will be deserialized.</param> /// <param name="modelRoot">The root of the file that was loaded.</param> private void OnPostLoadModel(DslModeling::SerializationResult serializationResult, DslModeling::Partition partition, string fileName, nHydrateModel modelRoot) { //this.LoadModelAndDiagram }
/// <summary> /// Saves Modules to disk /// </summary> private static void SaveToDisk(nHydrateModel modelRoot, IEnumerable<Module> list, string rootFolder, nHydrateDiagram diagram, List<string> generatedFileList) { var folder = rootFolder; if (!Directory.Exists(folder)) Directory.CreateDirectory(folder); var document = new XmlDocument(); document.LoadXml(@"<configuration type=""module""></configuration>"); foreach (var item in list) { var moduleNode = XmlHelper.AddElement(document.DocumentElement, "module") as XmlElement; XmlHelper.AddLineBreak(moduleNode); XmlHelper.AddCData(moduleNode, "summary", item.Summary); XmlHelper.AddAttribute(moduleNode, "id", item.Id); XmlHelper.AddAttribute(moduleNode, "name", item.Name); XmlHelper.AddLineBreak(moduleNode); var rulesNodes = XmlHelper.AddElement(moduleNode, "ruleset") as XmlElement; XmlHelper.AddLineBreak((XmlElement)rulesNodes); foreach (var rule in item.ModuleRules.OrderBy(x => x.Name)) { var fieldNode = XmlHelper.AddElement(rulesNodes, "rule"); XmlHelper.AddLineBreak((XmlElement)fieldNode); XmlHelper.AddCData((XmlElement)fieldNode, "summary", rule.Summary); XmlHelper.AddLineBreak((XmlElement)fieldNode); XmlHelper.AddAttribute(fieldNode, "status", rule.Status.ToString("d")); XmlHelper.AddAttribute(fieldNode, "dependentmodule", rule.DependentModule); XmlHelper.AddAttribute(fieldNode, "name", rule.Name); XmlHelper.AddAttribute(fieldNode, "inclusion", rule.Inclusion); XmlHelper.AddAttribute(fieldNode, "enforced", rule.Enforced); XmlHelper.AddLineBreak((XmlElement)rulesNodes); } } var f = Path.Combine(folder, "modules.configuration.xml"); WriteFileIfNeedBe(f, document.ToIndentedString(), generatedFileList); WriteReadMeFile(folder, generatedFileList); }
public DeleteColumnsForm(nHydrateModel model, Microsoft.VisualStudio.Modeling.Store store) : this() { _model = model; _store = store; }
private void OnPostLoadModel(DslModeling::SerializationResult serializationResult, DslModeling::Partition partition, string fileName, nHydrateModel modelRoot) { }