1:   // --------------------------------------------------------------------------
2:   // (c) Copyright Bill Dawson 2002
3:   // http://www.BillDawson.com
4:   //
5:   // You are free to use this source code in your projects.  Please leave
6:   // this copyright message intact.
7:   // --------------------------------------------------------------------------
8:  
9:  
10:   // created on 12/19/2002 at 11:08 AM
11:   using System;
12:   using System.Reflection;
13:   using System.CodeDom;
14:   using System.CodeDom.Compiler;
15:   using Microsoft.CSharp;
16:   using Microsoft.JScript;
17:   using Microsoft.VisualBasic;
18:   using System.IO;
19:   using com.billdawson.dotnet.utils;
20:  
21:   namespace com.billdawson.dotnet.utils
22:   {
23:       public class TheMain
24:       {
25:           public static void Main(string[] args)
26:           {
27:               CommandLineArgs cla new CommandLineArgs(args);
28:               System.Collections.Hashtable argsTable=null;
29:               
30:               cla.AddRequiredArg("/l");
31:               cla.AddRequiredArg("/t");
32:               cla.AddRequiredArg("/a");
33:               cla.AddValueArg("/l");            
34:               cla.AddValueArg("/t");            
35:               cla.AddValueArg("/a");            
36:               cla.AddValueArg("/o");            
37:               cla.AddValueArg("/n");
38:               
39:               try {
40:                   argsTable cla.Parse();
41:               catch RequiredArgumentException e ) {
42:                   showUsage();
43:                   Console.WriteLine("Required argument {0} missing."e.ArgName );
44:                   return;
45:               catch ArgumentDependencyException e ) {
46:                   showUsage();
47:                   Console.WriteLine("Argument {0} requires argument {1} be specified.",
48:                                     e.Dependente.Dependee);
49:                   return;
50:               catch ArgumentExclusivityException e) {
51:                   showUsage();
52:                   Console.WriteLine("Arguments {0} and {1} cannot be used together."e.Arg1 e.Arg2);
53:                   return;
54:               catch ArgCannotHaveValueException e) {
55:                   showUsage();
56:                   Console.WriteLine("Argument {0} not understood.  Cannot have associated value."e.ArgName );
57:                   return;
58:               catch ArgMustHaveValueException e) {
59:                   showUsage();
60:                   Console.WriteLine("Argument {0} not understood.  Must specify value."e.ArgName );
61:                   return;
62:               catch (Exception e) {
63:                   showUsage();
64:                   Console.WriteLine("Unexpected Exception: " e.Message);
65:                   return;
66:               }
67:               
68:               string language = ((string)argsTable["/l"]).ToLower();
69:               string outfile String.Empty;
70:               string typename =(stringargsTable["/t"];
71:               string codebase = (string)argsTable["/a"];
72:               string ns "defaultNamespace";
73:               
74:               if (argsTable.ContainsKey("/o"))
75:                   outfile = (string)argsTable["/o"];
76:               
77:               if (argsTable.ContainsKey("/n"))
78:                   ns = (string)argsTable["/n"];
79:               
80:               AssemblyName aname new AssemblyName();
81:               aname.CodeBase codebase;
82:               Assembly assembly null;
83:               
84:               try {
85:                   assembly Assembly.Load(aname);
86:               catch(Exception e) {
87:                   Console.WriteLine("Unable to load assembly you specified as {0}.  {1}",aname,e.Message);
88:                   return;
89:               }
90:               
91:               Type[] types null;
92:               
93:               if (typename=="*")
94:                   types assembly.GetTypes();
95:               else {
96:                   Type singletype assembly.GetType(typename);
97:                   if (singletype==null)
98:                       throw new UnknownTypeException(typename);
99:                   types new Type[1];
100:                   types[0]=singletype;
101:                   
102:               }
103:               
104:               
105:               CodeDomProvider provider;
106:               
107:               switch(language){
108:                   case "vb":
109:                       provider new VBCodeProvider();
110:                       break;
111:                   case "c#":
112:                       provider new CSharpCodeProvider();
113:                       break;
114:                   case "js":
115:                       provider new JScriptCodeProvider();
116:                       break;
117:                   default:
118:                       throw new UnknownLanguageException(language);
119:               }
120:               
121:               TextWriter tw;
122:               
123:               if (outfile!=String.Empty
124:                   tw new StreamWriter(new FileStream(outfileFileMode.Create));    
125:               else
126:                   tw Console.Out;
127:  
128:               foreach(Type type in types)
129:               {
130:                   try{
131:                       Field2PropWrap.Wrap(typensprovidertw);
132:                   catch(TypeHasNoPublicFieldsException e){
133:                       Console.Error.WriteLine("Note that type {0} had no public fields to transform."e.TypeName);
134:                   }
135:               }
136:  
137:               tw.Close();
138:               
139:               if (outfile!=String.Empty)
140:                   Console.WriteLine("Completed output to {0}",outfile );
141:               
142:           }
143:           
144:           private static void showUsage()
145:           {
146:               Assembly thisAssembly Assembly.GetExecutingAssembly();
147:               System.Text.StringBuilder sb new System.Text.StringBuilder();
148:               
149:               sb.Append("\nUSAGE:\n\n>> ");
150:               sb.Append(getFileNameFromCodeBase(thisAssembly.CodeBase));
151:               sb.Append(" [options]\n\n");
152:               sb.Append(" Options:\n\n");
153:               sb.Append(" /l:[language]          [language] = c#,vb or js\n");            
154:               sb.Append(" /a:[assembly]          [assembly] = path to assembly file containing type\n");
155:               sb.Append(" /t:[typename]          [typename] = original typename (use * to transform all)\n");
156:               sb.Append(" /n:[namespace]         [namespace] = namspace for the NEW type\n");
157:               sb.Append(" /o:[outputfile]        [outputfile] = valid file name\n");
158:               sb.Append("\n\n");
159:               sb.Append("The /o option is optional.  If omitted, output goes to screen.\n\n");
160:               sb.Append("Example:\n\n");
161:               sb.Append(">> " getFileNameFromCodeBase(thisAssembly.CodeBase));
162:               sb.Append(" /l:c# /t:OldNamespace.OldType /a:MyAssembly.dll /n:NewNamespace /o:NewFile.cs");
163:               sb.Append("\n\n");            
164:               
165:               Console.WriteLine(sb.ToString());
166:           }
167:           
168:           private static string getFileNameFromCodeBase(string uri)
169:           {
170:               int lastslash uri.LastIndexOf("/");
171:               if (lastslash<1)
172:                   return uri;
173:               else{
174:                   string shorter uri.Substring(lastslash 1);
175:                   int lastdot shorter.LastIndexOf(".");
176:                   return shorter.Substring(0,lastdot);
177:                   
178:               }
179:                   
180:               
181:           }
182:       }
183:       
184:       public class UnknownLanguageException : Exception
185:       {
186:           private string _language="";
187:           
188:           public UnknownLanguageException(string language)
189:           {
190:               _language language;
191:           }
192:           
193:           public string LanguageName
194:           {
195:               getreturn _language; }
196:               set_language value; }
197:           }
198:       }
199:       
200:       
201:       
202:       public class UnknownTypeException : Exception
203:       {
204:           private string _typeName "";
205:           
206:           public UnknownTypeException(string typeName)
207:           {
208:               _typeName typeName;
209:           }
210:           
211:           public string TypeName{
212:               getreturn _typeName; }
213:               set_typeName=value; }
214:           }
215:       }
216:       
217:       public class TypeHasNoPublicFieldsException : Exception
218:       {
219:           private string _typeName "";
220:           
221:           public TypeHasNoPublicFieldsException(string typeName)
222:           {
223:               _typeName typeName;
224:           }
225:           
226:           public string TypeName{
227:               getreturn _typeName; }
228:               set_typeName=value; }
229:           }
230:       }
231:   }

This page was automatically generated by SharpDevelop.