package com.nortal.jroad.client.tosjuht;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.List;
import java.util.UUID;
import javax.activation.DataHandler;
import javax.annotation.Resource;
import org.apache.commons.lang.StringUtils;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlString;
import org.springframework.stereotype.Service;
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.client.service.configuration.DelegatingXRoadServiceConfiguration;
import com.nortal.jroad.client.service.configuration.XRoadServiceConfiguration;
import com.nortal.jroad.client.tosjuht.database.EpriaXRoadDatabase;
import com.nortal.jroad.client.tosjuht.model.ManusModel;
import com.nortal.jroad.client.tosjuht.types.ee.riik.xtee.epria.producers.producer.epria.BinaarfailNest;
import com.nortal.jroad.client.tosjuht.types.ee.riik.xtee.epria.producers.producer.epria.DhsSaadaTaotlusRequest;
import com.nortal.jroad.client.tosjuht.types.ee.riik.xtee.epria.producers.producer.epria.DhsVaataTaotluseDigiDokRequest;
import com.nortal.jroad.client.tosjuht.types.ee.riik.xtee.epria.producers.producer.epria.DhsVaataTaotluseDigiDokResponse;
import com.nortal.jroad.client.tosjuht.types.ee.riik.xtee.epria.producers.producer.epria.DhsVaataTaotluseManusRequest;
import com.nortal.jroad.client.tosjuht.types.ee.riik.xtee.epria.producers.producer.epria.DhsVaataTaotluseManusResponse;
import com.nortal.jroad.client.tosjuht.types.ee.riik.xtee.epria.producers.producer.epria.DhsVaataTaotlusePdfRequest;
import com.nortal.jroad.client.tosjuht.types.ee.riik.xtee.epria.producers.producer.epria.DhsVaataTaotlusePdfResponse;
import com.nortal.jroad.client.tosjuht.types.ee.riik.xtee.epria.producers.producer.epria.EpriaManusegaRequest;
import com.nortal.jroad.client.tosjuht.types.ee.riik.xtee.epria.producers.producer.epria.EpriaManusegaResponse;
import com.nortal.jroad.client.tosjuht.types.ee.riik.xtee.epria.producers.producer.epria.Manus;
import com.nortal.jroad.client.tosjuht.types.ee.riik.xtee.epria.producers.producer.epria.VastuseKood;
import com.nortal.jroad.jaxb.ByteArrayDataSource;
import com.nortal.jroad.model.XRoadAttachment;
import com.nortal.jroad.model.XRoadMessage;
import com.nortal.jroad.model.XmlBeansXRoadMessage;
/**
* @author Lauri Lättemäe
* @date 10.09.2010
*/
@Service("epriaXRoadService")
public class EpriaXRoadServiceImpl extends XRoadDatabaseService implements EpriaXRoadService {
@Resource
private EpriaXRoadDatabase epriaXRoadDatabase;
private <I, O> XRoadMessage<O> send(XRoadMessage<I> input,
String method,
String version,
final String idCode,
final String securityServer)
throws XRoadServiceConsumptionException {
final XRoadServiceConfiguration xroadConfiguration =
xRoadServiceConfigurationProvider.createConfiguration(getDatabase(), getDatabase(), method, version);
DelegatingXRoadServiceConfiguration configuration = new DelegatingXRoadServiceConfiguration(xroadConfiguration) {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public String getIdCode() {
return idCode != null ? idCode : super.getIdCode();
}
@Override
public String getSecurityServer() {
return securityServer != null ? securityServer : super.getSecurityServer();
}
};
XRoadMessage<O> result = getXRoadConsumer().sendRequest(input, configuration);
return result;
}
@Override
public String epria(String xml, String securityServer, String isikukood) throws XRoadServiceConsumptionException {
try {
XRoadMessage<XmlString> response = send(new XmlBeansXRoadMessage<XmlString>(XmlString.Factory.parse(xml)),
"epria",
"v1",
isikukood,
securityServer);
return ((XmlString) response.getContent()).xmlText();
} catch (XRoadServiceConsumptionException ex) {
throw ex;
} catch (XmlException ex) {
throw new XRoadServiceConsumptionException(new NonTechnicalFaultException("1", "P2ring eba6nnestus"),
"epria",
"epria",
"v1");
}
}
@Override
public String epriaParingManusega(String xml, String securityServer, String isikukood)
throws XRoadServiceConsumptionException {
try {
XRoadMessage<EpriaManusegaRequest> request =
new XmlBeansXRoadMessage<EpriaManusegaRequest>(EpriaManusegaRequest.Factory.newInstance());
BinaarfailNest xmlManus = request.getContent().addNewParingXml();
xmlManus.setAttachmentHandler(new DataHandler(new ByteArrayDataSource("text/xml", xml.getBytes("UTF-8"))));
XRoadMessage<EpriaManusegaResponse> response = send(request, "epriaManusega", "v1", isikukood, securityServer);
InputStream in = response.getContent().getVastusXml().getAttachmentHandler().getInputStream();
int read = 0;
byte[] bytes = new byte[1024];
ByteArrayOutputStream out = new ByteArrayOutputStream();
while ((read = in.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
out.flush();
in.close();
return new String(out.toByteArray(), "UTF-8");
} catch (XRoadServiceConsumptionException ex) {
ex.printStackTrace();
throw ex;
} catch (Exception ex) {
ex.printStackTrace();
throw new XRoadServiceConsumptionException(new NonTechnicalFaultException("1", "P2ring eba6nnestus"),
"epria",
"epriaParingManusega",
"v1");
}
}
@Override
public DhsVaataTaotluseDigiDokResponse vaataTaotluseDigiDok(String kandeNumber)
throws XRoadServiceConsumptionException {
return vaataTaotluseDigiDok(null, kandeNumber);
}
@Override
public DhsVaataTaotluseDigiDokResponse vaataTaotluseDigiDok(String securityServer, String kandeNumber)
throws XRoadServiceConsumptionException {
DhsVaataTaotluseDigiDokRequest request = DhsVaataTaotluseDigiDokRequest.Factory.newInstance();
request.setKandeNumber(kandeNumber);
DhsVaataTaotluseDigiDokResponse result = null;
if (StringUtils.isEmpty(securityServer)) {
result = epriaXRoadDatabase.dhsVaataTaotluseDigiDokV1(request);
} else {
result =
(DhsVaataTaotluseDigiDokResponse) send(new XmlBeansXRoadMessage<DhsVaataTaotluseDigiDokRequest>(request),
"dhsVaataTaotluseDigiDok",
"v1",
null,
securityServer).getContent();
}
return result;
}
@Override
public DhsVaataTaotlusePdfResponse vaataTaotlusePdf(String kandeNumber) throws XRoadServiceConsumptionException {
DhsVaataTaotlusePdfRequest request = DhsVaataTaotlusePdfRequest.Factory.newInstance();
request.setKandeNumber(kandeNumber);
return epriaXRoadDatabase.dhsVaataTaotlusePdfV1(request);
}
@Override
public DhsVaataTaotlusePdfResponse vaataTaotlusePdf(String securityServer, String kandeNumber)
throws XRoadServiceConsumptionException {
DhsVaataTaotlusePdfRequest request = DhsVaataTaotlusePdfRequest.Factory.newInstance();
request.setKandeNumber(kandeNumber);
DhsVaataTaotlusePdfResponse result = null;
if (StringUtils.isEmpty(securityServer)) {
result = epriaXRoadDatabase.dhsVaataTaotlusePdfV1(request);
} else {
result = (DhsVaataTaotlusePdfResponse) send(new XmlBeansXRoadMessage<DhsVaataTaotlusePdfRequest>(request),
"dhsVaataTaotlusePdf",
"v1",
null,
securityServer).getContent();
}
return result;
}
@Override
public DhsVaataTaotluseManusResponse vaataTatoluseManus(String kandeNumber,
String portaaliId,
String sisuFailId,
String vaataja,
Integer priaRoll)
throws XRoadServiceConsumptionException {
return vaataTatoluseManus(null, kandeNumber, portaaliId, sisuFailId, vaataja, priaRoll);
}
@Override
public DhsVaataTaotluseManusResponse vaataTatoluseManus(String securityServer,
String kandeNumber,
String portaaliId,
String sisuFailId,
String vaataja,
Integer priaRoll)
throws XRoadServiceConsumptionException {
DhsVaataTaotluseManusRequest request = DhsVaataTaotluseManusRequest.Factory.newInstance();
request.setKandeNumber(kandeNumber);
request.setManuseId(portaaliId != null ? portaaliId : "");
request.setSisuFailId(sisuFailId != null ? sisuFailId : "");
request.setVaataja(vaataja != null ? vaataja : "");
request.setPriaRoll(priaRoll != null ? priaRoll.toString() : "");
DhsVaataTaotluseManusResponse result = null;
if (StringUtils.isEmpty(securityServer)) {
result = epriaXRoadDatabase.dhsVaataTaotluseManusV1(request);
} else {
result = (DhsVaataTaotluseManusResponse) send(new XmlBeansXRoadMessage<DhsVaataTaotluseManusRequest>(request),
"dhsVaataTaotluseManus",
"v1",
null,
securityServer).getContent();
}
return result;
}
@Override
public VastuseKood saadaTaotlus(String kandeNumber, ManusModel digiDoc, ManusModel pdf, List<ManusModel> manused)
throws XRoadServiceConsumptionException {
return saadaTaotlus(null, kandeNumber, digiDoc, pdf, manused);
}
@Override
public VastuseKood saadaTaotlus(String securityServer,
String kandeNumber,
ManusModel digiDoc,
ManusModel pdf,
List<ManusModel> manused)
throws XRoadServiceConsumptionException {
XRoadMessage<DhsSaadaTaotlusRequest> request =
new XmlBeansXRoadMessage<DhsSaadaTaotlusRequest>(DhsSaadaTaotlusRequest.Factory.newInstance());
request.getContent().setKandeNumber(kandeNumber);
if (digiDoc != null) {
XRoadAttachment digiDocAttach = new XRoadAttachment(UUID.randomUUID().toString(), digiDoc.getSisu());
request.getAttachments().add(digiDocAttach);
Manus digiDocManus = request.getContent().addNewTaotluseDigiDoc();
digiDocManus.setManuseId(digiDoc.getPortaaliId());
digiDocManus.setManuseNimi(digiDoc.getNimi());
digiDocManus.addNewSisu().setAttachment("cid:" + digiDocAttach.getCid());
}
XRoadAttachment pdfAttach = new XRoadAttachment(UUID.randomUUID().toString(), pdf.getSisu());
request.getAttachments().add(pdfAttach);
Manus pdfManus = request.getContent().addNewTaotlusePdf();
pdfManus.setManuseId(pdf.getPortaaliId());
pdfManus.setManuseNimi(pdf.getNimi());
pdfManus.addNewSisu().setAttachment("cid:" + pdfAttach.getCid());
for (ManusModel manus : manused) {
XRoadAttachment attach = new XRoadAttachment(manus.getPortaaliId(), manus.getSisu());
request.getAttachments().add(attach);
Manus taotluseManus = request.getContent().addNewManus();
taotluseManus.setManuseId(manus.getPortaaliId());
taotluseManus.setManuseNimi(manus.getNimi());
taotluseManus.addNewSisu().setAttachment("cid:" + attach.getCid());
}
XRoadMessage<VastuseKood> response = null;
if (StringUtils.isBlank(securityServer)) {
response = send(request, "dhsSaadaTaotlus");
} else {
response = send(request, "dhsSaadaTaotlus", "v1", null, securityServer);
}
return response.getContent();
}
}