/*
* 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.gws.api;
import java.util.List;
/**
* Контекст поставщика при обработке запроса от потребителя.
* Обработка запросов потребителя и исполнение заявок происходит асинхронно
* и в разных потоках. Подготовка ответов осуществляется в контексте исполнения заявки.
* <p/>
* Потребитель формирует цепочу запросов для конкретной заявки по правилам идентификации цепочки СМЭВ:
* <ul>
* <li><b>serverRequest.routerPacket.messageId</b> - при использовании сервисов-посредников Ростелекома</li>
* <li><b>serverRequest.packet.originRequestIdRef</b> - при прямом вызове сервиса</li>
* </ul>
*/
public interface RequestContext {
/**
* Флаг начала цепочки.
*
* @return true если запрос является первым в цепочке запросов.
*/
boolean isFirst();
/**
* Идентификатор заявления, связанного с цепочкой.
*
* @return null если цепочка не связана с заявлением, иначе идентификатор заявления.
*/
String getBid();
/**
* Создание контекста подачи заявления.
*
* @param procedureCode код процедуры, которую необходимо исполнить.
* @return контекст подачи заявления.
* @throws ServerException при ошибках с хранилищем заявок, или если процедура не найдена.
*/
DeclarerContext getDeclarerContext(long procedureCode);
/**
* Запрос потребителя, обрабатываемый в текущем контексте.
*
* @return текущий запрос потребителя.
*/
ServerRequest getRequest();
/**
* Получить подготовленное состояние исполнения текущей заявки.
*
* @return ответ с состоянием, либо null если ответ не подготовлен.
* @throws ServerException при ошибках с хранилищем заявок.
*/
ServerResponse getState();
/**
* Получить подготовленный результат исполнения текущей заявки.
*
* @return ответ с результатом, либо null если ответ не подготовлен.
* @throws ServerException при ошибках с хранилищем заявок.
*/
ServerResponse getResult();
/**
* Идентификаторы заявлений, связанные с цепочкой.
*
* @return список идентификаторов заявлений, для которых запущен процесс исполнения.
* @throws ServerException при ошибках с хранилищем заявок.
* @since 1.0.8
*/
List<String> getBids();
/**
* Получить подготовленное состояние исполнения заявки.
*
* @param bid идентификатор заявки.
* @return ответ с состоянием, либо null если ответ не подготовлен.
* @throws ServerException при ошибках с хранилищем заявок.
* @since 1.0.8
*/
ServerResponse getState(String bid);
/**
* Получить подготовленный результат исполнения заявки.
*
* @param bid идентификатор заявки.
* @return ответ с результатом, либо null если ответ не подготовлен.
* @throws ServerException при ошибках с хранилищем заявок.
* @since 1.0.8
*/
ServerResponse getResult(String bid);
}