1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31   
32  package ca.uhn.hl7v2.conf.classes.generator.builders;
33  
34  import ca.uhn.hl7v2.conf.spec.message.*;
35  import ca.uhn.hl7v2.conf.spec.*;
36  import ca.uhn.hl7v2.conf.classes.generator.genclasses.*;
37  
38  
39  
40  
41  
42  
43  
44  
45  public class ConformanceMessageBuilder {
46     private GeneratedConformanceMessage confMsg;
47     private StaticDef msg;
48     private final String packageName;
49  
50     
51  
52  
53     public ConformanceMessageBuilder(String packageName) {
54        this.packageName = packageName;
55     }
56  
57     
58  
59  
60  
61     public void buildClass(RuntimeProfile runtimeProfile, DeploymentManager depManager){
62        this.msg = runtimeProfile.getMessage();
63        this.confMsg = new GeneratedConformanceMessage();
64           
65        ProfileNameerator/builders/ProfileName.html#ProfileName">ProfileName profileName = new ProfileName(msg.getMsgStructID(), ProfileName.PS_MSG);
66  
67        String version = "v" + runtimeProfile.getHL7Version().replaceAll("\\.", "");
68        String underlyingDataType = "ca.uhn.hl7v2.model." + version + ".message." + msg.getMsgStructID();
69  
70        ConformanceSegmentBuilderonformanceSegmentBuilder.html#ConformanceSegmentBuilder">ConformanceSegmentBuilder confSegBuilder = new ConformanceSegmentBuilder(packageName, version, depManager);
71        ConformanceSegGroupBuilderanceSegGroupBuilder.html#ConformanceSegGroupBuilder">ConformanceSegGroupBuilder confSegGroupBuilder = new ConformanceSegGroupBuilder(packageName, version, depManager, msg.getMsgStructID());
72        DocumentationBuilder docBuilder = DocumentationBuilder.getDocumentationBuilder();
73  
74        
75        confMsg.setClassPackage(packageName);
76        confMsg.addClassImport("ca.uhn.hl7v2.conf.classes.abs.*");
77        confMsg.addClassImport("ca.uhn.hl7v2.conf.classes.exceptions.*");
78  
79        
80        confMsg.setName(profileName.getClassName());
81        confMsg.setProperties("extends AbstractConformanceContainer");
82  
83        
84        docBuilder.decorateConformanceMessage(confMsg, runtimeProfile);
85        docBuilder.decorateConstructor( confMsg.getConstructor(), msg.getMsgType() );
86  
87        
88        confMsg.addHAPIMessage(underlyingDataType);
89  
90        for (int i = 1; i <= msg.getChildren(); i++) {
91  		 
92  		 String usage = msg.getChild(i).getUsage();
93  		 if( usage.equals("X") || usage.equals("B") || usage.equals("U") )
94  			continue;
95  			
96           if (msg.getChild(i) instanceof Seg) {
97              ProfileName childProfileName = profileName.newInstance(msg.getChild(i).getName(), ProfileName.PS_SEG);
98  
99              
100             confMsg.addMemberVariable("private FiniteList " + childProfileName.getMemberName() + ";");
101             confMsg.getConstructor().addToBody(childProfileName.getMemberName() + " = new FiniteList( " + childProfileName.getClassName() + ".class, hapiMessage );");
102 
103 				UnderlyingAccessor childAccessor = new UnderlyingAccessor(underlyingDataType, childProfileName.getAccessorName());
104             GeneratedRepGetterr/genclasses/GeneratedRepGetter.html#GeneratedRepGetter">GeneratedRepGetter repGetter = new GeneratedRepGetter(childProfileName, childAccessor.getAcceptsRep());
105 
106             docBuilder.decorateRepGetter(repGetter, msg.getChild(i), childProfileName.getAccessorName());
107 
108             confMsg.addMethod(repGetter);
109             if (depManager.getVerbose())
110                System.out.println("Generating Segment: " + packageName + "." + confMsg.getName());
111 
112             confSegBuilder.buildClass((Seg) msg.getChild(i), underlyingDataType, childProfileName.clearNameMap());
113 
114          } else if (msg.getChild(i) instanceof SegGroup) {
115                ProfileName childProfileName = profileName.newInstance(msg.getChild(i).getName(), ProfileName.PS_SEGG);
116 
117                
118                confMsg.addMemberVariable("private FiniteList " + childProfileName.getMemberName() + ";");
119                confMsg.getConstructor().addToBody(childProfileName.getMemberName() + " = new FiniteList( " + childProfileName.getClassName() + ".class, hapiMessage );");
120 
121 					String underlyingAccessorName = "get" + msg.getMsgStructID() + "_" + ConformanceSegGroupBuilder.generateSegGroupName((SegGroup)msg.getChild(i));
122 					UnderlyingAccessor childAccessor = new UnderlyingAccessor(underlyingDataType, underlyingAccessorName);
123                GeneratedRepGetterr/genclasses/GeneratedRepGetter.html#GeneratedRepGetter">GeneratedRepGetter repGetter = new GeneratedRepGetter(childProfileName, childAccessor.getAcceptsRep());
124 
125                docBuilder.decorateRepGetter(repGetter, msg.getChild(i), childProfileName.getOriginalName());
126                confMsg.addMethod(repGetter);
127                if (depManager.getVerbose())
128                   System.out.println("Generating SegGroup: " + packageName + "." + confMsg.getName());
129 
130                confSegGroupBuilder.buildClass((SegGroup) msg.getChild(i), underlyingDataType, childProfileName.clearNameMap());
131             }
132 
133       }
134 
135       depManager.generateFile(confMsg, packageName, profileName.getClassName());
136    }
137 }