Exemple #1
0
        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));
        }
Exemple #2
0
 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);
     }
 }
Exemple #3
0
        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());
            }
        }
Exemple #4
0
        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());
            }
        }