public void Compile() { // Already processing? if (interactionModel == null || processingStack.Contains(interactionModel.PackageLocation.ToString(MifCompiler.NAME_FORMAT))) return; // Add to the processing stack processingStack.Add(interactionModel.PackageLocation.ToString(MifCompiler.NAME_FORMAT)); // Otput the name of the package. System.Diagnostics.Trace.WriteLine(string.Format("Compiling interaction model package '{0}'...", interactionModel.PackageLocation.ToString(MifCompiler.NAME_FORMAT)), "debug"); // Check if the package has already been "compiled" if (ClassRepository.ContainsKey(interactionModel.PackageLocation.ToString(MifCompiler.NAME_FORMAT))) return; // Already compiled // Process the interaction MohawkCollege.EHR.gpmr.COR.Interaction interaction = new MohawkCollege.EHR.gpmr.COR.Interaction(); interaction.Name = interactionModel.PackageLocation.ToString(MifCompiler.NAME_FORMAT); //interaction.Realm = interactionModel.PackageLocation.Realm; // Process business names foreach (BusinessName bn in interactionModel.BusinessName ?? new List<BusinessName>()) if (bn.Language == MifCompiler.Language || bn.Language == null) interaction.BusinessName = bn.Name; // Process documentation if(interactionModel.Annotations != null) interaction.Documentation = DocumentationParser.Parse(interactionModel.Annotations.Documentation); // Set the derivation from pointer interaction.DerivedFrom = interactionModel; // Trigger event interaction.TriggerEvent = interactionModel.InvokingTriggerEvent.ToString(MifCompiler.NAME_FORMAT); // Types TypeReference tr = new TypeReference(); // Has the entry class been created yet? if (!ClassRepository.ContainsKey(interactionModel.ArgumentMessage.ToString(MifCompiler.NAME_FORMAT))) // Process PackageParser.Parse(interactionModel.ArgumentMessage.ToString(MifCompiler.NAME_FORMAT), repository, ClassRepository); var entry = (ClassRepository[interactionModel.ArgumentMessage.ToString(MifCompiler.NAME_FORMAT)] as MohawkCollege.EHR.gpmr.COR.SubSystem); // Could we even find the model? if (entry == null) { System.Diagnostics.Trace.WriteLine(string.Format("Could not find the argument message '{0}', interaction '{1}' can't be processed", interactionModel.ArgumentMessage.ToString(MifCompiler.NAME_FORMAT), interaction.Name), "error"); return; } else if (entry.EntryPoint.Count == 0) { System.Diagnostics.Trace.WriteLine(string.Format("Argument message '{0}' must have an entry point, interaction '{1}' can't be processed", entry.Name, interaction.Name), "error"); return; } else if (entry.EntryPoint.Count != 1) { System.Diagnostics.Trace.WriteLine(string.Format("Ambiguous entry point for argument message '{0}', interaction '{1}' can't be processed", entry.Name, interaction.Name), "error"); return; } // Set the entry class tr = entry.EntryPoint[0].CreateTypeReference(); tr.MemberOf = ClassRepository; // Set member of property ProcessTypeParameters(interactionModel.ArgumentMessage.ParameterModel, tr, interaction); interaction.MessageType = tr; #region Response types if (interactionModel.ReceiverResponsibilities != null) { // Create the array interaction.Responses = new List<MohawkCollege.EHR.gpmr.COR.Interaction>(); // Iterate through foreach (ReceiverResponsibility rr in interactionModel.ReceiverResponsibilities) { if (rr.InvokeInteraction == null) { System.Diagnostics.Trace.WriteLine("Invoking interaction on receiver responsibility is missing", "warn"); continue; } // Does the receiver responsibility exist in the class repository if (!ClassRepository.ContainsKey(rr.InvokeInteraction.ToString(MifCompiler.NAME_FORMAT))) { InteractionCompiler icc = new InteractionCompiler(); icc.PackageRepository = repository; icc.Package = repository.Find(o => o.PackageLocation.ToString(MifCompiler.NAME_FORMAT) == rr.InvokeInteraction.ToString(MifCompiler.NAME_FORMAT)); icc.ClassRepository = ClassRepository; icc.Compile(); } MohawkCollege.EHR.gpmr.COR.Feature foundFeature = null; if (ClassRepository.TryGetValue(rr.InvokeInteraction.ToString(MifCompiler.NAME_FORMAT), out foundFeature)) { // Reason element for documentation if (rr.Reason != null && (rr.Reason.Language == MifCompiler.Language || rr.Reason.Language == null) && (rr.Reason.MarkupElements != null || rr.Reason.MarkupText != null)) { MohawkCollege.EHR.gpmr.COR.Documentation.TitledDocumentation td= new MohawkCollege.EHR.gpmr.COR.Documentation.TitledDocumentation() { Title = "Reason", Name = "Reason", Text = new List<string>() }; if (rr.Reason.MarkupText != null) td.Text.Add(rr.Reason.MarkupText); if(rr.Reason.MarkupElements != null) foreach(XmlElement xe in rr.Reason.MarkupElements) td.Text.Add(xe.OuterXml.Replace(" xmlns:html=\"http://www.w3.org/1999/xhtml\"", "").Replace("html:", "")); // Append the documentation if (interaction.Documentation == null) interaction.Documentation = new MohawkCollege.EHR.gpmr.COR.Documentation(); if (interaction.Documentation.Other == null) interaction.Documentation.Other = new List<MohawkCollege.EHR.gpmr.COR.Documentation.TitledDocumentation>(); interaction.Documentation.Other.Add(td); } interaction.Responses.Add(foundFeature as MohawkCollege.EHR.gpmr.COR.Interaction); } else System.Diagnostics.Trace.WriteLine(String.Format("Can't find response interaction '{0}'...", rr.InvokeInteraction.ToString(MifCompiler.NAME_FORMAT)), "warn"); } } #endregion // Fire the complete method interaction.FireParsed(); }
public void Compile() { // Already processing? if (interactionModel == null || processingStack.Contains(interactionModel.PackageLocation.ToString(MifCompiler.NAME_FORMAT))) { return; } // Add to the processing stack processingStack.Add(interactionModel.PackageLocation.ToString(MifCompiler.NAME_FORMAT)); // Otput the name of the package. System.Diagnostics.Trace.WriteLine(string.Format("Compiling interaction model package '{0}'...", interactionModel.PackageLocation.ToString(MifCompiler.NAME_FORMAT)), "debug"); // Check if the package has already been "compiled" if (ClassRepository.ContainsKey(interactionModel.PackageLocation.ToString(MifCompiler.NAME_FORMAT))) { return; // Already compiled } // Process the interaction MohawkCollege.EHR.gpmr.COR.Interaction interaction = new MohawkCollege.EHR.gpmr.COR.Interaction(); interaction.Name = interactionModel.PackageLocation.ToString(MifCompiler.NAME_FORMAT); //interaction.Realm = interactionModel.PackageLocation.Realm; // Process business names foreach (BusinessName bn in interactionModel.BusinessName ?? new List <BusinessName>()) { if (bn.Language == MifCompiler.Language || bn.Language == null) { interaction.BusinessName = bn.Name; } } // Process documentation if (interactionModel.Annotations != null) { interaction.Documentation = DocumentationParser.Parse(interactionModel.Annotations.Documentation); } // Set the derivation from pointer interaction.DerivedFrom = interactionModel; // Trigger event interaction.TriggerEvent = interactionModel.InvokingTriggerEvent.ToString(MifCompiler.NAME_FORMAT); // Types TypeReference tr = new TypeReference(); // Has the entry class been created yet? if (!ClassRepository.ContainsKey(interactionModel.ArgumentMessage.ToString(MifCompiler.NAME_FORMAT))) { // Process PackageParser.Parse(interactionModel.ArgumentMessage.ToString(MifCompiler.NAME_FORMAT), repository, ClassRepository); } var entry = (ClassRepository[interactionModel.ArgumentMessage.ToString(MifCompiler.NAME_FORMAT)] as MohawkCollege.EHR.gpmr.COR.SubSystem); // Could we even find the model? if (entry == null) { System.Diagnostics.Trace.WriteLine(string.Format("Could not find the argument message '{0}', interaction '{1}' can't be processed", interactionModel.ArgumentMessage.ToString(MifCompiler.NAME_FORMAT), interaction.Name), "error"); return; } else if (entry.EntryPoint.Count == 0) { System.Diagnostics.Trace.WriteLine(string.Format("Argument message '{0}' must have an entry point, interaction '{1}' can't be processed", entry.Name, interaction.Name), "error"); return; } else if (entry.EntryPoint.Count != 1) { System.Diagnostics.Trace.WriteLine(string.Format("Ambiguous entry point for argument message '{0}', interaction '{1}' can't be processed", entry.Name, interaction.Name), "error"); return; } // Set the entry class tr = entry.EntryPoint[0].CreateTypeReference(); tr.MemberOf = ClassRepository; // Set member of property ProcessTypeParameters(interactionModel.ArgumentMessage.ParameterModel, tr, interaction); interaction.MessageType = tr; #region Response types if (interactionModel.ReceiverResponsibilities != null) { // Create the array interaction.Responses = new List <MohawkCollege.EHR.gpmr.COR.Interaction>(); // Iterate through foreach (ReceiverResponsibility rr in interactionModel.ReceiverResponsibilities) { if (rr.InvokeInteraction == null) { System.Diagnostics.Trace.WriteLine("Invoking interaction on receiver responsibility is missing", "warn"); continue; } // Does the receiver responsibility exist in the class repository if (!ClassRepository.ContainsKey(rr.InvokeInteraction.ToString(MifCompiler.NAME_FORMAT))) { InteractionCompiler icc = new InteractionCompiler(); icc.PackageRepository = repository; icc.Package = repository.Find(o => o.PackageLocation.ToString(MifCompiler.NAME_FORMAT) == rr.InvokeInteraction.ToString(MifCompiler.NAME_FORMAT)); icc.ClassRepository = ClassRepository; icc.Compile(); } MohawkCollege.EHR.gpmr.COR.Feature foundFeature = null; if (ClassRepository.TryGetValue(rr.InvokeInteraction.ToString(MifCompiler.NAME_FORMAT), out foundFeature)) { // Reason element for documentation if (rr.Reason != null && (rr.Reason.Language == MifCompiler.Language || rr.Reason.Language == null) && (rr.Reason.MarkupElements != null || rr.Reason.MarkupText != null)) { MohawkCollege.EHR.gpmr.COR.Documentation.TitledDocumentation td = new MohawkCollege.EHR.gpmr.COR.Documentation.TitledDocumentation() { Title = "Reason", Name = "Reason", Text = new List <string>() }; if (rr.Reason.MarkupText != null) { td.Text.Add(rr.Reason.MarkupText); } if (rr.Reason.MarkupElements != null) { foreach (XmlElement xe in rr.Reason.MarkupElements) { td.Text.Add(xe.OuterXml.Replace(" xmlns:html=\"http://www.w3.org/1999/xhtml\"", "").Replace("html:", "")); } } // Append the documentation if (interaction.Documentation == null) { interaction.Documentation = new MohawkCollege.EHR.gpmr.COR.Documentation(); } if (interaction.Documentation.Other == null) { interaction.Documentation.Other = new List <MohawkCollege.EHR.gpmr.COR.Documentation.TitledDocumentation>(); } interaction.Documentation.Other.Add(td); } interaction.Responses.Add(foundFeature as MohawkCollege.EHR.gpmr.COR.Interaction); } else { System.Diagnostics.Trace.WriteLine(String.Format("Can't find response interaction '{0}'...", rr.InvokeInteraction.ToString(MifCompiler.NAME_FORMAT)), "warn"); } } } #endregion // Fire the complete method interaction.FireParsed(); }