void ValidatePackage()
        {
            PackageDetails details = store.LoadPackageFromStore(Location);

            if (details != null)
            {
                Warnings = details.Warnings;
                Id       = details.PackageId;
            }
            else
            {
                PackageValidatorSettings settings = new PackageValidatorSettings(ValidationBehavior.LogWarning, ValidationBehavior.None, ValidationBehavior.Enforce, ValidationBehavior.LogWarning);
                ValidationResults        log      = PackageValidator.Validate(reader, settings);
                if (log.HasErrors)
                {
                    // Shouldn't have any since enforcing errors.
                    throw new SafeToDisplayException(log, culture.Format(culture.Resources.PackageNotValid, string.Empty));
                }
                else if (log.HasWarnings)
                {
                    using (System.Xml.XmlReader xmlLog = log.ToXml())
                    {
                        Warnings = LearningStoreXml.CreateAndLoad(xmlLog);
                    }
                }
            }
        }
Esempio n. 2
0
        public static List <string> Validate(string path, out bool valid)
        {
            var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
            var reader = PackageReader.Create(stream);

            valid = true;

            var settings = new PackageValidatorSettings(
                ValidationBehavior.LogWarning,
                ValidationBehavior.LogWarning,
                ValidationBehavior.LogError,
                ValidationBehavior.LogWarning);

            ValidationResults results;

            var messages = new List <string>();

            try
            {
                results = Microsoft.LearningComponents.PackageValidator.Validate(reader, settings);
            }
            catch (InvalidPackageException ex)
            {
                messages.Add(string.Format("Package is invalid.{0}", ex.Message));
                valid = false;
                reader.Dispose();
                stream.Close();
                return(messages);
            }

            foreach (var result in results.Results)
            {
                if (result.IsError)
                {
                    valid = false;
                    messages.Add(string.Format("MLC Error: {0}", result.Message));
                }
                else
                {
                    messages.Add(string.Format("SCORM Warning: {0}", result.Message));
                }
            }

            if (messages.Count == 0)
            {
                messages.Add("Package is valid.");
            }

            reader.Dispose();
            stream.Close();

            return(messages);
        }
Esempio n. 3
0
        public static List<string> Validate(string path, out bool valid)
        {
            var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
            var reader = PackageReader.Create(stream);
            valid = true;

            var settings = new PackageValidatorSettings(
                ValidationBehavior.LogWarning,
                ValidationBehavior.LogWarning,
                ValidationBehavior.LogError,
                ValidationBehavior.LogWarning);

            ValidationResults results;

            var messages = new List<string>();

            try
            {
                results = Microsoft.LearningComponents.PackageValidator.Validate(reader, settings);
            }
            catch (InvalidPackageException ex)
            {
                messages.Add(string.Format("Package is invalid.{0}", ex.Message));
                valid = false;
                reader.Dispose();
                stream.Close();
                return messages;
            }

            foreach (var result in results.Results)
            {
                if (result.IsError)
                {
                    valid = false;
                    messages.Add(string.Format("MLC Error: {0}", result.Message));
                }
                else
                {
                    messages.Add(string.Format("SCORM Warning: {0}", result.Message));
                }
            }

            if (messages.Count == 0)
            {
                messages.Add("Package is valid.");
            }

            reader.Dispose();
            stream.Close();

            return messages;
        }
Esempio n. 4
0
        /// <summary>
        /// Returns a reader for the manifest of the package.
        /// </summary>
        /// <param name="manifestSettings">The <Typ>ManifestReaderSettings</Typ> to use when parsing the
        /// manifest.  Cannot be null.</param>
        /// <param name="packageValidatorSettings">The <Typ>PackageValidatorSettings</Typ> to use when parsing the
        /// manifest.  Cannot be null.</param>
        /// <param name="logReplacement">Write message that 'x was replaced by y' when the <Typ>ManifestReaderSettings</Typ>
        /// indicate to fix a value.</param>
        /// <param name="log">Optional log in which to put warnings and errors.  Can be null.</param>
        /// <remarks>
        /// Each call to this creates a new <Typ>ManifestReader</Typ> instance.
        /// </remarks>
        /// <exception cref="XmlException">An error was encountered in the XML data.</exception>
        /// <exception cref="InvalidPackageException">There is no imsmanifest.xml in the package,
        /// or the &lt;manifest&gt; node in the imsmanifest.xml is missing,
        /// or <c>ManifestReaderSettings.FixScormRequirementViolations=false</c> is set and the xml:base attribute on the &lt;manifest&gt;
        /// node is invalid.</exception>
        internal ManifestReader GetManifestReader(ManifestReaderSettings manifestSettings, PackageValidatorSettings packageValidatorSettings,
            bool logReplacement, ValidationResults log)
        {
            XPathNavigator manifest = CreateManifestNavigator();

            return new ManifestReader(this, manifestSettings, packageValidatorSettings, logReplacement, log, manifest);
        }
        /// <summary>
        /// Validate the package selected by the user.
        /// </summary>
        ///
        void ValidateSelectedPackage()
        {
            // do nothing if no package is selected
            if (packageListBox.SelectedIndex < 0)
            {
                return;
            }

            // execute the remainder of this method with a wait cursor displayed
            Cursor = Cursors.WaitCursor;
            try
            {
                // set <filePath> to the path to the package the user selected
                FileListItem fileListItem = (FileListItem)packageListBox.SelectedItem;
                string       filePath     = fileListItem.FilePath;

                // empty <logTextBox>, and add the file name
                logTextBox.Clear();
                logTextBox.AppendText(String.Format("Validating: {0}\r\n\r\n", filePath));

                // validate the package
                using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    bool anyMessages = false;
                    using (PackageReader packageReader = PackageReader.Create(stream))
                    {
                        // set package validator settings based on the setting of the <additionalScormWarningsCheckBox> control
                        PackageValidatorSettings settings;
                        if (additionalScormWarningsCheckBox.Checked)
                        {
                            // perform the same validation as SLK, plus look for additional SCORM issues
                            settings = new PackageValidatorSettings(
                                ValidationBehavior.LogWarning, ValidationBehavior.LogWarning,
                                ValidationBehavior.LogError, ValidationBehavior.LogWarning);
                        }
                        else
                        {
                            // perform the same validation as SLK
                            settings = new PackageValidatorSettings(
                                ValidationBehavior.LogWarning, ValidationBehavior.None,
                                ValidationBehavior.LogError, ValidationBehavior.LogWarning);
                        }

                        // validate the package; set <results> to the list of results
                        ValidationResults results;
                        try
                        {
                            results = PackageValidator.Validate(packageReader, settings);
                        }
                        catch (InvalidPackageException ex)
                        {
                            logTextBox.AppendText(String.Format("Package is invalid.\r\n\r\n{0}", ex.Message));
                            return;
                        }

                        // display <results>
                        foreach (ValidationResult result in results.Results)
                        {
                            string message;
                            if (result.IsError)
                            {
                                message = String.Format("MLC Error: {0}\r\n\r\n", result.Message);
                            }
                            else
                            {
                                message = String.Format("SCORM Warning: {0}\r\n\r\n", result.Message);
                            }
                            logTextBox.AppendText(message);
                            anyMessages = true;
                        }
                    }

                    // if there were no messages, give feedback to that effect to the user
                    if (!anyMessages)
                    {
                        logTextBox.AppendText("Package is valid.");
                    }
                }
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }