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 package ca.uhn.hl7v2.validation;
27
28 import java.io.IOException;
29 import java.util.List;
30
31 import ca.uhn.hl7v2.AcknowledgmentCode;
32 import ca.uhn.hl7v2.HL7Exception;
33 import ca.uhn.hl7v2.HapiContext;
34 import ca.uhn.hl7v2.Severity;
35 import ca.uhn.hl7v2.model.Message;
36 import ca.uhn.hl7v2.model.Segment;
37 import ca.uhn.hl7v2.util.DeepCopy;
38
39
40
41
42
43
44
45
46
47
48
49
50 public class RespondingValidationExceptionHandler extends
51 CollectingValidationExceptionHandler<Message> implements
52 ValidationExceptionHandlerFactory<Message> {
53
54 private AcknowledgmentCode successAcknowledgementCode = AcknowledgmentCode.AA;
55 private AcknowledgmentCode errorAcknowledgementCode = AcknowledgmentCode.AE;
56
57
58
59
60 public RespondingValidationExceptionHandler(HapiContext context) {
61 super(context);
62 }
63
64
65
66
67
68
69
70
71
72
73 public final Message result() throws HL7Exception {
74 Object validationSubject = getValidationSubject();
75 if (validationSubject == null) {
76 throw new HL7Exception("Need non-null validation subject");
77 }
78 Message response = generateResponseMessage(validationSubject);
79 populateResponseMessage(response);
80 return response;
81 }
82
83
84
85
86
87
88 public void setSuccessAcknowledgementCode(AcknowledgmentCode successAcknowledgementCode) {
89 this.successAcknowledgementCode = successAcknowledgementCode;
90 }
91
92
93
94
95
96
97 public void setErrorAcknowledgementCode(AcknowledgmentCode errorAcknowledgementCode) {
98 this.errorAcknowledgementCode = errorAcknowledgementCode;
99 }
100
101
102
103
104 public AcknowledgmentCode getSuccessAcknowledgementCode() {
105 return successAcknowledgementCode;
106 }
107
108
109
110
111 public AcknowledgmentCode getErrorAcknowledgementCode() {
112 return errorAcknowledgementCode;
113 }
114
115
116
117
118
119
120
121
122
123
124 protected Message generateResponseMessage(Object request) throws HL7Exception {
125 try {
126 Message in;
127 if (request instanceof String) {
128 Segment s = getHapiContext().getGenericParser().getCriticalResponseData(
129 (String)request);
130 in = s.getMessage();
131 DeepCopy.copy(s, (Segment) in.get("MSH"));
132 } else if (request instanceof Message) {
133 in = (Message) request;
134 } else {
135 throw new HL7Exception("Validated message must be either Message or String");
136 }
137 return in.generateACK(getSuccessAcknowledgementCode(), null);
138
139 } catch (IOException e) {
140 throw new HL7Exception(e);
141 }
142 }
143
144
145
146
147
148
149
150
151
152 protected void populateResponseMessage(Message response) throws HL7Exception {
153 if (response == null)
154 return;
155 List<ValidationException> exceptions = getExceptions();
156 for (int i = 0; i < exceptions.size(); i++) {
157 ValidationException ve = exceptions.get(i);
158
159 if (ve.getSeverity() == Severity.ERROR) {
160 ve.populateResponse(response, getErrorAcknowledgementCode(), i);
161 }
162 }
163 }
164
165 public ValidationExceptionHandler<Message> getNewInstance(HapiContext context) {
166 RespondingValidationExceptionHandlerr.html#RespondingValidationExceptionHandler">RespondingValidationExceptionHandler handler = new RespondingValidationExceptionHandler(context);
167 handler.setErrorAcknowledgementCode(getErrorAcknowledgementCode());
168 handler.setSuccessAcknowledgementCode(getSuccessAcknowledgementCode());
169 handler.setMinimumSeverityToCollect(getMinimumSeverityToCollect());
170 return handler;
171 }
172
173 }