package com.nortal.jroad.client.rr;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.apache.commons.lang.StringUtils;
import org.apache.xmlbeans.XmlString;
import org.springframework.stereotype.Service;
import com.nortal.jroad.client.exception.XRoadServiceConsumptionException;
import com.nortal.jroad.client.rr.database.RrXRoadDatabase;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.DokumendiTyyp;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.IsikuStaatus;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR40Request;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR40Response;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR41Request;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR41RequestV1;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR41ResponseV1;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR42Request;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR42Response;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR43Request;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR43Response;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR52Request;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR52Response;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR63RequestV1;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR63ResponseV1;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR67Request;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR67Response;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR72Request;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR81Request;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR81RequestV1;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR81Response;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR81ResponseV1;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR84Request;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR84Response;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR96RequestV1;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR96ResponseV1;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RRExtDocumentDataRequest;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RRExtDocumentDataResponse;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR67Response.TtKoodid;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RR72Response.TtIsikud;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RRPORTTEOVOIMERequest;
import com.nortal.jroad.client.rr.types.ee.riik.xtee.rr.producers.producer.rr.RRPORTTEOVOIMEResponse;
import com.nortal.jroad.client.util.XmlBeansUtil;
/**
* @author Roman Tekhov
*/
@Service("rrXTeeService")
public class RrXTeeServiceImpl implements RrXTeeService {
@Resource
private RrXRoadDatabase rrXRoadDatabase;
public RR42Response findRR42isikAadressKood(RR42RequestCallback callback)
throws XRoadServiceConsumptionException {
RR42Request paring = RR42Request.Factory.newInstance();
callback.populate(paring);
return rrXRoadDatabase.rr42IsikAadressKoodV1(paring);
}
public RR40Response findRR40isikTaielikIsikukood(String isikukood)
throws XRoadServiceConsumptionException {
RR40Request paring = RR40Request.Factory.newInstance();
XmlString isikukoodElement = XmlBeansUtil
.getAttributedXmlString(isikukood);
paring.xsetIsikukood(isikukoodElement);
return rrXRoadDatabase.rr40IsikTaielikIsikukoodV1(paring);
}
public List<TtIsikud.Item> findRR72Isik(String... idCodes)
throws XRoadServiceConsumptionException {
RR72Request request = RR72Request.Factory.newInstance();
String isikukoodid = StringUtils.join(idCodes, ",");
XmlString isikukoodidElement = XmlBeansUtil
.getAttributedXmlString(isikukoodid);
request.xsetCIsikukoodid(isikukoodidElement);
TtIsikud ttIsikud = rrXRoadDatabase.rr72IsikV1(request).getTtIsikud();
return ttIsikud != null ? ttIsikud.getItemList()
: new ArrayList<TtIsikud.Item>(0);
}
public RR63ResponseV1 findRR63IsikAadrDok(String surname, String firstName,
String idCode, String birthDate)
throws XRoadServiceConsumptionException {
RR63RequestV1 request = RR63RequestV1.Factory.newInstance();
XmlString eesnimiElement = XmlBeansUtil
.getAttributedXmlString(firstName);
request.xsetIsikueesnimi(eesnimiElement);
XmlString perenimiElement = XmlBeansUtil
.getAttributedXmlString(surname);
request.xsetIsikuperenimi(perenimiElement);
XmlString isikukoodElement = XmlBeansUtil
.getAttributedXmlString(idCode);
request.xsetIsikukood(isikukoodElement);
XmlString synnikpElement = XmlBeansUtil
.getAttributedXmlString(birthDate);
request.xsetIsikuSynnikuupaev(synnikpElement);
return rrXRoadDatabase.rr63IsikAadrDokV1V1(request);
}
public RR81Response getRR81KMAisikkontroll(String idCode)
throws XRoadServiceConsumptionException {
RR81Request request = RR81Request.Factory.newInstance();
XmlString isikukoodElement = XmlBeansUtil
.getAttributedXmlString(idCode);
request.xsetIsikukood(isikukoodElement);
return rrXRoadDatabase.rr81KMAisikkontrollV1(request);
}
public RR81ResponseV1 getRR81KMAisikkontrollv1(String idCode)
throws XRoadServiceConsumptionException {
RR81RequestV1 request = RR81RequestV1.Factory.newInstance();
XmlString isikukoodElement = XmlBeansUtil
.getAttributedXmlString(idCode);
request.xsetIsikukood(isikukoodElement);
return rrXRoadDatabase.rr81KMAisikkontrollV1V1(request);
}
public RR52Response getRR52(String idCode, String forename, String surname)
throws XRoadServiceConsumptionException {
RR52Request request = RR52Request.Factory.newInstance();
XmlString isikukoodElement = XmlBeansUtil
.getAttributedXmlString(idCode);
request.xsetIsikukood(isikukoodElement);
XmlString forenameElement = XmlBeansUtil
.getAttributedXmlString(forename);
request.xsetIsikueesnimi(forenameElement);
XmlString surnameElement = XmlBeansUtil.getAttributedXmlString(surname);
request.xsetIsikuperenimi(surnameElement);
return rrXRoadDatabase.rr52V1(request);
}
public RR43Response getRR43dokument(final String dokumendiKood,
final String dokumendiSeeria, DokumendiTyyp.Enum dokumendiTyyp)
throws XRoadServiceConsumptionException {
RR43Request request = RR43Request.Factory.newInstance();
request.setDokumendiKood(dokumendiKood);
request.setDokumendiSeeria(dokumendiSeeria);
request.setDokumendiTyyp(dokumendiTyyp);
return rrXRoadDatabase.rr43DokumentV1(request);
}
public RR96ResponseV1 getRR96isikDokElukSuhe(final String isikueesnimi,
final String isikuperenimi, final String isikukood,
final Long vastusteArv) throws XRoadServiceConsumptionException {
RR96RequestV1 request = RR96RequestV1.Factory.newInstance();
request.setIsikueesnimi(isikueesnimi);
request.setIsikuperenimi(isikuperenimi);
request.setIsikukood(isikukood);
request.setVastusteArv(String.valueOf(vastusteArv));
return rrXRoadDatabase.rr96IsikDokElukSuheV1V1(request);
}
public RRExtDocumentDataResponse sendRRExtDocumentDataArkLuba(
RRExtDocumentDataRequest request)
throws XRoadServiceConsumptionException {
return rrXRoadDatabase.rrExtDocumentDataArkLubaV1(request);
}
public List<TtKoodid.Item> findRR67MuutusV1(Date algus, Date lopp,
String... koodid) throws XRoadServiceConsumptionException {
RR67Request request = RR67Request.Factory.newInstance();
SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy");
SimpleDateFormat tf = new SimpleDateFormat("HH:mm");
if (koodid != null) {
String codes = "";
for (String item : koodid) {
codes += codes.length() > 0 ? "," : "";
codes += item;
}
request.setCMuutused(codes);
}
if (algus != null) {
request.setCAlgKpv(df.format(algus));
request.setCAlgKell(tf.format(algus));
}
if (lopp != null) {
request.setCLoppKpv(df.format(lopp));
request.setCLoppKell(tf.format(lopp));
}
RR67Response rsp = rrXRoadDatabase.rr67MuutusV1(request);
return rsp.getTtKoodid() != null ? rsp.getTtKoodid().getItemList()
: new ArrayList<TtKoodid.Item>();
}
public RR84Response findRR84IsikuSeosed(String isikukood)
throws XRoadServiceConsumptionException {
RR84Request request = RR84Request.Factory.newInstance();
request.setIsikukood(isikukood);
return rrXRoadDatabase.rr84IsikuSeosedV1(request);
}
public RR41ResponseV1 findRR41isikPohiandmedV1(String perenimi, String eesnimi, String isikukood,
String vald, IsikuStaatus staatus, Long vastusteArv)
throws XRoadServiceConsumptionException {
RR41RequestV1 request = RR41RequestV1.Factory.newInstance();
request.setIsikuperenimi(perenimi);
request.setIsikueesnimi(eesnimi);
request.setIsikukood(isikukood);
request.setVald(vald);
request.xsetStaatus(staatus);
request.setMitu(String.valueOf(vastusteArv));
return rrXRoadDatabase.rr41IsikPohiandmedV1V1(request);
}
public RRPORTTEOVOIMEResponse getRRPortTeovoimeV1(String isikukood)
throws XRoadServiceConsumptionException {
RRPORTTEOVOIMERequest request = RRPORTTEOVOIMERequest.Factory.newInstance();
request.setIsikukood(isikukood);
return rrXRoadDatabase.rrportteovoimeV1(request);
}
}