示例#1
0
        /// <summary>This method generates a Java representation of an XML profile message</summary>
        /// <param name="xml">an XML representation of a profile message
        /// </param>
        public virtual void  generate(System.String xml)
        {
            try
            {
                ProfileParser  pp   = new ProfileParser(false);
                AntGenerator   an   = new AntGenerator();
                RuntimeProfile spec = pp.parse(xml);

                if (spec.getHL7Version() == null || spec.getHL7Version().Equals(""))
                {
                    throw new ConformanceException("Error: Runtime Profile does not specify HL7Version");
                }

                if (spec.Message.MsgStructID == null || spec.Message.MsgStructID.Equals(""))
                {
                    throw new ConformanceException("Error: Runtime Profile does not specify MsgStructID");
                }

                this.confMsgBuilder.buildClass(spec, this);
                an.createAnt(fg.BasePath, packageName);
            }
            catch (Genetibase.NuGenHL7.conf.NuGenProfileException e)
            {
                SupportClass.WriteStackTrace(e, Console.Error);
                System.Console.Out.WriteLine(e.InnerException);
                System.Console.Out.WriteLine("ProfileException: " + e.ToString());
            }
        }
 /// <summary>Adds a table of comments to a Conformance Message Class</summary>
 /// <param name="genClass">a GeneratedConformanceMessage
 /// </param>
 /// <param name="runtimeProfile">the runtimeProfile for which the comments are being added to
 /// </param>
 public void  decorateConformanceMessage(GeneratedConformanceMessage genClass, RuntimeProfile runtimeProfile)
 {
     genClass.addToClassComments("This class is the primary access class for the HL7 " + runtimeProfile.getHL7Version() + " " + runtimeProfile.Message.MsgType + " Conformance");
     genClass.addToClassComments("Class Set. This message has the following attributes:<br>");
     genClass.addToClassComments("<table>");
     genClass.addToClassComments("<tr><td>Message Type</td><td>" + runtimeProfile.Message.MsgType + "</td></tr>");
     genClass.addToClassComments("<tr><td>Event Type</td><td>" + runtimeProfile.Message.EventType + "</td></tr>");
     genClass.addToClassComments("<tr><td>HL7 Version</td><td>" + runtimeProfile.getHL7Version() + "</td></tr>");
     genClass.addToClassComments("</table><br><br>");
     genClass.addToClassComments("<b>Purpose</b><br>");
     genClass.addToClassComments(runtimeProfile.Message.EventDesc);
 }
        /// <summary>This method builds a Conformance Message Class</summary>
        /// <param name="runtimeProfile">the profile which to genrate Conformance Classes for
        /// </param>
        /// <param name="depManager">the DeploymentManager
        /// </param>
        public virtual void  buildClass(RuntimeProfile runtimeProfile, DeploymentManager depManager)
        {
            this.depManager     = depManager;
            this.runtimeProfile = runtimeProfile;
            this.msg            = runtimeProfile.Message;
            this.confMsg        = new GeneratedConformanceMessage();

            ProfileName profileName = new ProfileName(msg.MsgStructID, ProfileName.PS_MSG);

            String version = Regex.Replace(runtimeProfile.getHL7Version(), "\\.", "");

            System.String underlyingDataType = "Genetibase.NuGenHL7.model." + version + ".message." + msg.MsgStructID;

            ConformanceSegmentBuilder  confSegBuilder      = new ConformanceSegmentBuilder(packageName, version, depManager);
            ConformanceSegGroupBuilder confSegGroupBuilder = new ConformanceSegGroupBuilder(packageName, version, depManager, msg.MsgStructID);
            DocumentationBuilder       docBuilder          = DocumentationBuilder.getDocumentationBuilder();

            // Add class package and imports
            confMsg.ClassPackage = packageName;
            confMsg.addClassImport("Genetibase.NuGenHL7.conf.classes.abs.*");
            confMsg.addClassImport("Genetibase.NuGenHL7.conf.classes.exceptions.*");

            // Set class properties
            confMsg.Name       = profileName.ClassName;
            confMsg.Properties = "extends AbstractConformanceContainer";

            // Decorate the class with comments
            docBuilder.decorateConformanceMessage(confMsg, runtimeProfile);
            docBuilder.decorateConstructor(confMsg.Constructor, msg.MsgType);

            // add hapi message
            confMsg.addHAPIMessage(underlyingDataType);

            for (int i = 1; i <= msg.Children; i++)
            {
                //don't build not supported, backward, or unknown types
                System.String usage = msg.getChild(i).Usage;
                if (usage.Equals("X") || usage.Equals("B") || usage.Equals("U"))
                {
                    continue;
                }

                if (msg.getChild(i) is Seg)
                {
                    ProfileName childProfileName = profileName.newInstance(msg.getChild(i).Name, ProfileName.PS_SEG);

                    // Add the member variable vector to hold them
                    confMsg.addMemberVariable("private FiniteList " + childProfileName.MemberName + ";");
                    confMsg.Constructor.addToBody(childProfileName.MemberName + " = new FiniteList( " + childProfileName.ClassName + ".class, hapiMessage );");

                    UnderlyingAccessor childAccessor = new UnderlyingAccessor(underlyingDataType, childProfileName.AccessorName);
                    GeneratedRepGetter repGetter     = new GeneratedRepGetter(childProfileName, childAccessor.AcceptsRep);

                    docBuilder.decorateRepGetter(repGetter, (Seg)msg.getChild(i), childProfileName.AccessorName);

                    confMsg.addMethod(repGetter);
                    if (depManager.Verbose)
                    {
                        System.Console.Out.WriteLine("Generating Segment: " + packageName + "." + confMsg.Name);
                    }

                    confSegBuilder.buildClass((Seg)msg.getChild(i), underlyingDataType, childProfileName.clearNameMap());
                }
                else if (msg.getChild(i) is SegGroup)
                {
                    ProfileName childProfileName = profileName.newInstance(msg.getChild(i).Name, ProfileName.PS_SEGG);

                    // Add the member variable vector to hold them
                    confMsg.addMemberVariable("private FiniteList " + childProfileName.MemberName + ";");
                    confMsg.Constructor.addToBody(childProfileName.MemberName + " = new FiniteList( " + childProfileName.ClassName + ".class, hapiMessage );");

                    System.String      underlyingAccessorName = "get" + msg.MsgStructID + "_" + ConformanceSegGroupBuilder.generateSegGroupName((SegGroup)msg.getChild(i));
                    UnderlyingAccessor childAccessor          = new UnderlyingAccessor(underlyingDataType, underlyingAccessorName);
                    GeneratedRepGetter repGetter = new GeneratedRepGetter(childProfileName, childAccessor.AcceptsRep);

                    docBuilder.decorateRepGetter(repGetter, (SegGroup)msg.getChild(i), childProfileName.OriginalName);
                    confMsg.addMethod(repGetter);
                    if (depManager.Verbose)
                    {
                        System.Console.Out.WriteLine("Generating SegGroup: " + packageName + "." + confMsg.Name);
                    }

                    confSegGroupBuilder.buildClass((SegGroup)msg.getChild(i), underlyingDataType, childProfileName.clearNameMap());
                }
            }

            depManager.generateFile(confMsg, packageName, profileName.ClassName);
        }