package com.nortal.jroad.client.digilugu;
import org.apache.xmlbeans.XmlException;
import org.springframework.stereotype.Service;
import com.nortal.jroad.client.digilugu.types.ee.riik.xtee.digilugu.producers.producer.digilugu.Hl7Paring;
import com.nortal.jroad.client.digilugu.types.ee.riik.xtee.digilugu.producers.producer.digilugu.Hl7Vastus;
import com.nortal.jroad.client.digilugu.types.hl7WErUTorgV3.RCMRIN000032UV01Document;
import com.nortal.jroad.client.digilugu.types.hl7_orgV3.RCMRIN000029UV01Document;
import com.nortal.jroad.client.digilugu.types.hl7_orgV3.RCMRIN000030UV01Document;
import com.nortal.jroad.client.digilugu.types.hl7_orgV3.RCMRIN000031UV01Document;
import com.nortal.jroad.client.exception.NonTechnicalFaultException;
import com.nortal.jroad.client.exception.XRoadServiceConsumptionException;
import com.nortal.jroad.client.service.XRoadDatabaseService;
import com.nortal.jroad.model.XRoadMessage;
import com.nortal.jroad.model.XmlBeansXRoadMessage;
/**
* <code>digilugu</code> database X-tee service implementation.
*
* @author Romet Piho
*/
@Service("digiluguXTeeService")
public class DigiluguXTeeServiceImpl extends XRoadDatabaseService implements DigiluguXTeeService {
private static final String XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
private static final String HL7 = "hl7";
private static final String V1 = "v1";
private final boolean useTestDatabase;
public DigiluguXTeeServiceImpl() {
this(false);
}
public DigiluguXTeeServiceImpl(boolean useTestDatabase) {
this.useTestDatabase = useTestDatabase;
}
@Override
public void init() {
super.init();
if (useTestDatabase) {
setDatabase("digilugu-arendus");
}
}
@Override
public RCMRIN000030UV01Document getHl7Document(RCMRIN000029UV01Document input) throws XRoadServiceConsumptionException {
XRoadMessage<Hl7Vastus> vastus = send(input.xmlText());
RCMRIN000030UV01Document document = null;
try {
document = RCMRIN000030UV01Document.Factory.parse(vastus.getContent().getHl7OutputMessage());
} catch (XmlException e) {
throw new XRoadServiceConsumptionException(new NonTechnicalFaultException(null, "Error parsing xml"),
getDatabase(),
HL7,
V1);
}
return document;
}
@Override
public RCMRIN000032UV01Document getHl7TSK(RCMRIN000031UV01Document input) throws XRoadServiceConsumptionException {
XRoadMessage<Hl7Vastus> vastus = send(input.xmlText());
RCMRIN000032UV01Document document = null;
try {
document = RCMRIN000032UV01Document.Factory.parse(vastus.getContent().getHl7OutputMessage());
} catch (XmlException e) {
throw new XRoadServiceConsumptionException(new NonTechnicalFaultException(null, "Error parsing xml"),
getDatabase(),
HL7,
V1);
}
return document;
}
private XRoadMessage<Hl7Vastus> send(String input) throws XRoadServiceConsumptionException {
Hl7Paring request = Hl7Paring.Factory.newInstance();
request.setHl7InputMessage(XML + input);
XRoadMessage<Hl7Vastus> vastus = send(new XmlBeansXRoadMessage<Hl7Paring>(request), HL7, V1);
return vastus;
}
}