//---------------------------------------------------------------------

        /// <summary>
        /// Saves the dataset to a file, and associates that file with the
        /// dataset.
        /// </summary>
        public void SaveAs(string path)
        {
            if (path == null)
            {
                throw new ArgumentNullException();
            }
            if (path.Trim(null) == "")
            {
                throw new ArgumentException();
            }

            PersistentDataset persistentDataset = new PersistentDataset();

            foreach (ExtensionInfo extensionInfo in plugIns)
            {
                persistentDataset.PlugIns.Add(extensionInfo.PersistentInfo);
            }
            persistentDataset.Save(path);

            this.path = path;

            if (SavedEvent != null)
            {
                SavedEvent(this);
            }
        }
 //---------------------------------------------------------------------
 private void AssertAreEqual(PersistentDataset.PlugInInfo expected,
     PersistentDataset.PlugInInfo actual)
 {
     Assert.IsNotNull(actual);
     Assert.AreEqual(expected.Name, actual.Name);
     Assert.AreEqual(expected.Version, actual.Version);
     Assert.AreEqual(expected.TypeName, actual.TypeName);
     Assert.AreEqual(expected.AssemblyName, actual.AssemblyName);
     Assert.AreEqual(expected.ClassName, actual.ClassName);
     Assert.AreEqual(expected.UserGuidePath, actual.UserGuidePath);
 }
        //---------------------------------------------------------------------

        private void CreateSaveLoadAndCompareDataset(string                                filename,
                                                     params PersistentDataset.PlugInInfo[] plugIns)
        {
            PersistentDataset dataset = new PersistentDataset();
            foreach (PersistentDataset.PlugInInfo plugIn in plugIns)
            	dataset.PlugIns.Add(plugIn);

            string path = Data.MakeOutputPath(filename);
            dataset.Save(path);

            PersistentDataset dataset2;
            dataset2 = PersistentDataset.Load(path);

            AssertAreEqual(dataset, dataset2);
        }
        //---------------------------------------------------------------------

        /// <summary>
        /// Initializes a new instance by loading the dataset from a file.
        /// </summary>
        /// <param name="path">
        /// Path to the file where the dataset is stored
        /// </param>
        public Dataset(string path)
        {
            if (path == null)
            {
                throw new ArgumentNullException();
            }
            if (path.Trim(null) == "")
            {
                throw new ArgumentException("path is empty or just whitespace.");
            }

            this.path = path;
            PersistentDataset dataset = PersistentDataset.Load(path);

            plugIns = new List <ExtensionInfo>();
            foreach (PersistentDataset.PlugInInfo info in dataset.PlugIns)
            {
                plugIns.Add(new ExtensionInfo(info));
            }
        }
 //---------------------------------------------------------------------
 private void AssertAreEqual(PersistentDataset expected,
     PersistentDataset actual)
 {
     Assert.IsNotNull(actual);
     AssertAreEqual(expected.PlugIns, actual.PlugIns);
 }
        //---------------------------------------------------------------------

        /// <summary>
        /// Saves the dataset to a file, and associates that file with the
        /// dataset.
        /// </summary>
        public void SaveAs(string path)
        {
        	if (path == null)
        		throw new ArgumentNullException();
        	if (path.Trim(null) == "")
        		throw new ArgumentException();

        	PersistentDataset persistentDataset = new PersistentDataset();
        	foreach (ExtensionInfo extensionInfo in plugIns)
        		persistentDataset.PlugIns.Add(extensionInfo.PersistentInfo);
        	persistentDataset.Save(path);
        	
        	this.path = path;

        	if (SavedEvent != null)
        	    SavedEvent(this);
        }