Esempio n. 1
0
        public EvoX.Model.Project ConvertToEvoXProject(string fileName)
        {
            XmlDeserializatorBase deserializator;

            if (XmlDeserializatorVersions.UsesVersions(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
            string msg = null;

            if (!deserializator.ValidateXML(fileName, ref msg))
            {
                throw new XCaseException("File cannot be opened. Not a valid XCase XML file");
            }

            // version check
            string v1;
            string v2;

            if (!XmlDeserializatorBase.VersionsEqual(fileName, out v1, out v2))
            {
                throw new XCaseException("Project is obsolete. Project is obsolete and must be converted to a new version before opening. \r\nDo you want to convert it now? ");
            }
            Project deserializedProject = deserializator.RestoreProject(fileName);

            EvoX.Model.Project convertedProject = ConvertToEvoXProject(deserializedProject);
            return(convertedProject);
        }
Esempio n. 2
0
        public void Test(string filename)
        {
            XmlDeserializatorBase deserializator;

            if (XmlDeserializatorVersions.UsesVersions(filename))
            {
                deserializator = new XmlDeserializatorVersions();
            }
            else
            {
                deserializator = new XmlDeserializator();
            }
            Project    xcaseProject = deserializator.RestoreProject(filename);
            EvoXExport evoXExport   = new EvoXExport();

            EvoX.Model.Project evoxProject = evoXExport.ConvertToEvoXProject(xcaseProject);

            string resultPath = TEST_BASE_DIR + Path.GetFileNameWithoutExtension(filename) + ".EvoX";

            projectSerializationManager.SaveProject(evoxProject, resultPath);
        }
Esempio n. 3
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();
                //}
            }
        }
Esempio n. 4
0
        public void TestByCompare(string filename)
        {
            //string filename = "Attributes\\Attributes5.XCase";
            XmlDeserializatorVersions deserializator = new XmlDeserializatorVersions();
            VersionManager            versionManager = deserializator.RestoreVersionedProject(TEST_BASE_DIR + filename);

            Assert.IsTrue(versionManager != null && versionManager.VersionedProjects.Count == 2 &&
                          versionManager.Versions.Count == 2);

            Version    oldVersion        = versionManager.Versions[0];
            Version    newVersion        = versionManager.Versions[1];
            PSMDiagram diagramNewVersion = versionManager.VersionedProjects[newVersion].PSMDiagrams[0];
            PSMDiagram diagramOldVersion = versionManager.VersionedProjects[oldVersion].PSMDiagrams[0];

            ChangesDetector        detector         = new ChangesDetector();
            List <EvolutionChange> evolutionChanges = detector.Translate(diagramOldVersion, diagramNewVersion);

            XsltTemplateGenerator xsltGenerator = new XsltTemplateGenerator(diagramNewVersion);
            string xsltTransformation           = xsltGenerator.Generate(evolutionChanges, oldVersion, newVersion);

            string inputFileDir  = TEST_BASE_DIR + Path.GetDirectoryName(filename) + "\\" + Path.GetFileNameWithoutExtension(filename) + "-in";
            string outputFileDir = TEST_BASE_DIR + Path.GetDirectoryName(filename) + "\\" + Path.GetFileNameWithoutExtension(filename) + "-out";

            if (!Directory.Exists(inputFileDir))
            {
                Console.WriteLine("No input files. ");
                Assert.Inconclusive(string.Format("Input file directory does not exist : {0}", inputFileDir));
            }
            if (!Directory.Exists(outputFileDir))
            {
                Console.WriteLine("No reference files. ");
                Assert.Inconclusive(string.Format("Output file directory does not exist: {0}", outputFileDir));
            }

            DirectoryInfo dir = new DirectoryInfo(inputFileDir);

            FileInfo[] files       = dir.GetFiles("*.xml");
            bool       fail        = false;
            int        failedFiles = 0;

            foreach (FileInfo fileInfo in files)
            {
                Console.WriteLine(string.Format("File: {0}", fileInfo.Name));
                string input = File.ReadAllText(fileInfo.FullName);

                string result = XsltProcessing.Transform(input, xsltTransformation, TEST_BASE_DIR);
                File.WriteAllText(outputFileDir + "//" + fileInfo, result);

                DocumentValidator validator = new DocumentValidator {
                    SilentMode = true
                };

                bool inputInvalid  = false;
                bool resultInvalid = false;
                bool compareFail   = false;
                if (!validator.ValidateDocument(diagramOldVersion, input))
                {
                    inputInvalid = true;
                }

                if (!validator.ValidateDocument(diagramNewVersion, result))
                {
                    Console.WriteLine("Result document INVALID: " + validator.ErrorMessage);
                    resultInvalid = true;
                }

                string referenceFile = outputFileDir + "//" + Path.GetFileNameWithoutExtension(fileInfo.Name) + "-reference.xml";
                Assert.IsTrue(File.Exists(referenceFile), "Reference output file does not exist for: " + fileInfo.Name);
                string referenceOutput = File.ReadAllText(referenceFile);

                File.WriteAllText(outputFileDir + "//" + "last-stylesheet.xslt", xsltTransformation);

                if ((!inputInvalid && !resultInvalid) && result != referenceOutput)
                {
                    Console.WriteLine("Output and REFERENCE output DIFFERS for: " + fileInfo.Name);
                    compareFail = true;
                    Console.WriteLine("Input file: ");
                    Console.WriteLine(input);
                    Console.WriteLine("Result file: ");
                    Console.WriteLine(result);
                    Console.WriteLine("Reference file: ");
                    Console.WriteLine(referenceOutput);
                }
                else if (!inputInvalid && !resultInvalid && result == referenceOutput)
                {
                    Console.WriteLine("Comparison succeeded.");
                    File.WriteAllText(outputFileDir + "//" + "last-working-stylesheet.xslt", xsltTransformation);
                }

                if (inputInvalid)
                {
                    Console.WriteLine("Input document INVALID: " + validator.ErrorMessage);
                    Console.WriteLine("Input file: ");
                    Console.WriteLine(input);
                    fail = true;
                    failedFiles++;
                }

                if (resultInvalid)
                {
                    Console.WriteLine("Result document INVALID: " + validator.ErrorMessage);
                    Console.WriteLine("Result file: ");
                    Console.WriteLine(result);
                    fail = true;
                    failedFiles++;
                }

                if (compareFail)
                {
                    Console.WriteLine("Result of {0} DIFFERS from expected result.", fileInfo.Name);
                    fail = true;
                    failedFiles++;
                }
            }
            if (files.Length == 0)
            {
                Console.WriteLine("No input files. ");
                Assert.Inconclusive("No input files. ");
            }
            if (fail)
            {
                Console.WriteLine("{0} out of {1} files FAILED. ", failedFiles, files.Length);
                Assert.Fail("{0} out of {1} files FAILED. ", failedFiles, files.Length);
            }
            Console.WriteLine("Altogether tested on {0} files.", files.Length);
        }
Esempio n. 5
0
        public void TestValidationOnRandomFiles(string filename)
        {
            Console.WriteLine("Testing file {0}.", filename);
            //string filename = "Attributes\\Attributes5.XCase";
            XmlDeserializatorVersions deserializator = new XmlDeserializatorVersions();
            VersionManager            versionManager = deserializator.RestoreVersionedProject(TEST_BASE_DIR + filename);

            Assert.IsTrue(versionManager != null && versionManager.VersionedProjects.Count == 2 &&
                          versionManager.Versions.Count == 2);

            Version    oldVersion        = versionManager.Versions[0];
            Version    newVersion        = versionManager.Versions[1];
            PSMDiagram diagramNewVersion = versionManager.VersionedProjects[newVersion].PSMDiagrams[0];
            PSMDiagram diagramOldVersion = versionManager.VersionedProjects[oldVersion].PSMDiagrams[0];

            ChangesDetector        detector         = new ChangesDetector();
            List <EvolutionChange> evolutionChanges = detector.Translate(diagramOldVersion, diagramNewVersion);

            XsltTemplateGenerator xsltGenerator = new XsltTemplateGenerator(diagramNewVersion);
            string xsltTransformation           = xsltGenerator.Generate(evolutionChanges, oldVersion, newVersion);

            SampleDataGenerator g         = new SampleDataGenerator();
            DocumentValidator   validator = new DocumentValidator {
                SilentMode = true
            };

            string outputFileDir = TEST_BASE_DIR + Path.GetDirectoryName(filename) + "\\" + Path.GetFileNameWithoutExtension(filename) + "-error";

            int fails = 0;

            for (int i = 0; i < RANDOM_FILE_COUNT; i++)
            {
                string input = g.Translate(diagramOldVersion);
                if (!validator.ValidateDocument(diagramOldVersion, input))
                {
                    if (!Directory.Exists(outputFileDir))
                    {
                        Directory.CreateDirectory(outputFileDir);
                    }
                    File.WriteAllText(string.Format("{0}\\i{1}.xml", outputFileDir, i), input);
                    Console.WriteLine("Input document INVALID: " + validator.ErrorMessage);
                    fails++;
                    continue;
                }
                string result = XsltProcessing.Transform(input, xsltTransformation, TEST_BASE_DIR);
                if (!validator.ValidateDocument(diagramNewVersion, result))
                {
                    if (!Directory.Exists(outputFileDir))
                    {
                        Directory.CreateDirectory(outputFileDir);
                    }
                    File.WriteAllText(string.Format("{0}\\i{1}.xml", outputFileDir, i), input);
                    File.WriteAllText(string.Format("{0}\\o{1}.xml", outputFileDir, i), result);
                    Console.WriteLine("Result document INVALID: " + validator.ErrorMessage);
                    fails++;
                    continue;
                }
                Console.WriteLine("Test passed on file {0}/{1}", i, RANDOM_FILE_COUNT);
            }
            Console.WriteLine("Altogether tested on {0} random files. ", RANDOM_FILE_COUNT);
            if (fails != 0)
            {
                Console.WriteLine("{0} out of {1} files failed to pass. ", fails, RANDOM_FILE_COUNT);
                Assert.Fail("{0} out of {1} files failed to pass. ", fails, RANDOM_FILE_COUNT);
            }
            else
            {
                Console.WriteLine("All {0} files passed. ", RANDOM_FILE_COUNT);
            }
        }