示例#1
0
        public override void Execute(object parameter)
        {
            // Save existing project before closing (if there are some unsaved changes)
            if (MainWindow.HasUnsavedChanges)
            {
                MessageBoxResult r =
                    XCaseYesNoBox.Show("Current project is not saved", "Do you want to save it?");

                if (r == MessageBoxResult.Yes)
                {
                    new cmdSaveProject(MainWindow, null).Execute();
                }
                else
                if (r == MessageBoxResult.Cancel)
                {
                    if (parameter is System.ComponentModel.CancelEventArgs)
                    {
                        ((System.ComponentModel.CancelEventArgs)parameter).Cancel = true;
                    }
                    return;
                }
            }

            MainWindow.CloseProject();
        }
示例#2
0
        public override void Execute(object parameter)
        {
            Version currentVersion = CurrentProject.Version;

            SelectItemsDialog selectVersion = new SelectItemsDialog();
            List <Version>    _versions     = FindLowerVersions(CurrentProject);

            if (_versions.Count == 0)
            {
                XCaseYesNoBox.ShowOK("No previous version", "No previous version of the diagram");
                return;
            }
            Version v;

            if (_versions.Count > 1)
            {
                selectVersion.UseRadioButtons = true;
                selectVersion.SetItems(_versions);
                selectVersion.ShortMessage = "Select version";
                selectVersion.LongMessage  = "Select version to map to.";
                selectVersion.Title        = "Select version";

                if (selectVersion.ShowDialog() != true || selectVersion.selectedObjects.Count != 1)
                {
                    return;
                }
                v = (Version)selectVersion.selectedObjects[0];
            }
            else
            {
                v = _versions.First();
            }

            Diagram diagramOldVersion = (Diagram)ActiveDiagramView.Diagram.GetInVersion(v);

            if (diagramOldVersion == null)
            {
                XCaseYesNoBox.ShowOK("Diagram not present", "Diagram does not exist in this version. ");
                return;
            }

            mappingDialog = new MappingDialog();
            mappingDialog.DiagramNewVersion     = ActiveDiagramView.Diagram;
            mappingDialog.DiagramOldVersion     = diagramOldVersion;
            mappingDialog.DiagramView           = ActiveDiagramView;
            mappingDialog.DiagramViewOldVersion = MainWindow.DiagramTabManager.GetDiagramView(diagramOldVersion);
            mappingDialog.Closed += new System.EventHandler(mappingDialog_Closed);
            mappingDialog.Show();
        }
示例#3
0
        public override void Execute(object parameter)
        {
            // Closes existing project
            if (CurrentProject != null)
            {
                // Save existing project if there are some unsaved changes
                if (MainWindow.HasUnsavedChanges)
                {
                    MessageBoxResult r =
                        XCaseYesNoBox.Show("Current project is not saved", "Do you want to save it?");
                    if (r == MessageBoxResult.Yes)
                    {
                        new cmdSaveProject(MainWindow, null).Execute();
                    }
                    else
                    if (r == MessageBoxResult.Cancel)
                    {
                        return;
                    }
                }
                //new cmdCloseProject(MainWindow, null).Execute();
                MainWindow.CloseProject();
            }

            // Creates new XCase project but with no diagrams
            XmlDeserializator deserializator = new XmlDeserializator();
            Project           p = deserializator.CreateEmptyProject();

            p.CreateModelController();
            // HACK (SEVERE): this should be somewhere else!
            p.GetModelController().getUndoStack().ItemsChanged += MainWindow.UndoStack_ItemsChanged;
            //It is this way so that when the CurrentProject is set, ModelController is present
            MainWindow.CurrentProject = p;

            MainWindow.projectsWindow.BindToProject(CurrentProject);
            MainWindow.navigatorWindow.BindToProject(CurrentProject);
            MainWindow.propertiesWindow.BindDiagram(ref MainWindow.dockManager);
            MainWindow.InitializeMainMenu();
            MainWindow.OpenProjectDiagrams();

            MainWindow.Title             = "XCase editor - Project1";
            MainWindow.HasUnsavedChanges = false;
        }
示例#4
0
        /// <summary>
        /// Opens a project from a <see cref="Filename">file</see>.
        /// </summary>
        /// <param name="parameter">ignored</param>
        /// <exception cref="Exception">When exception occurs, new project is created and exception is rethrown.</exception>
        public override void Execute(object parameter)
        {
            OpenFileDialog dlg = new OpenFileDialog
            {
                DefaultExt = ".XCase",
                Filter     = "XCase files (*.XCase)|*.XCase|XML files (*.xml)|*.xml|All files (*.*)|*.*||"
            };

            bool?result = null;

            if (!NoDialogs && !NoOpenFileDialog)
            {
                result = dlg.ShowDialog();
            }
            else
            {
                dlg.FileName = Filename;
            }

            if (NoDialogs || NoOpenFileDialog || result == true)
            {
                String msg = string.Empty;

                XmlDeserializatorBase deserializator;
                if (XmlDeserializatorVersions.UsesVersions(dlg.FileName))
                {
                    deserializator = new XmlDeserializatorVersions();
                }
                else
                {
                    deserializator = new XmlDeserializator();
                }

                // First, validates if the file is a valid XCase XML file
                // TODO: it would be better to have two separate schemas rather than one choice schema
                if (!deserializator.ValidateXML(dlg.FileName, ref msg))
                {
                    Dialogs.ErrMsgBox.Show("File cannot be opened", "Not a valid XCase XML file");
                    return;
                }

                // version check
                string v1;
                string v2;
                if (!XmlDeserializatorBase.VersionsEqual(dlg.FileName, out v1, out v2))
                {
                    fProjectConverter projectConverter = new fProjectConverter();

                    if (projectConverter.CanConvert(v1, v2))
                    {
                        MessageBoxResult yn = XCaseYesNoBox.Show("Project is obsolete. ", "Project is obsolete and must be converted to a new version before opening. \r\nDo you want to convert it now? ");
                        if (yn == MessageBoxResult.Yes)
                        {
                            projectConverter.SetFile(dlg.FileName);
                            projectConverter.DialogMode = true;
                            projectConverter.ShowDialog();
                        }
                    }
                    else
                    {
                        Dialogs.ErrMsgBox.Show(string.Format("Can not open file {0}. Project version is {1}, needed version is {2}.", dlg.FileName, v1, v2), "");
                    }
                    if (!XmlDeserializatorBase.VersionsEqual(dlg.FileName, out v1, out v2))
                    {
                        Dialogs.ErrMsgBox.Show(string.Format("Can not open file {0}. Project version is {1}, needed version is {2}. \r\nUse project converter to convert the file to new version.", dlg.FileName, v1, v2), "");
                        return;
                    }
                }

                // Closes existing project
                if (CurrentProject != null)
                {
                    // Save existing project if there are some unsaved changes
                    if (MainWindow.HasUnsavedChanges && !NoDialogs)
                    {
                        MessageBoxResult r =
                            XCaseYesNoBox.Show("Current project is not saved", "Do you want to save it?");

                        if (r == MessageBoxResult.Yes)
                        {
                            new cmdSaveProject(MainWindow, null).Execute();
                        }
                        else
                        if (r == MessageBoxResult.Cancel)
                        {
                            return;
                        }
                    }

                    //new cmdCloseProject(MainWindow, null).Execute();
                    MainWindow.CloseProject();
                }
                //try
                {
                    BusyState.SetBusy();

                    if (deserializator is XmlDeserializator)
                    {
                        Project p = deserializator.RestoreProject(dlg.FileName);
                        p.FilePath = dlg.FileName;
                        p.CreateModelController();
                        // HACK (SEVERE) - this should be somewhere else ...
                        p.GetModelController().getUndoStack().ItemsChanged += MainWindow.UndoStack_ItemsChanged;
                        MainWindow.CurrentProject    = p;
                        MainWindow.Title             = "XCase editor - " + p.FilePath;
                        MainWindow.HasUnsavedChanges = false;


                        //It is this way so that when the CurrentProject is set, ModelController is present
                        MainWindow.projectsWindow.BindToProject(CurrentProject);
                        MainWindow.navigatorWindow.BindToProject(CurrentProject);
                        MainWindow.propertiesWindow.BindDiagram(ref MainWindow.dockManager);
                        MainWindow.InitializeMainMenu();
                        MainWindow.HasUnsavedChanges = false;
                        MainWindow.OpenProjectDiagrams();
                    }
                    else
                    {
                        VersionManager versionManager = ((XmlDeserializatorVersions)deserializator).RestoreVersionedProject(dlg.FileName);
                        versionManager.FilePath = dlg.FileName;
                        foreach (Project project in versionManager.VersionedProjects.Values)
                        {
                            project.FilePath = dlg.FileName;
                            project.CreateModelController();
                        }
                        MainWindow.projectsWindow.BindToVersionManager(versionManager);
                        Project latestProjectVersion = versionManager.LatestVersion;
                        MainWindow.projectsWindow.SwitchToVersion(latestProjectVersion.Version);
                        MainWindow.navigatorWindow.BindToProject(latestProjectVersion);
                        MainWindow.InitializeMainMenu();
                        MainWindow.OpenProjectDiagrams();
                        MainWindow.HasUnsavedChanges = false;
                        MainWindow.Title             = "XCase editor - " + versionManager.FilePath;

                        #if DEBUG
                        foreach (KeyValuePair <Version, Project> kvp in versionManager.VersionedProjects)
                        {
                            Tests.ModelIntegrity.ModelConsistency.CheckEverything(kvp.Value);
                        }
                        Tests.ModelIntegrity.VersionsConsistency.CheckVersionsConsistency(versionManager);
                        #endif
                    }
                }
                //catch
                //{
                //    new cmdNewProject(MainWindow, null).Execute();
                //    throw;
                //}
                //finally
                //{
                //    BusyState.SetNormalState();
                //}
            }
        }
示例#5
0
        public override void Execute(object parameter)
        {
            IHasPSMAttributes hasAttributes = (IHasPSMAttributes)GetElement();

            SelectItemsDialog selectVersion = new SelectItemsDialog();
            List <Version>    _versions     = new List <Version>(CurrentProject.VersionManager.Versions.Where(ver => ver.Number < hasAttributes.Version.Number));
            Version           v;

            if (_versions.Count > 1)
            {
                selectVersion.UseRadioButtons = true;
                selectVersion.SetItems(_versions);
                selectVersion.ShortMessage = "Select version";
                selectVersion.LongMessage  = "Select version to map to.";
                selectVersion.Title        = "Select version";

                if (selectVersion.ShowDialog() != true || selectVersion.selectedObjects.Count != 1)
                {
                    return;
                }
                v = (Version)selectVersion.selectedObjects[0];
            }
            else
            {
                v = _versions[0];
            }

            SelectItemsDialog selectAttributes = new SelectItemsDialog();

            selectAttributes.UseRadioButtons = true;
            selectAttributes.SetItems(hasAttributes.PSMAttributes);
            selectAttributes.ShortMessage = "Select attribute";
            selectAttributes.LongMessage  = "Select attribute for mapping.";
            selectAttributes.Title        = "Select attribute";
            selectAttributes.SelectItem(hasAttributes.PSMAttributes.FirstOrDefault(a => a.GetInVersion(v) == null));
            if (selectAttributes.ShowDialog() != true || selectAttributes.selectedObjects.Count != 1)
            {
                return;
            }

            IVersionedElement selectedAttribute = (IVersionedElement)selectAttributes.selectedObjects[0];
            Version           currentVersion    = selectedAttribute.Version;

            Diagram diagram = (Diagram)ActiveDiagramView.Diagram.GetInVersion(v);

            if (diagram == null)
            {
                XCaseYesNoBox.ShowOK("Diagram not present", "Diagram does not exist in this version. ");
                return;
            }


            List <Element> _candidates = new List <Element>();

            foreach (var element in ((IHasPSMAttributes)hasAttributes.GetInVersion(v)).PSMAttributes.Where
                         (e => e.GetType() == selectedAttribute.GetType() && e.IsFirstVersion && e.GetInVersion(currentVersion) == null))
            {
                _candidates.Add(element);
            }

            if (_candidates.Count == 0)
            {
                XCaseYesNoBox.ShowOK("Not found", "No possible elements found for this item. ");
                return;
            }

            SelectItemsDialog selectElement = new SelectItemsDialog();

            selectElement.UseRadioButtons = true;
            selectElement.SetItems(_candidates);
            Element guess = _candidates.FirstOrDefault(c => c.ToString() == selectedAttribute.ToString());

            selectElement.SelectItem(guess);
            selectElement.ShortMessage = "Select element";
            selectElement.LongMessage  = "Select element to map to.";
            selectElement.Title        = "Select element";

            if (selectElement.ShowDialog() != true || selectElement.selectedObjects.Count != 1)
            {
                return;
            }

            Element el = (Element)selectElement.selectedObjects[0];

            CurrentProject.VersionManager.RegisterBranch(el, selectedAttribute, currentVersion, true, el.Version);
        }