package com.nortal.jroad.client.aar; import com.nortal.jroad.client.aar.types.ee.riik.xtee.aar.producers.producer.aar.AsutusedParing; import com.nortal.jroad.client.aar.types.ee.riik.xtee.aar.producers.producer.aar.AsutusedParingManus; import com.nortal.jroad.client.aar.types.ee.riik.xtee.aar.producers.producer.aar.AsutusedParingManus.Asutused; import com.nortal.jroad.client.aar.types.ee.riik.xtee.aar.producers.producer.aar.AsutusedVastus; import com.nortal.jroad.client.aar.types.ee.riik.xtee.aar.producers.producer.aar.AsutusedVastusManus; import com.nortal.jroad.client.aar.types.ee.riik.xtee.aar.producers.producer.aar.TaitmisedParing; import com.nortal.jroad.client.aar.types.ee.riik.xtee.aar.producers.producer.aar.TaitmisedParingManus; import com.nortal.jroad.client.aar.types.ee.riik.xtee.aar.producers.producer.aar.TaitmisedParingManus.Taitmised; import com.nortal.jroad.client.aar.types.ee.riik.xtee.aar.producers.producer.aar.TaitmisedVastus; import com.nortal.jroad.client.aar.types.ee.riik.xtee.aar.producers.producer.aar.TaitmisedVastusManus; import com.nortal.jroad.client.exception.XRoadServiceConsumptionException; import com.nortal.jroad.client.service.configuration.XRoadServiceConfiguration; import com.nortal.jroad.client.service.configuration.DelegatingXRoadServiceConfiguration; import com.nortal.jroad.client.service.XRoadDatabaseService; import com.nortal.jroad.model.XRoadAttachment; import com.nortal.jroad.model.XRoadMessage; import com.nortal.jroad.model.XmlBeansXRoadMessage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlObject; import org.apache.xmlbeans.XmlOptions; import org.springframework.stereotype.Service; /** * Aar andmekogu xtee teenused * * @author Lauri Lättemäe * @date 08.10.2010 */ @Service("aarXTeeService") public class AarXTeeServiceImpl extends XRoadDatabaseService implements AarXTeeService { public AsutusedVastusManus asutusedParingRegistriKoodiJargi(final String paringuIsikukood, String regKood) throws XRoadServiceConsumptionException { if (regKood == null) { throw new RuntimeException("Asutuse registrikood peab olema määratud"); } AsutusedVastusManus responseObj = null; XRoadMessage<AsutusedParing> request = new XmlBeansXRoadMessage<AsutusedParing>(AsutusedParing.Factory.newInstance()); AsutusedParingManus paringManus = AsutusedParingManus.Factory.newInstance(); Asutused asutused = paringManus.addNewAsutused(); asutused.setReKood(regKood); request.getContent().setAsutused(paringManus.xmlText().getBytes()); AarXTeeConsumerCallback callback = new AarXTeeConsumerCallback(); callback.addElementAttribute("asutused", "xsi:type", "xsd:base64Binary"); // Teeme päringu final XRoadServiceConfiguration xteeConfiguration = xRoadServiceConfigurationProvider.createConfiguration(getDatabase(), getDatabase(), "asutused", "v1"); DelegatingXRoadServiceConfiguration configuration = new DelegatingXRoadServiceConfiguration(xteeConfiguration) { @Override public String getIdCode() { // Kasutame konfis etteantud isikukoodi String idCode = super.getIdCode(); if (paringuIsikukood != null) { idCode = paringuIsikukood.startsWith("EE") ? paringuIsikukood : "EE" + paringuIsikukood; } return idCode; } }; XRoadMessage<AsutusedVastus> response = xRoadConsumer.sendRequest(request, configuration, callback, null); if (!response.getAttachments().isEmpty()) { ByteArrayOutputStream out = this.readResponse(response.getAttachments().get(0)); try { responseObj = (AsutusedVastusManus) XmlObject.Factory.parse(XmlObject.Factory.parse(new String(out.toByteArray(), "UTF-8")).toString(), new XmlOptions().setDocumentType(AsutusedVastusManus.type)); } catch(XmlException ex) { ex.printStackTrace(); } catch(UnsupportedEncodingException ex) { ex.printStackTrace(); } } return responseObj; } public TaitmisedVastusManus isikuRollidAsutuses(final String paringuIsikukood, Long asutusId, String isikukood, RollEnum... rollid) throws XRoadServiceConsumptionException { if (asutusId == null || (rollid == null || rollid.length == 0)) { throw new RuntimeException("Kohustuslikud parameetrid: asutuseId ja rollid peavad olema määratud"); } TaitmisedVastusManus responseObj = null; XRoadMessage<TaitmisedParing> request = new XmlBeansXRoadMessage<TaitmisedParing>(TaitmisedParing.Factory.newInstance()); TaitmisedParingManus paringManus = TaitmisedParingManus.Factory.newInstance(); Taitmised taitmised = paringManus.addNewTaitmised(); taitmised.addNewAsutused().addId2(asutusId.toString()); for (RollEnum roll : rollid) { taitmised.addNewOigused().setOigus(roll.getValue()); } if (isikukood != null) { taitmised.setIsikukood(isikukood); } request.getContent().setTaitmised(paringManus.xmlText().getBytes()); AarXTeeConsumerCallback callback = new AarXTeeConsumerCallback(); callback.addElementAttribute("taitmised", "xsi:type", "xsd:base64Binary"); // Teeme päringu final XRoadServiceConfiguration xteeConfiguration = xRoadServiceConfigurationProvider.createConfiguration(getDatabase(), getDatabase(), "taitmised", "v1"); DelegatingXRoadServiceConfiguration configuration = new DelegatingXRoadServiceConfiguration(xteeConfiguration) { @Override public String getIdCode() { // Kasutame konfis etteantud isikukoodi String idCode = super.getIdCode(); if (paringuIsikukood != null) { idCode = paringuIsikukood.startsWith("EE") ? paringuIsikukood : "EE" + paringuIsikukood; } return idCode; } }; XRoadMessage<TaitmisedVastus> response = xRoadConsumer.sendRequest(request, configuration, callback, null); if (!response.getAttachments().isEmpty()) { ByteArrayOutputStream out = this.readResponse(response.getAttachments().get(0)); try { responseObj = (TaitmisedVastusManus) XmlObject.Factory.parse(XmlObject.Factory.parse(new String(out.toByteArray(), "UTF-8")).toString(), new XmlOptions().setDocumentType(TaitmisedVastusManus.type)); } catch(XmlException ex) { ex.printStackTrace(); } catch(UnsupportedEncodingException ex) { ex.printStackTrace(); } } return responseObj; } private ByteArrayOutputStream readResponse(XRoadAttachment attachment) { ByteArrayOutputStream out = null; if (attachment != null) { try { out = new ByteArrayOutputStream(); byte[] buf = new byte[4 * 1024]; int bytesRead; InputStream is = attachment.getInputStream(); while ((bytesRead = is.read(buf)) != -1) { out.write(buf, 0, bytesRead); } out.flush(); out.close(); } catch(IOException ex) { ex.printStackTrace(); } } return out; } }