package de.rwth.idsg.bikeman.ixsi.processor.subscription.complete; import de.rwth.idsg.bikeman.ixsi.ErrorFactory; import de.rwth.idsg.bikeman.ixsi.dto.PlaceAvailabilityResponseDTO; import de.rwth.idsg.bikeman.ixsi.store.PlaceAvailabilityStore; import de.rwth.idsg.bikeman.ixsi.processor.api.SubscriptionRequestMessageProcessor; import de.rwth.idsg.bikeman.ixsi.processor.query.user.PlaceAvailabilityRequestProcessor; import de.rwth.idsg.bikeman.ixsi.repository.QueryIXSIRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import xjc.schema.ixsi.CompletePlaceAvailabilityRequestType; import xjc.schema.ixsi.CompletePlaceAvailabilityResponseType; import xjc.schema.ixsi.ErrorType; import xjc.schema.ixsi.PlaceAvailabilityType; import java.util.List; /** * @author Sevket Goekay <goekay@dbis.rwth-aachen.de> * @since 26.09.2014 */ @Component public class CompletePlaceAvailabilityRequestProcessor implements SubscriptionRequestMessageProcessor<CompletePlaceAvailabilityRequestType, CompletePlaceAvailabilityResponseType> { @Autowired private PlaceAvailabilityStore placeAvailabilityStore; @Autowired private QueryIXSIRepository queryIXSIRepository; @Autowired private PlaceAvailabilityRequestProcessor placeAvailabilityRequestProcessor; @Override public Class<CompletePlaceAvailabilityRequestType> getProcessingClass() { return CompletePlaceAvailabilityRequestType.class; } @Override public CompletePlaceAvailabilityResponseType process(CompletePlaceAvailabilityRequestType request, String systemId) { try { List<String> ids = placeAvailabilityStore.getSubscriptions(systemId); if (ids.isEmpty()) { return buildError(ErrorFactory.Sys.invalidRequest("No subscriptions", null)); } List<PlaceAvailabilityResponseDTO> dtos = queryIXSIRepository.placeAvailability(ids); List<PlaceAvailabilityType> availabilities = placeAvailabilityRequestProcessor.getPlaceAvailabilities(dtos); // for now, assume that client system is always able to process the full message // therefore do not split messages! return new CompletePlaceAvailabilityResponseType() .withLast(true) .withMessageBlockID("none") .withPlaceAvailability(availabilities); } catch (Exception e) { return buildError(ErrorFactory.Sys.backendFailed(e.getMessage(), null)); } } // ------------------------------------------------------------------------- // Error handling // ------------------------------------------------------------------------- @Override public CompletePlaceAvailabilityResponseType buildError(ErrorType e) { return new CompletePlaceAvailabilityResponseType() .withError(e) .withMessageBlockID("none"); } }