Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Xml / System / Xml / Serialization / Advanced / SchemaImporterExtension.cs / 1 / SchemaImporterExtension.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
namespace System.Xml.Serialization.Advanced {
using System.Xml.Schema;
using System.Xml;
using System.Collections;
using System.Collections.Specialized;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Xml.Serialization;
///
///
///
/// [To be supplied.]
///
public abstract class SchemaImporterExtension {
///
public virtual string ImportSchemaType(string name, string ns, XmlSchemaObject context, XmlSchemas schemas, XmlSchemaImporter importer,
CodeCompileUnit compileUnit, CodeNamespace mainNamespace, CodeGenerationOptions options, CodeDomProvider codeProvider) {
return null;
}
///
public virtual string ImportSchemaType(XmlSchemaType type, XmlSchemaObject context, XmlSchemas schemas, XmlSchemaImporter importer,
CodeCompileUnit compileUnit, CodeNamespace mainNamespace, CodeGenerationOptions options, CodeDomProvider codeProvider) {
return null;
}
///
public virtual string ImportAnyElement(XmlSchemaAny any, bool mixed, XmlSchemas schemas, XmlSchemaImporter importer,
CodeCompileUnit compileUnit, CodeNamespace mainNamespace, CodeGenerationOptions options, CodeDomProvider codeProvider) {
return null;
}
///
public virtual CodeExpression ImportDefaultValue(string value, string type) {
return null;
}
}
public class SchemaImporterExtensionCollection : CollectionBase {
Hashtable exNames;
internal Hashtable Names {
get {
if (exNames == null)
exNames = new Hashtable();
return exNames;
}
}
public int Add(SchemaImporterExtension extension) {
return Add(extension.GetType().FullName, extension);
}
public int Add(string name, Type type) {
if (type.IsSubclassOf(typeof(SchemaImporterExtension))) {
return Add(name, (SchemaImporterExtension)Activator.CreateInstance(type));
}
else {
throw new ArgumentException(Res.GetString(Res.XmlInvalidSchemaExtension, type));
}
}
public void Remove(string name) {
if (Names[name] != null) {
List.Remove(Names[name]);
Names[name] = null;
}
}
public new void Clear() {
Names.Clear();
List.Clear();
}
internal SchemaImporterExtensionCollection Clone() {
SchemaImporterExtensionCollection clone = new SchemaImporterExtensionCollection();
clone.exNames = (Hashtable)this.Names.Clone();
foreach (object o in this.List) {
clone.List.Add(o);
}
return clone;
}
public SchemaImporterExtension this[int index] {
get { return (SchemaImporterExtension)List[index]; }
set { List[index] = value; }
}
internal int Add(string name, SchemaImporterExtension extension) {
if (Names[name] != null) {
if (Names[name].GetType() != extension.GetType()) {
throw new InvalidOperationException(Res.GetString(Res.XmlConfigurationDuplicateExtension, name));
}
return -1;
}
Names[name] = extension;
return List.Add(extension);
}
public void Insert(int index, SchemaImporterExtension extension) {
List.Insert(index, extension);
}
public int IndexOf(SchemaImporterExtension extension) {
return List.IndexOf(extension);
}
public bool Contains(SchemaImporterExtension extension) {
return List.Contains(extension);
}
public void Remove(SchemaImporterExtension extension) {
List.Remove(extension);
}
public void CopyTo(SchemaImporterExtension[] array, int index) {
List.CopyTo(array, index);
}
}
internal class MappedTypeDesc {
string name;
string ns;
XmlSchemaType xsdType;
XmlSchemaObject context;
string clrType;
SchemaImporterExtension extension;
CodeNamespace code;
bool exported = false;
StringCollection references;
internal MappedTypeDesc(string clrType, string name, string ns, XmlSchemaType xsdType, XmlSchemaObject context, SchemaImporterExtension extension, CodeNamespace code, StringCollection references) {
this.clrType = clrType.Replace('+', '.');
this.name = name;
this.ns = ns;
this.xsdType = xsdType;
this.context = context;
this.code = code;
this.references = references;
this.extension = extension;
}
internal SchemaImporterExtension Extension { get { return extension; } }
internal string Name { get { return clrType; } }
internal StringCollection ReferencedAssemblies {
get {
if (references == null)
references = new StringCollection();
return references;
}
}
internal CodeTypeDeclaration ExportTypeDefinition(CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit) {
if (exported)
return null;
exported = true;
foreach(CodeNamespaceImport import in code.Imports) {
codeNamespace.Imports.Add(import);
}
CodeTypeDeclaration codeClass = null;
string comment = Res.GetString(Res.XmlExtensionComment, extension.GetType().FullName);
foreach(CodeTypeDeclaration type in code.Types) {
if (clrType == type.Name) {
if (codeClass != null)
throw new InvalidOperationException(Res.GetString(Res.XmlExtensionDuplicateDefinition, extension.GetType().FullName, clrType));
codeClass = type;
}
type.Comments.Add(new CodeCommentStatement(comment, false));
codeNamespace.Types.Add(type);
}
if (codeCompileUnit != null) {
foreach(string reference in ReferencedAssemblies) {
if (codeCompileUnit.ReferencedAssemblies.Contains(reference))
continue;
codeCompileUnit.ReferencedAssemblies.Add(reference);
}
}
return codeClass;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BitmapEncoder.cs
- DataSpaceManager.cs
- RegisteredHiddenField.cs
- BitmapEditor.cs
- AssociationSetMetadata.cs
- InkCanvas.cs
- NetworkInformationException.cs
- InkCanvasFeedbackAdorner.cs
- ServerType.cs
- InvalidCastException.cs
- ValidationSettings.cs
- ContractBase.cs
- WebPartExportVerb.cs
- BitArray.cs
- NetworkInformationException.cs
- Model3DGroup.cs
- ValidatorUtils.cs
- DataGridViewCheckBoxCell.cs
- ErrorEventArgs.cs
- BamlRecordReader.cs
- AspProxy.cs
- EntityDataSourceValidationException.cs
- HtmlControlAdapter.cs
- RuleConditionDialog.Designer.cs
- ToolStripItemImageRenderEventArgs.cs
- InkCanvasInnerCanvas.cs
- TrustLevel.cs
- RangeValuePattern.cs
- FormView.cs
- CodeCatchClause.cs
- DataPagerFieldCommandEventArgs.cs
- DbTransaction.cs
- FileUpload.cs
- CapabilitiesUse.cs
- ArraySortHelper.cs
- PageBuildProvider.cs
- XmlBaseReader.cs
- HtmlTernaryTree.cs
- TreeViewBindingsEditor.cs
- DefaultCommandExtensionCallback.cs
- SchemaManager.cs
- Site.cs
- TokenizerHelper.cs
- MatrixTransform.cs
- EncodingInfo.cs
- EllipseGeometry.cs
- Image.cs
- PhonemeConverter.cs
- CompModSwitches.cs
- SQlBooleanStorage.cs
- DecryptRequest.cs
- WebPartAuthorizationEventArgs.cs
- _NestedMultipleAsyncResult.cs
- XPathNavigatorKeyComparer.cs
- PipeStream.cs
- StreamingContext.cs
- VisualTreeHelper.cs
- RangeValidator.cs
- XPathNodeHelper.cs
- PersistenceTask.cs
- OrderedDictionary.cs
- ConnectionStringSettingsCollection.cs
- DocumentViewer.cs
- Schedule.cs
- HandleCollector.cs
- PageTextBox.cs
- ResXResourceReader.cs
- InputQueueChannelAcceptor.cs
- Block.cs
- EntityDataSourceEntitySetNameItem.cs
- QilName.cs
- TableLayoutPanelCellPosition.cs
- BamlRecords.cs
- AutomationEventArgs.cs
- ImageCollectionEditor.cs
- IdleTimeoutMonitor.cs
- SqlDataReaderSmi.cs
- securitycriticaldataClass.cs
- SqlMethodCallConverter.cs
- AudioBase.cs
- Camera.cs
- _NtlmClient.cs
- printdlgexmarshaler.cs
- UnsafeNativeMethods.cs
- TaskResultSetter.cs
- ScriptingScriptResourceHandlerSection.cs
- UniqueIdentifierService.cs
- MulticastDelegate.cs
- AccessorTable.cs
- CultureMapper.cs
- unsafenativemethodstextservices.cs
- TypeSystemProvider.cs
- SignatureDescription.cs
- LambdaSerializationException.cs
- WindowsAltTab.cs
- SignerInfo.cs
- StreamWriter.cs
- EdmType.cs
- TaiwanLunisolarCalendar.cs
- XmlTypeAttribute.cs