public void ProcessCreateNewRelation() { var entityID = new ProjectTreeHelper().GetFirstAncestorID <EntityDTO>(); if (entityID == Guid.Empty) { throw new InvalidOperationException("No entity selected."); } var newRelation = new RelationDTO() { RelationName = "<Enter name>", ForeignEntityID = entityID }; var view = new RelationDetailsView(); view.Object = newRelation; var popup = new PopupWindow(); popup.Title = "New Relation"; popup.Validate = () => { return(new Validator().Validate(newRelation)); }; popup.ViewPanel.Children.Add(view); if (popup.ShowDialog() == true) { new ObjectDataSource().SaveObject(newRelation); ServiceLocator serviceLocator = ServiceLocator.GetActive(); serviceLocator.BasicController.ProcessProjectTreeRefresh(); } }
public void ProcessEditEntity(EntityDTO entity) { if (entity == null) { throw new ArgumentNullException("entity"); } var databaseID = new ProjectTreeHelper().GetFirstAncestorID <DatabaseDTO>(); if (databaseID == Guid.Empty) { throw new InvalidOperationException("No database selected."); } var view = new EntityDetailsView(); view.Object = entity; var popup = new PopupWindow(); popup.Title = "Edit Entity"; popup.Validate = () => { return(new Validator().Validate(entity)); }; popup.ViewPanel.Children.Add(view); if (popup.ShowDialog() == true) { new ObjectDataSource().SaveObject(entity); // Do not refresh node, since can be called from RelationDetailsView } }
public void ProcessCreateNewDiagram() { var databaseID = new ProjectTreeHelper().GetFirstAncestorID <DatabaseDTO>(); if (databaseID == Guid.Empty) { throw new InvalidOperationException("No database selected."); } var newDiagram = new DiagramDTO() { DiagramName = "<Enter name>", DatabaseID = databaseID }; var view = new DiagramDetailsView(); view.Object = newDiagram; var popup = new PopupWindow(); popup.Title = "New Diagram"; popup.Validate = () => { return(new Validator().Validate(newDiagram)); }; popup.ViewPanel.Children.Add(view); if (popup.ShowDialog() == true) { new ObjectDataSource().SaveObject(newDiagram); ServiceLocator serviceLocator = ServiceLocator.GetActive(); serviceLocator.BasicController.ProcessProjectTreeRefresh(); } }
public void ProcessDeleteObject() { if (MessageBox.Show("Delete object?", "Delete", MessageBoxButton.OKCancel) != MessageBoxResult.OK) { return; } var node = new ProjectTreeHelper().GetCurrentNode(); if (node == null) { return; } var parent = node.Parent; var obj = node.Object as PersistentObjectDTO; if (obj != null) { new ObjectDataSource().DeleteObject(obj); // TODO: refresh parent } if (parent != null) { parent.Refresh(); } }
public void ProcessProjectTreeRefresh() { var node = new ProjectTreeHelper().GetCurrentNode(); if (node == null) { return; } node.Refresh(); ProcessShowProjectTreeNodeDetails(); }
public void ProcessImportObjectsFromDatabase() { var database = new ProjectTreeHelper().GetFirstAncestor <DatabaseDTO>(); if (database == null) { throw new InvalidOperationException("No database selected."); } if (String.IsNullOrWhiteSpace(database.ConnectionString)) { // TODO: Should be application error, not InvalidOperationException. throw new InvalidOperationException("Database connection string is not set."); } var serviceLocator = ServiceLocator.GetActive(); var busyIndicator = serviceLocator.SessionState.BusyIndicator; List <DarwinValidation.ValidationError> errors = null; BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += (sender, e) => { errors = DoImport(database); }; worker.RunWorkerCompleted += (sender, e) => { if (busyIndicator != null) { lock (this) { busyIndicator.IsBusy = false; // Re-throw async exception. if (e.Error != null) { throw e.Error; } } } ShowImportReport(errors); }; worker.RunWorkerAsync(); Thread.Sleep(100); lock (this) { if (busyIndicator != null && worker.IsBusy) { busyIndicator.IsBusy = true; } } }
public void ProcessAddEntitiesToDiagram() { var diagramID = new ProjectTreeHelper().GetFirstAncestorID <DiagramDTO>(); if (diagramID == Guid.Empty) { throw new InvalidOperationException("No diagram selected."); } var view = new EntitiesListView(); view.DataSource = new EntitiesNotOnDiagramListDataSource(); var popup = new PopupWindow(); popup.Title = "Add Entity To Diagram"; popup.ViewPanel.Children.Add(view); if (popup.ShowDialog() == true) { var selectedItems = view.SelectedItems; if (selectedItems != null) { foreach (var item in selectedItems) { new ObjectDataSource().SaveObject( new DiagramEntityDTO() { DiagramID = diagramID, EntityID = item.PersistentObject.ID }); } } } ServiceLocator serviceLocator = ServiceLocator.GetActive(); serviceLocator.BasicController.ProcessProjectTreeRefresh(); }
public OpResult UpdateProject(Project inputProject) { // 1. Check project exists ! var projectsConfigsList = _projectsConfigListFileConverter .Read(_configuration.ProjectsListPath) .Object; var projectFromConfig = projectsConfigsList.SingleOrDefault(c => c.Id == inputProject.Id); if (projectFromConfig == null) { return(OpResult.Bad(ErrorCode.PROJECT_DOES_NOT_EXIST, $"Project with id {inputProject.Id} not found in your configuration")); } inputProject.Path = projectFromConfig.Path; var rootPack = inputProject.Tree as PackNode; if (rootPack != null) { ProjectTreeHelper <Project> .ExecuteTraversal( rootPack, (node, projectContext) => { if (!(node is PackNode)) { _annexFileConverter.Dump(node, Path.Combine(projectContext.Path, $"{node.Id}.yml")); } }, inputProject); } var dumpResult = _projectFileConverter.Dump( inputProject, Path.Combine(inputProject.Path, _configuration.DefaultProjectFileName) ); return(dumpResult); }
public void ProcessCreateNewDatabase() { var projectID = new ProjectTreeHelper().GetCurrentProjectID(); if (projectID == Guid.Empty) { throw new InvalidOperationException("No active project."); } // TODO: move to separate class dedicated to the object creation var newDatabase = new DatabaseDTO() { DBName = "<Enter name>", ProjectID = projectID }; newDatabase.DataTypes.Add(new DataTypeDTO() { DatabaseID = newDatabase.ID, TypeName = "Boolean" }); newDatabase.DataTypes.Add(new DataTypeDTO() { DatabaseID = newDatabase.ID, TypeName = "Int8" }); newDatabase.DataTypes.Add(new DataTypeDTO() { DatabaseID = newDatabase.ID, TypeName = "Int16" }); newDatabase.DataTypes.Add(new DataTypeDTO() { DatabaseID = newDatabase.ID, TypeName = "Int32" }); newDatabase.DataTypes.Add(new DataTypeDTO() { DatabaseID = newDatabase.ID, TypeName = "Int64" }); newDatabase.DataTypes.Add(new DataTypeDTO() { DatabaseID = newDatabase.ID, TypeName = "Real32" }); newDatabase.DataTypes.Add(new DataTypeDTO() { DatabaseID = newDatabase.ID, TypeName = "Real64" }); newDatabase.DataTypes.Add(new DataTypeDTO() { DatabaseID = newDatabase.ID, TypeName = "Char", HasLength = true }); newDatabase.DataTypes.Add(new DataTypeDTO() { DatabaseID = newDatabase.ID, TypeName = "NChar", HasLength = true }); newDatabase.DataTypes.Add(new DataTypeDTO() { DatabaseID = newDatabase.ID, TypeName = "VarChar", HasLength = true }); newDatabase.DataTypes.Add(new DataTypeDTO() { DatabaseID = newDatabase.ID, TypeName = "NVarChar", HasLength = true }); newDatabase.DataTypes.Add(new DataTypeDTO() { DatabaseID = newDatabase.ID, TypeName = "Guid" }); newDatabase.DataTypes.Add(new DataTypeDTO() { DatabaseID = newDatabase.ID, TypeName = "DateTime" }); var view = new DatabaseDetailsView(); view.Object = newDatabase; var popup = new PopupWindow(); popup.Title = "New Database"; popup.Validate = () => { return(new Validator().Validate(newDatabase)); }; popup.ViewPanel.Children.Add(view); if (popup.ShowDialog() == true) { new ObjectDataSource().SaveObject(newDatabase); ServiceLocator serviceLocator = ServiceLocator.GetActive(); serviceLocator.BasicController.ProcessProjectTreeRefresh(); } }
public void ProcessShowProjectTreeNodeDetails() { var serviceLocator = ServiceLocator.GetActive(); serviceLocator.SessionState.ValidationErrors.Clear(); serviceLocator.SessionState.ObjectInEditor = null; var node = new ProjectTreeHelper().GetCurrentNode(); if (node == null) { serviceLocator.SessionState.DetailsPanel.Children.Clear(); serviceLocator.SessionState.DetailsView = null; return; } IDetailsView view = null; var persistentObject = node.Object as PersistentObjectDTO; if (persistentObject != null) { if (persistentObject.PersistentType == typeof(Entity)) { view = new EntityDetailsView(); } else if (persistentObject.PersistentType == typeof(Project)) { view = new ProjectDetailsView(); } else if (persistentObject.PersistentType == typeof(Database)) { view = new DatabaseDetailsView(); } else if (persistentObject.PersistentType == typeof(ERModel.Attribute)) { view = new AttributeDetailsView(); } else if (persistentObject.PersistentType == typeof(DataType)) { view = new DataTypeDetailsView(); } else if (persistentObject.PersistentType == typeof(Relation)) { view = new RelationDetailsView(); } else if (persistentObject.PersistentType == typeof(RelationItem)) { view = new RelationItemDetailsView(); } else if (persistentObject.PersistentType == typeof(Diagram)) { view = new DiagramChartView(); } else if (persistentObject.PersistentType == typeof(DiagramEntity)) { view = new DiagramEntityDetailsView(); } else if (persistentObject.PersistentType == typeof(BaseEnum)) { view = new BaseEnumDetailsView(); } else if (persistentObject.PersistentType == typeof(BaseEnumValue)) { view = new BaseEnumValueDetailsView(); } if (view != null) { view.Object = persistentObject; } } serviceLocator.SessionState.DetailsPanel.Children.Clear(); serviceLocator.SessionState.DetailsView = view; serviceLocator.SessionState.ObjectInEditor = persistentObject; if (view != null) { serviceLocator.SessionState.DetailsPanel.Children.Add(view as UIElement); } }
public OpResult CreateProject(Project inputProject) { // 1. Check input model var directoryInfo = _directoryInfoFactory.Create(inputProject.Path); if (!directoryInfo.Exists) { return(OpResult.Bad(ErrorCode.FOLDER_DOES_NOT_EXIST, $"Folder {inputProject.Path} does not exist")); } // 2. Add project to projects list file var projectsList = _projectsConfigListFileConverter .Read(_configuration.ProjectsListPath) .Object; if (projectsList.Any(config => config.Path == inputProject.Path)) { return(OpResult.Bad(ErrorCode.PROJECT_ALREADY_IN_PROJECT_LIST, $"The configuration already contains a project with the path {inputProject.Path}")); } var projectId = Guid.NewGuid(); projectsList.Add(new Project { Id = projectId, Name = inputProject.Name, Path = Path.Combine(inputProject.Path, _configuration.DefaultProjectFileName) }); _projectsConfigListFileConverter.Dump(projectsList, _configuration.ProjectsListPath); // 3. Build domain object var project = Project.CreateDefaultInstance(); project.Id = projectId; project.Name = inputProject.Name; project.Path = inputProject.Path; // 4. Persist the default project file var dumpResult = _projectFileConverter.Dump( project, Path.Combine(inputProject.Path, _configuration.DefaultProjectFileName) ); // 5. Persist the default annex request file var rootPack = project.Tree as PackNode; if (rootPack != null) { ProjectTreeHelper <Project> .ExecuteTraversal( rootPack, (node, projectContext) => { if (!(node is PackNode)) { _annexFileConverter.Dump(node, Path.Combine(projectContext.Path, projectContext.Name, $"{node.Id}.yml")); } }, project); } return(OpResult.Ok); }