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;
		}
Exemplo n.º 3
0
		/// <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);
		}
Exemplo n.º 4
0
		/// <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;
		}