Пример #1
0
        /// <summary>
        /// Unpacks this package into the specified directory.
        /// </summary>
        /// <param name="baseDirectory">The directory to use.</param>
        public static Package Unpack(string rootLocation, Stream packageStream)
        {
            XmlReaderSettings settings = new XmlReaderSettings();

            settings.ConformanceLevel = ConformanceLevel.Fragment;
            XmlReader     reader = XmlReader.Create(packageStream, settings);
            XPathDocument doc    = new XPathDocument(reader);

            // Read the name so we can know where to create it.
            var    nav      = doc.CreateNavigator();
            var    nameNode = nav.SelectSingleNode("/Package/@Name");
            string name     = nameNode.Value;

            string packageDir = System.IO.Path.Combine(rootLocation, name);

            System.IO.Directory.CreateDirectory(packageDir);

            Package newPackage = new Package(packageDir, false);

            newPackage.ReadPackage(nav);
            newPackage.SaveManifest();

            return(newPackage);
        }
Пример #2
0
        /// <summary>
        /// Handles the Click event of the Build Package Button
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.Windows.RoutedEventArgs"/> instance containing the event data.</param>
        private void BuildPkgButton_Click(object sender, RoutedEventArgs e)
        {
            MainBorder.Visibility = System.Windows.Visibility.Visible;

            var viewModel          = (PackageBuilderViewModel)DataContext;
            PackageSourceInfo info = viewModel.PackageSourceInfo;
            bool noError           = true;

            TraceLab.Core.PackageSystem.Package pkg = null;

            string pkgFilePath = GetFilePath(info.Name);

            if (pkgFilePath != null)
            {
                string pkgFileName      = System.IO.Path.GetFileNameWithoutExtension(pkgFilePath);
                string pkgTempDirectory = pkgFilePath + "~temp";

                try
                {
                    System.IO.Directory.CreateDirectory(pkgTempDirectory);

                    try
                    {
                        pkg = new TraceLab.Core.PackageSystem.Package(info.Name, pkgTempDirectory, false);
                    }
                    catch (TraceLab.Core.PackageSystem.PackageAlreadyExistsException)
                    {
                        MessageBox.Show("Package already exists in: " + pkgTempDirectory,
                                        "Package Creation Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        noError = false;
                    }
                    catch (TraceLab.Core.PackageSystem.PackageException ex)
                    {
                        MessageBox.Show("Error creating package: " + ex.Message,
                                        "Package Creation Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        noError = false;
                    }

                    if (pkg != null && noError)
                    {
                        foreach (PackageFileSourceInfo item in info.Files)
                        {
                            noError = noError && AddItemToPackage(pkg, item);
                        }

                        pkg.SaveManifest();

                        using (System.IO.FileStream stream = new System.IO.FileStream(pkgFilePath, System.IO.FileMode.Create))
                        {
                            pkg.Pack(stream);
                        }
                    }
                }
                catch (System.IO.IOException error)
                {
                    MessageBox.Show("Unable to create package. Error: " + error.Message,
                                    "Package Creation Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    noError = false;
                }
                catch (System.UnauthorizedAccessException error)
                {
                    MessageBox.Show("Unable to create package - Unauthorized access: " + error.Message,
                                    "Package Creation Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    noError = false;
                }

                try
                {
                    if (System.IO.Directory.Exists(pkgTempDirectory))
                    {
                        System.IO.Directory.Delete(pkgTempDirectory, true);
                    }
                }
                catch (System.IO.IOException error)
                {
                    MessageBox.Show("Unable to cleanup after package creation. Error: " + error.Message,
                                    "After Package Cleanup Failure", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                }
                catch (System.UnauthorizedAccessException error)
                {
                    MessageBox.Show("Unable to cleanup after package creation. Unauthorized access: " + error.Message,
                                    "After Package Cleanup Failure", MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            }

            if (noError && pkg != null)
            {
                MessageBox.Show("Package \"" + info.Name + "\" was built successfully.", "Package Created",
                                MessageBoxButton.OK, MessageBoxImage.Information);
            }

            MainBorder.Visibility = System.Windows.Visibility.Hidden;
        }
Пример #3
0
        public void SaveManifestTest()
        {
            var name = "TestPackage";
            var packageRoot = WriteTestPackage(name);

            // Load the package
            Package target = new Package(packageRoot, true);

            var manifestFile = System.IO.Path.Combine(PackageTestRoot, name, "TestPackage.manifest");
            var newManifestFile = System.IO.Path.Combine(PackageTestRoot, name, name + ".manifest");

            // Move the manifest to a backup 
            System.IO.File.Move(manifestFile, manifestFile + ".bak");

            // Compare the written manifest with the m anifest that is saved in the test resources
            Assert.IsFalse(System.IO.File.Exists(newManifestFile));

            // Force the save of the manifest
            target.SaveManifest();

            // Compare the written manifest with the m anifest that is saved in the test resources
            Assert.IsTrue(System.IO.File.Exists(newManifestFile));

            var backup = System.IO.File.ReadAllText(manifestFile + ".bak", Encoding.UTF8);
            var manifest = System.IO.File.ReadAllText(newManifestFile, Encoding.UTF8);
            Assert.IsTrue(backup.SequenceEqual(manifest));
        }
Пример #4
0
        /// <summary>
        /// Unpacks this package into the specified directory.
        /// </summary>
        /// <param name="baseDirectory">The directory to use.</param>
        public static Package Unpack(string rootLocation, Stream packageStream)
        {
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.ConformanceLevel = ConformanceLevel.Fragment;
            XmlReader reader = XmlReader.Create(packageStream, settings);
            XPathDocument doc = new XPathDocument(reader);

            // Read the name so we can know where to create it.
            var nav = doc.CreateNavigator();
            var nameNode = nav.SelectSingleNode("/Package/@Name");
            string name = nameNode.Value;

            string packageDir = System.IO.Path.Combine(rootLocation, name);
            System.IO.Directory.CreateDirectory(packageDir);

            Package newPackage = new Package(packageDir, false);
            newPackage.ReadPackage(nav);
            newPackage.SaveManifest();

            return newPackage;
        }