package com.nortal.jroad.client.pkr; import java.io.IOException; import java.util.Calendar; import java.util.Date; import javax.xml.transform.TransformerException; import com.nortal.jroad.client.pkr.types.ee.riik.xtee.pkr.producers.producer.pkr.*; import org.springframework.ws.WebServiceMessage; import com.nortal.jroad.client.exception.XRoadServiceConsumptionException; import com.nortal.jroad.client.pkr.types.ee.riik.xtee.pkr.producers.producer.pkr.Tkis1Paring; import com.nortal.jroad.client.pkr.types.ee.riik.xtee.pkr.producers.producer.pkr.Tkis1Vastus; import com.nortal.jroad.client.pkr.types.ee.riik.xtee.pkr.producers.producer.pkr.TtaPensionToetusParing; import com.nortal.jroad.client.pkr.types.ee.riik.xtee.pkr.producers.producer.pkr.TtaPensionToetusVastus; import com.nortal.jroad.client.service.XRoadDatabaseService; import com.nortal.jroad.client.service.callback.CustomCallback; import com.nortal.jroad.client.service.extractor.CustomExtractor; import com.nortal.jroad.model.XRoadMessage; import com.nortal.jroad.model.XmlBeansXRoadMessage; import com.nortal.jroad.util.SOAPUtil; /** * <code>PKR</code> or <code>TPKR</code> X-tee service<br> * This implementation make test or production request. Generated test and production message are the same, except * namespace NS5 that will replaces to test or production * * @author Margus Hanni */ public class PkrXTeeServiceImpl extends XRoadDatabaseService implements PkrXTeeService { private static final String TEST_DATABASE = "tpkr"; private static final String PENSION_TOETUS = "tta_pension_toetus"; private static final String TKIS1 = "tkis1"; private static final String TKIS2 = "tkis2"; private final boolean useTestDatabase; public PkrXTeeServiceImpl() { this(false); } public PkrXTeeServiceImpl(boolean useTestDatabase) { this.useTestDatabase = useTestDatabase; } public TtaPensionToetusVastus getPensionToetus(String isikukood) throws XRoadServiceConsumptionException { TtaPensionToetusParing paring = TtaPensionToetusParing.Factory.newInstance(); paring.setIsikukood(isikukood); XRoadMessage<TtaPensionToetusVastus> response = send(new XmlBeansXRoadMessage<TtaPensionToetusParing>(paring), PENSION_TOETUS, null, new PkrCallback(), new PkrExtractor()); return response.getContent(); } public Tkis1Vastus getTkis1(String isikukood, Date algusKuup, Date loppKuup, Date kuup) throws XRoadServiceConsumptionException { Tkis1Paring paring = Tkis1Paring.Factory.newInstance(); paring.setIsikukood(isikukood); paring.setAlgusKuup(getCalendar(algusKuup)); paring.setLoppKuup(getCalendar(loppKuup)); paring.setKuup(getCalendar(kuup)); XRoadMessage<Tkis1Vastus> response = send( new XmlBeansXRoadMessage<Tkis1Paring>(paring), TKIS1, null, new PkrCallback(), new PkrExtractor()); return response.getContent(); } public Tkis2Valjund getTkis2V1(String isikukood, Date algusKuup, Date loppKuup) throws XRoadServiceConsumptionException { Tkis2Sisend sisend = Tkis2Sisend.Factory.newInstance(); sisend.setIsikukood(isikukood); sisend.setPerAlgus(getCalendar(algusKuup)); sisend.setPerLopp(getCalendar(loppKuup)); XRoadMessage<Tkis2Valjund> response = send(new XmlBeansXRoadMessage<Tkis2Sisend>(sisend), TKIS2, "v1"); return response.getContent(); } private Calendar getCalendar(Date kuup) { if (kuup == null ) { return null; } Calendar cal = Calendar.getInstance(); cal.setTime(kuup); return cal; } private class PkrCallback extends CustomCallback { public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException { callback.doWithMessage(message); if (useTestDatabase) { SOAPUtil.substitute(message, getDatabase(), TEST_DATABASE); } } } public class PkrExtractor extends CustomExtractor { public Object extractData(WebServiceMessage message) throws IOException, TransformerException { if (useTestDatabase) { SOAPUtil.substitute(message, TEST_DATABASE, getDatabase()); } return extractor.extractData(message); } } }