Example #1
0
        public void GenerateMenuItemForPasteXmlAsSchema(AddIn addInInstance, DTE2 applicationObject, Commands2 commands, CommandBars commandBars, object[] contextGUIDS)
        {
            Command cmdObj = commands.AddNamedCommand2(
                addInInstance,
                "PasteSchemaMenu",
                "Paste XML as Schema",
                "Pastes the XML on the clipboard as XSD schema.",
                true,
                239,
                ref contextGUIDS,
                (int)vsCommandStatus.vsCommandStatusSupported + (int)vsCommandStatus.vsCommandStatusEnabled,
                (int)vsCommandStyle.vsCommandStylePictAndText,
                vsCommandControlType.vsCommandControlTypeButton);

            CommandBar menuBarCommandBar = commandBars["MenuBar"];

            CommandBarControl editControl  = menuBarCommandBar.Controls["Edit"];
            CommandBarPopup   editPopup    = (CommandBarPopup)editControl;
            CommandBarControl pasteControl = editPopup.CommandBar.Controls["Paste"];

            cmdObj.AddControl(editPopup.CommandBar, pasteControl != null ? pasteControl.Index + 1 : 1);

            AppLog.LogMessage("Paste Schema code menu item is added");
        }
Example #2
0
        private bool ProcessPasteSchemaRequest()
        {
            try
            {
                if (currentProject == null)
                {
                    MessageBox.Show(
                        "You cannot paste schema items outside of a project.",
                        "Web Services Contract-First Paste Schema",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Exclamation);

                    return(true);
                }

                IDataObject dataObject = Clipboard.GetDataObject();
                if (dataObject == null)
                {
                    MessageBox.Show(
                        "There was no data found in the clipboard.",
                        "Web Services Contract-First Paste Schema",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Exclamation);

                    return(true);
                }

                string xml = (string)dataObject.GetData(typeof(string));
                if (xml == null)
                {
                    MessageBox.Show(
                        "There was no string data found in the clipboard.",
                        "Web Services Contract-First Paste Schema",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Exclamation);

                    return(true);
                }

                XElement schemaXml;
                try
                {
                    schemaXml = XElement.Parse(xml);
                }
                catch (Exception)
                {
                    MessageBox.Show(
                        "The data found in the clipboard is not valid XML.",
                        "Web Services Contract-First Paste Schema",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Exclamation);

                    return(true);
                }

                XmlSchemaSet       schemas   = new XmlSchemaSet();
                XmlSchemaInference inference = new XmlSchemaInference();

                using (XmlReader reader = schemaXml.CreateReader())
                {
                    inference.InferSchema(reader, schemas);
                }

                XmlWriterSettings settings = new XmlWriterSettings {
                    Indent = true
                };

                foreach (XmlSchema schema in schemas.Schemas())
                {
                    if (schema.Items.Count == 0)
                    {
                        continue;
                    }

                    string schemaName = ((XmlSchemaElement)(schema.Items[0])).Name;
                    string fileName   = Path.Combine(selectedItem.Directory, Path.ChangeExtension(schemaName, "xsd"));

                    if (File.Exists(fileName))
                    {
                        DialogResult dialogResult = MessageBox.Show(
                            "A file named '" + Path.GetFileName(fileName) + "' already exist in the project. Do you want to overwrite this file?",
                            "Web Services Contract-First Paste Schema",
                            MessageBoxButtons.YesNo,
                            MessageBoxIcon.Question);

                        if (dialogResult == DialogResult.No)
                        {
                            continue;
                        }
                    }

                    using (XmlWriter writer = XmlWriter.Create(fileName, settings))
                    {
                        if (writer != null)
                        {
                            schema.Write(writer);
                        }
                    }
                    if (File.Exists(fileName))
                    {
                        currentProject.AddFile(fileName);
                    }
                }
            }
            catch (Exception ex)
            {
                AppLog.LogMessage(ex.ToString());
                MessageBox.Show(ex.ToString(), "Web Services Contract-First Paste Schema", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            return(true);
        }
Example #3
0
        private bool ProcessXsdCodeGenerationRequest()
        {
            try
            {
                VisualStudioProject project = currentProject;
                IEnumerable <VisualStudioSelectedItem> selectedItems = vsInstance.SelectedItems;

                if (selectedItems.Count() == 0)
                {
                    MessageBox.Show(
                        "Cannot generate code for items outside of a project.",
                        "Web Services Contract-First code generation",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Exclamation);

                    return(true);
                }

                foreach (VisualStudioSelectedItem selectedItem in selectedItems)
                {
                    string extension = Path.GetExtension(selectedItem.FileName).ToLower();
                    if (extension == ".xsd" || extension == ".wsdl")
                    {
                        continue;
                    }

                    MessageBox.Show(
                        "Data Contracts can only be generated for .xsd or .wsdl files.",
                        "Web Services Contract-First code generation",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Exclamation);

                    return(true);
                }

                string[]         dataContractFiles = selectedItems.Select(i => i.FileName).ToArray();
                XsdCodeGenDialog dialogForm        = new XsdCodeGenDialog(dataContractFiles);
                if (!project.IsWebProject)
                {
                    dialogForm.Namespace = project.AssemblyNamespace;
                }
                dialogForm.TargetFileName = project.GetDefaultDestinationFilename(dataContractFiles[0]);

                if (dialogForm.ShowDialog() == DialogResult.Cancel)
                {
                    return(false);
                }

                CodeGenerationOptions options = new CodeGenerationOptions();
                options.GenerateDataContracts    = true;
                options.DataContractFiles        = dataContractFiles;
                options.GenerateProperties       = dialogForm.PublicProperties;
                options.GenerateCollections      = dialogForm.Collections;
                options.GenerateSeparateFiles    = dialogForm.GenerateMultipleFiles;
                options.OverwriteExistingFiles   = dialogForm.OverwriteFiles;
                options.AdjustCasing             = dialogForm.AdjustCasing;
                options.EnableDataBinding        = dialogForm.DataBinding;
                options.GenerateOrderIdentifiers = dialogForm.OrderIdentifiers;
                options.GenerateTypedLists       = dialogForm.GenericLists;
                options.ClrNamespace             = dialogForm.Namespace;
                options.OutputFileName           = dialogForm.TargetFileName;
                options.OutputLocation           = GetOutputDirectory();
                options.ProjectDirectory         = project.ProjectDirectory;
                options.Language = project.ProjectLanguage;

                CodeGenerator    codeGenerator = new CodeGenerator();
                CodeWriterOutput output        = codeGenerator.GenerateCode(options);

                AddGeneratedFilesToProject(output);

                // Finally add the project references.
                AddAssemblyReferences();

                MessageBox.Show("Code generation successfully completed.", "WSCF.Blue", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                AppLog.LogMessage(ex.ToString());
                MessageBox.Show(ex.ToString(), "CodeGeneration", MessageBoxButtons.OK, MessageBoxIcon.Error);
                // TODO: Log the exception.
                //System.Diagnostics.Debugger.Break();
            }

            return(true);
        } // End of ProcessXsdCodeGenerationRequestFunction.
Example #4
0
        /// <summary>
        /// This overloaded method handles the generation of client or server code
        /// for a supplied WSDL file
        /// </summary>
        /// <param name="wsdlFile"></param>
        /// <returns></returns>
        private bool ProcessStubGenerationRequest(string wsdlFile)
        {
            try
            {
                // Fist display the UI and get the options.
                WebServiceCodeGenDialogNew dialog = new WebServiceCodeGenDialogNew();
                if (!currentProject.IsWebProject)
                {
                    dialog.DestinationNamespace = currentProject.AssemblyNamespace;
                }
                dialog.DestinationFilename = GetDefaultDestinationFilename(wsdlFile);

                if (!selectedItem.IsProject)
                {
                    //dialog.WsdlLocation = selectedItem.FileName;
                    dialog.WsdlLocation = wsdlFile;
                }

                //if we havent passed the wsdl file in, there is still
                // the option for the user to use the BROWSE button and pick
                // the wsdl.

                if (dialog.ShowDialog() == DialogResult.Cancel)
                {
                    return(false);
                }


                //Get the options set in the dialog and add other things
                // that are specific to VS
                CodeGenerationOptions options = dialog.Options;

                options.Language         = currentProject.ProjectLanguage;
                options.ProjectDirectory = currentProject.ProjectDirectory;
                options.OutputLocation   = GetOutputDirectory();
                // TODO: Infer the config file type according to the project type
                // and merge the generated config file with the existing one.
                options.ConfigurationFile = "output.config";

                outputWindowWriter.Clear();

                CodeGenerator    codeGenerator = new CodeGenerator();
                CodeWriterOutput output        = codeGenerator.GenerateCode(options);

                AddGeneratedFilesToProject(output);

                // Finally add the project references.
                AddAssemblyReferences();

                // add custom assembly references if necessary
                if (options.EnableWsdlEndpoint)
                {
                    AddMetadataExtensionsReference();
                }

                MessageBox.Show("Code generation successfully completed.", "WSCF.Blue", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (ClientServiceGenerationException ex)
            {
                AppLog.LogMessage(ex.ToString());

                const string separator = "---------------------------------------------------------------------------------";
                foreach (string message in ex.Messages)
                {
                    outputWindowWriter.WriteMessage(message + "\r\n" + separator + "\r\n");
                }

                MessageBox.Show("Errors were found while importing the contract. Please check the 'WSCF.blue' pane in the Output window for more information.",
                                "CodeGeneration", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                AppLog.LogMessage(ex.ToString());
                MessageBox.Show(ex.ToString(), "CodeGeneration", MessageBoxButtons.OK, MessageBoxIcon.Error);
                // TODO: Log the exception.
                //System.Diagnostics.Debugger.Break();
                return(false);
            }
            return(true);
        }
Example #5
0
        private bool ProcessCodeGenerationRequestCore(string wsdlFile)
        {
            try
            {
                VisualStudioProject      project      = this.VisualStudio.SelectedProject;
                VisualStudioSelectedItem selectedItem = this.VisualStudio.SelectedItem;

                // Fist display the UI and get the options.
                WebServiceCodeGenDialogNew dialog = new WebServiceCodeGenDialogNew();
                if (!project.IsWebProject)
                {
                    dialog.DestinationNamespace = project.AssemblyNamespace;
                }
                dialog.DestinationFilename = project.GetDefaultDestinationFilename(wsdlFile);

                if (!selectedItem.IsProject)
                {
                    //dialog.WsdlLocation = selectedItem.FileName;
                    dialog.WsdlLocation = wsdlFile;
                }
                if (dialog.ShowDialog() == DialogResult.Cancel)
                {
                    return(false);
                }

                wsdlFile = dialog.WsdlPath;
                // Try the Rpc2DocumentLiteral translation first.
                // wsdlFile = TryTranslateRpc2DocumentLiteral(wsdlFile);

                CodeGenerationOptions options = new CodeGenerationOptions();
                options.MetadataLocation = wsdlFile;
                options.ClrNamespace     = dialog.DestinationNamespace;
                options.OutputFileName   = dialog.DestinationFilename;
                options.OutputLocation   = GetOutputDirectory();
                options.ProjectDirectory = project.ProjectDirectory;
                options.Language         = project.ProjectLanguage;
                options.ProjectName      = project.ProjectName;
                // TODO: Infer the config file type according to the project type
                // and merge the generated config file with the existing one.
                options.ConfigurationFile         = "output.config";
                options.GenerateService           = dialog.ServiceCode;
                options.GenerateProperties        = dialog.GenerateProperties;
                options.VirtualProperties         = dialog.VirtualProperties;
                options.FormatSoapActions         = dialog.FormatSoapActions;
                options.GenerateCollections       = dialog.Collections;
                options.GenerateTypedLists        = dialog.GenericList;
                options.EnableDataBinding         = dialog.EnableDataBinding;
                options.GenerateOrderIdentifiers  = dialog.OrderIdentifiers;
                options.GenerateAsyncCode         = dialog.AsyncMethods;
                options.GenerateSeparateFiles     = dialog.GenerateMultipleFiles;
                options.AdjustCasing              = dialog.ChangeCasing;
                options.OverwriteExistingFiles    = dialog.Overwrite;
                options.EnableWsdlEndpoint        = dialog.EnabledWsdlEndpoint;
                options.GenerateSvcFile           = dialog.GenerateSvcFile;
                options.ConcurrencyMode           = dialog.ConcurrencyMode;
                options.InstanceContextMode       = dialog.InstanceContextMode;
                options.UseSynchronizationContext = dialog.UseSynchronizationContext;
                options.MethodImplementation      = dialog.MethodImplementation;

                OutputWindowWriter.Clear();

                CodeGenerator    codeGenerator = new CodeGenerator();
                CodeWriterOutput output        = codeGenerator.GenerateCode(options);

                AddGeneratedFilesToProject(output);

                // Finally add the project references.
                AddAssemblyReferences();

                // add custom assembly references if necessary
                if (options.EnableWsdlEndpoint)
                {
                    AddMetadataExtensionsReference();
                }

                MessageBox.Show("Code generation successfully completed.", "WSCF.Blue", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (ClientServiceGenerationException ex)
            {
                AppLog.LogMessage(ex.ToString());

                const string separator = "---------------------------------------------------------------------------------";
                foreach (string message in ex.Messages)
                {
                    OutputWindowWriter.WriteMessage(message + "\r\n" + separator + "\r\n");
                }

                MessageBox.Show("Errors were found while importing the contract. Please check the 'WSCF.blue' pane in the Output window for more information.",
                                "CodeGeneration", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                AppLog.LogMessage(ex.ToString());
                MessageBox.Show(ex.ToString(), "CodeGeneration", MessageBoxButtons.OK, MessageBoxIcon.Error);
                // TODO: Log the exception.
                //System.Diagnostics.Debugger.Break();
            }
            return(true);
        }