Exemple #1
0
		public static void ShowDialog(IServiceProvider serviceProvider, ORMDesignerDocData docData)
		{
			ExtensionManager extensionManager = new ExtensionManager(docData.Store);
			IWin32Window dialogOwner = Utility.GetDialogOwnerWindow(serviceProvider);
			if (extensionManager.ShowDialog(dialogOwner) == DialogResult.OK)
			{
				// TODO: Prompt the user to make sure they really want us to start deleting stuff...

				ListView.CheckedListViewItemCollection checkedItems = extensionManager.lvExtensions.CheckedItems;
				ExtensionLoader extensionLoader = ORMDesignerPackage.ExtensionLoader;
				IDictionary<string, ExtensionModelBinding> availableExtensions = extensionLoader.AvailableCustomExtensions;
				Dictionary<string, ExtensionModelBinding> checkedTypes = new Dictionary<string, ExtensionModelBinding>(availableExtensions.Count);
				foreach (ListViewItem listViewItem in checkedItems)
				{
					string extensionNamespace = (string)listViewItem.Tag;
					checkedTypes.Add(extensionNamespace, availableExtensions[extensionNamespace]);
				}

				// Make sure all required extensions are turned on. This will turn previously ignored
				// secondary extensions back on.
				extensionLoader.VerifyRequiredExtensions(ref checkedTypes);

				Stream currentStream = null;
				Stream newStream = null;
				try
				{
					Object streamObj;
					(docData as EnvDTE.IExtensibleObject).GetAutomationObject("ORMXmlStream", null, out streamObj);
					currentStream = streamObj as Stream;

					Debug.Assert(currentStream != null);

					newStream = ExtensionLoader.CleanupStream(currentStream, extensionLoader.StandardDomainModels, checkedTypes.Values, null);
					docData.ReloadFromStream(newStream, currentStream);
				}
				finally
				{
					if (currentStream != null)
					{
						currentStream.Dispose();
					}
					if (newStream != null)
					{
						newStream.Dispose();
					}
				}
			}
		}