Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / Tools / comsvcutil / Options.cs / 1 / Options.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace Microsoft.Tools.ServiceModel.ComSvcConfig { using System; using System.ServiceModel.Description; using System.Collections; using System.Collections.Generic; using System.IO; using System.Globalization; using System.Text; using System.Threading; using System.Reflection; using System.ServiceModel; using Microsoft.Tools.ServiceModel.SvcUtil; using Microsoft.Tools.ServiceModel; enum Mode { NotSpecified, Install, Uninstall, List } enum Hosting { NotSpecified, Complus, Was } static class Cmd { internal const string Application = "application"; internal const string Help = "help"; internal const string Hosting = "hosting"; internal const string Contract = "contract"; internal const string Mode = "mode"; internal const string NoLogo = "nologo"; internal const string Verbose = "verbose"; internal const string WebDirectory = "webDirectory"; internal const string WebServer = "webSite"; internal const string ID = "id"; internal const string MetaData = "mex"; internal const string Install = "install"; internal const string List = "list"; internal const string Uninstall = "uninstall"; internal const string AllowReferences = "allowreferences"; } static class Abbr { internal const string Application = "a"; internal const string Help = "?"; internal const string Hosting = "h"; internal const string Contract = "c"; internal const string Mode = "m"; internal const string NoLogo = "n"; internal const string Verbose = "v"; internal const string WebDirectory = "d"; internal const string WebServer = "w"; internal const string ID = "k"; internal const string MetaData = "x"; internal const string Install = "i"; internal const string List = "l"; internal const string Uninstall = "u"; internal const string AllowReferences = "r"; } class InterfaceDefination{ T iinterface; List methods; public InterfaceDefination (T iinterface, List methods) { this.iinterface = iinterface; this.methods = methods; } public bool AllMethods { get { if (methods == null) return true; else return false; } } public T Interface { get { return this.iinterface; } } public IList Methods { get { return this.methods; } } } class ComponentDefinition { bool allInterfaces; T component; List > interfaces; public bool AllInterfaces { get { return this.allInterfaces; } } public T Component { get { return this.component; } } public IList > Interfaces { get { return this.interfaces; } } public ComponentDefinition(T component) { this.allInterfaces = false; this.component = component; this.interfaces = null; } public void AddInterface(T itf, List methods) { if (this.AllInterfaces) { throw Tool.CreateArgumentException(Cmd.Contract, this.component.ToString() + "," + itf.ToString(), SR.GetString(SR.AllInterfacesAlreadySelected, this.component.ToString()), null); } if (this.interfaces == null) { this.interfaces = new List >(); } InterfaceDefination interfaceDefination = new InterfaceDefination (itf, methods); this.interfaces.Add(interfaceDefination); } public void SetAllInterfaces() { if (this.interfaces != null || (this.allInterfaces == true)) { throw Tool.CreateArgumentException(Cmd.Contract, this.component.ToString() + ",*", SR.GetString(SR.CannotSpecifyAllInterfaces), null); } this.allInterfaces = true; } } // This class does just the conversion of command line options to strongly-typed params // It does only very basic checking (i.e. allowable interface, etc.) // But most other checking (i.e. what params are allowed for what modes), is left to the consumer class Options { bool allComponents; string application; bool help; Hosting hosting; IList > components; Mode mode; bool noLogo; bool verbose; string webDirectory; string webServer; bool showGuids; bool allowReferences; bool mex; string mexOnlyComponent = String.Empty; internal bool AllComponents { get { return this.allComponents; } } internal string Application { get { return this.application; } } internal IList > Components { get { return this.components; } } internal bool Help { get { return this.help; } } internal Hosting Hosting { get { return this.hosting; } } internal Mode Mode { get { return this.mode; } } internal bool NoLogo { get { return this.noLogo; } } internal bool Verbose { get { return this.verbose; } } internal string WebDirectory { get { return this.webDirectory; } } internal string WebServer { get { return this.webServer; } } internal bool ShowGuids { get { return showGuids; } } internal bool AllowReferences { get { return allowReferences; } } internal bool Mex { get { return mex; } } internal string MexOnlyComponent { get { return this.mexOnlyComponent; } } static CommandSwitch[] switches = new CommandSwitch[]{ new CommandSwitch(Cmd.Application, Abbr.Application, SwitchType.SingletonValue), new CommandSwitch(Cmd.Help, Abbr.Help, SwitchType.Flag), new CommandSwitch(Cmd.Hosting, Abbr.Hosting, SwitchType.SingletonValue), new CommandSwitch(Cmd.Contract, Abbr.Contract, SwitchType.SingletonValue), new CommandSwitch(Cmd.Mode, Abbr.Mode, SwitchType.SingletonValue), new CommandSwitch(Cmd.NoLogo, Abbr.NoLogo, SwitchType.Flag), new CommandSwitch(Cmd.Verbose, Abbr.Verbose, SwitchType.Flag), new CommandSwitch(Cmd.WebDirectory, Abbr.WebDirectory, SwitchType.SingletonValue), new CommandSwitch(Cmd.WebServer, Abbr.WebServer, SwitchType.SingletonValue), new CommandSwitch(Cmd.ID, Abbr.ID, SwitchType.Flag), new CommandSwitch(Cmd.MetaData, Abbr.MetaData, SwitchType.Flag), new CommandSwitch(Cmd.Install, Abbr.Install, SwitchType.Flag), new CommandSwitch(Cmd.Uninstall, Abbr.Uninstall, SwitchType.Flag), new CommandSwitch(Cmd.List, Abbr.List, SwitchType.Flag), new CommandSwitch(Cmd.AllowReferences, Abbr.AllowReferences, SwitchType.Flag) }; Options(Mode mode, ArgumentDictionary arguments) { if (arguments == null) { help = true; return; } this.mode = mode; // Application if (arguments.ContainsArgument(Cmd.Application)) { this.application = arguments.GetArgument(Cmd.Application); } // Help this.help = arguments.ContainsArgument(Cmd.Help); // Hosting this.hosting = Hosting.NotSpecified; if (arguments.ContainsArgument(Cmd.Hosting)) { string argValue = arguments.GetArgument(Cmd.Hosting); if (string.Equals(argValue, Enum.GetName(typeof(Hosting), Hosting.Complus), StringComparison.OrdinalIgnoreCase)) { this.hosting = Hosting.Complus; } else if (string.Equals(argValue, Enum.GetName(typeof(Hosting), Hosting.Was), StringComparison.OrdinalIgnoreCase)) { if (WasAdminWrapper.IsIISInstalled()) this.hosting = Hosting.Was; else throw Tool.CreateException (SR.GetString(SR.IISNotInstalled, argValue), null); } else { throw Tool.CreateException(SR.GetString(SR.UnknownHostingSpecified, argValue), null); } } this.mex = arguments.ContainsArgument(Cmd.MetaData); // Interface this.components = null; this.allComponents = false; if (arguments.ContainsArgument(Cmd.Contract)) { IList argValues = arguments.GetArguments(Cmd.Contract); ParseInterfaces(argValues); } // NoLogo this.noLogo = arguments.ContainsArgument(Cmd.NoLogo); if (this.noLogo && arguments.Count == 1) this.help = true; // Verbose this.verbose = arguments.ContainsArgument(Cmd.Verbose); // WebDirectory if (arguments.ContainsArgument(Cmd.WebDirectory)) { this.webDirectory = arguments.GetArgument(Cmd.WebDirectory); } // WebServer if (arguments.ContainsArgument(Cmd.WebServer)) { this.webServer = arguments.GetArgument(Cmd.WebServer); } this.showGuids = arguments.ContainsArgument(Cmd.ID); this.allowReferences = arguments.ContainsArgument(Cmd.AllowReferences); } internal static Options ParseArguments(string[] args) { Mode mode = Mode.NotSpecified; Options options = null; if (args.Length > 0) { ArgumentDictionary arguments = CommandParser.ParseCommand(args, switches); if (arguments.ContainsArgument(Cmd.Install)) { mode = Mode.Install; } if (arguments.ContainsArgument(Cmd.Uninstall)) { if(mode != Mode.NotSpecified) throw Tool.CreateException(SR.GetString(SR.MultipleModeArguments), null); mode = Mode.Uninstall; } if (arguments.ContainsArgument(Cmd.List)) { if (mode != Mode.NotSpecified) throw Tool.CreateException(SR.GetString(SR.MultipleModeArguments), null); mode = Mode.List; } options = new Options(mode, arguments); } else return new Options (mode, null); if (!options.Help && (mode == Mode.NotSpecified)) throw Tool.CreateException(SR.GetString(SR.ModeArgumentMissing), null); return options; } void ParseInterfaces(IList argValues) { this.components = null; this.allComponents = false; // Handle the case of allComponents first if (argValues.Count == 1 && argValues[0] == "*") { this.allComponents = true; return; } // So much for that; this point on, we cant have allComponents set to true Dictionary > comps = new Dictionary >(); foreach (string argVal in argValues) { string comp = null; string itf = null; ComponentDefinition compDef = null; if (argVal.Contains(",")) { string[] argParts = argVal.Split(new char[] { ',' }, 2); comp = argParts[0]; itf = argParts[1]; } else if (!mex ) { // No comma, well this is malformed then throw Tool.CreateArgumentException(Cmd.Contract, argVal, SR.GetString(SR.MalformedInterfaceString), null); } else if (mex) { comp = argVal; itf = typeof (IMetadataExchange).GUID.ToString ("B"); if (String.Empty == mexOnlyComponent) mexOnlyComponent = argVal; } if (comp.Equals("*")) { throw Tool.CreateArgumentException(Cmd.Contract, argVal, SR.GetString(SR.CannotSpecifyInterfaceForAllComponents), null); } if (!comps.TryGetValue(comp, out compDef)) { compDef = new ComponentDefinition (comp); comps.Add(comp, compDef); } if (itf.Equals("*")) { compDef.SetAllInterfaces(); } else { string [] elements = itf.Split (new char [] {'.'}, 2); // Just interface specified if (elements.Length == 1) { compDef.AddInterface(itf, null); } else { itf = elements [0]; string methods = elements[1]; if (methods == "*") compDef.AddInterface(itf, null); else { if ((methods [0] != '{') && (methods [methods.Length - 1] != '}')) throw Tool.CreateException (SR.GetString (SR.BadMethodParameter, argVal), null); methods = methods.Substring (1, methods.Length - 2); string [] methodNames = methods.Split (new char [] {','}); if (methodNames.Length == 0) throw Tool.CreateException (SR.GetString (SR.NoMethodsSpecifiedInArgument, argVal), null); List methodList = new List (); foreach (string method in methodNames) methodList.Add (method); compDef.AddInterface(itf, methodList); } } } } this.components = new List >(comps.Count); foreach (ComponentDefinition compDef in comps.Values) { this.components.Add(compDef); } } } } // 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
- CustomActivityDesigner.cs
- RegexMatchCollection.cs
- CodeDomConfigurationHandler.cs
- GroupBoxDesigner.cs
- SqlTopReducer.cs
- AddressingVersion.cs
- Attribute.cs
- ClientBuildManagerCallback.cs
- SyndicationDeserializer.cs
- HtmlEncodedRawTextWriter.cs
- ScrollBar.cs
- DifferencingCollection.cs
- WsdlInspector.cs
- RoleGroupCollection.cs
- BitmapImage.cs
- ColumnMapTranslator.cs
- OdbcStatementHandle.cs
- XmlTextReaderImplHelpers.cs
- SchemaElementLookUpTableEnumerator.cs
- AlphabetConverter.cs
- XmlSequenceWriter.cs
- XmlSchemaSimpleTypeUnion.cs
- odbcmetadatacollectionnames.cs
- QueryCacheManager.cs
- DataGridToolTip.cs
- MarshalByValueComponent.cs
- UnSafeCharBuffer.cs
- MethodBuilderInstantiation.cs
- SmiContext.cs
- CatalogPartCollection.cs
- TableAutomationPeer.cs
- MatrixAnimationUsingKeyFrames.cs
- ByteAnimation.cs
- StrokeNode.cs
- XmlHelper.cs
- UndoManager.cs
- DataGridViewColumnConverter.cs
- NeutralResourcesLanguageAttribute.cs
- TextEditorTyping.cs
- XmlRawWriter.cs
- X509Extension.cs
- ContentControl.cs
- DataGridViewColumn.cs
- Menu.cs
- CodeComment.cs
- Odbc32.cs
- MouseButtonEventArgs.cs
- CaseInsensitiveOrdinalStringComparer.cs
- WindowInteropHelper.cs
- DnsElement.cs
- RequestTimeoutManager.cs
- DataGridViewLinkCell.cs
- RotateTransform.cs
- FormatSettings.cs
- BinaryEditor.cs
- BinaryObjectInfo.cs
- EditorZoneBase.cs
- FontCacheUtil.cs
- BmpBitmapDecoder.cs
- EventLogException.cs
- XmlComplianceUtil.cs
- MenuAutoFormat.cs
- StateBag.cs
- RightsManagementInformation.cs
- ResourceAttributes.cs
- PropertyTabAttribute.cs
- ProviderBase.cs
- CompleteWizardStep.cs
- DefaultValueTypeConverter.cs
- MailMessage.cs
- SpeechSynthesizer.cs
- InvokeAction.cs
- WorkflowExecutor.cs
- BamlStream.cs
- DataSourceXmlSerializationAttribute.cs
- WsdlParser.cs
- ToRequest.cs
- TextOnlyOutput.cs
- ActionFrame.cs
- RadioButtonStandardAdapter.cs
- TreeNodeCollectionEditorDialog.cs
- DirectoryGroupQuery.cs
- XmlSchemaComplexContentExtension.cs
- MethodAccessException.cs
- OracleRowUpdatingEventArgs.cs
- GridViewHeaderRowPresenter.cs
- ServiceNameElement.cs
- DataGridViewAccessibleObject.cs
- Control.cs
- XmlSchemaObjectTable.cs
- TaiwanCalendar.cs
- PrintingPermission.cs
- CodePrimitiveExpression.cs
- TextCharacters.cs
- XhtmlBasicLiteralTextAdapter.cs
- isolationinterop.cs
- FormsAuthentication.cs
- NameObjectCollectionBase.cs
- ConfigurationValue.cs
- JsonWriter.cs