public void RunStarted(object automationObject, Dictionary <string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
        {
            userProviderItemName = replacementsDictionary["$safeitemname$"];
            if (runKind == WizardRunKind.AsNewItem)
            {
                string   wizardData        = replacementsDictionary["$wizarddata$"];
                XElement element           = XElement.Parse("<WizardData>" + wizardData + "</WizardData>");
                var      nativeTypeElement = element
                                             .Descendants().FirstOrDefault(x => x.Name.LocalName.EqualsIgnoreCase("NativeType"));
                if (nativeTypeElement == null)
                {
                    return;
                }

                var nativeTypeName = nativeTypeElement.Value;
                var typesHandler   = NativeTypesHandlers.Where(x => x.Key.EqualsIgnoreCase(nativeTypeName)).Select(x => x.Value).FirstOrDefault();
                if (typesHandler == null)
                {
                    throw new WizardBackoutException("Unable to find associated INativeTypesHandler from '" + nativeTypeName + "'");
                }
                currentNativeTypesHandle = typesHandler;

                var dialog = new AddServiceStackReference(userProviderItemName, currentNativeTypesHandle);
                dialog.ShowDialog();
                if (!dialog.AddReferenceSucceeded)
                {
                    throw new WizardBackoutException("Cancelled");
                }
                finalUserProvidedName = dialog.FileNameTextBox.Text;
                replacementsDictionary.Add("$basereferenceurl$", dialog.ServerUrl.Replace(typesHandler.RelativeTypesUrl, string.Empty));
            }
            else
            {
                throw new WizardBackoutException("Invalid template runkind. Expecting 'WizardRunKind.AsNewItem'");
            }
        }
 private void AddServiceStackReference(string folderPath, INativeTypesHandler typesHandler)
 {
     int fileNameNumber = 1;
     //Find a version of the default name that doesn't already exist,
     //mimicing VS default file name behaviour.
     while (File.Exists(Path.Combine(folderPath, "ServiceReference" + fileNameNumber + typesHandler.CodeFileExtension)))
     {
         fileNameNumber++;
     }
     var dialog = new AddServiceStackReference("ServiceReference" + fileNameNumber, typesHandler);
     dialog.ShowDialog();
     if (!dialog.AddReferenceSucceeded)
     {
         return;
     }
     string templateCode = dialog.CodeTemplate;
     AddNewDtoFileToProject(dialog.FileNameTextBox.Text + typesHandler.CodeFileExtension, templateCode, typesHandler.RequiredNuGetPackages);
 }
        public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
        {
            userProviderItemName = replacementsDictionary["$safeitemname$"];
            if (runKind == WizardRunKind.AsNewItem)
            {
                string wizardData = replacementsDictionary["$wizarddata$"];
                XElement element = XElement.Parse("<WizardData>" + wizardData + "</WizardData>");
                var nativeTypeElement = element
                    .Descendants().FirstOrDefault(x => x.Name.LocalName.EqualsIgnoreCase("NativeType"));
                if (nativeTypeElement == null) return;

                var nativeTypeName = nativeTypeElement.Value;
                var typesHandler = NativeTypesHandlers.Where(x => x.Key.EqualsIgnoreCase(nativeTypeName)).Select(x => x.Value).FirstOrDefault();
                if (typesHandler == null)
                {
                    throw new WizardBackoutException("Unable to find associated INativeTypesHandler from '" + nativeTypeName + "'");
                }
                currentNativeTypesHandle = typesHandler;

                var dialog = new AddServiceStackReference(userProviderItemName, currentNativeTypesHandle);
                dialog.ShowDialog();
                if (!dialog.AddReferenceSucceeded)
                {
                    throw new WizardBackoutException("Cancelled");
                }
                finalUserProvidedName = dialog.FileNameTextBox.Text;
                replacementsDictionary.Add("$basereferenceurl$", dialog.ServerUrl.Replace(typesHandler.RelativeTypesUrl,string.Empty));
            }
            else
            {
                throw new WizardBackoutException("Invalid template runkind. Expecting 'WizardRunKind.AsNewItem'");
            }
        }