package com.nortal.jroad.client.kirst;
import com.nortal.jroad.client.exception.NonTechnicalFaultException;
import com.nortal.jroad.client.exception.XRoadServiceConsumptionException;
import com.nortal.jroad.client.kirst.types.ee.x_road.kirst.producer.*;
import com.nortal.jroad.client.service.XRoadDatabaseService;
import com.nortal.jroad.model.XRoadMessage;
import com.nortal.jroad.model.XmlBeansXRoadMessage;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Calendar;
import java.util.Date;
import java.util.Set;
/**
* @author Roman Tekhov
*/
@Service("kirstXTeeService")
public class KirstXTeeServiceImpl extends XRoadDatabaseService implements KirstXTeeService {
public TvlLoetelu2ResponseType findTvlLoetelu2V1(Set<String> isikukoodid, Date alates, Date kuni) throws XRoadServiceConsumptionException {
if (CollectionUtils.isEmpty(isikukoodid)) {
throw new IllegalArgumentException("At least one 'isikukood' must be provided");
}
TvlLoetelu2RequestType request = createTvlLoetelu2V1Request(isikukoodid, alates, kuni);
XRoadMessage<XmlObject> response = send(new XmlBeansXRoadMessage<TvlLoetelu2RequestType>(request), "tvl_loetelu2", "v1");
try {
return TvlLoetelu2ResponseType.Factory.parse(response.getContent().xmlText());
} catch (XmlException e) {
throw new XRoadServiceConsumptionException(new NonTechnicalFaultException("", "Unable to parse response"), "kirst", "tvl_loetelu2", "v1");
}
}
private TvlLoetelu2RequestType createTvlLoetelu2V1Request(Set<String> isikukoodid, Date alates, Date kuni) {
TvlLoetelu2RequestType request = TvlLoetelu2RequestType.Factory.newInstance();
TvlOtsingType isikud = request.addNewIsikud();
int count = 0;
TvlOtsingItemType[] items = new TvlOtsingItemType[isikukoodid.size()];
for (String isikukood : isikukoodid) {
TvlOtsingItemType item = TvlOtsingItemType.Factory.newInstance();
item.setTvpAlates(toCalendar(alates));
item.setTvpKuni(toCalendar(kuni));
item.setIsikukood(isikukood);
items[count++] = item;
}
isikud.setItemArray(items);
return request;
}
private Calendar toCalendar(Date date) {
if (date == null) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal;
}
}