|
using System;
using System.CodeDom;
using System.Collections.Generic;
using Harlinn.CIMTool.Types;
using System.Text;
namespace Harlinn.CIMTool.CodeGenerator
{
public class NamespaceClassFactory : NamedElement
{
CodeTypeDeclaration codeTypeDeclaration;
public NamespaceClassFactory(Namespace theParent)
: base(theParent)
{
}
public Namespace Namespace
{
get
{
if (Parent is Class)
{
Class theContainingClass = (Class)Parent;
return theContainingClass.Namespace;
}
return (Namespace)Parent;
}
}
public CodeTypeDeclaration CodeTypeDeclaration
{
get
{
if (codeTypeDeclaration == null)
{
codeTypeDeclaration = new CodeTypeDeclaration(Name);
}
return codeTypeDeclaration;
}
}
public override void GenerateManagementCode()
{
CodeTypeDeclaration declaration = CodeTypeDeclaration;
List<Class> classes = new List<Class>();
foreach (NamedElement ne in Namespace.Elements.Values)
{
if (ne is Class)
{
Class theClass = (Class)ne;
classes.Add(theClass);
}
}
string indent = " ";
StringBuilder sb = new StringBuilder();
sb.AppendLine(indent + "public static BaseElement CreateObject( System.Management.ManagementObject theManagementObject,bool disposeManagementObject = false)");
sb.AppendLine(indent + "{");
sb.AppendLine(indent + " if(theManagementObject == null)");
sb.AppendLine(indent + " {");
sb.AppendLine(indent + " throw new ArgumentNullException(\"theManagementObject\");");
sb.AppendLine(indent + " }");
sb.AppendLine(indent + " BaseElement result = null;");
sb.AppendLine(indent + " string className = theManagementObject.Path.ClassName;");
sb.AppendLine(indent + " switch (className)");
sb.AppendLine(indent + " {");
classes.Sort(new ClassComparer());
foreach (Class c in classes)
{
sb.AppendLine(indent + " case \"" + c.Key + "\":");
sb.AppendLine(indent + " result = new " + c.Name + "( theManagementObject, disposeManagementObject);");
sb.AppendLine(indent + " break;");
}
sb.AppendLine(indent + " default:");
sb.AppendLine(indent + " result = new BaseElement( theManagementObject, disposeManagementObject);");
sb.AppendLine(indent + " break;");
sb.AppendLine(indent + " }");
sb.AppendLine(indent + " return result;");
sb.AppendLine(indent + "}");
CodeSnippetTypeMember factoryFunction = new CodeSnippetTypeMember(sb.ToString());
declaration.Members.Add(factoryFunction);
Namespace.ManagementCodeNamespace.Types.Add(declaration);
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Chief Architect - Sea Surveillance AS.
Specializing in integrated operations and high performance computing solutions.
I’ve been fooling around with computers since the early eighties, I’ve even done work on CP/M and MP/M.
Wrote my first “real” program on a BBC micro model B based on a series in a magazine at that time. It was fun and I got hooked on this thing called programming ...
A few Highlights:
- High performance application server development
- Model Driven Architecture and Code generators
- Real-Time Distributed Solutions
- C, C++, C#, Java, TSQL, PL/SQL, Delphi, ActionScript, Perl, Rexx
- Microsoft SQL Server, Oracle RDBMS, IBM DB2, PostGreSQL
- AMQP, Apache qpid, RabbitMQ, Microsoft Message Queuing, IBM WebSphereMQ, Oracle TuxidoMQ
- Oracle WebLogic, IBM WebSphere
- Corba, COM, DCE, WCF
- AspenTech InfoPlus.21(IP21), OsiSoft PI
More information about what I do for a living can be found at:
harlinn.com or
LinkedIn
You can contact me at
espen@harlinn.no