/// <seealso cref="Validator.validate"> /// </seealso> public virtual NuGenHL7Exception[] validate(Message message, StaticDef profile) { System.Collections.ArrayList exList = new System.Collections.ArrayList(20); Terser t = new Terser(message); //check msg type, event type, msg struct ID System.String msgType = t.get_Renamed("/MSH-9-1"); if (!msgType.Equals(profile.MsgType)) { NuGenHL7Exception e = new NuGenProfileNotFollowedException("Message type " + msgType + " doesn't match profile type of " + profile.MsgType); exList.Add(e); } System.String evType = t.get_Renamed("/MSH-9-2"); if (!evType.Equals(profile.EventType) && !profile.EventType.ToUpper().Equals("ALL".ToUpper())) { NuGenHL7Exception e = new NuGenProfileNotFollowedException("Event type " + evType + " doesn't match profile type of " + profile.EventType); exList.Add(e); } System.String msgStruct = t.get_Renamed("/MSH-9-3"); if (msgStruct == null || !msgStruct.Equals(profile.MsgStructID)) { NuGenHL7Exception e = new NuGenProfileNotFollowedException("Message structure " + msgStruct + " doesn't match profile type of " + profile.MsgStructID); exList.Add(e); } System.Exception[] childExceptions; childExceptions = testGroup(message, profile, profile.Identifier); for (int i = 0; i < childExceptions.Length; i++) { exList.Add(childExceptions[i]); } return(toArray(exList)); }
/// <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); }