/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2013, MPL CodeInside http://codeinside.ru */ package ru.codeinside.gws3417c; import ru.codeinside.gws.api.Client; import ru.codeinside.gws.api.ClientRequest; import ru.codeinside.gws.api.ClientResponse; import ru.codeinside.gws.api.ExchangeContext; import ru.codeinside.gws.api.InfoSystem; import ru.codeinside.gws.api.Packet; import ru.codeinside.gws.api.XmlTypes; import ru.codeinside.gws3417c.types.AppData; import ru.codeinside.gws3417c.types.data.Curator; import ru.codeinside.gws3417c.types.data.Request; import ru.codeinside.gws3417c.types.data.Response; import ru.codeinside.gws3417c.types.data.ResponseType; import javax.xml.datatype.XMLGregorianCalendar; import javax.xml.namespace.QName; import java.net.URL; import java.text.SimpleDateFormat; import java.util.Date; final public class FssClient implements Client { private Packet createPacket(final Packet.Status status) { final Packet packet = new Packet(); packet.recipient = new InfoSystem("FSSR01001", "ФСС России"); packet.typeCode = Packet.Type.SERVICE; packet.status = status; packet.date = new Date(); packet.exchangeType = "1"; // 1 - Запрос на оказание услуги return packet; } @Override public ru.codeinside.gws.api.Revision getRevision() { return ru.codeinside.gws.api.Revision.rev111111; } @Override public URL getWsdlUrl() { return getClass().getClassLoader().getResource("gws3417/SvedRegisterNoPosob.wsdl"); } @Override public ClientRequest createClientRequest(ExchangeContext ctx) { final String originRequestId = (String) ctx.getVariable("smevOriginRequestId"); final String requestId = (String) ctx.getVariable("smevRequestId"); final Boolean smevPool = (Boolean) ctx.getVariable("smevPool"); final Packet packet = new Packet(); packet.recipient = new InfoSystem("FSSR01001", "ФСС России"); packet.typeCode = Packet.Type.SERVICE; packet.date = new Date(); packet.exchangeType = "1"; // 1 - Запрос на оказание услуги packet.originRequestIdRef = originRequestId; packet.testMsg = (String) ctx.getVariable("smevTest"); final ClientRequest request = new ClientRequest(); request.packet = packet; request.action = new QName("http://fss.ru/SvedRegisterNoPosob", "request"); if (Boolean.TRUE == smevPool) { packet.status = Packet.Status.PING; packet.requestIdRef = requestId; } else { packet.status = Packet.Status.REQUEST; request.appData = createAppData(ctx); } return request; } private String createAppData(ExchangeContext ctx) { final Request request = new Request(); request.setRegionFrom((String) ctx.getVariable("regionFrom")); request.setNameOrganizationFrom((String) ctx.getVariable("nameOrganizationFrom")); request.setINameCiv((String) ctx.getVariable("iNameCiv")); request.setFNameCiv((String) ctx.getVariable("fNameCiv")); request.setMNameCiv((String) ctx.getVariable("mNameCiv")); request.setCodeKind((String) ctx.getVariable("codeKind")); request.setSeriesNumber((String) ctx.getVariable("seriesNumber")); request.setInn((String) ctx.getVariable("inn")); request.setSnils((String) ctx.getVariable("snils")); request.setDocDatCiv(XmlTypes.date((String) ctx.getVariable("docDatCiv"))); request.setStatus(Curator.find((String) ctx.getVariable("status"))); request.setINameKind((String) ctx.getVariable("iNameKind")); request.setFNameKind((String) ctx.getVariable("fNameKind")); request.setMNameKind((String) ctx.getVariable("mNameKind")); request.setDocDatKind(XmlTypes.date((String) ctx.getVariable("docDatKind"))); request.setSbDoc((String) ctx.getVariable("sbDoc")); request.setNbDoc((String) ctx.getVariable("nbDoc")); request.setStartDate(XmlTypes.date((String) ctx.getVariable("startDate"))); request.setEndDate(XmlTypes.date((String) ctx.getVariable("endDate"))); return new XmlTypes(Request.class).toXml(request); } @Override public void processClientResponse(ClientResponse response, ExchangeContext context) { Boolean pooled = (Boolean) context.getVariable("smevPool"); if (response.verifyResult.error != null) { context.setVariable("smevPool", false); context.setVariable("smevError", response.verifyResult.error); } else if (!new QName("http://fss.ru/SvedRegisterNoPosob/request", "requestResponse").equals(response.action)) { context.setVariable("smevPool", false); context.setVariable("smevError", "Неизвестный ответ " + response.action); } else { if (response.packet.status == Packet.Status.ACCEPT) { context.setVariable("smevPool", true); if (Boolean.TRUE != pooled) { context.setVariable("smevRequestId", response.packet.requestIdRef); context.setVariable("smevOriginRequestId", response.packet.originRequestIdRef); } } else { context.setVariable("smevPool", false); AppData appData = (AppData) XmlTypes.elementToBean(response.appData, AppData.class); ResponseType responseType = appData.getТипОтвета(); context.setVariable("hint", appData.getПримечание()); if (responseType == ResponseType.ОШИБКА_В_ЗАПРОСЕ) { context.setVariable("smevError", "Ошибка в запросе: " + appData.getПримечание()); context.setVariable("status", "Ошибка"); } else if (responseType == ResponseType.ОТВЕТ) { context.setVariable("status", "Данные найдены"); final Response r = appData.getОтвет(); context.setVariable("regionTo_response", r.getRegionTo()); context.setVariable("nameOrganizationTo_response", r.getNameOrganizationTo()); context.setVariable("regionToPay_response", r.getRegionToPay()); context.setVariable("iNameCiv_response", r.getINameCiv()); context.setVariable("fNameCiv_response", r.getFNameCiv()); context.setVariable("mNameCiv_response", r.getMNameCiv()); context.setVariable("docDatCiv_response", date(r.getDocDatCiv())); context.setVariable("codeKind_response", r.getCodeKind()); context.setVariable("seriesNumber_response", r.getSeriesNumber()); context.setVariable("inn_response", r.getInn()); context.setVariable("snils_response", r.getSnils()); if (r.getStatus() != null) { context.setVariable("status_response", r.getStatus().value()); } context.setVariable("iNameKind_response", r.getINameKind()); context.setVariable("fNameKind_response", r.getFNameKind()); context.setVariable("mNameKind_response", r.getMNameKind()); context.setVariable("docDatKind_response", date(r.getDocDatKind())); context.setVariable("sbDoc_response", r.getSbDoc()); context.setVariable("nbDoc_response", r.getNbDoc()); context.setVariable("startDate_response", date(r.getStartDate())); context.setVariable("endDate_response", date(r.getEndDate())); context.setVariable("registering_response", r.isRegistering()); context.setVariable("obtainingGrants1_response", r.isObtainingGrants1()); context.setVariable("obtainingGrants2_response", r.isObtainingGrants2()); context.setVariable("monthsNumber_response", r.getMonthsNumber()); } else { context.setVariable("status", "Данные не найдены"); } } } } private String date(final XMLGregorianCalendar calendar) { if (calendar == null) { return null; } return new SimpleDateFormat("dd.MM.yyyy").format(calendar.toGregorianCalendar().getTime()); } }