private static void TransformToCs(string fileS, string fileD, string outp, SrvcType type, bool withService) { if (File.Exists(fileD)) { File.Delete(fileD); } if (File.Exists(outp)) { File.Delete(outp); } if (!File.Exists(fileD)) { File.Copy(fileS, fileD); } Assert.IsFalse(File.Exists(outp)); Processor.XsdToCs(fileD, "CIM", outp, type, withService); Assert.IsTrue(File.Exists(outp)); }
public static void XsdToCs(string xsdFile, string targetNamespace, string outputFile, SrvcType serviceType, bool withService) { if (withService) { CreateCommonFiles(targetNamespace, xsdFile); XsdToCsWithService(xsdFile, targetNamespace, outputFile, serviceType); } else { XsdToCsWithoutService(xsdFile, targetNamespace, outputFile, serviceType); } }
public static void XsdToCsWithoutService(string xsdFile, string targetNamespace, string outputFile, SrvcType serviceType) { if (!File.Exists(xsdFile)) { throw new Exception($"Xsd file doesn't exist! Path: {xsdFile}"); } if (targetNamespace == "") { throw new Exception($"Target namespace is not defined!"); } if (outputFile == "") { throw new Exception($"Output file is not defined!"); } // Get the namespace for the schema. CodeNamespace ns = xsdFile.ProcessXsd(targetNamespace); ns.Imports.AddRange(new CodeNamespaceImport[] { new CodeNamespaceImport("System.Runtime.Serialization") }); var names = CleanAndReplace(ns); if (serviceType == SrvcType.Get) { var getrequestmessage = names.WildcardSearch("Get*RequestMessageType").SingleOrDefault(); var responsemessage = names.WildcardSearch("*ResponseMessageType").SingleOrDefault(); var faultmessage = names.WildcardSearch("*FaultMessageType").SingleOrDefault(); if (getrequestmessage == null) { throw new Exception("Can't find Get*RequestMessage!"); } if (responsemessage == null) { throw new Exception("Can't find ResponseMessage!"); } if (faultmessage == null) { throw new Exception("Can't find FaultMessage!"); } var noun = getrequestmessage.NounFromWildcard("Get*RequestMessageType"); if (string.IsNullOrEmpty(noun)) { throw new Exception("Unknown noun!"); } ns.Types.Add(CreateClass("Get", noun, "Request")); ns.Types.Add(CreateClass("Get", noun, "Response", true)); } else if (serviceType == SrvcType.Reply) { var requestmessage = names.WildcardSearch("*RequestMessageType").SingleOrDefault(); var responsemessage = names.WildcardSearch("*ResponseMessageType").SingleOrDefault(); var faultmessage = names.WildcardSearch("*FaultMessageType").SingleOrDefault(); if (requestmessage == null) { throw new Exception("Can't find Get*RequestMessage!"); } if (responsemessage == null) { throw new Exception("Can't find ResponseMessage!"); } if (faultmessage == null) { throw new Exception("Can't find FaultMessage!"); } var noun = requestmessage.NounFromWildcard("*RequestMessageType"); if (string.IsNullOrEmpty(noun)) { throw new Exception("Unknown noun!"); } ns.Types.Add(CreateClass("Created", noun, "Event", true)); ns.Types.Add(CreateClass("Changed", noun, "Event", true)); ns.Types.Add(CreateClass("Canceled", noun, "Event", true)); ns.Types.Add(CreateClass("Closed", noun, "Event", true)); ns.Types.Add(CreateClass("Deleted", noun, "Event", true)); ns.Types.Add(CreateClass("", noun, "Response", true)); } else if (serviceType == SrvcType.Request) { var getrequestmessage = names.WildcardSearch("*RequestMessageType").SingleOrDefault(); var responsemessage = names.WildcardSearch("*ResponseMessageType").SingleOrDefault(); var faultmessage = names.WildcardSearch("*FaultMessageType").SingleOrDefault(); if (getrequestmessage == null) { throw new Exception("Can't find Get*RequestMessage!"); } if (responsemessage == null) { throw new Exception("Can't find ResponseMessage!"); } if (faultmessage == null) { throw new Exception("Can't find FaultMessage!"); } var noun = getrequestmessage.NounFromWildcard("*RequestMessageType"); if (string.IsNullOrEmpty(noun)) { throw new Exception("Unknown noun!"); } ns.Types.Add(CreateClass("Create", noun, "Request", true)); ns.Types.Add(CreateClass("Create", noun, "Response", true)); ns.Types.Add(CreateClass("Change", noun, "Request", true)); ns.Types.Add(CreateClass("Change", noun, "Response", true)); ns.Types.Add(CreateClass("Cancel", noun, "Request", true)); ns.Types.Add(CreateClass("Cancel", noun, "Response", true)); ns.Types.Add(CreateClass("Close", noun, "Request", true)); ns.Types.Add(CreateClass("Close", noun, "Response", true)); ns.Types.Add(CreateClass("Delete", noun, "Request", true)); ns.Types.Add(CreateClass("Delete", noun, "Response", true)); } // Write the code to the output file. using (StreamWriter sw = new StreamWriter(outputFile, false)) { CodeDomProvider.CreateProvider("cs").GenerateCodeFromNamespace(ns, sw, new CodeGeneratorOptions()); } }
public static void XsdToCsWithService(string xsdFile, string targetNamespace, string outputFile, SrvcType serviceType) { if (!File.Exists(xsdFile)) { throw new Exception($"Xsd file doesn't exist! Path: {xsdFile}"); } if (targetNamespace == "") { throw new Exception($"Target namespace is not defined!"); } if (outputFile == "") { throw new Exception($"Output file is not defined!"); } // COMMON // Get the namespace for the schema. CodeNamespace ns = xsdFile.ProcessXsd(targetNamespace); ns.Imports.AddRange(new CodeNamespaceImport[] { new CodeNamespaceImport("System.Runtime.Serialization") }); var names = CleanAndReplace(ns); DeleteClasses(ns, toDeleteClasses); DeleteEnums(ns, toDeleteEnums); if (serviceType == SrvcType.Get) { var getrequestmessage = names.WildcardSearch("Get*RequestMessageType").SingleOrDefault(); var responsemessage = names.WildcardSearch("*ResponseMessageType").SingleOrDefault(); var faultmessage = names.WildcardSearch("*FaultMessageType").SingleOrDefault(); if (getrequestmessage == null) { throw new Exception("Can't find Get*RequestMessage!"); } if (responsemessage == null) { throw new Exception("Can't find ResponseMessage!"); } if (faultmessage == null) { throw new Exception("Can't find FaultMessage!"); } var noun = getrequestmessage.NounFromWildcard("Get*RequestMessageType"); if (string.IsNullOrEmpty(noun)) { throw new Exception("Unknown noun!"); } #region Repair ns.Imports.Add(new CodeNamespaceImport("System")); ns.Imports.Add(new CodeNamespaceImport("System.ServiceModel")); DeleteClasses(ns, new List <string>() { $"Get{noun}RequestType" }); var rt = CreateClassEmpty("Get", noun, "RequestType"); rt.BaseTypes.Add(new CodeTypeReference("GetRequestType")); ns.Types.Add(rt); DeleteClasses(ns, new List <string>() { $"{noun}FaultMessageType" }); rt = CreateClassEmpty("", noun, "FaultMessageType"); rt.BaseTypes.Add(new CodeTypeReference("FaultMessageType")); ns.Types.Add(rt); var index = FindType(ns, $"Get{noun}RequestMessageType"); ns.Types[index].BaseTypes.Add(new CodeTypeReference("IGetRequestMessageType", new CodeTypeReference($"Get{noun}RequestType"), new CodeTypeReference($"{noun}PayloadType"))); index = FindType(ns, $"{noun}PayloadType"); ns.Types[index].BaseTypes.Add(new CodeTypeReference("IPayloadType", new CodeTypeReference($"{noun}"))); index = FindType(ns, $"{noun}ResponseMessageType"); ns.Types[index].BaseTypes.Add(new CodeTypeReference("IResponseMessageType", new CodeTypeReference($"{noun}PayloadType"))); #endregion #region Create ns.Types.Add(CreateClass("Get", noun, "Request")); ns.Types.Add(CreateClass("Get", noun, "Response", true)); ns.Types .Add(CreateInterface($"IGet{noun}Service", new List <Tuple <string, string, string, string> >() { new Tuple <string, string, string, string>($"Get{noun}", $"Get{noun}Request", "request", $"Get{noun}Response") })); ns.Types .Add(CreateClassForService($"Get{noun}Service", $"IGet{noun}Service", noun, new List <Tuple <string, string, string> >() { new Tuple <string, string, string>($"GetHandler", $"Get{noun}Request", $"Get{noun}Response") }, new List <Tuple <string, string, string, string, string> >() { new Tuple <string, string, string, string, string>($"Get{noun}", $"Get{noun}Request", "request", $"Get{noun}Response", "Get") })); #endregion } else if (serviceType == SrvcType.Reply) { var requestmessage = names.WildcardSearch("*RequestMessageType").SingleOrDefault(); var responsemessage = names.WildcardSearch("*ResponseMessageType").SingleOrDefault(); var faultmessage = names.WildcardSearch("*FaultMessageType").SingleOrDefault(); if (requestmessage == null) { throw new Exception("Can't find Get*RequestMessage!"); } if (responsemessage == null) { throw new Exception("Can't find ResponseMessage!"); } if (faultmessage == null) { throw new Exception("Can't find FaultMessage!"); } var noun = requestmessage.NounFromWildcard("*RequestMessageType"); if (string.IsNullOrEmpty(noun)) { throw new Exception("Unknown noun!"); } #region Repair ns.Imports.Add(new CodeNamespaceImport("System")); ns.Imports.Add(new CodeNamespaceImport("System.ServiceModel")); DeleteClasses(ns, new List <string>() { $"{noun}FaultMessageType" }); var rt = CreateClassEmpty("", noun, "FaultMessageType"); rt.BaseTypes.Add(new CodeTypeReference("FaultMessageType")); ns.Types.Add(rt); var index = FindType(ns, $"{noun}RequestMessageType"); ns.Types[index].BaseTypes.Add(new CodeTypeReference("IRequestMessageType", new CodeTypeReference($"{noun}PayloadType"))); index = FindType(ns, $"{noun}PayloadType"); ns.Types[index].BaseTypes.Add(new CodeTypeReference("IPayloadType", new CodeTypeReference($"{noun}"))); //index = FindType(ns, $"{noun}ResponseMessageType"); //ns.Types[index].BaseTypes.Add(new CodeTypeReference("IResponseMessageType", new CodeTypeReference($"{noun}PayloadType"))); index = FindType(ns, $"{noun}EventMessageType"); ns.Types[index].BaseTypes.Add(new CodeTypeReference("IEventMessageType", new CodeTypeReference($"{noun}PayloadType"))); #endregion #region Create ns.Types.Add(CreateClass("", noun, "Response", true)); index = FindType(ns, $"{noun}ResponseMessageType"); ns.Types[index].BaseTypes.Add(new CodeTypeReference("IResponseMessageType", new CodeTypeReference($"{noun}PayloadType"))); ns.Types.Add(CreateClass("Created", noun, "Event", true)); ns.Types.Add(CreateClass("Changed", noun, "Event", true)); ns.Types.Add(CreateClass("Canceled", noun, "Event", true)); ns.Types.Add(CreateClass("Closed", noun, "Event", true)); ns.Types.Add(CreateClass("Deleted", noun, "Event", true)); ns.Types .Add(CreateInterface($"IReply{noun}Service", new List <Tuple <string, string, string, string> >() { new Tuple <string, string, string, string>($"Created{noun}", $"Created{noun}Event", "request", $"{noun}Response"), new Tuple <string, string, string, string>($"Changed{noun}", $"Changed{noun}Event", "request", $"{noun}Response"), new Tuple <string, string, string, string>($"Canceled{noun}", $"Canceled{noun}Event", "request", $"{noun}Response"), new Tuple <string, string, string, string>($"Closed{noun}", $"Closed{noun}Event", "request", $"{noun}Response"), new Tuple <string, string, string, string>($"Deleted{noun}", $"Deleted{noun}Event", "request", $"{noun}Response") })); ns.Types .Add(CreateClassForService($"Reply{noun}Service", $"IReply{noun}Service", noun, new List <Tuple <string, string, string> >() { new Tuple <string, string, string>($"CreatedHandler", $"Created{noun}Event", $"{noun}Response"), new Tuple <string, string, string>($"ChangedHandler", $"Changed{noun}Event", $"{noun}Response"), new Tuple <string, string, string>($"CanceledHandler", $"Canceled{noun}Event", $"{noun}Response"), new Tuple <string, string, string>($"ClosedHandler", $"Closed{noun}Event", $"{noun}Response"), new Tuple <string, string, string>($"DeletedHandler", $"Deleted{noun}Event", $"{noun}Response") }, new List <Tuple <string, string, string, string, string> >() { new Tuple <string, string, string, string, string>($"Created{noun}", $"Created{noun}Event", "request", $"{noun}Response", "Created"), new Tuple <string, string, string, string, string>($"Changed{noun}", $"Changed{noun}Event", "request", $"{noun}Response", "Changed"), new Tuple <string, string, string, string, string>($"Canceled{noun}", $"Canceled{noun}Event", "request", $"{noun}Response", "Canceled"), new Tuple <string, string, string, string, string>($"Closed{noun}", $"Closed{noun}Event", "request", $"{noun}Response", "Closed"), new Tuple <string, string, string, string, string>($"Deleted{noun}", $"Deleted{noun}Event", "request", $"{noun}Response", "Deleted") })); #endregion } else if (serviceType == SrvcType.Request) { var getrequestmessage = names.WildcardSearch("*RequestMessageType").SingleOrDefault(); var responsemessage = names.WildcardSearch("*ResponseMessageType").SingleOrDefault(); var faultmessage = names.WildcardSearch("*FaultMessageType").SingleOrDefault(); if (getrequestmessage == null) { throw new Exception("Can't find Get*RequestMessage!"); } if (responsemessage == null) { throw new Exception("Can't find ResponseMessage!"); } if (faultmessage == null) { throw new Exception("Can't find FaultMessage!"); } var noun = getrequestmessage.NounFromWildcard("*RequestMessageType"); if (string.IsNullOrEmpty(noun)) { throw new Exception("Unknown noun!"); } #region Repair ns.Imports.Add(new CodeNamespaceImport("System")); ns.Imports.Add(new CodeNamespaceImport("System.ServiceModel")); DeleteClasses(ns, new List <string>() { $"{noun}FaultMessageType" }); var rt = CreateClassEmpty("", noun, "FaultMessageType"); rt.BaseTypes.Add(new CodeTypeReference("FaultMessageType")); ns.Types.Add(rt); var index = FindType(ns, $"{noun}RequestMessageType"); ns.Types[index].BaseTypes.Add(new CodeTypeReference("IRequestMessageType", new CodeTypeReference($"{noun}PayloadType"))); index = FindType(ns, $"{noun}PayloadType"); ns.Types[index].BaseTypes.Add(new CodeTypeReference("IPayloadType", new CodeTypeReference($"{noun}"))); index = FindType(ns, $"{noun}ResponseMessageType"); ns.Types[index].BaseTypes.Add(new CodeTypeReference("IResponseMessageType", new CodeTypeReference($"{noun}PayloadType"))); index = FindType(ns, $"{noun}EventMessageType"); ns.Types[index].BaseTypes.Add(new CodeTypeReference("IEventMessageType", new CodeTypeReference($"{noun}PayloadType"))); #endregion #region Create ns.Types.Add(CreateClass("Create", noun, "Request", true)); ns.Types.Add(CreateClass("Create", noun, "Response", true)); ns.Types.Add(CreateClass("Change", noun, "Request", true)); ns.Types.Add(CreateClass("Change", noun, "Response", true)); ns.Types.Add(CreateClass("Cancel", noun, "Request", true)); ns.Types.Add(CreateClass("Cancel", noun, "Response", true)); ns.Types.Add(CreateClass("Close", noun, "Request", true)); ns.Types.Add(CreateClass("Close", noun, "Response", true)); ns.Types.Add(CreateClass("Delete", noun, "Request", true)); ns.Types.Add(CreateClass("Delete", noun, "Response", true)); ns.Types .Add(CreateInterface($"IRequest{noun}Service", new List <Tuple <string, string, string, string> >() { new Tuple <string, string, string, string>($"Create{noun}", $"Create{noun}Request", "request", $"Create{noun}Response"), new Tuple <string, string, string, string>($"Change{noun}", $"Change{noun}Request", "request", $"Change{noun}Response"), new Tuple <string, string, string, string>($"Cancel{noun}", $"Cancel{noun}Request", "request", $"Cancel{noun}Response"), new Tuple <string, string, string, string>($"Close{noun}", $"Close{noun}Request", "request", $"Close{noun}Response"), new Tuple <string, string, string, string>($"Delete{noun}", $"Delete{noun}Request", "request", $"Delete{noun}Response") })); ns.Types .Add(CreateClassForService($"Request{noun}Service", $"IRequest{noun}Service", noun, new List <Tuple <string, string, string> >() { new Tuple <string, string, string>($"CreateHandler", $"Create{noun}Request", $"Create{noun}Response"), new Tuple <string, string, string>($"ChangeHandler", $"Change{noun}Request", $"Change{noun}Response"), new Tuple <string, string, string>($"CancelHandler", $"Cancel{noun}Request", $"Cancel{noun}Response"), new Tuple <string, string, string>($"CloseHandler", $"Close{noun}Request", $"Close{noun}Response"), new Tuple <string, string, string>($"DeleteHandler", $"Delete{noun}Request", $"Delete{noun}Response") }, new List <Tuple <string, string, string, string, string> >() { new Tuple <string, string, string, string, string>($"Create{noun}", $"Create{noun}Request", "request", $"Create{noun}Response", "Create"), new Tuple <string, string, string, string, string>($"Change{noun}", $"Change{noun}Request", "request", $"Change{noun}Response", "Change"), new Tuple <string, string, string, string, string>($"Cancel{noun}", $"Cancel{noun}Request", "request", $"Cancel{noun}Response", "Cancel"), new Tuple <string, string, string, string, string>($"Close{noun}", $"Close{noun}Request", "request", $"Close{noun}Response", "Close"), new Tuple <string, string, string, string, string>($"Delete{noun}", $"Delete{noun}Request", "request", $"Delete{noun}Response", "Delete") })); #endregion } // Write the code to the output file. using (StreamWriter sw = new StreamWriter(outputFile, false)) { CodeDomProvider.CreateProvider("cs").GenerateCodeFromNamespace(ns, sw, new CodeGeneratorOptions()); } }