private void trvHierarchy_AfterSelect(object sender, TreeViewEventArgs e) { this.XsdElementUri = null; if(e.Node.Tag is ProjectItem) { ProjectItem projectItem = e.Node.Tag as ProjectItem; if(!projectItem.Kind.Equals(Constants.vsProjectItemKindPhysicalFolder, StringComparison.OrdinalIgnoreCase)) { Cursor currentCursor = this.Cursor; this.Cursor = Cursors.WaitCursor; LoadXsdElementsHierarchy(e.Node); this.Cursor = currentCursor; } } else if(e.Node is XsdElementNode) { ProjectItem parent = e.Node.Parent.Tag as ProjectItem; this.XsdElementUri = new XmlSchemaElementMoniker(DteHelper2.BuildPath(parent), e.Node.Text); } if(SelectionChanged != null) { SelectionChanged(this, EventArgs.Empty); } }
public virtual CodeGenerationResults Generate(IArtifactLink link) { Guard.ArgumentNotNull(link, "link"); CodeGenerationResults content = new CodeGenerationResults(); try { XmlSchemaTypeGenerator generator = new XmlSchemaTypeGenerator(UseXmlSerializer(link), GetNamespace(link)); string xsdMoniker = Utility.GetData<string>(link, ElementDataKey); string xmlSchemaSource = XmlSchemaUtility.GetXmlSchemaSource(xsdMoniker, link); if (!string.IsNullOrEmpty(xmlSchemaSource)) { CodeCompileUnit unit = generator.GenerateCodeCompileUnit(xmlSchemaSource); string element = new XmlSchemaElementMoniker(xsdMoniker).ElementName; UpdateUnit(unit, element, link); ThrowOnNoTypes(unit.Namespaces, element); this.assemblyReferences = GetAssemblyReferences(link, unit.ReferencedAssemblies); CodeDomProvider provider = GetCodeDomProvider(link); GenerateCode(unit, provider, content, link.ItemPath); } } catch (Exception exception) { LogErrors(exception); } return content; }
/// <summary> /// Gets the XML schema source. /// </summary> /// <param name="xsdMoniker">The XSD moniker.</param> /// <param name="link">The link.</param> /// <returns></returns> public static string GetXmlSchemaSource(string xsdMoniker, IArtifactLink link) { Guard.ArgumentNotNullOrEmptyString(xsdMoniker, "xsdMoniker"); Guard.ArgumentNotNull(link, "link"); IResourceResolver resolver = (link as IResourceResolver) ?? new XmlSchemaResourceResolver(link); XmlSchemaElementMoniker uri = new XmlSchemaElementMoniker(xsdMoniker); return (uri.ElementName != null ? resolver.GetResourcePath(uri.XmlSchemaPath) : null); }
/// <summary> /// Gets the type of the base types from referenced. /// </summary> /// <param name="xsdMoniker">The XSD moniker.</param> /// <param name="link">The link.</param> /// <returns></returns> public static IList<string> GetBaseTypesFromReferencedType(string xsdMoniker, IArtifactLink link) { Guard.ArgumentNotNullOrEmptyString(xsdMoniker, "xsdMoniker"); Guard.ArgumentNotNull(link, "link"); IList<string> types = new List<string>(); string xmlSchemaSource = GetXmlSchemaSource(xsdMoniker, link); string element = new XmlSchemaElementMoniker(xsdMoniker).ElementName; // try first with DC serializer XmlSchemaTypeGenerator generator = new XmlSchemaTypeGenerator(false); CodeCompileUnit unit; try { unit = generator.GenerateCodeCompileUnit(xmlSchemaSource); } catch (InvalidSerializerException) { // now try with Xml serializer generator = new XmlSchemaTypeGenerator(true); unit = generator.GenerateCodeCompileUnit(xmlSchemaSource); } foreach (CodeNamespace ns in unit.Namespaces) { foreach (CodeTypeDeclaration codeType in ns.Types) { if (codeType.Name.Equals(element, StringComparison.OrdinalIgnoreCase)) { CollectNestedTypes(codeType, types, unit, ns.Types, link); return types; } } } return types; }