Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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
            }
        }
Esempio n. 3
0
        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();
            }
        }
Esempio n. 4
0
        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();
            }
        }
Esempio n. 5
0
        public void ProcessProjectTreeRefresh()
        {
            var node = new ProjectTreeHelper().GetCurrentNode();

            if (node == null)
            {
                return;
            }

            node.Refresh();
            ProcessShowProjectTreeNodeDetails();
        }
Esempio n. 6
0
        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;
                }
            }
        }
Esempio n. 7
0
        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();
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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();
            }
        }
Esempio n. 10
0
        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);
            }
        }
Esempio n. 11
0
        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);
        }